@bastani/atomic 0.9.5-alpha.8 → 0.9.5
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 +122 -0
- package/README.md +2 -2
- package/dist/builtin/cursor/CHANGELOG.md +12 -0
- package/dist/builtin/cursor/package.json +3 -3
- package/dist/builtin/cursor/src/model-mapper.ts +6 -3
- package/dist/builtin/intercom/CHANGELOG.md +37 -0
- package/dist/builtin/intercom/README.md +4 -2
- package/dist/builtin/intercom/broker/broker.ts +6 -114
- package/dist/builtin/intercom/broker/client.ts +29 -54
- package/dist/builtin/intercom/broker/delivered-message-cache.ts +44 -0
- package/dist/builtin/intercom/broker/pending-send-registry.ts +142 -0
- package/dist/builtin/intercom/broker/send-handler.ts +106 -0
- package/dist/builtin/intercom/broker/send-signature.ts +37 -0
- package/dist/builtin/intercom/foreground-detach-handoff.ts +136 -0
- package/dist/builtin/intercom/index-heavy.ts +49 -53
- package/dist/builtin/intercom/index.ts +278 -262
- package/dist/builtin/intercom/lazy-heavy-proxy.ts +114 -0
- package/dist/builtin/intercom/lazy-subagent-ack.ts +20 -0
- package/dist/builtin/intercom/lazy-tool-execution.ts +39 -0
- package/dist/builtin/intercom/lifecycle-lease.ts +51 -0
- package/dist/builtin/intercom/lifecycle.ts +37 -20
- package/dist/builtin/intercom/package.json +3 -6
- package/dist/builtin/intercom/reply-routing.ts +17 -0
- package/dist/builtin/intercom/subagent-relay.ts +58 -12
- package/dist/builtin/intercom/types.ts +3 -3
- package/dist/builtin/mcp/CHANGELOG.md +38 -0
- package/dist/builtin/mcp/OAUTH.md +1 -0
- package/dist/builtin/mcp/README.md +10 -6
- package/dist/builtin/mcp/apps-cancellation.ts +32 -0
- package/dist/builtin/mcp/call-tool-result.ts +9 -0
- package/dist/builtin/mcp/caller-wait.ts +50 -0
- package/dist/builtin/mcp/command-registration.ts +82 -0
- package/dist/builtin/mcp/direct-tool-executor.ts +279 -0
- package/dist/builtin/mcp/direct-tools.ts +40 -255
- package/dist/builtin/mcp/host-html-template.ts +4 -2
- package/dist/builtin/mcp/index.ts +274 -239
- package/dist/builtin/mcp/init.ts +96 -126
- package/dist/builtin/mcp/mcp-auth-flow.ts +247 -237
- package/dist/builtin/mcp/mcp-callback-server.ts +89 -68
- package/dist/builtin/mcp/mcp-oauth-provider.ts +23 -1
- package/dist/builtin/mcp/metadata-hydration.ts +52 -0
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/mcp/proxy-auth.ts +4 -4
- package/dist/builtin/mcp/proxy-call.ts +111 -40
- package/dist/builtin/mcp/proxy-connect.ts +35 -15
- package/dist/builtin/mcp/proxy-info-modes.ts +106 -23
- package/dist/builtin/mcp/proxy-modes.ts +3 -3
- package/dist/builtin/mcp/session-cleanup-barrier.ts +43 -0
- package/dist/builtin/mcp/startup-warmup.ts +98 -0
- package/dist/builtin/mcp/state-lease.ts +12 -0
- package/dist/builtin/mcp/tool-result-renderer.ts +3 -3
- package/dist/builtin/mcp/ui-server.ts +8 -8
- package/dist/builtin/mcp/ui-session.ts +9 -18
- package/dist/builtin/subagents/CHANGELOG.md +78 -0
- package/dist/builtin/subagents/README.md +30 -29
- package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
- package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
- package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
- package/dist/builtin/subagents/agents/debugger.md +2 -2
- package/dist/builtin/subagents/agents/worker.md +2 -2
- package/dist/builtin/subagents/package.json +5 -5
- package/dist/builtin/subagents/prompts/review-loop.md +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +37 -36
- package/dist/builtin/subagents/src/extension/api-lifecycle.ts +64 -0
- package/dist/builtin/subagents/src/extension/fanout-child.ts +44 -51
- package/dist/builtin/subagents/src/extension/index.ts +289 -320
- package/dist/builtin/subagents/src/extension/prompt-guidance.ts +7 -10
- package/dist/builtin/subagents/src/extension/schemas.ts +22 -5
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +89 -0
- package/dist/builtin/subagents/src/extension/tool-description.ts +29 -0
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +13 -2
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +4 -4
- package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +106 -0
- package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +26 -20
- package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +13 -2
- package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +3 -0
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +1 -1
- package/dist/builtin/subagents/src/runs/background/completion-claims.ts +189 -0
- package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +44 -7
- package/dist/builtin/subagents/src/runs/background/completion-notification.ts +34 -0
- package/dist/builtin/subagents/src/runs/background/notify.ts +72 -22
- package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +232 -0
- package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +151 -0
- package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +72 -0
- package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +48 -0
- package/dist/builtin/subagents/src/runs/background/result-status.ts +81 -0
- package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +59 -0
- package/dist/builtin/subagents/src/runs/background/result-watcher.ts +177 -233
- package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +3 -2
- package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +73 -14
- package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +29 -15
- package/dist/builtin/subagents/src/runs/background/top-level-async.ts +1 -2
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +7 -9
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +3 -13
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +2 -15
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +63 -46
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +48 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +17 -0
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +39 -26
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +3 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +3 -51
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +6 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +11 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +5 -112
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +68 -118
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +79 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +3 -0
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +2 -2
- package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +55 -12
- package/dist/builtin/subagents/src/shared/artifacts.ts +22 -11
- package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +294 -0
- package/dist/builtin/subagents/src/shared/exclusive-file-publication.ts +44 -0
- package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -0
- package/dist/builtin/subagents/src/shared/model-info.ts +2 -2
- package/dist/builtin/subagents/src/shared/settings.ts +20 -10
- package/dist/builtin/subagents/src/shared/types-async.ts +3 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +2 -0
- package/dist/builtin/subagents/src/shared/types-runtime.ts +3 -2
- package/dist/builtin/subagents/src/slash/slash-commands.ts +9 -12
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +63 -32
- package/dist/builtin/subagents/src/tui/render-result.ts +7 -0
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -0
- package/dist/builtin/subagents/src/tui/render-widget.ts +157 -89
- package/dist/builtin/web-access/CHANGELOG.md +28 -0
- package/dist/builtin/web-access/README.md +4 -0
- package/dist/builtin/web-access/content-tools.ts +8 -3
- package/dist/builtin/web-access/index-heavy.ts +1 -1
- package/dist/builtin/web-access/index.ts +190 -46
- package/dist/builtin/web-access/lifecycle-lease.ts +38 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/web-access/result-renderers.ts +1 -1
- package/dist/builtin/web-access/summary-review.ts +1 -1
- package/dist/builtin/web-access/web-search-activity.ts +1 -1
- package/dist/builtin/web-access/web-search-return.ts +7 -0
- package/dist/builtin/web-access/web-search-summary.ts +1 -1
- package/dist/builtin/web-access/web-search-tool.ts +4 -2
- package/dist/builtin/workflows/CHANGELOG.md +86 -0
- package/dist/builtin/workflows/README.md +5 -5
- package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +27 -4
- package/dist/builtin/workflows/builtin/goal-runner.ts +86 -27
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +10 -0
- package/dist/builtin/workflows/builtin/ralph-core.ts +9 -9
- package/dist/builtin/workflows/builtin/ralph-models.ts +71 -36
- package/dist/builtin/workflows/builtin/ralph-runner.ts +20 -31
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +16 -13
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +58 -0
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +40 -0
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +2 -0
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -0
- package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +139 -0
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +69 -62
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +21 -7
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +92 -0
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +29 -7
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +45 -0
- package/dist/builtin/workflows/skills/impeccable/reference/layout.md +25 -1
- package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +23 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +2 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +75 -14
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +31 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +64 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +118 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +16 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +66 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +42 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +4 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +660 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +516 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +1764 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +61 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +4 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +13 -16
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +17 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +104 -37
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +9 -0
- package/dist/builtin/workflows/src/durable/backend.ts +12 -0
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +17 -1
- package/dist/builtin/workflows/src/durable/resume-catalog.ts +12 -0
- package/dist/builtin/workflows/src/durable/resume-runtime.ts +5 -2
- package/dist/builtin/workflows/src/durable/stage-primitive.ts +2 -1
- package/dist/builtin/workflows/src/durable/types.ts +16 -0
- package/dist/builtin/workflows/src/engine/primitives/task.ts +3 -1
- package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +1 -2
- package/dist/builtin/workflows/src/engine/run-returned-status.ts +50 -16
- package/dist/builtin/workflows/src/engine/run.ts +20 -19
- package/dist/builtin/workflows/src/engine/runtime.ts +5 -0
- package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +9 -2
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +137 -27
- package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +22 -6
- package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
- package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +13 -1
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +19 -4
- package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +9 -0
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +17 -22
- package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +48 -23
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +15 -2
- package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +20 -8
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +24 -8
- package/dist/builtin/workflows/src/runs/background/status.ts +4 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +29 -8
- package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +3 -2
- package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +1 -1
- package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +155 -20
- package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +6 -0
- package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -2
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +2 -2
- package/dist/builtin/workflows/src/shared/resume-continuation.ts +2 -0
- package/dist/builtin/workflows/src/shared/returned-run-status.ts +116 -0
- package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +2 -0
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +21 -3
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +3 -0
- package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +1 -23
- package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +54 -9
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +5 -2
- package/dist/builtin/workflows/src/tui/status-list.ts +22 -15
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +4 -4
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts +23 -3
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +129 -17
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +9 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js +1 -1
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +6 -3
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +2 -2
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +1 -1
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +3 -2
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +4 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +4 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/anthropic-thinking-guard.d.ts +5 -5
- package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
- package/dist/core/anthropic-thinking-guard.js +42 -32
- package/dist/core/anthropic-thinking-guard.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +15 -15
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +14 -9
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +79 -46
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/context-assistant-turns.d.ts +42 -0
- package/dist/core/compaction/context-assistant-turns.d.ts.map +1 -0
- package/dist/core/compaction/context-assistant-turns.js +87 -0
- package/dist/core/compaction/context-assistant-turns.js.map +1 -0
- package/dist/core/compaction/context-compaction-critical.d.ts +1 -1
- package/dist/core/compaction/context-compaction-critical.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-critical.js +2 -2
- package/dist/core/compaction/context-compaction-critical.js.map +1 -1
- package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +18 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.js +186 -0
- package/dist/core/compaction/context-compaction-eviction-alternates.js.map +1 -0
- package/dist/core/compaction/context-compaction-eviction.d.ts +10 -2
- package/dist/core/compaction/context-compaction-eviction.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-eviction.js +196 -146
- package/dist/core/compaction/context-compaction-eviction.js.map +1 -1
- package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-prompt.js +1 -1
- package/dist/core/compaction/context-compaction-prompt.js.map +1 -1
- package/dist/core/compaction/context-compaction-types.d.ts +2 -0
- package/dist/core/compaction/context-compaction-types.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-types.js.map +1 -1
- package/dist/core/compaction/context-deletion-application.d.ts +5 -4
- package/dist/core/compaction/context-deletion-application.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-application.js +17 -15
- package/dist/core/compaction/context-deletion-application.js.map +1 -1
- package/dist/core/compaction/context-deletion-store.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-store.js +1 -1
- package/dist/core/compaction/context-deletion-store.js.map +1 -1
- package/dist/core/compaction/context-deletion-targets.d.ts +2 -1
- package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-targets.js +36 -31
- package/dist/core/compaction/context-deletion-targets.js.map +1 -1
- package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -1
- package/dist/core/compaction/context-deletion-tool-helpers.js +116 -43
- package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.d.ts +1 -2
- package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -1
- package/dist/core/compaction/context-transcript-analysis.js +33 -37
- package/dist/core/compaction/context-transcript-analysis.js.map +1 -1
- package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
- package/dist/core/copilot-model-synthesis.js +3 -1
- package/dist/core/copilot-model-synthesis.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +8 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +2 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +2 -7
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +6 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +72 -29
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/messages.d.ts +9 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +100 -18
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry-builtins.d.ts.map +1 -1
- package/dist/core/model-registry-builtins.js +5 -0
- package/dist/core/model-registry-builtins.js.map +1 -1
- package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
- package/dist/core/model-registry-custom-loader.js +49 -8
- package/dist/core/model-registry-custom-loader.js.map +1 -1
- package/dist/core/model-registry-dynamic.d.ts.map +1 -1
- package/dist/core/model-registry-dynamic.js +11 -5
- package/dist/core/model-registry-dynamic.js.map +1 -1
- package/dist/core/model-registry-loader.d.ts.map +1 -1
- package/dist/core/model-registry-loader.js +8 -0
- package/dist/core/model-registry-loader.js.map +1 -1
- package/dist/core/model-registry-schemas.d.ts +93 -8
- package/dist/core/model-registry-schemas.d.ts.map +1 -1
- package/dist/core/model-registry-schemas.js +24 -12
- package/dist/core/model-registry-schemas.js.map +1 -1
- package/dist/core/model-registry-types.d.ts +7 -6
- package/dist/core/model-registry-types.d.ts.map +1 -1
- package/dist/core/model-registry-types.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +23 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts.map +1 -1
- package/dist/core/model-resolver-cli.js +33 -5
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +6 -1
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js +12 -7
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts +1 -0
- package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.js +24 -9
- package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
- package/dist/core/resource-loader-context-files.d.ts +1 -0
- package/dist/core/resource-loader-context-files.d.ts.map +1 -1
- package/dist/core/resource-loader-context-files.js +13 -10
- package/dist/core/resource-loader-context-files.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-entry-normalization.d.ts +7 -0
- package/dist/core/session-entry-normalization.d.ts.map +1 -0
- package/dist/core/session-entry-normalization.js +14 -0
- package/dist/core/session-entry-normalization.js.map +1 -0
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +1 -0
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-history.d.ts +2 -2
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +127 -108
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +2 -2
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +1 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.d.ts +2 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +141 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +11 -8
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/main-deferred-startup.d.ts.map +1 -1
- package/dist/main-deferred-startup.js +2 -2
- package/dist/main-deferred-startup.js.map +1 -1
- package/dist/main-early-input.d.ts.map +1 -1
- package/dist/main-early-input.js +7 -0
- package/dist/main-early-input.js.map +1 -1
- package/dist/main-session.d.ts.map +1 -1
- package/dist/main-session.js +1 -0
- package/dist/main-session.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +0 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-options.js +3 -1
- package/dist/modes/interactive/components/settings-selector-options.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +2 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +3 -1
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +21 -9
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-child-ordering.d.ts +7 -0
- package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-child-ordering.js +26 -0
- package/dist/modes/interactive/interactive-child-ordering.js.map +1 -0
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +43 -30
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -0
- package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +41 -6
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +3 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +2 -2
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -2
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +11 -4
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js +0 -3
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +15 -1
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +5 -1
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +20 -21
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/global-theme.js +26 -2
- package/dist/modes/interactive/theme/global-theme.js.map +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +2 -0
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +3 -0
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/fs-watch.d.ts +24 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +60 -5
- package/dist/utils/fs-watch.js.map +1 -1
- package/docs/changelog.mdx +19 -0
- package/docs/compaction.md +60 -49
- package/docs/custom-provider.md +18 -5
- package/docs/development.md +4 -0
- package/docs/extensions.md +11 -2
- package/docs/json.md +1 -1
- package/docs/models.md +69 -10
- package/docs/providers.md +1 -1
- package/docs/quickstart.md +12 -8
- package/docs/rpc.md +2 -2
- package/docs/sdk.md +1 -1
- package/docs/settings.md +4 -4
- package/docs/subagents.md +40 -5
- package/docs/tools.md +1 -1
- package/docs/usage.md +4 -2
- package/docs/windows.md +4 -0
- package/docs/workflows.md +33 -48
- package/examples/extensions/preset.ts +2 -2
- package/examples/extensions/subagent/README.md +2 -2
- package/examples/extensions/subagent/index.ts +1 -2
- package/examples/extensions/subagent/schemas.ts +4 -1
- package/examples/sdk/12-full-control.ts +1 -1
- package/npm-shrinkwrap.json +48 -51
- package/package.json +7 -7
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +0 -75
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +0 -202
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +0 -97
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +0 -160
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +0 -72
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +0 -161
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +0 -203
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +0 -234
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +0 -103
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +0 -29
- package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +0 -9
- package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +0 -117
|
@@ -14,6 +14,12 @@ interface SlashSnapshot {
|
|
|
14
14
|
version: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
export interface SlashSnapshotStore {
|
|
18
|
+
liveSnapshots: Map<string, SlashSnapshot>;
|
|
19
|
+
finalSnapshots: Map<string, SlashSnapshot>;
|
|
20
|
+
versionCounter: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
17
23
|
interface SequentialChainStepLike {
|
|
18
24
|
agent: string;
|
|
19
25
|
task?: string;
|
|
@@ -25,9 +31,26 @@ interface ParallelChainStepLike {
|
|
|
25
31
|
|
|
26
32
|
type ChainStepLike = SequentialChainStepLike | ParallelChainStepLike;
|
|
27
33
|
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
const defaultStoreOwner = {};
|
|
35
|
+
|
|
36
|
+
function getStoreRegistry(): WeakMap<object, SlashSnapshotStore> {
|
|
37
|
+
const key = "__piSubagentSlashSnapshotStores";
|
|
38
|
+
const globalStore = globalThis as Record<string, unknown>;
|
|
39
|
+
const existing = globalStore[key];
|
|
40
|
+
if (existing instanceof WeakMap) return existing as WeakMap<object, SlashSnapshotStore>;
|
|
41
|
+
const registry = new WeakMap<object, SlashSnapshotStore>();
|
|
42
|
+
globalStore[key] = registry;
|
|
43
|
+
return registry;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function getSlashSnapshotStore(owner: object = defaultStoreOwner): SlashSnapshotStore {
|
|
47
|
+
const registry = getStoreRegistry();
|
|
48
|
+
const existing = registry.get(owner);
|
|
49
|
+
if (existing) return existing;
|
|
50
|
+
const store = { liveSnapshots: new Map(), finalSnapshots: new Map(), versionCounter: 1 };
|
|
51
|
+
registry.set(owner, store);
|
|
52
|
+
return store;
|
|
53
|
+
}
|
|
31
54
|
|
|
32
55
|
const EMPTY_MESSAGES: Message[] = [];
|
|
33
56
|
const EMPTY_USAGE: Usage = {
|
|
@@ -39,8 +62,8 @@ const EMPTY_USAGE: Usage = {
|
|
|
39
62
|
turns: 0,
|
|
40
63
|
};
|
|
41
64
|
|
|
42
|
-
function nextVersion(): number {
|
|
43
|
-
return versionCounter++;
|
|
65
|
+
function nextVersion(store: SlashSnapshotStore): number {
|
|
66
|
+
return store.versionCounter++;
|
|
44
67
|
}
|
|
45
68
|
|
|
46
69
|
function cloneUsage(): Usage {
|
|
@@ -60,7 +83,7 @@ function createPlaceholderResult(
|
|
|
60
83
|
messages: EMPTY_MESSAGES,
|
|
61
84
|
usage: cloneUsage(),
|
|
62
85
|
progress: {
|
|
63
|
-
|
|
86
|
+
index: index ?? 0,
|
|
64
87
|
agent,
|
|
65
88
|
status,
|
|
66
89
|
task,
|
|
@@ -164,6 +187,7 @@ function buildSingleInitialResult(params: SubagentParamsLike): AgentToolResult<D
|
|
|
164
187
|
...(params.context ? { context: params.context } : {}),
|
|
165
188
|
results: [createPlaceholderResult(agent, task, "running")],
|
|
166
189
|
progress: [{
|
|
190
|
+
index: 0,
|
|
167
191
|
agent,
|
|
168
192
|
status: "running",
|
|
169
193
|
task,
|
|
@@ -177,14 +201,15 @@ function buildSingleInitialResult(params: SubagentParamsLike): AgentToolResult<D
|
|
|
177
201
|
};
|
|
178
202
|
}
|
|
179
203
|
|
|
180
|
-
export function buildSlashInitialResult(requestId: string, params: SubagentParamsLike): SlashMessageDetails {
|
|
204
|
+
export function buildSlashInitialResult(requestId: string, params: SubagentParamsLike, owner?: object): SlashMessageDetails {
|
|
205
|
+
const store = getSlashSnapshotStore(owner);
|
|
181
206
|
const result = (params.tasks?.length ?? 0) > 0
|
|
182
207
|
? buildParallelInitialResult(params)
|
|
183
208
|
: (params.chain?.length ?? 0) > 0
|
|
184
209
|
? buildChainInitialResult(params)
|
|
185
210
|
: buildSingleInitialResult(params);
|
|
186
|
-
liveSnapshots.set(requestId, { result, version: nextVersion() });
|
|
187
|
-
finalSnapshots.delete(requestId);
|
|
211
|
+
store.liveSnapshots.set(requestId, { result, version: nextVersion(store) });
|
|
212
|
+
store.finalSnapshots.delete(requestId);
|
|
188
213
|
return { requestId, result };
|
|
189
214
|
}
|
|
190
215
|
|
|
@@ -200,8 +225,9 @@ function cloneResultsWithProgress(
|
|
|
200
225
|
});
|
|
201
226
|
}
|
|
202
227
|
|
|
203
|
-
export function applySlashUpdate(requestId: string, update: SlashSubagentUpdate): void {
|
|
204
|
-
const
|
|
228
|
+
export function applySlashUpdate(requestId: string, update: SlashSubagentUpdate, owner?: object): void {
|
|
229
|
+
const store = getSlashSnapshotStore(owner);
|
|
230
|
+
const snapshot = store.liveSnapshots.get(requestId);
|
|
205
231
|
if (!snapshot) return;
|
|
206
232
|
const progress = update.progress;
|
|
207
233
|
if (!progress || !snapshot.result.details) return;
|
|
@@ -212,30 +238,32 @@ export function applySlashUpdate(requestId: string, update: SlashSubagentUpdate)
|
|
|
212
238
|
results: cloneResultsWithProgress(snapshot.result.details.results, progress),
|
|
213
239
|
...(snapshot.result.details.mode === "chain" && currentStepIndex >= 0 ? { currentStepIndex } : {}),
|
|
214
240
|
};
|
|
215
|
-
liveSnapshots.set(requestId, {
|
|
241
|
+
store.liveSnapshots.set(requestId, {
|
|
216
242
|
result: {
|
|
217
243
|
...snapshot.result,
|
|
218
244
|
details: nextDetails,
|
|
219
245
|
},
|
|
220
|
-
version: nextVersion(),
|
|
246
|
+
version: nextVersion(store),
|
|
221
247
|
});
|
|
222
248
|
}
|
|
223
249
|
|
|
224
|
-
export function finalizeSlashResult(response: SlashSubagentResponse): SlashMessageDetails {
|
|
250
|
+
export function finalizeSlashResult(response: SlashSubagentResponse, owner?: object): SlashMessageDetails {
|
|
251
|
+
const store = getSlashSnapshotStore(owner);
|
|
225
252
|
const snapshot = {
|
|
226
253
|
result: response.result,
|
|
227
|
-
version: nextVersion(),
|
|
254
|
+
version: nextVersion(store),
|
|
228
255
|
};
|
|
229
|
-
finalSnapshots.set(response.requestId, snapshot);
|
|
230
|
-
liveSnapshots.delete(response.requestId);
|
|
256
|
+
store.finalSnapshots.set(response.requestId, snapshot);
|
|
257
|
+
store.liveSnapshots.delete(response.requestId);
|
|
231
258
|
return {
|
|
232
259
|
requestId: response.requestId,
|
|
233
260
|
result: response.result,
|
|
234
261
|
};
|
|
235
262
|
}
|
|
236
263
|
|
|
237
|
-
export function failSlashResult(requestId: string, params: SubagentParamsLike, message: string): SlashMessageDetails {
|
|
238
|
-
const
|
|
264
|
+
export function failSlashResult(requestId: string, params: SubagentParamsLike, message: string, owner?: object): SlashMessageDetails {
|
|
265
|
+
const store = getSlashSnapshotStore(owner);
|
|
266
|
+
const initial = buildSlashInitialResult(requestId, params, owner).result;
|
|
239
267
|
const failedResults = initial.details.results.map((result) => ({
|
|
240
268
|
...result,
|
|
241
269
|
exitCode: 1,
|
|
@@ -250,9 +278,9 @@ export function failSlashResult(requestId: string, params: SubagentParamsLike, m
|
|
|
250
278
|
progress: failedResults.map((entry) => entry.progress!).filter(Boolean),
|
|
251
279
|
},
|
|
252
280
|
};
|
|
253
|
-
const snapshot = { result, version: nextVersion() };
|
|
254
|
-
finalSnapshots.set(requestId, snapshot);
|
|
255
|
-
liveSnapshots.delete(requestId);
|
|
281
|
+
const snapshot = { result, version: nextVersion(store) };
|
|
282
|
+
store.finalSnapshots.set(requestId, snapshot);
|
|
283
|
+
store.liveSnapshots.delete(requestId);
|
|
256
284
|
return { requestId, result };
|
|
257
285
|
}
|
|
258
286
|
|
|
@@ -268,25 +296,28 @@ export function resolveSlashMessageDetails(value: unknown): SlashMessageDetails
|
|
|
268
296
|
return isSlashMessageDetails(value) ? value : undefined;
|
|
269
297
|
}
|
|
270
298
|
|
|
271
|
-
export function getSlashRenderableSnapshot(details: SlashMessageDetails): SlashSnapshot {
|
|
272
|
-
|
|
273
|
-
|
|
299
|
+
export function getSlashRenderableSnapshot(details: SlashMessageDetails, owner?: object): SlashSnapshot {
|
|
300
|
+
const store = getSlashSnapshotStore(owner);
|
|
301
|
+
return store.finalSnapshots.get(details.requestId)
|
|
302
|
+
?? store.liveSnapshots.get(details.requestId)
|
|
274
303
|
?? { result: details.result, version: 0 };
|
|
275
304
|
}
|
|
276
305
|
|
|
277
|
-
export function restoreSlashFinalSnapshots(entries: unknown[]): void {
|
|
278
|
-
|
|
279
|
-
|
|
306
|
+
export function restoreSlashFinalSnapshots(entries: unknown[], owner?: object): void {
|
|
307
|
+
const store = getSlashSnapshotStore(owner);
|
|
308
|
+
store.liveSnapshots.clear();
|
|
309
|
+
store.finalSnapshots.clear();
|
|
280
310
|
for (const entry of entries) {
|
|
281
311
|
const e = entry as { type?: string; customType?: string; details?: unknown };
|
|
282
312
|
if (e?.type !== "custom_message" || e.customType !== SLASH_RESULT_TYPE) continue;
|
|
283
313
|
const details = resolveSlashMessageDetails(e.details);
|
|
284
314
|
if (!details) continue;
|
|
285
|
-
finalSnapshots.set(details.requestId, { result: details.result, version: nextVersion() });
|
|
315
|
+
store.finalSnapshots.set(details.requestId, { result: details.result, version: nextVersion(store) });
|
|
286
316
|
}
|
|
287
317
|
}
|
|
288
318
|
|
|
289
|
-
export function clearSlashSnapshots(): void {
|
|
290
|
-
|
|
291
|
-
|
|
319
|
+
export function clearSlashSnapshots(owner?: object): void {
|
|
320
|
+
const store = getSlashSnapshotStore(owner);
|
|
321
|
+
store.liveSnapshots.clear();
|
|
322
|
+
store.finalSnapshots.clear();
|
|
292
323
|
}
|
|
@@ -61,6 +61,13 @@ export function renderSubagentResult(
|
|
|
61
61
|
theme: Theme,
|
|
62
62
|
): Component {
|
|
63
63
|
const d = result.details;
|
|
64
|
+
if (d?.asyncId && d.results.length === 0) {
|
|
65
|
+
const contextPrefix = d.context === "fork" ? `${theme.fg("warning", "[fork]")} ` : "";
|
|
66
|
+
const container = new Container();
|
|
67
|
+
container.addChild(new Text(`${contextPrefix}${theme.fg("success", "launched")} · async run ${d.asyncId}`, 0, 0));
|
|
68
|
+
container.addChild(new Text(theme.fg("dim", "completion pending; the detached result will be delivered when it finishes"), 0, 0));
|
|
69
|
+
return container;
|
|
70
|
+
}
|
|
64
71
|
if (!d || !d.results.length) {
|
|
65
72
|
const t = result.content[0];
|
|
66
73
|
const text = t?.type === "text" ? t.text : "(no output)";
|
|
@@ -76,6 +76,7 @@ export function subagentResultRenderKey(
|
|
|
76
76
|
options.expanded ? "expanded" : "compact",
|
|
77
77
|
details.mode,
|
|
78
78
|
details.currentStepIndex ?? "",
|
|
79
|
+
details.asyncId ?? "",
|
|
79
80
|
details.totalSteps ?? "",
|
|
80
81
|
progressRenderKey(details.progressSummary),
|
|
81
82
|
progressKeys.join("|"),
|
|
@@ -60,53 +60,81 @@ interface RenderRequestingContext {
|
|
|
60
60
|
ui: ExtensionContext["ui"] & { requestRender?: () => void };
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
let widgetMounted = false;
|
|
75
|
-
|
|
76
|
-
function getLatestWidgetJobs(): AsyncJobState[] {
|
|
77
|
-
return latestWidgetJobs;
|
|
63
|
+
interface WidgetAnimationState {
|
|
64
|
+
latestCtx?: ExtensionContext;
|
|
65
|
+
latestJobs: AsyncJobState[];
|
|
66
|
+
frameNow: number;
|
|
67
|
+
expanded: boolean;
|
|
68
|
+
snapshotKey?: string;
|
|
69
|
+
pulseFrame?: number;
|
|
70
|
+
mountedCtx?: ExtensionContext;
|
|
71
|
+
mountedOwnerKey?: string;
|
|
72
|
+
surfaceKey?: object;
|
|
73
|
+
mounted: boolean;
|
|
78
74
|
}
|
|
79
75
|
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
interface WidgetSurfaceState {
|
|
77
|
+
activeOwner?: object;
|
|
82
78
|
}
|
|
83
79
|
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
interface WidgetRegistry {
|
|
81
|
+
states: WeakMap<object, WidgetAnimationState>;
|
|
82
|
+
surfaces: WeakMap<object, WidgetSurfaceState>;
|
|
86
83
|
}
|
|
87
84
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
return
|
|
85
|
+
const defaultWidgetOwner = {};
|
|
86
|
+
|
|
87
|
+
function getWidgetRegistry(): WidgetRegistry {
|
|
88
|
+
const key = "__piSubagentWidgetRegistry";
|
|
89
|
+
const globalStore = globalThis as Record<string, unknown>;
|
|
90
|
+
const existing = globalStore[key] as WidgetRegistry | undefined;
|
|
91
|
+
if (existing?.states instanceof WeakMap && existing.surfaces instanceof WeakMap) return existing;
|
|
92
|
+
const registry: WidgetRegistry = { states: new WeakMap(), surfaces: new WeakMap() };
|
|
93
|
+
globalStore[key] = registry;
|
|
94
|
+
return registry;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function getWidgetState(owner: object): WidgetAnimationState {
|
|
98
|
+
const registry = getWidgetRegistry();
|
|
99
|
+
const existing = registry.states.get(owner);
|
|
100
|
+
if (existing) return existing;
|
|
101
|
+
const state: WidgetAnimationState = {
|
|
102
|
+
latestJobs: [],
|
|
103
|
+
frameNow: 0,
|
|
104
|
+
expanded: false,
|
|
105
|
+
mounted: false,
|
|
106
|
+
};
|
|
107
|
+
registry.states.set(owner, state);
|
|
108
|
+
return state;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function getSurfaceState(surfaceKey: object): WidgetSurfaceState {
|
|
112
|
+
const registry = getWidgetRegistry();
|
|
113
|
+
const existing = registry.surfaces.get(surfaceKey);
|
|
114
|
+
if (existing) return existing;
|
|
115
|
+
const surface = {};
|
|
116
|
+
registry.surfaces.set(surfaceKey, surface);
|
|
117
|
+
return surface;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function getExpanded(state: WidgetAnimationState): boolean {
|
|
121
|
+
if (!state.latestCtx?.hasUI) return state.expanded;
|
|
122
|
+
const expanded = state.latestCtx.ui.getToolsExpanded?.();
|
|
123
|
+
if (typeof expanded === "boolean") state.expanded = expanded;
|
|
124
|
+
return state.expanded;
|
|
98
125
|
}
|
|
99
126
|
|
|
100
|
-
function
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
function clearWidgetState(state: WidgetAnimationState): void {
|
|
128
|
+
state.latestCtx = undefined;
|
|
129
|
+
state.latestJobs = [];
|
|
130
|
+
state.frameNow = 0;
|
|
131
|
+
state.expanded = false;
|
|
132
|
+
state.snapshotKey = undefined;
|
|
133
|
+
state.pulseFrame = undefined;
|
|
134
|
+
state.mountedCtx = undefined;
|
|
135
|
+
state.mountedOwnerKey = undefined;
|
|
136
|
+
state.surfaceKey = undefined;
|
|
137
|
+
state.mounted = false;
|
|
110
138
|
}
|
|
111
139
|
|
|
112
140
|
function getWidgetOwnerKey(ctx: ExtensionContext): string {
|
|
@@ -137,6 +165,28 @@ function getWidgetOwnerKey(ctx: ExtensionContext): string {
|
|
|
137
165
|
return `${sessionOwner}|cwd:${cwdOwner}`;
|
|
138
166
|
}
|
|
139
167
|
|
|
168
|
+
function widgetStatusText(jobs: AsyncJobState[]): string | undefined {
|
|
169
|
+
if (jobs.length === 0) return undefined;
|
|
170
|
+
const counts = new Map<string, number>();
|
|
171
|
+
for (const job of jobs) counts.set(job.status, (counts.get(job.status) ?? 0) + 1);
|
|
172
|
+
const ordered = ["running", "queued", "complete", "failed", "paused"];
|
|
173
|
+
const parts = ordered
|
|
174
|
+
.map((status) => {
|
|
175
|
+
const count = counts.get(status) ?? 0;
|
|
176
|
+
return count > 0 ? `${count} ${status}` : undefined;
|
|
177
|
+
})
|
|
178
|
+
.filter((part): part is string => part !== undefined);
|
|
179
|
+
return `Async agents: ${parts.join(", ")}`;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function setWidgetStatus(ctx: ExtensionContext, jobs: AsyncJobState[]): void {
|
|
183
|
+
try {
|
|
184
|
+
ctx.ui.setStatus?.(WIDGET_KEY, widgetStatusText(jobs));
|
|
185
|
+
} catch {
|
|
186
|
+
// Status mirroring must never prevent the primary widget render path.
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
140
190
|
function requestWidgetRender(ctx: ExtensionContext): void {
|
|
141
191
|
(ctx as RenderRequestingContext).ui.requestRender?.();
|
|
142
192
|
}
|
|
@@ -150,25 +200,44 @@ function unmountWidgetBestEffort(ctx: ExtensionContext | undefined): void {
|
|
|
150
200
|
// reload/session rebinding, but local state still needs to move on so the
|
|
151
201
|
// next status update can mount cleanly on the active UI context.
|
|
152
202
|
}
|
|
203
|
+
try {
|
|
204
|
+
ctx.ui.setStatus?.(WIDGET_KEY, undefined);
|
|
205
|
+
} catch {
|
|
206
|
+
// Status mirroring cleanup must never block primary widget teardown.
|
|
207
|
+
}
|
|
153
208
|
}
|
|
154
209
|
|
|
155
210
|
function widgetSnapshotKey(jobs: AsyncJobState[]): string {
|
|
156
211
|
return jobs.map(widgetRenderKey).join("\n");
|
|
157
212
|
}
|
|
158
213
|
|
|
159
|
-
function refreshWidgetSnapshot(jobs: AsyncJobState[]): void {
|
|
214
|
+
function refreshWidgetSnapshot(state: WidgetAnimationState, jobs: AsyncJobState[]): void {
|
|
160
215
|
const snapshotKey = widgetSnapshotKey(jobs);
|
|
161
|
-
if (snapshotKey ===
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
216
|
+
if (snapshotKey === state.snapshotKey) return;
|
|
217
|
+
state.snapshotKey = snapshotKey;
|
|
218
|
+
state.frameNow = Date.now();
|
|
219
|
+
state.pulseFrame = advanceResultPulseFrame(state.pulseFrame);
|
|
165
220
|
}
|
|
166
221
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
222
|
+
function releaseMountedWidget(state: WidgetAnimationState, owner: object): void {
|
|
223
|
+
if (state.mounted) unmountWidgetBestEffort(state.mountedCtx);
|
|
224
|
+
if (state.surfaceKey) {
|
|
225
|
+
const surface = getSurfaceState(state.surfaceKey);
|
|
226
|
+
if (surface.activeOwner === owner) surface.activeOwner = undefined;
|
|
227
|
+
}
|
|
228
|
+
clearWidgetState(state);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Full teardown. Explicit API ownership is authoritative; logical context
|
|
232
|
+
// matching only protects context-driven teardown from stale session wrappers.
|
|
233
|
+
export function stopWidgetAnimation(ownerCtx?: ExtensionContext, owner: object = defaultWidgetOwner): void {
|
|
234
|
+
const state = getWidgetState(owner);
|
|
235
|
+
if (ownerCtx && state.mounted && state.mountedOwnerKey !== getWidgetOwnerKey(ownerCtx)) return;
|
|
236
|
+
if (state.surfaceKey && getSurfaceState(state.surfaceKey).activeOwner !== owner) {
|
|
237
|
+
clearWidgetState(state);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
releaseMountedWidget(state, owner);
|
|
172
241
|
}
|
|
173
242
|
|
|
174
243
|
export function buildWidgetLines(jobs: AsyncJobState[], theme: Theme, width = getTermWidth(), expanded = false, now: number = Date.now(), pulseFrame?: number): string[] {
|
|
@@ -241,55 +310,54 @@ export function buildWidgetLines(jobs: AsyncJobState[], theme: Theme, width = ge
|
|
|
241
310
|
return lines;
|
|
242
311
|
}
|
|
243
312
|
|
|
244
|
-
/**
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
export function renderWidget(ctx: ExtensionContext, jobs: AsyncJobState[]): void {
|
|
313
|
+
/** Render the async jobs widget for one ExtensionAPI owner. */
|
|
314
|
+
export function renderWidget(ctx: ExtensionContext, jobs: AsyncJobState[], owner: object = defaultWidgetOwner): void {
|
|
315
|
+
const state = getWidgetState(owner);
|
|
248
316
|
const ownerKey = getWidgetOwnerKey(ctx);
|
|
317
|
+
const requestedSurfaceKey = ctx.ui.setWidget;
|
|
318
|
+
const requestedSurface = getSurfaceState(requestedSurfaceKey);
|
|
249
319
|
if (jobs.length === 0) {
|
|
250
|
-
if (
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
stopWidgetAnimation();
|
|
320
|
+
if (requestedSurface.activeOwner && requestedSurface.activeOwner !== owner) return;
|
|
321
|
+
if (state.surfaceKey && getSurfaceState(state.surfaceKey).activeOwner !== owner) return;
|
|
322
|
+
if (state.mounted && state.mountedOwnerKey !== ownerKey) return;
|
|
323
|
+
if (ctx.hasUI) setWidgetStatus(ctx, []);
|
|
324
|
+
stopWidgetAnimation(ctx, owner);
|
|
257
325
|
return;
|
|
258
326
|
}
|
|
259
327
|
if (!ctx.hasUI) {
|
|
260
|
-
stopWidgetAnimation();
|
|
328
|
+
stopWidgetAnimation(ctx, owner);
|
|
261
329
|
return;
|
|
262
330
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
331
|
+
// Workflow stages forward the host's setWidget function, which identifies the
|
|
332
|
+
// shared widget surface. A stage cannot replace a parent already active there.
|
|
333
|
+
if (!state.mounted && requestedSurface.activeOwner && requestedSurface.activeOwner !== owner) return;
|
|
334
|
+
state.latestCtx = ctx;
|
|
335
|
+
state.latestJobs = [...jobs];
|
|
336
|
+
refreshWidgetSnapshot(state, jobs);
|
|
337
|
+
if (state.mounted && state.mountedOwnerKey !== ownerKey) {
|
|
338
|
+
releaseMountedWidget(state, owner);
|
|
339
|
+
state.latestCtx = ctx;
|
|
340
|
+
state.latestJobs = [...jobs];
|
|
341
|
+
refreshWidgetSnapshot(state, jobs);
|
|
273
342
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
ctx.ui.setWidget(WIDGET_KEY, buildWidgetComponent(
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
343
|
+
setWidgetStatus(ctx, jobs);
|
|
344
|
+
if (!state.mounted) {
|
|
345
|
+
const surface = getSurfaceState(requestedSurfaceKey);
|
|
346
|
+
if (surface.activeOwner && surface.activeOwner !== owner) return;
|
|
347
|
+
ctx.ui.setWidget(WIDGET_KEY, buildWidgetComponent(
|
|
348
|
+
() => state.latestJobs,
|
|
349
|
+
() => getExpanded(state),
|
|
350
|
+
() => state.frameNow,
|
|
351
|
+
() => state.pulseFrame,
|
|
352
|
+
), { placement: "belowEditor" });
|
|
353
|
+
state.mountedCtx = ctx;
|
|
354
|
+
state.mountedOwnerKey = ownerKey;
|
|
355
|
+
state.surfaceKey = requestedSurfaceKey;
|
|
356
|
+
state.mounted = true;
|
|
357
|
+
surface.activeOwner = owner;
|
|
284
358
|
} else {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
// teardown pointed at the freshest same-owner wrapper because older wrappers
|
|
288
|
-
// can go stale after host session/context rebinding.
|
|
289
|
-
mountedWidgetCtx = ctx;
|
|
290
|
-
mountedWidgetOwnerKey = ownerKey;
|
|
359
|
+
state.mountedCtx = ctx;
|
|
360
|
+
state.mountedOwnerKey = ownerKey;
|
|
291
361
|
requestWidgetRender(ctx);
|
|
292
362
|
}
|
|
293
|
-
// The async pulse is update-driven like foreground subagent results, so no
|
|
294
|
-
// periodic cosmetic ticker is needed.
|
|
295
363
|
}
|
|
@@ -4,6 +4,34 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.5] - 2026-07-11
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Aligned the web-access extension peer dependency with upstream `pi-tui` `^0.80.6` as part of the consolidated Pi sync; no web-access source behavior changed ([#1703](https://github.com/bastani-inc/atomic/issues/1703)).
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- Retry failed lazy initialization and initial or later-generation lifecycle replays before a subsequent `web_search` or `fetch_content` executes, while concurrent cold/retry callers share one attempt ([#1704](https://github.com/bastani-inc/atomic/issues/1704)).
|
|
16
|
+
- Fixed native Bun loading of the heavy web-access graph by resolving pi-ai compatibility helpers from the installed `@earendil-works/pi-ai/compat` package, so `web_search`, `code_search`, `fetch_content`, and `get_search_content` initialize through their lazy wrappers ([#1728](https://github.com/bastani-inc/atomic/issues/1728)).
|
|
17
|
+
- Made lazy lifecycle replay generation-safe and session-leased: replay is committed only after successful dispatch, lifecycle changes during replay advance to the latest snapshot, shutdown does not report completion until retired replay/initializer cleanup settles, calls spanning teardown reject, and replacement wrappers cannot be mutated by late old cleanup.
|
|
18
|
+
- Recheck each invocation's abort signal after shared lazy initialization and provider/curator execution, preserving the exact host abort reason without cancelling initialization for other callers while keeping explicit curator user cancellation result-shaped.
|
|
19
|
+
- Classify non-empty all-failed search/fetch batches as host-visible tool errors with provider/fetch stage diagnostics while retaining per-item payloads and keeping partial successes successful.
|
|
20
|
+
|
|
21
|
+
## [0.9.5-alpha.10] - 2026-07-11
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Aligned the web-access extension peer dependency with upstream `pi-tui` `^0.80.6` as part of the consolidated Pi sync; no web-access source behavior changed ([#1703](https://github.com/bastani-inc/atomic/issues/1703)).
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- Retry failed lazy initialization and initial or later-generation lifecycle replays before a subsequent `web_search` or `fetch_content` executes, while concurrent cold/retry callers share one attempt ([#1704](https://github.com/bastani-inc/atomic/issues/1704)).
|
|
30
|
+
- Fixed native Bun loading of the heavy web-access graph by resolving pi-ai compatibility helpers from the installed `@earendil-works/pi-ai/compat` package, so `web_search`, `code_search`, `fetch_content`, and `get_search_content` initialize through their lazy wrappers ([#1728](https://github.com/bastani-inc/atomic/issues/1728)).
|
|
31
|
+
- Made lazy lifecycle replay generation-safe and session-leased: replay is committed only after successful dispatch, lifecycle changes during replay advance to the latest snapshot, shutdown does not report completion until retired replay/initializer cleanup settles, calls spanning teardown reject, and replacement wrappers cannot be mutated by late old cleanup.
|
|
32
|
+
- Recheck each invocation's abort signal after shared lazy initialization and provider/curator execution, preserving the exact host abort reason without cancelling initialization for other callers while keeping explicit curator user cancellation result-shaped.
|
|
33
|
+
- Classify non-empty all-failed search/fetch batches as host-visible tool errors with provider/fetch stage diagnostics while retaining per-item payloads and keeping partial successes successful.
|
|
34
|
+
|
|
7
35
|
## [0.9.4] - 2026-07-03
|
|
8
36
|
|
|
9
37
|
### Changed
|
|
@@ -72,6 +72,10 @@ fetch_content({ url: "/path/to/recording.mp4", prompt: "What error appears on sc
|
|
|
72
72
|
|
|
73
73
|
## Tools
|
|
74
74
|
|
|
75
|
+
The public tools register immediately and share one lazy initialization attempt on first use. Calls wait for initialization and active-session replay before provider work begins; a rejected initializer or replay can be retried by a later call. Initialization and replay are leased to the active session: shutdown retires the lease and cleans its candidate, so calls spanning shutdown reject and a restarted session creates a fresh provider wrapper. An abort that arrives during the shared wait cancels only that invocation. Host cancellation after provider or curator work rejects with the exact host abort reason, while an explicit user action in the curator remains a successful `{ cancelled: true, cancelReason: "user" }` result. Resetting the application-owned attempt does not guarantee re-evaluation of an ESM module whose evaluation itself failed.
|
|
76
|
+
|
|
77
|
+
For batch search/fetch calls, partial success remains usable and retains item-level errors. A non-empty batch where every provider request or URL fetch fails is reported through Atomic's tool-error channel with aggregate stage metadata while the per-item diagnostics remain stored in the result.
|
|
78
|
+
|
|
75
79
|
### web_search
|
|
76
80
|
|
|
77
81
|
Search the web via Exa, Perplexity AI, or Gemini. Returns a synthesized answer with source citations.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "@bastani/atomic";
|
|
2
|
-
import { Text } from "@
|
|
2
|
+
import { Text } from "@earendil-works/pi-tui";
|
|
3
3
|
import { Type } from "typebox";
|
|
4
4
|
import {
|
|
5
5
|
renderCodeSearchResult,
|
|
@@ -102,6 +102,7 @@ export function registerContentTools(pi: ExtensionAPI, deps: RegisterContentTool
|
|
|
102
102
|
frames: params.frames,
|
|
103
103
|
model: params.model,
|
|
104
104
|
});
|
|
105
|
+
signal?.throwIfAborted();
|
|
105
106
|
const successful = fetchResults.filter((r) => !r.error).length;
|
|
106
107
|
const totalChars = fetchResults.reduce((sum, r) => sum + r.content.length, 0);
|
|
107
108
|
|
|
@@ -120,7 +121,7 @@ export function registerContentTools(pi: ExtensionAPI, deps: RegisterContentTool
|
|
|
120
121
|
if (result.error) {
|
|
121
122
|
return {
|
|
122
123
|
content: [{ type: "text", text: `Error: ${result.error}` }],
|
|
123
|
-
details: { urls: urlList, urlCount: 1, successful: 0, error: result.error, responseId, prompt: params.prompt, timestamp: params.timestamp, frames: params.frames },
|
|
124
|
+
details: { outcome: "all_failed", stage: "fetch", urls: urlList, urlCount: 1, successful: 0, error: result.error, responseId, prompt: params.prompt, timestamp: params.timestamp, frames: params.frames },
|
|
124
125
|
};
|
|
125
126
|
}
|
|
126
127
|
|
|
@@ -177,9 +178,13 @@ export function registerContentTools(pi: ExtensionAPI, deps: RegisterContentTool
|
|
|
177
178
|
}
|
|
178
179
|
output += `\n---\nUse get_search_content({ responseId: "${responseId}", urlIndex: 0 }) to retrieve full content.`;
|
|
179
180
|
|
|
181
|
+
const allFailed = successful === 0;
|
|
180
182
|
return {
|
|
181
183
|
content: [{ type: "text", text: output }],
|
|
182
|
-
details: {
|
|
184
|
+
details: {
|
|
185
|
+
...(allFailed ? { outcome: "all_failed", stage: "fetch", error: `All ${urlList.length} URL fetch(es) failed`, failedUrls: urlList.length } : {}),
|
|
186
|
+
urls: urlList, urlCount: urlList.length, successful, totalChars, responseId,
|
|
187
|
+
},
|
|
183
188
|
};
|
|
184
189
|
},
|
|
185
190
|
|
|
@@ -2,7 +2,7 @@ import type { ExtensionAPI } from "@bastani/atomic";
|
|
|
2
2
|
import { CONFIG_DIR_NAME } from "@bastani/atomic";
|
|
3
3
|
import { appendFileSync } from "node:fs";
|
|
4
4
|
import { getActiveGoogleEmail, isGeminiWebAvailable } from "./gemini-web.js";
|
|
5
|
-
import { isBrowserCookieAccessAllowed } from "./gemini-web-config.
|
|
5
|
+
import { isBrowserCookieAccessAllowed } from "./gemini-web-config.js";
|
|
6
6
|
import { deleteResult, getAllResults } from "./storage.js";
|
|
7
7
|
import { loadConfigForExtensionInit, resolveWorkflow, saveConfig, type WebSearchWorkflow } from "./web-search-config.js";
|
|
8
8
|
|