@oh-my-pi/pi-coding-agent 8.1.0 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -1
- package/docs/session.md +111 -46
- package/examples/custom-tools/hello/index.ts +1 -1
- package/examples/custom-tools/todo/index.ts +3 -4
- package/examples/extensions/api-demo.ts +0 -1
- package/examples/extensions/chalk-logger.ts +2 -3
- package/examples/extensions/hello.ts +0 -1
- package/examples/extensions/pirate.ts +0 -1
- package/examples/extensions/plan-mode.ts +15 -16
- package/examples/extensions/todo.ts +3 -4
- package/examples/extensions/tools.ts +1 -2
- package/examples/extensions/with-deps/index.ts +0 -1
- package/examples/hooks/auto-commit-on-exit.ts +1 -2
- package/examples/hooks/confirm-destructive.ts +0 -1
- package/examples/hooks/custom-compaction.ts +1 -2
- package/examples/hooks/dirty-repo-guard.ts +0 -1
- package/examples/hooks/file-trigger.ts +3 -4
- package/examples/hooks/git-checkpoint.ts +0 -1
- package/examples/hooks/handoff.ts +3 -4
- package/examples/hooks/permission-gate.ts +1 -2
- package/examples/hooks/protected-paths.ts +1 -2
- package/examples/hooks/qna.ts +2 -3
- package/examples/hooks/snake.ts +4 -5
- package/examples/hooks/status-line.ts +0 -1
- package/examples/sdk/01-minimal.ts +2 -3
- package/examples/sdk/02-custom-model.ts +2 -3
- package/examples/sdk/03-custom-prompt.ts +3 -4
- package/examples/sdk/04-skills.ts +2 -3
- package/examples/sdk/06-extensions.ts +1 -2
- package/examples/sdk/06-hooks.ts +6 -7
- package/examples/sdk/07-context-files.ts +0 -1
- package/examples/sdk/08-prompt-templates.ts +0 -1
- package/examples/sdk/08-slash-commands.ts +0 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +0 -1
- package/examples/sdk/10-settings.ts +0 -1
- package/examples/sdk/11-sessions.ts +0 -1
- package/package.json +51 -23
- package/scripts/format-prompts.ts +0 -1
- package/src/capability/context-file.ts +2 -3
- package/src/capability/extension-module.ts +2 -3
- package/src/capability/extension.ts +2 -3
- package/src/capability/fs.ts +20 -21
- package/src/capability/hook.ts +2 -3
- package/src/capability/index.ts +15 -16
- package/src/capability/instruction.ts +2 -3
- package/src/capability/mcp.ts +2 -3
- package/src/capability/prompt.ts +2 -3
- package/src/capability/rule.ts +2 -3
- package/src/capability/settings.ts +1 -2
- package/src/capability/skill.ts +2 -3
- package/src/capability/slash-command.ts +2 -3
- package/src/capability/ssh.ts +2 -3
- package/src/capability/system-prompt.ts +2 -3
- package/src/capability/tool.ts +2 -3
- package/src/cli/args.ts +5 -6
- package/src/cli/config-cli.ts +6 -7
- package/src/cli/file-processor.ts +19 -17
- package/src/cli/jupyter-cli.ts +105 -0
- package/src/cli/list-models.ts +10 -11
- package/src/cli/plugin-cli.ts +20 -21
- package/src/cli/session-picker.ts +2 -3
- package/src/cli/setup-cli.ts +2 -3
- package/src/cli/stats-cli.ts +2 -3
- package/src/cli/update-cli.ts +25 -22
- package/src/commit/agentic/agent.ts +21 -23
- package/src/commit/agentic/fallback.ts +9 -9
- package/src/commit/agentic/index.ts +30 -38
- package/src/commit/agentic/state.ts +1 -6
- package/src/commit/agentic/tools/analyze-file.ts +15 -15
- package/src/commit/agentic/tools/git-file-diff.ts +3 -3
- package/src/commit/agentic/tools/git-hunk.ts +7 -7
- package/src/commit/agentic/tools/git-overview.ts +5 -5
- package/src/commit/agentic/tools/index.ts +14 -14
- package/src/commit/agentic/tools/propose-changelog.ts +6 -6
- package/src/commit/agentic/tools/propose-commit.ts +8 -8
- package/src/commit/agentic/tools/recent-commits.ts +2 -2
- package/src/commit/agentic/tools/split-commit.ts +19 -23
- package/src/commit/agentic/topo-sort.ts +1 -1
- package/src/commit/agentic/trivial.ts +3 -3
- package/src/commit/agentic/validation.ts +12 -12
- package/src/commit/analysis/conventional.ts +7 -11
- package/src/commit/analysis/index.ts +4 -4
- package/src/commit/analysis/scope.ts +4 -4
- package/src/commit/analysis/summary.ts +7 -9
- package/src/commit/analysis/validation.ts +1 -1
- package/src/commit/changelog/detect.ts +6 -6
- package/src/commit/changelog/generate.ts +7 -9
- package/src/commit/changelog/index.ts +13 -13
- package/src/commit/changelog/parse.ts +2 -2
- package/src/commit/cli.ts +1 -1
- package/src/commit/git/diff.ts +3 -3
- package/src/commit/git/index.ts +19 -24
- package/src/commit/index.ts +1 -1
- package/src/commit/map-reduce/index.ts +9 -9
- package/src/commit/map-reduce/map-phase.ts +19 -34
- package/src/commit/map-reduce/reduce-phase.ts +9 -11
- package/src/commit/message.ts +2 -2
- package/src/commit/model-selection.ts +3 -7
- package/src/commit/pipeline.ts +20 -22
- package/src/commit/utils/exclusions.ts +3 -3
- package/src/config/file-lock.ts +17 -7
- package/src/config/keybindings.ts +6 -8
- package/src/config/model-registry.ts +55 -37
- package/src/config/model-resolver.ts +18 -19
- package/src/config/prompt-templates.ts +11 -11
- package/src/config/settings-manager.ts +50 -34
- package/src/config.ts +60 -62
- package/src/cursor.ts +11 -9
- package/src/discovery/agents-md.ts +11 -12
- package/src/discovery/builtin.ts +68 -73
- package/src/discovery/claude.ts +41 -42
- package/src/discovery/cline.ts +11 -12
- package/src/discovery/codex.ts +52 -53
- package/src/discovery/cursor.ts +9 -10
- package/src/discovery/gemini.ts +17 -22
- package/src/discovery/github.ts +13 -14
- package/src/discovery/helpers.ts +35 -34
- package/src/discovery/index.ts +16 -18
- package/src/discovery/mcp-json.ts +8 -9
- package/src/discovery/ssh.ts +8 -9
- package/src/discovery/vscode.ts +4 -5
- package/src/discovery/windsurf.ts +6 -7
- package/src/exa/company.ts +1 -2
- package/src/exa/index.ts +2 -3
- package/src/exa/linkedin.ts +1 -2
- package/src/exa/mcp-client.ts +14 -16
- package/src/exa/render.ts +10 -11
- package/src/exa/researcher.ts +1 -2
- package/src/exa/search.ts +1 -2
- package/src/exa/types.ts +0 -1
- package/src/exa/websets.ts +1 -2
- package/src/exec/bash-executor.ts +3 -4
- package/src/exec/exec.ts +0 -1
- package/src/export/custom-share.ts +5 -6
- package/src/export/html/index.ts +24 -21
- package/src/export/ttsr.ts +2 -3
- package/src/extensibility/custom-commands/bundled/review/index.ts +7 -8
- package/src/extensibility/custom-commands/loader.ts +17 -14
- package/src/extensibility/custom-commands/types.ts +1 -2
- package/src/extensibility/custom-tools/loader.ts +10 -11
- package/src/extensibility/custom-tools/types.ts +6 -7
- package/src/extensibility/custom-tools/wrapper.ts +2 -3
- package/src/extensibility/extensions/loader.ts +75 -53
- package/src/extensibility/extensions/runner.ts +11 -12
- package/src/extensibility/extensions/types.ts +19 -26
- package/src/extensibility/extensions/wrapper.ts +3 -4
- package/src/extensibility/hooks/index.ts +1 -1
- package/src/extensibility/hooks/loader.ts +8 -9
- package/src/extensibility/hooks/runner.ts +7 -8
- package/src/extensibility/hooks/tool-wrapper.ts +0 -1
- package/src/extensibility/hooks/types.ts +10 -17
- package/src/extensibility/plugins/doctor.ts +3 -3
- package/src/extensibility/plugins/installer.ts +27 -27
- package/src/extensibility/plugins/loader.ts +59 -56
- package/src/extensibility/plugins/manager.ts +211 -171
- package/src/extensibility/plugins/parser.ts +1 -1
- package/src/extensibility/plugins/paths.ts +8 -8
- package/src/extensibility/skills.ts +63 -60
- package/src/extensibility/slash-commands.ts +10 -10
- package/src/index.ts +46 -46
- package/src/internal-urls/agent-protocol.ts +21 -11
- package/src/internal-urls/artifact-protocol.ts +17 -13
- package/src/internal-urls/router.ts +1 -2
- package/src/internal-urls/rule-protocol.ts +3 -4
- package/src/internal-urls/skill-protocol.ts +3 -4
- package/src/ipy/executor.ts +14 -10
- package/src/ipy/gateway-coordinator.ts +79 -90
- package/src/ipy/kernel.ts +32 -30
- package/src/ipy/modules.ts +13 -13
- package/src/lsp/client.ts +21 -10
- package/src/lsp/clients/biome-client.ts +1 -2
- package/src/lsp/clients/index.ts +3 -3
- package/src/lsp/clients/lsp-linter-client.ts +4 -5
- package/src/lsp/config.ts +15 -15
- package/src/lsp/edits.ts +4 -5
- package/src/lsp/index.ts +43 -44
- package/src/lsp/lspmux.ts +8 -8
- package/src/lsp/render.ts +10 -16
- package/src/lsp/utils.ts +3 -3
- package/src/main.ts +55 -34
- package/src/mcp/client.ts +2 -3
- package/src/mcp/config.ts +5 -6
- package/src/mcp/json-rpc.ts +0 -1
- package/src/mcp/loader.ts +3 -4
- package/src/mcp/manager.ts +17 -18
- package/src/mcp/tool-bridge.ts +4 -9
- package/src/mcp/tool-cache.ts +2 -3
- package/src/mcp/transports/http.ts +2 -4
- package/src/mcp/transports/stdio.ts +1 -2
- package/src/migrations.ts +60 -49
- package/src/modes/components/armin.ts +4 -5
- package/src/modes/components/assistant-message.ts +6 -6
- package/src/modes/components/bash-execution.ts +7 -8
- package/src/modes/components/bordered-loader.ts +3 -3
- package/src/modes/components/branch-summary-message.ts +3 -3
- package/src/modes/components/compaction-summary-message.ts +3 -3
- package/src/modes/components/countdown-timer.ts +0 -1
- package/src/modes/components/custom-message.ts +5 -5
- package/src/modes/components/diff.ts +1 -1
- package/src/modes/components/dynamic-border.ts +2 -2
- package/src/modes/components/extensions/extension-dashboard.ts +6 -7
- package/src/modes/components/extensions/extension-list.ts +2 -3
- package/src/modes/components/extensions/inspector-panel.ts +3 -4
- package/src/modes/components/extensions/state-manager.ts +25 -26
- package/src/modes/components/extensions/types.ts +1 -2
- package/src/modes/components/footer.ts +47 -43
- package/src/modes/components/history-search.ts +2 -2
- package/src/modes/components/hook-editor.ts +3 -4
- package/src/modes/components/hook-input.ts +2 -3
- package/src/modes/components/hook-message.ts +5 -5
- package/src/modes/components/hook-selector.ts +2 -3
- package/src/modes/components/keybinding-hints.ts +2 -3
- package/src/modes/components/login-dialog.ts +2 -2
- package/src/modes/components/model-selector.ts +12 -12
- package/src/modes/components/oauth-selector.ts +2 -2
- package/src/modes/components/plugin-settings.ts +20 -20
- package/src/modes/components/python-execution.ts +7 -8
- package/src/modes/components/queue-mode-selector.ts +3 -3
- package/src/modes/components/read-tool-group.ts +2 -2
- package/src/modes/components/session-selector.ts +4 -4
- package/src/modes/components/settings-defs.ts +77 -69
- package/src/modes/components/settings-selector.ts +16 -16
- package/src/modes/components/show-images-selector.ts +2 -2
- package/src/modes/components/status-line/segments.ts +4 -4
- package/src/modes/components/status-line/separators.ts +1 -1
- package/src/modes/components/status-line/types.ts +2 -2
- package/src/modes/components/status-line-segment-editor.ts +7 -8
- package/src/modes/components/status-line.ts +12 -12
- package/src/modes/components/theme-selector.ts +8 -7
- package/src/modes/components/thinking-selector.ts +4 -4
- package/src/modes/components/todo-display.ts +2 -2
- package/src/modes/components/todo-reminder.ts +4 -4
- package/src/modes/components/tool-execution.ts +11 -16
- package/src/modes/components/tree-selector.ts +11 -11
- package/src/modes/components/ttsr-notification.ts +5 -5
- package/src/modes/components/user-message-selector.ts +1 -1
- package/src/modes/components/user-message.ts +1 -1
- package/src/modes/components/visual-truncate.ts +0 -1
- package/src/modes/components/welcome.ts +4 -4
- package/src/modes/controllers/command-controller.ts +46 -47
- package/src/modes/controllers/event-controller.ts +16 -20
- package/src/modes/controllers/extension-ui-controller.ts +40 -46
- package/src/modes/controllers/input-controller.ts +17 -18
- package/src/modes/controllers/selector-controller.ts +103 -91
- package/src/modes/index.ts +3 -3
- package/src/modes/interactive-mode.ts +27 -29
- package/src/modes/print-mode.ts +12 -13
- package/src/modes/rpc/rpc-client.ts +7 -8
- package/src/modes/rpc/rpc-mode.ts +24 -25
- package/src/modes/rpc/rpc-types.ts +3 -4
- package/src/modes/theme/mermaid-cache.ts +2 -2
- package/src/modes/theme/theme.ts +128 -53
- package/src/modes/types.ts +10 -10
- package/src/modes/utils/ui-helpers.ts +17 -17
- package/src/patch/applicator.ts +18 -19
- package/src/patch/diff.ts +1 -2
- package/src/patch/fuzzy.ts +1 -2
- package/src/patch/index.ts +10 -11
- package/src/patch/normalize.ts +4 -4
- package/src/patch/normative.ts +1 -2
- package/src/patch/parser.ts +8 -9
- package/src/patch/shared.ts +12 -13
- package/src/sdk.ts +60 -63
- package/src/session/agent-session.ts +83 -84
- package/src/session/agent-storage.ts +11 -11
- package/src/session/artifacts.ts +8 -9
- package/src/session/auth-storage.ts +25 -29
- package/src/session/compaction/branch-summarization.ts +7 -10
- package/src/session/compaction/compaction.ts +8 -19
- package/src/session/compaction/utils.ts +6 -9
- package/src/session/history-storage.ts +10 -10
- package/src/session/messages.ts +4 -5
- package/src/session/session-manager.ts +76 -65
- package/src/session/session-storage.ts +57 -69
- package/src/session/storage-migration.ts +2 -3
- package/src/session/streaming-output.ts +2 -2
- package/src/ssh/connection-manager.ts +43 -50
- package/src/ssh/ssh-executor.ts +2 -2
- package/src/ssh/sshfs-mount.ts +11 -18
- package/src/system-prompt.ts +27 -34
- package/src/task/agents.ts +45 -30
- package/src/task/commands.ts +6 -7
- package/src/task/discovery.ts +39 -76
- package/src/task/executor.ts +14 -15
- package/src/task/index.ts +33 -36
- package/src/task/output-manager.ts +3 -4
- package/src/task/parallel.ts +0 -1
- package/src/task/render.ts +19 -20
- package/src/task/subprocess-tool-registry.ts +1 -2
- package/src/task/worker-protocol.ts +3 -3
- package/src/task/worker.ts +32 -38
- package/src/task/worktree.ts +19 -19
- package/src/tools/ask.ts +8 -9
- package/src/tools/bash-interceptor.ts +1 -5
- package/src/tools/bash.ts +19 -18
- package/src/tools/calculator.ts +12 -12
- package/src/tools/complete.ts +3 -4
- package/src/tools/context.ts +2 -2
- package/src/tools/fetch.ts +23 -26
- package/src/tools/find.ts +15 -16
- package/src/tools/gemini-image.ts +14 -14
- package/src/tools/grep.ts +27 -27
- package/src/tools/index.ts +78 -56
- package/src/tools/list-limit.ts +1 -1
- package/src/tools/ls.ts +7 -7
- package/src/tools/notebook.ts +5 -5
- package/src/tools/output-meta.ts +3 -4
- package/src/tools/output-utils.ts +1 -1
- package/src/tools/path-utils.ts +5 -5
- package/src/tools/python.ts +36 -37
- package/src/tools/read.ts +23 -23
- package/src/tools/render-utils.ts +8 -9
- package/src/tools/renderers.ts +6 -7
- package/src/tools/review.ts +8 -11
- package/src/tools/ssh.ts +31 -30
- package/src/tools/todo-write.ts +13 -13
- package/src/tools/tool-errors.ts +3 -3
- package/src/tools/tool-result.ts +3 -8
- package/src/tools/write.ts +11 -16
- package/src/tui/code-cell.ts +3 -9
- package/src/tui/file-list.ts +3 -4
- package/src/tui/output-block.ts +1 -2
- package/src/tui/status-line.ts +2 -3
- package/src/tui/tree-list.ts +2 -3
- package/src/tui/types.ts +1 -2
- package/src/tui/utils.ts +2 -3
- package/src/utils/changelog.ts +9 -10
- package/src/utils/clipboard.ts +11 -11
- package/src/utils/file-mentions.ts +4 -10
- package/src/utils/frontmatter.ts +6 -3
- package/src/utils/fuzzy.ts +2 -2
- package/src/utils/image-convert.ts +1 -1
- package/src/utils/image-resize.ts +1 -1
- package/src/utils/mime.ts +2 -2
- package/src/utils/shell-snapshot.ts +11 -13
- package/src/utils/shell.ts +4 -5
- package/src/utils/title-generator.ts +8 -9
- package/src/utils/tools-manager.ts +23 -23
- package/src/vendor/photon/index.js +1099 -1059
- package/src/vendor/photon/photon_rs_bg.wasm +0 -0
- package/src/web/scrapers/artifacthub.ts +1 -1
- package/src/web/scrapers/arxiv.ts +2 -2
- package/src/web/scrapers/bluesky.ts +2 -2
- package/src/web/scrapers/cheatsh.ts +1 -1
- package/src/web/scrapers/chocolatey.ts +2 -2
- package/src/web/scrapers/choosealicense.ts +5 -5
- package/src/web/scrapers/cisa-kev.ts +1 -1
- package/src/web/scrapers/crossref.ts +2 -2
- package/src/web/scrapers/devto.ts +3 -3
- package/src/web/scrapers/discogs.ts +3 -4
- package/src/web/scrapers/discourse.ts +1 -1
- package/src/web/scrapers/dockerhub.ts +1 -1
- package/src/web/scrapers/fdroid.ts +2 -2
- package/src/web/scrapers/firefox-addons.ts +3 -3
- package/src/web/scrapers/flathub.ts +1 -1
- package/src/web/scrapers/github.ts +3 -3
- package/src/web/scrapers/gitlab.ts +4 -4
- package/src/web/scrapers/hackernews.ts +2 -2
- package/src/web/scrapers/huggingface.ts +1 -1
- package/src/web/scrapers/iacr.ts +2 -2
- package/src/web/scrapers/index.ts +0 -1
- package/src/web/scrapers/jetbrains-marketplace.ts +1 -1
- package/src/web/scrapers/lemmy.ts +2 -2
- package/src/web/scrapers/maven.ts +2 -2
- package/src/web/scrapers/mdn.ts +2 -4
- package/src/web/scrapers/metacpan.ts +2 -2
- package/src/web/scrapers/musicbrainz.ts +1 -2
- package/src/web/scrapers/npm.ts +1 -1
- package/src/web/scrapers/nuget.ts +2 -2
- package/src/web/scrapers/nvd.ts +3 -3
- package/src/web/scrapers/ollama.ts +7 -9
- package/src/web/scrapers/opencorporates.ts +2 -2
- package/src/web/scrapers/openlibrary.ts +6 -6
- package/src/web/scrapers/orcid.ts +0 -1
- package/src/web/scrapers/osv.ts +2 -2
- package/src/web/scrapers/packagist.ts +1 -1
- package/src/web/scrapers/pubmed.ts +1 -2
- package/src/web/scrapers/rawg.ts +2 -2
- package/src/web/scrapers/readthedocs.ts +1 -2
- package/src/web/scrapers/repology.ts +2 -2
- package/src/web/scrapers/rfc.ts +1 -1
- package/src/web/scrapers/searchcode.ts +2 -2
- package/src/web/scrapers/semantic-scholar.ts +1 -1
- package/src/web/scrapers/snapcraft.ts +2 -2
- package/src/web/scrapers/sourcegraph.ts +1 -1
- package/src/web/scrapers/spdx.ts +3 -3
- package/src/web/scrapers/spotify.ts +0 -1
- package/src/web/scrapers/twitter.ts +1 -1
- package/src/web/scrapers/types.ts +1 -2
- package/src/web/scrapers/utils.ts +5 -5
- package/src/web/scrapers/wikidata.ts +3 -3
- package/src/web/scrapers/youtube.ts +9 -14
- package/src/web/search/auth.ts +4 -9
- package/src/web/search/index.ts +11 -21
- package/src/web/search/providers/anthropic.ts +3 -9
- package/src/web/search/providers/exa.ts +6 -10
- package/src/web/search/providers/perplexity.ts +5 -5
- package/src/web/search/render.ts +16 -18
- package/scripts/generate-wasm-b64.ts +0 -24
- package/src/commit/map-reduce/.map-phase.ts.kate-swp +0 -0
- package/src/task/.executor.ts.kate-swp +0 -0
- package/src/vendor/photon/photon_rs_bg.wasm.b64.js +0 -1
|
@@ -5,11 +5,9 @@
|
|
|
5
5
|
* .bashrc/.zshrc, which can be sourced before each command to provide a familiar
|
|
6
6
|
* shell experience.
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import { homedir, tmpdir } from "node:os";
|
|
12
|
-
import { join } from "node:path";
|
|
8
|
+
import * as fs from "node:fs";
|
|
9
|
+
import * as os from "node:os";
|
|
10
|
+
import * as path from "node:path";
|
|
13
11
|
import { postmortem } from "@oh-my-pi/pi-utils";
|
|
14
12
|
import { $ } from "bun";
|
|
15
13
|
|
|
@@ -19,10 +17,10 @@ let cachedSnapshotPath: string | null = null;
|
|
|
19
17
|
* Get the user's shell config file path.
|
|
20
18
|
*/
|
|
21
19
|
function getShellConfigFile(shell: string): string {
|
|
22
|
-
const home = homedir();
|
|
23
|
-
if (shell.includes("zsh")) return join(home, ".zshrc");
|
|
24
|
-
if (shell.includes("bash")) return join(home, ".bashrc");
|
|
25
|
-
return join(home, ".profile");
|
|
20
|
+
const home = os.homedir();
|
|
21
|
+
if (shell.includes("zsh")) return path.join(home, ".zshrc");
|
|
22
|
+
if (shell.includes("bash")) return path.join(home, ".bashrc");
|
|
23
|
+
return path.join(home, ".profile");
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
/**
|
|
@@ -131,12 +129,12 @@ export async function getOrCreateSnapshot(
|
|
|
131
129
|
const rcFile = getShellConfigFile(shell);
|
|
132
130
|
|
|
133
131
|
// Create snapshot directory
|
|
134
|
-
const snapshotDir = join(tmpdir(), "omp-shell-snapshots");
|
|
135
|
-
await mkdir(snapshotDir, { recursive: true });
|
|
132
|
+
const snapshotDir = path.join(os.tmpdir(), "omp-shell-snapshots");
|
|
133
|
+
await fs.promises.mkdir(snapshotDir, { recursive: true });
|
|
136
134
|
|
|
137
135
|
// Generate unique snapshot path
|
|
138
136
|
const shellName = shell.includes("zsh") ? "zsh" : shell.includes("bash") ? "bash" : "sh";
|
|
139
|
-
const snapshotPath = join(snapshotDir, `snapshot-${shellName}-${crypto.randomUUID()}.sh`);
|
|
137
|
+
const snapshotPath = path.join(snapshotDir, `snapshot-${shellName}-${crypto.randomUUID()}.sh`);
|
|
140
138
|
|
|
141
139
|
// Generate and execute snapshot script
|
|
142
140
|
const script = await generateSnapshotScript(shell, snapshotPath, rcFile);
|
|
@@ -167,6 +165,6 @@ export function getSnapshotSourceCommand(snapshotPath: string | null): string {
|
|
|
167
165
|
|
|
168
166
|
postmortem.register("shell-snapshot", () => {
|
|
169
167
|
if (cachedSnapshotPath) {
|
|
170
|
-
unlinkSync(cachedSnapshotPath);
|
|
168
|
+
fs.unlinkSync(cachedSnapshotPath);
|
|
171
169
|
}
|
|
172
170
|
});
|
package/src/utils/shell.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { access } from "node:fs/promises";
|
|
3
|
-
import { SettingsManager } from "@oh-my-pi/pi-coding-agent/config/settings-manager";
|
|
1
|
+
import * as fs from "node:fs";
|
|
4
2
|
import { $ } from "bun";
|
|
3
|
+
import { SettingsManager } from "../config/settings-manager";
|
|
5
4
|
|
|
6
5
|
export interface ShellConfig {
|
|
7
6
|
shell: string;
|
|
@@ -17,7 +16,7 @@ let cachedShellConfig: ShellConfig | null = null;
|
|
|
17
16
|
*/
|
|
18
17
|
async function isExecutable(path: string): Promise<boolean> {
|
|
19
18
|
try {
|
|
20
|
-
await access(path, constants.X_OK);
|
|
19
|
+
await fs.promises.access(path, fs.constants.X_OK);
|
|
21
20
|
return true;
|
|
22
21
|
} catch {
|
|
23
22
|
return false;
|
|
@@ -138,7 +137,7 @@ export async function getShellConfig(): Promise<ShellConfig> {
|
|
|
138
137
|
` 1. Install Git for Windows: https://git-scm.com/download/win\n` +
|
|
139
138
|
` 2. Add your bash to PATH (Cygwin, MSYS2, etc.)\n` +
|
|
140
139
|
` 3. Set shellPath in ~/.omp/agent/settings.json\n\n` +
|
|
141
|
-
`Searched Git Bash in:\n${paths.map(
|
|
140
|
+
`Searched Git Bash in:\n${paths.map(p => ` ${p}`).join("\n")}`,
|
|
142
141
|
);
|
|
143
142
|
}
|
|
144
143
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generate session titles using a smol, fast model.
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
4
|
import type { Api, Model } from "@oh-my-pi/pi-ai";
|
|
6
5
|
import { completeSimple } from "@oh-my-pi/pi-ai";
|
|
7
|
-
import type { ModelRegistry } from "@oh-my-pi/pi-coding-agent/config/model-registry";
|
|
8
|
-
import { parseModelString, SMOL_MODEL_PRIORITY } from "@oh-my-pi/pi-coding-agent/config/model-resolver";
|
|
9
|
-
import { renderPromptTemplate } from "@oh-my-pi/pi-coding-agent/config/prompt-templates";
|
|
10
|
-
import titleSystemPrompt from "@oh-my-pi/pi-coding-agent/prompts/system/title-system.md" with { type: "text" };
|
|
11
6
|
import { logger } from "@oh-my-pi/pi-utils";
|
|
7
|
+
import type { ModelRegistry } from "../config/model-registry";
|
|
8
|
+
import { parseModelString, SMOL_MODEL_PRIORITY } from "../config/model-resolver";
|
|
9
|
+
import { renderPromptTemplate } from "../config/prompt-templates";
|
|
10
|
+
import titleSystemPrompt from "../prompts/system/title-system.md" with { type: "text" };
|
|
12
11
|
|
|
13
12
|
const TITLE_SYSTEM_PROMPT = renderPromptTemplate(titleSystemPrompt);
|
|
14
13
|
|
|
@@ -21,7 +20,7 @@ function getTitleModelCandidates(registry: ModelRegistry, savedSmolModel?: strin
|
|
|
21
20
|
const candidates: Model<Api>[] = [];
|
|
22
21
|
const addCandidate = (model?: Model<Api>): void => {
|
|
23
22
|
if (!model) return;
|
|
24
|
-
const exists = candidates.some(
|
|
23
|
+
const exists = candidates.some(candidate => candidate.provider === model.provider && candidate.id === model.id);
|
|
25
24
|
if (!exists) {
|
|
26
25
|
candidates.push(model);
|
|
27
26
|
}
|
|
@@ -30,17 +29,17 @@ function getTitleModelCandidates(registry: ModelRegistry, savedSmolModel?: strin
|
|
|
30
29
|
if (savedSmolModel) {
|
|
31
30
|
const parsed = parseModelString(savedSmolModel);
|
|
32
31
|
if (parsed) {
|
|
33
|
-
const match = availableModels.find(
|
|
32
|
+
const match = availableModels.find(model => model.provider === parsed.provider && model.id === parsed.id);
|
|
34
33
|
addCandidate(match);
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
for (const pattern of SMOL_MODEL_PRIORITY) {
|
|
39
38
|
const needle = pattern.toLowerCase();
|
|
40
|
-
const exactMatch = availableModels.find(
|
|
39
|
+
const exactMatch = availableModels.find(model => model.id.toLowerCase() === needle);
|
|
41
40
|
addCandidate(exactMatch);
|
|
42
41
|
|
|
43
|
-
const fuzzyMatch = availableModels.find(
|
|
42
|
+
const fuzzyMatch = availableModels.find(model => model.id.toLowerCase().includes(needle));
|
|
44
43
|
addCandidate(fuzzyMatch);
|
|
45
44
|
}
|
|
46
45
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import { createTempDir, logger } from "@oh-my-pi/pi-utils";
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { logger, TempDir } from "@oh-my-pi/pi-utils";
|
|
6
5
|
import { $ } from "bun";
|
|
6
|
+
import { APP_NAME, getBinDir } from "../config";
|
|
7
7
|
|
|
8
8
|
const TOOLS_DIR = getBinDir();
|
|
9
9
|
|
|
@@ -148,7 +148,7 @@ export async function getToolPath(tool: ToolName): Promise<string | null> {
|
|
|
148
148
|
if (!config) return null;
|
|
149
149
|
|
|
150
150
|
// Check our tools directory first
|
|
151
|
-
const localPath = join(TOOLS_DIR, config.binaryName + (platform() === "win32" ? ".exe" : ""));
|
|
151
|
+
const localPath = path.join(TOOLS_DIR, config.binaryName + (os.platform() === "win32" ? ".exe" : ""));
|
|
152
152
|
if (await Bun.file(localPath).exists()) {
|
|
153
153
|
return localPath;
|
|
154
154
|
}
|
|
@@ -187,8 +187,8 @@ async function downloadTool(tool: ToolName): Promise<string> {
|
|
|
187
187
|
const config = TOOLS[tool];
|
|
188
188
|
if (!config) throw new Error(`Unknown tool: ${tool}`);
|
|
189
189
|
|
|
190
|
-
const plat = platform();
|
|
191
|
-
const architecture = arch();
|
|
190
|
+
const plat = os.platform();
|
|
191
|
+
const architecture = os.arch();
|
|
192
192
|
|
|
193
193
|
// Get latest version
|
|
194
194
|
const version = await getLatestVersion(config.repo);
|
|
@@ -200,64 +200,64 @@ async function downloadTool(tool: ToolName): Promise<string> {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
// Create tools directory
|
|
203
|
-
await mkdir(TOOLS_DIR, { recursive: true });
|
|
203
|
+
await fs.mkdir(TOOLS_DIR, { recursive: true });
|
|
204
204
|
|
|
205
205
|
const downloadUrl = `https://github.com/${config.repo}/releases/download/${config.tagPrefix}${version}/${assetName}`;
|
|
206
206
|
const binaryExt = plat === "win32" ? ".exe" : "";
|
|
207
|
-
const binaryPath = join(TOOLS_DIR, config.binaryName + binaryExt);
|
|
207
|
+
const binaryPath = path.join(TOOLS_DIR, config.binaryName + binaryExt);
|
|
208
208
|
|
|
209
209
|
// Handle direct binary downloads (no archive extraction needed)
|
|
210
210
|
if (config.isDirectBinary) {
|
|
211
211
|
await downloadFile(downloadUrl, binaryPath);
|
|
212
212
|
if (plat !== "win32") {
|
|
213
|
-
await chmod(binaryPath, 0o755);
|
|
213
|
+
await fs.chmod(binaryPath, 0o755);
|
|
214
214
|
}
|
|
215
215
|
return binaryPath;
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
// Download archive
|
|
219
|
-
const archivePath = join(TOOLS_DIR, assetName);
|
|
219
|
+
const archivePath = path.join(TOOLS_DIR, assetName);
|
|
220
220
|
await downloadFile(downloadUrl, archivePath);
|
|
221
221
|
|
|
222
222
|
// Extract
|
|
223
|
-
const tmp = await
|
|
223
|
+
const tmp = await TempDir.create("@omp-tools-extract-");
|
|
224
224
|
|
|
225
225
|
try {
|
|
226
226
|
if (assetName.endsWith(".tar.gz")) {
|
|
227
227
|
const archive = new Bun.Archive(await Bun.file(archivePath).arrayBuffer());
|
|
228
228
|
const files = await archive.files();
|
|
229
|
-
for (const [
|
|
230
|
-
await Bun.write(join(tmp.path,
|
|
229
|
+
for (const [filePath, file] of files) {
|
|
230
|
+
await Bun.write(path.join(tmp.path(), filePath), file);
|
|
231
231
|
}
|
|
232
232
|
} else if (assetName.endsWith(".zip")) {
|
|
233
|
-
await mkdir(tmp.path, { recursive: true });
|
|
234
|
-
await $`unzip -o ${archivePath} -d ${tmp.path}`.quiet().nothrow();
|
|
233
|
+
await fs.mkdir(tmp.path(), { recursive: true });
|
|
234
|
+
await $`unzip -o ${archivePath} -d ${tmp.path()}`.quiet().nothrow();
|
|
235
235
|
}
|
|
236
236
|
|
|
237
237
|
// Find the binary in extracted files
|
|
238
238
|
// ast-grep releases the binary directly in the zip, not in a subdirectory
|
|
239
239
|
let extractedBinary: string;
|
|
240
240
|
if (tool === "sg") {
|
|
241
|
-
extractedBinary = join(tmp.path, config.binaryName + binaryExt);
|
|
241
|
+
extractedBinary = path.join(tmp.path(), config.binaryName + binaryExt);
|
|
242
242
|
} else {
|
|
243
|
-
const extractedDir = join(tmp.path, assetName.replace(/\.(tar\.gz|zip)$/, ""));
|
|
244
|
-
extractedBinary = join(extractedDir, config.binaryName + binaryExt);
|
|
243
|
+
const extractedDir = path.join(tmp.path(), assetName.replace(/\.(tar\.gz|zip)$/, ""));
|
|
244
|
+
extractedBinary = path.join(extractedDir, config.binaryName + binaryExt);
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
if (await Bun.file(extractedBinary).exists()) {
|
|
248
|
-
await rename(extractedBinary, binaryPath);
|
|
248
|
+
await fs.rename(extractedBinary, binaryPath);
|
|
249
249
|
} else {
|
|
250
250
|
throw new Error(`Binary not found in archive: ${extractedBinary}`);
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
// Make executable (Unix only)
|
|
254
254
|
if (plat !== "win32") {
|
|
255
|
-
await chmod(binaryPath, 0o755);
|
|
255
|
+
await fs.chmod(binaryPath, 0o755);
|
|
256
256
|
}
|
|
257
257
|
} finally {
|
|
258
258
|
// Cleanup
|
|
259
259
|
await tmp.remove();
|
|
260
|
-
await rm(archivePath, { force: true });
|
|
260
|
+
await fs.rm(archivePath, { force: true });
|
|
261
261
|
}
|
|
262
262
|
|
|
263
263
|
return binaryPath;
|