catui-agent 1.0.0-beta.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/LICENSE +674 -0
- package/README.md +267 -0
- package/dist/build-meta.json +6 -0
- package/dist/builtin-extensions.d.ts +47 -0
- package/dist/builtin-extensions.js +1 -0
- package/dist/catui-defaults.d.ts +555 -0
- package/dist/catui-defaults.js +22 -0
- package/dist/cli/args.d.ts +70 -0
- package/dist/cli/args.js +158 -0
- package/dist/cli/config-selector.d.ts +10 -0
- package/dist/cli/config-selector.js +1 -0
- package/dist/cli/file-processor.d.ts +11 -0
- package/dist/cli/file-processor.js +6 -0
- package/dist/cli/list-models.d.ts +12 -0
- package/dist/cli/list-models.js +2 -0
- package/dist/cli/session-picker.d.ts +5 -0
- package/dist/cli/session-picker.js +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +2 -0
- package/dist/config.d.ts +103 -0
- package/dist/config.js +1 -0
- package/dist/core/agent-dir/agent-dir-context.d.ts +60 -0
- package/dist/core/agent-dir/agent-dir-context.js +1 -0
- package/dist/core/agent-dir/agent-metadata.d.ts +48 -0
- package/dist/core/agent-dir/agent-metadata.js +1 -0
- package/dist/core/agent-dir/migration-tool.d.ts +40 -0
- package/dist/core/agent-dir/migration-tool.js +7 -0
- package/dist/core/export-html/AGENT.md +12 -0
- package/dist/core/export-html/ansi-to-html.d.ts +9 -0
- package/dist/core/export-html/ansi-to-html.js +2 -0
- package/dist/core/export-html/index.d.ts +39 -0
- package/dist/core/export-html/index.js +2 -0
- package/dist/core/export-html/template.css +971 -0
- package/dist/core/export-html/template.html +54 -0
- package/dist/core/export-html/template.js +66 -0
- package/dist/core/export-html/tool-renderer.d.ts +28 -0
- package/dist/core/export-html/tool-renderer.js +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +4 -0
- package/dist/core/export-html/vendor/marked.min.js +56 -0
- package/dist/core/extensions-host/index.d.ts +13 -0
- package/dist/core/extensions-host/index.js +1 -0
- package/dist/core/extensions-host/loader.d.ts +21 -0
- package/dist/core/extensions-host/loader.js +1 -0
- package/dist/core/extensions-host/runner.d.ts +233 -0
- package/dist/core/extensions-host/runner.js +3 -0
- package/dist/core/extensions-host/types.d.ts +1079 -0
- package/dist/core/extensions-host/types.js +1 -0
- package/dist/core/extensions-host/wrapper.d.ts +29 -0
- package/dist/core/extensions-host/wrapper.js +2 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop-continuations.d.ts +17 -0
- package/dist/core/lib/agent-core/src/agent-loop-continuations.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop-stream-events.d.ts +19 -0
- package/dist/core/lib/agent-core/src/agent-loop-stream-events.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-results.d.ts +10 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-results.js +3 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-summaries.d.ts +22 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-summaries.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop.d.ts +26 -0
- package/dist/core/lib/agent-core/src/agent-loop.js +4 -0
- package/dist/core/lib/agent-core/src/agent-run-result.d.ts +9 -0
- package/dist/core/lib/agent-core/src/agent-run-result.js +1 -0
- package/dist/core/lib/agent-core/src/agent.d.ts +215 -0
- package/dist/core/lib/agent-core/src/agent.js +1 -0
- package/dist/core/lib/agent-core/src/errors.d.ts +62 -0
- package/dist/core/lib/agent-core/src/errors.js +1 -0
- package/dist/core/lib/agent-core/src/index.d.ts +14 -0
- package/dist/core/lib/agent-core/src/index.js +1 -0
- package/dist/core/lib/agent-core/src/proxy.d.ts +91 -0
- package/dist/core/lib/agent-core/src/proxy.js +2 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-agent-loop.d.ts +15 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-agent-loop.js +2 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-streaming-tool-executor.d.ts +33 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-streaming-tool-executor.js +1 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-tool-orchestration.d.ts +35 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-tool-orchestration.js +3 -0
- package/dist/core/lib/agent-core/src/types.d.ts +417 -0
- package/dist/core/lib/agent-core/src/types.js +1 -0
- package/dist/core/lib/ai/src/api-registry.d.ts +27 -0
- package/dist/core/lib/ai/src/api-registry.js +1 -0
- package/dist/core/lib/ai/src/config-path.d.ts +1 -0
- package/dist/core/lib/ai/src/config-path.js +1 -0
- package/dist/core/lib/ai/src/debug-logger.d.ts +94 -0
- package/dist/core/lib/ai/src/debug-logger.js +4 -0
- package/dist/core/lib/ai/src/env-api-keys.d.ts +8 -0
- package/dist/core/lib/ai/src/env-api-keys.js +1 -0
- package/dist/core/lib/ai/src/env.d.ts +7 -0
- package/dist/core/lib/ai/src/env.js +1 -0
- package/dist/core/lib/ai/src/events.d.ts +8 -0
- package/dist/core/lib/ai/src/events.js +1 -0
- package/dist/core/lib/ai/src/index.d.ts +27 -0
- package/dist/core/lib/ai/src/index.js +1 -0
- package/dist/core/lib/ai/src/json.d.ts +7 -0
- package/dist/core/lib/ai/src/json.js +1 -0
- package/dist/core/lib/ai/src/models.d.ts +31 -0
- package/dist/core/lib/ai/src/models.generated.d.ts +15315 -0
- package/dist/core/lib/ai/src/models.generated.js +1 -0
- package/dist/core/lib/ai/src/models.js +1 -0
- package/dist/core/lib/ai/src/overflow.d.ts +7 -0
- package/dist/core/lib/ai/src/overflow.js +1 -0
- package/dist/core/lib/ai/src/providers/amazon-bedrock.d.ts +20 -0
- package/dist/core/lib/ai/src/providers/amazon-bedrock.js +1 -0
- package/dist/core/lib/ai/src/providers/anthropic.d.ts +38 -0
- package/dist/core/lib/ai/src/providers/anthropic.js +2 -0
- package/dist/core/lib/ai/src/providers/azure-openai-responses.d.ts +21 -0
- package/dist/core/lib/ai/src/providers/azure-openai-responses.js +1 -0
- package/dist/core/lib/ai/src/providers/github-copilot-headers.d.ts +13 -0
- package/dist/core/lib/ai/src/providers/github-copilot-headers.js +1 -0
- package/dist/core/lib/ai/src/providers/google-gemini-cli.d.ts +79 -0
- package/dist/core/lib/ai/src/providers/google-gemini-cli.js +2 -0
- package/dist/core/lib/ai/src/providers/google-shared.d.ts +70 -0
- package/dist/core/lib/ai/src/providers/google-shared.js +2 -0
- package/dist/core/lib/ai/src/providers/google-vertex.d.ts +20 -0
- package/dist/core/lib/ai/src/providers/google-vertex.js +1 -0
- package/dist/core/lib/ai/src/providers/google.d.ts +18 -0
- package/dist/core/lib/ai/src/providers/google.js +1 -0
- package/dist/core/lib/ai/src/providers/openai-codex-responses.d.ts +8 -0
- package/dist/core/lib/ai/src/providers/openai-codex-responses.js +7 -0
- package/dist/core/lib/ai/src/providers/openai-completions.d.ts +20 -0
- package/dist/core/lib/ai/src/providers/openai-completions.js +6 -0
- package/dist/core/lib/ai/src/providers/openai-responses-shared.d.ts +22 -0
- package/dist/core/lib/ai/src/providers/openai-responses-shared.js +10 -0
- package/dist/core/lib/ai/src/providers/openai-responses.d.ts +19 -0
- package/dist/core/lib/ai/src/providers/openai-responses.js +1 -0
- package/dist/core/lib/ai/src/providers/register-builtins.d.ts +8 -0
- package/dist/core/lib/ai/src/providers/register-builtins.js +1 -0
- package/dist/core/lib/ai/src/providers/simple-options.d.ts +13 -0
- package/dist/core/lib/ai/src/providers/simple-options.js +1 -0
- package/dist/core/lib/ai/src/providers/transform-messages.d.ts +13 -0
- package/dist/core/lib/ai/src/providers/transform-messages.js +1 -0
- package/dist/core/lib/ai/src/registry.d.ts +8 -0
- package/dist/core/lib/ai/src/registry.js +1 -0
- package/dist/core/lib/ai/src/schema.d.ts +10 -0
- package/dist/core/lib/ai/src/schema.js +1 -0
- package/dist/core/lib/ai/src/stream.d.ts +33 -0
- package/dist/core/lib/ai/src/stream.js +1 -0
- package/dist/core/lib/ai/src/types.d.ts +331 -0
- package/dist/core/lib/ai/src/types.js +0 -0
- package/dist/core/lib/ai/src/utils/event-stream-types.d.ts +12 -0
- package/dist/core/lib/ai/src/utils/event-stream-types.js +0 -0
- package/dist/core/lib/ai/src/utils/event-stream.d.ts +31 -0
- package/dist/core/lib/ai/src/utils/event-stream.js +1 -0
- package/dist/core/lib/ai/src/utils/http-proxy.d.ts +13 -0
- package/dist/core/lib/ai/src/utils/http-proxy.js +1 -0
- package/dist/core/lib/ai/src/utils/json-parse.d.ts +14 -0
- package/dist/core/lib/ai/src/utils/json-parse.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/anthropic.d.ts +22 -0
- package/dist/core/lib/ai/src/utils/oauth/anthropic.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/decode-credential.d.ts +12 -0
- package/dist/core/lib/ai/src/utils/oauth/decode-credential.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/github-copilot.d.ts +35 -0
- package/dist/core/lib/ai/src/utils/oauth/github-copilot.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/google-antigravity.d.ts +31 -0
- package/dist/core/lib/ai/src/utils/oauth/google-antigravity.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/google-gemini-cli.d.ts +31 -0
- package/dist/core/lib/ai/src/utils/oauth/google-gemini-cli.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/index.d.ts +60 -0
- package/dist/core/lib/ai/src/utils/oauth/index.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/openai-codex.d.ts +39 -0
- package/dist/core/lib/ai/src/utils/oauth/openai-codex.js +11 -0
- package/dist/core/lib/ai/src/utils/oauth/pkce.d.ts +18 -0
- package/dist/core/lib/ai/src/utils/oauth/pkce.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/types.d.ts +52 -0
- package/dist/core/lib/ai/src/utils/oauth/types.js +0 -0
- package/dist/core/lib/ai/src/utils/overflow.d.ts +57 -0
- package/dist/core/lib/ai/src/utils/overflow.js +1 -0
- package/dist/core/lib/ai/src/utils/sanitize-unicode.d.ts +16 -0
- package/dist/core/lib/ai/src/utils/sanitize-unicode.js +1 -0
- package/dist/core/lib/ai/src/utils/typebox-helpers.d.ts +22 -0
- package/dist/core/lib/ai/src/utils/typebox-helpers.js +1 -0
- package/dist/core/lib/ai/src/utils/validation.d.ts +23 -0
- package/dist/core/lib/ai/src/utils/validation.js +6 -0
- package/dist/core/lib/tui/src/autocomplete.d.ts +62 -0
- package/dist/core/lib/tui/src/autocomplete.js +2 -0
- package/dist/core/lib/tui/src/components/box.d.ts +27 -0
- package/dist/core/lib/tui/src/components/box.js +1 -0
- package/dist/core/lib/tui/src/components/cached-container.d.ts +42 -0
- package/dist/core/lib/tui/src/components/cached-container.js +1 -0
- package/dist/core/lib/tui/src/components/cancellable-loader.d.ts +27 -0
- package/dist/core/lib/tui/src/components/cancellable-loader.js +1 -0
- package/dist/core/lib/tui/src/components/editor.d.ts +222 -0
- package/dist/core/lib/tui/src/components/editor.js +21 -0
- package/dist/core/lib/tui/src/components/image.d.ts +33 -0
- package/dist/core/lib/tui/src/components/image.js +1 -0
- package/dist/core/lib/tui/src/components/input.d.ts +42 -0
- package/dist/core/lib/tui/src/components/input.js +2 -0
- package/dist/core/lib/tui/src/components/loader.d.ts +26 -0
- package/dist/core/lib/tui/src/components/loader.js +1 -0
- package/dist/core/lib/tui/src/components/markdown.d.ts +100 -0
- package/dist/core/lib/tui/src/components/markdown.js +7 -0
- package/dist/core/lib/tui/src/components/select-list.d.ts +37 -0
- package/dist/core/lib/tui/src/components/select-list.js +1 -0
- package/dist/core/lib/tui/src/components/settings-list.d.ts +55 -0
- package/dist/core/lib/tui/src/components/settings-list.js +1 -0
- package/dist/core/lib/tui/src/components/spacer.d.ts +17 -0
- package/dist/core/lib/tui/src/components/spacer.js +1 -0
- package/dist/core/lib/tui/src/components/text.d.ts +24 -0
- package/dist/core/lib/tui/src/components/text.js +1 -0
- package/dist/core/lib/tui/src/components/truncated-text.d.ts +18 -0
- package/dist/core/lib/tui/src/components/truncated-text.js +2 -0
- package/dist/core/lib/tui/src/editor-component.d.ts +51 -0
- package/dist/core/lib/tui/src/editor-component.js +0 -0
- package/dist/core/lib/tui/src/fuzzy.d.ts +32 -0
- package/dist/core/lib/tui/src/fuzzy.js +1 -0
- package/dist/core/lib/tui/src/index.d.ts +29 -0
- package/dist/core/lib/tui/src/index.js +1 -0
- package/dist/core/lib/tui/src/keybindings.d.ts +44 -0
- package/dist/core/lib/tui/src/keybindings.js +1 -0
- package/dist/core/lib/tui/src/keys.d.ts +149 -0
- package/dist/core/lib/tui/src/keys.js +5 -0
- package/dist/core/lib/tui/src/kill-ring.d.ts +33 -0
- package/dist/core/lib/tui/src/kill-ring.js +1 -0
- package/dist/core/lib/tui/src/stdin-buffer.d.ts +38 -0
- package/dist/core/lib/tui/src/stdin-buffer.js +1 -0
- package/dist/core/lib/tui/src/terminal-image.d.ts +73 -0
- package/dist/core/lib/tui/src/terminal-image.js +1 -0
- package/dist/core/lib/tui/src/terminal.d.ts +86 -0
- package/dist/core/lib/tui/src/terminal.js +1 -0
- package/dist/core/lib/tui/src/tui.d.ts +220 -0
- package/dist/core/lib/tui/src/tui.js +12 -0
- package/dist/core/lib/tui/src/undo-stack.d.ts +22 -0
- package/dist/core/lib/tui/src/undo-stack.js +1 -0
- package/dist/core/lib/tui/src/utils.d.ts +83 -0
- package/dist/core/lib/tui/src/utils.js +2 -0
- package/dist/core/mcp/figma-auth.d.ts +21 -0
- package/dist/core/mcp/figma-auth.js +22 -0
- package/dist/core/mcp/index.d.ts +11 -0
- package/dist/core/mcp/index.js +1 -0
- package/dist/core/mcp/mcp-adapter.d.ts +21 -0
- package/dist/core/mcp/mcp-adapter.js +3 -0
- package/dist/core/mcp/mcp-client.d.ts +91 -0
- package/dist/core/mcp/mcp-client.js +6 -0
- package/dist/core/mcp/mcp-config.d.ts +55 -0
- package/dist/core/mcp/mcp-config.js +1 -0
- package/dist/core/mcp/mcp-guidance.d.ts +52 -0
- package/dist/core/mcp/mcp-guidance.js +54 -0
- package/dist/core/mcp/mcp-manager.d.ts +51 -0
- package/dist/core/mcp/mcp-manager.js +1 -0
- package/dist/core/mcp/mcp-types.d.ts +62 -0
- package/dist/core/mcp/mcp-types.js +0 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.js +17 -0
- package/dist/core/model/custom-providers.d.ts +34 -0
- package/dist/core/model/custom-providers.js +1 -0
- package/dist/core/model/discovery-cache.d.ts +65 -0
- package/dist/core/model/discovery-cache.js +1 -0
- package/dist/core/model/discovery-cache.test.d.ts +7 -0
- package/dist/core/model/discovery-cache.test.js +1 -0
- package/dist/core/model/discovery.d.ts +79 -0
- package/dist/core/model/discovery.js +1 -0
- package/dist/core/model/discovery.test.d.ts +7 -0
- package/dist/core/model/discovery.test.js +1 -0
- package/dist/core/model/index.d.ts +10 -0
- package/dist/core/model/index.js +1 -0
- package/dist/core/model/known-models.d.ts +65 -0
- package/dist/core/model/known-models.generated.d.ts +2 -0
- package/dist/core/model/known-models.generated.js +1 -0
- package/dist/core/model/known-models.js +1 -0
- package/dist/core/model/switcher.d.ts +80 -0
- package/dist/core/model/switcher.js +1 -0
- package/dist/core/model-registry.d.ts +186 -0
- package/dist/core/model-registry.js +9 -0
- package/dist/core/model-resolver.d.ts +106 -0
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/package-manager.d.ts +156 -0
- package/dist/core/package-manager.js +3 -0
- package/dist/core/persona/persona-manager.d.ts +35 -0
- package/dist/core/persona/persona-manager.js +5 -0
- package/dist/core/platform/abort-slot.d.ts +26 -0
- package/dist/core/platform/abort-slot.js +1 -0
- package/dist/core/platform/config/auth-storage.d.ts +126 -0
- package/dist/core/platform/config/auth-storage.js +1 -0
- package/dist/core/platform/config/defaults.d.ts +8 -0
- package/dist/core/platform/config/defaults.js +1 -0
- package/dist/core/platform/config/diagnostics.d.ts +20 -0
- package/dist/core/platform/config/diagnostics.js +0 -0
- package/dist/core/platform/config/resolve-config-value.d.ts +12 -0
- package/dist/core/platform/config/resolve-config-value.js +1 -0
- package/dist/core/platform/config/resource-loader.d.ts +188 -0
- package/dist/core/platform/config/resource-loader.js +2 -0
- package/dist/core/platform/config/settings-manager.d.ts +314 -0
- package/dist/core/platform/config/settings-manager.js +1 -0
- package/dist/core/platform/exec/bash-executor.d.ts +41 -0
- package/dist/core/platform/exec/bash-executor.js +1 -0
- package/dist/core/platform/exec/exec.d.ts +25 -0
- package/dist/core/platform/exec/exec.js +1 -0
- package/dist/core/platform/i18n/index.d.ts +26 -0
- package/dist/core/platform/i18n/index.js +1 -0
- package/dist/core/platform/i18n/messages.d.ts +56 -0
- package/dist/core/platform/i18n/messages.js +1 -0
- package/dist/core/platform/i18n/messages.zh.d.ts +56 -0
- package/dist/core/platform/i18n/messages.zh.js +1 -0
- package/dist/core/platform/i18n/slash-commands.d.ts +53 -0
- package/dist/core/platform/i18n/slash-commands.js +1 -0
- package/dist/core/platform/i18n/slash-commands.zh.d.ts +53 -0
- package/dist/core/platform/i18n/slash-commands.zh.js +1 -0
- package/dist/core/platform/i18n/themes.d.ts +11 -0
- package/dist/core/platform/i18n/themes.js +1 -0
- package/dist/core/platform/i18n/themes.zh.d.ts +11 -0
- package/dist/core/platform/i18n/themes.zh.js +1 -0
- package/dist/core/platform/keybindings.d.ts +61 -0
- package/dist/core/platform/keybindings.js +1 -0
- package/dist/core/platform/listeners.d.ts +21 -0
- package/dist/core/platform/listeners.js +1 -0
- package/dist/core/platform/telemetry/batching-dispatcher.d.ts +41 -0
- package/dist/core/platform/telemetry/batching-dispatcher.js +1 -0
- package/dist/core/platform/telemetry/build-meta.d.ts +12 -0
- package/dist/core/platform/telemetry/build-meta.js +1 -0
- package/dist/core/platform/telemetry/caller-context.d.ts +32 -0
- package/dist/core/platform/telemetry/caller-context.js +1 -0
- package/dist/core/platform/telemetry/credentials.d.ts +27 -0
- package/dist/core/platform/telemetry/credentials.js +1 -0
- package/dist/core/platform/telemetry/ext-events.d.ts +89 -0
- package/dist/core/platform/telemetry/ext-events.js +1 -0
- package/dist/core/platform/telemetry/index.d.ts +13 -0
- package/dist/core/platform/telemetry/index.js +1 -0
- package/dist/core/platform/telemetry/insforge-base.d.ts +37 -0
- package/dist/core/platform/telemetry/insforge-base.js +1 -0
- package/dist/core/platform/telemetry/types.d.ts +33 -0
- package/dist/core/platform/telemetry/types.js +0 -0
- package/dist/core/platform/timings.d.ts +2 -0
- package/dist/core/platform/timings.js +3 -0
- package/dist/core/platform/utils/logger.d.ts +75 -0
- package/dist/core/platform/utils/logger.js +1 -0
- package/dist/core/platform/utils/shell.d.ts +25 -0
- package/dist/core/platform/utils/shell.js +9 -0
- package/dist/core/platform/utils/sleep.d.ts +7 -0
- package/dist/core/platform/utils/sleep.js +1 -0
- package/dist/core/platform/utils/tools-manager.d.ts +19 -0
- package/dist/core/platform/utils/tools-manager.js +1 -0
- package/dist/core/prompt/prompt-templates.d.ts +49 -0
- package/dist/core/prompt/prompt-templates.js +2 -0
- package/dist/core/prompt/system-prompt.d.ts +24 -0
- package/dist/core/prompt/system-prompt.js +139 -0
- package/dist/core/runtime/agent-session.d.ts +676 -0
- package/dist/core/runtime/agent-session.js +15 -0
- package/dist/core/runtime/bash-runner.d.ts +56 -0
- package/dist/core/runtime/bash-runner.js +2 -0
- package/dist/core/runtime/catui-agent.d.ts +182 -0
- package/dist/core/runtime/catui-agent.js +1 -0
- package/dist/core/runtime/compaction-controller.d.ts +43 -0
- package/dist/core/runtime/compaction-controller.js +1 -0
- package/dist/core/runtime/default-tools.d.ts +9 -0
- package/dist/core/runtime/default-tools.js +1 -0
- package/dist/core/runtime/event-bridge.d.ts +21 -0
- package/dist/core/runtime/event-bridge.js +1 -0
- package/dist/core/runtime/event-bus.d.ts +8 -0
- package/dist/core/runtime/event-bus.js +1 -0
- package/dist/core/runtime/export-bridge.d.ts +23 -0
- package/dist/core/runtime/export-bridge.js +1 -0
- package/dist/core/runtime/extension-core-bindings.d.ts +46 -0
- package/dist/core/runtime/extension-core-bindings.js +3 -0
- package/dist/core/runtime/model-controller.d.ts +84 -0
- package/dist/core/runtime/model-controller.js +1 -0
- package/dist/core/runtime/model-cycle.d.ts +20 -0
- package/dist/core/runtime/model-cycle.js +1 -0
- package/dist/core/runtime/prompt-assembly.d.ts +20 -0
- package/dist/core/runtime/prompt-assembly.js +3 -0
- package/dist/core/runtime/retry-coordinator.d.ts +84 -0
- package/dist/core/runtime/retry-coordinator.js +1 -0
- package/dist/core/runtime/sdk.d.ts +163 -0
- package/dist/core/runtime/sdk.js +1 -0
- package/dist/core/runtime/session-context.d.ts +155 -0
- package/dist/core/runtime/session-context.js +0 -0
- package/dist/core/runtime/session-lifecycle-controller.d.ts +42 -0
- package/dist/core/runtime/session-lifecycle-controller.js +1 -0
- package/dist/core/runtime/session-tree-controller.d.ts +40 -0
- package/dist/core/runtime/session-tree-controller.js +1 -0
- package/dist/core/runtime/slash-command-catalog.d.ts +27 -0
- package/dist/core/runtime/slash-command-catalog.js +1 -0
- package/dist/core/runtime/thinking-levels.d.ts +31 -0
- package/dist/core/runtime/thinking-levels.js +1 -0
- package/dist/core/runtime/tool-runtime-controller.d.ts +35 -0
- package/dist/core/runtime/tool-runtime-controller.js +1 -0
- package/dist/core/runtime/turn-context.d.ts +52 -0
- package/dist/core/runtime/turn-context.js +1 -0
- package/dist/core/session/compaction/branch-summarization.d.ts +85 -0
- package/dist/core/session/compaction/branch-summarization.js +38 -0
- package/dist/core/session/compaction/compaction.d.ts +120 -0
- package/dist/core/session/compaction/compaction.js +104 -0
- package/dist/core/session/compaction/index.d.ts +9 -0
- package/dist/core/session/compaction/index.js +1 -0
- package/dist/core/session/compaction/utils.d.ts +37 -0
- package/dist/core/session/compaction/utils.js +17 -0
- package/dist/core/session/session-manager.d.ts +359 -0
- package/dist/core/session/session-manager.js +14 -0
- package/dist/core/skills.d.ts +57 -0
- package/dist/core/skills.js +4 -0
- package/dist/core/slash-commands.d.ts +36 -0
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/soul-integration.d.ts +77 -0
- package/dist/core/soul-integration.js +1 -0
- package/dist/core/soul-options-contract.d.ts +10 -0
- package/dist/core/soul-options-contract.js +0 -0
- package/dist/core/sub-agent/agent-definition-loader.d.ts +96 -0
- package/dist/core/sub-agent/agent-definition-loader.js +2 -0
- package/dist/core/sub-agent/agent-definition.d.ts +162 -0
- package/dist/core/sub-agent/agent-definition.js +6 -0
- package/dist/core/sub-agent/agent-handoff-safety.d.ts +39 -0
- package/dist/core/sub-agent/agent-handoff-safety.js +1 -0
- package/dist/core/sub-agent/agent-input-output.d.ts +143 -0
- package/dist/core/sub-agent/agent-input-output.js +1 -0
- package/dist/core/sub-agent/agent-output-persistence.d.ts +43 -0
- package/dist/core/sub-agent/agent-output-persistence.js +3 -0
- package/dist/core/sub-agent/agent-prompt-builder.d.ts +37 -0
- package/dist/core/sub-agent/agent-prompt-builder.js +2 -0
- package/dist/core/sub-agent/agent-registry.d.ts +145 -0
- package/dist/core/sub-agent/agent-registry.js +1 -0
- package/dist/core/sub-agent/agent-result-extractor.d.ts +28 -0
- package/dist/core/sub-agent/agent-result-extractor.js +3 -0
- package/dist/core/sub-agent/agent-telemetry.d.ts +71 -0
- package/dist/core/sub-agent/agent-telemetry.js +1 -0
- package/dist/core/sub-agent/agent-tool-filter.d.ts +89 -0
- package/dist/core/sub-agent/agent-tool-filter.js +2 -0
- package/dist/core/sub-agent/agent-tool.d.ts +69 -0
- package/dist/core/sub-agent/agent-tool.js +11 -0
- package/dist/core/sub-agent/index.d.ts +26 -0
- package/dist/core/sub-agent/index.js +1 -0
- package/dist/core/sub-agent/send-message-tool.d.ts +33 -0
- package/dist/core/sub-agent/send-message-tool.js +2 -0
- package/dist/core/sub-agent/sub-agent-backend.d.ts +26 -0
- package/dist/core/sub-agent/sub-agent-backend.js +7 -0
- package/dist/core/sub-agent/sub-agent-runtime.d.ts +34 -0
- package/dist/core/sub-agent/sub-agent-runtime.js +1 -0
- package/dist/core/sub-agent/sub-agent-types.d.ts +138 -0
- package/dist/core/sub-agent/sub-agent-types.js +0 -0
- package/dist/core/sub-agent/subprocess-backend.d.ts +35 -0
- package/dist/core/sub-agent/subprocess-backend.js +1 -0
- package/dist/core/sub-agent/subprocess-worker.d.ts +12 -0
- package/dist/core/sub-agent/subprocess-worker.js +1 -0
- package/dist/core/theme-contract.d.ts +32 -0
- package/dist/core/theme-contract.js +0 -0
- package/dist/core/tools/bash.d.ts +73 -0
- package/dist/core/tools/bash.js +21 -0
- package/dist/core/tools/edit-diff.d.ts +58 -0
- package/dist/core/tools/edit-diff.js +16 -0
- package/dist/core/tools/edit.d.ts +46 -0
- package/dist/core/tools/edit.js +1 -0
- package/dist/core/tools/file-state-cache.d.ts +30 -0
- package/dist/core/tools/file-state-cache.js +1 -0
- package/dist/core/tools/find.d.ts +46 -0
- package/dist/core/tools/find.js +8 -0
- package/dist/core/tools/grep.d.ts +58 -0
- package/dist/core/tools/grep.js +13 -0
- package/dist/core/tools/index.d.ts +116 -0
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/input-validation.d.ts +13 -0
- package/dist/core/tools/input-validation.js +1 -0
- package/dist/core/tools/ls.d.ts +45 -0
- package/dist/core/tools/ls.js +4 -0
- package/dist/core/tools/orchestrator.d.ts +76 -0
- package/dist/core/tools/orchestrator.js +1 -0
- package/dist/core/tools/path-utils.d.ts +7 -0
- package/dist/core/tools/path-utils.js +1 -0
- package/dist/core/tools/pdf-extract.d.ts +11 -0
- package/dist/core/tools/pdf-extract.js +1 -0
- package/dist/core/tools/read.d.ts +46 -0
- package/dist/core/tools/read.js +11 -0
- package/dist/core/tools/source.d.ts +78 -0
- package/dist/core/tools/source.js +1 -0
- package/dist/core/tools/time.d.ts +19 -0
- package/dist/core/tools/time.js +2 -0
- package/dist/core/tools/truncate.d.ts +66 -0
- package/dist/core/tools/truncate.js +5 -0
- package/dist/core/tools/write-guard.d.ts +2 -0
- package/dist/core/tools/write-guard.js +1 -0
- package/dist/core/tools/write.d.ts +36 -0
- package/dist/core/tools/write.js +1 -0
- package/dist/core/workspace/index.d.ts +8 -0
- package/dist/core/workspace/index.js +1 -0
- package/dist/core/workspace/worktree-manager.d.ts +73 -0
- package/dist/core/workspace/worktree-manager.js +3 -0
- package/dist/extensions/builtin/AGENT.md +115 -0
- package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.d.ts +9 -0
- package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.js +4 -0
- package/dist/extensions/builtin/ask-user-question/index.d.ts +8 -0
- package/dist/extensions/builtin/ask-user-question/index.js +1 -0
- package/dist/extensions/builtin/ask-user-question/prompt.d.ts +14 -0
- package/dist/extensions/builtin/ask-user-question/prompt.js +30 -0
- package/dist/extensions/builtin/ask-user-question/types.d.ts +69 -0
- package/dist/extensions/builtin/ask-user-question/types.js +1 -0
- package/dist/extensions/builtin/browser/AGENT.md +17 -0
- package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -0
- package/dist/extensions/builtin/browser/browser.md +73 -0
- package/dist/extensions/builtin/browser/index.d.ts +8 -0
- package/dist/extensions/builtin/browser/index.js +15 -0
- package/dist/extensions/builtin/browser/install.md +142 -0
- package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -0
- package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -0
- package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -0
- package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -0
- package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -0
- package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -0
- package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -0
- package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -0
- package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -0
- package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -0
- package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -0
- package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -0
- package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -0
- package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -0
- package/dist/extensions/builtin/btw/index.d.ts +8 -0
- package/dist/extensions/builtin/btw/index.js +15 -0
- package/dist/extensions/builtin/debug/collectors.d.ts +96 -0
- package/dist/extensions/builtin/debug/collectors.js +7 -0
- package/dist/extensions/builtin/debug/index.d.ts +8 -0
- package/dist/extensions/builtin/debug/index.js +49 -0
- package/dist/extensions/builtin/diagnostics/diagnostic-buffer.d.ts +19 -0
- package/dist/extensions/builtin/diagnostics/diagnostic-buffer.js +1 -0
- package/dist/extensions/builtin/diagnostics/index.d.ts +8 -0
- package/dist/extensions/builtin/diagnostics/index.js +1 -0
- package/dist/extensions/builtin/diagnostics/redaction.d.ts +8 -0
- package/dist/extensions/builtin/diagnostics/redaction.js +1 -0
- package/dist/extensions/builtin/diagnostics/reporter.d.ts +17 -0
- package/dist/extensions/builtin/diagnostics/reporter.js +1 -0
- package/dist/extensions/builtin/diagnostics/types.d.ts +62 -0
- package/dist/extensions/builtin/diagnostics/types.js +1 -0
- package/dist/extensions/builtin/discipline/index.d.ts +8 -0
- package/dist/extensions/builtin/discipline/index.js +7 -0
- package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -0
- package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -0
- package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -0
- package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -0
- package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -0
- package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -0
- package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -0
- package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -0
- package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -0
- package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -0
- package/dist/extensions/builtin/goal/README.md +67 -0
- package/dist/extensions/builtin/goal/goal-command.d.ts +13 -0
- package/dist/extensions/builtin/goal/goal-command.js +9 -0
- package/dist/extensions/builtin/goal/goal-controller.d.ts +143 -0
- package/dist/extensions/builtin/goal/goal-controller.js +1 -0
- package/dist/extensions/builtin/goal/goal-format.d.ts +52 -0
- package/dist/extensions/builtin/goal/goal-format.js +1 -0
- package/dist/extensions/builtin/goal/goal-parser.d.ts +27 -0
- package/dist/extensions/builtin/goal/goal-parser.js +2 -0
- package/dist/extensions/builtin/goal/goal-prompts.d.ts +15 -0
- package/dist/extensions/builtin/goal/goal-prompts.js +5 -0
- package/dist/extensions/builtin/goal/goal-store.d.ts +28 -0
- package/dist/extensions/builtin/goal/goal-store.js +1 -0
- package/dist/extensions/builtin/goal/goal-tools.d.ts +26 -0
- package/dist/extensions/builtin/goal/goal-tools.js +3 -0
- package/dist/extensions/builtin/goal/goal-types.d.ts +87 -0
- package/dist/extensions/builtin/goal/goal-types.js +1 -0
- package/dist/extensions/builtin/goal/index.d.ts +8 -0
- package/dist/extensions/builtin/goal/index.js +10 -0
- package/dist/extensions/builtin/grub/README.md +112 -0
- package/dist/extensions/builtin/grub/grub-controller.d.ts +67 -0
- package/dist/extensions/builtin/grub/grub-controller.js +1 -0
- package/dist/extensions/builtin/grub/grub-decision.d.ts +8 -0
- package/dist/extensions/builtin/grub/grub-decision.js +1 -0
- package/dist/extensions/builtin/grub/grub-feature-list.d.ts +54 -0
- package/dist/extensions/builtin/grub/grub-feature-list.js +2 -0
- package/dist/extensions/builtin/grub/grub-format.d.ts +13 -0
- package/dist/extensions/builtin/grub/grub-format.js +4 -0
- package/dist/extensions/builtin/grub/grub-harness.d.ts +9 -0
- package/dist/extensions/builtin/grub/grub-harness.js +3 -0
- package/dist/extensions/builtin/grub/grub-i18n.d.ts +166 -0
- package/dist/extensions/builtin/grub/grub-i18n.js +1 -0
- package/dist/extensions/builtin/grub/grub-parser.d.ts +24 -0
- package/dist/extensions/builtin/grub/grub-parser.js +2 -0
- package/dist/extensions/builtin/grub/grub-persistence.d.ts +17 -0
- package/dist/extensions/builtin/grub/grub-persistence.js +2 -0
- package/dist/extensions/builtin/grub/grub-prompts.d.ts +12 -0
- package/dist/extensions/builtin/grub/grub-prompts.js +97 -0
- package/dist/extensions/builtin/grub/grub-turn.d.ts +16 -0
- package/dist/extensions/builtin/grub/grub-turn.js +1 -0
- package/dist/extensions/builtin/grub/grub-types.d.ts +110 -0
- package/dist/extensions/builtin/grub/grub-types.js +1 -0
- package/dist/extensions/builtin/grub/index.d.ts +8 -0
- package/dist/extensions/builtin/grub/index.js +6 -0
- package/dist/extensions/builtin/idle-think/curiosity.d.ts +46 -0
- package/dist/extensions/builtin/idle-think/curiosity.js +2 -0
- package/dist/extensions/builtin/idle-think/idle-think-runtime.d.ts +46 -0
- package/dist/extensions/builtin/idle-think/idle-think-runtime.js +1 -0
- package/dist/extensions/builtin/idle-think/index.d.ts +15 -0
- package/dist/extensions/builtin/idle-think/index.js +1 -0
- package/dist/extensions/builtin/idle-think/insights.d.ts +27 -0
- package/dist/extensions/builtin/idle-think/insights.js +5 -0
- package/dist/extensions/builtin/idle-think/thinker.d.ts +26 -0
- package/dist/extensions/builtin/idle-think/thinker.js +9 -0
- package/dist/extensions/builtin/insights/html-report.d.ts +21 -0
- package/dist/extensions/builtin/insights/html-report.js +463 -0
- package/dist/extensions/builtin/insights/index.d.ts +24 -0
- package/dist/extensions/builtin/insights/index.js +2 -0
- package/dist/extensions/builtin/insights/insights-engine.d.ts +18 -0
- package/dist/extensions/builtin/insights/insights-engine.js +39 -0
- package/dist/extensions/builtin/insights/prompts.d.ts +17 -0
- package/dist/extensions/builtin/insights/prompts.js +180 -0
- package/dist/extensions/builtin/insights/session-scanner.d.ts +27 -0
- package/dist/extensions/builtin/insights/session-scanner.js +19 -0
- package/dist/extensions/builtin/insights/stats.d.ts +13 -0
- package/dist/extensions/builtin/insights/stats.js +1 -0
- package/dist/extensions/builtin/insights/types.d.ts +199 -0
- package/dist/extensions/builtin/insights/types.js +0 -0
- package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -0
- package/dist/extensions/builtin/link-world/index.d.ts +8 -0
- package/dist/extensions/builtin/link-world/index.js +19 -0
- package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -0
- package/dist/extensions/builtin/link-world/link-world-agent.md +82 -0
- package/dist/extensions/builtin/link-world/linkworld.md +313 -0
- package/dist/extensions/builtin/link-world/network-routing/network-routing.md +67 -0
- package/dist/extensions/builtin/loop/README.md +92 -0
- package/dist/extensions/builtin/loop/cron/cron-parser.d.ts +56 -0
- package/dist/extensions/builtin/loop/cron/cron-parser.js +1 -0
- package/dist/extensions/builtin/loop/cron/cron-scheduler.d.ts +85 -0
- package/dist/extensions/builtin/loop/cron/cron-scheduler.js +10 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks-lock.d.ts +42 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks-lock.js +1 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks.d.ts +200 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks.js +2 -0
- package/dist/extensions/builtin/loop/cron/index.d.ts +18 -0
- package/dist/extensions/builtin/loop/cron/index.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.d.ts +35 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.d.ts +29 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.d.ts +25 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.js +2 -0
- package/dist/extensions/builtin/loop/cron-tools/index.d.ts +16 -0
- package/dist/extensions/builtin/loop/cron-tools/index.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/prompt.d.ts +35 -0
- package/dist/extensions/builtin/loop/cron-tools/prompt.js +38 -0
- package/dist/extensions/builtin/loop/index.d.ts +19 -0
- package/dist/extensions/builtin/loop/index.js +2 -0
- package/dist/extensions/builtin/loop/loop-skill.d.ts +18 -0
- package/dist/extensions/builtin/loop/loop-skill.js +58 -0
- package/dist/extensions/builtin/lsp/index.d.ts +8 -0
- package/dist/extensions/builtin/lsp/index.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-client.d.ts +22 -0
- package/dist/extensions/builtin/lsp/lsp-client.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-config.d.ts +8 -0
- package/dist/extensions/builtin/lsp/lsp-config.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-formatters.d.ts +15 -0
- package/dist/extensions/builtin/lsp/lsp-formatters.js +18 -0
- package/dist/extensions/builtin/lsp/lsp-server-instance.d.ts +24 -0
- package/dist/extensions/builtin/lsp/lsp-server-instance.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-server-manager.d.ts +21 -0
- package/dist/extensions/builtin/lsp/lsp-server-manager.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-tool.d.ts +33 -0
- package/dist/extensions/builtin/lsp/lsp-tool.js +2 -0
- package/dist/extensions/builtin/lsp/types.d.ts +31 -0
- package/dist/extensions/builtin/lsp/types.js +1 -0
- package/dist/extensions/builtin/mcp/figma-design.md +68 -0
- package/dist/extensions/builtin/mcp/index.d.ts +14 -0
- package/dist/extensions/builtin/mcp/index.js +25 -0
- package/dist/extensions/builtin/mcp/mcp-management.md +85 -0
- package/dist/extensions/builtin/plan/clear-context-state.d.ts +8 -0
- package/dist/extensions/builtin/plan/clear-context-state.js +1 -0
- package/dist/extensions/builtin/plan/enter-plan-mode-tool.d.ts +11 -0
- package/dist/extensions/builtin/plan/enter-plan-mode-tool.js +2 -0
- package/dist/extensions/builtin/plan/exit-plan-mode-tool.d.ts +18 -0
- package/dist/extensions/builtin/plan/exit-plan-mode-tool.js +13 -0
- package/dist/extensions/builtin/plan/index.d.ts +8 -0
- package/dist/extensions/builtin/plan/index.js +24 -0
- package/dist/extensions/builtin/plan/plan-agents.d.ts +23 -0
- package/dist/extensions/builtin/plan/plan-agents.js +43 -0
- package/dist/extensions/builtin/plan/plan-file-manager.d.ts +26 -0
- package/dist/extensions/builtin/plan/plan-file-manager.js +1 -0
- package/dist/extensions/builtin/plan/plan-permissions.d.ts +15 -0
- package/dist/extensions/builtin/plan/plan-permissions.js +12 -0
- package/dist/extensions/builtin/plan/plan-validation.d.ts +18 -0
- package/dist/extensions/builtin/plan/plan-validation.js +5 -0
- package/dist/extensions/builtin/plan/plan-workflow-prompt.d.ts +18 -0
- package/dist/extensions/builtin/plan/plan-workflow-prompt.js +102 -0
- package/dist/extensions/builtin/plan/teammate-approval.d.ts +49 -0
- package/dist/extensions/builtin/plan/teammate-approval.js +3 -0
- package/dist/extensions/builtin/plan/types.d.ts +133 -0
- package/dist/extensions/builtin/plan/types.js +1 -0
- package/dist/extensions/builtin/presence/index.d.ts +40 -0
- package/dist/extensions/builtin/presence/index.js +15 -0
- package/dist/extensions/builtin/presence/presence-memory.d.ts +47 -0
- package/dist/extensions/builtin/presence/presence-memory.js +1 -0
- package/dist/extensions/builtin/recap/AGENT.md +15 -0
- package/dist/extensions/builtin/recap/index.d.ts +8 -0
- package/dist/extensions/builtin/recap/index.js +1 -0
- package/dist/extensions/builtin/recap/recap-budget.d.ts +24 -0
- package/dist/extensions/builtin/recap/recap-budget.js +1 -0
- package/dist/extensions/builtin/recap/recap-extractor.d.ts +34 -0
- package/dist/extensions/builtin/recap/recap-extractor.js +3 -0
- package/dist/extensions/builtin/recap/recap-renderer.d.ts +19 -0
- package/dist/extensions/builtin/recap/recap-renderer.js +2 -0
- package/dist/extensions/builtin/recap/recap-synthesizer.d.ts +51 -0
- package/dist/extensions/builtin/recap/recap-synthesizer.js +19 -0
- package/dist/extensions/builtin/recap/recap-types.d.ts +40 -0
- package/dist/extensions/builtin/recap/recap-types.js +1 -0
- package/dist/extensions/builtin/sal/README.md +72 -0
- package/dist/extensions/builtin/sal/anchors.d.ts +46 -0
- package/dist/extensions/builtin/sal/anchors.js +1 -0
- package/dist/extensions/builtin/sal/eval/index.d.ts +18 -0
- package/dist/extensions/builtin/sal/eval/index.js +1 -0
- package/dist/extensions/builtin/sal/eval/insforge-sink.d.ts +30 -0
- package/dist/extensions/builtin/sal/eval/insforge-sink.js +1 -0
- package/dist/extensions/builtin/sal/eval/jsonl-sink.d.ts +27 -0
- package/dist/extensions/builtin/sal/eval/jsonl-sink.js +3 -0
- package/dist/extensions/builtin/sal/eval/noop-sink.d.ts +8 -0
- package/dist/extensions/builtin/sal/eval/noop-sink.js +1 -0
- package/dist/extensions/builtin/sal/eval/types.d.ts +60 -0
- package/dist/extensions/builtin/sal/eval/types.js +1 -0
- package/dist/extensions/builtin/sal/index.d.ts +12 -0
- package/dist/extensions/builtin/sal/index.js +7 -0
- package/dist/extensions/builtin/sal/sal-config.d.ts +46 -0
- package/dist/extensions/builtin/sal/sal-config.js +1 -0
- package/dist/extensions/builtin/sal/sal-context.d.ts +11 -0
- package/dist/extensions/builtin/sal/sal-context.js +2 -0
- package/dist/extensions/builtin/sal/sal-runtime.d.ts +72 -0
- package/dist/extensions/builtin/sal/sal-runtime.js +0 -0
- package/dist/extensions/builtin/sal/sal-trace.d.ts +11 -0
- package/dist/extensions/builtin/sal/sal-trace.js +1 -0
- package/dist/extensions/builtin/sal/terrain.d.ts +73 -0
- package/dist/extensions/builtin/sal/terrain.js +3 -0
- package/dist/extensions/builtin/sal/weights.d.ts +28 -0
- package/dist/extensions/builtin/sal/weights.js +1 -0
- package/dist/extensions/builtin/security-audit/README.md +289 -0
- package/dist/extensions/builtin/security-audit/engine/detector.d.ts +44 -0
- package/dist/extensions/builtin/security-audit/engine/detector.js +1 -0
- package/dist/extensions/builtin/security-audit/engine/interceptor.d.ts +61 -0
- package/dist/extensions/builtin/security-audit/engine/interceptor.js +27 -0
- package/dist/extensions/builtin/security-audit/engine/logger.d.ts +65 -0
- package/dist/extensions/builtin/security-audit/engine/logger.js +65 -0
- package/dist/extensions/builtin/security-audit/index.d.ts +13 -0
- package/dist/extensions/builtin/security-audit/index.js +49 -0
- package/dist/extensions/builtin/security-audit/interface.d.ts +167 -0
- package/dist/extensions/builtin/security-audit/interface.js +1 -0
- package/dist/extensions/builtin/soul/index.d.ts +13 -0
- package/dist/extensions/builtin/soul/index.js +1 -0
- package/dist/extensions/builtin/subagent/index.d.ts +8 -0
- package/dist/extensions/builtin/subagent/index.js +8 -0
- package/dist/extensions/builtin/subagent/subagent-parser.d.ts +30 -0
- package/dist/extensions/builtin/subagent/subagent-parser.js +15 -0
- package/dist/extensions/builtin/subagent/subagent-runner.d.ts +49 -0
- package/dist/extensions/builtin/subagent/subagent-runner.js +8 -0
- package/dist/extensions/builtin/subagent/subagent-types.d.ts +57 -0
- package/dist/extensions/builtin/subagent/subagent-types.js +0 -0
- package/dist/extensions/builtin/task/index.d.ts +8 -0
- package/dist/extensions/builtin/task/index.js +1 -0
- package/dist/extensions/builtin/task/task-store.d.ts +42 -0
- package/dist/extensions/builtin/task/task-store.js +1 -0
- package/dist/extensions/builtin/task/task-tools/task-create-tool.d.ts +37 -0
- package/dist/extensions/builtin/task/task-tools/task-create-tool.js +40 -0
- package/dist/extensions/builtin/task/task-tools/task-get-tool.d.ts +31 -0
- package/dist/extensions/builtin/task/task-tools/task-get-tool.js +23 -0
- package/dist/extensions/builtin/task/task-tools/task-list-tool.d.ts +27 -0
- package/dist/extensions/builtin/task/task-tools/task-list-tool.js +22 -0
- package/dist/extensions/builtin/task/task-tools/task-output-tool.d.ts +32 -0
- package/dist/extensions/builtin/task/task-tools/task-output-tool.js +10 -0
- package/dist/extensions/builtin/task/task-tools/task-stop-tool.d.ts +31 -0
- package/dist/extensions/builtin/task/task-tools/task-stop-tool.js +5 -0
- package/dist/extensions/builtin/task/task-tools/task-update-tool.d.ts +47 -0
- package/dist/extensions/builtin/task/task-tools/task-update-tool.js +77 -0
- package/dist/extensions/builtin/task/task-tools/tool-search-tool.d.ts +34 -0
- package/dist/extensions/builtin/task/task-tools/tool-search-tool.js +14 -0
- package/dist/extensions/builtin/task/task-types.d.ts +30 -0
- package/dist/extensions/builtin/task/task-types.js +1 -0
- package/dist/extensions/builtin/teach/README.md +197 -0
- package/dist/extensions/builtin/teach/index.d.ts +12 -0
- package/dist/extensions/builtin/teach/index.js +6 -0
- package/dist/extensions/builtin/teach/references/analogy-library.md +153 -0
- package/dist/extensions/builtin/teach/references/learning-paths.md +214 -0
- package/dist/extensions/builtin/teach/references/source-verification.md +268 -0
- package/dist/extensions/builtin/teach/references/teaching-template.md +237 -0
- package/dist/extensions/builtin/teach/teach-format.d.ts +35 -0
- package/dist/extensions/builtin/teach/teach-format.js +6 -0
- package/dist/extensions/builtin/teach/teach-i18n.d.ts +47 -0
- package/dist/extensions/builtin/teach/teach-i18n.js +1 -0
- package/dist/extensions/builtin/teach/teach-persistence.d.ts +36 -0
- package/dist/extensions/builtin/teach/teach-persistence.js +35 -0
- package/dist/extensions/builtin/teach/teach-prompts.d.ts +52 -0
- package/dist/extensions/builtin/teach/teach-prompts.js +35 -0
- package/dist/extensions/builtin/teach/teach-runtime.d.ts +93 -0
- package/dist/extensions/builtin/teach/teach-runtime.js +9 -0
- package/dist/extensions/builtin/teach/teach-types.d.ts +81 -0
- package/dist/extensions/builtin/teach/teach-types.js +0 -0
- package/dist/extensions/builtin/team/AGENT.md +112 -0
- package/dist/extensions/builtin/team/TESTING.md +299 -0
- package/dist/extensions/builtin/team/index.d.ts +26 -0
- package/dist/extensions/builtin/team/index.js +11 -0
- package/dist/extensions/builtin/team/team-dashboard.d.ts +13 -0
- package/dist/extensions/builtin/team/team-dashboard.js +1 -0
- package/dist/extensions/builtin/team/team-harness.d.ts +35 -0
- package/dist/extensions/builtin/team/team-harness.js +18 -0
- package/dist/extensions/builtin/team/team-mailbox.d.ts +50 -0
- package/dist/extensions/builtin/team/team-mailbox.js +4 -0
- package/dist/extensions/builtin/team/team-orchestrator.d.ts +39 -0
- package/dist/extensions/builtin/team/team-orchestrator.js +5 -0
- package/dist/extensions/builtin/team/team-parser.d.ts +84 -0
- package/dist/extensions/builtin/team/team-parser.js +38 -0
- package/dist/extensions/builtin/team/team-permissions.d.ts +63 -0
- package/dist/extensions/builtin/team/team-permissions.js +1 -0
- package/dist/extensions/builtin/team/team-presets.d.ts +45 -0
- package/dist/extensions/builtin/team/team-presets.js +2 -0
- package/dist/extensions/builtin/team/team-psyche.d.ts +14 -0
- package/dist/extensions/builtin/team/team-psyche.js +5 -0
- package/dist/extensions/builtin/team/team-runtime-helpers.d.ts +48 -0
- package/dist/extensions/builtin/team/team-runtime-helpers.js +2 -0
- package/dist/extensions/builtin/team/team-runtime.d.ts +91 -0
- package/dist/extensions/builtin/team/team-runtime.js +3 -0
- package/dist/extensions/builtin/team/team-state-store.d.ts +29 -0
- package/dist/extensions/builtin/team/team-state-store.js +2 -0
- package/dist/extensions/builtin/team/team-task-store.d.ts +35 -0
- package/dist/extensions/builtin/team/team-task-store.js +2 -0
- package/dist/extensions/builtin/team/team-transcript.d.ts +31 -0
- package/dist/extensions/builtin/team/team-transcript.js +2 -0
- package/dist/extensions/builtin/team/team-types.d.ts +250 -0
- package/dist/extensions/builtin/team/team-types.js +0 -0
- package/dist/extensions/builtin/team/team-ui.d.ts +50 -0
- package/dist/extensions/builtin/team/team-ui.js +2 -0
- package/dist/extensions/builtin/token-save/README.md +56 -0
- package/dist/extensions/builtin/token-save/config.d.ts +8 -0
- package/dist/extensions/builtin/token-save/config.js +1 -0
- package/dist/extensions/builtin/token-save/filters.d.ts +14 -0
- package/dist/extensions/builtin/token-save/filters.js +24 -0
- package/dist/extensions/builtin/token-save/index.d.ts +8 -0
- package/dist/extensions/builtin/token-save/index.js +4 -0
- package/dist/extensions/builtin/token-save/lexer.d.ts +11 -0
- package/dist/extensions/builtin/token-save/lexer.js +1 -0
- package/dist/extensions/builtin/token-save/recovery.d.ts +1 -0
- package/dist/extensions/builtin/token-save/recovery.js +1 -0
- package/dist/extensions/builtin/token-save/rewrite.d.ts +19 -0
- package/dist/extensions/builtin/token-save/rewrite.js +1 -0
- package/dist/extensions/builtin/token-save/runner.d.ts +14 -0
- package/dist/extensions/builtin/token-save/runner.js +3 -0
- package/dist/extensions/builtin/token-save/stream.d.ts +20 -0
- package/dist/extensions/builtin/token-save/stream.js +1 -0
- package/dist/extensions/builtin/token-save/toml-dsl.d.ts +25 -0
- package/dist/extensions/builtin/token-save/toml-dsl.js +3 -0
- package/dist/extensions/builtin/token-save/tracking.d.ts +24 -0
- package/dist/extensions/builtin/token-save/tracking.js +8 -0
- package/dist/extensions/optional/AGENT.md +11 -0
- package/dist/extensions/optional/export-html/index.d.ts +41 -0
- package/dist/extensions/optional/export-html/index.js +2 -0
- package/dist/extensions/optional/simplify/index.d.ts +35 -0
- package/dist/extensions/optional/simplify/index.js +77 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +1 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.js +41 -0
- package/dist/migrations.d.ts +30 -0
- package/dist/migrations.js +4 -0
- package/dist/models.d.ts +7 -0
- package/dist/models.js +1 -0
- package/dist/modes/acp/acp-mode.d.ts +30 -0
- package/dist/modes/acp/acp-mode.js +25 -0
- package/dist/modes/index.d.ts +14 -0
- package/dist/modes/index.js +1 -0
- package/dist/modes/interactive/agent-loop-status.d.ts +8 -0
- package/dist/modes/interactive/agent-loop-status.js +1 -0
- package/dist/modes/interactive/components/apikey-input.d.ts +10 -0
- package/dist/modes/interactive/components/apikey-input.js +3 -0
- package/dist/modes/interactive/components/armin.d.ts +39 -0
- package/dist/modes/interactive/components/armin.js +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +21 -0
- package/dist/modes/interactive/components/assistant-message.js +1 -0
- package/dist/modes/interactive/components/attachments-bar.d.ts +37 -0
- package/dist/modes/interactive/components/attachments-bar.js +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +40 -0
- package/dist/modes/interactive/components/bash-execution.js +13 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +21 -0
- package/dist/modes/interactive/components/bordered-loader.js +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +21 -0
- package/dist/modes/interactive/components/branch-summary-message.js +3 -0
- package/dist/modes/interactive/components/buddy/pet-sprites.d.ts +31 -0
- package/dist/modes/interactive/components/buddy/pet-sprites.js +1 -0
- package/dist/modes/interactive/components/catui-loader.d.ts +55 -0
- package/dist/modes/interactive/components/catui-loader.js +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +21 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +3 -0
- package/dist/modes/interactive/components/config-selector.d.ts +76 -0
- package/dist/modes/interactive/components/config-selector.js +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +19 -0
- package/dist/modes/interactive/components/countdown-timer.js +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +37 -0
- package/dist/modes/interactive/components/custom-editor.js +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +26 -0
- package/dist/modes/interactive/components/custom-message.js +2 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +28 -0
- package/dist/modes/interactive/components/daxnuts.js +1 -0
- package/dist/modes/interactive/components/diff.d.ts +17 -0
- package/dist/modes/interactive/components/diff.js +3 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +20 -0
- package/dist/modes/interactive/components/dynamic-border.js +1 -0
- package/dist/modes/interactive/components/editor-buddy-layout.d.ts +17 -0
- package/dist/modes/interactive/components/editor-buddy-layout.js +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +25 -0
- package/dist/modes/interactive/components/extension-editor.js +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +29 -0
- package/dist/modes/interactive/components/extension-input.js +2 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +32 -0
- package/dist/modes/interactive/components/extension-selector.js +2 -0
- package/dist/modes/interactive/components/footer.d.ts +34 -0
- package/dist/modes/interactive/components/footer.js +1 -0
- package/dist/modes/interactive/components/index.d.ts +44 -0
- package/dist/modes/interactive/components/index.js +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +46 -0
- package/dist/modes/interactive/components/keybinding-hints.js +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +47 -0
- package/dist/modes/interactive/components/login-dialog.js +1 -0
- package/dist/modes/interactive/components/memory-stats.d.ts +14 -0
- package/dist/modes/interactive/components/memory-stats.js +2 -0
- package/dist/modes/interactive/components/model-selector.d.ts +59 -0
- package/dist/modes/interactive/components/model-selector.js +2 -0
- package/dist/modes/interactive/components/notification-queue.d.ts +49 -0
- package/dist/modes/interactive/components/notification-queue.js +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +30 -0
- package/dist/modes/interactive/components/oauth-selector.js +1 -0
- package/dist/modes/interactive/components/persona-selector.d.ts +24 -0
- package/dist/modes/interactive/components/persona-selector.js +1 -0
- package/dist/modes/interactive/components/plan-progress-panel.d.ts +24 -0
- package/dist/modes/interactive/components/plan-progress-panel.js +1 -0
- package/dist/modes/interactive/components/provider-selector.d.ts +25 -0
- package/dist/modes/interactive/components/provider-selector.js +1 -0
- package/dist/modes/interactive/components/raw-text.d.ts +19 -0
- package/dist/modes/interactive/components/raw-text.js +3 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +54 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +28 -0
- package/dist/modes/interactive/components/session-selector-search.js +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +100 -0
- package/dist/modes/interactive/components/session-selector.js +2 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/modes/interactive/components/settings-selector.js +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +15 -0
- package/dist/modes/interactive/components/show-images-selector.js +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +22 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +3 -0
- package/dist/modes/interactive/components/soul-stats.d.ts +15 -0
- package/dist/modes/interactive/components/soul-stats.js +2 -0
- package/dist/modes/interactive/components/sub-agent-panel.d.ts +24 -0
- package/dist/modes/interactive/components/sub-agent-panel.js +1 -0
- package/dist/modes/interactive/components/task-status-panel.d.ts +36 -0
- package/dist/modes/interactive/components/task-status-panel.js +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +16 -0
- package/dist/modes/interactive/components/theme-selector.js +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +16 -0
- package/dist/modes/interactive/components/thinking-selector.js +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +80 -0
- package/dist/modes/interactive/components/tool-execution.js +58 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +73 -0
- package/dist/modes/interactive/components/tree-selector.js +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +35 -0
- package/dist/modes/interactive/components/user-message-selector.js +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +13 -0
- package/dist/modes/interactive/components/user-message.js +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +29 -0
- package/dist/modes/interactive/components/visual-truncate.js +1 -0
- package/dist/modes/interactive/controllers/auth-provider-config-controller.d.ts +64 -0
- package/dist/modes/interactive/controllers/auth-provider-config-controller.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.d.ts +38 -0
- package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.d.ts +37 -0
- package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.d.ts +53 -0
- package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/prompt-host.d.ts +52 -0
- package/dist/modes/interactive/controllers/extension-ui/prompt-host.js +2 -0
- package/dist/modes/interactive/controllers/image-pipeline-controller.d.ts +106 -0
- package/dist/modes/interactive/controllers/image-pipeline-controller.js +1 -0
- package/dist/modes/interactive/controllers/input-submit-controller.d.ts +80 -0
- package/dist/modes/interactive/controllers/input-submit-controller.js +2 -0
- package/dist/modes/interactive/controllers/interrupt-controller.d.ts +75 -0
- package/dist/modes/interactive/controllers/interrupt-controller.js +1 -0
- package/dist/modes/interactive/controllers/model-overlay-controller.d.ts +127 -0
- package/dist/modes/interactive/controllers/model-overlay-controller.js +3 -0
- package/dist/modes/interactive/controllers/self-update-controller.d.ts +71 -0
- package/dist/modes/interactive/controllers/self-update-controller.js +24 -0
- package/dist/modes/interactive/controllers/settings-overlay-controller.d.ts +56 -0
- package/dist/modes/interactive/controllers/settings-overlay-controller.js +2 -0
- package/dist/modes/interactive/controllers/slash-dispatcher-controller.d.ts +74 -0
- package/dist/modes/interactive/controllers/slash-dispatcher-controller.js +1 -0
- package/dist/modes/interactive/controllers/stream-render-controller.d.ts +110 -0
- package/dist/modes/interactive/controllers/stream-render-controller.js +2 -0
- package/dist/modes/interactive/controllers/tree-overlay-controller.d.ts +55 -0
- package/dist/modes/interactive/controllers/tree-overlay-controller.js +1 -0
- package/dist/modes/interactive/footer-data-provider.d.ts +32 -0
- package/dist/modes/interactive/footer-data-provider.js +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +303 -0
- package/dist/modes/interactive/interactive-mode.js +119 -0
- package/dist/modes/interactive/services/tips.d.ts +20 -0
- package/dist/modes/interactive/services/tips.js +1 -0
- package/dist/modes/interactive/slash-command-arguments.d.ts +28 -0
- package/dist/modes/interactive/slash-command-arguments.js +1 -0
- package/dist/modes/interactive/state/interactive-state.d.ts +74 -0
- package/dist/modes/interactive/state/interactive-state.js +1 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +84 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +81 -0
- package/dist/modes/interactive/theme/theme.js +16 -0
- package/dist/modes/interactive/theme/warm.json +81 -0
- package/dist/modes/print-mode.d.ts +38 -0
- package/dist/modes/print-mode.js +2 -0
- package/dist/modes/rpc/rpc-client.d.ts +221 -0
- package/dist/modes/rpc/rpc-client.js +2 -0
- package/dist/modes/rpc/rpc-mode.d.ts +14 -0
- package/dist/modes/rpc/rpc-mode.js +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +449 -0
- package/dist/modes/rpc/rpc-types.js +0 -0
- package/dist/modes/utils/agent-loop-result-format.d.ts +10 -0
- package/dist/modes/utils/agent-loop-result-format.js +1 -0
- package/dist/modes/utils/clipboard-image.d.ts +10 -0
- package/dist/modes/utils/clipboard-image.js +1 -0
- package/dist/modes/utils/clipboard-native.d.ts +11 -0
- package/dist/modes/utils/clipboard-native.js +1 -0
- package/dist/modes/utils/clipboard.d.ts +1 -0
- package/dist/modes/utils/clipboard.js +1 -0
- package/dist/modes/utils/image-convert.d.ts +8 -0
- package/dist/modes/utils/image-convert.js +1 -0
- package/dist/modes/utils/image-resize.d.ts +41 -0
- package/dist/modes/utils/image-resize.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-continuations.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-stream-events.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-tool-results.js +3 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-tool-summaries.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop.js +4 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-run-result.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/errors.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/index.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/proxy.js +2 -0
- package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-agent-loop.js +2 -0
- package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-streaming-tool-executor.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-tool-orchestration.js +3 -0
- package/dist/node_modules/@catui/agent-core/dist/types.js +1 -0
- package/dist/node_modules/@catui/agent-core/package.json +28 -0
- package/dist/node_modules/@catui/ai/dist/api-registry.js +1 -0
- package/dist/node_modules/@catui/ai/dist/cli.js +21 -0
- package/dist/node_modules/@catui/ai/dist/config-path.js +1 -0
- package/dist/node_modules/@catui/ai/dist/debug-logger.js +4 -0
- package/dist/node_modules/@catui/ai/dist/env-api-keys.js +1 -0
- package/dist/node_modules/@catui/ai/dist/env.js +1 -0
- package/dist/node_modules/@catui/ai/dist/events.js +1 -0
- package/dist/node_modules/@catui/ai/dist/index.js +1 -0
- package/dist/node_modules/@catui/ai/dist/json.js +1 -0
- package/dist/node_modules/@catui/ai/dist/models.generated.js +1 -0
- package/dist/node_modules/@catui/ai/dist/models.js +1 -0
- package/dist/node_modules/@catui/ai/dist/overflow.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/amazon-bedrock.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/anthropic.js +2 -0
- package/dist/node_modules/@catui/ai/dist/providers/azure-openai-responses.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/github-copilot-headers.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/google-gemini-cli.js +2 -0
- package/dist/node_modules/@catui/ai/dist/providers/google-shared.js +2 -0
- package/dist/node_modules/@catui/ai/dist/providers/google-vertex.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/google.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-codex-responses.js +7 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-completions.js +6 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-responses-shared.js +10 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-responses.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/register-builtins.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/simple-options.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/transform-messages.js +1 -0
- package/dist/node_modules/@catui/ai/dist/registry.js +1 -0
- package/dist/node_modules/@catui/ai/dist/schema.js +1 -0
- package/dist/node_modules/@catui/ai/dist/stream.js +1 -0
- package/dist/node_modules/@catui/ai/dist/types.js +0 -0
- package/dist/node_modules/@catui/ai/dist/utils/event-stream-types.js +0 -0
- package/dist/node_modules/@catui/ai/dist/utils/event-stream.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/http-proxy.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/json-parse.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/anthropic.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/decode-credential.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/github-copilot.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/google-antigravity.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/google-gemini-cli.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/index.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/openai-codex.js +11 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/pkce.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/types.js +0 -0
- package/dist/node_modules/@catui/ai/dist/utils/overflow.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/sanitize-unicode.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/typebox-helpers.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/validation.js +6 -0
- package/dist/node_modules/@catui/ai/package.json +106 -0
- package/dist/node_modules/@catui/tui/dist/autocomplete.js +2 -0
- package/dist/node_modules/@catui/tui/dist/components/box.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/cached-container.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/cancellable-loader.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/editor.js +21 -0
- package/dist/node_modules/@catui/tui/dist/components/image.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/input.js +2 -0
- package/dist/node_modules/@catui/tui/dist/components/loader.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/markdown.js +7 -0
- package/dist/node_modules/@catui/tui/dist/components/select-list.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/settings-list.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/spacer.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/text.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/truncated-text.js +2 -0
- package/dist/node_modules/@catui/tui/dist/editor-component.js +0 -0
- package/dist/node_modules/@catui/tui/dist/fuzzy.js +1 -0
- package/dist/node_modules/@catui/tui/dist/index.js +1 -0
- package/dist/node_modules/@catui/tui/dist/keybindings.js +1 -0
- package/dist/node_modules/@catui/tui/dist/keys.js +5 -0
- package/dist/node_modules/@catui/tui/dist/kill-ring.js +1 -0
- package/dist/node_modules/@catui/tui/dist/stdin-buffer.js +1 -0
- package/dist/node_modules/@catui/tui/dist/terminal-image.js +1 -0
- package/dist/node_modules/@catui/tui/dist/terminal.js +1 -0
- package/dist/node_modules/@catui/tui/dist/tui.js +12 -0
- package/dist/node_modules/@catui/tui/dist/undo-stack.js +1 -0
- package/dist/node_modules/@catui/tui/dist/utils.js +2 -0
- package/dist/node_modules/@catui/tui/package.json +37 -0
- package/dist/packages/mem-core/src/store.d.ts +21 -0
- package/dist/packages/mem-core/src/store.js +1 -0
- package/dist/packages/mem-core/src/types.d.ts +329 -0
- package/dist/packages/mem-core/src/types.js +0 -0
- package/dist/packages/protocol/src/commands.d.ts +33 -0
- package/dist/packages/protocol/src/commands.js +0 -0
- package/dist/packages/protocol/src/flags.d.ts +20 -0
- package/dist/packages/protocol/src/flags.js +0 -0
- package/dist/packages/protocol/src/hooks.d.ts +17 -0
- package/dist/packages/protocol/src/hooks.js +0 -0
- package/dist/packages/protocol/src/index.d.ts +15 -0
- package/dist/packages/protocol/src/index.js +1 -0
- package/dist/packages/protocol/src/lifecycle.d.ts +61 -0
- package/dist/packages/protocol/src/lifecycle.js +0 -0
- package/dist/packages/protocol/src/tools.d.ts +77 -0
- package/dist/packages/protocol/src/tools.js +0 -0
- package/dist/packages/soul-core/src/config.d.ts +20 -0
- package/dist/packages/soul-core/src/config.js +1 -0
- package/dist/packages/soul-core/src/diagnostics.d.ts +23 -0
- package/dist/packages/soul-core/src/diagnostics.js +1 -0
- package/dist/packages/soul-core/src/evolution.d.ts +75 -0
- package/dist/packages/soul-core/src/evolution.js +1 -0
- package/dist/packages/soul-core/src/index.d.ts +13 -0
- package/dist/packages/soul-core/src/index.js +1 -0
- package/dist/packages/soul-core/src/injection.d.ts +35 -0
- package/dist/packages/soul-core/src/injection.js +8 -0
- package/dist/packages/soul-core/src/manager.d.ts +101 -0
- package/dist/packages/soul-core/src/manager.js +1 -0
- package/dist/packages/soul-core/src/store.d.ts +62 -0
- package/dist/packages/soul-core/src/store.js +1 -0
- package/dist/packages/soul-core/src/types.d.ts +317 -0
- package/dist/packages/soul-core/src/types.js +0 -0
- package/dist/public-config.d.ts +12 -0
- package/dist/public-config.js +1 -0
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.js +1 -0
- package/dist/session-compaction.d.ts +7 -0
- package/dist/session-compaction.js +1 -0
- package/dist/session.d.ts +7 -0
- package/dist/session.js +1 -0
- package/dist/skills.d.ts +7 -0
- package/dist/skills.js +1 -0
- package/dist/tools.d.ts +7 -0
- package/dist/tools.js +1 -0
- package/dist/utils/changelog.d.ts +20 -0
- package/dist/utils/changelog.js +4 -0
- package/dist/utils/diagnostics.d.ts +37 -0
- package/dist/utils/diagnostics.js +1 -0
- package/dist/utils/frontmatter.d.ts +7 -0
- package/dist/utils/frontmatter.js +4 -0
- package/dist/utils/git.d.ts +25 -0
- package/dist/utils/git.js +1 -0
- package/dist/utils/mime.d.ts +1 -0
- package/dist/utils/mime.js +1 -0
- package/dist/utils/photon.d.ts +6 -0
- package/dist/utils/photon.js +1 -0
- package/dist/utils/startup-profiler.d.ts +87 -0
- package/dist/utils/startup-profiler.js +2 -0
- package/docs/codex-goal-command-impl.md +1055 -0
- package/docs/codex-goal-vs-grub.md +500 -0
- package/docs/custom-provider.md +27 -0
- package/docs/extensions.md +27 -0
- package/docs/keybindings.md +27 -0
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +251 -0
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +123 -0
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -0
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/256/236/347/216/260/346/212/245/345/221/212.md" +158 -0
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/257/271/346/257/224/345/210/206/346/236/220.md" +128 -0
- package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +321 -0
- package/docs/loop-usage-examples.md +215 -0
- package/docs/models.md +27 -0
- package/docs/packages.md +27 -0
- package/docs/pi-design-philosophy.md +457 -0
- package/docs/planmode.md +1987 -0
- package/docs/prompt-templates.md +27 -0
- package/docs/providers.md +27 -0
- package/docs/sdk.md +27 -0
- package/docs/skills.md +27 -0
- package/docs/themes.md +27 -0
- package/docs/tui.md +27 -0
- package/package.json +191 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Grub Extension
|
|
2
|
+
|
|
3
|
+
`/grub` runs one autonomous long-running task until the agent reports it
|
|
4
|
+
complete, reports it is blocked, the user stops it, or a safety limit is
|
|
5
|
+
reached. The harness design follows the pattern described in Anthropic's
|
|
6
|
+
[Effective harnesses for long-running agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents):
|
|
7
|
+
a structured on-disk state lets coding agents pick up where they left off
|
|
8
|
+
even across fresh context windows and full process restarts.
|
|
9
|
+
|
|
10
|
+
## Commands
|
|
11
|
+
|
|
12
|
+
- `/grub <goal> [--max-iter N] [--max-fail N]` — start one autonomous task
|
|
13
|
+
- `/grub status [--json]` — show the active or last finished grub task
|
|
14
|
+
- `/grub resume` — resume dispatch for an adopted/persisted task
|
|
15
|
+
- `/grub stop` — stop the active grub task
|
|
16
|
+
|
|
17
|
+
## Harness artifacts
|
|
18
|
+
|
|
19
|
+
Each task owns a directory at `.grub/<task-id>/`:
|
|
20
|
+
|
|
21
|
+
| File | Purpose | Who may write |
|
|
22
|
+
|------|---------|---------------|
|
|
23
|
+
| `feature-list.json` | Structured list of end-to-end features | Initializer writes the whole file once; coding agents may only flip `passes` and set `evidence` |
|
|
24
|
+
| `progress-log.md` | Dated notes describing each iteration | Agent, append-only |
|
|
25
|
+
| `init.sh` | Get-bearings + project smoke script run at the start of every iteration | Initializer; later agents may add project-specific smoke commands |
|
|
26
|
+
| `state.json` | Durable `GrubTaskState` snapshot for cross-session resume | Controller, atomic writes |
|
|
27
|
+
|
|
28
|
+
`feature-list.json` schema (version 1):
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"version": 1,
|
|
33
|
+
"goal": "<user goal>",
|
|
34
|
+
"features": [
|
|
35
|
+
{
|
|
36
|
+
"id": "kebab-slug",
|
|
37
|
+
"category": "functional|verification|polish",
|
|
38
|
+
"description": "observable behavior",
|
|
39
|
+
"steps": ["actionable", "verification", "steps"],
|
|
40
|
+
"passes": false,
|
|
41
|
+
"evidence": "optional git sha or short proof"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The controller validates every mutation: changing `description`, `steps`,
|
|
48
|
+
`category`, `id`, list length, or reordering counts as a violation. Agents
|
|
49
|
+
are told up front that the only permitted edits are toggling `passes` and
|
|
50
|
+
setting `evidence`.
|
|
51
|
+
|
|
52
|
+
## How it works
|
|
53
|
+
|
|
54
|
+
- Each grub iteration is tagged with a `[GRUB:<id>:<n>]` prompt prefix so
|
|
55
|
+
the extension can recognise its own injected turns.
|
|
56
|
+
- On start, grub creates the harness directory and writes the initial
|
|
57
|
+
artifacts without creating a git commit. The harness keeps durable state on
|
|
58
|
+
disk and leaves source changes visible in the working tree, avoiding noisy
|
|
59
|
+
`grub(...)` commits unless the user explicitly asks for them.
|
|
60
|
+
- Two phase-specialized system prompts are injected via
|
|
61
|
+
`before_agent_start`:
|
|
62
|
+
- **Initializer prompt** (first successful turn): expand
|
|
63
|
+
`feature-list.json` into 15-40 concrete features, harden `init.sh`,
|
|
64
|
+
seed `progress-log.md`. No broad implementation yet.
|
|
65
|
+
- **Coding prompt** (remaining turns): run `init.sh`, pick exactly one
|
|
66
|
+
pending feature, implement + verify end-to-end, flip `passes` +
|
|
67
|
+
`evidence`, and append to `progress-log.md`.
|
|
68
|
+
- At the end of every grub turn the assistant must emit a single
|
|
69
|
+
`<loop-state>{"status":"continue|complete|blocked", "summary":"...", "nextStep":"..."}</loop-state>`
|
|
70
|
+
block. The extension parses it and dispatches the next iteration or
|
|
71
|
+
stops with a terminal status.
|
|
72
|
+
- **Initializer sanitize-not-fail**: while in the initializer phase, only
|
|
73
|
+
genuinely unfixable structural problems (feature count out of 15-40,
|
|
74
|
+
unreplaced placeholder, non-kebab ids, duplicate ids) fail the turn and
|
|
75
|
+
force a retry. Recoverable hygiene issues are auto-corrected instead of
|
|
76
|
+
killing the task: a wrong `goal` is restored to the authoritative task goal,
|
|
77
|
+
pre-marked `passes:true` are reset to `false`, and stray `evidence` is
|
|
78
|
+
dropped. The sanitized list is written back to disk and becomes the baseline,
|
|
79
|
+
so the phase always advances once the structure is valid.
|
|
80
|
+
- **Phase-aware failure budget**: the initializer gets a more forgiving budget
|
|
81
|
+
(default 5) than execution (default 3, via `--max-fail`), because standing up
|
|
82
|
+
a valid harness is a distinct, retry-friendly activity from execution work.
|
|
83
|
+
- **Mutation guard**: after the initializer creates the first real
|
|
84
|
+
`feature-list.json`, each subsequent turn is diffed against the persisted
|
|
85
|
+
baseline. Rewriting feature ids, descriptions, categories, steps, count, or
|
|
86
|
+
order is rejected and retried; only `passes` and `evidence` may change.
|
|
87
|
+
- **Completion guard**: if the decision says `complete` but
|
|
88
|
+
`feature-list.json` still has `passes:false` entries, the controller
|
|
89
|
+
rewrites the decision to `continue` with a synthetic `nextStep`
|
|
90
|
+
pointing at the first pending feature. The harness will not allow
|
|
91
|
+
premature "done".
|
|
92
|
+
- **Cross-session resume**: `GrubTaskState` is written atomically to
|
|
93
|
+
`state.json` on every transition. On the next session, `session_start`
|
|
94
|
+
calls `discoverActiveTasks()` and adopts the most recent running task
|
|
95
|
+
without auto-dispatching — the user types `/grub resume` to continue.
|
|
96
|
+
- **Safety limits**: 25 iterations and 3 consecutive failures by default;
|
|
97
|
+
override with `--max-iter` / `--max-fail`.
|
|
98
|
+
- **Stale harness cleanup**: on extension load, terminal harnesses older
|
|
99
|
+
than 30 days are pruned from `.grub/`.
|
|
100
|
+
|
|
101
|
+
## Legacy migration
|
|
102
|
+
|
|
103
|
+
Earlier versions wrote `feature-checklist.md` (markdown checkboxes). When a
|
|
104
|
+
new iteration starts and `feature-list.json` is missing but the legacy file
|
|
105
|
+
exists, its checkbox items are migrated into the JSON format (category
|
|
106
|
+
defaults to `functional`; `steps` start empty so the initializer can refine
|
|
107
|
+
later).
|
|
108
|
+
|
|
109
|
+
## Related
|
|
110
|
+
|
|
111
|
+
For the recurring scheduler that runs prompts or slash commands on an
|
|
112
|
+
interval, see the sibling [`loop` extension](../loop/README.md).
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: GrubController - drives autonomous iterative tasks with durable state and completion validation
|
|
3
|
+
* [FROM]: Depends on node:crypto, node:path, ./grub-types, ./grub-persistence, ./grub-feature-list, ./grub-prompts
|
|
4
|
+
* [TO]: Consumed by extension entry point (./index.ts)
|
|
5
|
+
* [HERE]: extensions/builtin/grub/grub-controller.ts - state machine for /grub iterations with cross-session persistence and feature-list-gated completion
|
|
6
|
+
*/
|
|
7
|
+
import { type GrubLocale } from "./grub-i18n.js";
|
|
8
|
+
import type { GrubControllerState, GrubDecision, GrubTaskSnapshot, GrubTaskState } from "./grub-types.js";
|
|
9
|
+
export interface GrubStartOptions {
|
|
10
|
+
maxIterations?: number;
|
|
11
|
+
maxConsecutiveFailures?: number;
|
|
12
|
+
maxInitializerFailures?: number;
|
|
13
|
+
locale?: GrubLocale;
|
|
14
|
+
}
|
|
15
|
+
export declare class GrubController {
|
|
16
|
+
private activeTask?;
|
|
17
|
+
private lastTerminalTask?;
|
|
18
|
+
getState(): GrubControllerState;
|
|
19
|
+
hasActiveTask(): boolean;
|
|
20
|
+
getActiveTask(): GrubTaskState | undefined;
|
|
21
|
+
start(goal: string, cwd: string, options?: GrubStartOptions): GrubTaskState;
|
|
22
|
+
/**
|
|
23
|
+
* Adopt a previously persisted task, e.g. after process restart. Does not
|
|
24
|
+
* auto-dispatch the next iteration; the caller decides whether to continue.
|
|
25
|
+
*/
|
|
26
|
+
adoptResumedTask(task: GrubTaskState): GrubTaskState;
|
|
27
|
+
stop(reason: string, status?: GrubTaskSnapshot["status"]): GrubTaskSnapshot | undefined;
|
|
28
|
+
isGrubPrompt(prompt: string): boolean;
|
|
29
|
+
buildPrompt(): string;
|
|
30
|
+
markDispatched(): GrubTaskState;
|
|
31
|
+
/**
|
|
32
|
+
* Enforce the feature-list contract at the state-machine boundary. The
|
|
33
|
+
* initializer may replace the placeholder with the first complete list; after
|
|
34
|
+
* that, every turn may only change passes/evidence fields.
|
|
35
|
+
*/
|
|
36
|
+
validateFeatureListAfterTurn(): {
|
|
37
|
+
ok: true;
|
|
38
|
+
} | {
|
|
39
|
+
ok: false;
|
|
40
|
+
message: string;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Validate a completion decision against the feature-list. If the decision
|
|
44
|
+
* says `complete` but the persisted feature-list still has pending entries,
|
|
45
|
+
* the decision is downgraded to `continue` with a synthetic nextStep.
|
|
46
|
+
* Returns the (possibly rewritten) decision.
|
|
47
|
+
*/
|
|
48
|
+
validateCompletion(decision: GrubDecision): {
|
|
49
|
+
decision: GrubDecision;
|
|
50
|
+
downgraded: boolean;
|
|
51
|
+
reason?: string;
|
|
52
|
+
};
|
|
53
|
+
finishTurn(decision: GrubDecision): {
|
|
54
|
+
action: "continue" | "stop";
|
|
55
|
+
task?: GrubTaskState;
|
|
56
|
+
snapshot?: GrubTaskSnapshot;
|
|
57
|
+
};
|
|
58
|
+
recordFailure(message: string): {
|
|
59
|
+
action: "continue" | "stop";
|
|
60
|
+
task?: GrubTaskState;
|
|
61
|
+
snapshot?: GrubTaskSnapshot;
|
|
62
|
+
};
|
|
63
|
+
private generateTaskId;
|
|
64
|
+
private validateInitializerStructure;
|
|
65
|
+
private cloneFeatureList;
|
|
66
|
+
private safePersist;
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var m=Object.defineProperty;var p=(f,e)=>m(f,"name",{value:e,configurable:!0});import{randomBytes as T}from"node:crypto";import{join as o}from"node:path";import{allPassing as v,firstPending as g,readFeatureList as l,sanitizeInitializerFeatureList as I,validateFeatureListDiff as b,writeFeatureList as A}from"./grub-feature-list.js";import{persistState as $,stateFilePathFor as w}from"./grub-persistence.js";import{buildGrubTaskPrompt as F,getPromptPrefix as L}from"./grub-prompts.js";const P=25,z=3,k=5,c=3,h=15,d=40;class G{static{p(this,"GrubController")}activeTask;lastTerminalTask;getState(){return{active:this.activeTask?{...this.activeTask}:void 0,lastTerminal:this.lastTerminalTask?{...this.lastTerminalTask}:void 0}}hasActiveTask(){return this.activeTask!==void 0}getActiveTask(){return this.activeTask?{...this.activeTask}:void 0}start(e,t,a={}){const i=e.trim();if(!i)throw new Error("Grub goal cannot be empty.");if(this.activeTask)throw new Error(`Grub ${this.activeTask.id} is already running. Stop it before starting a new one.`);const s=Date.now(),r=this.generateTaskId(),n=o(t,".grub",r),u={id:r,goal:i,locale:a.locale??"en",status:"running",phase:"initializer",startedAt:s,updatedAt:s,currentIteration:1,awaitingTurn:!1,consecutiveFailures:0,consecutiveBlockedAttempts:0,maxIterations:a.maxIterations??P,maxConsecutiveFailures:a.maxConsecutiveFailures??z,maxInitializerFailures:a.maxInitializerFailures??k,harnessDirectory:n,featureChecklistPath:o(n,"feature-checklist.md"),featureListPath:o(n,"feature-list.json"),stateFilePath:w(n),progressLogPath:o(n,"progress-log.md"),initScriptPath:o(n,"init.sh")};return this.activeTask=u,this.safePersist(u),u}adoptResumedTask(e){if(this.activeTask&&this.activeTask.id!==e.id)throw new Error(`Cannot adopt task ${e.id}; ${this.activeTask.id} is already active.`);const t={...e,locale:e.locale??"en",consecutiveBlockedAttempts:e.consecutiveBlockedAttempts??0,awaitingTurn:!1,updatedAt:Date.now()};return this.activeTask=t,this.safePersist(t),t}stop(e,t="stopped"){if(!this.activeTask)return this.lastTerminalTask;const a=this.activeTask,i=a.awaitingTurn,s={...a,status:t,updatedAt:Date.now(),awaitingTurn:!1};this.safePersist(s);const r={id:s.id,goal:s.goal,locale:s.locale,status:t,phase:s.phase,startedAt:s.startedAt,updatedAt:s.updatedAt,completedIterations:Math.max(0,s.currentIteration-(i?1:0)),consecutiveFailures:s.consecutiveFailures,consecutiveBlockedAttempts:s.consecutiveBlockedAttempts,harnessDirectory:s.harnessDirectory,featureChecklistPath:s.featureChecklistPath,featureListPath:s.featureListPath,stateFilePath:s.stateFilePath,progressLogPath:s.progressLogPath,initScriptPath:s.initScriptPath,lastDecision:s.lastDecision,lastError:e||s.lastError};return this.activeTask=void 0,this.lastTerminalTask=r,r}isGrubPrompt(e){return this.activeTask!==void 0&&e.startsWith(L(this.activeTask.id))}buildPrompt(){if(!this.activeTask)throw new Error("No active grub task.");return F(this.activeTask)}markDispatched(){if(!this.activeTask)throw new Error("No active grub task.");return this.activeTask.awaitingTurn=!0,this.activeTask.updatedAt=Date.now(),this.safePersist(this.activeTask),this.activeTask}validateFeatureListAfterTurn(){if(!this.activeTask)return{ok:!0};const e=this.activeTask,t=l(e.featureListPath);if(!t)return{ok:!1,message:e.locale==="zh"?"\u4EFB\u52A1\u6E05\u5355\u7F3A\u5931\u6216\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u9700\u8981\u5148\u4FEE\u597D\u6E05\u5355\u518D\u7EE7\u7EED\u3002":"The task checklist is missing or malformed. It needs to be fixed before continuing."};if(e.phase==="initializer"){const a=this.validateInitializerStructure(t);if(a)return{ok:!1,message:a};const{list:i,fixes:s}=I(t,e.goal);if(s.length>0)try{A(e.featureListPath,i)}catch{const r=l(e.featureListPath);return e.featureListBaseline=this.cloneFeatureList(r??t),this.safePersist(e),{ok:!0}}return e.featureListBaseline=this.cloneFeatureList(i),this.safePersist(e),{ok:!0}}if(!e.featureListBaseline)return e.featureListBaseline=this.cloneFeatureList(t),this.safePersist(e),{ok:!0};try{b(e.featureListBaseline,t)}catch(a){const i=a instanceof Error?a.message:String(a);return{ok:!1,message:e.locale==="zh"?`\u4EFB\u52A1\u6E05\u5355\u88AB\u6539\u52A8\u5F97\u4E0D\u5B89\u5168\uFF1A${i}`:`The task checklist changed in an unsafe way: ${i}`}}return e.featureListBaseline=this.cloneFeatureList(t),this.safePersist(e),{ok:!0}}validateCompletion(e){if(e.status!=="complete"||!this.activeTask)return{decision:e,downgraded:!1};const t=l(this.activeTask.featureListPath);if(!t)return{decision:{status:"continue",summary:e.summary,nextStep:this.activeTask.locale==="zh"?"\u4EFB\u52A1\u6E05\u5355\u7F3A\u5931\u6216\u65E0\u6548\uFF1B\u5FC5\u987B\u5148\u751F\u6210\u6E05\u5355\uFF0C\u4E0D\u80FD\u76F4\u63A5\u7ED3\u675F\u3002":"The task checklist is missing or invalid; it must be created before the task can finish."},downgraded:!0,reason:this.activeTask.locale==="zh"?"\u4EFB\u52A1\u6E05\u5355\u7F3A\u5931\u6216\u65E0\u6548":"the task checklist is missing or invalid"};if(v(t))return{decision:e,downgraded:!1};const a=g(t);return{decision:{status:"continue",summary:e.summary,nextStep:a?this.activeTask.locale==="zh"?`\u5B8C\u6210\u5F85\u5904\u7406 feature\uFF1A${a.id}\uFF08${a.description}\uFF09`:`Complete pending feature: ${a.id} (${a.description})`:this.activeTask.locale==="zh"?"\u5148\u5B8C\u6210\u5269\u4F59\u5F85\u5904\u7406 feature\uFF0C\u518D\u58F0\u660E\u5B8C\u6210\u3002":"Complete the remaining pending features before declaring done."},downgraded:!0,reason:this.activeTask.locale==="zh"?`\u6E05\u5355\u91CC\u8FD8\u6709 ${t.features.length-t.features.filter(s=>s.passes).length} \u9879\u672A\u5B8C\u6210`:`the checklist still has ${t.features.length-t.features.filter(s=>s.passes).length} unfinished items`}}finishTurn(e){if(!this.activeTask)return{action:"stop",snapshot:this.lastTerminalTask};const t=this.activeTask;if(t.awaitingTurn=!1,t.consecutiveFailures=0,t.lastError=void 0,t.lastDecision=e,t.updatedAt=Date.now(),e.status==="complete")return{action:"stop",snapshot:this.stop(t.locale==="zh"?"Grub \u76EE\u6807\u5DF2\u5B8C\u6210\u3002":"Grub goal completed.","complete")};if(e.status==="blocked")if(t.consecutiveBlockedAttempts+=1,t.consecutiveBlockedAttempts<c)e={status:"continue",summary:e.summary,nextStep:t.locale==="zh"?`\u963B\u585E\u62A5\u544A\u88AB\u62D2\u7EDD\uFF08\u7B2C ${t.consecutiveBlockedAttempts}/${c} \u6B21\uFF09\u3002\u540C\u4E00\u4E2A\u963B\u585E\u6761\u4EF6\u9700\u8981\u8FDE\u7EED\u51FA\u73B0 ${c} \u6B21\u624D\u80FD\u6807\u8BB0 blocked\u3002\u8BF7\u6362\u4E00\u79CD\u65B9\u5F0F\u5C1D\u8BD5\u63A8\u8FDB\u3002`:`Blocked report rejected (${t.consecutiveBlockedAttempts}/${c}). The same blocker must repeat for ${c} consecutive turns before you may report blocked. Try a different approach.`},t.lastDecision=e;else return{action:"stop",snapshot:this.stop(t.locale==="zh"?"Grub \u62A5\u544A\u4EFB\u52A1\u88AB\u963B\u585E\u3002":"Grub reported it is blocked.","blocked")};else t.consecutiveBlockedAttempts=0;return t.currentIteration>=t.maxIterations?{action:"stop",snapshot:this.stop(t.locale==="zh"?`Grub \u8FBE\u5230\u8F6E\u6B21\u4E0A\u9650\uFF08${t.maxIterations}\uFF09\u3002`:`Grub hit the iteration limit (${t.maxIterations}).`,"failed")}:(t.phase==="initializer"&&(t.phase="execution"),t.currentIteration+=1,this.safePersist(t),{action:"continue",task:{...t}})}recordFailure(e){if(!this.activeTask)return{action:"stop",snapshot:this.lastTerminalTask};const t=this.activeTask;t.awaitingTurn=!1,t.consecutiveFailures+=1,t.lastError=e,t.updatedAt=Date.now();const a=t.phase==="initializer"?t.maxInitializerFailures??k:t.maxConsecutiveFailures;return t.consecutiveFailures>=a?{action:"stop",snapshot:this.stop(t.locale==="zh"?`Grub \u8FDE\u7EED\u5931\u8D25 ${t.consecutiveFailures} \u6B21\u540E\u505C\u6B62\u3002\u6700\u8FD1\u9519\u8BEF\uFF1A${e}`:`Grub stopped after ${t.consecutiveFailures} consecutive failures. Last error: ${e}`,"failed")}:t.currentIteration>=t.maxIterations?{action:"stop",snapshot:this.stop(t.locale==="zh"?`Grub \u8FBE\u5230\u8F6E\u6B21\u4E0A\u9650\uFF08${t.maxIterations}\uFF09\u3002`:`Grub hit the iteration limit (${t.maxIterations}).`,"failed")}:(t.currentIteration+=1,this.safePersist(t),{action:"continue",task:{...t}})}generateTaskId(){return T(4).toString("hex").slice(0,8)}validateInitializerStructure(e){const a=this.activeTask?.locale??"en",i=a==="zh"?"\uFF08\u4EA7\u51FA\u4E00\u4EFD\u5E72\u51C0\u7684\u6E05\u5355\u540E\uFF0C\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u4ECE\u521D\u59CB\u5316\u9636\u6BB5\u8FDB\u5165\u6267\u884C\u9636\u6BB5\uFF0C\u5C4A\u65F6\u624D\u9010\u4E2A\u6807\u8BB0 passes\u3002\uFF09":" (Once the list is structurally clean, the harness automatically moves from the initializer to the execution phase, where you mark passes one by one.)";if(e.features.length<h||e.features.length>d)return a==="zh"?`\u521D\u59CB\u5316\u9636\u6BB5\u5FC5\u987B\u751F\u6210 ${h}-${d} \u4E2A feature\u3002${i}`:`Initializer must produce ${h}-${d} features.${i}`;const s=new Set;for(const r of e.features){if(r.id==="placeholder-expand-features")return a==="zh"?`\u521D\u59CB\u5316\u9636\u6BB5\u5FC5\u987B\u66FF\u6362 placeholder feature\u3002${i}`:`Initializer must replace the placeholder feature.${i}`;if(!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(r.id))return a==="zh"?`feature id \u5FC5\u987B\u662F kebab-case\uFF1A${r.id}`:`feature id must be kebab-case: ${r.id}`;if(s.has(r.id))return a==="zh"?`feature id \u91CD\u590D\uFF1A${r.id}`:`duplicate feature id: ${r.id}`;s.add(r.id)}}cloneFeatureList(e){return{version:e.version,goal:e.goal,features:e.features.map(t=>({...t,steps:[...t.steps]}))}}safePersist(e){try{$(e)}catch(t){const a=t instanceof Error?t.message:String(t);console.error(`[Grub] Failed to persist task ${e.id} state: ${a}`)}}}export{G as GrubController};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Provides extractGrubDecision()
|
|
3
|
+
* [FROM]: Depends on ./grub-types for GrubDecision
|
|
4
|
+
* [TO]: Consumed by ./index.ts and tests for assistant loop-state parsing
|
|
5
|
+
* [HERE]: extensions/builtin/grub/grub-decision.ts - protocol parser for Grub assistant round summaries
|
|
6
|
+
*/
|
|
7
|
+
import type { GrubDecision } from "./grub-types.js";
|
|
8
|
+
export declare function extractGrubDecision(text: string): GrubDecision | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var r=(n,e)=>a(n,"name",{value:e,configurable:!0});const u=/<loop-state>([\s\S]*?)<\/loop-state>/gi;function f(n){const e=i(n);if(e)try{const t=JSON.parse(c(e));if(t.status!=="continue"&&t.status!=="complete"&&t.status!=="blocked")return;const s=typeof t.summary=="string"?t.summary.trim():"",o=typeof t.nextStep=="string"?t.nextStep.trim():void 0;return!s||t.status==="continue"&&!o?void 0:o?{status:t.status,summary:s,nextStep:o}:{status:t.status,summary:s}}catch{return}}r(f,"extractGrubDecision");function i(n){let e;for(const t of n.matchAll(u)){const s=t[1]?.trim();s&&(e=s)}return e}r(i,"extractLastLoopStatePayload");function c(n){const e=n.trim();return/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(e)?.[1]?.trim()??e}r(c,"stripMarkdownFence");export{f as extractGrubDecision};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type FeatureItem, type FeatureList } from "./grub-types.js";
|
|
2
|
+
export declare class FeatureListDiffError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function isFeatureList(value: unknown): value is FeatureList;
|
|
6
|
+
export declare function readFeatureList(path: string): FeatureList | null;
|
|
7
|
+
export declare function writeFeatureList(path: string, list: FeatureList): void;
|
|
8
|
+
/**
|
|
9
|
+
* Validates that a mutated feature list only differs from the baseline in
|
|
10
|
+
* per-item `passes` and `evidence` fields. Returns the validated list (or
|
|
11
|
+
* throws FeatureListDiffError). If the agent reordered, added, or removed
|
|
12
|
+
* entries, that counts as a violation.
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateFeatureListDiff(before: FeatureList, after: FeatureList): FeatureList;
|
|
15
|
+
export interface InitializerSanitizeResult {
|
|
16
|
+
list: FeatureList;
|
|
17
|
+
/** Human-readable tags describing what was auto-corrected, e.g. ["goal", "passes×6"]. */
|
|
18
|
+
fixes: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Bring an initializer-produced feature list into a clean, executable baseline.
|
|
22
|
+
*
|
|
23
|
+
* The initializer's sole job is to stand up a harness; the `goal`, `passes`,
|
|
24
|
+
* and `evidence` fields are either authoritative-from-elsewhere or
|
|
25
|
+
* not-yet-earned. Rather than failing the whole turn over these recoverable
|
|
26
|
+
* hygiene issues (which would also block the initializer→execution phase
|
|
27
|
+
* transition), we auto-correct them: overwrite `goal` with the authoritative
|
|
28
|
+
* task goal, force every `passes` to false, and drop stray `evidence`. Returns
|
|
29
|
+
* the sanitized list plus a list of what was corrected so callers can surface
|
|
30
|
+
* a friendly note instead of a hard error.
|
|
31
|
+
*/
|
|
32
|
+
export declare function sanitizeInitializerFeatureList(list: FeatureList, authoritativeGoal: string): InitializerSanitizeResult;
|
|
33
|
+
export declare function countPassing(list: FeatureList): number;
|
|
34
|
+
export declare function allPassing(list: FeatureList): boolean;
|
|
35
|
+
export declare function firstPending(list: FeatureList): FeatureItem | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Produce an initial feature list skeleton for a new grub task. The
|
|
38
|
+
* initializer agent is expected to replace this placeholder with 15-40
|
|
39
|
+
* concrete feature entries in its first turn, preserving the schema.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createInitialFeatureList(goal: string): FeatureList;
|
|
42
|
+
/**
|
|
43
|
+
* Migrate a legacy feature-checklist.md (one checkbox per line) into the new
|
|
44
|
+
* feature-list.json format. Extremely lossy by design: we only copy line
|
|
45
|
+
* descriptions; category defaults to functional and steps is left empty so
|
|
46
|
+
* the initializer can refine later.
|
|
47
|
+
*/
|
|
48
|
+
export declare function migrateChecklistToFeatureList(checklistPath: string, goal: string): FeatureList | null;
|
|
49
|
+
/**
|
|
50
|
+
* Convenience: return the feature list path that sits alongside a checklist
|
|
51
|
+
* markdown file. Pure path logic so callers don't have to repeat it.
|
|
52
|
+
*/
|
|
53
|
+
export declare function defaultFeatureListPath(harnessDirectory: string): string;
|
|
54
|
+
export declare function ensureParentDirectory(path: string): void;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var y=Object.defineProperty;var s=(t,e)=>y(t,"name",{value:e,configurable:!0});import{randomBytes as w}from"node:crypto";import{existsSync as l,mkdirSync as x,readFileSync as h,renameSync as v,writeFileSync as $}from"node:fs";import{dirname as F,join as S}from"node:path";import{FEATURE_LIST_VERSION as d}from"./grub-types.js";const I=new Set(["functional","verification","polish"]);class f extends Error{static{s(this,"FeatureListDiffError")}constructor(e){super(e),this.name="FeatureListDiffError"}}function L(t){if(!t||typeof t!="object")return!1;const e=t;return!(typeof e.id!="string"||!e.id||typeof e.description!="string"||!e.description||typeof e.category!="string"||!I.has(e.category)||!Array.isArray(e.steps)||!e.steps.every(n=>typeof n=="string")||typeof e.passes!="boolean"||e.evidence!==void 0&&typeof e.evidence!="string")}s(L,"isFeatureItem");function m(t){if(!t||typeof t!="object")return!1;const e=t;return e.version!==d||typeof e.goal!="string"||!Array.isArray(e.features)?!1:e.features.every(L)}s(m,"isFeatureList");function P(t){if(!l(t))return null;try{const e=h(t,"utf-8"),n=JSON.parse(e);return m(n)?n:null}catch{return null}}s(P,"readFeatureList");function j(t,e){if(!m(e))throw new f("Refusing to write invalid feature list shape.");const n=`${JSON.stringify(e,null,2)}
|
|
2
|
+
`,a=`${t}.${w(6).toString("hex")}.tmp`;$(a,n,"utf-8"),v(a,t)}s(j,"writeFeatureList");function k(t,e){if(e.version!==t.version)throw new f(`version changed from ${t.version} to ${e.version}`);if(e.goal!==t.goal)throw new f("goal field is immutable");if(e.features.length!==t.features.length)throw new f(`feature count changed (${t.features.length} -> ${e.features.length}); agent may not add or remove features`);const n=new Map(t.features.map(i=>[i.id,i])),a=new Set;for(let i=0;i<e.features.length;i+=1){const r=e.features[i],c=t.features[i];if(a.has(r.id))throw new f(`duplicate feature id ${r.id}`);if(a.add(r.id),c?.id!==r.id)throw new f(`feature order changed at index ${i}`);const o=n.get(r.id);if(!o)throw new f(`unknown feature id ${r.id}`);if(r.description!==o.description)throw new f(`description for ${r.id} is immutable`);if(r.category!==o.category)throw new f(`category for ${r.id} is immutable`);if(r.steps.length!==o.steps.length)throw new f(`steps for ${r.id} must not change length`);for(let u=0;u<r.steps.length;u+=1)if(r.steps[u]!==o.steps[u])throw new f(`steps[${u}] for ${r.id} is immutable`);if(o.evidence!==void 0&&r.evidence===void 0)throw new f(`evidence for ${r.id} may not be removed once set`)}return e}s(k,"validateFeatureListDiff");function z(t,e){const n=[];t.goal!==e&&n.push("goal");let a=0,i=0;const r=t.features.map(c=>{const o={...c,steps:[...c.steps]};return o.passes&&(o.passes=!1,a+=1),o.evidence!==void 0&&(delete o.evidence,i+=1),o});return a>0&&n.push(`passes\xD7${a}`),i>0&&n.push(`evidence\xD7${i}`),{list:{version:t.version,goal:e,features:r},fixes:n}}s(z,"sanitizeInitializerFeatureList");function O(t){return t.features.reduce((e,n)=>e+(n.passes?1:0),0)}s(O,"countPassing");function T(t){return t.features.length>0&&t.features.every(e=>e.passes)}s(T,"allPassing");function N(t){return t.features.find(e=>!e.passes)}s(N,"firstPending");function _(t){return{version:d,goal:t,features:[{id:"placeholder-expand-features",category:"functional",description:"Initializer must replace this placeholder with 15-40 concrete, end-to-end testable features.",steps:["Read the goal carefully","Enumerate atomic user-observable behaviors","Rewrite this file with proper features[] entries"],passes:!1}]}}s(_,"createInitialFeatureList");function C(t,e){if(!l(t))return null;let n;try{n=h(t,"utf-8")}catch{return null}const a=[],i=/^\s*-\s*\[( |x|X)\]\s*(.+?)\s*$/,r=n.split(/\r?\n/);let c=0;for(const o of r){const u=i.exec(o);if(!u)continue;const[,p,g]=u;g&&(c+=1,a.push({id:`migrated-${c}`,category:"functional",description:g,steps:[],passes:p==="x"||p==="X"}))}return a.length===0?null:{version:d,goal:e,features:a}}s(C,"migrateChecklistToFeatureList");function J(t){return S(t,"feature-list.json")}s(J,"defaultFeatureListPath");function V(t){const e=F(t);l(e)||x(e,{recursive:!0})}s(V,"ensureParentDirectory");export{f as FeatureListDiffError,T as allPassing,O as countPassing,_ as createInitialFeatureList,J as defaultFeatureListPath,V as ensureParentDirectory,N as firstPending,m as isFeatureList,C as migrateChecklistToFeatureList,P as readFeatureList,z as sanitizeInitializerFeatureList,k as validateFeatureListDiff,j as writeFeatureList};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Provides formatTaskState(), formatSnapshot(), describeDecision(), describeTerminalSnapshot(), describeTaskState()
|
|
3
|
+
* [FROM]: Depends on ./grub-feature-list, ./grub-i18n, ./grub-types for human-readable /grub TUI copy
|
|
4
|
+
* [TO]: Consumed by ./index.ts and tests for status/result rendering
|
|
5
|
+
* [HERE]: extensions/builtin/grub/grub-format.ts - user-facing formatting boundary for Grub status messages
|
|
6
|
+
*/
|
|
7
|
+
import { type GrubLocale } from "./grub-i18n.js";
|
|
8
|
+
import type { GrubDecision, GrubTaskSnapshot, GrubTaskState } from "./grub-types.js";
|
|
9
|
+
export declare function formatTaskState(task: GrubTaskState): string;
|
|
10
|
+
export declare function formatSnapshot(snapshot: GrubTaskSnapshot): string;
|
|
11
|
+
export declare function describeDecision(decision: GrubDecision, locale: GrubLocale): string;
|
|
12
|
+
export declare function describeTerminalSnapshot(snapshot: GrubTaskSnapshot | undefined, locale: GrubLocale): string;
|
|
13
|
+
export declare function describeTaskState(status: GrubTaskState["status"], phase: GrubTaskState["phase"], awaitingTurn: boolean, locale: GrubLocale): string;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var l=Object.defineProperty;var s=(e,t)=>l(e,"name",{value:t,configurable:!0});import{readFeatureList as c}from"./grub-feature-list.js";import{grubText as o}from"./grub-i18n.js";function g(e){const t=o(e.locale??"en"),r=c(e.featureListPath),i=[`${t.prefix} ${t.activeTask} ${e.id}`,`${t.task}: ${e.goal}`,`${t.state}: ${a(e.status,e.phase,e.awaitingTurn,e.locale)}`,`${t.round}: ${e.currentIteration}/${e.maxIterations}`];if(r){const n=r.features.length,u=r.features.filter($=>$.passes).length;i.push(t.featuresPassing(u,n))}else i.push(t.unknownProgress);return e.lastDecision?.summary&&i.push(`${t.lastUpdate}: ${e.lastDecision.summary}`),e.lastDecision?.nextStep&&i.push(`${t.next}: ${e.lastDecision.nextStep}`),e.lastError&&i.push(`${t.lastIssue}: ${e.lastError}`),i.push(`${t.savedIn}: ${e.harnessDirectory}`),i.push(`${t.taskFiles}: ${e.featureListPath}, ${e.progressLogPath}`),i.push(t.advancedJson),i.join(`
|
|
2
|
+
`)}s(g,"formatTaskState");function f(e){const t=e.locale??"en",r=o(t),i=[`${r.prefix} ${r.lastTask} ${e.id}`,`${r.task}: ${e.goal}`,`${r.state}: ${a(e.status,e.phase,!1,t)}`,`${r.round}: ${e.completedIterations}`,`${r.updated}: ${p(e.updatedAt,t)}`];return e.lastDecision?.summary&&i.push(`${r.lastUpdate}: ${e.lastDecision.summary}`),e.lastDecision?.nextStep&&i.push(`${r.next}: ${e.lastDecision.nextStep}`),e.lastError&&i.push(`${r.lastIssue}: ${e.lastError}`),i.push(`${r.savedIn}: ${e.harnessDirectory}`),i.push(`${r.taskFiles}: ${e.featureListPath}, ${e.progressLogPath}`),i.join(`
|
|
3
|
+
`)}s(f,"formatSnapshot");function h(e,t){const r=o(t),i=[`${r.prefix} ${r.lastUpdate}: ${e.summary}`];return e.nextStep&&i.push(`${r.nextStep}: ${e.nextStep}`),i.join(`
|
|
4
|
+
`)}s(h,"describeDecision");function S(e,t){return e?f(e):`${o(t).prefix} ${o(t).noActive}`}s(S,"describeTerminalSnapshot");function a(e,t,r,i){const n=o(i);return e==="complete"?n.finished:e==="blocked"?n.blocked:e==="stopped"?n.stoppedState:e==="failed"?n.failed:r?n.waiting:t==="initializer"?n.preparing:n.working}s(a,"describeTaskState");function p(e,t){return new Date(e).toLocaleString(t==="zh"?"zh-CN":"en-US")}s(p,"formatDate");export{h as describeDecision,a as describeTaskState,S as describeTerminalSnapshot,f as formatSnapshot,g as formatTaskState};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Provides ensureHarnessArtifacts(), buildInitScript()
|
|
3
|
+
* [FROM]: Depends on node:fs, ./grub-feature-list, ./grub-i18n, ./grub-types for durable harness files
|
|
4
|
+
* [TO]: Consumed by ./index.ts when starting or resuming /grub tasks
|
|
5
|
+
* [HERE]: extensions/builtin/grub/grub-harness.ts - filesystem artifact boundary for .grub/<id>/
|
|
6
|
+
*/
|
|
7
|
+
import type { GrubTaskState } from "./grub-types.js";
|
|
8
|
+
export declare function buildInitScript(task: GrubTaskState): string;
|
|
9
|
+
export declare function ensureHarnessArtifacts(task: GrubTaskState): void;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var n=Object.defineProperty;var i=(e,t)=>n(e,"name",{value:t,configurable:!0});import{chmodSync as s,existsSync as r,mkdirSync as c,writeFileSync as o}from"node:fs";import{createInitialFeatureList as l,migrateChecklistToFeatureList as a,writeFeatureList as u}from"./grub-feature-list.js";import{grubText as h}from"./grub-i18n.js";function g(e){const t=e.locale==="zh";return["#!/usr/bin/env bash","set -euo pipefail","",t?"# Grub harness \u542F\u52A8\u811A\u672C\uFF08get-bearings \u534F\u8BAE\uFF09\u3002\u8BF7\u5C06\u4E0B\u65B9\u70DF\u6D4B\u66FF\u6362\u4E3A\u9879\u76EE\u4E13\u5C5E\u547D\u4EE4\uFF0C":"# Grub harness startup (get-bearings protocol). Override the smoke block below",t?"# \u7528\u6765\u8BC1\u660E\u5E94\u7528\u4ECD\u80FD\u7AEF\u5230\u7AEF\u542F\u52A8\u3002":"# with project-specific commands that prove the app still boots end-to-end.","",'echo "=== grub bearings ==="',"pwd",'echo "--- recent commits ---"',"git log --oneline -n 20 2>/dev/null || true",'echo "--- working tree ---"',"git status --short 2>/dev/null || true",'echo "--- progress tail ---"',`tail -n 40 ${JSON.stringify(e.progressLogPath)} 2>/dev/null || true`,'echo "--- feature progress ---"',`node -e "try{const l=require(${JSON.stringify(e.featureListPath)});const p=l.features.filter(f=>f.passes).length;console.log(p+'/'+l.features.length+' passing');}catch(e){console.log('feature-list.json unavailable');}" 2>/dev/null || true`,'echo "--- project smoke (override below) ---"',t?"# TODO: \u9879\u76EE\u4E13\u5C5E\u70DF\u6D4B\u547D\u4EE4\uFF08tests\u3001curl\u3001tsc --noEmit \u7B49\uFF09":"# TODO: project-specific smoke command (tests, curl, tsc --noEmit, etc.)",""].join(`
|
|
2
|
+
`)}i(g,"buildInitScript");function b(e){if(r(e.harnessDirectory)||c(e.harnessDirectory,{recursive:!0}),!r(e.featureListPath)){const t=r(e.featureChecklistPath)?a(e.featureChecklistPath,e.goal):null;u(e.featureListPath,t??l(e.goal))}if(!r(e.progressLogPath)){const t=h(e.locale);o(e.progressLogPath,[t.progressLogTitle(e.id),"",`${t.goal}: ${e.goal}`,"",t.initializationHeading,t.harnessCreated,t.structuredFeatureNote,t.initScriptNote,"",t.iterationsHeading,t.appendIterationNote,""].join(`
|
|
3
|
+
`),"utf-8")}r(e.initScriptPath)||(o(e.initScriptPath,g(e),"utf-8"),s(e.initScriptPath,493))}i(b,"ensureHarnessArtifacts");export{g as buildInitScript,b as ensureHarnessArtifacts};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Provides detectGrubLocale(), grubText(), type GrubLocale for localized /grub prompts and TUI messages
|
|
3
|
+
* [FROM]: Depends on core/platform/i18n locale type
|
|
4
|
+
* [TO]: Consumed by grub-controller.ts, grub-parser.ts, index.ts for user-language-aware Grub UX
|
|
5
|
+
* [HERE]: extensions/builtin/grub/grub-i18n.ts - small locale helper scoped to the Grub extension
|
|
6
|
+
*/
|
|
7
|
+
import type { Locale } from "../../../core/platform/i18n/index.js";
|
|
8
|
+
export type GrubLocale = Locale;
|
|
9
|
+
export declare function detectGrubLocale(text: string, fallback?: Locale): GrubLocale;
|
|
10
|
+
export declare function languageName(locale: GrubLocale): string;
|
|
11
|
+
export declare function grubText(locale: GrubLocale): (typeof GRUB_TEXT)[GrubLocale];
|
|
12
|
+
declare const GRUB_TEXT: {
|
|
13
|
+
readonly en: {
|
|
14
|
+
readonly prefix: "[Grub]";
|
|
15
|
+
readonly missingGoal: "Missing grub goal.";
|
|
16
|
+
readonly usage: readonly ["[Grub] Usage:", " /grub <goal> [--max-iter N] [--max-fail N] Start a focused long-running task", " /grub status [--json] Show progress", " /grub resume Continue a saved task", " /grub stop Stop the current task", "", "[Grub] Progress is saved under .grub/<task-id>/ so it can continue later.", "Use /grub status --json only when you need the full saved details.", "", "[Grub] The task keeps working until it finishes, gets blocked, is stopped,", "or reaches a safety limit. It cannot mark itself done while checklist items remain."];
|
|
17
|
+
readonly activeTask: "Active task";
|
|
18
|
+
readonly lastTask: "Last task";
|
|
19
|
+
readonly status: "Status";
|
|
20
|
+
readonly phase: "Phase";
|
|
21
|
+
readonly goal: "Goal";
|
|
22
|
+
readonly started: "Started";
|
|
23
|
+
readonly updated: "Updated";
|
|
24
|
+
readonly currentIteration: "Current iteration";
|
|
25
|
+
readonly completedIterations: "Completed iterations";
|
|
26
|
+
readonly awaitingResult: "Awaiting result";
|
|
27
|
+
readonly yes: "yes";
|
|
28
|
+
readonly no: "no";
|
|
29
|
+
readonly consecutiveFailures: "Consecutive failures";
|
|
30
|
+
readonly maxIterations: "Max iterations";
|
|
31
|
+
readonly harnessDir: "Harness dir";
|
|
32
|
+
readonly featureList: "Feature list";
|
|
33
|
+
readonly progressLog: "Progress log";
|
|
34
|
+
readonly initScript: "Init script";
|
|
35
|
+
readonly stateFile: "State file";
|
|
36
|
+
readonly featuresPassing: (passing: number, total: number) => string;
|
|
37
|
+
readonly lastSummary: "Last summary";
|
|
38
|
+
readonly lastNextStep: "Last next step";
|
|
39
|
+
readonly lastError: "Last error";
|
|
40
|
+
readonly noActive: "No grub task is active.";
|
|
41
|
+
readonly noStarted: "No grub task has been started in this session.";
|
|
42
|
+
readonly decision: "Decision";
|
|
43
|
+
readonly summary: "Summary";
|
|
44
|
+
readonly nextStep: "Next step";
|
|
45
|
+
readonly resumeSummary: (id: string, iteration: number, phase: string) => string;
|
|
46
|
+
readonly resumeHint: "Use /grub status to review progress, /grub resume to continue, or /grub stop to abandon it.";
|
|
47
|
+
readonly startingIteration: (iteration: number, id: string) => string;
|
|
48
|
+
readonly startedTask: (id: string) => string;
|
|
49
|
+
readonly initPhase: "First step: create the task checklist and a repeatable smoke check before changing code.";
|
|
50
|
+
readonly safetyLimits: (maxIterations: number, maxFailures: number) => string;
|
|
51
|
+
readonly resuming: (id: string) => string;
|
|
52
|
+
readonly stopped: (id: string) => string;
|
|
53
|
+
readonly noActiveRunning: "No active grub task is running.";
|
|
54
|
+
readonly noPersisted: "There is no saved grub task to continue.";
|
|
55
|
+
readonly failedResume: (id: string, message: string) => string;
|
|
56
|
+
readonly failedAdopt: (message: string) => string;
|
|
57
|
+
readonly failedNoAssistant: "This round ended without a usable update.";
|
|
58
|
+
readonly iterationFailedRetry: (iteration: number | undefined) => string;
|
|
59
|
+
readonly invalidLoopState: "I could not read the round summary from the assistant response.";
|
|
60
|
+
readonly invalidLoopRetry: (iteration: number | undefined) => string;
|
|
61
|
+
readonly prematureComplete: (reason: string) => string;
|
|
62
|
+
readonly harnessCreated: "- Harness created by /grub.";
|
|
63
|
+
readonly structuredFeatureNote: "- Structured feature list lives in feature-list.json; only passes/evidence may change.";
|
|
64
|
+
readonly initScriptNote: "- init.sh performs get-bearings + smoke before every iteration.";
|
|
65
|
+
readonly iterationsHeading: "## Iterations";
|
|
66
|
+
readonly appendIterationNote: "- (append one short entry per iteration with verification evidence)";
|
|
67
|
+
readonly progressLogTitle: (id: string) => string;
|
|
68
|
+
readonly initializationHeading: "## Initialization";
|
|
69
|
+
readonly task: "Task";
|
|
70
|
+
readonly progress: "Progress";
|
|
71
|
+
readonly round: "Round";
|
|
72
|
+
readonly state: "State";
|
|
73
|
+
readonly savedIn: "Saved in";
|
|
74
|
+
readonly taskFiles: "Task files";
|
|
75
|
+
readonly next: "Next";
|
|
76
|
+
readonly lastUpdate: "Last update";
|
|
77
|
+
readonly lastIssue: "Needs attention";
|
|
78
|
+
readonly preparing: "Preparing checklist and smoke check";
|
|
79
|
+
readonly working: "Working through the checklist";
|
|
80
|
+
readonly waiting: "waiting for this round to finish";
|
|
81
|
+
readonly ready: "ready for the next round";
|
|
82
|
+
readonly finished: "finished";
|
|
83
|
+
readonly blocked: "blocked";
|
|
84
|
+
readonly stoppedState: "stopped";
|
|
85
|
+
readonly failed: "stopped after repeated issues";
|
|
86
|
+
readonly unknownProgress: "Progress: checklist not ready yet";
|
|
87
|
+
readonly advancedJson: "Use /grub status --json for full saved details.";
|
|
88
|
+
};
|
|
89
|
+
readonly zh: {
|
|
90
|
+
readonly prefix: "[Grub]";
|
|
91
|
+
readonly missingGoal: "缺少 grub 目标。";
|
|
92
|
+
readonly usage: readonly ["[Grub] 用法:", " /grub <目标> [--max-iter N] [--max-fail N] 启动一个聚焦的长任务", " /grub status [--json] 查看进度", " /grub resume 继续已保存的任务", " /grub stop 停止当前任务", "", "[Grub] 进度会保存在 .grub/<task-id>/,之后可以继续。", "只有需要完整保存细节时,才使用 /grub status --json。", "", "[Grub] 任务会持续推进,直到完成、阻塞、被停止,或触发安全上限。", "只要清单里还有未完成项,它就不能把自己标记为完成。"];
|
|
93
|
+
readonly activeTask: "当前任务";
|
|
94
|
+
readonly lastTask: "最近任务";
|
|
95
|
+
readonly status: "状态";
|
|
96
|
+
readonly phase: "阶段";
|
|
97
|
+
readonly goal: "目标";
|
|
98
|
+
readonly started: "开始时间";
|
|
99
|
+
readonly updated: "更新时间";
|
|
100
|
+
readonly currentIteration: "当前轮次";
|
|
101
|
+
readonly completedIterations: "已完成轮次";
|
|
102
|
+
readonly awaitingResult: "等待结果";
|
|
103
|
+
readonly yes: "是";
|
|
104
|
+
readonly no: "否";
|
|
105
|
+
readonly consecutiveFailures: "连续失败";
|
|
106
|
+
readonly maxIterations: "最大轮次";
|
|
107
|
+
readonly harnessDir: "Harness 目录";
|
|
108
|
+
readonly featureList: "功能清单";
|
|
109
|
+
readonly progressLog: "进度日志";
|
|
110
|
+
readonly initScript: "初始化脚本";
|
|
111
|
+
readonly stateFile: "状态文件";
|
|
112
|
+
readonly featuresPassing: (passing: number, total: number) => string;
|
|
113
|
+
readonly lastSummary: "上次总结";
|
|
114
|
+
readonly lastNextStep: "下一步";
|
|
115
|
+
readonly lastError: "最近错误";
|
|
116
|
+
readonly noActive: "当前没有 grub 任务。";
|
|
117
|
+
readonly noStarted: "本会话还没有启动 grub 任务。";
|
|
118
|
+
readonly decision: "决策";
|
|
119
|
+
readonly summary: "总结";
|
|
120
|
+
readonly nextStep: "下一步";
|
|
121
|
+
readonly resumeSummary: (id: string, iteration: number, phase: string) => string;
|
|
122
|
+
readonly resumeHint: "可用 /grub status 查看进度,/grub resume 继续,或 /grub stop 放弃。";
|
|
123
|
+
readonly startingIteration: (iteration: number, id: string) => string;
|
|
124
|
+
readonly startedTask: (id: string) => string;
|
|
125
|
+
readonly initPhase: "第一步:先建立任务清单和可重复的烟测,再修改代码。";
|
|
126
|
+
readonly safetyLimits: (maxIterations: number, maxFailures: number) => string;
|
|
127
|
+
readonly resuming: (id: string) => string;
|
|
128
|
+
readonly stopped: (id: string) => string;
|
|
129
|
+
readonly noActiveRunning: "当前没有正在运行的 grub 任务。";
|
|
130
|
+
readonly noPersisted: "没有可继续的已保存 grub 任务。";
|
|
131
|
+
readonly failedResume: (id: string, message: string) => string;
|
|
132
|
+
readonly failedAdopt: (message: string) => string;
|
|
133
|
+
readonly failedNoAssistant: "这一轮没有得到可用更新。";
|
|
134
|
+
readonly iterationFailedRetry: (iteration: number | undefined) => string;
|
|
135
|
+
readonly invalidLoopState: "我无法从 assistant 回复中读到本轮总结。";
|
|
136
|
+
readonly invalidLoopRetry: (iteration: number | undefined) => string;
|
|
137
|
+
readonly prematureComplete: (reason: string) => string;
|
|
138
|
+
readonly harnessCreated: "- Harness 由 /grub 创建。";
|
|
139
|
+
readonly structuredFeatureNote: "- 结构化功能清单位于 feature-list.json;后续只能修改 passes/evidence。";
|
|
140
|
+
readonly initScriptNote: "- 每轮开始前由 init.sh 执行环境定位和烟测。";
|
|
141
|
+
readonly iterationsHeading: "## 迭代记录";
|
|
142
|
+
readonly appendIterationNote: "- (每轮追加一条简短记录,包含验证证据)";
|
|
143
|
+
readonly progressLogTitle: (id: string) => string;
|
|
144
|
+
readonly initializationHeading: "## 初始化";
|
|
145
|
+
readonly task: "任务";
|
|
146
|
+
readonly progress: "进度";
|
|
147
|
+
readonly round: "轮次";
|
|
148
|
+
readonly state: "状态";
|
|
149
|
+
readonly savedIn: "保存位置";
|
|
150
|
+
readonly taskFiles: "任务文件";
|
|
151
|
+
readonly next: "下一步";
|
|
152
|
+
readonly lastUpdate: "最近更新";
|
|
153
|
+
readonly lastIssue: "需要注意";
|
|
154
|
+
readonly preparing: "正在准备清单和烟测";
|
|
155
|
+
readonly working: "正在按清单推进";
|
|
156
|
+
readonly waiting: "正在等待本轮完成";
|
|
157
|
+
readonly ready: "可继续下一轮";
|
|
158
|
+
readonly finished: "已完成";
|
|
159
|
+
readonly blocked: "已阻塞";
|
|
160
|
+
readonly stoppedState: "已停止";
|
|
161
|
+
readonly failed: "因连续问题已停止";
|
|
162
|
+
readonly unknownProgress: "进度:清单尚未准备好";
|
|
163
|
+
readonly advancedJson: "如需完整保存细节,可使用 /grub status --json。";
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var t=(e,s)=>a(e,"name",{value:s,configurable:!0});function u(e,s="en"){return i(e)?"zh":s}t(u,"detectGrubLocale");function d(e){return e==="zh"?"\u4E2D\u6587":"English"}t(d,"languageName");function g(e){return n[e]}t(g,"grubText");function i(e){return/[\u3400-\u9fff]/.test(e)}t(i,"hasCjk");const n={en:{prefix:"[Grub]",missingGoal:"Missing grub goal.",usage:["[Grub] Usage:"," /grub <goal> [--max-iter N] [--max-fail N] Start a focused long-running task"," /grub status [--json] Show progress"," /grub resume Continue a saved task"," /grub stop Stop the current task","","[Grub] Progress is saved under .grub/<task-id>/ so it can continue later.","Use /grub status --json only when you need the full saved details.","","[Grub] The task keeps working until it finishes, gets blocked, is stopped,","or reaches a safety limit. It cannot mark itself done while checklist items remain."],activeTask:"Active task",lastTask:"Last task",status:"Status",phase:"Phase",goal:"Goal",started:"Started",updated:"Updated",currentIteration:"Current iteration",completedIterations:"Completed iterations",awaitingResult:"Awaiting result",yes:"yes",no:"no",consecutiveFailures:"Consecutive failures",maxIterations:"Max iterations",harnessDir:"Harness dir",featureList:"Feature list",progressLog:"Progress log",initScript:"Init script",stateFile:"State file",featuresPassing:t((e,s)=>`Progress: ${e}/${s} checks done`,"featuresPassing"),lastSummary:"Last summary",lastNextStep:"Last next step",lastError:"Last error",noActive:"No grub task is active.",noStarted:"No grub task has been started in this session.",decision:"Decision",summary:"Summary",nextStep:"Next step",resumeSummary:t((e,s,r)=>`[Grub] Found saved task ${e}. Next run will continue from round ${s} (${r}).`,"resumeSummary"),resumeHint:"Use /grub status to review progress, /grub resume to continue, or /grub stop to abandon it.",startingIteration:t((e,s)=>`[Grub] Working on ${s}, round ${e}.`,"startingIteration"),startedTask:t(e=>`[Grub] Started task ${e}.`,"startedTask"),initPhase:"First step: create the task checklist and a repeatable smoke check before changing code.",safetyLimits:t((e,s)=>`Safety limits: up to ${e} rounds; stops after ${s} failed rounds in a row.`,"safetyLimits"),resuming:t(e=>`[Grub] Continuing task ${e}.`,"resuming"),stopped:t(e=>`[Grub] Stopped task ${e}.`,"stopped"),noActiveRunning:"No active grub task is running.",noPersisted:"There is no saved grub task to continue.",failedResume:t((e,s)=>`[Grub] Could not continue task ${e}: ${s}`,"failedResume"),failedAdopt:t(e=>`[Grub] Could not load the saved task: ${e}`,"failedAdopt"),failedNoAssistant:"This round ended without a usable update.",iterationFailedRetry:t(e=>`[Grub] That round did not finish cleanly. Retrying round ${e}.`,"iterationFailedRetry"),invalidLoopState:"I could not read the round summary from the assistant response.",invalidLoopRetry:t(e=>`[Grub] I could not read the round summary. Retrying round ${e}.`,"invalidLoopRetry"),prematureComplete:t(e=>`[Grub] Not done yet: ${e}. Continuing.`,"prematureComplete"),harnessCreated:"- Harness created by /grub.",structuredFeatureNote:"- Structured feature list lives in feature-list.json; only passes/evidence may change.",initScriptNote:"- init.sh performs get-bearings + smoke before every iteration.",iterationsHeading:"## Iterations",appendIterationNote:"- (append one short entry per iteration with verification evidence)",progressLogTitle:t(e=>`# Progress Log (${e})`,"progressLogTitle"),initializationHeading:"## Initialization",task:"Task",progress:"Progress",round:"Round",state:"State",savedIn:"Saved in",taskFiles:"Task files",next:"Next",lastUpdate:"Last update",lastIssue:"Needs attention",preparing:"Preparing checklist and smoke check",working:"Working through the checklist",waiting:"waiting for this round to finish",ready:"ready for the next round",finished:"finished",blocked:"blocked",stoppedState:"stopped",failed:"stopped after repeated issues",unknownProgress:"Progress: checklist not ready yet",advancedJson:"Use /grub status --json for full saved details."},zh:{prefix:"[Grub]",missingGoal:"\u7F3A\u5C11 grub \u76EE\u6807\u3002",usage:["[Grub] \u7528\u6CD5\uFF1A"," /grub <\u76EE\u6807> [--max-iter N] [--max-fail N] \u542F\u52A8\u4E00\u4E2A\u805A\u7126\u7684\u957F\u4EFB\u52A1"," /grub status [--json] \u67E5\u770B\u8FDB\u5EA6"," /grub resume \u7EE7\u7EED\u5DF2\u4FDD\u5B58\u7684\u4EFB\u52A1"," /grub stop \u505C\u6B62\u5F53\u524D\u4EFB\u52A1","","[Grub] \u8FDB\u5EA6\u4F1A\u4FDD\u5B58\u5728 .grub/<task-id>/\uFF0C\u4E4B\u540E\u53EF\u4EE5\u7EE7\u7EED\u3002","\u53EA\u6709\u9700\u8981\u5B8C\u6574\u4FDD\u5B58\u7EC6\u8282\u65F6\uFF0C\u624D\u4F7F\u7528 /grub status --json\u3002","","[Grub] \u4EFB\u52A1\u4F1A\u6301\u7EED\u63A8\u8FDB\uFF0C\u76F4\u5230\u5B8C\u6210\u3001\u963B\u585E\u3001\u88AB\u505C\u6B62\uFF0C\u6216\u89E6\u53D1\u5B89\u5168\u4E0A\u9650\u3002","\u53EA\u8981\u6E05\u5355\u91CC\u8FD8\u6709\u672A\u5B8C\u6210\u9879\uFF0C\u5B83\u5C31\u4E0D\u80FD\u628A\u81EA\u5DF1\u6807\u8BB0\u4E3A\u5B8C\u6210\u3002"],activeTask:"\u5F53\u524D\u4EFB\u52A1",lastTask:"\u6700\u8FD1\u4EFB\u52A1",status:"\u72B6\u6001",phase:"\u9636\u6BB5",goal:"\u76EE\u6807",started:"\u5F00\u59CB\u65F6\u95F4",updated:"\u66F4\u65B0\u65F6\u95F4",currentIteration:"\u5F53\u524D\u8F6E\u6B21",completedIterations:"\u5DF2\u5B8C\u6210\u8F6E\u6B21",awaitingResult:"\u7B49\u5F85\u7ED3\u679C",yes:"\u662F",no:"\u5426",consecutiveFailures:"\u8FDE\u7EED\u5931\u8D25",maxIterations:"\u6700\u5927\u8F6E\u6B21",harnessDir:"Harness \u76EE\u5F55",featureList:"\u529F\u80FD\u6E05\u5355",progressLog:"\u8FDB\u5EA6\u65E5\u5FD7",initScript:"\u521D\u59CB\u5316\u811A\u672C",stateFile:"\u72B6\u6001\u6587\u4EF6",featuresPassing:t((e,s)=>`\u8FDB\u5EA6\uFF1A${e}/${s} \u9879\u5DF2\u5B8C\u6210`,"featuresPassing"),lastSummary:"\u4E0A\u6B21\u603B\u7ED3",lastNextStep:"\u4E0B\u4E00\u6B65",lastError:"\u6700\u8FD1\u9519\u8BEF",noActive:"\u5F53\u524D\u6CA1\u6709 grub \u4EFB\u52A1\u3002",noStarted:"\u672C\u4F1A\u8BDD\u8FD8\u6CA1\u6709\u542F\u52A8 grub \u4EFB\u52A1\u3002",decision:"\u51B3\u7B56",summary:"\u603B\u7ED3",nextStep:"\u4E0B\u4E00\u6B65",resumeSummary:t((e,s,r)=>`[Grub] \u627E\u5230\u5DF2\u4FDD\u5B58\u4EFB\u52A1 ${e}\u3002\u7EE7\u7EED\u65F6\u4F1A\u4ECE\u7B2C ${s} \u8F6E\u5F00\u59CB\uFF08${r}\uFF09\u3002`,"resumeSummary"),resumeHint:"\u53EF\u7528 /grub status \u67E5\u770B\u8FDB\u5EA6\uFF0C/grub resume \u7EE7\u7EED\uFF0C\u6216 /grub stop \u653E\u5F03\u3002",startingIteration:t((e,s)=>`[Grub] \u6B63\u5728\u63A8\u8FDB\u4EFB\u52A1 ${s}\uFF0C\u7B2C ${e} \u8F6E\u3002`,"startingIteration"),startedTask:t(e=>`[Grub] \u5DF2\u542F\u52A8\u4EFB\u52A1 ${e}\u3002`,"startedTask"),initPhase:"\u7B2C\u4E00\u6B65\uFF1A\u5148\u5EFA\u7ACB\u4EFB\u52A1\u6E05\u5355\u548C\u53EF\u91CD\u590D\u7684\u70DF\u6D4B\uFF0C\u518D\u4FEE\u6539\u4EE3\u7801\u3002",safetyLimits:t((e,s)=>`\u5B89\u5168\u4E0A\u9650\uFF1A\u6700\u591A ${e} \u8F6E\uFF1B\u8FDE\u7EED ${s} \u8F6E\u5931\u8D25\u540E\u505C\u6B62\u3002`,"safetyLimits"),resuming:t(e=>`[Grub] \u7EE7\u7EED\u4EFB\u52A1 ${e}\u3002`,"resuming"),stopped:t(e=>`[Grub] \u5DF2\u505C\u6B62\u4EFB\u52A1 ${e}\u3002`,"stopped"),noActiveRunning:"\u5F53\u524D\u6CA1\u6709\u6B63\u5728\u8FD0\u884C\u7684 grub \u4EFB\u52A1\u3002",noPersisted:"\u6CA1\u6709\u53EF\u7EE7\u7EED\u7684\u5DF2\u4FDD\u5B58 grub \u4EFB\u52A1\u3002",failedResume:t((e,s)=>`[Grub] \u65E0\u6CD5\u7EE7\u7EED\u4EFB\u52A1 ${e}\uFF1A${s}`,"failedResume"),failedAdopt:t(e=>`[Grub] \u65E0\u6CD5\u8BFB\u53D6\u5DF2\u4FDD\u5B58\u4EFB\u52A1\uFF1A${e}`,"failedAdopt"),failedNoAssistant:"\u8FD9\u4E00\u8F6E\u6CA1\u6709\u5F97\u5230\u53EF\u7528\u66F4\u65B0\u3002",iterationFailedRetry:t(e=>`[Grub] \u8FD9\u4E00\u8F6E\u6CA1\u6709\u6B63\u5E38\u5B8C\u6210\uFF0C\u51C6\u5907\u91CD\u8BD5\u7B2C ${e} \u8F6E\u3002`,"iterationFailedRetry"),invalidLoopState:"\u6211\u65E0\u6CD5\u4ECE assistant \u56DE\u590D\u4E2D\u8BFB\u5230\u672C\u8F6E\u603B\u7ED3\u3002",invalidLoopRetry:t(e=>`[Grub] \u6211\u65E0\u6CD5\u8BFB\u5230\u672C\u8F6E\u603B\u7ED3\uFF0C\u51C6\u5907\u91CD\u8BD5\u7B2C ${e} \u8F6E\u3002`,"invalidLoopRetry"),prematureComplete:t(e=>`[Grub] \u8FD8\u4E0D\u80FD\u7ED3\u675F\uFF1A${e}\u3002\u7EE7\u7EED\u6267\u884C\u3002`,"prematureComplete"),harnessCreated:"- Harness \u7531 /grub \u521B\u5EFA\u3002",structuredFeatureNote:"- \u7ED3\u6784\u5316\u529F\u80FD\u6E05\u5355\u4F4D\u4E8E feature-list.json\uFF1B\u540E\u7EED\u53EA\u80FD\u4FEE\u6539 passes/evidence\u3002",initScriptNote:"- \u6BCF\u8F6E\u5F00\u59CB\u524D\u7531 init.sh \u6267\u884C\u73AF\u5883\u5B9A\u4F4D\u548C\u70DF\u6D4B\u3002",iterationsHeading:"## \u8FED\u4EE3\u8BB0\u5F55",appendIterationNote:"- \uFF08\u6BCF\u8F6E\u8FFD\u52A0\u4E00\u6761\u7B80\u77ED\u8BB0\u5F55\uFF0C\u5305\u542B\u9A8C\u8BC1\u8BC1\u636E\uFF09",progressLogTitle:t(e=>`# \u8FDB\u5EA6\u65E5\u5FD7\uFF08${e}\uFF09`,"progressLogTitle"),initializationHeading:"## \u521D\u59CB\u5316",task:"\u4EFB\u52A1",progress:"\u8FDB\u5EA6",round:"\u8F6E\u6B21",state:"\u72B6\u6001",savedIn:"\u4FDD\u5B58\u4F4D\u7F6E",taskFiles:"\u4EFB\u52A1\u6587\u4EF6",next:"\u4E0B\u4E00\u6B65",lastUpdate:"\u6700\u8FD1\u66F4\u65B0",lastIssue:"\u9700\u8981\u6CE8\u610F",preparing:"\u6B63\u5728\u51C6\u5907\u6E05\u5355\u548C\u70DF\u6D4B",working:"\u6B63\u5728\u6309\u6E05\u5355\u63A8\u8FDB",waiting:"\u6B63\u5728\u7B49\u5F85\u672C\u8F6E\u5B8C\u6210",ready:"\u53EF\u7EE7\u7EED\u4E0B\u4E00\u8F6E",finished:"\u5DF2\u5B8C\u6210",blocked:"\u5DF2\u963B\u585E",stoppedState:"\u5DF2\u505C\u6B62",failed:"\u56E0\u8FDE\u7EED\u95EE\u9898\u5DF2\u505C\u6B62",unknownProgress:"\u8FDB\u5EA6\uFF1A\u6E05\u5355\u5C1A\u672A\u51C6\u5907\u597D",advancedJson:"\u5982\u9700\u5B8C\u6574\u4FDD\u5B58\u7EC6\u8282\uFF0C\u53EF\u4F7F\u7528 /grub status --json\u3002"}};export{u as detectGrubLocale,g as grubText,d as languageName};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: parseGrubCommand, buildGrubHelp, getGrubArgumentCompletions
|
|
3
|
+
* [FROM]: Depends on ./grub-types
|
|
4
|
+
* [TO]: Consumed by extension entry point (./index.ts)
|
|
5
|
+
* [HERE]: extensions/builtin/grub/grub-parser.ts - /grub command parser with resume/status --json/--max-iter/--max-fail flags
|
|
6
|
+
*/
|
|
7
|
+
import type { ParsedGrubCommand } from "./grub-types.js";
|
|
8
|
+
import { type GrubLocale } from "./grub-i18n.js";
|
|
9
|
+
type GrubArgumentCompletionContext = {
|
|
10
|
+
commandName: string;
|
|
11
|
+
argumentText: string;
|
|
12
|
+
argumentPrefix: string;
|
|
13
|
+
tokenIndex: number;
|
|
14
|
+
previousTokens: string[];
|
|
15
|
+
};
|
|
16
|
+
type GrubCompletionItem = {
|
|
17
|
+
value: string;
|
|
18
|
+
label: string;
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function getGrubArgumentCompletions(argumentPrefix: string, context?: GrubArgumentCompletionContext): GrubCompletionItem[] | null;
|
|
22
|
+
export declare function parseGrubCommand(input: string): ParsedGrubCommand;
|
|
23
|
+
export declare function buildGrubHelp(reason?: string, locale?: GrubLocale): string;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var h=Object.defineProperty;var u=(s,t)=>h(s,"name",{value:t,configurable:!0});import{grubText as d}from"./grub-i18n.js";const x=[{value:"status",label:"status",description:"Show current progress"},{value:"resume",label:"resume",description:"Continue a saved task"},{value:"stop",label:"stop",description:"Stop the current task"},{value:"help",label:"help",description:"Show usage help"}],b=[{value:"--max-iter",label:"--max-iter",description:"Limit total work rounds"},{value:"--max-fail",label:"--max-fail",description:"Stop after repeated failed rounds"}],k=[{value:"--json",label:"--json",description:"Show full saved details"}];function g(s){const t=[];let e="",n,i=!1;for(const o of s.trim()){if(i){e+=o,i=!1;continue}if(o==="\\"&&n!=="'"){i=!0;continue}if((o==="'"||o==='"')&&!n){n=o;continue}if(o===n){n=void 0;continue}if(/\s/.test(o)&&!n){e&&(t.push(e),e="");continue}e+=o}return i&&(e+="\\"),e&&t.push(e),t}u(g,"scanTokens");function v(s){const t=g(s),e=[],n={},i=new Set(["max-iter","max-iterations","max-fail","max-failures"]);for(let o=0;o<t.length;o+=1){const r=t[o];if(r==="--"){e.push(...t.slice(o+1));break}if(r.startsWith("--")){const c=r.indexOf("=");if(c!==-1){const f=r.slice(2,c);i.has(f)||f==="json"?n[f]=r.slice(c+1):e.push(r);continue}const a=r.slice(2),p=t[o+1];i.has(a)&&p!==void 0?(n[a]=p,o+=1):a==="json"?n[a]=!0:e.push(r);continue}e.push(r)}return{positional:e,flags:n}}u(v,"tokenize");function m(s,t){const e=t.trim().toLowerCase(),n=s.filter(i=>i.value.startsWith(e));return n.length>0?[...n]:null}u(m,"filterCompletions");function T(s,t){if(s.trim().startsWith("--")){const e=t?.previousTokens[0]?.toLowerCase();return m(e==="status"||e==="list"?k:b,s)}return!t||t.tokenIndex===0?m(x,s):null}u(T,"getGrubArgumentCompletions");function l(s){if(typeof s!="string")return;const t=Number.parseInt(s,10);if(!(!Number.isFinite(t)||t<=0))return t}u(l,"parsePositiveInt");function j(s){const t=s.trim();if(!t)return{type:"help",reason:"empty"};const{positional:e,flags:n}=v(t),i=e[0]?.toLowerCase()??"";if(i==="status"||i==="list")return{type:"status",json:n.json===!0||n.json==="true"||e.includes("--json")};if(i==="stop"||i==="clear"||i==="cancel")return{type:"stop"};if(i==="resume"||i==="continue")return{type:"resume"};if(i==="help")return{type:"help"};const o=e.join(" ").trim();return o?{type:"start",goal:o,maxIterations:l(n["max-iter"])??l(n["max-iterations"]),maxConsecutiveFailures:l(n["max-fail"])??l(n["max-failures"])}:{type:"help",reason:"empty"}}u(j,"parseGrubCommand");function C(s,t="en"){const e=d(t),n=[];return s&&n.push(`${e.prefix} ${s}`),n.push(...e.usage),n.join(`
|
|
2
|
+
`)}u(C,"buildGrubHelp");export{C as buildGrubHelp,T as getGrubArgumentCompletions,j as parseGrubCommand};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type GrubTaskState, type PersistedGrubState } from "./grub-types.js";
|
|
2
|
+
export declare function grubRoot(cwd: string): string;
|
|
3
|
+
export declare function stateFilePathFor(harnessDirectory: string): string;
|
|
4
|
+
export declare function persistState(task: GrubTaskState, createdAt?: number): void;
|
|
5
|
+
export declare function loadState(stateFilePath: string): PersistedGrubState | null;
|
|
6
|
+
/**
|
|
7
|
+
* Scan every ".grub/<id>/state.json" under cwd and return each persisted
|
|
8
|
+
* record whose task.status is "running". Invalid or unreadable files are
|
|
9
|
+
* skipped silently.
|
|
10
|
+
*/
|
|
11
|
+
export declare function discoverActiveTasks(cwd: string): PersistedGrubState[];
|
|
12
|
+
/**
|
|
13
|
+
* Remove ".grub/<id>/" directories whose state is terminal and older than
|
|
14
|
+
* maxAgeMs. Returns the number of directories pruned. Missing or malformed
|
|
15
|
+
* state files are treated as expired regardless of age to avoid orphans.
|
|
16
|
+
*/
|
|
17
|
+
export declare function pruneStale(cwd: string, maxAgeMs?: number): number;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var L=Object.defineProperty;var r=(e,t)=>L(e,"name",{value:t,configurable:!0});import{randomBytes as T}from"node:crypto";import{existsSync as l,mkdirSync as N,readFileSync as _,readdirSync as A,renameSync as w,rmSync as k,statSync as h,writeFileSync as R}from"node:fs";import{dirname as B,join as p,resolve as D}from"node:path";import{isFeatureList as O}from"./grub-feature-list.js";import{PERSISTED_GRUB_STATE_VERSION as I}from"./grub-types.js";const M=".grub",j="state.json",V=720*60*60*1e3,v=new Set(["running","complete","blocked","stopped","failed"]),z=new Set(["initializer","execution"]),C=new Set(["en","zh"]),G=new Set(["continue","complete","blocked"]);function b(e){return p(e,M)}r(b,"grubRoot");function E(e){return p(e,j)}r(E,"stateFilePathFor");function U(e){l(e)||N(e,{recursive:!0})}r(U,"ensureDirectory");function $(e,t){U(B(e));const n=`${e}.${T(6).toString("hex")}.tmp`;R(n,t,"utf-8"),w(n,e)}r($,"atomicWrite");function J(e){if(!e||typeof e!="object")return!1;const t=e;return t.version!==I||!d(t.createdAt)||!d(t.lastPersistedAt)?!1:W(t.task)}r(J,"isPersistedShape");function W(e){if(!e||typeof e!="object")return!1;const t=e;return!(!o(t.id)||!o(t.goal)||typeof t.locale!="string"||!C.has(t.locale)||typeof t.status!="string"||!v.has(t.status)||typeof t.phase!="string"||!z.has(t.phase)||!d(t.startedAt)||!d(t.updatedAt)||!m(t.currentIteration)||typeof t.awaitingTurn!="boolean"||!P(t.consecutiveFailures)||t.consecutiveBlockedAttempts!==void 0&&!P(t.consecutiveBlockedAttempts)||!m(t.maxIterations)||!m(t.maxConsecutiveFailures)||t.maxInitializerFailures!==void 0&&!m(t.maxInitializerFailures)||!o(t.harnessDirectory)||!o(t.featureChecklistPath)||!o(t.featureListPath)||!o(t.stateFilePath)||!o(t.progressLogPath)||!o(t.initScriptPath)||t.featureListBaseline!==void 0&&!O(t.featureListBaseline)||t.lastDecision!==void 0&&!H(t.lastDecision)||t.lastError!==void 0&&typeof t.lastError!="string")}r(W,"isGrubTaskState");function H(e){if(!e||typeof e!="object")return!1;const t=e;return!(typeof t.status!="string"||!G.has(t.status)||typeof t.summary!="string"||t.nextStep!==void 0&&typeof t.nextStep!="string")}r(H,"isGrubDecision");function o(e){return typeof e=="string"&&e.length>0}r(o,"isNonEmptyString");function d(e){return typeof e=="number"&&Number.isFinite(e)}r(d,"isFiniteNumber");function m(e){return Number.isInteger(e)&&typeof e=="number"&&e>0}r(m,"isPositiveInteger");function P(e){return Number.isInteger(e)&&typeof e=="number"&&e>=0}r(P,"isNonNegativeInteger");function et(e,t){const n=Date.now(),i={version:I,task:e,createdAt:t??e.startedAt??n,lastPersistedAt:n};$(e.stateFilePath,`${JSON.stringify(i,null,2)}
|
|
2
|
+
`)}r(et,"persistState");function x(e){if(!l(e))return null;try{const t=_(e,"utf-8"),n=JSON.parse(t);return J(n)?n:null}catch{return null}}r(x,"loadState");function rt(e){const t=b(e);if(!l(t))return[];let n;try{n=A(t)}catch{return[]}const i=[];for(const a of n){const f=p(t,a);let u=!1;try{u=h(f).isDirectory()}catch{u=!1}if(!u)continue;const y=E(f),s=x(y);s&&s.task.status==="running"&&i.push(s)}return i.sort((a,f)=>f.lastPersistedAt-a.lastPersistedAt),i}r(rt,"discoverActiveTasks");function nt(e,t=V){const n=b(e);if(!l(n))return 0;let i;try{i=A(n)}catch{return 0}const a=D(n),f=Date.now();let u=0;for(const y of i){const s=p(n,y);if(!D(s).startsWith(a+"/"))continue;let S=!1;try{S=h(s).isDirectory()}catch{S=!1}if(!S)continue;const F=E(s),c=x(F);if(c&&c.task.status==="running")continue;const g=c?c.lastPersistedAt:q(s);if(g!==null&&!(f-g<t))try{k(s,{recursive:!0,force:!0}),u+=1}catch{}}return u}r(nt,"pruneStale");function q(e){try{return h(e).mtimeMs}catch{return null}}r(q,"safeMtimeMs");export{rt as discoverActiveTasks,b as grubRoot,x as loadState,et as persistState,nt as pruneStale,E as stateFilePathFor};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Provides buildGrubInitializerPrompt(), buildGrubCodingPrompt(), buildGrubTaskPrompt()
|
|
3
|
+
* [FROM]: Depends on ./grub-i18n and ./grub-types for locale-aware task prompts
|
|
4
|
+
* [TO]: Consumed by ./index.ts and ./grub-controller.ts for /grub prompt injection and dispatch
|
|
5
|
+
* [HERE]: extensions/builtin/grub/grub-prompts.ts - prompt construction boundary for the Grub harness
|
|
6
|
+
*/
|
|
7
|
+
import { type GrubLocale } from "./grub-i18n.js";
|
|
8
|
+
import type { GrubTaskState } from "./grub-types.js";
|
|
9
|
+
export declare function buildGrubInitializerPrompt(locale: GrubLocale): string;
|
|
10
|
+
export declare function buildGrubCodingPrompt(locale: GrubLocale): string;
|
|
11
|
+
export declare function buildGrubTaskPrompt(task: GrubTaskState): string;
|
|
12
|
+
export declare function getPromptPrefix(taskId: string): string;
|