Commit graph

1165 commits

Author SHA1 Message Date
Paul Gauthier
1f07de8670 Added hint to Use --encoding to set the unicode encoding. 2023-07-17 08:19:21 -03:00
Amer Amayreh
a2d8bed155
Handled Issue #114
Handled the UnboundLocalError tat occurs when wrong prams are passed to the `/run` command
2023-07-17 06:04:47 +03:00
Paul Gauthier
9c40fc3415 Path.cwd 2023-07-16 18:27:17 -03:00
Paul Gauthier
6f7936e5f8 Merge branch 'main' into gitignore 2023-07-16 18:06:01 -03:00
Paul Gauthier
e7f35e2cf7 Apparently prompt toolkit can not express control-enter? 2023-07-16 14:26:49 -03:00
Paul Gauthier
36af2a51af Change keybinding from ControlJ to ControlM for inserting a new line.
# Aider chat conversation:
2023-07-16 14:15:18 -03:00
Paul Gauthier
6244df8352 aider: get_input now treats control+enter as a newline with prompt toolkit KeyBindings.
# Aider chat conversation:

USER: can we have `get_input` treat control+enter as a newline with prompt toolkit KeyBindings

ASSISTANT: To implement this feature, we need to modify the `get_input` method in the `InputOutput` class in the `aider/io.py` file. We will use the `KeyBindings` class from `prompt_toolkit.keys` to bind the `Control+Enter` key combination to insert a newline.

Here are the changes:

```python
aider/io.py
<<<<<<< ORIGINAL
from prompt_toolkit.shortcuts import CompleteStyle, PromptSession, prompt
=======
from prompt_toolkit.shortcuts import CompleteStyle, PromptSession, prompt
from prompt_toolkit.keys import Keys
from prompt_toolkit.key_binding import KeyBindings
>>>>>>> UPDATED

```python
aider/io.py
<<<<<<< ORIGINAL
            session = PromptSession(**session_kwargs)
=======
            kb = KeyBindings()

            @kb.add(Keys.ControlJ, eager=True)
            def _(event):
                event.current_buffer.insert_text('\n')

            session = PromptSession(key_bindings=kb, **session_kwargs)
>>>>>>> UPDATED
```

This code creates a new `KeyBindings` instance and adds a binding for `Control+Enter` (represented by `Keys.ControlJ`) to insert a newline. Then, it passes this key bindings instance to the `PromptSession` constructor.
2023-07-16 14:12:01 -03:00
Paul Gauthier
5dc7bc055e Whitelist more /cmds for no dirty commit 2023-07-16 13:42:36 -03:00
Paul Gauthier
180ca7c464 test_main_git_ignore 2023-07-16 12:56:55 -03:00
Paul Gauthier
0f14947a4c test_check_gitignore 2023-07-16 12:49:27 -03:00
Paul Gauthier
67554196f3 Merge branch 'main' into gitignore 2023-07-16 12:21:16 -03:00
Paul Gauthier
4b8211554a set version to 0.9.0-dev 2023-07-16 09:47:35 -03:00
Paul Gauthier
a57c651c05 version bump to 0.9.0 2023-07-16 09:47:24 -03:00
Paul Gauthier
b0ec8205f3 Add pattern to .gitignore if user confirms, by appending it to the existing content of the file.
# Aider chat conversation:
2023-07-15 13:36:57 -07:00
Paul Gauthier
c08527dbbc refac; added check_gitignore 2023-07-15 13:34:58 -07:00
Paul Gauthier
e9806bb84f Merge branch 'main' into gitignore 2023-07-15 10:59:33 -07:00
Paul Gauthier
1b10751585 More informative retry messages 2023-07-15 10:19:48 -07:00
Paul Gauthier
6f460bd050 wip 2023-07-14 20:10:10 -07:00
Paul Gauthier
fb444d9954 aider: Refactored open calls in aider/main.py to use Path.read_text() and Path.write_text() with encoding='utf-8'.
# Aider chat conversation:

USER: add encoding=utf-8 to all that

ASSISTANT: To add the encoding declaration to the `aider/main.py` file, we need to add `# -*- coding: utf-8 -*-` at the top of the file.

Here is the proposed change:

^C KeyboardInterrupt

USER: add encoding=utf-8 to those open calls

ASSISTANT: To specify the encoding as utf-8 in the open calls in the `aider/main.py` file, we need to add `encoding='utf-8'` to each open call.

Here are the proposed changes:

```python
aider/main.py
<<<<<<< ORIGINAL
    if git_root:
        gitignore_file = Path(git_root) / ".gitignore"
        if gitignore_file.exists():
            with open(gitignore_file, "r") as file:
                content = file.read()
            if ".aider*" not in content:
                with open(gitignore_file, "a") as file:
                    file.write("\n.aider*")
        else:
            with open(gitignore
^C KeyboardInterrupt

USER: actually use Path.read_text and be sure to encoding=utf-8

ASSISTANT: To use `Path.read_text()` with `encoding='utf-8'` in the `aider/main.py` file, we need to replace the `open()` calls with `Path.read_text()` and `Path.write_text()`.

Here are the proposed changes:

```python
aider/main.py
<<<<<<< ORIGINAL
    if git_root:
        gitignore_file = Path(git_root) / ".gitignore"
        if gitignore_file.exists():
            with open(gitignore_file, "r") as file:
                content = file.read()
            if ".aider*" not in content:
                with open(gitignore_file, "a") as file:
                    file.write("\n.aider*")
        else:
            with open(gitignore_file, "w") as file:
                file.write(".aider*")
=======
    if git_root:
        gitignore_file = Path(git_root) / ".gitignore"
        if gitignore_file.exists():
            content = gitignore_file.read_text(encoding='utf-8')
            if ".aider*" not in content:
                gitignore_file.write_text("\n.aider*", encoding='utf-8', append=True)
        else:
            gitignore_file.write_text(".aider*", encoding='utf-8')
>>>>>>> UPDATED
```

This code will open the `.gitignore` file in the git root directory, check if `.aider*` is present, and if not, append it to the file. If the `.gitignore` file does not exist, it will create one and add `.aider*` to it. The encoding is specified as utf-8.
2023-07-14 20:06:34 -07:00
Paul Gauthier
90df92bffa aider: Add .aider* to .gitignore if it is not already present.
# Aider chat conversation:

USER: do the TODO

ASSISTANT: To complete the TODO task in the `aider/main.py` file, we need to check if `.aider*` is in `.gitignore`, and if not, add it.

Here are the steps to do this:

1. Open the `.gitignore` file in the root directory of the git repository.
2. Read the contents of the file.
3. Check if `.aider*` is present in the file.
4. If not, append `.aider*` to the file and save it.

However, the code in `aider/main.py` does not currently have the ability to modify files. We need to add a function to handle this.

Here is the proposed change:

```python
aider/main.py
<<<<<<< ORIGINAL
    if git_root:
        # TODO: check if .aider* is in .gitignore, add it if not
        pass
=======
    if git_root:
        gitignore_file = Path(git_root) / ".gitignore"
        if gitignore_file.exists():
            with open(gitignore_file, "r") as file:
                content = file.read()
            if ".aider*" not in content:
                with open(gitignore_file, "a") as file:
                    file.write("\n.aider*")
        else:
            with open(gitignore_file, "w") as file:
                file.write(".aider*")
>>>>>>> UPDATED
```

This code will open the `.gitignore` file in the git root directory, check if `.aider*` is present, and if not, append it to the file. If the `.gitignore` file does not exist, it will create one and add `.aider*` to it.
2023-07-14 20:05:11 -07:00
Paul Gauthier
78d9d014f2 fix bug blocking addition of subdir filename mentions 2023-07-14 20:00:04 -07:00
Paul Gauthier
14ce1d43c7 strip the correct fence 2023-07-13 15:54:54 -07:00
Paul Gauthier
12c3c1ed68 updated editblock to use all the fences 2023-07-13 15:48:13 -07:00
Paul Gauthier
b685695fef Anchor the cache to the project root 2023-07-13 14:01:07 -07:00
Paul Gauthier
b05b8e2087 Improved output when no changes made to git tracked files 2023-07-13 13:41:34 -07:00
Paul Gauthier
7c3bbcede6 aider: Scrub sensitive information from verbose logs before saving.
# Aider chat conversation:

USER: open api key saved in log file when run in verbose mode #94
Open
joshuavial opened this issue 8 hours ago · 2 comments
Comments
@joshuavial
joshuavial commented 8 hours ago
Seems like it would be easy for someone (particularly new to coding) to forget to add the log file to a .gitignore and inadvertently publish their key. Maybe the logger should scrub the keys before saving?

ASSISTANT: To address this issue, we need to modify the `aider/main.py` file. We will add a function to scrub sensitive information like the OpenAI API key from the verbose logs before they are saved.

Here are the steps:

1. Define a new function `scrub_sensitive_info` that takes a string as input and replaces sensitive information (like the OpenAI API key) with a placeholder like `***`.
2. Call this function before logging the arguments in verbose mode.

Here is the *edit block* for these changes:

```python
aider/main.py
<<<<<<< ORIGINAL
    if args.verbose:
        show = parser.format_values()
        io.tool_output(show)
        io.tool_output("Option settings:")
        for arg, val in sorted(vars(args).items()):
            io.tool_output(f"  - {arg}: {val}")
=======
    def scrub_sensitive_info(text):
        # Replace sensitive information with placeholder
        return text.replace(args.openai_api_key, '***')

    if args.verbose:
        show = scrub_sensitive_info(parser.format_values())
        io.tool_output(show)
        io.tool_output("Option settings:")
        for arg, val in sorted(vars(args).items()):
            io.tool_output(f"  - {arg}: {scrub_sensitive_info(str(val))}")
>>>>>>> UPDATED
```

This change will ensure that the OpenAI API key is not saved in the log file when the program is run in verbose mode.
2023-07-13 12:28:05 -07:00
Paul Gauthier
6ab4f09a3a cleanup --show-repo-map 2023-07-13 10:06:46 -07:00
Paul Gauthier
f78977cd5b finished --show-repo-map 2023-07-12 13:46:27 -07:00
Paul Gauthier
a10b08e8de aider: Add --show-map option to print the repo map and then exit.
# Aider chat conversation:

USER: add --show-map which will just print the repomap and then exit

ASSISTANT: To add the `--show-map` option, we need to modify the `aider/main.py` file. We will add a new argument to the argument parser and then use this argument to conditionally print the repo map and exit.

Here are the changes:

```python
aider/main.py
<<<<<<< ORIGINAL
    ##########
    other_group = parser.add_argument_group("Other Settings")
    other_group.add_argument(
        "--version",
        action="version",
        version=f"%(prog)s {__version__}",
        help="Show the version number and exit",
    )
=======
    ##########
    other_group = parser.add_argument_group("Other Settings")
    other_group.add_argument(
        "--show-map",
        action="store_true",
        help="Print the repo map and exit",
        default=False,
    )
    other_group.add_argument(
        "--version",
        action="version",
        version=f"%(prog)s {__version__}",
        help="Show the version number and exit",
    )
>>>>>>> UPDATED
```

```python
aider/main.py
<<<<<<< ORIGINAL
    coder = Coder.create(
        main_model,
        args.edit_format,
        io,
        ##
        fnames=args.files,
        pretty=args.pretty,
        show_diffs=args.show_diffs,
        auto_commits=args.auto_commits,
        dirty_commits=args.dirty_commits,
        dry_run=args.dry_run,
        map_tokens=args.map_tokens,
        verbose=args.verbose,
        assistant_output_color=args.assistant_output_color,
        code_theme=args.code_theme,
        stream=args.stream,
        use_git=args.git,
    )
=======
    if args.show_map:
        repo_map = RepoMap(map_tokens=args.map_tokens, root=git_root, main_model=main_model, io=io, verbose=args.verbose)
        print(repo_map)
        sys.exit(0)
    else:
        coder = Coder.create(
            main_model,
            args.edit_format,
            io,
            ##
            fnames=args.files,
            pretty=args.pretty,
            show_diffs=args.show_diffs,
            auto_commits=args.auto_commits,
            dirty_commits=args.dirty_commits,
            dry_run=args.dry_run,
            map_tokens=args.map_tokens,
            verbose=args.verbose,
            assistant_output_color=args.assistant_output_color,
            code_theme=args.code_theme,
            stream=args.stream,
            use_git=args.git,
        )
>>>>>>> UPDATED
```

Please note that the `RepoMap` class is used to create the repo map. If the `--show-map` option is used, the repo map is printed and the program exits. If not, the program continues as before.
2023-07-12 13:40:10 -07:00
paul-gauthier
549a1a7640
Merge pull request #88 from paul-gauthier/azure
Added args to configure openai module to access Azure
2023-07-12 07:32:10 -07:00
Paul Gauthier
d5497dcf27 set version to 0.8.3-dev 2023-07-11 18:48:15 -07:00
Paul Gauthier
a70ffddacc version bump to 0.8.3 2023-07-11 18:48:02 -07:00
Paul Gauthier
c54740c617 Show version on startup 2023-07-11 18:44:28 -07:00
Paul Gauthier
d97707a5c0 Added --openai-api-engine 2023-07-11 15:11:35 -07:00
Paul Gauthier
084132a5f8 refactor initialization of openai into main 2023-07-11 15:06:50 -07:00
Paul Gauthier
fa3283802a aider: Add --openai-api-type, --openai-api-version, and openai-api-deployment-id args, pass them into coder.create.
# Aider chat conversation:

USER: add --openai-api-type --openai-api-version and openai-api-deployment-id args. pass them into coder.create

ASSISTANT: To add the `--openai-api-type`, `--openai-api-version`, and `--openai-api-deployment-id` arguments and pass them into `coder.create`, we need to modify the `aider/main.py` file.

Here are the steps:

1. Add the new arguments to the argument parser in the `main` function.
2. Pass these arguments to the `coder.create` function.

Here are the changes:

```python
aider/main.py
<<<<<<< ORIGINAL
    ##########
    model_group = parser.add_argument_group("Advanced Model Settings")
    model_group.add_argument(
        "--openai-api-base",
        metavar="OPENAI_API_BASE",
        default="https://api.openai.com/v1",
        help="Specify the OpenAI API base endpoint (default: https://api.openai.com/v1)",
    )
=======
    ##########
    model_group = parser.add_argument_group("Advanced Model Settings")
    model_group.add_argument(
        "--openai-api-base",
        metavar="OPENAI_API_BASE",
        default="https://api.openai.com/v1",
        help="Specify the OpenAI API base endpoint (default: https://api.openai.com/v1)",
    )
    model_group.add_argument(
        "--openai-api-type",
        metavar="OPENAI_API_TYPE",
        help="Specify the OpenAI API type",
    )
    model_group.add_argument(
        "--openai-api-version",
        metavar="OPENAI_API_VERSION",
        help="Specify the OpenAI API version",
    )
    model_group.add_argument(
        "--openai-api-deployment-id",
        metavar="OPENAI_API_DEPLOYMENT_ID",
        help="Specify the OpenAI API deployment ID",
    )
>>>>>>> UPDATED
```

```python
aider/main.py
<<<<<<< ORIGINAL
    coder = Coder.create(
        main_model,
        args.edit_format,
        io,
        args.openai_api_key,
        args.openai_api_base,
        ##
        fnames=args.files,
        pretty=args.pretty,
        show_diffs=args.show_diffs,
        auto_commits=args.auto_commits,
        dirty_commits=args.dirty_commits,
        dry_run=args.dry_run,
        map_tokens=args.map_tokens,
        verbose=args.verbose,
        assistant_output_color=args.assistant_output_color,
        code_theme=args.code_theme,
        stream=args.stream,
        use_git=args.git,
    )
=======
    coder = Coder.create(
        main_model,
        args.edit_format,
        io,
        args.openai_api_key,
        args.openai_api_base,
        ##
        fnames=args.files,
        pretty=args.pretty,
        show_diffs=args.show_diffs,
        auto_commits=args.auto_commits,
        dirty_commits=args.dirty_commits,
        dry_run=args.dry_run,
        map_tokens=args.map_tokens,
        verbose=args.verbose,
        assistant_output_color=args.assistant_output_color,
        code_theme=args.code_theme,
        stream=args.stream,
        use_git=args.git,
        openai_api_type=args.openai_api_type,
        openai_api_version=args.openai_api_version,
        openai_api_deployment_id=args.openai_api_deployment_id,
    )
>>>>>>> UPDATED
```

Please note that these changes assume that the `Coder.create` method and the `Coder` class are prepared to receive and handle these new arguments. If they are not, additional changes will be needed in the `Coder` class and its subclasses.
2023-07-11 14:56:36 -07:00
Paul Gauthier
967cb1bd8d notify when preparing dirty commit; skip if /exit or /commit is input 2023-07-11 13:21:36 -07:00
paul-gauthier
7e17059b59
Merge pull request #81 from paul-gauthier/issue-73
Prioritize how to allocate code blocks to filenames in wholefile
2023-07-11 09:44:33 -07:00
Paul Gauthier
1f83a89192 Merge branch 'main' into issue-73 2023-07-11 09:36:34 -07:00
Paul Gauthier
68c26a60ef get tracked files by traversing the tree 2023-07-11 09:08:37 -07:00
Paul Gauthier
73f5fb05e5 Make rel_repo_dir robust on windows when cwd and the repo are on different drives 2023-07-11 08:40:30 -07:00
Paul Gauthier
7c0ac4d92f Tell git to stop quoting the paths in ls-files 2023-07-11 08:12:44 -07:00
Paul Gauthier
c4e4d071fa Handle the case where we fail to expand a dir 2023-07-11 08:12:18 -07:00
Paul Gauthier
aacbcd32d4 bugfix live diffs in wholefile coder 2023-07-11 07:27:49 -07:00
Paul Gauthier
6fc276d336 prioritize how to allocate code blocks to filenames 2023-07-10 17:42:23 -07:00
Paul Gauthier
fd8a6c4e2f refactor 2023-07-10 17:03:31 -07:00
Paul Gauthier
c20b1bb073 Merge remote-tracking branch 'origin/main' 2023-07-10 15:34:04 -07:00
Paul Gauthier
9bc450977d Remove last naive open()s 2023-07-10 15:32:23 -07:00
Paul Gauthier
baa11b0c0d cleanup 2023-07-10 15:23:25 -07:00
Paul Gauthier
56f465b7f3 move the expansion into glob_filtered_to_repo so it works in drop too 2023-07-10 15:17:41 -07:00