@oh-my-pi/pi-coding-agent 8.0.20 → 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 +125 -0
- 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 +54 -23
- package/scripts/format-prompts.ts +0 -1
- package/src/capability/context-file.ts +3 -4
- package/src/capability/extension-module.ts +3 -4
- package/src/capability/extension.ts +3 -4
- package/src/capability/fs.ts +20 -21
- package/src/capability/hook.ts +3 -4
- package/src/capability/index.ts +15 -16
- package/src/capability/instruction.ts +3 -4
- package/src/capability/mcp.ts +3 -4
- package/src/capability/prompt.ts +3 -4
- package/src/capability/rule.ts +3 -4
- package/src/capability/settings.ts +2 -3
- package/src/capability/skill.ts +3 -4
- package/src/capability/slash-command.ts +3 -4
- package/src/capability/ssh.ts +3 -4
- package/src/capability/system-prompt.ts +3 -4
- package/src/capability/tool.ts +3 -4
- 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 -25
- 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 +307 -0
- package/src/commit/agentic/fallback.ts +96 -0
- package/src/commit/agentic/index.ts +351 -0
- package/src/commit/agentic/prompts/analyze-file.md +22 -0
- package/src/commit/agentic/prompts/session-user.md +26 -0
- package/src/commit/agentic/prompts/split-confirm.md +1 -0
- package/src/commit/agentic/prompts/system.md +40 -0
- package/src/commit/agentic/state.ts +69 -0
- package/src/commit/agentic/tools/analyze-file.ts +131 -0
- package/src/commit/agentic/tools/git-file-diff.ts +194 -0
- package/src/commit/agentic/tools/git-hunk.ts +50 -0
- package/src/commit/agentic/tools/git-overview.ts +84 -0
- package/src/commit/agentic/tools/index.ts +56 -0
- package/src/commit/agentic/tools/propose-changelog.ts +128 -0
- package/src/commit/agentic/tools/propose-commit.ts +154 -0
- package/src/commit/agentic/tools/recent-commits.ts +81 -0
- package/src/commit/agentic/tools/split-commit.ts +280 -0
- package/src/commit/agentic/topo-sort.ts +44 -0
- package/src/commit/agentic/trivial.ts +51 -0
- package/src/commit/agentic/validation.ts +200 -0
- package/src/commit/analysis/conventional.ts +165 -0
- package/src/commit/analysis/index.ts +4 -0
- package/src/commit/analysis/scope.ts +242 -0
- package/src/commit/analysis/summary.ts +112 -0
- package/src/commit/analysis/validation.ts +66 -0
- package/src/commit/changelog/detect.ts +36 -0
- package/src/commit/changelog/generate.ts +110 -0
- package/src/commit/changelog/index.ts +233 -0
- package/src/commit/changelog/parse.ts +44 -0
- package/src/commit/cli.ts +93 -0
- package/src/commit/git/diff.ts +148 -0
- package/src/commit/git/errors.ts +11 -0
- package/src/commit/git/index.ts +212 -0
- package/src/commit/git/operations.ts +53 -0
- package/src/commit/index.ts +5 -0
- package/src/commit/map-reduce/index.ts +63 -0
- package/src/commit/map-reduce/map-phase.ts +178 -0
- package/src/commit/map-reduce/reduce-phase.ts +145 -0
- package/src/commit/map-reduce/utils.ts +9 -0
- package/src/commit/message.ts +11 -0
- package/src/commit/model-selection.ts +80 -0
- package/src/commit/pipeline.ts +240 -0
- package/src/commit/prompts/analysis-system.md +155 -0
- package/src/commit/prompts/analysis-user.md +41 -0
- package/src/commit/prompts/changelog-system.md +56 -0
- package/src/commit/prompts/changelog-user.md +19 -0
- package/src/commit/prompts/file-observer-system.md +26 -0
- package/src/commit/prompts/file-observer-user.md +9 -0
- package/src/commit/prompts/reduce-system.md +60 -0
- package/src/commit/prompts/reduce-user.md +17 -0
- package/src/commit/prompts/summary-retry.md +4 -0
- package/src/commit/prompts/summary-system.md +52 -0
- package/src/commit/prompts/summary-user.md +13 -0
- package/src/commit/prompts/types-description.md +2 -0
- package/src/commit/types.ts +109 -0
- package/src/commit/utils/exclusions.ts +42 -0
- package/src/config/file-lock.ts +121 -0
- package/src/config/keybindings.ts +6 -8
- package/src/config/model-registry.ts +65 -38
- package/src/config/model-resolver.ts +18 -19
- package/src/config/prompt-templates.ts +11 -11
- package/src/config/settings-manager.ts +141 -50
- package/src/config.ts +64 -66
- 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 +22 -24
- 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 +18 -15
- package/src/extensibility/custom-commands/types.ts +2 -3
- package/src/extensibility/custom-tools/loader.ts +11 -12
- package/src/extensibility/custom-tools/types.ts +7 -8
- package/src/extensibility/custom-tools/wrapper.ts +2 -3
- package/src/extensibility/extensions/loader.ts +76 -54
- package/src/extensibility/extensions/runner.ts +11 -12
- package/src/extensibility/extensions/types.ts +20 -27
- package/src/extensibility/extensions/wrapper.ts +3 -4
- package/src/extensibility/hooks/index.ts +1 -1
- package/src/extensibility/hooks/loader.ts +9 -10
- package/src/extensibility/hooks/runner.ts +7 -8
- package/src/extensibility/hooks/tool-wrapper.ts +0 -1
- package/src/extensibility/hooks/types.ts +11 -18
- 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 +54 -54
- 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 +109 -9
- 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 +99 -61
- package/src/lsp/utils.ts +3 -3
- package/src/main.ts +71 -37
- 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 +6 -7
- 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 +63 -52
- package/src/modes/components/armin.ts +4 -5
- package/src/modes/components/assistant-message.ts +33 -5
- 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 +16 -19
- package/src/modes/components/tree-selector.ts +12 -12
- 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 +31 -31
- 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 -28
- package/src/modes/rpc/rpc-types.ts +3 -4
- package/src/modes/theme/mermaid-cache.ts +89 -0
- package/src/modes/theme/theme.ts +130 -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 +11 -18
- 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 +43 -16
- package/src/prompts/tools/task.md +2 -0
- package/src/sdk.ts +100 -65
- package/src/session/agent-session.ts +84 -85
- package/src/session/agent-storage.ts +43 -39
- package/src/session/artifacts.ts +32 -10
- package/src/session/auth-storage.ts +50 -39
- 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 +14 -56
- 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 +28 -35
- 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 +40 -34
- package/src/task/output-manager.ts +93 -0
- package/src/task/parallel.ts +0 -1
- package/src/task/render.ts +24 -30
- package/src/task/subprocess-tool-registry.ts +1 -2
- package/src/task/worker-protocol.ts +3 -3
- package/src/task/worker.ts +33 -39
- package/src/task/worktree.ts +19 -19
- package/src/tools/ask.ts +41 -20
- package/src/tools/bash-interceptor.ts +1 -5
- package/src/tools/bash.ts +91 -97
- package/src/tools/calculator.ts +49 -47
- package/src/tools/complete.ts +4 -5
- package/src/tools/context.ts +2 -2
- package/src/tools/fetch.ts +84 -124
- package/src/tools/find.ts +94 -98
- package/src/tools/gemini-image.ts +14 -14
- package/src/tools/grep.ts +100 -116
- package/src/tools/index.ts +80 -55
- package/src/tools/list-limit.ts +1 -1
- package/src/tools/ls.ts +44 -70
- package/src/tools/notebook.ts +51 -67
- package/src/tools/output-meta.ts +3 -4
- package/src/tools/output-utils.ts +2 -2
- package/src/tools/path-utils.ts +5 -5
- package/src/tools/python.ts +104 -217
- package/src/tools/read.ts +92 -33
- package/src/tools/render-utils.ts +8 -23
- package/src/tools/renderers.ts +6 -7
- package/src/tools/review.ts +8 -11
- package/src/tools/ssh.ts +69 -49
- package/src/tools/todo-write.ts +37 -25
- package/src/tools/tool-errors.ts +3 -3
- package/src/tools/tool-result.ts +3 -8
- package/src/tools/write.ts +99 -75
- package/src/tui/code-cell.ts +109 -0
- package/src/tui/file-list.ts +47 -0
- package/src/tui/index.ts +11 -0
- package/src/tui/output-block.ts +72 -0
- package/src/tui/status-line.ts +39 -0
- package/src/tui/tree-list.ts +55 -0
- package/src/tui/types.ts +16 -0
- package/src/tui/utils.ts +48 -0
- 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 +5 -10
- 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 +129 -175
- package/tsconfig.json +0 -42
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
* 1. Copy this file to ~/.omp/agent/extensions/ (legacy: ~/.pi/agent/extensions/) or your project's .omp/extensions/
|
|
9
9
|
* 2. Use /tools to open the tool selector
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
11
|
import type { ExtensionAPI, ExtensionContext } from "@oh-my-pi/pi-coding-agent";
|
|
13
12
|
import { getSettingsListTheme } from "@oh-my-pi/pi-coding-agent";
|
|
14
13
|
import { Container, type SettingItem, SettingsList } from "@oh-my-pi/pi-tui";
|
|
@@ -71,7 +70,7 @@ export default function toolsExtension(pi: ExtensionAPI) {
|
|
|
71
70
|
|
|
72
71
|
await ctx.ui.custom((tui, theme, done) => {
|
|
73
72
|
// Build settings items for each tool
|
|
74
|
-
const items: SettingItem[] = allTools.map(
|
|
73
|
+
const items: SettingItem[] = allTools.map(tool => ({
|
|
75
74
|
id: tool,
|
|
76
75
|
label: tool,
|
|
77
76
|
currentValue: enabledTools.has(tool) ? "enabled" : "disabled",
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Automatically commits changes when the agent exits.
|
|
5
5
|
* Uses the last assistant message to generate a commit message.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
export default function (pi: HookAPI) {
|
|
@@ -27,7 +26,7 @@ export default function (pi: HookAPI) {
|
|
|
27
26
|
if (Array.isArray(content)) {
|
|
28
27
|
lastAssistantText = content
|
|
29
28
|
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
30
|
-
.map(
|
|
29
|
+
.map(c => c.text)
|
|
31
30
|
.join("\n");
|
|
32
31
|
}
|
|
33
32
|
break;
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Prompts for confirmation before destructive session actions (clear, switch, branch).
|
|
5
5
|
* Demonstrates how to cancel session events using the before_* events.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import type { HookAPI, SessionBeforeSwitchEvent, SessionMessageEntry } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
export default function (pi: HookAPI) {
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
* Usage:
|
|
13
13
|
* omp --hook examples/hooks/custom-compaction.ts
|
|
14
14
|
*/
|
|
15
|
-
|
|
16
15
|
import { complete, getModel } from "@oh-my-pi/pi-ai";
|
|
17
16
|
import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
|
|
18
17
|
import { convertToLlm, serializeConversation } from "@oh-my-pi/pi-coding-agent";
|
|
@@ -89,7 +88,7 @@ ${conversationText}
|
|
|
89
88
|
|
|
90
89
|
const summary = response.content
|
|
91
90
|
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
92
|
-
.map(
|
|
91
|
+
.map(c => c.text)
|
|
93
92
|
.join("\n");
|
|
94
93
|
|
|
95
94
|
if (!summary.trim()) {
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Prevents session changes when there are uncommitted git changes.
|
|
5
5
|
* Useful to ensure work is committed before switching context.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import type { HookAPI, HookContext } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
async function checkDirtyRepo(pi: HookAPI, ctx: HookContext, action: string): Promise<{ cancel: boolean } | undefined> {
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* Usage:
|
|
8
8
|
* echo "Run the tests" > /tmp/agent-trigger.txt
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
10
|
import * as fs from "node:fs";
|
|
12
11
|
import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
|
|
13
12
|
|
|
@@ -15,9 +14,9 @@ export default function (pi: HookAPI) {
|
|
|
15
14
|
pi.on("session_start", async (_event, ctx) => {
|
|
16
15
|
const triggerFile = "/tmp/agent-trigger.txt";
|
|
17
16
|
|
|
18
|
-
fs.watch(triggerFile, () => {
|
|
17
|
+
fs.watch(triggerFile, async () => {
|
|
19
18
|
try {
|
|
20
|
-
const content =
|
|
19
|
+
const content = (await Bun.file(triggerFile).text()).trim();
|
|
21
20
|
if (content) {
|
|
22
21
|
pi.sendMessage(
|
|
23
22
|
{
|
|
@@ -27,7 +26,7 @@ export default function (pi: HookAPI) {
|
|
|
27
26
|
},
|
|
28
27
|
true, // triggerTurn - get LLM to respond
|
|
29
28
|
);
|
|
30
|
-
|
|
29
|
+
await Bun.write(triggerFile, ""); // Clear after reading
|
|
31
30
|
}
|
|
32
31
|
} catch {
|
|
33
32
|
// File might not exist yet
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
*
|
|
12
12
|
* The generated prompt appears as a draft in the editor for review/editing.
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
14
|
import { complete, type Message } from "@oh-my-pi/pi-ai";
|
|
16
15
|
import type { HookAPI, SessionEntry } from "@oh-my-pi/pi-coding-agent";
|
|
17
16
|
import { BorderedLoader, convertToLlm, serializeConversation } from "@oh-my-pi/pi-coding-agent";
|
|
@@ -62,7 +61,7 @@ export default function (pi: HookAPI) {
|
|
|
62
61
|
const branch = ctx.sessionManager.getBranch();
|
|
63
62
|
const messages = branch
|
|
64
63
|
.filter((entry): entry is SessionEntry & { type: "message" } => entry.type === "message")
|
|
65
|
-
.map(
|
|
64
|
+
.map(entry => entry.message);
|
|
66
65
|
|
|
67
66
|
if (messages.length === 0) {
|
|
68
67
|
ctx.ui.notify("No conversation to hand off", "error");
|
|
@@ -105,13 +104,13 @@ export default function (pi: HookAPI) {
|
|
|
105
104
|
|
|
106
105
|
return response.content
|
|
107
106
|
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
108
|
-
.map(
|
|
107
|
+
.map(c => c.text)
|
|
109
108
|
.join("\n");
|
|
110
109
|
};
|
|
111
110
|
|
|
112
111
|
doGenerate()
|
|
113
112
|
.then(done)
|
|
114
|
-
.catch(
|
|
113
|
+
.catch(err => {
|
|
115
114
|
console.error("Handoff generation failed:", err);
|
|
116
115
|
done(null);
|
|
117
116
|
});
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Prompts for confirmation before running potentially dangerous bash commands.
|
|
5
5
|
* Patterns checked: rm -rf, sudo, chmod/chown 777
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
export default function (pi: HookAPI) {
|
|
@@ -14,7 +13,7 @@ export default function (pi: HookAPI) {
|
|
|
14
13
|
if (event.toolName !== "bash") return undefined;
|
|
15
14
|
|
|
16
15
|
const command = event.input.command as string;
|
|
17
|
-
const isDangerous = dangerousPatterns.some(
|
|
16
|
+
const isDangerous = dangerousPatterns.some(p => p.test(command));
|
|
18
17
|
|
|
19
18
|
if (isDangerous) {
|
|
20
19
|
if (!ctx.hasUI) {
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Blocks write and edit operations to protected paths.
|
|
5
5
|
* Useful for preventing accidental modifications to sensitive files.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
export default function (pi: HookAPI) {
|
|
@@ -16,7 +15,7 @@ export default function (pi: HookAPI) {
|
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
const path = event.input.path as string;
|
|
19
|
-
const isProtected = protectedPaths.some(
|
|
18
|
+
const isProtected = protectedPaths.some(p => path.includes(p));
|
|
20
19
|
|
|
21
20
|
if (isProtected) {
|
|
22
21
|
if (ctx.hasUI) {
|
package/examples/hooks/qna.ts
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* 2. Shows a spinner while extracting (hides editor)
|
|
7
7
|
* 3. Loads the result into the editor for user to fill in answers
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
9
|
import { complete, type UserMessage } from "@oh-my-pi/pi-ai";
|
|
11
10
|
import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
|
|
12
11
|
import { BorderedLoader } from "@oh-my-pi/pi-coding-agent";
|
|
@@ -56,7 +55,7 @@ export default function (pi: HookAPI) {
|
|
|
56
55
|
}
|
|
57
56
|
const textParts = msg.content
|
|
58
57
|
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
59
|
-
.map(
|
|
58
|
+
.map(c => c.text);
|
|
60
59
|
if (textParts.length > 0) {
|
|
61
60
|
lastAssistantText = textParts.join("\n");
|
|
62
61
|
break;
|
|
@@ -96,7 +95,7 @@ export default function (pi: HookAPI) {
|
|
|
96
95
|
|
|
97
96
|
return response.content
|
|
98
97
|
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
99
|
-
.map(
|
|
98
|
+
.map(c => c.text)
|
|
100
99
|
.join("\n");
|
|
101
100
|
};
|
|
102
101
|
|
package/examples/hooks/snake.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Snake game hook - play snake with /snake command
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
4
|
import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
|
|
6
5
|
import { matchesKey, visibleWidth } from "@oh-my-pi/pi-tui";
|
|
7
6
|
|
|
@@ -47,7 +46,7 @@ function spawnFood(snake: Point[]): Point {
|
|
|
47
46
|
x: Math.floor(Math.random() * GAME_WIDTH),
|
|
48
47
|
y: Math.floor(Math.random() * GAME_HEIGHT),
|
|
49
48
|
};
|
|
50
|
-
} while (snake.some(
|
|
49
|
+
} while (snake.some(s => s.x === food.x && s.y === food.y));
|
|
51
50
|
return food;
|
|
52
51
|
}
|
|
53
52
|
|
|
@@ -127,7 +126,7 @@ class SnakeComponent {
|
|
|
127
126
|
}
|
|
128
127
|
|
|
129
128
|
// Check self collision
|
|
130
|
-
if (this.state.snake.some(
|
|
129
|
+
if (this.state.snake.some(s => s.x === newHead.x && s.y === newHead.y)) {
|
|
131
130
|
this.state.gameOver = true;
|
|
132
131
|
return;
|
|
133
132
|
}
|
|
@@ -249,7 +248,7 @@ class SnakeComponent {
|
|
|
249
248
|
let row = "";
|
|
250
249
|
for (let x = 0; x < effectiveWidth; x++) {
|
|
251
250
|
const isHead = this.state.snake[0].x === x && this.state.snake[0].y === y;
|
|
252
|
-
const isBody = this.state.snake.slice(1).some(
|
|
251
|
+
const isBody = this.state.snake.slice(1).some(s => s.x === x && s.y === y);
|
|
253
252
|
const isFood = this.state.food.x === x && this.state.food.y === y;
|
|
254
253
|
|
|
255
254
|
if (isHead) {
|
|
@@ -331,7 +330,7 @@ export default function (pi: HookAPI) {
|
|
|
331
330
|
return new SnakeComponent(
|
|
332
331
|
tui,
|
|
333
332
|
() => done(undefined),
|
|
334
|
-
|
|
333
|
+
state => {
|
|
335
334
|
// Save or clear state
|
|
336
335
|
pi.appendEntry(SNAKE_SAVE_TYPE, state);
|
|
337
336
|
},
|
|
@@ -4,19 +4,18 @@
|
|
|
4
4
|
* Uses all defaults: discovers skills, hooks, tools, context files
|
|
5
5
|
* from cwd and ~/.omp/agent. Model chosen from settings or first available.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import { createAgentSession } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
const { session } = await createAgentSession();
|
|
11
10
|
|
|
12
|
-
session.subscribe(
|
|
11
|
+
session.subscribe(event => {
|
|
13
12
|
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
14
13
|
process.stdout.write(event.assistantMessageEvent.delta);
|
|
15
14
|
}
|
|
16
15
|
});
|
|
17
16
|
|
|
18
17
|
await session.prompt("What files are in the current directory?");
|
|
19
|
-
session.state.messages.forEach(
|
|
18
|
+
session.state.messages.forEach(msg => {
|
|
20
19
|
console.log(msg);
|
|
21
20
|
});
|
|
22
21
|
console.log();
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Shows how to select a specific model and thinking level.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import { getModel } from "@oh-my-pi/pi-ai";
|
|
8
7
|
import { createAgentSession, discoverAuthStorage, discoverModels } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
@@ -27,7 +26,7 @@ if (customModel) {
|
|
|
27
26
|
const available = modelRegistry.getAvailable();
|
|
28
27
|
console.log(
|
|
29
28
|
"Available models:",
|
|
30
|
-
available.map(
|
|
29
|
+
available.map(m => `${m.provider}/${m.id}`),
|
|
31
30
|
);
|
|
32
31
|
|
|
33
32
|
if (available.length > 0) {
|
|
@@ -38,7 +37,7 @@ if (available.length > 0) {
|
|
|
38
37
|
modelRegistry,
|
|
39
38
|
});
|
|
40
39
|
|
|
41
|
-
session.subscribe(
|
|
40
|
+
session.subscribe(event => {
|
|
42
41
|
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
43
42
|
process.stdout.write(event.assistantMessageEvent.delta);
|
|
44
43
|
}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Shows how to replace or modify the default system prompt.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import { createAgentSession, SessionManager } from "@oh-my-pi/pi-coding-agent";
|
|
8
7
|
|
|
9
8
|
// Option 1: Replace prompt entirely
|
|
@@ -13,7 +12,7 @@ Always end responses with "Arrr!"`,
|
|
|
13
12
|
sessionManager: SessionManager.inMemory(),
|
|
14
13
|
});
|
|
15
14
|
|
|
16
|
-
session1.subscribe(
|
|
15
|
+
session1.subscribe(event => {
|
|
17
16
|
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
18
17
|
process.stdout.write(event.assistantMessageEvent.delta);
|
|
19
18
|
}
|
|
@@ -25,7 +24,7 @@ console.log("\n");
|
|
|
25
24
|
|
|
26
25
|
// Option 2: Modify default prompt (receives default, returns modified)
|
|
27
26
|
const { session: session2 } = await createAgentSession({
|
|
28
|
-
systemPrompt:
|
|
27
|
+
systemPrompt: defaultPrompt => `${defaultPrompt}
|
|
29
28
|
|
|
30
29
|
## Additional Instructions
|
|
31
30
|
- Always be concise
|
|
@@ -33,7 +32,7 @@ const { session: session2 } = await createAgentSession({
|
|
|
33
32
|
sessionManager: SessionManager.inMemory(),
|
|
34
33
|
});
|
|
35
34
|
|
|
36
|
-
session2.subscribe(
|
|
35
|
+
session2.subscribe(event => {
|
|
37
36
|
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
38
37
|
process.stdout.write(event.assistantMessageEvent.delta);
|
|
39
38
|
}
|
|
@@ -4,18 +4,17 @@
|
|
|
4
4
|
* Skills provide specialized instructions loaded into the system prompt.
|
|
5
5
|
* Discover, filter, merge, or replace them.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import { createAgentSession, discoverSkills, SessionManager, type Skill } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
// Discover all skills from cwd/.omp/skills, ~/.omp/agent/skills, etc.
|
|
11
10
|
const { skills: allSkills } = await discoverSkills();
|
|
12
11
|
console.log(
|
|
13
12
|
"Discovered skills:",
|
|
14
|
-
allSkills.map(
|
|
13
|
+
allSkills.map(s => s.name),
|
|
15
14
|
);
|
|
16
15
|
|
|
17
16
|
// Filter to specific skills
|
|
18
|
-
const filteredSkills = allSkills.filter(
|
|
17
|
+
const filteredSkills = allSkills.filter(s => s.name.includes("browser") || s.name.includes("search"));
|
|
19
18
|
|
|
20
19
|
// Or define custom skills inline
|
|
21
20
|
const customSkill: Skill = {
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
* An extension is a TypeScript file that exports a default function:
|
|
14
14
|
* export default function (pi: ExtensionAPI) { ... }
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
16
|
import { createAgentSession, SessionManager } from "@oh-my-pi/pi-coding-agent";
|
|
18
17
|
|
|
19
18
|
// Extensions are loaded from disk, not passed inline to createAgentSession.
|
|
@@ -28,7 +27,7 @@ const { session } = await createAgentSession({
|
|
|
28
27
|
sessionManager: SessionManager.inMemory(),
|
|
29
28
|
});
|
|
30
29
|
|
|
31
|
-
session.subscribe(
|
|
30
|
+
session.subscribe(event => {
|
|
32
31
|
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
33
32
|
process.stdout.write(event.assistantMessageEvent.delta);
|
|
34
33
|
}
|
package/examples/sdk/06-hooks.ts
CHANGED
|
@@ -4,28 +4,27 @@
|
|
|
4
4
|
* Hooks intercept agent events for logging, blocking, or modification.
|
|
5
5
|
* Note: "hooks" is now called "extensions" in the API.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import { createAgentSession, type ExtensionFactory, SessionManager } from "@oh-my-pi/pi-coding-agent";
|
|
9
8
|
|
|
10
9
|
// Logging hook (now called extension)
|
|
11
|
-
const loggingHook: ExtensionFactory =
|
|
10
|
+
const loggingHook: ExtensionFactory = api => {
|
|
12
11
|
api.on("agent_start", async () => {
|
|
13
12
|
console.log("[Hook] Agent starting");
|
|
14
13
|
});
|
|
15
14
|
|
|
16
|
-
api.on("tool_call", async
|
|
15
|
+
api.on("tool_call", async event => {
|
|
17
16
|
console.log(`[Hook] Tool: ${event.toolName}`);
|
|
18
17
|
return undefined; // Don't block
|
|
19
18
|
});
|
|
20
19
|
|
|
21
|
-
api.on("agent_end", async
|
|
20
|
+
api.on("agent_end", async event => {
|
|
22
21
|
console.log(`[Hook] Done, ${event.messages.length} messages`);
|
|
23
22
|
});
|
|
24
23
|
};
|
|
25
24
|
|
|
26
25
|
// Blocking extension (returns { block: true, reason: "..." })
|
|
27
|
-
const safetyHook: ExtensionFactory =
|
|
28
|
-
api.on("tool_call", async
|
|
26
|
+
const safetyHook: ExtensionFactory = api => {
|
|
27
|
+
api.on("tool_call", async event => {
|
|
29
28
|
if (event.toolName === "bash") {
|
|
30
29
|
const cmd = (event.input as { command?: string }).command ?? "";
|
|
31
30
|
if (cmd.includes("rm -rf")) {
|
|
@@ -42,7 +41,7 @@ const { session } = await createAgentSession({
|
|
|
42
41
|
sessionManager: SessionManager.inMemory(),
|
|
43
42
|
});
|
|
44
43
|
|
|
45
|
-
session.subscribe(
|
|
44
|
+
session.subscribe(event => {
|
|
46
45
|
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
47
46
|
process.stdout.write(event.assistantMessageEvent.delta);
|
|
48
47
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-my-pi/pi-coding-agent",
|
|
3
|
-
"version": "8.0
|
|
3
|
+
"version": "8.2.0",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"ompConfig": {
|
|
@@ -21,57 +21,88 @@
|
|
|
21
21
|
"types": "./src/extensibility/hooks/index.ts",
|
|
22
22
|
"import": "./src/extensibility/hooks/index.ts"
|
|
23
23
|
},
|
|
24
|
-
"./
|
|
25
|
-
|
|
24
|
+
"./sdk": {
|
|
25
|
+
"types": "./src/sdk.ts",
|
|
26
|
+
"import": "./src/sdk.ts"
|
|
27
|
+
},
|
|
28
|
+
"./prompts/*": "./src/prompts/*.md",
|
|
29
|
+
"./capability/*": {
|
|
30
|
+
"types": "./src/capability/*.ts",
|
|
31
|
+
"import": "./src/capability/*.ts"
|
|
32
|
+
},
|
|
33
|
+
"./config/*": {
|
|
34
|
+
"types": "./src/config/*.ts",
|
|
35
|
+
"import": "./src/config/*.ts"
|
|
36
|
+
},
|
|
37
|
+
"./extensibility/*": {
|
|
38
|
+
"types": "./src/extensibility/*.ts",
|
|
39
|
+
"import": "./src/extensibility/*.ts"
|
|
40
|
+
},
|
|
41
|
+
"./extensibility/hooks/*": {
|
|
42
|
+
"types": "./src/extensibility/hooks/*.ts",
|
|
43
|
+
"import": "./src/extensibility/hooks/*.ts"
|
|
44
|
+
},
|
|
45
|
+
"./extensibility/extensions/*": {
|
|
46
|
+
"types": "./src/extensibility/extensions/*.ts",
|
|
47
|
+
"import": "./src/extensibility/extensions/*.ts"
|
|
48
|
+
},
|
|
49
|
+
"./session/*": {
|
|
50
|
+
"types": "./src/session/*.ts",
|
|
51
|
+
"import": "./src/session/*.ts"
|
|
52
|
+
},
|
|
53
|
+
"./vendor/photon/*": {
|
|
54
|
+
"types": "./src/vendor/photon/*",
|
|
55
|
+
"import": "./src/vendor/photon/*"
|
|
56
|
+
},
|
|
57
|
+
"./*": {
|
|
58
|
+
"types": "./src/*.ts",
|
|
59
|
+
"import": "./src/*.ts"
|
|
60
|
+
}
|
|
26
61
|
},
|
|
27
62
|
"files": [
|
|
28
63
|
"src",
|
|
29
64
|
"scripts",
|
|
30
65
|
"docs",
|
|
31
66
|
"examples",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
67
|
+
"README.md",
|
|
68
|
+
"CHANGELOG.md"
|
|
34
69
|
],
|
|
35
70
|
"scripts": {
|
|
36
|
-
"check": "tsgo -p tsconfig.
|
|
71
|
+
"check": "tsgo -p tsconfig.json",
|
|
37
72
|
"format-prompts": "bun scripts/format-prompts.ts",
|
|
38
|
-
"
|
|
39
|
-
"build": "tsgo -p tsconfig.build.json && chmod +x dist/cli.js",
|
|
40
|
-
"build:binary": "bun run generate-wasm-b64 && bun build --compile ./src/cli.ts --outfile dist/omp",
|
|
73
|
+
"build:binary": "bun build --compile ./src/cli.ts --outfile dist/omp",
|
|
41
74
|
"generate-template": "bun scripts/generate-template.ts",
|
|
42
|
-
"
|
|
43
|
-
"test": "bun test",
|
|
44
|
-
"prepublishOnly": "bun run generate-template && cp tsconfig.publish.json tsconfig.json"
|
|
75
|
+
"test": "bun test"
|
|
45
76
|
},
|
|
46
77
|
"dependencies": {
|
|
47
|
-
"@oh-my-pi/omp-stats": "8.0
|
|
48
|
-
"@oh-my-pi/pi-agent-core": "8.0
|
|
49
|
-
"@oh-my-pi/pi-ai": "8.0
|
|
50
|
-
"@oh-my-pi/pi-tui": "8.0
|
|
51
|
-
"@oh-my-pi/pi-utils": "8.0
|
|
52
|
-
"@openai/agents": "^0.3
|
|
78
|
+
"@oh-my-pi/omp-stats": "8.2.0",
|
|
79
|
+
"@oh-my-pi/pi-agent-core": "8.2.0",
|
|
80
|
+
"@oh-my-pi/pi-ai": "8.2.0",
|
|
81
|
+
"@oh-my-pi/pi-tui": "8.2.0",
|
|
82
|
+
"@oh-my-pi/pi-utils": "8.2.0",
|
|
83
|
+
"@openai/agents": "^0.4.3",
|
|
53
84
|
"@sinclair/typebox": "^0.34.46",
|
|
54
85
|
"ajv": "^8.17.1",
|
|
55
86
|
"chalk": "^5.5.0",
|
|
56
87
|
"cli-highlight": "^2.1.11",
|
|
57
88
|
"diff": "^8.0.2",
|
|
58
89
|
"file-type": "^21.1.1",
|
|
59
|
-
"glob": "^
|
|
90
|
+
"glob": "^13.0.0",
|
|
60
91
|
"handlebars": "^4.7.8",
|
|
61
92
|
"highlight.js": "^11.11.1",
|
|
62
|
-
"marked": "^
|
|
93
|
+
"marked": "^17.0.1",
|
|
63
94
|
"nanoid": "^5.1.6",
|
|
64
95
|
"ndjson": "^2.0.0",
|
|
65
|
-
"node-html-parser": "^
|
|
96
|
+
"node-html-parser": "^7.0.2",
|
|
66
97
|
"smol-toml": "^1.6.0",
|
|
67
98
|
"strip-ansi": "^7.1.2",
|
|
68
99
|
"zod": "^4.3.5"
|
|
69
100
|
},
|
|
70
101
|
"devDependencies": {
|
|
71
|
-
"@types/diff": "^
|
|
102
|
+
"@types/diff": "^8.0.0",
|
|
72
103
|
"@types/ms": "^2.1.0",
|
|
73
104
|
"@types/ndjson": "^2.0.4",
|
|
74
|
-
"@types/node": "^
|
|
105
|
+
"@types/node": "^25.0.10",
|
|
75
106
|
"ms": "^2.1.3"
|
|
76
107
|
},
|
|
77
108
|
"keywords": [
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
* System instruction files (CLAUDE.md, AGENTS.md, GEMINI.md, etc.) that provide
|
|
5
5
|
* persistent guidance to the agent.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
import { defineCapability } from "./index";
|
|
7
|
+
import { defineCapability } from ".";
|
|
9
8
|
import type { SourceMeta } from "./types";
|
|
10
9
|
|
|
11
10
|
/**
|
|
@@ -30,8 +29,8 @@ export const contextFileCapability = defineCapability<ContextFile>({
|
|
|
30
29
|
description: "Persistent instruction files (CLAUDE.md, AGENTS.md, etc.) that guide agent behavior",
|
|
31
30
|
// Deduplicate by level: one user-level file, one project-level file
|
|
32
31
|
// Higher-priority providers shadow lower-priority ones at the same scope
|
|
33
|
-
key:
|
|
34
|
-
validate:
|
|
32
|
+
key: file => file.level,
|
|
33
|
+
validate: file => {
|
|
35
34
|
if (!file.path) return "Missing path";
|
|
36
35
|
if (file.content === undefined) return "Missing content";
|
|
37
36
|
if (file.level !== "user" && file.level !== "project") return "Invalid level: must be 'user' or 'project'";
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* TypeScript/JavaScript extension modules loaded by the extension system.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import { defineCapability } from "./index";
|
|
6
|
+
import { defineCapability } from ".";
|
|
8
7
|
import type { SourceMeta } from "./types";
|
|
9
8
|
|
|
10
9
|
/**
|
|
@@ -25,8 +24,8 @@ export const extensionModuleCapability = defineCapability<ExtensionModule>({
|
|
|
25
24
|
id: "extension-modules",
|
|
26
25
|
displayName: "Extension Modules",
|
|
27
26
|
description: "TypeScript/JavaScript extension modules loaded by the extension system",
|
|
28
|
-
key:
|
|
29
|
-
validate:
|
|
27
|
+
key: ext => ext.name,
|
|
28
|
+
validate: ext => {
|
|
30
29
|
if (!ext.name) return "Missing name";
|
|
31
30
|
if (!ext.path) return "Missing path";
|
|
32
31
|
return undefined;
|