@hyperspaceng/neural-coding-agent 0.62.1 → 0.63.2
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 +143 -0
- package/README.md +10 -0
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/register-bedrock.js +2 -2
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +4 -0
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/core/agent-session.d.ts +21 -11
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +159 -101
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +5 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +7 -4
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +4 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -3
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +5 -5
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +28 -27
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -2
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/export-html/index.d.ts +3 -3
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +7 -6
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +2 -2
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +41 -16
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +3 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +27 -17
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +7 -10
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +27 -38
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +56 -15
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +2 -8
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +2 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts +3 -3
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +19 -3
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +85 -71
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +5 -5
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/output-guard.d.ts +6 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +59 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +3 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +153 -29
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +2 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +30 -32
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +6 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +37 -5
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +6 -5
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +136 -108
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +4 -4
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +15 -24
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +3 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +2 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +25 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts +2 -3
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -38
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/timings.d.ts +1 -0
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +6 -0
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts +20 -10
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +151 -59
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +23 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +150 -57
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +31 -7
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +179 -59
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +4 -4
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts +12 -5
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +76 -27
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +16 -5
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +83 -29
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +68 -22
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +50 -26
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +10 -4
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +67 -13
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +11 -4
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +110 -51
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +21 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +49 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +30 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/write.d.ts +10 -4
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +162 -27
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +57 -19
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +1 -2
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +19 -6
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +2 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +2 -2
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +15 -41
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +121 -679
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +5 -13
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +175 -160
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +5 -2
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +15 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +2 -2
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +84 -78
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +27 -20
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +5 -6
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/image-resize.d.ts +6 -6
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +45 -94
- package/dist/utils/image-resize.js.map +1 -1
- package/docs/development.md +3 -1
- package/docs/extensions.md +85 -34
- package/docs/models.md +6 -0
- package/docs/rpc.md +11 -2
- package/docs/settings.md +12 -0
- package/docs/skills.md +3 -2
- package/docs/tui.md +2 -2
- package/examples/extensions/built-in-tool-renderer.ts +8 -8
- package/examples/extensions/commands.ts +3 -3
- package/examples/extensions/custom-compaction.ts +17 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +17 -17
- package/examples/extensions/custom-provider-gitlab-duo/package.json +14 -14
- package/examples/extensions/custom-provider-qwen-cli/package.json +14 -14
- package/examples/extensions/handoff.ts +5 -2
- package/examples/extensions/minimal-mode.ts +14 -14
- package/examples/extensions/qna.ts +5 -2
- package/examples/extensions/question.ts +2 -2
- package/examples/extensions/questionnaire.ts +2 -2
- package/examples/extensions/subagent/index.ts +23 -3
- package/examples/extensions/summarize.ts +15 -4
- package/examples/extensions/todo.ts +2 -2
- package/examples/extensions/trigger-compact.ts +11 -1
- package/examples/extensions/truncated-tool.ts +2 -2
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +20 -20
- package/examples/sdk/04-skills.ts +8 -2
- package/examples/sdk/08-prompt-templates.ts +2 -1
- package/examples/sdk/12-full-control.ts +0 -1
- package/package.json +5 -4
|
@@ -7,6 +7,7 @@ import ignore from "ignore";
|
|
|
7
7
|
import { minimatch } from "minimatch";
|
|
8
8
|
import { CONFIG_DIR_NAME } from "../config.js";
|
|
9
9
|
import { parseGitUrl } from "../utils/git.js";
|
|
10
|
+
import { isStdoutTakenOver } from "./output-guard.js";
|
|
10
11
|
const NETWORK_TIMEOUT_MS = 10000;
|
|
11
12
|
const UPDATE_CHECK_CONCURRENCY = 4;
|
|
12
13
|
function isOfflineModeEnabled() {
|
|
@@ -130,7 +131,7 @@ function collectFiles(dir, filePattern, skipNodeModules = true, ignoreMatcher, r
|
|
|
130
131
|
}
|
|
131
132
|
return files;
|
|
132
133
|
}
|
|
133
|
-
function collectSkillEntries(dir,
|
|
134
|
+
function collectSkillEntries(dir, mode, ignoreMatcher, rootDir) {
|
|
134
135
|
const entries = [];
|
|
135
136
|
if (!existsSync(dir))
|
|
136
137
|
return entries;
|
|
@@ -139,6 +140,26 @@ function collectSkillEntries(dir, includeRootFiles = true, ignoreMatcher, rootDi
|
|
|
139
140
|
addIgnoreRules(ig, dir, root);
|
|
140
141
|
try {
|
|
141
142
|
const dirEntries = readdirSync(dir, { withFileTypes: true });
|
|
143
|
+
for (const entry of dirEntries) {
|
|
144
|
+
if (entry.name !== "SKILL.md") {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const fullPath = join(dir, entry.name);
|
|
148
|
+
let isFile = entry.isFile();
|
|
149
|
+
if (entry.isSymbolicLink()) {
|
|
150
|
+
try {
|
|
151
|
+
isFile = statSync(fullPath).isFile();
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const relPath = toPosixPath(relative(root, fullPath));
|
|
158
|
+
if (isFile && !ig.ignores(relPath)) {
|
|
159
|
+
entries.push(fullPath);
|
|
160
|
+
return entries;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
142
163
|
for (const entry of dirEntries) {
|
|
143
164
|
if (entry.name.startsWith("."))
|
|
144
165
|
continue;
|
|
@@ -158,19 +179,15 @@ function collectSkillEntries(dir, includeRootFiles = true, ignoreMatcher, rootDi
|
|
|
158
179
|
}
|
|
159
180
|
}
|
|
160
181
|
const relPath = toPosixPath(relative(root, fullPath));
|
|
161
|
-
|
|
162
|
-
|
|
182
|
+
if (mode === "pi" && dir === root && isFile && entry.name.endsWith(".md") && !ig.ignores(relPath)) {
|
|
183
|
+
entries.push(fullPath);
|
|
163
184
|
continue;
|
|
164
|
-
if (isDir) {
|
|
165
|
-
entries.push(...collectSkillEntries(fullPath, false, ig, root));
|
|
166
|
-
}
|
|
167
|
-
else if (isFile) {
|
|
168
|
-
const isRootMd = includeRootFiles && entry.name.endsWith(".md");
|
|
169
|
-
const isSkillMd = !includeRootFiles && entry.name === "SKILL.md";
|
|
170
|
-
if (isRootMd || isSkillMd) {
|
|
171
|
-
entries.push(fullPath);
|
|
172
|
-
}
|
|
173
185
|
}
|
|
186
|
+
if (!isDir)
|
|
187
|
+
continue;
|
|
188
|
+
if (ig.ignores(`${relPath}/`))
|
|
189
|
+
continue;
|
|
190
|
+
entries.push(...collectSkillEntries(fullPath, mode, ig, root));
|
|
174
191
|
}
|
|
175
192
|
}
|
|
176
193
|
catch {
|
|
@@ -178,8 +195,8 @@ function collectSkillEntries(dir, includeRootFiles = true, ignoreMatcher, rootDi
|
|
|
178
195
|
}
|
|
179
196
|
return entries;
|
|
180
197
|
}
|
|
181
|
-
function collectAutoSkillEntries(dir,
|
|
182
|
-
return collectSkillEntries(dir,
|
|
198
|
+
function collectAutoSkillEntries(dir, mode) {
|
|
199
|
+
return collectSkillEntries(dir, mode);
|
|
183
200
|
}
|
|
184
201
|
function findGitRepoRoot(startDir) {
|
|
185
202
|
let dir = resolve(startDir);
|
|
@@ -379,7 +396,7 @@ function collectAutoExtensionEntries(dir) {
|
|
|
379
396
|
*/
|
|
380
397
|
function collectResourceFiles(dir, resourceType) {
|
|
381
398
|
if (resourceType === "skills") {
|
|
382
|
-
return collectSkillEntries(dir);
|
|
399
|
+
return collectSkillEntries(dir, "pi");
|
|
383
400
|
}
|
|
384
401
|
if (resourceType === "extensions") {
|
|
385
402
|
return collectAutoExtensionEntries(dir);
|
|
@@ -674,18 +691,27 @@ export class DefaultPackageManager {
|
|
|
674
691
|
const globalSettings = this.settingsManager.getGlobalSettings();
|
|
675
692
|
const projectSettings = this.settingsManager.getProjectSettings();
|
|
676
693
|
const identity = source ? this.getPackageIdentity(source) : undefined;
|
|
694
|
+
let matched = false;
|
|
677
695
|
for (const pkg of globalSettings.packages ?? []) {
|
|
678
696
|
const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
|
|
679
697
|
if (identity && this.getPackageIdentity(sourceStr, "user") !== identity)
|
|
680
698
|
continue;
|
|
699
|
+
matched = true;
|
|
681
700
|
await this.updateSourceForScope(sourceStr, "user");
|
|
682
701
|
}
|
|
683
702
|
for (const pkg of projectSettings.packages ?? []) {
|
|
684
703
|
const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
|
|
685
704
|
if (identity && this.getPackageIdentity(sourceStr, "project") !== identity)
|
|
686
705
|
continue;
|
|
706
|
+
matched = true;
|
|
687
707
|
await this.updateSourceForScope(sourceStr, "project");
|
|
688
708
|
}
|
|
709
|
+
if (source && !matched) {
|
|
710
|
+
throw new Error(this.buildNoMatchingPackageMessage(source, [
|
|
711
|
+
...(globalSettings.packages ?? []),
|
|
712
|
+
...(projectSettings.packages ?? []),
|
|
713
|
+
]));
|
|
714
|
+
}
|
|
689
715
|
}
|
|
690
716
|
async updateSourceForScope(source, scope) {
|
|
691
717
|
if (isOfflineModeEnabled()) {
|
|
@@ -696,7 +722,10 @@ export class DefaultPackageManager {
|
|
|
696
722
|
if (parsed.pinned)
|
|
697
723
|
return;
|
|
698
724
|
await this.withProgress("update", source, `Updating ${source}...`, async () => {
|
|
699
|
-
await this.installNpm(
|
|
725
|
+
await this.installNpm({
|
|
726
|
+
...parsed,
|
|
727
|
+
spec: `${parsed.name}@latest`,
|
|
728
|
+
}, scope, false);
|
|
700
729
|
});
|
|
701
730
|
return;
|
|
702
731
|
}
|
|
@@ -878,6 +907,35 @@ export class DefaultPackageManager {
|
|
|
878
907
|
const baseDir = this.getBaseDirForScope(scope);
|
|
879
908
|
return `local:${this.resolvePathFromBase(parsed.path, baseDir)}`;
|
|
880
909
|
}
|
|
910
|
+
buildNoMatchingPackageMessage(source, configuredPackages) {
|
|
911
|
+
const suggestion = this.findSuggestedConfiguredSource(source, configuredPackages);
|
|
912
|
+
if (!suggestion) {
|
|
913
|
+
return `No matching package found for ${source}`;
|
|
914
|
+
}
|
|
915
|
+
return `No matching package found for ${source}. Did you mean ${suggestion}?`;
|
|
916
|
+
}
|
|
917
|
+
findSuggestedConfiguredSource(source, configuredPackages) {
|
|
918
|
+
const trimmedSource = source.trim();
|
|
919
|
+
const suggestions = new Set();
|
|
920
|
+
for (const pkg of configuredPackages) {
|
|
921
|
+
const sourceStr = this.getPackageSourceString(pkg);
|
|
922
|
+
const parsed = this.parseSource(sourceStr);
|
|
923
|
+
if (parsed.type === "npm") {
|
|
924
|
+
if (trimmedSource === parsed.name || trimmedSource === parsed.spec) {
|
|
925
|
+
suggestions.add(sourceStr);
|
|
926
|
+
}
|
|
927
|
+
continue;
|
|
928
|
+
}
|
|
929
|
+
if (parsed.type === "git") {
|
|
930
|
+
const shorthand = `${parsed.host}/${parsed.path}`;
|
|
931
|
+
const shorthandWithRef = parsed.ref ? `${shorthand}@${parsed.ref}` : undefined;
|
|
932
|
+
if (trimmedSource === shorthand || (shorthandWithRef && trimmedSource === shorthandWithRef)) {
|
|
933
|
+
suggestions.add(sourceStr);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
return suggestions.values().next().value;
|
|
938
|
+
}
|
|
881
939
|
packageSourcesMatch(existing, inputSource, scope) {
|
|
882
940
|
const left = this.getSourceMatchKeyForSettings(this.getPackageSourceString(existing), scope);
|
|
883
941
|
const right = this.getSourceMatchKeyForInput(inputSource);
|
|
@@ -1002,6 +1060,67 @@ export class DefaultPackageManager {
|
|
|
1002
1060
|
}
|
|
1003
1061
|
return match[1];
|
|
1004
1062
|
}
|
|
1063
|
+
async getLocalGitUpdateTarget(installedPath) {
|
|
1064
|
+
try {
|
|
1065
|
+
const upstream = await this.runCommandCapture("git", ["rev-parse", "--abbrev-ref", "@{upstream}"], {
|
|
1066
|
+
cwd: installedPath,
|
|
1067
|
+
timeoutMs: NETWORK_TIMEOUT_MS,
|
|
1068
|
+
});
|
|
1069
|
+
const trimmedUpstream = upstream.trim();
|
|
1070
|
+
if (!trimmedUpstream.startsWith("origin/")) {
|
|
1071
|
+
throw new Error(`Unsupported upstream remote: ${trimmedUpstream}`);
|
|
1072
|
+
}
|
|
1073
|
+
const branch = trimmedUpstream.slice("origin/".length);
|
|
1074
|
+
if (!branch) {
|
|
1075
|
+
throw new Error("Missing upstream branch name");
|
|
1076
|
+
}
|
|
1077
|
+
const head = await this.runCommandCapture("git", ["rev-parse", "@{upstream}"], {
|
|
1078
|
+
cwd: installedPath,
|
|
1079
|
+
timeoutMs: NETWORK_TIMEOUT_MS,
|
|
1080
|
+
});
|
|
1081
|
+
return {
|
|
1082
|
+
ref: "@{upstream}",
|
|
1083
|
+
head,
|
|
1084
|
+
fetchArgs: [
|
|
1085
|
+
"fetch",
|
|
1086
|
+
"--prune",
|
|
1087
|
+
"--no-tags",
|
|
1088
|
+
"origin",
|
|
1089
|
+
`+refs/heads/${branch}:refs/remotes/origin/${branch}`,
|
|
1090
|
+
],
|
|
1091
|
+
};
|
|
1092
|
+
}
|
|
1093
|
+
catch {
|
|
1094
|
+
await this.runCommand("git", ["remote", "set-head", "origin", "-a"], { cwd: installedPath }).catch(() => { });
|
|
1095
|
+
const head = await this.runCommandCapture("git", ["rev-parse", "origin/HEAD"], {
|
|
1096
|
+
cwd: installedPath,
|
|
1097
|
+
timeoutMs: NETWORK_TIMEOUT_MS,
|
|
1098
|
+
});
|
|
1099
|
+
const originHeadRef = await this.runCommandCapture("git", ["symbolic-ref", "refs/remotes/origin/HEAD"], {
|
|
1100
|
+
cwd: installedPath,
|
|
1101
|
+
timeoutMs: NETWORK_TIMEOUT_MS,
|
|
1102
|
+
}).catch(() => "");
|
|
1103
|
+
const branch = originHeadRef.trim().replace(/^refs\/remotes\/origin\//, "");
|
|
1104
|
+
if (branch) {
|
|
1105
|
+
return {
|
|
1106
|
+
ref: "origin/HEAD",
|
|
1107
|
+
head,
|
|
1108
|
+
fetchArgs: [
|
|
1109
|
+
"fetch",
|
|
1110
|
+
"--prune",
|
|
1111
|
+
"--no-tags",
|
|
1112
|
+
"origin",
|
|
1113
|
+
`+refs/heads/${branch}:refs/remotes/origin/${branch}`,
|
|
1114
|
+
],
|
|
1115
|
+
};
|
|
1116
|
+
}
|
|
1117
|
+
return {
|
|
1118
|
+
ref: "origin/HEAD",
|
|
1119
|
+
head,
|
|
1120
|
+
fetchArgs: ["fetch", "--prune", "--no-tags", "origin", "+HEAD:refs/remotes/origin/HEAD"],
|
|
1121
|
+
};
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1005
1124
|
async getGitUpstreamRef(installedPath) {
|
|
1006
1125
|
try {
|
|
1007
1126
|
const upstream = await this.runCommandCapture("git", ["rev-parse", "--abbrev-ref", "@{upstream}"], {
|
|
@@ -1164,16 +1283,21 @@ export class DefaultPackageManager {
|
|
|
1164
1283
|
await this.installGit(source, scope);
|
|
1165
1284
|
return;
|
|
1166
1285
|
}
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1286
|
+
const target = await this.getLocalGitUpdateTarget(targetDir);
|
|
1287
|
+
// Fetch only the ref we will reset to, avoiding unrelated branch/tag noise.
|
|
1288
|
+
await this.runCommand("git", target.fetchArgs, { cwd: targetDir });
|
|
1289
|
+
const localHead = await this.runCommandCapture("git", ["rev-parse", "HEAD"], {
|
|
1290
|
+
cwd: targetDir,
|
|
1291
|
+
timeoutMs: NETWORK_TIMEOUT_MS,
|
|
1292
|
+
});
|
|
1293
|
+
const refreshedTargetHead = await this.runCommandCapture("git", ["rev-parse", target.ref], {
|
|
1294
|
+
cwd: targetDir,
|
|
1295
|
+
timeoutMs: NETWORK_TIMEOUT_MS,
|
|
1296
|
+
});
|
|
1297
|
+
if (localHead.trim() === refreshedTargetHead.trim()) {
|
|
1298
|
+
return;
|
|
1176
1299
|
}
|
|
1300
|
+
await this.runCommand("git", ["reset", "--hard", target.ref], { cwd: targetDir });
|
|
1177
1301
|
// Clean untracked files (extensions should be pristine)
|
|
1178
1302
|
await this.runCommand("git", ["clean", "-fdx"], { cwd: targetDir });
|
|
1179
1303
|
const packageJsonPath = join(targetDir, "package.json");
|
|
@@ -1509,13 +1633,13 @@ export class DefaultPackageManager {
|
|
|
1509
1633
|
};
|
|
1510
1634
|
addResources("extensions", collectAutoExtensionEntries(projectDirs.extensions), projectMetadata, projectOverrides.extensions, projectBaseDir);
|
|
1511
1635
|
addResources("skills", [
|
|
1512
|
-
...collectAutoSkillEntries(projectDirs.skills),
|
|
1513
|
-
...projectAgentsSkillDirs.flatMap((dir) => collectAutoSkillEntries(dir)),
|
|
1636
|
+
...collectAutoSkillEntries(projectDirs.skills, "pi"),
|
|
1637
|
+
...projectAgentsSkillDirs.flatMap((dir) => collectAutoSkillEntries(dir, "agents")),
|
|
1514
1638
|
], projectMetadata, projectOverrides.skills, projectBaseDir);
|
|
1515
1639
|
addResources("prompts", collectAutoPromptEntries(projectDirs.prompts), projectMetadata, projectOverrides.prompts, projectBaseDir);
|
|
1516
1640
|
addResources("themes", collectAutoThemeEntries(projectDirs.themes), projectMetadata, projectOverrides.themes, projectBaseDir);
|
|
1517
1641
|
addResources("extensions", collectAutoExtensionEntries(userDirs.extensions), userMetadata, userOverrides.extensions, globalBaseDir);
|
|
1518
|
-
addResources("skills", [...collectAutoSkillEntries(userDirs.skills), ...collectAutoSkillEntries(userAgentsSkillsDir)], userMetadata, userOverrides.skills, globalBaseDir);
|
|
1642
|
+
addResources("skills", [...collectAutoSkillEntries(userDirs.skills, "pi"), ...collectAutoSkillEntries(userAgentsSkillsDir, "agents")], userMetadata, userOverrides.skills, globalBaseDir);
|
|
1519
1643
|
addResources("prompts", collectAutoPromptEntries(userDirs.prompts), userMetadata, userOverrides.prompts, globalBaseDir);
|
|
1520
1644
|
addResources("themes", collectAutoThemeEntries(userDirs.themes), userMetadata, userOverrides.themes, globalBaseDir);
|
|
1521
1645
|
}
|
|
@@ -1630,7 +1754,7 @@ export class DefaultPackageManager {
|
|
|
1630
1754
|
return new Promise((resolvePromise, reject) => {
|
|
1631
1755
|
const child = spawn(command, args, {
|
|
1632
1756
|
cwd: options?.cwd,
|
|
1633
|
-
stdio: "inherit",
|
|
1757
|
+
stdio: isStdoutTakenOver() ? ["ignore", 2, 2] : "inherit",
|
|
1634
1758
|
shell: process.platform === "win32",
|
|
1635
1759
|
});
|
|
1636
1760
|
child.on("error", reject);
|