@phi-code-admin/phi-code 0.56.3
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 +2994 -0
- package/README.md +567 -0
- package/dist/cli/args.d.ts +48 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +299 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +79 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +92 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +34 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +203 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +614 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +2475 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-storage.d.ts +134 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +415 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +47 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +212 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +86 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +242 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +610 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +38 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +153 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +71 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +34 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +222 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/tool-renderer.d.ts +35 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +63 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +426 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +146 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +640 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1017 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +35 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +27 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +102 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +32 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +134 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +55 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +151 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +123 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +114 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +548 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +104 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +462 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/package-manager.d.ts +156 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1442 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +50 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +251 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +17 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +59 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +184 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +633 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +90 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +235 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-manager.d.ts +323 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1094 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +232 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +682 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +58 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +364 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +22 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +159 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/timings.d.ts +7 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +25 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +55 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +242 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +63 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +243 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +146 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/find.d.ts +39 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +206 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +45 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +239 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +73 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +61 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +40 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +118 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +8 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +81 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +39 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +166 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +205 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/write.d.ts +29 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +78 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +661 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +261 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +9 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +329 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +92 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +156 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +48 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +42 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +43 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +470 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +28 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +63 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +74 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +138 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +20 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +105 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +55 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +71 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +26 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +196 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +32 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +33 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +61 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +139 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +259 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +92 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +271 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +825 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +295 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +34 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +45 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +44 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +46 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +77 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +773 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +70 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +921 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +110 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +9 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +27 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +329 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +3710 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/theme.d.ts +78 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +944 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +101 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +217 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +404 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +511 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +409 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/utils/changelog.d.ts +21 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +87 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +162 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +7 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +14 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +67 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +163 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +35 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize.d.ts +36 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +181 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/mime.d.ts +2 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +26 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +186 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +251 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/extensions/phi/README.md +228 -0
- package/extensions/phi/benchmark.ts +490 -0
- package/extensions/phi/init.ts +331 -0
- package/extensions/phi/memory.ts +285 -0
- package/extensions/phi/orchestrator.ts +411 -0
- package/extensions/phi/skill-loader.ts +336 -0
- package/extensions/phi/smart-router.ts +290 -0
- package/extensions/phi/web-search.ts +284 -0
- package/package.json +101 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phi Init Extension - Interactive setup wizard for Phi Code
|
|
3
|
+
*
|
|
4
|
+
* Provides an interactive wizard to configure Phi Code with:
|
|
5
|
+
* - API key detection and model discovery
|
|
6
|
+
* - Intelligent model routing configuration
|
|
7
|
+
* - Agent definitions setup
|
|
8
|
+
* - Extension activation
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - /phi-init command for setup wizard
|
|
12
|
+
* - Auto-detects available API keys
|
|
13
|
+
* - Three setup modes: auto, benchmark, manual
|
|
14
|
+
* - Creates ~/.phi/agent/ configuration structure
|
|
15
|
+
* - Activates Phi Code extensions
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* 1. Run /phi-init to start the wizard
|
|
19
|
+
* 2. Follow interactive prompts
|
|
20
|
+
* 3. Configuration saved to ~/.phi/agent/
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import type { ExtensionAPI } from "phi-code";
|
|
24
|
+
import { writeFile, mkdir, readFile, access, readdir, copyFile } from "node:fs/promises";
|
|
25
|
+
import { join } from "node:path";
|
|
26
|
+
import { homedir } from "node:os";
|
|
27
|
+
|
|
28
|
+
interface DetectedProvider {
|
|
29
|
+
name: string;
|
|
30
|
+
envVar: string;
|
|
31
|
+
models: string[];
|
|
32
|
+
available: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface ModelConfig {
|
|
36
|
+
id: string;
|
|
37
|
+
provider: string;
|
|
38
|
+
apiKey?: string;
|
|
39
|
+
baseUrl?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface RoutingConfigData {
|
|
43
|
+
routes: Record<string, {
|
|
44
|
+
preferredModel: string;
|
|
45
|
+
fallback: string;
|
|
46
|
+
agent: string | null;
|
|
47
|
+
keywords: string[];
|
|
48
|
+
}>;
|
|
49
|
+
default: { model: string; agent: string | null };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default function initExtension(pi: ExtensionAPI) {
|
|
53
|
+
const phiAgentDir = join(homedir(), ".phi", "agent");
|
|
54
|
+
const routingConfigPath = join(phiAgentDir, "routing.json");
|
|
55
|
+
const modelsConfigPath = join(phiAgentDir, "models.json");
|
|
56
|
+
const agentsDir = join(phiAgentDir, "agents");
|
|
57
|
+
const extensionsDir = join(phiAgentDir, "extensions");
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Détecte les clés API disponibles dans l'environnement
|
|
61
|
+
*/
|
|
62
|
+
function detectProviders(): DetectedProvider[] {
|
|
63
|
+
const providers: DetectedProvider[] = [
|
|
64
|
+
{
|
|
65
|
+
name: "Alibaba DashScope",
|
|
66
|
+
envVar: "DASHSCOPE_API_KEY",
|
|
67
|
+
models: [
|
|
68
|
+
"qwen3.5-plus",
|
|
69
|
+
"qwen3-max-2026-01-23",
|
|
70
|
+
"qwen3-coder-plus",
|
|
71
|
+
"qwen3-coder-next",
|
|
72
|
+
"kimi-k2.5",
|
|
73
|
+
"glm-5",
|
|
74
|
+
"glm-4.7",
|
|
75
|
+
"MiniMax-M2.5"
|
|
76
|
+
],
|
|
77
|
+
available: false
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: "OpenAI",
|
|
81
|
+
envVar: "OPENAI_API_KEY",
|
|
82
|
+
models: ["gpt-4", "gpt-4-turbo", "gpt-3.5-turbo", "gpt-4o"],
|
|
83
|
+
available: false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "Anthropic",
|
|
87
|
+
envVar: "ANTHROPIC_API_KEY",
|
|
88
|
+
models: ["claude-3.5-sonnet", "claude-3-opus", "claude-3-haiku"],
|
|
89
|
+
available: false
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "Google",
|
|
93
|
+
envVar: "GOOGLE_API_KEY",
|
|
94
|
+
models: ["gemini-pro", "gemini-pro-vision"],
|
|
95
|
+
available: false
|
|
96
|
+
}
|
|
97
|
+
];
|
|
98
|
+
|
|
99
|
+
// Vérifier la disponibilité des clés API
|
|
100
|
+
for (const provider of providers) {
|
|
101
|
+
provider.available = !!process.env[provider.envVar];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return providers;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Crée la configuration par défaut (mode auto)
|
|
109
|
+
*/
|
|
110
|
+
function createAutoConfig(availableProviders: DetectedProvider[]): { routing: RoutingConfigData; models: ModelConfig[] } {
|
|
111
|
+
// Priorité: Alibaba (gratuit) > Anthropic > OpenAI > Google
|
|
112
|
+
const preferenceOrder = ["Alibaba DashScope", "Anthropic", "OpenAI", "Google"];
|
|
113
|
+
|
|
114
|
+
let primaryProvider: DetectedProvider | null = null;
|
|
115
|
+
|
|
116
|
+
for (const providerName of preferenceOrder) {
|
|
117
|
+
const provider = availableProviders.find(p => p.name === providerName && p.available);
|
|
118
|
+
if (provider) {
|
|
119
|
+
primaryProvider = provider;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (!primaryProvider) {
|
|
125
|
+
throw new Error("Aucun provider disponible détecté");
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const models: ModelConfig[] = primaryProvider.models.map(modelId => ({
|
|
129
|
+
id: modelId,
|
|
130
|
+
provider: primaryProvider!.name,
|
|
131
|
+
apiKey: process.env[primaryProvider!.envVar]
|
|
132
|
+
}));
|
|
133
|
+
|
|
134
|
+
const routing: RoutingConfigData = {
|
|
135
|
+
routes: {
|
|
136
|
+
code: {
|
|
137
|
+
preferredModel: primaryProvider.models.find(m => m.includes("coder")) || primaryProvider.models[0],
|
|
138
|
+
fallback: primaryProvider.models[0],
|
|
139
|
+
agent: null,
|
|
140
|
+
keywords: ["code", "implement", "write", "create", "build", "develop", "function", "class"]
|
|
141
|
+
},
|
|
142
|
+
debug: {
|
|
143
|
+
preferredModel: primaryProvider.models[0],
|
|
144
|
+
fallback: primaryProvider.models[1] || primaryProvider.models[0],
|
|
145
|
+
agent: null,
|
|
146
|
+
keywords: ["debug", "fix", "error", "bug", "broken", "issue", "problem", "repair"]
|
|
147
|
+
},
|
|
148
|
+
plan: {
|
|
149
|
+
preferredModel: primaryProvider.models.find(m => m.includes("max")) || primaryProvider.models[0],
|
|
150
|
+
fallback: primaryProvider.models[0],
|
|
151
|
+
agent: null,
|
|
152
|
+
keywords: ["plan", "design", "architecture", "strategy", "structure", "organize"]
|
|
153
|
+
},
|
|
154
|
+
review: {
|
|
155
|
+
preferredModel: primaryProvider.models[0],
|
|
156
|
+
fallback: primaryProvider.models[1] || primaryProvider.models[0],
|
|
157
|
+
agent: null,
|
|
158
|
+
keywords: ["review", "audit", "check", "validate", "quality", "improve", "optimize"]
|
|
159
|
+
},
|
|
160
|
+
test: {
|
|
161
|
+
preferredModel: primaryProvider.models.find(m => m.includes("fast")) || primaryProvider.models[0],
|
|
162
|
+
fallback: primaryProvider.models[0],
|
|
163
|
+
agent: null,
|
|
164
|
+
keywords: ["test", "testing", "unit", "integration", "verify", "validate"]
|
|
165
|
+
},
|
|
166
|
+
explore: {
|
|
167
|
+
preferredModel: primaryProvider.models.find(m => m.includes("fast")) || primaryProvider.models[0],
|
|
168
|
+
fallback: primaryProvider.models[0],
|
|
169
|
+
agent: null,
|
|
170
|
+
keywords: ["explore", "understand", "analyze", "examine", "investigate"]
|
|
171
|
+
},
|
|
172
|
+
general: {
|
|
173
|
+
preferredModel: primaryProvider.models[0],
|
|
174
|
+
fallback: primaryProvider.models[1] || primaryProvider.models[0],
|
|
175
|
+
agent: null,
|
|
176
|
+
keywords: ["help", "explain", "what", "how", "why", "question"]
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
default: {
|
|
180
|
+
model: primaryProvider.models[0],
|
|
181
|
+
agent: null
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
return { routing, models };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Crée les répertoires nécessaires
|
|
190
|
+
*/
|
|
191
|
+
async function ensureDirectories(): Promise<void> {
|
|
192
|
+
await mkdir(phiAgentDir, { recursive: true });
|
|
193
|
+
await mkdir(agentsDir, { recursive: true });
|
|
194
|
+
await mkdir(extensionsDir, { recursive: true });
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Copie les définitions d'agents par défaut
|
|
199
|
+
*/
|
|
200
|
+
async function copyDefaultAgents(): Promise<void> {
|
|
201
|
+
// Pour l'instant, nous créons un agent par défaut simple
|
|
202
|
+
const defaultAgent = `---
|
|
203
|
+
name: general-assistant
|
|
204
|
+
description: General purpose assistant for various tasks
|
|
205
|
+
model: qwen3.5-plus
|
|
206
|
+
tools: [read, write, exec, web_search]
|
|
207
|
+
maxTokens: 4096
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
# General Assistant
|
|
211
|
+
|
|
212
|
+
You are a helpful AI assistant capable of handling various tasks including:
|
|
213
|
+
|
|
214
|
+
- Code analysis and debugging
|
|
215
|
+
- File operations
|
|
216
|
+
- Web searches
|
|
217
|
+
- General problem solving
|
|
218
|
+
|
|
219
|
+
Always be precise, helpful, and follow instructions carefully.
|
|
220
|
+
`;
|
|
221
|
+
|
|
222
|
+
await writeFile(join(agentsDir, "general-assistant.md"), defaultAgent, "utf8");
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Active les extensions Phi Code
|
|
227
|
+
*/
|
|
228
|
+
async function activateExtensions(): Promise<void> {
|
|
229
|
+
const extensionConfig = {
|
|
230
|
+
enabled: true,
|
|
231
|
+
extensions: [
|
|
232
|
+
"phi/memory",
|
|
233
|
+
"phi/benchmark",
|
|
234
|
+
"phi/smart-router",
|
|
235
|
+
"phi/skill-loader",
|
|
236
|
+
"phi/web-search",
|
|
237
|
+
"phi/orchestrator"
|
|
238
|
+
]
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
await writeFile(
|
|
242
|
+
join(extensionsDir, "config.json"),
|
|
243
|
+
JSON.stringify(extensionConfig, null, 2),
|
|
244
|
+
"utf8"
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Wizard interactif
|
|
250
|
+
*/
|
|
251
|
+
pi.registerCommand("phi-init", {
|
|
252
|
+
description: "Initialize Phi Code with interactive wizard",
|
|
253
|
+
handler: async (args, ctx) => {
|
|
254
|
+
try {
|
|
255
|
+
ctx.ui.notify("🚀 Welcome to Phi Code Setup Wizard!", "info");
|
|
256
|
+
|
|
257
|
+
// 1. Détection des API keys
|
|
258
|
+
ctx.ui.notify("🔍 Detecting available API keys...", "info");
|
|
259
|
+
const providers = detectProviders();
|
|
260
|
+
const availableProviders = providers.filter(p => p.available);
|
|
261
|
+
|
|
262
|
+
if (availableProviders.length === 0) {
|
|
263
|
+
ctx.ui.notify("❌ No API keys detected. Please set one of the following environment variables:\n" +
|
|
264
|
+
providers.map(p => `- ${p.envVar} (for ${p.name})`).join("\n"), "error");
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
ctx.ui.notify("✅ Found API keys for:", "info");
|
|
269
|
+
for (const provider of availableProviders) {
|
|
270
|
+
ctx.ui.notify(` - ${provider.name} (${provider.models.length} models)`, "info");
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// 2. Choix du mode de configuration
|
|
274
|
+
const mode = await ctx.ui.input("Choose setup mode:\n" +
|
|
275
|
+
"1. auto - Use public rankings to assign models (fastest)\n" +
|
|
276
|
+
"2. benchmark - Test models with simple exercises (recommended)\n" +
|
|
277
|
+
"3. manual - Choose models yourself (most control)\n" +
|
|
278
|
+
"\nEnter mode (1-3 or auto/benchmark/manual):");
|
|
279
|
+
|
|
280
|
+
const selectedMode = mode.toLowerCase().startsWith("1") || mode.toLowerCase().startsWith("a") ? "auto" :
|
|
281
|
+
mode.toLowerCase().startsWith("2") || mode.toLowerCase().startsWith("b") ? "benchmark" :
|
|
282
|
+
mode.toLowerCase().startsWith("3") || mode.toLowerCase().startsWith("m") ? "manual" : "auto";
|
|
283
|
+
|
|
284
|
+
ctx.ui.notify(`📋 Selected mode: ${selectedMode}`, "info");
|
|
285
|
+
|
|
286
|
+
let config: { routing: RoutingConfigData; models: ModelConfig[] };
|
|
287
|
+
|
|
288
|
+
if (selectedMode === "auto") {
|
|
289
|
+
config = createAutoConfig(availableProviders);
|
|
290
|
+
} else {
|
|
291
|
+
// Pour benchmark et manual, utilisons auto pour l'instant (à implémenter)
|
|
292
|
+
ctx.ui.notify("⚠️ Benchmark and manual modes not yet implemented, using auto mode.", "info");
|
|
293
|
+
config = createAutoConfig(availableProviders);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// 3. Créer les répertoires
|
|
297
|
+
ctx.ui.notify("📁 Creating configuration directories...", "info");
|
|
298
|
+
await ensureDirectories();
|
|
299
|
+
|
|
300
|
+
// 4. Écrire les fichiers de configuration
|
|
301
|
+
ctx.ui.notify("💾 Writing configuration files...", "info");
|
|
302
|
+
await writeFile(routingConfigPath, JSON.stringify(config.routing, null, 2), "utf8");
|
|
303
|
+
await writeFile(modelsConfigPath, JSON.stringify({ models: config.models }, null, 2), "utf8");
|
|
304
|
+
|
|
305
|
+
// 5. Copier les agents par défaut
|
|
306
|
+
ctx.ui.notify("🤖 Setting up default agents...", "info");
|
|
307
|
+
await copyDefaultAgents();
|
|
308
|
+
|
|
309
|
+
// 6. Activer les extensions
|
|
310
|
+
ctx.ui.notify("🔌 Activating extensions...", "info");
|
|
311
|
+
await activateExtensions();
|
|
312
|
+
|
|
313
|
+
// 7. Confirmation finale
|
|
314
|
+
const confirm = await ctx.ui.confirm("Setup complete! Would you like to see the configuration summary?");
|
|
315
|
+
|
|
316
|
+
if (confirm) {
|
|
317
|
+
ctx.ui.notify("📊 Configuration Summary:\n" +
|
|
318
|
+
`- Models configured: ${config.models.length}\n` +
|
|
319
|
+
`- Primary provider: ${availableProviders[0].name}\n` +
|
|
320
|
+
`- Config location: ${phiAgentDir}\n` +
|
|
321
|
+
`- Extensions activated: Yes\n` +
|
|
322
|
+
`- Default agents: Created\n\n` +
|
|
323
|
+
"🎉 Phi Code is ready to use! Try running 'phi --help' for available commands.", "info");
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
} catch (error) {
|
|
327
|
+
ctx.ui.notify(`❌ Setup failed: ${error}`, "error");
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Extension - Persistent memory management for Phi Code
|
|
3
|
+
*
|
|
4
|
+
* Now powered by sigma-memory package which provides:
|
|
5
|
+
* - NotesManager: Markdown files management
|
|
6
|
+
* - OntologyManager: Knowledge graph with entities and relations
|
|
7
|
+
* - QMDManager: Vector search (if QMD is available)
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - memory_search: Unified search across notes, ontology, and QMD
|
|
11
|
+
* - memory_write: Write content to memory files
|
|
12
|
+
* - memory_read: Read specific memory files or list available ones
|
|
13
|
+
* - memory_status: Get status of all memory subsystems
|
|
14
|
+
* - Auto-load AGENTS.md on session start
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* 1. Ensure sigma-memory package is built: cd packages/sigma-memory && npm run build
|
|
18
|
+
* 2. Memory files are stored in ~/.phi/memory/
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { Type } from "@sinclair/typebox";
|
|
22
|
+
import type { ExtensionAPI, ExtensionContext } from "phi-code";
|
|
23
|
+
import { access } from "node:fs/promises";
|
|
24
|
+
import { join } from "node:path";
|
|
25
|
+
import { readFileSync } from "node:fs";
|
|
26
|
+
import { SigmaMemory } from "sigma-memory";
|
|
27
|
+
|
|
28
|
+
export default function memoryExtension(pi: ExtensionAPI) {
|
|
29
|
+
// Initialize sigma-memory
|
|
30
|
+
const sigmaMemory = new SigmaMemory({
|
|
31
|
+
// Configuration par défaut, peut être surchargée
|
|
32
|
+
qmdEnabled: true,
|
|
33
|
+
qmdCommand: 'qmd'
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Initialize memory directories
|
|
37
|
+
sigmaMemory.init().catch(error => {
|
|
38
|
+
console.warn("Failed to initialize sigma-memory:", error);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Memory search tool - Unified search across notes, ontology, and QMD
|
|
43
|
+
*/
|
|
44
|
+
pi.registerTool({
|
|
45
|
+
name: "memory_search",
|
|
46
|
+
label: "Memory Search",
|
|
47
|
+
description: "Search for content in memory using unified search (notes + ontology + QMD vector search)",
|
|
48
|
+
parameters: Type.Object({
|
|
49
|
+
query: Type.String({ description: "Search query to find in memory" }),
|
|
50
|
+
}),
|
|
51
|
+
|
|
52
|
+
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
53
|
+
const { query } = params as { query: string };
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
const results = await sigmaMemory.search(query);
|
|
57
|
+
|
|
58
|
+
if (results.length === 0) {
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: "text", text: `No results found for "${query}". Use memory_write to create some memory files!` }],
|
|
61
|
+
details: { found: false, query, resultCount: 0 }
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Format results by source
|
|
66
|
+
let resultText = `Found ${results.length} results for "${query}":\n\n`;
|
|
67
|
+
|
|
68
|
+
const groupedResults = results.reduce((groups, result) => {
|
|
69
|
+
if (!groups[result.source]) groups[result.source] = [];
|
|
70
|
+
groups[result.source].push(result);
|
|
71
|
+
return groups;
|
|
72
|
+
}, {} as Record<string, typeof results>);
|
|
73
|
+
|
|
74
|
+
for (const [source, sourceResults] of Object.entries(groupedResults)) {
|
|
75
|
+
resultText += `## ${source.toUpperCase()} (${sourceResults.length} results)\n\n`;
|
|
76
|
+
|
|
77
|
+
for (const result of sourceResults.slice(0, 5)) { // Limite à 5 résultats par source
|
|
78
|
+
resultText += `**Score: ${result.score.toFixed(2)}** | Type: ${result.type}\n`;
|
|
79
|
+
|
|
80
|
+
if (result.source === 'notes') {
|
|
81
|
+
const data = result.data;
|
|
82
|
+
resultText += `File: ${data.file} (line ${data.line})\n`;
|
|
83
|
+
resultText += `> ${data.content}\n\n`;
|
|
84
|
+
} else if (result.source === 'ontology') {
|
|
85
|
+
const data = result.data;
|
|
86
|
+
if (result.type === 'entity') {
|
|
87
|
+
resultText += `Entity: ${data.name} (${data.type})\n`;
|
|
88
|
+
resultText += `Properties: ${JSON.stringify(data.properties)}\n\n`;
|
|
89
|
+
} else if (result.type === 'relation') {
|
|
90
|
+
resultText += `Relation: ${data.type} (${data.from} → ${data.to})\n`;
|
|
91
|
+
resultText += `Properties: ${JSON.stringify(data.properties)}\n\n`;
|
|
92
|
+
}
|
|
93
|
+
} else if (result.source === 'qmd') {
|
|
94
|
+
const data = result.data;
|
|
95
|
+
resultText += `File: ${data.file} (line ${data.line})\n`;
|
|
96
|
+
resultText += `> ${data.content}\n\n`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
resultText += '---\n\n';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
content: [{ type: "text", text: resultText }],
|
|
105
|
+
details: { found: true, query, resultCount: results.length, sources: Object.keys(groupedResults) }
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
} catch (error) {
|
|
109
|
+
return {
|
|
110
|
+
content: [{ type: "text", text: `Memory search failed: ${error}` }],
|
|
111
|
+
details: { error: String(error), found: false, query }
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Memory write tool - Write content to memory files
|
|
119
|
+
*/
|
|
120
|
+
pi.registerTool({
|
|
121
|
+
name: "memory_write",
|
|
122
|
+
label: "Memory Write",
|
|
123
|
+
description: "Write content to a memory file. If no filename provided, uses today's date.",
|
|
124
|
+
parameters: Type.Object({
|
|
125
|
+
content: Type.String({ description: "Content to write to the memory file" }),
|
|
126
|
+
file: Type.Optional(Type.String({ description: "Optional filename (defaults to YYYY-MM-DD.md)" })),
|
|
127
|
+
}),
|
|
128
|
+
|
|
129
|
+
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
130
|
+
const { content, file } = params as { content: string; file?: string };
|
|
131
|
+
|
|
132
|
+
try {
|
|
133
|
+
// Use notes manager to write
|
|
134
|
+
sigmaMemory.notes.write(content, file);
|
|
135
|
+
|
|
136
|
+
const filename = file || new Date().toISOString().split('T')[0] + '.md';
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
content: [{ type: "text", text: `Content written to ${filename}` }],
|
|
140
|
+
details: { filename, contentLength: content.length }
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
} catch (error) {
|
|
144
|
+
return {
|
|
145
|
+
content: [{ type: "text", text: `Failed to write to memory: ${error}` }],
|
|
146
|
+
details: { error: String(error) }
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Memory read tool - Read memory files or list available ones
|
|
154
|
+
*/
|
|
155
|
+
pi.registerTool({
|
|
156
|
+
name: "memory_read",
|
|
157
|
+
label: "Memory Read",
|
|
158
|
+
description: "Read a specific memory file or list all available memory files",
|
|
159
|
+
parameters: Type.Object({
|
|
160
|
+
file: Type.Optional(Type.String({ description: "Optional filename to read (omit to list all files)" })),
|
|
161
|
+
}),
|
|
162
|
+
|
|
163
|
+
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
164
|
+
const { file } = params as { file?: string };
|
|
165
|
+
|
|
166
|
+
try {
|
|
167
|
+
if (!file) {
|
|
168
|
+
// List all available memory files
|
|
169
|
+
const files = sigmaMemory.notes.list();
|
|
170
|
+
|
|
171
|
+
if (files.length === 0) {
|
|
172
|
+
return {
|
|
173
|
+
content: [{ type: "text", text: "No memory files found." }],
|
|
174
|
+
details: { action: "list", fileCount: 0 }
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const fileList = files
|
|
179
|
+
.map(f => `- ${f.name} (${(f.size / 1024).toFixed(1)} KB, ${new Date(f.date).toLocaleDateString()})`)
|
|
180
|
+
.join('\n');
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
content: [{ type: "text", text: `Available memory files (${files.length}):\n\n${fileList}` }],
|
|
184
|
+
details: { action: "list", fileCount: files.length }
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Read specific file
|
|
189
|
+
const content = sigmaMemory.notes.read(file);
|
|
190
|
+
|
|
191
|
+
return {
|
|
192
|
+
content: [{ type: "text", text: `**${file}:**\n\n${content}` }],
|
|
193
|
+
details: { action: "read", found: true, filename: file, contentLength: content.length }
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
} catch (error) {
|
|
197
|
+
return {
|
|
198
|
+
content: [{ type: "text", text: `Failed to read memory: ${error}` }],
|
|
199
|
+
details: { error: String(error), action: "read", filename: file }
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Memory status tool - Get status of all memory subsystems
|
|
207
|
+
*/
|
|
208
|
+
pi.registerTool({
|
|
209
|
+
name: "memory_status",
|
|
210
|
+
label: "Memory Status",
|
|
211
|
+
description: "Get status of all memory subsystems (notes, ontology, QMD)",
|
|
212
|
+
parameters: Type.Object({}),
|
|
213
|
+
|
|
214
|
+
async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
|
|
215
|
+
try {
|
|
216
|
+
const status = await sigmaMemory.status();
|
|
217
|
+
|
|
218
|
+
let statusText = "# Memory Status\n\n";
|
|
219
|
+
|
|
220
|
+
// Notes status
|
|
221
|
+
statusText += `## Notes\n`;
|
|
222
|
+
statusText += `- Files: ${status.notes.count}\n`;
|
|
223
|
+
statusText += `- Total size: ${(status.notes.totalSize / 1024).toFixed(1)} KB\n`;
|
|
224
|
+
statusText += `- Last modified: ${status.notes.lastModified ? new Date(status.notes.lastModified).toLocaleString() : 'Never'}\n\n`;
|
|
225
|
+
|
|
226
|
+
// Ontology status
|
|
227
|
+
statusText += `## Ontology\n`;
|
|
228
|
+
statusText += `- Entities: ${status.ontology.entities}\n`;
|
|
229
|
+
statusText += `- Relations: ${status.ontology.relations}\n`;
|
|
230
|
+
statusText += `- Entities by type: ${JSON.stringify(status.ontology.entitiesByType)}\n`;
|
|
231
|
+
statusText += `- Relations by type: ${JSON.stringify(status.ontology.relationsByType)}\n\n`;
|
|
232
|
+
|
|
233
|
+
// QMD status
|
|
234
|
+
statusText += `## QMD Vector Search\n`;
|
|
235
|
+
statusText += `- Available: ${status.qmd.available ? 'Yes' : 'No'}\n`;
|
|
236
|
+
if (status.qmd.available && status.qmd.status) {
|
|
237
|
+
statusText += `- Files indexed: ${status.qmd.status.files}\n`;
|
|
238
|
+
statusText += `- Chunks: ${status.qmd.status.chunks}\n`;
|
|
239
|
+
statusText += `- Last update: ${status.qmd.status.lastUpdate || 'Never'}\n`;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
content: [{ type: "text", text: statusText }],
|
|
244
|
+
details: { status }
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
} catch (error) {
|
|
248
|
+
return {
|
|
249
|
+
content: [{ type: "text", text: `Failed to get memory status: ${error}` }],
|
|
250
|
+
details: { error: String(error) }
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Auto-load AGENTS.md on session start
|
|
258
|
+
*/
|
|
259
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
260
|
+
try {
|
|
261
|
+
// Try to find AGENTS.md in current directory
|
|
262
|
+
const agentsPath = join(process.cwd(), "AGENTS.md");
|
|
263
|
+
|
|
264
|
+
try {
|
|
265
|
+
await access(agentsPath);
|
|
266
|
+
const agentsContent = readFileSync(agentsPath, 'utf-8');
|
|
267
|
+
|
|
268
|
+
// Send the content as a system message to provide context
|
|
269
|
+
ctx.ui.notify("Loaded AGENTS.md context for this session", "info");
|
|
270
|
+
|
|
271
|
+
// Optionally inject into the session context
|
|
272
|
+
await pi.sendHookMessage({
|
|
273
|
+
role: "system",
|
|
274
|
+
content: `Session context loaded from AGENTS.md:\n\n${agentsContent}`,
|
|
275
|
+
}, { source: "extension" });
|
|
276
|
+
|
|
277
|
+
} catch {
|
|
278
|
+
// AGENTS.md doesn't exist, that's fine
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
} catch (error) {
|
|
282
|
+
console.warn("Failed to initialize memory extension:", error);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
}
|