@ashx-j/lunr 0.2.26 → 0.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -1
- package/LICENSE +22 -0
- package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -1
- package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-thinking.js +1 -1
- package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts +11 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +6 -10
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts +4 -5
- package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-cron.js +94 -108
- package/dist/builtin-extensions/lunr-cron.js.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.js +3 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js +5 -2
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +2 -2
- package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.js +2 -2
- package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -15
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +6 -0
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +187 -132
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +8 -0
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +142 -112
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +12 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +14 -7
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +11 -3
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +67 -41
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +4 -2
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +3 -0
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +2 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.js +6 -6
- package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/config.js +11 -5
- package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.js +48 -40
- package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.js +3 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +12 -40
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +166 -235
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +5 -0
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +43 -13
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +14 -3
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +73 -21
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +4 -4
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +2 -0
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.js +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +11 -5
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.js +12 -32
- package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.js +5 -3
- package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +2 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +21 -12
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +7 -24
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +39 -77
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts +4 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +6 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +17 -31
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +7 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +5 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +78 -42
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +8 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts +0 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +134 -28
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +26 -5
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +7 -8
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +60 -32
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts +7 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js +70 -38
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +9 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +15 -5
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +4 -3
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +13 -62
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +18 -9
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
- package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-tps.js +28 -17
- package/dist/builtin-extensions/pi-tps.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/activity.d.ts +1 -0
- package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/activity.js +27 -5
- package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts +3 -0
- package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-web-access/bounded-body.js +43 -0
- package/dist/builtin-extensions/pi-web-access/bounded-body.js.map +1 -0
- package/dist/builtin-extensions/pi-web-access/content-page.d.ts +24 -0
- package/dist/builtin-extensions/pi-web-access/content-page.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-web-access/content-page.js +57 -0
- package/dist/builtin-extensions/pi-web-access/content-page.js.map +1 -0
- package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/extract.js +7 -2
- package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +0 -1
- package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/github-extract.js +147 -36
- package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.js +48 -73
- package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +12 -4
- package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/session-cleanup.js +35 -12
- package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.d.ts +9 -6
- package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.js +36 -24
- package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
- package/dist/builtin-extensions/simple-pi-memory.d.ts +1 -1
- package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
- package/dist/builtin-extensions/simple-pi-memory.js +1 -1
- package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/google-vertex.json +1 -1
- package/dist/catalog/providers/google.json +1 -1
- package/dist/catalog/publication.json +3 -3
- package/dist/cli/install-cli.d.ts.map +1 -1
- package/dist/cli/install-cli.js +38 -30
- package/dist/cli/install-cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +13 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +75 -11
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +46 -21
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +344 -126
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/browser/runtime.d.ts +2 -0
- package/dist/core/browser/runtime.d.ts.map +1 -1
- package/dist/core/browser/runtime.js +80 -45
- package/dist/core/browser/runtime.js.map +1 -1
- package/dist/core/browser/setup.d.ts.map +1 -1
- package/dist/core/browser/setup.js +12 -1
- package/dist/core/browser/setup.js.map +1 -1
- package/dist/core/cache-stats.d.ts +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +5 -11
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +38 -92
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/computer-use/adapter.d.ts.map +1 -1
- package/dist/core/computer-use/adapter.js +7 -2
- package/dist/core/computer-use/adapter.js.map +1 -1
- package/dist/core/computer-use/image.d.ts.map +1 -1
- package/dist/core/computer-use/image.js +17 -5
- package/dist/core/computer-use/image.js.map +1 -1
- package/dist/core/computer-use/schemas.d.ts.map +1 -1
- package/dist/core/computer-use/schemas.js +23 -6
- package/dist/core/computer-use/schemas.js.map +1 -1
- package/dist/core/computer-use/workflow.d.ts.map +1 -1
- package/dist/core/computer-use/workflow.js +459 -119
- package/dist/core/computer-use/workflow.js.map +1 -1
- package/dist/core/context-breakdown.d.ts +2 -2
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js +22 -20
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/cron/jobs.d.ts +26 -8
- package/dist/core/cron/jobs.d.ts.map +1 -1
- package/dist/core/cron/jobs.js +357 -232
- package/dist/core/cron/jobs.js.map +1 -1
- package/dist/core/cron/origin-context.d.ts +1 -0
- package/dist/core/cron/origin-context.d.ts.map +1 -1
- package/dist/core/cron/origin-context.js.map +1 -1
- package/dist/core/cron/scheduler.d.ts +22 -17
- package/dist/core/cron/scheduler.d.ts.map +1 -1
- package/dist/core/cron/scheduler.js +153 -73
- package/dist/core/cron/scheduler.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +8 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +11 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +4 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +22 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/large-subagent-launch.d.ts +1 -1
- package/dist/core/large-subagent-launch.d.ts.map +1 -1
- package/dist/core/large-subagent-launch.js +7 -7
- package/dist/core/large-subagent-launch.js.map +1 -1
- package/dist/core/model-registry.d.ts +2 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +5 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-runtime.d.ts +4 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +40 -4
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/permissions.d.ts +3 -3
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +11 -35
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts +5 -13
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +126 -116
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js +1 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/prompt-resource-bridge.d.ts +12 -0
- package/dist/core/prompt-resource-bridge.d.ts.map +1 -0
- package/dist/core/prompt-resource-bridge.js +9 -0
- package/dist/core/prompt-resource-bridge.js.map +1 -0
- package/dist/core/protected-targets.d.ts +6 -0
- package/dist/core/protected-targets.d.ts.map +1 -0
- package/dist/core/protected-targets.js +45 -0
- package/dist/core/protected-targets.js.map +1 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +7 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/rollback.d.ts +19 -3
- package/dist/core/rollback.d.ts.map +1 -1
- package/dist/core/rollback.js +172 -56
- package/dist/core/rollback.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +3 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js +14 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +11 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +111 -33
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-ownership.d.ts.map +1 -1
- package/dist/core/session-ownership.js +8 -3
- package/dist/core/session-ownership.js.map +1 -1
- package/dist/core/session-retention.d.ts.map +1 -1
- package/dist/core/session-retention.js +18 -7
- package/dist/core/session-retention.js.map +1 -1
- package/dist/core/session-startup-settings.d.ts +10 -0
- package/dist/core/session-startup-settings.d.ts.map +1 -0
- package/dist/core/session-startup-settings.js +70 -0
- package/dist/core/session-startup-settings.js.map +1 -0
- package/dist/core/subscriptions.d.ts +16 -7
- package/dist/core/subscriptions.d.ts.map +1 -1
- package/dist/core/subscriptions.js +96 -55
- package/dist/core/subscriptions.js.map +1 -1
- package/dist/core/trust-manager.d.ts +2 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +6 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/update-check.d.ts.map +1 -1
- package/dist/core/update-check.js.map +1 -1
- package/dist/core/usage-accounting.d.ts +47 -0
- package/dist/core/usage-accounting.d.ts.map +1 -0
- package/dist/core/usage-accounting.js +205 -0
- package/dist/core/usage-accounting.js.map +1 -0
- package/dist/core/usage-adapters/kimi-coding.d.ts +2 -2
- package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -1
- package/dist/core/usage-adapters/kimi-coding.js +2 -2
- package/dist/core/usage-adapters/kimi-coding.js.map +1 -1
- package/dist/core/usage-adapters/openai-codex.d.ts +3 -2
- package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
- package/dist/core/usage-adapters/openai-codex.js +3 -3
- package/dist/core/usage-adapters/openai-codex.js.map +1 -1
- package/dist/core/usage-adapters/xai.d.ts +2 -2
- package/dist/core/usage-adapters/xai.d.ts.map +1 -1
- package/dist/core/usage-adapters/xai.js +3 -3
- package/dist/core/usage-adapters/xai.js.map +1 -1
- package/dist/core/usage-adapters/zai.d.ts +2 -2
- package/dist/core/usage-adapters/zai.d.ts.map +1 -1
- package/dist/core/usage-adapters/zai.js +2 -2
- package/dist/core/usage-adapters/zai.js.map +1 -1
- package/dist/core/usage-history.d.ts +1 -18
- package/dist/core/usage-history.d.ts.map +1 -1
- package/dist/core/usage-history.js +46 -114
- package/dist/core/usage-history.js.map +1 -1
- package/dist/core/usage-service.d.ts +9 -2
- package/dist/core/usage-service.d.ts.map +1 -1
- package/dist/core/usage-service.js +95 -50
- package/dist/core/usage-service.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts +9 -1
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js +91 -37
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/buttons.d.ts +8 -1
- package/dist/gateway/buttons.d.ts.map +1 -1
- package/dist/gateway/buttons.js +76 -18
- package/dist/gateway/buttons.js.map +1 -1
- package/dist/gateway/commands.d.ts +1 -0
- package/dist/gateway/commands.d.ts.map +1 -1
- package/dist/gateway/commands.js +10 -4
- package/dist/gateway/commands.js.map +1 -1
- package/dist/gateway/cron.d.ts +12 -11
- package/dist/gateway/cron.d.ts.map +1 -1
- package/dist/gateway/cron.js +65 -56
- package/dist/gateway/cron.js.map +1 -1
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +2 -1
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/mobile-commands.d.ts +1 -0
- package/dist/gateway/mobile-commands.d.ts.map +1 -1
- package/dist/gateway/mobile-commands.js +69 -15
- package/dist/gateway/mobile-commands.js.map +1 -1
- package/dist/gateway/presenter.d.ts +12 -2
- package/dist/gateway/presenter.d.ts.map +1 -1
- package/dist/gateway/presenter.js +73 -38
- package/dist/gateway/presenter.js.map +1 -1
- package/dist/gateway/router.d.ts +2 -2
- package/dist/gateway/router.d.ts.map +1 -1
- package/dist/gateway/router.js +17 -2
- package/dist/gateway/router.js.map +1 -1
- package/dist/gateway/service.d.ts +2 -0
- package/dist/gateway/service.d.ts.map +1 -1
- package/dist/gateway/service.js +153 -0
- package/dist/gateway/service.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +86 -33
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +6 -4
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/context-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/context-view.js +2 -2
- package/dist/modes/interactive/components/context-view.js.map +1 -1
- package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -1
- package/dist/modes/interactive/components/copyable-text.js +3 -2
- package/dist/modes/interactive/components/copyable-text.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +8 -12
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/usage-view.d.ts +5 -0
- package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/usage-view.js +21 -6
- package/dist/modes/interactive/components/usage-view.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +151 -131
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
- package/dist/modes/interactive/smooth-streaming.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +2 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/node-runtime/{adapter-VFG7WNPX.js → adapter-247RTYLS.js} +4 -5
- package/dist/node-runtime/agent-session-services-RTUGP3XR.js +54 -0
- package/dist/node-runtime/{brave-UWDA3I22.js → brave-2AFFAXNN.js} +1 -1
- package/dist/node-runtime/{builtin-extensions-I2HIFEMY.js → builtin-extensions-N4EUD6SB.js} +8 -7
- package/dist/node-runtime/{chunk-QH6YL7VK.js → chunk-252ZVPPF.js} +3 -3
- package/dist/node-runtime/{chunk-PCEW76PM.js → chunk-2OIPYKLZ.js} +6 -6
- package/dist/node-runtime/{chunk-XBWPBZBN.js → chunk-2SWW7KMW.js} +1 -1
- package/dist/node-runtime/{chunk-UQUCFAJ3.js → chunk-2VIW3IMF.js} +40 -7
- package/dist/node-runtime/{chunk-UOEDI7RP.js → chunk-4KNKQGHM.js} +2 -2
- package/dist/node-runtime/chunk-4QRUZ64T.js +1203 -0
- package/dist/node-runtime/{chunk-FQMM2EZ2.js → chunk-64XTQNLA.js} +29 -7
- package/dist/node-runtime/{chunk-SPVDBUOS.js → chunk-6O3IW3IA.js} +2 -2
- package/dist/node-runtime/{chunk-5ZQXRPMC.js → chunk-6ZZHGUSA.js} +2 -2
- package/dist/node-runtime/{chunk-WIF24I7G.js → chunk-APVM5NEU.js} +149 -144
- package/dist/node-runtime/{chunk-LWYIVUGV.js → chunk-B2IBAXNX.js} +48 -31
- package/dist/node-runtime/{chunk-M3LZLQW2.js → chunk-BDRGN3L2.js} +1 -0
- package/dist/node-runtime/{chunk-LJTIVM7I.js → chunk-BMRXLQWQ.js} +464 -160
- package/dist/node-runtime/{chunk-GJ2RDBRL.js → chunk-BYC6RKCN.js} +4 -2
- package/dist/node-runtime/{chunk-T4DA4XE7.js → chunk-DFMPRAQQ.js} +162 -82
- package/dist/node-runtime/{chunk-SN2KSMPQ.js → chunk-DQSCFU7R.js} +13 -7
- package/dist/node-runtime/{chunk-UVWCDQYF.js → chunk-E5DQGNJI.js} +455 -278
- package/dist/node-runtime/{chunk-4SBQAI4T.js → chunk-EBLAZVSA.js} +2058 -73
- package/dist/node-runtime/{chunk-CSFI6YXL.js → chunk-ES6PBSIE.js} +1 -1
- package/dist/node-runtime/{chunk-IF24A3FH.js → chunk-EVM653DD.js} +4 -4
- package/dist/node-runtime/{chunk-HTFRRDSF.js → chunk-F2SMQ6ES.js} +3 -2
- package/dist/node-runtime/chunk-F2V2F4ZG.js +114 -0
- package/dist/node-runtime/{chunk-IKU6Y7DL.js → chunk-FE3WZI7F.js} +9 -6
- package/dist/node-runtime/{chunk-6VYZ5UFP.js → chunk-FLGEEH27.js} +1 -1
- package/dist/node-runtime/{chunk-5EFIU3OM.js → chunk-FTKEZL27.js} +1 -1
- package/dist/node-runtime/{chunk-RGQAEOM5.js → chunk-FYIFPFXE.js} +23 -6
- package/dist/node-runtime/{chunk-HMBGROQK.js → chunk-GLDXBBL6.js} +3 -3
- package/dist/node-runtime/{chunk-KWA4OC2J.js → chunk-H6YBCWKG.js} +1 -1
- package/dist/node-runtime/{chunk-2MI5OPMN.js → chunk-HNNHHJAB.js} +68 -50
- package/dist/node-runtime/{chunk-I74LN5JG.js → chunk-HUD2RFJW.js} +2 -2
- package/dist/node-runtime/{chunk-XHIRAZ26.js → chunk-IAZSK7KK.js} +1 -1
- package/dist/node-runtime/{chunk-GYIXXQAO.js → chunk-ICKGAKWX.js} +23 -59
- package/dist/node-runtime/{chunk-X3PGBLQ7.js → chunk-IHHTWSXN.js} +9 -9
- package/dist/node-runtime/{chunk-DAPBPCBP.js → chunk-IPP5BIV5.js} +25 -3
- package/dist/node-runtime/{chunk-QFWG2RVL.js → chunk-IXG6F4NT.js} +11 -0
- package/dist/node-runtime/{chunk-L24TPBS4.js → chunk-JEK35V2M.js} +45 -31
- package/dist/node-runtime/{chunk-RDDAZOMU.js → chunk-JL4HYQXK.js} +1 -1
- package/dist/node-runtime/{chunk-2HMIRK7W.js → chunk-LHV3V67B.js} +5 -5
- package/dist/node-runtime/{chunk-UAEOTO52.js → chunk-MNQXDFPV.js} +6 -2
- package/dist/node-runtime/{chunk-MPKSOJBT.js → chunk-NHATCSOI.js} +4 -7
- package/dist/node-runtime/{chunk-RMQZU2YU.js → chunk-NNNR3QIY.js} +1 -1
- package/dist/node-runtime/{chunk-2KIPT4HJ.js → chunk-PWHTSQC4.js} +83 -21
- package/dist/node-runtime/{chunk-RWTKOC3B.js → chunk-QBTJG3UM.js} +1 -1
- package/dist/node-runtime/{chunk-RCR3XAQY.js → chunk-QT3F6UEV.js} +233 -169
- package/dist/node-runtime/{chunk-GS42T6MX.js → chunk-QW3AAHWN.js} +1 -1
- package/dist/node-runtime/{chunk-DVQSHCVP.js → chunk-R4WSB2MQ.js} +5 -5
- package/dist/node-runtime/{chunk-B4HP6ZWM.js → chunk-RHCGYWO7.js} +1 -1
- package/dist/node-runtime/{chunk-2CFDTH5B.js → chunk-RLGY2QIL.js} +45 -59
- package/dist/node-runtime/{chunk-CDVHZOOK.js → chunk-RY3FJ6WI.js} +29 -27
- package/dist/node-runtime/{chunk-KKUTQQV7.js → chunk-RYRGL7P4.js} +1 -1
- package/dist/node-runtime/{chunk-I54LGHWM.js → chunk-STMX7W5I.js} +3 -3
- package/dist/node-runtime/chunk-SWWHZ2RI.js +158 -0
- package/dist/node-runtime/{chunk-5Q4A37RB.js → chunk-TCT6PCUR.js} +32 -11
- package/dist/node-runtime/{chunk-P7XBVXGT.js → chunk-U3YVZ6UC.js} +18 -14
- package/dist/node-runtime/{chunk-D5UCKPBQ.js → chunk-UBWW2PID.js} +1 -1
- package/dist/node-runtime/{chunk-E75WFZ33.js → chunk-UNUZICC4.js} +3 -3
- package/dist/node-runtime/{chunk-RAK2QA2B.js → chunk-UYRKUKFE.js} +4 -4
- package/dist/node-runtime/{chunk-LWJXTA6Z.js → chunk-VSUEAI7O.js} +1377 -45
- package/dist/node-runtime/{chunk-NAY6UUQZ.js → chunk-WDIVLMOH.js} +1 -1
- package/dist/node-runtime/{chunk-E24EO34J.js → chunk-WPXUR3HE.js} +1 -1
- package/dist/node-runtime/{chunk-SLVOAQOY.js → chunk-WXYNALHD.js} +113 -1
- package/dist/node-runtime/{chunk-KJ6DWS3K.js → chunk-XEOCUEUJ.js} +121 -60
- package/dist/node-runtime/chunk-YD3IZAZ7.js +47 -0
- package/dist/node-runtime/chunk-YSB6URMT.js +41 -0
- package/dist/node-runtime/{chunk-YWOJIGFY.js → chunk-ZEVFBFNF.js} +95 -142
- package/dist/node-runtime/{chunk-5B6VKFEV.js → chunk-ZIQUS5QO.js} +1 -1
- package/dist/node-runtime/cli-runtime.js +4 -4
- package/dist/node-runtime/{command-FSBU2EVZ.js → command-YRT7I2BW.js} +5 -5
- package/dist/node-runtime/{commands-NAAL7KNT.js → commands-2ETOWWRA.js} +16 -16
- package/dist/node-runtime/{commands-EMBQQVVT.js → commands-D6A6H4TS.js} +11 -18
- package/dist/node-runtime/{config-QDD5PUE2.js → config-CU7M7BTK.js} +1 -1
- package/dist/node-runtime/{config-D4QUPAHX.js → config-DS7XLMEM.js} +2 -2
- package/dist/node-runtime/{direct-tool-executor-4D7UXYU4.js → direct-tool-executor-2QJXVQD2.js} +6 -11
- package/dist/node-runtime/{exa-LL64QZR2.js → exa-6VBZNPGE.js} +1 -1
- package/dist/node-runtime/{export-html-VM4J2MNR.js → export-html-DBQRRMAY.js} +4 -4
- package/dist/node-runtime/{extension-input-E7BJZ35H.js → extension-input-VBBMX7YV.js} +5 -5
- package/dist/node-runtime/{extension-selector-WU42XDTU.js → extension-selector-T5AOG5XB.js} +5 -5
- package/dist/node-runtime/{extract-EQJE7FZZ.js → extract-BFX2N35A.js} +3 -3
- package/dist/node-runtime/{gateway-DQM333YV.js → gateway-V6K2CDWN.js} +51 -42
- package/dist/node-runtime/{gemini-search-35OCRFLN.js → gemini-search-C66QHDT6.js} +2 -2
- package/dist/node-runtime/{gemini-url-context-UQY3PHHW.js → gemini-url-context-T7DEK73R.js} +3 -3
- package/dist/node-runtime/{github-extract-F64RZOEA.js → github-extract-HOGE3D6F.js} +107 -38
- package/dist/node-runtime/{goal-NJEE5CTU.js → goal-J7TYMOBK.js} +14 -8
- package/dist/node-runtime/index.js +51 -48
- package/dist/node-runtime/{init-P5AUV77I.js → init-JBQJIPYI.js} +3 -6
- package/dist/node-runtime/{install-cli-NN4YAU44.js → install-cli-INGHIVBY.js} +30 -25
- package/dist/node-runtime/interactive-mode-ASZ7APYP.js +75 -0
- package/dist/node-runtime/{interactive-view-NGFAMHPW.js → interactive-view-K33PM4OS.js} +8 -8
- package/dist/node-runtime/{lsp-manager-3ASUSO4T.js → lsp-manager-S554V5HR.js} +240 -155
- package/dist/node-runtime/{lunr-browser-IR7TL3J7.js → lunr-browser-H4FDOR3C.js} +7 -7
- package/dist/node-runtime/{lunr-computer-use-Y23CCDIJ.js → lunr-computer-use-VDP2QNRQ.js} +9 -9
- package/dist/node-runtime/{lunr-cron-USHC4LXH.js → lunr-cron-WD3YH4CR.js} +93 -80
- package/dist/node-runtime/main.js +43 -41
- package/dist/node-runtime/{mobile-commands-O5LCHL32.js → mobile-commands-ICUXFW5V.js} +12 -12
- package/dist/node-runtime/{model-runtime-OO5HFLWE.js → model-runtime-MZ2JMDV4.js} +4 -4
- package/dist/node-runtime/{openai-search-B3MSNCQA.js → openai-search-K72LJDYN.js} +1 -1
- package/dist/node-runtime/{package-manager-cli-Q7BL6KZO.js → package-manager-cli-CYM262SI.js} +20 -20
- package/dist/node-runtime/{parallel-AI2MNSCU.js → parallel-X724NCNU.js} +1 -1
- package/dist/node-runtime/{perplexity-QVJW3I35.js → perplexity-RDHQHVMK.js} +2 -2
- package/dist/node-runtime/{pi-intercom-QM53RLTS.js → pi-intercom-NHHEPBMI.js} +2 -2
- package/dist/node-runtime/{pi-mcp-adapter-3PHF4KZ4.js → pi-mcp-adapter-PP3GQJQ2.js} +98 -94
- package/dist/node-runtime/{pi-ollama-cloud-2F3Y2QNM.js → pi-ollama-cloud-4MNWIMFN.js} +11 -24
- package/dist/node-runtime/{pi-prompt-template-model-QWTCGLJU.js → pi-prompt-template-model-FTGELLS5.js} +32 -36
- package/dist/node-runtime/{pi-subagents-7IBSSGEW.js → pi-subagents-QPU3OXE4.js} +114 -167
- package/dist/node-runtime/{pi-web-access-WTGMNZ32.js → pi-web-access-Z3LP246C.js} +144 -108
- package/dist/node-runtime/{print-mode-XQ76CYMT.js → print-mode-2XHN5SUA.js} +3 -3
- package/dist/node-runtime/{process-registry-4FAKZQOL.js → process-registry-Q4QWIU33.js} +3 -3
- package/dist/node-runtime/{proxy-modes-5FAPSZEZ.js → proxy-modes-VEGC6QG5.js} +8 -15
- package/dist/node-runtime/rpc-entry.js +43 -41
- package/dist/node-runtime/{rpc-mode-O3XV4SID.js → rpc-mode-32DHJPEJ.js} +4 -4
- package/dist/node-runtime/{runtime-4VA6JKNF.js → runtime-EDUUGAQD.js} +56 -46
- package/dist/node-runtime/{runtime-EFPPD2UW.js → runtime-UGXM4NPQ.js} +2 -2
- package/dist/node-runtime/{runtime-bridges-7WVCLI76.js → runtime-bridges-DNKMNJCF.js} +7 -7
- package/dist/node-runtime/{service-MDQIPQ26.js → service-IHLGFLBT.js} +6 -4
- package/dist/node-runtime/{session-handoff-GWARVEWT.js → session-handoff-LYH53ESV.js} +4 -4
- package/dist/node-runtime/{session-manager-JB5J6XBN.js → session-manager-ZJ3N5Q74.js} +3 -3
- package/dist/node-runtime/{session-selector-GIM4DHQ2.js → session-selector-I73U3EIO.js} +7 -7
- package/dist/node-runtime/{settings-manager-DJDM5AHM.js → settings-manager-P2TKGYTR.js} +5 -5
- package/dist/node-runtime/{setup-JBKOLJ6F.js → setup-H7CCELIL.js} +15 -1
- package/dist/node-runtime/{setup-PFBWRNUI.js → setup-OLQ4GXWS.js} +17 -17
- package/dist/node-runtime/{src-IVPNZ2BX.js → src-6RV4PXKJ.js} +64 -36
- package/dist/node-runtime/{subagent-executor-LPZ4BHWE.js → subagent-executor-UI6SHG3X.js} +412 -288
- package/dist/node-runtime/{tavily-WEZFVFP7.js → tavily-KZBFYQB6.js} +1 -1
- package/dist/node-runtime/{theme-UOO5RVFN.js → theme-YLVZKKZD.js} +2 -2
- package/dist/node-runtime/{trust-manager-MMISNCYO.js → trust-manager-ZCU76D23.js} +2 -2
- package/dist/node-runtime/{update-cli-HNMOTNGX.js → update-cli-F3XXJANQ.js} +6 -6
- package/dist/node-runtime/{usage-service-LFB2SWYV.js → usage-service-CPAGBED5.js} +1 -1
- package/dist/node-runtime/{video-extract-OOZHR7SU.js → video-extract-UPKYIBW3.js} +3 -3
- package/dist/node-runtime/{workflow-OHPBEFO4.js → workflow-ICDI4N3J.js} +208 -78
- package/dist/node-runtime/{youtube-extract-FNPAUNHU.js → youtube-extract-77NT7FWH.js} +4 -4
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js +25 -10
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js +2 -0
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/paths.d.ts +4 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +33 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/sanitize-terminal-text.d.ts +7 -0
- package/dist/utils/sanitize-terminal-text.d.ts.map +1 -0
- package/dist/utils/sanitize-terminal-text.js +67 -0
- package/dist/utils/sanitize-terminal-text.js.map +1 -0
- package/docs/browser.md +1 -1
- package/docs/custom-provider.md +3 -3
- package/docs/extensions.md +8 -4
- package/docs/features.md +25 -7
- package/docs/keybindings.md +1 -1
- package/docs/models.md +5 -5
- package/docs/packages.md +1 -1
- package/docs/providers.md +2 -2
- package/docs/rpc.md +7 -7
- package/docs/security.md +10 -5
- package/docs/sessions.md +2 -2
- package/docs/skills.md +1 -1
- package/docs/terminal-setup.md +7 -7
- package/docs/themes.md +1 -1
- package/docs/usage.md +1 -1
- package/examples/extensions/auto-commit-on-exit.ts +1 -1
- package/examples/extensions/bash-spawn-hook.ts +1 -1
- package/examples/extensions/built-in-tool-renderer.ts +1 -1
- package/examples/extensions/claude-rules.ts +1 -1
- package/examples/extensions/commands.ts +1 -1
- package/examples/extensions/custom-compaction.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/doom-overlay/index.ts +1 -1
- package/examples/extensions/git-merge-and-resolve.ts +2 -2
- package/examples/extensions/gondolin/index.ts +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/hidden-thinking-label.ts +1 -1
- package/examples/extensions/inline-bash.ts +2 -2
- package/examples/extensions/input-transform-streaming.ts +2 -2
- package/examples/extensions/input-transform.ts +2 -2
- package/examples/extensions/interactive-shell.ts +1 -1
- package/examples/extensions/kimi-deferred-tools.ts +1 -1
- package/examples/extensions/mac-system-theme.ts +1 -1
- package/examples/extensions/minimal-mode.ts +1 -1
- package/examples/extensions/modal-editor.ts +1 -1
- package/examples/extensions/model-status.ts +1 -1
- package/examples/extensions/notify.ts +3 -3
- package/examples/extensions/overlay-qa-tests.ts +1 -1
- package/examples/extensions/overlay-test.ts +1 -1
- package/examples/extensions/pirate.ts +1 -1
- package/examples/extensions/preset.ts +3 -3
- package/examples/extensions/project-trust.ts +4 -4
- package/examples/extensions/prompt-customizer.ts +1 -1
- package/examples/extensions/rainbow-editor.ts +1 -1
- package/examples/extensions/rpc-demo.ts +1 -1
- package/examples/extensions/sandbox/index.ts +7 -7
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/shutdown-command.ts +5 -5
- package/examples/extensions/ssh.ts +2 -2
- package/examples/extensions/subagent/README.md +3 -3
- package/examples/extensions/subagent/index.ts +2 -2
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/tool-override.ts +1 -1
- package/examples/extensions/tools.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/working-indicator.ts +1 -1
- package/examples/extensions/working-message-test.ts +1 -1
- package/examples/sdk/01-minimal.ts +1 -1
- package/examples/sdk/03-custom-prompt.ts +1 -1
- package/examples/sdk/04-skills.ts +1 -1
- package/examples/sdk/06-extensions.ts +2 -2
- package/examples/sdk/08-prompt-templates.ts +1 -1
- package/install-lock/package-lock.json +24 -24
- package/install-lock/package.json +2 -2
- package/npm-shrinkwrap.json +60 -24
- package/package.json +9 -9
- package/dist/modes/interactive/components/exit-card.d.ts +0 -22
- package/dist/modes/interactive/components/exit-card.d.ts.map +0 -1
- package/dist/modes/interactive/components/exit-card.js +0 -69
- package/dist/modes/interactive/components/exit-card.js.map +0 -1
- package/dist/node-runtime/agent-session-services-5YXS2PLF.js +0 -51
- package/dist/node-runtime/chunk-2IDTZAG5.js +0 -1415
- package/dist/node-runtime/chunk-3MISGG4S.js +0 -769
- package/dist/node-runtime/chunk-4HXHDDCF.js +0 -16
- package/dist/node-runtime/chunk-5B5QN3ZQ.js +0 -356
- package/dist/node-runtime/chunk-7IQGBKBJ.js +0 -2033
- package/dist/node-runtime/chunk-AUXVGBO4.js +0 -19
- package/dist/node-runtime/chunk-PTFBPO3C.js +0 -50
- package/dist/node-runtime/interactive-mode-YOHZVMKX.js +0 -74
- package/dist/node-runtime/mcp-auth-flow-QVLFVLEO.js +0 -33
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { collectUsageRequests, totalRequestUsage, collectChildUsage, totalChildUsage } from "../../../core/usage-accounting.js";
|
|
1
3
|
export function checkpointGoalActiveTime(goal, now, continueClock) {
|
|
2
4
|
const accumulated = nonNegativeFiniteNumber(goal.timeUsedSeconds);
|
|
3
5
|
const startedAt = goal.activeStartedAt;
|
|
@@ -13,7 +15,7 @@ export function updateGoalUsage(goal, ctx, continueClock = goal.status === "acti
|
|
|
13
15
|
const now = Date.now();
|
|
14
16
|
const baselineTokens = nonNegativeFiniteNumber(goal.baselineTokens);
|
|
15
17
|
goal.baselineTokens = baselineTokens;
|
|
16
|
-
goal.tokensUsed = Math.max(
|
|
18
|
+
goal.tokensUsed = Math.max(nonNegativeFiniteNumber(goal.tokensUsed), currentTokenTotal(ctx) - baselineTokens);
|
|
17
19
|
checkpointGoalActiveTime(goal, now, continueClock);
|
|
18
20
|
goal.updatedAt = now;
|
|
19
21
|
}
|
|
@@ -72,6 +74,7 @@ export function cumulativeAssistantTokens(entries) {
|
|
|
72
74
|
}
|
|
73
75
|
export function currentTokenTotal(ctx) {
|
|
74
76
|
const sessionManager = ctx.sessionManager;
|
|
75
|
-
|
|
77
|
+
const entries = sessionManager?.getEntries?.() ?? sessionManager?.getBranch?.() ?? [];
|
|
78
|
+
return totalRequestUsage(collectUsageRequests(entries)).total + totalChildUsage(collectChildUsage(entries)).total;
|
|
76
79
|
}
|
|
77
80
|
//# sourceMappingURL=accounting.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounting.js","sourceRoot":"","sources":["../../../../src/builtin-extensions/narumiruna-pi-goal/src/accounting.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accounting.js","sourceRoot":"","sources":["../../../../src/builtin-extensions/narumiruna-pi-goal/src/accounting.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { collectUsageRequests, totalRequestUsage, collectChildUsage, totalChildUsage } from \"../../../core/usage-accounting.ts\";\nimport type { Usage } from \"@ashx-j/lunr-ai\";\n\nexport interface GoalAccountingState {\n\tstatus: string;\n\tbaselineTokens: number;\n\ttokensUsed: number;\n\ttimeUsedSeconds: number;\n\tactiveStartedAt?: number;\n\tupdatedAt: number;\n}\n\ninterface AssistantUsageEntryLike {\n\ttype?: unknown;\n\tmessage?: unknown;\n}\n\ninterface UsageContext {\n\tsessionManager?: unknown;\n}\n\nexport function checkpointGoalActiveTime(\n\tgoal: GoalAccountingState,\n\tnow: number,\n\tcontinueClock: boolean,\n) {\n\tconst accumulated = nonNegativeFiniteNumber(goal.timeUsedSeconds);\n\tconst startedAt = goal.activeStartedAt;\n\tif (typeof startedAt === \"number\" && Number.isFinite(startedAt)) {\n\t\tgoal.timeUsedSeconds = accumulated + Math.max(0, now - startedAt) / 1000;\n\t} else {\n\t\tgoal.timeUsedSeconds = accumulated;\n\t}\n\tgoal.activeStartedAt = continueClock ? now : undefined;\n}\n\nexport function updateGoalUsage(\n\tgoal: GoalAccountingState,\n\tctx: UsageContext,\n\tcontinueClock = goal.status === \"active\",\n) {\n\tconst now = Date.now();\n\tconst baselineTokens = nonNegativeFiniteNumber(goal.baselineTokens);\n\tgoal.baselineTokens = baselineTokens;\n\tgoal.tokensUsed = Math.max(nonNegativeFiniteNumber(goal.tokensUsed), currentTokenTotal(ctx) - baselineTokens);\n\tcheckpointGoalActiveTime(goal, now, continueClock);\n\tgoal.updatedAt = now;\n}\n\nexport function formatDuration(seconds: number) {\n\tconst wholeSeconds = Math.max(0, Math.floor(nonNegativeFiniteNumber(seconds)));\n\tif (wholeSeconds < 60) return `${wholeSeconds}s`;\n\tconst minutes = Math.floor(wholeSeconds / 60);\n\tif (minutes < 60) return `${minutes}m`;\n\tconst hours = Math.floor(minutes / 60);\n\treturn `${hours}h${minutes % 60}m`;\n}\n\nexport function formatTokenCount(value: number) {\n\tif (value < 1_000) return `${value}`;\n\tif (value < 1_000_000) {\n\t\treturn `${Number.isInteger(value / 1_000) ? value / 1_000 : (value / 1_000).toFixed(1)}k`;\n\t}\n\treturn `${Number.isInteger(value / 1_000_000) ? value / 1_000_000 : (value / 1_000_000).toFixed(1)}m`;\n}\n\nexport function isNonNegativeFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nexport function nonNegativeFiniteNumber(value: unknown) {\n\treturn isNonNegativeFiniteNumber(value) ? value : 0;\n}\n\nexport function normalizeTokenBudget(value: unknown) {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value > 0\n\t\t? value\n\t\t: undefined;\n}\n\nexport function assistantUsageTokens(value: unknown) {\n\tif (!value || typeof value !== \"object\") return 0;\n\tconst usage = value as Partial<Usage>;\n\tif (isNonNegativeFiniteNumber(usage.totalTokens)) return usage.totalTokens;\n\treturn Math.min(\n\t\tNumber.MAX_SAFE_INTEGER,\n\t\tnonNegativeFiniteNumber(usage.input) +\n\t\t\tnonNegativeFiniteNumber(usage.output) +\n\t\t\tnonNegativeFiniteNumber(usage.cacheRead) +\n\t\t\tnonNegativeFiniteNumber(usage.cacheWrite),\n\t);\n}\n\nexport function cumulativeAssistantTokens(entries: unknown[]) {\n\tlet total = 0;\n\tfor (const entry of entries) {\n\t\tconst candidate = entry as AssistantUsageEntryLike;\n\t\tif (candidate?.type !== \"message\") continue;\n\t\tconst message = candidate.message as { role?: unknown; usage?: unknown } | undefined;\n\t\tif (message?.role !== \"assistant\") continue;\n\t\ttotal = Math.min(Number.MAX_SAFE_INTEGER, total + assistantUsageTokens(message.usage));\n\t}\n\treturn total;\n}\n\nexport function currentTokenTotal(ctx: UsageContext): number {\n\tconst sessionManager = ctx.sessionManager as { getEntries?: () => unknown[]; getBranch?: () => unknown[] } | undefined;\n\tconst entries = sessionManager?.getEntries?.() ?? sessionManager?.getBranch?.() ?? [];\n\treturn totalRequestUsage(collectUsageRequests(entries)).total + totalChildUsage(collectChildUsage(entries)).total;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/builtin-extensions/narumiruna-pi-goal/src/commands.ts"],"names":[],"mappings":"AAYA,OAAO,EAON,KAAK,WAAW,EAMhB,KAAK,aAAa,EAGlB,MAAM,cAAc,CAAC;AAItB,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IAEtC,YAAY,OAAO,EAAE,WAAW,EAE/B;IAEK,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBAiFrF;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBAmBnF;IAEK,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBAkB1F;IAED,YAAY,CAAC,GAAG,EAAE,aAAa,QAe9B;IAEK,QAAQ,CAAC,GAAG,EAAE,aAAa,iBA2BhC;IAEK,mCAAmC,CAAC,GAAG,EAAE,aAAa,oBAyF3D;IAED,iBAAiB,CAAC,GAAG,EAAE,aAAa,QAKnC;IAED,SAAS,CAAC,GAAG,EAAE,aAAa,QAqB3B;IAEK,UAAU,CAAC,GAAG,EAAE,aAAa,iBAsElC;IAED,SAAS,CAAC,GAAG,EAAE,aAAa,QAe3B;IAEK,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBA8EpF;IAED,QAAQ,CAAC,GAAG,EAAE,aAAa,QAoB1B;YAEa,uBAAuB;CAsFrC","sourcesContent":["// @ts-nocheck\nimport { currentTokenTotal } from \"./accounting.js\";\nimport { validateObjective } from \"./command.js\";\nimport { buildGoalPrompt, buildObjectiveUpdatedPrompt, buildResumePrompt } from \"./prompts.js\";\nimport {\n\tactivateQueuedGoal,\n\tappendGoal,\n\tcreateQueuedGoal,\n\tdropLastGoal as dropLastQueuedGoal,\n\tprioritizeGoal as prioritizeQueuedGoal,\n\tskipGoal as skipQueuedGoal,\n} from \"./queue.js\";\nimport {\n\tabortCurrentTurn,\n\tblocksStaleGoalToolCalls,\n\tcreateGoal,\n\teditedGoalStatus,\n\tformatBudget,\n\tformatError,\n\ttype GoalRuntime,\n\tgoalSummary,\n\thasPendingMessages,\n\tisResumableGoalStatus,\n\tnextGoalInstance,\n\tSTATUS_KEY,\n\ttype StatusContext,\n\tstoppedStatusLabel,\n\ttransitionGoal,\n} from \"./runtime.js\";\n\n// User-command mutations are kept separate from Pi event wiring. Every controller\n// receives exactly one per-factory GoalRuntime, preserving session isolation.\nexport class GoalCommandController {\n\tprivate readonly runtime: GoalRuntime;\n\n\tconstructor(runtime: GoalRuntime) {\n\t\tthis.runtime = runtime;\n\t}\n\n\tasync startGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingGoal =\n\t\t\tthis.runtime.activeGoal?.status !== \"complete\" ? this.runtime.activeGoal : undefined;\n\t\tconst existingQueuedGoals = [...this.runtime.queuedGoals];\n\t\tif (existingGoal) {\n\t\t\tconst shouldReplace = await ctx.ui.confirm(\n\t\t\t\t\"Replace goal?\",\n\t\t\t\t`Current goal: ${existingGoal.text}\\n\\nNew goal: ${objective}`,\n\t\t\t);\n\t\t\tif (!shouldReplace) {\n\t\t\t\tctx.ui.notify(`Goal kept: ${existingGoal.text}`, \"info\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Unlock lazy visibility only for a real activation. In always mode, a\n\t\t// missing tool means another policy or allowlist intentionally removed it.\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot start /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (existingGoal?.status === \"active\") this.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.queuedGoals = [];\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.activeGoal = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst startedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tstartedGoal.id,\n\t\t\tbuildGoalPrompt(startedGoal),\n\t\t);\n\t\tif (!sent) {\n\t\t\tlet rolledBackStartedGoal = false;\n\t\t\tif (this.runtime.activeGoal?.id === startedGoal.id) {\n\t\t\t\trolledBackStartedGoal = true;\n\t\t\t\tif (existingGoal) {\n\t\t\t\t\tthis.runtime.queuedGoals = existingQueuedGoals;\n\t\t\t\t\tthis.runtime.recordGoalUsage(existingGoal, ctx);\n\t\t\t\t\tif (existingGoal.status === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(existingGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = existingGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rolledBackStartedGoal) {\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\texistingGoal ? `Goal replaced: ${objective}` : `Goal started: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync addGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = appendGoal(\n\t\t\tthis.runtime.queuedGoals,\n\t\t\tcreateQueuedGoal(objective, tokenBudget),\n\t\t);\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tctx.ui.notify(\n\t\t\t`Goal added at position ${this.runtime.queuedGoals.length + 1}: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync prioritizeGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) {\n\t\t\tctx.ui.notify(`Priority goal queued until Pi settles: ${objective}`, \"info\");\n\t\t\treturn;\n\t\t}\n\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t}\n\n\tdropLastGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to drop.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tconst result = dropLastQueuedGoal(currentGoal, this.runtime.queuedGoals);\n\t\tif (!result.goal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? currentGoal.text}`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = result.queue;\n\t\tthis.runtime.persistGoal(result.goal);\n\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? \"unknown goal\"}`, \"warning\");\n\t}\n\n\tasync skipGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to skip.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.queuedGoals.length === 0) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal skipped: ${currentGoal.text}. No goals remain.`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (currentGoal.status === \"active\") this.runtime.recordGoalUsage(currentGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.pendingQueueAction = {\n\t\t\tkind: \"advance\",\n\t\t\tgoalId: currentGoal.id,\n\t\t\treason: \"skip\",\n\t\t\tcompletedText: currentGoal.text,\n\t\t};\n\t\tthis.runtime.persistGoal(currentGoal);\n\t\tctx.ui.notify(`Goal skip queued until Pi settles: ${currentGoal.text}`, \"info\");\n\t\tif (ctx.isIdle?.() === true && !hasPendingMessages(ctx)) {\n\t\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t\t}\n\t}\n\n\tasync dispatchPendingQueueActionIfSettled(ctx: StatusContext) {\n\t\tconst pending = this.runtime.pendingQueueAction;\n\t\tif (!pending || this.runtime.queueFrozen) return false;\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) return false;\n\t\tif (pending.kind === \"prioritize\") {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\treturn this.activatePrioritizedGoal(\n\t\t\t\tpending.objective,\n\t\t\t\tpending.tokenBudget,\n\t\t\t\tctx,\n\t\t\t\tpending.displacedUsageFinalized === true,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t!this.runtime.activeGoal ||\n\t\t\tthis.runtime.activeGoal.id !== pending.goalId ||\n\t\t\t(this.runtime.activeGoal.status !== \"complete\" && pending.reason === \"complete\")\n\t\t) {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\tif (this.runtime.activeGoal) this.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst previousText = pending.completedText;\n\t\tconst reason = pending.reason;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst next = skipQueuedGoal(this.runtime.queuedGoals);\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.activeGoal = next.goal\n\t\t\t? activateQueuedGoal(next.goal, currentTokenTotal(ctx))\n\t\t\t: undefined;\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. No goals remain.`, \"info\");\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t}\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`Goal skipped: ${previousText}. Next goal remains ${this.runtime.activeGoal.status}: ${this.runtime.activeGoal.text}`,\n\t\t\t\t\t\"info\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(`Cannot start the next /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn false;\n\t\t}\n\t\tconst activatedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tactivatedGoal.id,\n\t\t\tbuildGoalPrompt(activatedGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal?.id === activatedGoal.id) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(activatedGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(\n\t\t\t\t`Next goal paused after prompt delivery failed: ${activatedGoal.text}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t\tif (reason !== \"complete\") {\n\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. Started next goal: ${activatedGoal.text}`, \"info\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tnotifyFrozenQueue(ctx: StatusContext) {\n\t\tctx.ui.notify(\n\t\t\t\"The experimental goal queue is frozen. Re-enable experimental.goals in pi-goal.json and run /reload, or use /goal clear.\",\n\t\t\t\"warning\",\n\t\t);\n\t}\n\n\tpauseGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only active goals can be paused.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\tabortCurrentTurn(ctx);\n\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tctx.ui.notify(`Goal paused: ${this.runtime.activeGoal.text}`, \"info\");\n\t}\n\n\tasync resumeGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (!isResumableGoalStatus(this.runtime.activeGoal.status)) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only paused, blocked, usage-limited, or budget-limited goals can be resumed.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.runtime.activeGoal.tokenBudget !== undefined &&\n\t\t\tthis.runtime.activeGoal.tokensUsed >= this.runtime.activeGoal.tokenBudget\n\t\t) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot resume /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst stoppedGoal = this.runtime.activeGoal;\n\t\tconst stoppedStatus = stoppedGoal.status;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.activeGoal = transitionGoal(nextGoalInstance(this.runtime.activeGoal), \"active\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst resumedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tresumedGoal.id,\n\t\t\tbuildResumePrompt(resumedGoal, stoppedStatus),\n\t\t);\n\t\tif (!sent) {\n\t\t\tif (\n\t\t\t\tthis.runtime.activeGoal?.id === resumedGoal.id &&\n\t\t\t\tthis.runtime.activeGoal.status === \"active\"\n\t\t\t) {\n\t\t\t\tthis.runtime.activeGoal = stoppedGoal;\n\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\t`Goal resumed from ${stoppedStatusLabel(stoppedStatus)}: ${resumedGoal.text}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tclearGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\tthis.runtime.cancelContinuationWork();\n\t\t\tthis.runtime.clearGoalRecovery();\n\t\t\tthis.runtime.clearBudgetWrapUp();\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tthis.runtime.clearPersistedGoal(ctx.cwd);\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst stoppedGoal = this.runtime.activeGoal.text;\n\t\tthis.runtime.clearActiveGoal(ctx);\n\t\tctx.ui.notify(`Goal cleared: ${stoppedGoal}`, \"warning\");\n\t}\n\n\tasync editGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal. Use /goal <objective> to start one.\", \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tconst previousGoal = { ...this.runtime.activeGoal };\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tconst previousStatus = this.runtime.activeGoal.status;\n\t\tconst nextGoal = transitionGoal(\n\t\t\t{\n\t\t\t\t...nextGoalInstance(this.runtime.activeGoal),\n\t\t\t\ttext: objective,\n\t\t\t\ttokenBudget: tokenBudget ?? this.runtime.activeGoal.tokenBudget,\n\t\t\t},\n\t\t\teditedGoalStatus(previousStatus),\n\t\t);\n\t\tconst goalToolVisibilityBeforeActivation =\n\t\t\tnextGoal.status === \"active\" ? this.runtime.snapshotGoalToolVisibility() : undefined;\n\t\tif (nextGoal.status === \"active\") {\n\t\t\ttry {\n\t\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(`Cannot reactivate /goal: ${formatError(error)}`, \"error\");\n\t\t\t\tif (this.runtime.activeGoal?.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.runtime.activeGoal = nextGoal;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst editedGoal = this.runtime.activeGoal;\n\t\tif (!editedGoal) return;\n\t\tif (editedGoal.status === \"active\") {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\t\tctx,\n\t\t\t\teditedGoal.id,\n\t\t\t\tbuildObjectiveUpdatedPrompt(editedGoal),\n\t\t\t);\n\t\t\tif (!sent) {\n\t\t\t\tif (this.runtime.activeGoal?.id === editedGoal.id) {\n\t\t\t\t\tif (previousStatus === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t\tif (goalToolVisibilityBeforeActivation) {\n\t\t\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (blocksStaleGoalToolCalls(editedGoal.status)) {\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t} else {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t}\n\t\tctx.ui.notify(`Goal updated: ${objective}`, \"info\");\n\t}\n\n\tshowGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"Usage: /goal <objective>\\nNo goal is currently set.\", \"info\");\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.queueFrozen) {\n\t\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t}\n\t\tctx.ui.notify(\n\t\t\tgoalSummary(\n\t\t\t\tthis.runtime.activeGoal,\n\t\t\t\tthis.runtime.queuedGoals,\n\t\t\t\tthis.runtime.settings.experimental.goals,\n\t\t\t\tthis.runtime.queueFrozen,\n\t\t\t),\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tprivate async activatePrioritizedGoal(\n\t\tobjective: string,\n\t\ttokenBudget: number | undefined,\n\t\tctx: StatusContext,\n\t\tdisplacedUsageFinalized = false,\n\t) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn true;\n\t\t}\n\t\tif (currentGoal.status === \"active\" && !displacedUsageFinalized) {\n\t\t\tthis.runtime.recordGoalUsage(currentGoal, ctx);\n\t\t}\n\t\tconst previousGoal = { ...currentGoal };\n\t\tconst previousQueue = [...this.runtime.queuedGoals];\n\t\tconst visibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot prioritize /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (currentGoal.status === \"complete\") {\n\t\t\t\t// Completion already committed, so retain the priority intent for a\n\t\t\t\t// later /reload after the tool policy is restored.\n\t\t\t\tthis.runtime.pendingQueueAction = {\n\t\t\t\t\tkind: \"prioritize\",\n\t\t\t\t\tobjective,\n\t\t\t\t\ttokenBudget,\n\t\t\t\t\t...(displacedUsageFinalized ? { displacedUsageFinalized: true } : {}),\n\t\t\t\t};\n\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t} else {\n\t\t\t\t// Roll back an activation that never started. An active displaced goal\n\t\t\t\t// cannot continue safely without its terminal tools, so make it resumable.\n\t\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\t\tif (currentGoal.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx, true, !displacedUsageFinalized);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst prioritized = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tconst next =\n\t\t\tcurrentGoal.status === \"complete\"\n\t\t\t\t? { goal: prioritized, queue: [...this.runtime.queuedGoals] }\n\t\t\t\t: prioritizeQueuedGoal(currentGoal, this.runtime.queuedGoals, prioritized);\n\t\tthis.runtime.activeGoal = next.goal;\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tif (!this.runtime.activeGoal) return false;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tthis.runtime.activeGoal.id,\n\t\t\tbuildGoalPrompt(this.runtime.activeGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal.id === prioritized.id) {\n\t\t\tthis.runtime.queuedGoals = previousQueue;\n\t\t\tif (previousGoal.status === \"active\") {\n\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t} else {\n\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\tif (previousGoal.status === \"complete\") {\n\t\t\t\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\t\t\t} else if (blocksStaleGoalToolCalls(previousGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tthis.runtime.restoreGoalToolVisibility(visibilityBeforeActivation);\n\t\t\treturn false;\n\t\t}\n\t\tctx.ui.notify(`Goal prioritized: ${objective}`, \"info\");\n\t\treturn true;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/builtin-extensions/narumiruna-pi-goal/src/commands.ts"],"names":[],"mappings":"AAYA,OAAO,EAON,KAAK,WAAW,EAMhB,KAAK,aAAa,EAGlB,MAAM,cAAc,CAAC;AAItB,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IAEtC,YAAY,OAAO,EAAE,WAAW,EAE/B;IAEK,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBAiFrF;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBAmBnF;IAEK,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBAkB1F;IAED,YAAY,CAAC,GAAG,EAAE,aAAa,QAe9B;IAEK,QAAQ,CAAC,GAAG,EAAE,aAAa,iBA2BhC;IAEK,mCAAmC,CAAC,GAAG,EAAE,aAAa,oBAyF3D;IAED,iBAAiB,CAAC,GAAG,EAAE,aAAa,QAKnC;IAED,SAAS,CAAC,GAAG,EAAE,aAAa,QAqB3B;IAEK,UAAU,CAAC,GAAG,EAAE,aAAa,iBAsElC;IAED,SAAS,CAAC,GAAG,EAAE,aAAa,QAe3B;IAEK,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,aAAa,iBA8EpF;IAED,QAAQ,CAAC,GAAG,EAAE,aAAa,QAoB1B;YAEa,uBAAuB;CAsFrC","sourcesContent":["// @ts-nocheck\nimport { currentTokenTotal } from \"./accounting.js\";\nimport { validateObjective } from \"./command.js\";\nimport { buildGoalPrompt, buildObjectiveUpdatedPrompt, buildResumePrompt } from \"./prompts.js\";\nimport {\n\tactivateQueuedGoal,\n\tappendGoal,\n\tcreateQueuedGoal,\n\tdropLastGoal as dropLastQueuedGoal,\n\tprioritizeGoal as prioritizeQueuedGoal,\n\tskipGoal as skipQueuedGoal,\n} from \"./queue.js\";\nimport {\n\tabortCurrentTurn,\n\tblocksStaleGoalToolCalls,\n\tcreateGoal,\n\teditedGoalStatus,\n\tformatBudget,\n\tformatError,\n\ttype GoalRuntime,\n\tgoalSummary,\n\thasPendingMessages,\n\tisResumableGoalStatus,\n\tnextGoalInstance,\n\tSTATUS_KEY,\n\ttype StatusContext,\n\tstoppedStatusLabel,\n\ttransitionGoal,\n} from \"./runtime.js\";\n\n// User-command mutations are kept separate from Pi event wiring. Every controller\n// receives exactly one per-factory GoalRuntime, preserving session isolation.\nexport class GoalCommandController {\n\tprivate readonly runtime: GoalRuntime;\n\n\tconstructor(runtime: GoalRuntime) {\n\t\tthis.runtime = runtime;\n\t}\n\n\tasync startGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingGoal =\n\t\t\tthis.runtime.activeGoal?.status !== \"complete\" ? this.runtime.activeGoal : undefined;\n\t\tconst existingQueuedGoals = [...this.runtime.queuedGoals];\n\t\tif (existingGoal) {\n\t\t\tconst shouldReplace = await ctx.ui.confirm(\n\t\t\t\t\"Replace goal?\",\n\t\t\t\t`Current goal: ${existingGoal.text}\\n\\nNew goal: ${objective}`,\n\t\t\t);\n\t\t\tif (!shouldReplace) {\n\t\t\t\tctx.ui.notify(`Goal kept: ${existingGoal.text}`, \"info\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Unlock lazy visibility only for a real activation. In always mode, a\n\t\t// missing tool means another policy or allowlist intentionally removed it.\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot start /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (existingGoal?.status === \"active\") this.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.queuedGoals = [];\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.activeGoal = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst startedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tstartedGoal.id,\n\t\t\tbuildGoalPrompt(startedGoal),\n\t\t);\n\t\tif (!sent) {\n\t\t\tlet rolledBackStartedGoal = false;\n\t\t\tif (this.runtime.activeGoal?.id === startedGoal.id) {\n\t\t\t\trolledBackStartedGoal = true;\n\t\t\t\tif (existingGoal) {\n\t\t\t\t\tthis.runtime.queuedGoals = existingQueuedGoals;\n\t\t\t\t\tthis.runtime.recordGoalUsage(existingGoal, ctx);\n\t\t\t\t\tif (existingGoal.status === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(existingGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = existingGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rolledBackStartedGoal) {\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\texistingGoal ? `Goal replaced: ${objective}` : `Goal started: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync addGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = appendGoal(\n\t\t\tthis.runtime.queuedGoals,\n\t\t\tcreateQueuedGoal(objective, tokenBudget),\n\t\t);\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tctx.ui.notify(\n\t\t\t`Goal added at position ${this.runtime.queuedGoals.length + 1}: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync prioritizeGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) {\n\t\t\tctx.ui.notify(`Priority goal queued until lunR settles: ${objective}`, \"info\");\n\t\t\treturn;\n\t\t}\n\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t}\n\n\tdropLastGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to drop.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tconst result = dropLastQueuedGoal(currentGoal, this.runtime.queuedGoals);\n\t\tif (!result.goal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? currentGoal.text}`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = result.queue;\n\t\tthis.runtime.persistGoal(result.goal);\n\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? \"unknown goal\"}`, \"warning\");\n\t}\n\n\tasync skipGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to skip.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.queuedGoals.length === 0) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal skipped: ${currentGoal.text}. No goals remain.`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (currentGoal.status === \"active\") this.runtime.recordGoalUsage(currentGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.pendingQueueAction = {\n\t\t\tkind: \"advance\",\n\t\t\tgoalId: currentGoal.id,\n\t\t\treason: \"skip\",\n\t\t\tcompletedText: currentGoal.text,\n\t\t};\n\t\tthis.runtime.persistGoal(currentGoal);\n\t\tctx.ui.notify(`Goal skip queued until lunR settles: ${currentGoal.text}`, \"info\");\n\t\tif (ctx.isIdle?.() === true && !hasPendingMessages(ctx)) {\n\t\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t\t}\n\t}\n\n\tasync dispatchPendingQueueActionIfSettled(ctx: StatusContext) {\n\t\tconst pending = this.runtime.pendingQueueAction;\n\t\tif (!pending || this.runtime.queueFrozen) return false;\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) return false;\n\t\tif (pending.kind === \"prioritize\") {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\treturn this.activatePrioritizedGoal(\n\t\t\t\tpending.objective,\n\t\t\t\tpending.tokenBudget,\n\t\t\t\tctx,\n\t\t\t\tpending.displacedUsageFinalized === true,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t!this.runtime.activeGoal ||\n\t\t\tthis.runtime.activeGoal.id !== pending.goalId ||\n\t\t\t(this.runtime.activeGoal.status !== \"complete\" && pending.reason === \"complete\")\n\t\t) {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\tif (this.runtime.activeGoal) this.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst previousText = pending.completedText;\n\t\tconst reason = pending.reason;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst next = skipQueuedGoal(this.runtime.queuedGoals);\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.activeGoal = next.goal\n\t\t\t? activateQueuedGoal(next.goal, currentTokenTotal(ctx))\n\t\t\t: undefined;\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. No goals remain.`, \"info\");\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t}\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`Goal skipped: ${previousText}. Next goal remains ${this.runtime.activeGoal.status}: ${this.runtime.activeGoal.text}`,\n\t\t\t\t\t\"info\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(`Cannot start the next /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn false;\n\t\t}\n\t\tconst activatedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tactivatedGoal.id,\n\t\t\tbuildGoalPrompt(activatedGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal?.id === activatedGoal.id) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(activatedGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(\n\t\t\t\t`Next goal paused after prompt delivery failed: ${activatedGoal.text}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t\tif (reason !== \"complete\") {\n\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. Started next goal: ${activatedGoal.text}`, \"info\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tnotifyFrozenQueue(ctx: StatusContext) {\n\t\tctx.ui.notify(\n\t\t\t\"The experimental goal queue is frozen. Re-enable experimental.goals in pi-goal.json and run /reload, or use /goal clear.\",\n\t\t\t\"warning\",\n\t\t);\n\t}\n\n\tpauseGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only active goals can be paused.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\tabortCurrentTurn(ctx);\n\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tctx.ui.notify(`Goal paused: ${this.runtime.activeGoal.text}`, \"info\");\n\t}\n\n\tasync resumeGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (!isResumableGoalStatus(this.runtime.activeGoal.status)) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only paused, blocked, usage-limited, or budget-limited goals can be resumed.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.runtime.activeGoal.tokenBudget !== undefined &&\n\t\t\tthis.runtime.activeGoal.tokensUsed >= this.runtime.activeGoal.tokenBudget\n\t\t) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot resume /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst stoppedGoal = this.runtime.activeGoal;\n\t\tconst stoppedStatus = stoppedGoal.status;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.activeGoal = transitionGoal(nextGoalInstance(this.runtime.activeGoal), \"active\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst resumedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tresumedGoal.id,\n\t\t\tbuildResumePrompt(resumedGoal, stoppedStatus),\n\t\t);\n\t\tif (!sent) {\n\t\t\tif (\n\t\t\t\tthis.runtime.activeGoal?.id === resumedGoal.id &&\n\t\t\t\tthis.runtime.activeGoal.status === \"active\"\n\t\t\t) {\n\t\t\t\tthis.runtime.activeGoal = stoppedGoal;\n\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\t`Goal resumed from ${stoppedStatusLabel(stoppedStatus)}: ${resumedGoal.text}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tclearGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\tthis.runtime.cancelContinuationWork();\n\t\t\tthis.runtime.clearGoalRecovery();\n\t\t\tthis.runtime.clearBudgetWrapUp();\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tthis.runtime.clearPersistedGoal(ctx.cwd);\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst stoppedGoal = this.runtime.activeGoal.text;\n\t\tthis.runtime.clearActiveGoal(ctx);\n\t\tctx.ui.notify(`Goal cleared: ${stoppedGoal}`, \"warning\");\n\t}\n\n\tasync editGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal. Use /goal <objective> to start one.\", \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tconst previousGoal = { ...this.runtime.activeGoal };\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tconst previousStatus = this.runtime.activeGoal.status;\n\t\tconst nextGoal = transitionGoal(\n\t\t\t{\n\t\t\t\t...nextGoalInstance(this.runtime.activeGoal),\n\t\t\t\ttext: objective,\n\t\t\t\ttokenBudget: tokenBudget ?? this.runtime.activeGoal.tokenBudget,\n\t\t\t},\n\t\t\teditedGoalStatus(previousStatus),\n\t\t);\n\t\tconst goalToolVisibilityBeforeActivation =\n\t\t\tnextGoal.status === \"active\" ? this.runtime.snapshotGoalToolVisibility() : undefined;\n\t\tif (nextGoal.status === \"active\") {\n\t\t\ttry {\n\t\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(`Cannot reactivate /goal: ${formatError(error)}`, \"error\");\n\t\t\t\tif (this.runtime.activeGoal?.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.runtime.activeGoal = nextGoal;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst editedGoal = this.runtime.activeGoal;\n\t\tif (!editedGoal) return;\n\t\tif (editedGoal.status === \"active\") {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\t\tctx,\n\t\t\t\teditedGoal.id,\n\t\t\t\tbuildObjectiveUpdatedPrompt(editedGoal),\n\t\t\t);\n\t\t\tif (!sent) {\n\t\t\t\tif (this.runtime.activeGoal?.id === editedGoal.id) {\n\t\t\t\t\tif (previousStatus === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t\tif (goalToolVisibilityBeforeActivation) {\n\t\t\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (blocksStaleGoalToolCalls(editedGoal.status)) {\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t} else {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t}\n\t\tctx.ui.notify(`Goal updated: ${objective}`, \"info\");\n\t}\n\n\tshowGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"Usage: /goal <objective>\\nNo goal is currently set.\", \"info\");\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.queueFrozen) {\n\t\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t}\n\t\tctx.ui.notify(\n\t\t\tgoalSummary(\n\t\t\t\tthis.runtime.activeGoal,\n\t\t\t\tthis.runtime.queuedGoals,\n\t\t\t\tthis.runtime.settings.experimental.goals,\n\t\t\t\tthis.runtime.queueFrozen,\n\t\t\t),\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tprivate async activatePrioritizedGoal(\n\t\tobjective: string,\n\t\ttokenBudget: number | undefined,\n\t\tctx: StatusContext,\n\t\tdisplacedUsageFinalized = false,\n\t) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn true;\n\t\t}\n\t\tif (currentGoal.status === \"active\" && !displacedUsageFinalized) {\n\t\t\tthis.runtime.recordGoalUsage(currentGoal, ctx);\n\t\t}\n\t\tconst previousGoal = { ...currentGoal };\n\t\tconst previousQueue = [...this.runtime.queuedGoals];\n\t\tconst visibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot prioritize /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (currentGoal.status === \"complete\") {\n\t\t\t\t// Completion already committed, so retain the priority intent for a\n\t\t\t\t// later /reload after the tool policy is restored.\n\t\t\t\tthis.runtime.pendingQueueAction = {\n\t\t\t\t\tkind: \"prioritize\",\n\t\t\t\t\tobjective,\n\t\t\t\t\ttokenBudget,\n\t\t\t\t\t...(displacedUsageFinalized ? { displacedUsageFinalized: true } : {}),\n\t\t\t\t};\n\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t} else {\n\t\t\t\t// Roll back an activation that never started. An active displaced goal\n\t\t\t\t// cannot continue safely without its terminal tools, so make it resumable.\n\t\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\t\tif (currentGoal.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx, true, !displacedUsageFinalized);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst prioritized = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tconst next =\n\t\t\tcurrentGoal.status === \"complete\"\n\t\t\t\t? { goal: prioritized, queue: [...this.runtime.queuedGoals] }\n\t\t\t\t: prioritizeQueuedGoal(currentGoal, this.runtime.queuedGoals, prioritized);\n\t\tthis.runtime.activeGoal = next.goal;\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tif (!this.runtime.activeGoal) return false;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tthis.runtime.activeGoal.id,\n\t\t\tbuildGoalPrompt(this.runtime.activeGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal.id === prioritized.id) {\n\t\t\tthis.runtime.queuedGoals = previousQueue;\n\t\t\tif (previousGoal.status === \"active\") {\n\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t} else {\n\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\tif (previousGoal.status === \"complete\") {\n\t\t\t\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\t\t\t} else if (blocksStaleGoalToolCalls(previousGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tthis.runtime.restoreGoalToolVisibility(visibilityBeforeActivation);\n\t\t\treturn false;\n\t\t}\n\t\tctx.ui.notify(`Goal prioritized: ${objective}`, \"info\");\n\t\treturn true;\n\t}\n}\n"]}
|
|
@@ -112,7 +112,7 @@ export class GoalCommandController {
|
|
|
112
112
|
this.runtime.pendingQueueAction = { kind: "prioritize", objective, tokenBudget };
|
|
113
113
|
this.runtime.persistGoal(this.runtime.activeGoal);
|
|
114
114
|
if (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) {
|
|
115
|
-
ctx.ui.notify(`Priority goal queued until
|
|
115
|
+
ctx.ui.notify(`Priority goal queued until lunR settles: ${objective}`, "info");
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
118
118
|
await this.dispatchPendingQueueActionIfSettled(ctx);
|
|
@@ -157,7 +157,7 @@ export class GoalCommandController {
|
|
|
157
157
|
completedText: currentGoal.text,
|
|
158
158
|
};
|
|
159
159
|
this.runtime.persistGoal(currentGoal);
|
|
160
|
-
ctx.ui.notify(`Goal skip queued until
|
|
160
|
+
ctx.ui.notify(`Goal skip queued until lunR settles: ${currentGoal.text}`, "info");
|
|
161
161
|
if (ctx.isIdle?.() === true && !hasPendingMessages(ctx)) {
|
|
162
162
|
await this.dispatchPendingQueueActionIfSettled(ctx);
|
|
163
163
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../../src/builtin-extensions/narumiruna-pi-goal/src/commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { currentTokenTotal } from \"./accounting.js\";\nimport { validateObjective } from \"./command.js\";\nimport { buildGoalPrompt, buildObjectiveUpdatedPrompt, buildResumePrompt } from \"./prompts.js\";\nimport {\n\tactivateQueuedGoal,\n\tappendGoal,\n\tcreateQueuedGoal,\n\tdropLastGoal as dropLastQueuedGoal,\n\tprioritizeGoal as prioritizeQueuedGoal,\n\tskipGoal as skipQueuedGoal,\n} from \"./queue.js\";\nimport {\n\tabortCurrentTurn,\n\tblocksStaleGoalToolCalls,\n\tcreateGoal,\n\teditedGoalStatus,\n\tformatBudget,\n\tformatError,\n\ttype GoalRuntime,\n\tgoalSummary,\n\thasPendingMessages,\n\tisResumableGoalStatus,\n\tnextGoalInstance,\n\tSTATUS_KEY,\n\ttype StatusContext,\n\tstoppedStatusLabel,\n\ttransitionGoal,\n} from \"./runtime.js\";\n\n// User-command mutations are kept separate from Pi event wiring. Every controller\n// receives exactly one per-factory GoalRuntime, preserving session isolation.\nexport class GoalCommandController {\n\tprivate readonly runtime: GoalRuntime;\n\n\tconstructor(runtime: GoalRuntime) {\n\t\tthis.runtime = runtime;\n\t}\n\n\tasync startGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingGoal =\n\t\t\tthis.runtime.activeGoal?.status !== \"complete\" ? this.runtime.activeGoal : undefined;\n\t\tconst existingQueuedGoals = [...this.runtime.queuedGoals];\n\t\tif (existingGoal) {\n\t\t\tconst shouldReplace = await ctx.ui.confirm(\n\t\t\t\t\"Replace goal?\",\n\t\t\t\t`Current goal: ${existingGoal.text}\\n\\nNew goal: ${objective}`,\n\t\t\t);\n\t\t\tif (!shouldReplace) {\n\t\t\t\tctx.ui.notify(`Goal kept: ${existingGoal.text}`, \"info\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Unlock lazy visibility only for a real activation. In always mode, a\n\t\t// missing tool means another policy or allowlist intentionally removed it.\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot start /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (existingGoal?.status === \"active\") this.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.queuedGoals = [];\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.activeGoal = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst startedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tstartedGoal.id,\n\t\t\tbuildGoalPrompt(startedGoal),\n\t\t);\n\t\tif (!sent) {\n\t\t\tlet rolledBackStartedGoal = false;\n\t\t\tif (this.runtime.activeGoal?.id === startedGoal.id) {\n\t\t\t\trolledBackStartedGoal = true;\n\t\t\t\tif (existingGoal) {\n\t\t\t\t\tthis.runtime.queuedGoals = existingQueuedGoals;\n\t\t\t\t\tthis.runtime.recordGoalUsage(existingGoal, ctx);\n\t\t\t\t\tif (existingGoal.status === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(existingGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = existingGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rolledBackStartedGoal) {\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\texistingGoal ? `Goal replaced: ${objective}` : `Goal started: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync addGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = appendGoal(\n\t\t\tthis.runtime.queuedGoals,\n\t\t\tcreateQueuedGoal(objective, tokenBudget),\n\t\t);\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tctx.ui.notify(\n\t\t\t`Goal added at position ${this.runtime.queuedGoals.length + 1}: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync prioritizeGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) {\n\t\t\tctx.ui.notify(`Priority goal queued until Pi settles: ${objective}`, \"info\");\n\t\t\treturn;\n\t\t}\n\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t}\n\n\tdropLastGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to drop.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tconst result = dropLastQueuedGoal(currentGoal, this.runtime.queuedGoals);\n\t\tif (!result.goal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? currentGoal.text}`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = result.queue;\n\t\tthis.runtime.persistGoal(result.goal);\n\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? \"unknown goal\"}`, \"warning\");\n\t}\n\n\tasync skipGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to skip.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.queuedGoals.length === 0) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal skipped: ${currentGoal.text}. No goals remain.`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (currentGoal.status === \"active\") this.runtime.recordGoalUsage(currentGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.pendingQueueAction = {\n\t\t\tkind: \"advance\",\n\t\t\tgoalId: currentGoal.id,\n\t\t\treason: \"skip\",\n\t\t\tcompletedText: currentGoal.text,\n\t\t};\n\t\tthis.runtime.persistGoal(currentGoal);\n\t\tctx.ui.notify(`Goal skip queued until Pi settles: ${currentGoal.text}`, \"info\");\n\t\tif (ctx.isIdle?.() === true && !hasPendingMessages(ctx)) {\n\t\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t\t}\n\t}\n\n\tasync dispatchPendingQueueActionIfSettled(ctx: StatusContext) {\n\t\tconst pending = this.runtime.pendingQueueAction;\n\t\tif (!pending || this.runtime.queueFrozen) return false;\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) return false;\n\t\tif (pending.kind === \"prioritize\") {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\treturn this.activatePrioritizedGoal(\n\t\t\t\tpending.objective,\n\t\t\t\tpending.tokenBudget,\n\t\t\t\tctx,\n\t\t\t\tpending.displacedUsageFinalized === true,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t!this.runtime.activeGoal ||\n\t\t\tthis.runtime.activeGoal.id !== pending.goalId ||\n\t\t\t(this.runtime.activeGoal.status !== \"complete\" && pending.reason === \"complete\")\n\t\t) {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\tif (this.runtime.activeGoal) this.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst previousText = pending.completedText;\n\t\tconst reason = pending.reason;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst next = skipQueuedGoal(this.runtime.queuedGoals);\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.activeGoal = next.goal\n\t\t\t? activateQueuedGoal(next.goal, currentTokenTotal(ctx))\n\t\t\t: undefined;\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. No goals remain.`, \"info\");\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t}\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`Goal skipped: ${previousText}. Next goal remains ${this.runtime.activeGoal.status}: ${this.runtime.activeGoal.text}`,\n\t\t\t\t\t\"info\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(`Cannot start the next /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn false;\n\t\t}\n\t\tconst activatedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tactivatedGoal.id,\n\t\t\tbuildGoalPrompt(activatedGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal?.id === activatedGoal.id) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(activatedGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(\n\t\t\t\t`Next goal paused after prompt delivery failed: ${activatedGoal.text}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t\tif (reason !== \"complete\") {\n\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. Started next goal: ${activatedGoal.text}`, \"info\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tnotifyFrozenQueue(ctx: StatusContext) {\n\t\tctx.ui.notify(\n\t\t\t\"The experimental goal queue is frozen. Re-enable experimental.goals in pi-goal.json and run /reload, or use /goal clear.\",\n\t\t\t\"warning\",\n\t\t);\n\t}\n\n\tpauseGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only active goals can be paused.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\tabortCurrentTurn(ctx);\n\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tctx.ui.notify(`Goal paused: ${this.runtime.activeGoal.text}`, \"info\");\n\t}\n\n\tasync resumeGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (!isResumableGoalStatus(this.runtime.activeGoal.status)) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only paused, blocked, usage-limited, or budget-limited goals can be resumed.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.runtime.activeGoal.tokenBudget !== undefined &&\n\t\t\tthis.runtime.activeGoal.tokensUsed >= this.runtime.activeGoal.tokenBudget\n\t\t) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot resume /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst stoppedGoal = this.runtime.activeGoal;\n\t\tconst stoppedStatus = stoppedGoal.status;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.activeGoal = transitionGoal(nextGoalInstance(this.runtime.activeGoal), \"active\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst resumedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tresumedGoal.id,\n\t\t\tbuildResumePrompt(resumedGoal, stoppedStatus),\n\t\t);\n\t\tif (!sent) {\n\t\t\tif (\n\t\t\t\tthis.runtime.activeGoal?.id === resumedGoal.id &&\n\t\t\t\tthis.runtime.activeGoal.status === \"active\"\n\t\t\t) {\n\t\t\t\tthis.runtime.activeGoal = stoppedGoal;\n\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\t`Goal resumed from ${stoppedStatusLabel(stoppedStatus)}: ${resumedGoal.text}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tclearGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\tthis.runtime.cancelContinuationWork();\n\t\t\tthis.runtime.clearGoalRecovery();\n\t\t\tthis.runtime.clearBudgetWrapUp();\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tthis.runtime.clearPersistedGoal(ctx.cwd);\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst stoppedGoal = this.runtime.activeGoal.text;\n\t\tthis.runtime.clearActiveGoal(ctx);\n\t\tctx.ui.notify(`Goal cleared: ${stoppedGoal}`, \"warning\");\n\t}\n\n\tasync editGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal. Use /goal <objective> to start one.\", \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tconst previousGoal = { ...this.runtime.activeGoal };\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tconst previousStatus = this.runtime.activeGoal.status;\n\t\tconst nextGoal = transitionGoal(\n\t\t\t{\n\t\t\t\t...nextGoalInstance(this.runtime.activeGoal),\n\t\t\t\ttext: objective,\n\t\t\t\ttokenBudget: tokenBudget ?? this.runtime.activeGoal.tokenBudget,\n\t\t\t},\n\t\t\teditedGoalStatus(previousStatus),\n\t\t);\n\t\tconst goalToolVisibilityBeforeActivation =\n\t\t\tnextGoal.status === \"active\" ? this.runtime.snapshotGoalToolVisibility() : undefined;\n\t\tif (nextGoal.status === \"active\") {\n\t\t\ttry {\n\t\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(`Cannot reactivate /goal: ${formatError(error)}`, \"error\");\n\t\t\t\tif (this.runtime.activeGoal?.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.runtime.activeGoal = nextGoal;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst editedGoal = this.runtime.activeGoal;\n\t\tif (!editedGoal) return;\n\t\tif (editedGoal.status === \"active\") {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\t\tctx,\n\t\t\t\teditedGoal.id,\n\t\t\t\tbuildObjectiveUpdatedPrompt(editedGoal),\n\t\t\t);\n\t\t\tif (!sent) {\n\t\t\t\tif (this.runtime.activeGoal?.id === editedGoal.id) {\n\t\t\t\t\tif (previousStatus === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t\tif (goalToolVisibilityBeforeActivation) {\n\t\t\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (blocksStaleGoalToolCalls(editedGoal.status)) {\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t} else {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t}\n\t\tctx.ui.notify(`Goal updated: ${objective}`, \"info\");\n\t}\n\n\tshowGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"Usage: /goal <objective>\\nNo goal is currently set.\", \"info\");\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.queueFrozen) {\n\t\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t}\n\t\tctx.ui.notify(\n\t\t\tgoalSummary(\n\t\t\t\tthis.runtime.activeGoal,\n\t\t\t\tthis.runtime.queuedGoals,\n\t\t\t\tthis.runtime.settings.experimental.goals,\n\t\t\t\tthis.runtime.queueFrozen,\n\t\t\t),\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tprivate async activatePrioritizedGoal(\n\t\tobjective: string,\n\t\ttokenBudget: number | undefined,\n\t\tctx: StatusContext,\n\t\tdisplacedUsageFinalized = false,\n\t) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn true;\n\t\t}\n\t\tif (currentGoal.status === \"active\" && !displacedUsageFinalized) {\n\t\t\tthis.runtime.recordGoalUsage(currentGoal, ctx);\n\t\t}\n\t\tconst previousGoal = { ...currentGoal };\n\t\tconst previousQueue = [...this.runtime.queuedGoals];\n\t\tconst visibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot prioritize /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (currentGoal.status === \"complete\") {\n\t\t\t\t// Completion already committed, so retain the priority intent for a\n\t\t\t\t// later /reload after the tool policy is restored.\n\t\t\t\tthis.runtime.pendingQueueAction = {\n\t\t\t\t\tkind: \"prioritize\",\n\t\t\t\t\tobjective,\n\t\t\t\t\ttokenBudget,\n\t\t\t\t\t...(displacedUsageFinalized ? { displacedUsageFinalized: true } : {}),\n\t\t\t\t};\n\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t} else {\n\t\t\t\t// Roll back an activation that never started. An active displaced goal\n\t\t\t\t// cannot continue safely without its terminal tools, so make it resumable.\n\t\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\t\tif (currentGoal.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx, true, !displacedUsageFinalized);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst prioritized = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tconst next =\n\t\t\tcurrentGoal.status === \"complete\"\n\t\t\t\t? { goal: prioritized, queue: [...this.runtime.queuedGoals] }\n\t\t\t\t: prioritizeQueuedGoal(currentGoal, this.runtime.queuedGoals, prioritized);\n\t\tthis.runtime.activeGoal = next.goal;\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tif (!this.runtime.activeGoal) return false;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tthis.runtime.activeGoal.id,\n\t\t\tbuildGoalPrompt(this.runtime.activeGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal.id === prioritized.id) {\n\t\t\tthis.runtime.queuedGoals = previousQueue;\n\t\t\tif (previousGoal.status === \"active\") {\n\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t} else {\n\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\tif (previousGoal.status === \"complete\") {\n\t\t\t\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\t\t\t} else if (blocksStaleGoalToolCalls(previousGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tthis.runtime.restoreGoalToolVisibility(visibilityBeforeActivation);\n\t\t\treturn false;\n\t\t}\n\t\tctx.ui.notify(`Goal prioritized: ${objective}`, \"info\");\n\t\treturn true;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../../src/builtin-extensions/narumiruna-pi-goal/src/commands.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { currentTokenTotal } from \"./accounting.js\";\nimport { validateObjective } from \"./command.js\";\nimport { buildGoalPrompt, buildObjectiveUpdatedPrompt, buildResumePrompt } from \"./prompts.js\";\nimport {\n\tactivateQueuedGoal,\n\tappendGoal,\n\tcreateQueuedGoal,\n\tdropLastGoal as dropLastQueuedGoal,\n\tprioritizeGoal as prioritizeQueuedGoal,\n\tskipGoal as skipQueuedGoal,\n} from \"./queue.js\";\nimport {\n\tabortCurrentTurn,\n\tblocksStaleGoalToolCalls,\n\tcreateGoal,\n\teditedGoalStatus,\n\tformatBudget,\n\tformatError,\n\ttype GoalRuntime,\n\tgoalSummary,\n\thasPendingMessages,\n\tisResumableGoalStatus,\n\tnextGoalInstance,\n\tSTATUS_KEY,\n\ttype StatusContext,\n\tstoppedStatusLabel,\n\ttransitionGoal,\n} from \"./runtime.js\";\n\n// User-command mutations are kept separate from Pi event wiring. Every controller\n// receives exactly one per-factory GoalRuntime, preserving session isolation.\nexport class GoalCommandController {\n\tprivate readonly runtime: GoalRuntime;\n\n\tconstructor(runtime: GoalRuntime) {\n\t\tthis.runtime = runtime;\n\t}\n\n\tasync startGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingGoal =\n\t\t\tthis.runtime.activeGoal?.status !== \"complete\" ? this.runtime.activeGoal : undefined;\n\t\tconst existingQueuedGoals = [...this.runtime.queuedGoals];\n\t\tif (existingGoal) {\n\t\t\tconst shouldReplace = await ctx.ui.confirm(\n\t\t\t\t\"Replace goal?\",\n\t\t\t\t`Current goal: ${existingGoal.text}\\n\\nNew goal: ${objective}`,\n\t\t\t);\n\t\t\tif (!shouldReplace) {\n\t\t\t\tctx.ui.notify(`Goal kept: ${existingGoal.text}`, \"info\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Unlock lazy visibility only for a real activation. In always mode, a\n\t\t// missing tool means another policy or allowlist intentionally removed it.\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot start /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (existingGoal?.status === \"active\") this.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.queuedGoals = [];\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.activeGoal = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst startedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tstartedGoal.id,\n\t\t\tbuildGoalPrompt(startedGoal),\n\t\t);\n\t\tif (!sent) {\n\t\t\tlet rolledBackStartedGoal = false;\n\t\t\tif (this.runtime.activeGoal?.id === startedGoal.id) {\n\t\t\t\trolledBackStartedGoal = true;\n\t\t\t\tif (existingGoal) {\n\t\t\t\t\tthis.runtime.queuedGoals = existingQueuedGoals;\n\t\t\t\t\tthis.runtime.recordGoalUsage(existingGoal, ctx);\n\t\t\t\t\tif (existingGoal.status === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(existingGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = existingGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rolledBackStartedGoal) {\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\texistingGoal ? `Goal replaced: ${objective}` : `Goal started: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync addGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = appendGoal(\n\t\t\tthis.runtime.queuedGoals,\n\t\t\tcreateQueuedGoal(objective, tokenBudget),\n\t\t);\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tctx.ui.notify(\n\t\t\t`Goal added at position ${this.runtime.queuedGoals.length + 1}: ${objective}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tasync prioritizeGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) {\n\t\t\tctx.ui.notify(`Priority goal queued until lunR settles: ${objective}`, \"info\");\n\t\t\treturn;\n\t\t}\n\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t}\n\n\tdropLastGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to drop.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tconst result = dropLastQueuedGoal(currentGoal, this.runtime.queuedGoals);\n\t\tif (!result.goal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? currentGoal.text}`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.queuedGoals = result.queue;\n\t\tthis.runtime.persistGoal(result.goal);\n\t\tctx.ui.notify(`Goal dropped: ${result.removed?.text ?? \"unknown goal\"}`, \"warning\");\n\t}\n\n\tasync skipGoal(ctx: StatusContext) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tctx.ui.notify(\"No goals to skip.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.queuedGoals.length === 0) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tctx.ui.notify(`Goal skipped: ${currentGoal.text}. No goals remain.`, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (currentGoal.status === \"active\") this.runtime.recordGoalUsage(currentGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.pendingQueueAction = {\n\t\t\tkind: \"advance\",\n\t\t\tgoalId: currentGoal.id,\n\t\t\treason: \"skip\",\n\t\t\tcompletedText: currentGoal.text,\n\t\t};\n\t\tthis.runtime.persistGoal(currentGoal);\n\t\tctx.ui.notify(`Goal skip queued until lunR settles: ${currentGoal.text}`, \"info\");\n\t\tif (ctx.isIdle?.() === true && !hasPendingMessages(ctx)) {\n\t\t\tawait this.dispatchPendingQueueActionIfSettled(ctx);\n\t\t}\n\t}\n\n\tasync dispatchPendingQueueActionIfSettled(ctx: StatusContext) {\n\t\tconst pending = this.runtime.pendingQueueAction;\n\t\tif (!pending || this.runtime.queueFrozen) return false;\n\t\tif (ctx.isIdle?.() !== true || hasPendingMessages(ctx)) return false;\n\t\tif (pending.kind === \"prioritize\") {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\treturn this.activatePrioritizedGoal(\n\t\t\t\tpending.objective,\n\t\t\t\tpending.tokenBudget,\n\t\t\t\tctx,\n\t\t\t\tpending.displacedUsageFinalized === true,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t!this.runtime.activeGoal ||\n\t\t\tthis.runtime.activeGoal.id !== pending.goalId ||\n\t\t\t(this.runtime.activeGoal.status !== \"complete\" && pending.reason === \"complete\")\n\t\t) {\n\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\tif (this.runtime.activeGoal) this.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst previousText = pending.completedText;\n\t\tconst reason = pending.reason;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst next = skipQueuedGoal(this.runtime.queuedGoals);\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.activeGoal = next.goal\n\t\t\t? activateQueuedGoal(next.goal, currentTokenTotal(ctx))\n\t\t\t: undefined;\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tthis.runtime.clearActiveGoal(ctx);\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. No goals remain.`, \"info\");\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t}\n\t\t\tif (reason !== \"complete\") {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`Goal skipped: ${previousText}. Next goal remains ${this.runtime.activeGoal.status}: ${this.runtime.activeGoal.text}`,\n\t\t\t\t\t\"info\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(`Cannot start the next /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn false;\n\t\t}\n\t\tconst activatedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tactivatedGoal.id,\n\t\t\tbuildGoalPrompt(activatedGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal?.id === activatedGoal.id) {\n\t\t\tthis.runtime.activeGoal = transitionGoal(activatedGoal, \"paused\");\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tctx.ui.notify(\n\t\t\t\t`Next goal paused after prompt delivery failed: ${activatedGoal.text}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t\tif (reason !== \"complete\") {\n\t\t\tctx.ui.notify(`Goal skipped: ${previousText}. Started next goal: ${activatedGoal.text}`, \"info\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tnotifyFrozenQueue(ctx: StatusContext) {\n\t\tctx.ui.notify(\n\t\t\t\"The experimental goal queue is frozen. Re-enable experimental.goals in pi-goal.json and run /reload, or use /goal clear.\",\n\t\t\t\"warning\",\n\t\t);\n\t}\n\n\tpauseGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only active goals can be paused.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\tabortCurrentTurn(ctx);\n\t\tthis.runtime.activeGoal = transitionGoal(this.runtime.activeGoal, \"paused\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tctx.ui.notify(`Goal paused: ${this.runtime.activeGoal.text}`, \"info\");\n\t}\n\n\tasync resumeGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\treturn;\n\t\t}\n\t\tif (!isResumableGoalStatus(this.runtime.activeGoal.status)) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal is ${this.runtime.activeGoal.status}; only paused, blocked, usage-limited, or budget-limited goals can be resumed.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.runtime.activeGoal.tokenBudget !== undefined &&\n\t\t\tthis.runtime.activeGoal.tokensUsed >= this.runtime.activeGoal.tokenBudget\n\t\t) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst goalToolVisibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot resume /goal: ${formatError(error)}`, \"error\");\n\t\t\treturn;\n\t\t}\n\t\tconst stoppedGoal = this.runtime.activeGoal;\n\t\tconst stoppedStatus = stoppedGoal.status;\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tthis.runtime.activeGoal = transitionGoal(nextGoalInstance(this.runtime.activeGoal), \"active\");\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tif (this.runtime.activeGoal.status !== \"active\") {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Goal token budget is still reached: ${formatBudget(this.runtime.activeGoal)}`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst resumedGoal = this.runtime.activeGoal;\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tresumedGoal.id,\n\t\t\tbuildResumePrompt(resumedGoal, stoppedStatus),\n\t\t);\n\t\tif (!sent) {\n\t\t\tif (\n\t\t\t\tthis.runtime.activeGoal?.id === resumedGoal.id &&\n\t\t\t\tthis.runtime.activeGoal.status === \"active\"\n\t\t\t) {\n\t\t\t\tthis.runtime.activeGoal = stoppedGoal;\n\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.notify(\n\t\t\t`Goal resumed from ${stoppedStatusLabel(stoppedStatus)}: ${resumedGoal.text}`,\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tclearGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal.\", \"info\");\n\t\t\tthis.runtime.cancelContinuationWork();\n\t\t\tthis.runtime.clearGoalRecovery();\n\t\t\tthis.runtime.clearBudgetWrapUp();\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tthis.runtime.clearPersistedGoal(ctx.cwd);\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst stoppedGoal = this.runtime.activeGoal.text;\n\t\tthis.runtime.clearActiveGoal(ctx);\n\t\tctx.ui.notify(`Goal cleared: ${stoppedGoal}`, \"warning\");\n\t}\n\n\tasync editGoal(objective: string, tokenBudget: number | undefined, ctx: StatusContext) {\n\t\tconst validationError = validateObjective(objective);\n\t\tif (validationError) {\n\t\t\tctx.ui.notify(validationError, \"warning\");\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"No active goal. Use /goal <objective> to start one.\", \"warning\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\tconst previousGoal = { ...this.runtime.activeGoal };\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tconst previousStatus = this.runtime.activeGoal.status;\n\t\tconst nextGoal = transitionGoal(\n\t\t\t{\n\t\t\t\t...nextGoalInstance(this.runtime.activeGoal),\n\t\t\t\ttext: objective,\n\t\t\t\ttokenBudget: tokenBudget ?? this.runtime.activeGoal.tokenBudget,\n\t\t\t},\n\t\t\teditedGoalStatus(previousStatus),\n\t\t);\n\t\tconst goalToolVisibilityBeforeActivation =\n\t\t\tnextGoal.status === \"active\" ? this.runtime.snapshotGoalToolVisibility() : undefined;\n\t\tif (nextGoal.status === \"active\") {\n\t\t\ttry {\n\t\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(`Cannot reactivate /goal: ${formatError(error)}`, \"error\");\n\t\t\t\tif (this.runtime.activeGoal?.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.runtime.activeGoal = nextGoal;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst editedGoal = this.runtime.activeGoal;\n\t\tif (!editedGoal) return;\n\t\tif (editedGoal.status === \"active\") {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\t\tctx,\n\t\t\t\teditedGoal.id,\n\t\t\t\tbuildObjectiveUpdatedPrompt(editedGoal),\n\t\t\t);\n\t\t\tif (!sent) {\n\t\t\t\tif (this.runtime.activeGoal?.id === editedGoal.id) {\n\t\t\t\t\tif (previousStatus === \"active\") {\n\t\t\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\t\t\tif (blocksStaleGoalToolCalls(this.runtime.activeGoal.status)) {\n\t\t\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\t\t\tif (goalToolVisibilityBeforeActivation) {\n\t\t\t\t\t\tthis.runtime.restoreGoalToolVisibility(goalToolVisibilityBeforeActivation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (blocksStaleGoalToolCalls(editedGoal.status)) {\n\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t} else {\n\t\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\t}\n\t\tctx.ui.notify(`Goal updated: ${objective}`, \"info\");\n\t}\n\n\tshowGoal(ctx: StatusContext) {\n\t\tif (!this.runtime.activeGoal) {\n\t\t\tctx.ui.notify(\"Usage: /goal <objective>\\nNo goal is currently set.\", \"info\");\n\t\t\tctx.ui.setStatus(STATUS_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\t\tif (!this.runtime.queueFrozen) {\n\t\t\tthis.runtime.recordGoalUsage(this.runtime.activeGoal, ctx);\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t}\n\t\tctx.ui.notify(\n\t\t\tgoalSummary(\n\t\t\t\tthis.runtime.activeGoal,\n\t\t\t\tthis.runtime.queuedGoals,\n\t\t\t\tthis.runtime.settings.experimental.goals,\n\t\t\t\tthis.runtime.queueFrozen,\n\t\t\t),\n\t\t\t\"info\",\n\t\t);\n\t}\n\n\tprivate async activatePrioritizedGoal(\n\t\tobjective: string,\n\t\ttokenBudget: number | undefined,\n\t\tctx: StatusContext,\n\t\tdisplacedUsageFinalized = false,\n\t) {\n\t\tconst currentGoal = this.runtime.activeGoal;\n\t\tif (!currentGoal) {\n\t\t\tawait this.startGoal(objective, tokenBudget, ctx);\n\t\t\treturn true;\n\t\t}\n\t\tif (currentGoal.status === \"active\" && !displacedUsageFinalized) {\n\t\t\tthis.runtime.recordGoalUsage(currentGoal, ctx);\n\t\t}\n\t\tconst previousGoal = { ...currentGoal };\n\t\tconst previousQueue = [...this.runtime.queuedGoals];\n\t\tconst visibilityBeforeActivation = this.runtime.snapshotGoalToolVisibility();\n\t\ttry {\n\t\t\tthis.runtime.prepareGoalToolsForActivation(ctx);\n\t\t} catch (error) {\n\t\t\tctx.ui.notify(`Cannot prioritize /goal: ${formatError(error)}`, \"error\");\n\t\t\tif (currentGoal.status === \"complete\") {\n\t\t\t\t// Completion already committed, so retain the priority intent for a\n\t\t\t\t// later /reload after the tool policy is restored.\n\t\t\t\tthis.runtime.pendingQueueAction = {\n\t\t\t\t\tkind: \"prioritize\",\n\t\t\t\t\tobjective,\n\t\t\t\t\ttokenBudget,\n\t\t\t\t\t...(displacedUsageFinalized ? { displacedUsageFinalized: true } : {}),\n\t\t\t\t};\n\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t} else {\n\t\t\t\t// Roll back an activation that never started. An active displaced goal\n\t\t\t\t// cannot continue safely without its terminal tools, so make it resumable.\n\t\t\t\tthis.runtime.pendingQueueAction = undefined;\n\t\t\t\tif (currentGoal.status === \"active\") {\n\t\t\t\t\tthis.runtime.pauseGoalForUnavailableTools(ctx, true, !displacedUsageFinalized);\n\t\t\t\t} else {\n\t\t\t\t\tthis.runtime.persistGoal(currentGoal);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.runtime.cancelContinuationWork();\n\t\tthis.runtime.clearGoalRecovery();\n\t\tthis.runtime.clearBudgetWrapUp();\n\t\tthis.runtime.clearStaleGoalToolCallBlock();\n\t\tconst prioritized = createGoal(objective, tokenBudget, currentTokenTotal(ctx));\n\t\tconst next =\n\t\t\tcurrentGoal.status === \"complete\"\n\t\t\t\t? { goal: prioritized, queue: [...this.runtime.queuedGoals] }\n\t\t\t\t: prioritizeQueuedGoal(currentGoal, this.runtime.queuedGoals, prioritized);\n\t\tthis.runtime.activeGoal = next.goal;\n\t\tthis.runtime.queuedGoals = next.queue;\n\t\tthis.runtime.pendingQueueAction = undefined;\n\t\tif (!this.runtime.activeGoal) return false;\n\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\tconst sent = await this.runtime.sendOwnedGoalPrompt(\n\t\t\tctx,\n\t\t\tthis.runtime.activeGoal.id,\n\t\t\tbuildGoalPrompt(this.runtime.activeGoal),\n\t\t);\n\t\tif (!sent && this.runtime.activeGoal.id === prioritized.id) {\n\t\t\tthis.runtime.queuedGoals = previousQueue;\n\t\t\tif (previousGoal.status === \"active\") {\n\t\t\t\tabortCurrentTurn(ctx);\n\t\t\t\tthis.runtime.activeGoal = transitionGoal(previousGoal, \"paused\");\n\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t} else {\n\t\t\t\tthis.runtime.activeGoal = previousGoal;\n\t\t\t\tif (previousGoal.status === \"complete\") {\n\t\t\t\t\tthis.runtime.pendingQueueAction = { kind: \"prioritize\", objective, tokenBudget };\n\t\t\t\t} else if (blocksStaleGoalToolCalls(previousGoal.status)) {\n\t\t\t\t\tthis.runtime.blockStaleGoalToolCalls();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.runtime.persistGoal(this.runtime.activeGoal);\n\t\t\tthis.runtime.updateStatus(ctx, this.runtime.activeGoal);\n\t\t\tthis.runtime.restoreGoalToolVisibility(visibilityBeforeActivation);\n\t\t\treturn false;\n\t\t}\n\t\tctx.ui.notify(`Goal prioritized: ${objective}`, \"info\");\n\t\treturn true;\n\t}\n}\n"]}
|