@bastani/atomic 0.9.14 → 0.9.15
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 +45 -0
- package/README.md +1 -1
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +14 -0
- package/dist/builtin/mcp/package.json +4 -4
- package/dist/builtin/mcp/sampling-handler.ts +2 -2
- package/dist/builtin/mcp/types.ts +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +40 -0
- package/dist/builtin/subagents/README.md +5 -22
- 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/worker.md +2 -2
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/subagents/skills/subagent/SKILL.md +6 -6
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +0 -4
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +1 -12
- package/dist/builtin/subagents/src/agents/agent-management.ts +0 -1
- package/dist/builtin/subagents/src/agents/agent-serializer.ts +7 -6
- package/dist/builtin/subagents/src/agents/agent-types.ts +0 -1
- package/dist/builtin/subagents/src/extension/schemas.ts +2 -2
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +2 -2
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +0 -127
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +1 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +15 -106
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +0 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -13
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +2 -12
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +1 -20
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +0 -6
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +10 -21
- package/dist/builtin/subagents/src/runs/inprocess/attempt-handles.ts +104 -0
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +10 -21
- package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +2 -3
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +11 -32
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/temp-cleanup.ts +69 -0
- package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +0 -4
- package/dist/builtin/subagents/src/shared/types-depth.ts +15 -103
- package/dist/builtin/subagents/src/shared/types-foreground-state.ts +56 -0
- package/dist/builtin/subagents/src/shared/types-results.ts +1 -59
- package/dist/builtin/subagents/src/shared/types-runtime.ts +0 -2
- package/dist/builtin/subagents/src/shared/types.ts +1 -1
- package/dist/builtin/subagents/src/shared/utils.ts +1 -1
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +1 -1
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/web-access/summary-review.ts +2 -2
- package/dist/builtin/web-access/web-search-summary.ts +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +30 -0
- package/dist/builtin/workflows/README.md +2 -2
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +60473 -401
- package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
- package/dist/builtin/workflows/src/extension/wiring.ts +1 -1
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-delivery.ts +48 -4
- package/dist/builtin/workflows/src/extension/workflow-tool.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +5 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +35 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +6 -0
- package/dist/builtin/workflows/src/tui/chat-surface-message.ts +15 -13
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +25 -2
- package/dist/bun/cli.js +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.js +2 -2
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/cli/auth-check.d.ts +1 -1
- package/dist/cli/auth-check.d.ts.map +1 -1
- package/dist/cli/auth-check.js +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/credential-print.d.ts +1 -1
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +2 -2
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +1 -1
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +1 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +1 -1
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts +1 -1
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +2 -2
- 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-models.d.ts +2 -2
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +2 -2
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +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-runtime-auth.js +1 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +1 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-state.d.ts +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +1 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/anthropic-thinking-guard.d.ts +1 -1
- package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
- package/dist/core/anthropic-thinking-guard.js +1 -1
- package/dist/core/anthropic-thinking-guard.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.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.map +1 -1
- package/dist/core/cloudflare-gateway-binding.d.ts +1 -1
- package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -1
- package/dist/core/cloudflare-gateway-binding.js +1 -1
- package/dist/core/cloudflare-gateway-binding.js.map +1 -1
- package/dist/core/codex-fast-mode.d.ts +2 -2
- package/dist/core/codex-fast-mode.d.ts.map +1 -1
- package/dist/core/codex-fast-mode.js +3 -2
- package/dist/core/codex-fast-mode.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +2 -2
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction-runner.d.ts +2 -2
- package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
- package/dist/core/compaction/compaction-runner.js.map +1 -1
- package/dist/core/compaction/compaction-types.d.ts +2 -2
- package/dist/core/compaction/compaction-types.d.ts.map +1 -1
- package/dist/core/compaction/compaction-types.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/fallback-planner.d.ts +1 -1
- package/dist/core/compaction/fallback-planner.d.ts.map +1 -1
- package/dist/core/compaction/fallback-planner.js.map +1 -1
- package/dist/core/compaction/planner-outcome.d.ts +1 -1
- package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
- package/dist/core/compaction/planner-outcome.js +1 -1
- package/dist/core/compaction/planner-outcome.js.map +1 -1
- package/dist/core/compaction/range-planner-diagnostics.d.ts +1 -1
- package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
- package/dist/core/compaction/range-planner-diagnostics.js +1 -1
- package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
- package/dist/core/compaction/range-planner.d.ts +2 -2
- package/dist/core/compaction/range-planner.d.ts.map +1 -1
- package/dist/core/compaction/range-planner.js +2 -2
- package/dist/core/compaction/range-planner.js.map +1 -1
- package/dist/core/compaction/session-summarization.d.ts +2 -2
- package/dist/core/compaction/session-summarization.d.ts.map +1 -1
- package/dist/core/compaction/session-summarization.js +2 -2
- package/dist/core/compaction/session-summarization.js.map +1 -1
- package/dist/core/compaction/transcript-serialization.d.ts +1 -1
- package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
- package/dist/core/compaction/transcript-serialization.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/experimental.d.ts +1 -1
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +2 -2
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +2 -2
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +1 -7
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +1 -1
- package/dist/core/extensions/event-results.d.ts.map +1 -1
- package/dist/core/extensions/event-results.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/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +21 -9
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +2 -2
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/extensions/reactive-widget.d.ts +6 -0
- package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
- package/dist/core/extensions/reactive-widget.js +62 -6
- package/dist/core/extensions/reactive-widget.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +1 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts +1 -1
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +2 -2
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/tool-events.d.ts +1 -1
- package/dist/core/extensions/tool-events.d.ts.map +1 -1
- package/dist/core/extensions/tool-events.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +2 -2
- package/dist/core/extensions/tool-types.d.ts.map +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +2 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/fallback-models.d.ts +1 -1
- package/dist/core/fallback-models.d.ts.map +1 -1
- package/dist/core/fallback-models.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +14 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-capabilities.d.ts +1 -1
- package/dist/core/model-capabilities.d.ts.map +1 -1
- package/dist/core/model-capabilities.js.map +1 -1
- package/dist/core/model-fallback-failures.d.ts.map +1 -1
- package/dist/core/model-fallback-failures.js +18 -1
- package/dist/core/model-fallback-failures.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-defaults.d.ts +1 -1
- package/dist/core/model-resolver-defaults.d.ts.map +1 -1
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +1 -1
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-patterns.d.ts +1 -1
- package/dist/core/model-resolver-patterns.d.ts.map +1 -1
- package/dist/core/model-resolver-patterns.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +1 -1
- package/dist/core/model-resolver-scope.d.ts.map +1 -1
- package/dist/core/model-resolver-scope.js +1 -1
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-resolver-types.d.ts +1 -1
- package/dist/core/model-resolver-types.d.ts.map +1 -1
- package/dist/core/model-resolver-types.js.map +1 -1
- package/dist/core/model-runtime-auth.d.ts +1 -1
- package/dist/core/model-runtime-auth.d.ts.map +1 -1
- package/dist/core/model-runtime-auth.js.map +1 -1
- package/dist/core/model-runtime-providers.d.ts +2 -2
- package/dist/core/model-runtime-providers.d.ts.map +1 -1
- package/dist/core/model-runtime-providers.js +2 -2
- package/dist/core/model-runtime-providers.js.map +1 -1
- package/dist/core/model-runtime-restoration.d.ts +1 -1
- package/dist/core/model-runtime-restoration.d.ts.map +1 -1
- package/dist/core/model-runtime-restoration.js.map +1 -1
- package/dist/core/model-runtime-snapshot.d.ts +1 -1
- package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/model-runtime-snapshot.js.map +1 -1
- package/dist/core/model-runtime-streaming.d.ts +1 -1
- package/dist/core/model-runtime-streaming.d.ts.map +1 -1
- package/dist/core/model-runtime-streaming.js +1 -1
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/model-runtime-types.d.ts +1 -1
- package/dist/core/model-runtime-types.d.ts.map +1 -1
- package/dist/core/model-runtime-types.js.map +1 -1
- package/dist/core/model-runtime.d.ts +8 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +15 -3
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/oauth-login.d.ts +1 -1
- package/dist/core/oauth-login.d.ts.map +1 -1
- package/dist/core/oauth-login.js.map +1 -1
- package/dist/core/oauth-provider-metadata.d.ts +1 -1
- package/dist/core/oauth-provider-metadata.d.ts.map +1 -1
- package/dist/core/oauth-provider-metadata.js.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
- package/dist/core/provider-attribution.d.ts +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-composer-internal.d.ts +1 -1
- package/dist/core/provider-composer-internal.d.ts.map +1 -1
- package/dist/core/provider-composer-internal.js.map +1 -1
- package/dist/core/provider-composer.d.ts +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +2 -2
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/provider-context-usage.d.ts.map +1 -1
- package/dist/core/provider-context-usage.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +1 -1
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk-types.d.ts +1 -1
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +30 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +2 -2
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +1 -1
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +1 -1
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/session-manager-validation.js +1 -1
- package/dist/core/session-manager-validation.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +11 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +2 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/summarization-retry.d.ts +1 -1
- package/dist/core/summarization-retry.d.ts.map +1 -1
- package/dist/core/summarization-retry.js.map +1 -1
- package/dist/core/tools/bash-session-environment.d.ts +1 -1
- package/dist/core/tools/bash-session-environment.d.ts.map +1 -1
- package/dist/core/tools/bash-session-environment.js.map +1 -1
- package/dist/core/tools/oversized-tool-result.d.ts +1 -1
- package/dist/core/tools/oversized-tool-result.d.ts.map +1 -1
- package/dist/core/tools/oversized-tool-result.js.map +1 -1
- package/dist/core/tools/read-url.d.ts +1 -1
- package/dist/core/tools/read-url.d.ts.map +1 -1
- package/dist/core/tools/read-url.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/resource-selectors.d.ts +1 -1
- package/dist/core/tools/resource-selectors.d.ts.map +1 -1
- package/dist/core/tools/resource-selectors.js +2 -7
- package/dist/core/tools/resource-selectors.js.map +1 -1
- package/dist/core/typebox-compat.js +1 -1
- package/dist/core/typebox-compat.js.map +1 -1
- package/dist/core/usage-totals.d.ts +1 -1
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +1 -1
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/main-app-mode.d.ts +1 -1
- package/dist/main-app-mode.d.ts.map +1 -1
- package/dist/main-app-mode.js.map +1 -1
- package/dist/main-session-options.js +1 -1
- package/dist/main-session-options.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +26 -0
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +7 -2
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +1 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.js +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -0
- 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/model-catalog-refresh.d.ts +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
- package/dist/modes/interactive/streaming-assistant-message.d.ts +1 -1
- package/dist/modes/interactive/streaming-assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/streaming-assistant-message.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +26 -3
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +2 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +14 -0
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/json-event.d.ts +1 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.js +4 -1
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +2 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts +1 -1
- package/dist/utils/tool-result-images.d.ts.map +1 -1
- package/dist/utils/tool-result-images.js.map +1 -1
- package/docs/custom-provider.md +11 -8
- package/docs/development.md +0 -2
- package/docs/extensions.md +2 -2
- package/docs/json.md +1 -1
- package/docs/models/artificial-analysis-index.md +2 -2
- package/docs/models/model-selection.md +8 -8
- package/docs/models/pareto-efficiency.md +10 -10
- package/docs/models.md +9 -3
- package/docs/packages.md +1 -1
- package/docs/providers.md +5 -3
- package/docs/quickstart.md +1 -1
- package/docs/rpc.md +1 -1
- package/docs/sdk.md +2 -2
- package/docs/session-format.md +2 -2
- package/docs/settings.md +2 -1
- package/docs/subagents.md +5 -6
- package/docs/tui.md +3 -0
- package/docs/workflows.md +3 -1
- package/examples/extensions/README.md +1 -1
- package/examples/extensions/custom-footer.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/handoff.ts +2 -2
- package/examples/extensions/hello.ts +1 -1
- package/examples/extensions/plan-mode/index.ts +1 -1
- package/examples/extensions/preset.ts +1 -1
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/subagent/display.ts +1 -1
- package/examples/extensions/subagent/runner.ts +1 -1
- package/examples/extensions/subagent/types.ts +1 -1
- package/examples/extensions/summarize.ts +2 -2
- package/examples/extensions/tool-override.ts +1 -1
- package/examples/sdk/02-custom-model.ts +1 -1
- package/examples/sdk/12-full-control.ts +1 -1
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +54 -31
- package/package.json +3 -3
- package/dist/builtin/subagents/src/extension/fanout-child.ts +0 -259
- package/dist/builtin/subagents/src/runs/inprocess/nested-routing.ts +0 -218
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +0 -55
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +0 -178
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +0 -187
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-paths.ts +0 -57
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +0 -42
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +0 -352
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +0 -136
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +0 -252
- package/dist/builtin/subagents/src/shared/types-nested.ts +0 -127
- package/dist/core/copilot-env-routing.d.ts +0 -36
- package/dist/core/copilot-env-routing.d.ts.map +0 -1
- package/dist/core/copilot-env-routing.js +0 -94
- package/dist/core/copilot-env-routing.js.map +0 -1
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import {
|
|
4
|
-
appendInProcessControlRequest,
|
|
5
|
-
appendInProcessControlResult,
|
|
6
|
-
hasInProcessNestedRoute,
|
|
7
|
-
readInProcessControlRequests,
|
|
8
|
-
readInProcessControlResults,
|
|
9
|
-
} from "../nested-routing.js";
|
|
10
|
-
import {
|
|
11
|
-
assertSafeId,
|
|
12
|
-
clampNumber,
|
|
13
|
-
containedPath,
|
|
14
|
-
isSafeNestedId,
|
|
15
|
-
MAX_NESTED_EVENT_BYTES,
|
|
16
|
-
type NestedControlRequestRecord,
|
|
17
|
-
type NestedControlResultRecord,
|
|
18
|
-
type NestedRoute,
|
|
19
|
-
stringValue,
|
|
20
|
-
validateRouteShape,
|
|
21
|
-
} from "./nested-core.js";
|
|
22
|
-
import { writeRouteRecord } from "./nested-registry.js";
|
|
23
|
-
|
|
24
|
-
export function parseNestedControlRequest(content: string, route: NestedRoute): NestedControlRequestRecord | undefined {
|
|
25
|
-
if (Buffer.byteLength(content, "utf-8") > MAX_NESTED_EVENT_BYTES) return undefined;
|
|
26
|
-
let parsed: unknown;
|
|
27
|
-
try {
|
|
28
|
-
parsed = JSON.parse(content);
|
|
29
|
-
} catch {
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
if (!parsed || typeof parsed !== "object") return undefined;
|
|
33
|
-
const raw = parsed as Record<string, unknown>;
|
|
34
|
-
if (raw.type !== "subagent.nested.control-request") return undefined;
|
|
35
|
-
if (raw.rootRunId !== route.rootRunId || raw.capabilityToken !== route.capabilityToken) return undefined;
|
|
36
|
-
if (!isSafeNestedId(raw.requestId) || !isSafeNestedId(raw.targetRunId)) return undefined;
|
|
37
|
-
if (raw.action !== "interrupt" && raw.action !== "resume") return undefined;
|
|
38
|
-
const ts = clampNumber(raw.ts);
|
|
39
|
-
if (ts === undefined) return undefined;
|
|
40
|
-
return {
|
|
41
|
-
type: "subagent.nested.control-request",
|
|
42
|
-
ts,
|
|
43
|
-
rootRunId: route.rootRunId,
|
|
44
|
-
capabilityToken: route.capabilityToken,
|
|
45
|
-
requestId: raw.requestId,
|
|
46
|
-
targetRunId: raw.targetRunId,
|
|
47
|
-
action: raw.action,
|
|
48
|
-
...(stringValue(raw.message, 16_000) ? { message: stringValue(raw.message, 16_000) } : {}),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function parseNestedControlResult(content: string, route: NestedRoute): NestedControlResultRecord | undefined {
|
|
53
|
-
if (Buffer.byteLength(content, "utf-8") > MAX_NESTED_EVENT_BYTES) return undefined;
|
|
54
|
-
let parsed: unknown;
|
|
55
|
-
try {
|
|
56
|
-
parsed = JSON.parse(content);
|
|
57
|
-
} catch {
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
if (!parsed || typeof parsed !== "object") return undefined;
|
|
61
|
-
const raw = parsed as Record<string, unknown>;
|
|
62
|
-
if (raw.type !== "subagent.nested.control-result") return undefined;
|
|
63
|
-
if (raw.rootRunId !== route.rootRunId || raw.capabilityToken !== route.capabilityToken) return undefined;
|
|
64
|
-
if (!isSafeNestedId(raw.requestId) || !isSafeNestedId(raw.targetRunId)) return undefined;
|
|
65
|
-
const ts = clampNumber(raw.ts);
|
|
66
|
-
if (ts === undefined || typeof raw.ok !== "boolean") return undefined;
|
|
67
|
-
return {
|
|
68
|
-
type: "subagent.nested.control-result",
|
|
69
|
-
ts,
|
|
70
|
-
rootRunId: route.rootRunId,
|
|
71
|
-
capabilityToken: route.capabilityToken,
|
|
72
|
-
requestId: raw.requestId,
|
|
73
|
-
targetRunId: raw.targetRunId,
|
|
74
|
-
ok: raw.ok,
|
|
75
|
-
message: stringValue(raw.message, 16_000) ?? (raw.ok ? "Control request completed." : "Control request failed."),
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function writeNestedControlRequest(
|
|
80
|
-
route: NestedRoute,
|
|
81
|
-
request: Omit<NestedControlRequestRecord, "type" | "rootRunId" | "capabilityToken">,
|
|
82
|
-
): string {
|
|
83
|
-
validateRouteShape(route);
|
|
84
|
-
assertSafeId("requestId", request.requestId);
|
|
85
|
-
assertSafeId("targetRunId", request.targetRunId);
|
|
86
|
-
const record: NestedControlRequestRecord = {
|
|
87
|
-
type: "subagent.nested.control-request",
|
|
88
|
-
...request,
|
|
89
|
-
rootRunId: route.rootRunId,
|
|
90
|
-
capabilityToken: route.capabilityToken,
|
|
91
|
-
};
|
|
92
|
-
const sanitized = parseNestedControlRequest(JSON.stringify(record), route);
|
|
93
|
-
if (!sanitized) throw new Error("Nested control request failed validation.");
|
|
94
|
-
const filePath = writeRouteRecord(route.controlInbox, sanitized.ts, sanitized);
|
|
95
|
-
appendInProcessControlRequest(route, { ...sanitized, filePath });
|
|
96
|
-
return filePath;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export function readNestedControlRequests(
|
|
100
|
-
route: NestedRoute,
|
|
101
|
-
): Array<NestedControlRequestRecord & { filePath: string }> {
|
|
102
|
-
validateRouteShape(route);
|
|
103
|
-
if (hasInProcessNestedRoute(route)) return [...readInProcessControlRequests(route)];
|
|
104
|
-
let entries: string[] = [];
|
|
105
|
-
try {
|
|
106
|
-
entries = fs
|
|
107
|
-
.readdirSync(route.controlInbox)
|
|
108
|
-
.filter((entry) => entry.endsWith(".json"))
|
|
109
|
-
.sort();
|
|
110
|
-
} catch (error) {
|
|
111
|
-
if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error;
|
|
112
|
-
}
|
|
113
|
-
const requests: Array<NestedControlRequestRecord & { filePath: string }> = [];
|
|
114
|
-
for (const entry of entries) {
|
|
115
|
-
const filePath = path.join(route.controlInbox, entry);
|
|
116
|
-
if (!containedPath(route.controlInbox, filePath)) continue;
|
|
117
|
-
try {
|
|
118
|
-
const stat = fs.statSync(filePath);
|
|
119
|
-
if (!stat.isFile() || stat.size > MAX_NESTED_EVENT_BYTES) continue;
|
|
120
|
-
const request = parseNestedControlRequest(fs.readFileSync(filePath, "utf-8"), route);
|
|
121
|
-
if (request) requests.push({ ...request, filePath });
|
|
122
|
-
} catch {}
|
|
123
|
-
}
|
|
124
|
-
return requests;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function writeNestedControlResult(
|
|
128
|
-
route: NestedRoute,
|
|
129
|
-
result: Omit<NestedControlResultRecord, "type" | "rootRunId" | "capabilityToken">,
|
|
130
|
-
): void {
|
|
131
|
-
validateRouteShape(route);
|
|
132
|
-
assertSafeId("requestId", result.requestId);
|
|
133
|
-
assertSafeId("targetRunId", result.targetRunId);
|
|
134
|
-
const record: NestedControlResultRecord = {
|
|
135
|
-
type: "subagent.nested.control-result",
|
|
136
|
-
...result,
|
|
137
|
-
rootRunId: route.rootRunId,
|
|
138
|
-
capabilityToken: route.capabilityToken,
|
|
139
|
-
};
|
|
140
|
-
const sanitized = parseNestedControlResult(JSON.stringify(record), route);
|
|
141
|
-
if (!sanitized) throw new Error("Nested control result failed validation.");
|
|
142
|
-
const filePath = writeRouteRecord(route.eventSink, sanitized.ts, sanitized);
|
|
143
|
-
appendInProcessControlResult(route, { ...sanitized, filePath });
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export function readNestedControlResults(route: NestedRoute): NestedControlResultRecord[] {
|
|
147
|
-
validateRouteShape(route);
|
|
148
|
-
if (hasInProcessNestedRoute(route)) return [...readInProcessControlResults(route)] as NestedControlResultRecord[];
|
|
149
|
-
let entries: string[] = [];
|
|
150
|
-
try {
|
|
151
|
-
entries = fs
|
|
152
|
-
.readdirSync(route.eventSink)
|
|
153
|
-
.filter((entry) => entry.endsWith(".json") || entry.endsWith(".jsonl"))
|
|
154
|
-
.sort();
|
|
155
|
-
} catch (error) {
|
|
156
|
-
if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error;
|
|
157
|
-
}
|
|
158
|
-
const results: NestedControlResultRecord[] = [];
|
|
159
|
-
for (const entry of entries) {
|
|
160
|
-
const eventPath = path.join(route.eventSink, entry);
|
|
161
|
-
if (!containedPath(route.eventSink, eventPath)) continue;
|
|
162
|
-
try {
|
|
163
|
-
const stat = fs.statSync(eventPath);
|
|
164
|
-
if (!stat.isFile() || stat.size > MAX_NESTED_EVENT_BYTES) continue;
|
|
165
|
-
const content = fs.readFileSync(eventPath, "utf-8");
|
|
166
|
-
const lines = content.includes("\n") ? content.split("\n").filter((line) => line.trim()) : [content];
|
|
167
|
-
for (const line of lines) {
|
|
168
|
-
const result = parseNestedControlResult(line, route);
|
|
169
|
-
if (result) results.push(result);
|
|
170
|
-
}
|
|
171
|
-
} catch {}
|
|
172
|
-
}
|
|
173
|
-
return results;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
export function nestedRouteEnv(_route: NestedRoute): Record<string, string> {
|
|
177
|
-
return {};
|
|
178
|
-
}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import * as fs from "node:fs";
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import { type NestedRouteInfo, type NestedRunSummary, TEMP_ROOT_DIR } from "../../../shared/types.js";
|
|
5
|
-
import { MAX_SUBAGENT_NESTING_DEPTH } from "../../../shared/types-runtime.js";
|
|
6
|
-
import { registerInProcessNestedRoute } from "../nested-routing.js";
|
|
7
|
-
import { isSafeNestedPathId, type NestedPathEntry } from "./nested-paths.js";
|
|
8
|
-
|
|
9
|
-
export const NESTED_EVENTS_DIR = path.join(TEMP_ROOT_DIR, "nested-subagent-events");
|
|
10
|
-
export const ROUTE_FILE = "route.json";
|
|
11
|
-
export const REGISTRY_FILE = "registry.json";
|
|
12
|
-
export const MAX_NESTED_EVENT_BYTES = 64 * 1024;
|
|
13
|
-
export const MAX_NESTED_STEPS = 12;
|
|
14
|
-
export const MAX_NESTED_CHILDREN = 16;
|
|
15
|
-
export const MAX_NESTED_DEPTH = MAX_SUBAGENT_NESTING_DEPTH;
|
|
16
|
-
export const MAX_PROCESSED_NESTED_EVENTS = 20_000;
|
|
17
|
-
type NestedStatusEventType = "subagent.nested.started" | "subagent.nested.updated" | "subagent.nested.completed";
|
|
18
|
-
type NestedControlResultEventType = "subagent.nested.control-result";
|
|
19
|
-
|
|
20
|
-
export type NestedRoute = NestedRouteInfo;
|
|
21
|
-
|
|
22
|
-
export interface NestedEventRecord {
|
|
23
|
-
type: NestedStatusEventType;
|
|
24
|
-
ts: number;
|
|
25
|
-
rootRunId: string;
|
|
26
|
-
parentRunId: string;
|
|
27
|
-
parentStepIndex?: number;
|
|
28
|
-
capabilityToken: string;
|
|
29
|
-
child: NestedRunSummary;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface NestedControlResultRecord {
|
|
33
|
-
type: NestedControlResultEventType;
|
|
34
|
-
ts: number;
|
|
35
|
-
rootRunId: string;
|
|
36
|
-
capabilityToken: string;
|
|
37
|
-
requestId: string;
|
|
38
|
-
targetRunId: string;
|
|
39
|
-
ok: boolean;
|
|
40
|
-
message: string;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface NestedControlRequestRecord {
|
|
44
|
-
type: "subagent.nested.control-request";
|
|
45
|
-
ts: number;
|
|
46
|
-
rootRunId: string;
|
|
47
|
-
capabilityToken: string;
|
|
48
|
-
requestId: string;
|
|
49
|
-
targetRunId: string;
|
|
50
|
-
action: "interrupt" | "resume";
|
|
51
|
-
message?: string;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export interface NestedRegistry {
|
|
55
|
-
rootRunId: string;
|
|
56
|
-
updatedAt: number;
|
|
57
|
-
children: NestedRunSummary[];
|
|
58
|
-
processedEvents: string[];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function isSafeNestedId(value: unknown): value is string {
|
|
62
|
-
return isSafeNestedPathId(value);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function assertSafeNestedId(label: string, value: string): void {
|
|
66
|
-
if (!isSafeNestedId(value)) throw new Error(`${label} must be a non-empty safe id token.`);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function assertSafeId(label: string, value: string): void {
|
|
70
|
-
assertSafeNestedId(label, value);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export function containedPath(base: string, candidate: string): boolean {
|
|
74
|
-
const resolvedBase = path.resolve(base);
|
|
75
|
-
const resolvedCandidate = path.resolve(candidate);
|
|
76
|
-
return resolvedCandidate === resolvedBase || resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function commonRouteRoot(route: Pick<NestedRoute, "eventSink" | "controlInbox">): string {
|
|
80
|
-
return path.dirname(path.resolve(route.eventSink));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export function validateNestedRouteShape(route: NestedRoute): void {
|
|
84
|
-
assertSafeId("rootRunId", route.rootRunId);
|
|
85
|
-
assertSafeId("capabilityToken", route.capabilityToken);
|
|
86
|
-
if (!containedPath(NESTED_EVENTS_DIR, route.eventSink))
|
|
87
|
-
throw new Error("Nested event sink is outside the subagent nested event root.");
|
|
88
|
-
if (!containedPath(NESTED_EVENTS_DIR, route.controlInbox))
|
|
89
|
-
throw new Error("Nested control inbox is outside the subagent nested event root.");
|
|
90
|
-
if (commonRouteRoot(route) !== path.dirname(path.resolve(route.controlInbox)))
|
|
91
|
-
throw new Error("Nested event sink and control inbox must share one route root.");
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export function validateRouteShape(route: NestedRoute): void {
|
|
95
|
-
validateNestedRouteShape(route);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export function createNestedRoute(rootRunId: string): NestedRoute {
|
|
99
|
-
assertSafeId("rootRunId", rootRunId);
|
|
100
|
-
const capabilityToken = randomUUID();
|
|
101
|
-
const routeRoot = path.join(NESTED_EVENTS_DIR, `${rootRunId}-${capabilityToken}`);
|
|
102
|
-
const eventSink = path.join(routeRoot, "events");
|
|
103
|
-
const controlInbox = path.join(routeRoot, "controls");
|
|
104
|
-
fs.mkdirSync(eventSink, { recursive: true, mode: 0o700 });
|
|
105
|
-
fs.mkdirSync(controlInbox, { recursive: true, mode: 0o700 });
|
|
106
|
-
fs.writeFileSync(
|
|
107
|
-
path.join(routeRoot, ROUTE_FILE),
|
|
108
|
-
`${JSON.stringify({ rootRunId, capabilityToken, createdAt: Date.now() })}\n`,
|
|
109
|
-
{ mode: 0o600 },
|
|
110
|
-
);
|
|
111
|
-
const route = { rootRunId, eventSink, controlInbox, capabilityToken };
|
|
112
|
-
registerInProcessNestedRoute(route);
|
|
113
|
-
return route;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/** Whether any entry in the tree rooted at filePath has an mtime at or after cutoff, stopping at the first hit. */
|
|
117
|
-
export function hasEntryNewerThan(filePath: string, cutoff: number): boolean {
|
|
118
|
-
const stat = fs.statSync(filePath);
|
|
119
|
-
if (stat.mtimeMs >= cutoff) return true;
|
|
120
|
-
if (!stat.isDirectory()) return false;
|
|
121
|
-
return directoryHasEntryNewerThan(filePath, cutoff);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function directoryHasEntryNewerThan(dirPath: string, cutoff: number): boolean {
|
|
125
|
-
let entries: string[];
|
|
126
|
-
try {
|
|
127
|
-
entries = fs.readdirSync(dirPath);
|
|
128
|
-
} catch {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
for (const entry of entries) {
|
|
132
|
-
const childPath = path.join(dirPath, entry);
|
|
133
|
-
try {
|
|
134
|
-
const stat = fs.statSync(childPath);
|
|
135
|
-
if (stat.mtimeMs >= cutoff) return true;
|
|
136
|
-
if (stat.isDirectory() && directoryHasEntryNewerThan(childPath, cutoff)) return true;
|
|
137
|
-
} catch {
|
|
138
|
-
// Nested runtime cleanup is best-effort housekeeping.
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function cleanupOldSubdirectories(root: string, maxAgeDays: number): void {
|
|
145
|
-
let entries: string[];
|
|
146
|
-
try {
|
|
147
|
-
entries = fs.readdirSync(root);
|
|
148
|
-
} catch (error) {
|
|
149
|
-
if ((error as NodeJS.ErrnoException).code === "ENOENT") return;
|
|
150
|
-
throw error;
|
|
151
|
-
}
|
|
152
|
-
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
153
|
-
for (const entry of entries) {
|
|
154
|
-
const entryPath = path.join(root, entry);
|
|
155
|
-
try {
|
|
156
|
-
if (!hasEntryNewerThan(entryPath, cutoff)) fs.rmSync(entryPath, { recursive: true, force: true });
|
|
157
|
-
} catch {
|
|
158
|
-
// Keep startup resilient if a child process removes or rewrites an entry while scanning.
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export function cleanupOldNestedRuntimeDirs(maxAgeDays: number): void {
|
|
164
|
-
cleanupOldSubdirectories(NESTED_EVENTS_DIR, maxAgeDays);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export function resolveNestedRouteFromEnv(_env: NodeJS.ProcessEnv = process.env): NestedRoute | undefined {
|
|
168
|
-
return undefined;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
export function resolveInheritedNestedRouteFromEnv(_env: NodeJS.ProcessEnv = process.env): NestedRoute | undefined {
|
|
172
|
-
return undefined;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export function resolveNestedParentAddressFromEnv(
|
|
176
|
-
_env: NodeJS.ProcessEnv = process.env,
|
|
177
|
-
): { parentRunId: string; parentStepIndex?: number; depth: number; path: NestedPathEntry[] } | undefined {
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export function clampNumber(value: unknown): number | undefined {
|
|
182
|
-
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export function stringValue(value: unknown, max = 512): string | undefined {
|
|
186
|
-
return typeof value === "string" && value.length > 0 ? value.slice(0, max) : undefined;
|
|
187
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
|
|
3
|
-
const MAX_NESTED_ID_LENGTH = 128;
|
|
4
|
-
export const MAX_NESTED_PATH_ENTRIES = 4;
|
|
5
|
-
|
|
6
|
-
export type NestedPathEntry = { runId: string; stepIndex?: number; agent?: string };
|
|
7
|
-
|
|
8
|
-
export function isSafeNestedPathId(value: unknown): value is string {
|
|
9
|
-
return (
|
|
10
|
-
typeof value === "string" &&
|
|
11
|
-
value.length > 0 &&
|
|
12
|
-
value.length <= MAX_NESTED_ID_LENGTH &&
|
|
13
|
-
!path.isAbsolute(value) &&
|
|
14
|
-
!value.includes("/") &&
|
|
15
|
-
!value.includes("\\") &&
|
|
16
|
-
!value.includes("..")
|
|
17
|
-
);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function finiteNumber(value: unknown): number | undefined {
|
|
21
|
-
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function nonEmptyString(value: unknown, max: number): string | undefined {
|
|
25
|
-
return typeof value === "string" && value.length > 0 ? value.slice(0, max) : undefined;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function sanitizeNestedPath(value: unknown): NestedPathEntry[] {
|
|
29
|
-
if (!Array.isArray(value)) return [];
|
|
30
|
-
return value
|
|
31
|
-
.map((part) => {
|
|
32
|
-
if (!part || typeof part !== "object") return undefined;
|
|
33
|
-
const record = part as Record<string, unknown>;
|
|
34
|
-
if (!isSafeNestedPathId(record.runId)) return undefined;
|
|
35
|
-
return {
|
|
36
|
-
runId: record.runId,
|
|
37
|
-
...(finiteNumber(record.stepIndex) !== undefined ? { stepIndex: finiteNumber(record.stepIndex) } : {}),
|
|
38
|
-
...(nonEmptyString(record.agent, 128) ? { agent: nonEmptyString(record.agent, 128) } : {}),
|
|
39
|
-
};
|
|
40
|
-
})
|
|
41
|
-
.filter((part): part is NestedPathEntry => Boolean(part))
|
|
42
|
-
.slice(0, MAX_NESTED_PATH_ENTRIES);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function parseNestedPathEnv(value: string | undefined): NestedPathEntry[] {
|
|
46
|
-
if (!value) return [];
|
|
47
|
-
try {
|
|
48
|
-
return sanitizeNestedPath(JSON.parse(value) as unknown);
|
|
49
|
-
} catch {
|
|
50
|
-
return [];
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function encodeNestedPathEnv(value: NestedPathEntry[]): string {
|
|
55
|
-
const sanitized = sanitizeNestedPath(value);
|
|
56
|
-
return sanitized.length ? JSON.stringify(sanitized) : "";
|
|
57
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { NestedRunSummary, SubagentState } from "../../../shared/types.js";
|
|
2
|
-
import { MAX_NESTED_CHILDREN } from "./nested-core.js";
|
|
3
|
-
import { projectNestedEvents } from "./nested-registry.js";
|
|
4
|
-
import { terminal } from "./nested-sanitize.js";
|
|
5
|
-
|
|
6
|
-
export function attachRootChildrenToSteps<T extends { children?: NestedRunSummary[]; index?: number }>(
|
|
7
|
-
rootRunId: string,
|
|
8
|
-
steps: T[] | undefined,
|
|
9
|
-
children: NestedRunSummary[] | undefined,
|
|
10
|
-
): void {
|
|
11
|
-
if (!steps?.length) return;
|
|
12
|
-
for (const step of steps) step.children = undefined;
|
|
13
|
-
if (!children?.length) return;
|
|
14
|
-
for (const child of children) {
|
|
15
|
-
if (child.parentRunId !== rootRunId || child.parentStepIndex === undefined) continue;
|
|
16
|
-
const step = steps.find((candidate, index) => (candidate.index ?? index) === child.parentStepIndex);
|
|
17
|
-
if (!step) continue;
|
|
18
|
-
step.children ??= [];
|
|
19
|
-
step.children = [...step.children.filter((existing) => existing.id !== child.id), child].slice(
|
|
20
|
-
0,
|
|
21
|
-
MAX_NESTED_CHILDREN,
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function updateForegroundNestedProjection(
|
|
27
|
-
control: SubagentState["foregroundControls"] extends Map<string, infer T> ? T : never,
|
|
28
|
-
): void {
|
|
29
|
-
if (!control.nestedRoute) return;
|
|
30
|
-
const registry = projectNestedEvents(control.nestedRoute);
|
|
31
|
-
control.nestedChildren = registry.children;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function hasLiveNestedDescendants(children: NestedRunSummary[] | undefined): boolean {
|
|
35
|
-
if (!children?.length) return false;
|
|
36
|
-
for (const child of children) {
|
|
37
|
-
if (!terminal(child.state)) return true;
|
|
38
|
-
if (hasLiveNestedDescendants(child.children)) return true;
|
|
39
|
-
if (hasLiveNestedDescendants(child.steps?.flatMap((step) => step.children ?? []))) return true;
|
|
40
|
-
}
|
|
41
|
-
return false;
|
|
42
|
-
}
|