@sayknow-cli/coding-agent 0.4.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +112 -0
- package/dist/types/capability/index.d.ts +10 -20
- package/dist/types/capability/types.d.ts +3 -0
- package/dist/types/cli/args.d.ts +0 -2
- package/dist/types/cli/read-cli.d.ts +1 -0
- package/dist/types/cli.d.ts +9 -1
- package/dist/types/commands/daemon.d.ts +2 -2
- package/dist/types/commands/deep-interview.d.ts +9 -0
- package/dist/types/commands/harness.d.ts +22 -0
- package/dist/types/commands/read.d.ts +6 -0
- package/dist/types/commands/sdk.d.ts +20 -2
- package/dist/types/config/keybindings.d.ts +34 -4
- package/dist/types/config/model-profile-contract.d.ts +40 -0
- package/dist/types/config/model-profiles.d.ts +2 -3
- package/dist/types/config/model-registry.d.ts +5 -0
- package/dist/types/config/provider-auth-health.d.ts +14 -0
- package/dist/types/config/provider-ranking.d.ts +59 -0
- package/dist/types/config/settings-schema.d.ts +156 -10
- package/dist/types/config/settings.d.ts +3 -0
- package/dist/types/edit/modes/patch.d.ts +13 -0
- package/dist/types/edit/path-mutation-lock.d.ts +15 -0
- package/dist/types/eval/py/executor.d.ts +1 -1
- package/dist/types/eval/py/runner-artifact.d.ts +8 -0
- package/dist/types/eval/py/tool-bridge.d.ts +1 -2
- package/dist/types/extensibility/extensions/types.d.ts +43 -2
- package/dist/types/extensibility/shared-events.d.ts +6 -0
- package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
- package/dist/types/main.d.ts +33 -2
- package/dist/types/memories/index.d.ts +2 -0
- package/dist/types/modes/acp/acp-agent.d.ts +22 -9
- package/dist/types/modes/components/assistant-message.d.ts +3 -1
- package/dist/types/modes/components/btw-panel.d.ts +1 -0
- package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
- package/dist/types/modes/components/queue-pane.d.ts +8 -0
- package/dist/types/modes/components/queued-message-selector.d.ts +6 -0
- package/dist/types/modes/components/read-tool-group.d.ts +4 -4
- package/dist/types/modes/components/runtime-mcp-add-wizard.d.ts +2 -1
- package/dist/types/modes/components/session-observer-overlay.d.ts +4 -0
- package/dist/types/modes/components/settings-selector.d.ts +2 -0
- package/dist/types/modes/components/tool-execution.d.ts +8 -0
- package/dist/types/modes/components/tool-status-header.d.ts +4 -2
- package/dist/types/modes/components/welcome.d.ts +5 -0
- package/dist/types/modes/controllers/btw-controller.d.ts +5 -0
- package/dist/types/modes/controllers/command-controller.d.ts +2 -0
- package/dist/types/modes/controllers/event-controller.d.ts +3 -0
- package/dist/types/modes/interactive-mode.d.ts +13 -2
- package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
- package/dist/types/modes/prompt-action-autocomplete.d.ts +6 -1
- package/dist/types/modes/prompt-suggestion-controller.d.ts +35 -0
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +2 -2
- package/dist/types/modes/types.d.ts +6 -0
- package/dist/types/modes/utils/hotkeys-markdown.d.ts +2 -1
- package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
- package/dist/types/runtime/memory-domain.d.ts +9 -0
- package/dist/types/runtime/memory-guard-contract.d.ts +71 -0
- package/dist/types/runtime/memory-guard.d.ts +39 -0
- package/dist/types/runtime/memory-limit.d.ts +11 -0
- package/dist/types/runtime-mcp/content-limits.d.ts +7 -0
- package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +1 -1
- package/dist/types/runtime-mcp/manager.d.ts +9 -1
- package/dist/types/runtime-mcp/oauth-flow.d.ts +0 -5
- package/dist/types/runtime-mcp/plugin-network-boundary.d.ts +14 -0
- package/dist/types/runtime-mcp/redaction.d.ts +2 -0
- package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
- package/dist/types/sdk/acp/final-text.d.ts +19 -0
- package/dist/types/sdk/acp/mcp.d.ts +23 -0
- package/dist/types/sdk/broker/broker.d.ts +2 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +13 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +9 -1
- package/dist/types/sdk/bus/config-commands.d.ts +2 -2
- package/dist/types/sdk/bus/config.d.ts +2 -0
- package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +1 -0
- package/dist/types/sdk/bus/daemon-paths.d.ts +1 -0
- package/dist/types/sdk/bus/index.d.ts +52 -4
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +37 -0
- package/dist/types/sdk/bus/lifecycle-commands.d.ts +5 -4
- package/dist/types/sdk/bus/notification-orchestration.d.ts +1 -0
- package/dist/types/sdk/bus/notification-service.d.ts +34 -0
- package/dist/types/sdk/bus/operator-runtime.d.ts +1 -0
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +106 -0
- package/dist/types/sdk/bus/rate-limit-pool.d.ts +2 -0
- package/dist/types/sdk/bus/reconciliation-store.d.ts +65 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +33 -9
- package/dist/types/sdk/bus/telegram-daemon-control.d.ts +5 -1
- package/dist/types/sdk/bus/telegram-daemon.d.ts +286 -12
- package/dist/types/sdk/bus/telegram-reference.d.ts +2 -0
- package/dist/types/sdk/bus/topic-registry.d.ts +88 -2
- package/dist/types/sdk/client/discovery.d.ts +2 -0
- package/dist/types/sdk/client/liveness.d.ts +7 -0
- package/dist/types/sdk/host/control/operations.d.ts +3 -2
- package/dist/types/sdk/host/host.d.ts +3 -1
- package/dist/types/sdk/host/query/handlers.d.ts +14 -0
- package/dist/types/sdk/index.d.ts +2 -0
- package/dist/types/sdk/lifecycle-session.d.ts +10 -1
- package/dist/types/sdk/prompt-status.d.ts +88 -0
- package/dist/types/sdk/session-directory.d.ts +1 -1
- package/dist/types/sdk/session.d.ts +7 -0
- package/dist/types/sdk/startup-capability.d.ts +9 -0
- package/dist/types/sdk/transport/auth-preface.d.ts +9 -0
- package/dist/types/sdk/transport/index.d.ts +12 -0
- package/dist/types/sdk/transport/relay.d.ts +43 -0
- package/dist/types/sdk/transport/serve-cli.d.ts +4 -0
- package/dist/types/sdk/transport/socket.d.ts +7 -0
- package/dist/types/sdk/transport/stdio.d.ts +3 -0
- package/dist/types/session/agent-session.d.ts +83 -24
- package/dist/types/session/btw-contract.d.ts +16 -0
- package/dist/types/session/fallback-chain-controller.d.ts +18 -2
- package/dist/types/session/internal/managed-session-scope.d.ts +70 -10
- package/dist/types/session/internal/managed-session-storage.d.ts +34 -12
- package/dist/types/session/internal/native-publish-outcome.d.ts +48 -0
- package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
- package/dist/types/session/session-manager.d.ts +89 -18
- package/dist/types/session/session-storage.d.ts +31 -0
- package/dist/types/session/streaming-output.d.ts +60 -5
- package/dist/types/setup/credential-import.d.ts +5 -1
- package/dist/types/setup/provider-onboarding.d.ts +2 -0
- package/dist/types/skc-runtime/deep-interview-runtime.d.ts +1 -1
- package/dist/types/skc-runtime/deep-interview-stage.d.ts +37 -0
- package/dist/types/skc-runtime/gc-runtime.d.ts +1 -1
- package/dist/types/skc-runtime/linux-proc.d.ts +22 -14
- package/dist/types/skc-runtime/memory-guard-owner-claims.d.ts +47 -0
- package/dist/types/skc-runtime/ralplan-runtime.d.ts +112 -1
- package/dist/types/skc-runtime/repository-binding.d.ts +63 -0
- package/dist/types/skc-runtime/state-runtime.d.ts +3 -1
- package/dist/types/skc-runtime/state-writer.d.ts +5 -1
- package/dist/types/skc-runtime/team-launch.d.ts +1 -1
- package/dist/types/skc-runtime/team-runtime.d.ts +9 -2
- package/dist/types/skc-runtime/team-store.d.ts +12 -0
- package/dist/types/skc-runtime/team-worker-memory-guard.d.ts +92 -0
- package/dist/types/skc-runtime/tmux-owner-isolation.d.ts +7 -0
- package/dist/types/skc-runtime/ultragoal-guard.d.ts +6 -5
- package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +28 -0
- package/dist/types/skc-runtime/ultragoal-runtime.d.ts +43 -5
- package/dist/types/skill-state/workflow-hud.d.ts +3 -0
- package/dist/types/ssh/utils.d.ts +1 -0
- package/dist/types/task/discovery.d.ts +3 -1
- package/dist/types/task/executor.d.ts +6 -0
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/task/provider-retry-status.d.ts +13 -0
- package/dist/types/task/receipt.d.ts +2 -0
- package/dist/types/task/types.d.ts +133 -0
- package/dist/types/task/ultragoal-redteam-activation.d.ts +33 -0
- package/dist/types/tools/browser/launch.d.ts +7 -0
- package/dist/types/tools/fetch.d.ts +22 -9
- package/dist/types/tools/image-gen.d.ts +63 -1
- package/dist/types/tools/index.d.ts +7 -1
- package/dist/types/tools/output-meta.d.ts +21 -1
- package/dist/types/tools/read-internals.d.ts +12 -0
- package/dist/types/tools/read.d.ts +45 -1
- package/dist/types/tools/resource-gc.d.ts +23 -0
- package/dist/types/tools/skill-discovery.d.ts +7 -0
- package/dist/types/tools/sqlite-reader.d.ts +7 -0
- package/dist/types/tools/tool-result.d.ts +7 -1
- package/dist/types/utils/prompt-suggestion.d.ts +33 -0
- package/dist/types/utils/shell-snapshot.d.ts +12 -0
- package/dist/types/web/insane/bridge.d.ts +1 -0
- package/dist/types/web/insane/url-guard.d.ts +17 -0
- package/package.json +8 -12
- package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
- package/scripts/capture-platform-shortcut-labels-showcase.ts +342 -0
- package/scripts/capture-sticky-viewport-showcase.ts +292 -0
- package/scripts/compile-args.ts +0 -1
- package/scripts/dogfood-repository-binding.ts +209 -0
- package/scripts/generate-docs-index.ts +4 -1
- package/scripts/generate-sdk-operation-inventory.ts +9 -0
- package/scripts/run-test-manifest.ts +6 -4
- package/scripts/verify-skc-sdk-canonicalization.ts +122 -18
- package/scripts/verify-sticky-viewport-showcase.ts +611 -0
- package/src/capability/index.ts +58 -42
- package/src/capability/types.ts +3 -0
- package/src/cli/args.ts +16 -100
- package/src/cli/fast-help.ts +1 -1
- package/src/cli/mcp-cli.ts +4 -21
- package/src/cli/notify-cli.ts +6 -38
- package/src/cli/read-cli.ts +2 -1
- package/src/cli/setup-cli.ts +10 -4
- package/src/cli.ts +133 -11
- package/src/commands/daemon.ts +22 -5
- package/src/commands/deep-interview.ts +26 -1
- package/src/commands/harness.ts +35 -12
- package/src/commands/read.ts +11 -2
- package/src/commands/sdk.ts +134 -17
- package/src/commands/team.ts +1 -1
- package/src/commit/agentic/index.ts +3 -3
- package/src/commit/map-reduce/index.ts +2 -2
- package/src/config/keybindings.ts +158 -25
- package/src/config/model-profile-contract.ts +174 -0
- package/src/config/model-profiles.ts +51 -10
- package/src/config/model-registry.ts +24 -4
- package/src/config/model-resolver.ts +2 -2
- package/src/config/provider-auth-health.ts +42 -0
- package/src/config/provider-ranking.ts +119 -0
- package/src/config/settings-schema.ts +157 -10
- package/src/config/settings.ts +254 -108
- package/src/coordinator-mcp/model-preset.ts +21 -74
- package/src/defaults/skc/skills/deep-interview/SKILL.md +147 -24
- package/src/defaults/skc/skills/ralplan/SKILL.md +91 -34
- package/src/defaults/skc/skills/team/SKILL.md +1 -1
- package/src/defaults/skc/skills/ultragoal/SKILL.md +68 -17
- package/src/discovery/ssh.ts +12 -1
- package/src/edit/index.ts +3 -6
- package/src/edit/modes/patch.ts +38 -1
- package/src/edit/modes/replace.ts +42 -0
- package/src/edit/path-mutation-lock.ts +112 -0
- package/src/eval/js/tool-bridge.ts +1 -1
- package/src/eval/py/executor.ts +37 -13
- package/src/eval/py/kernel.ts +1 -21
- package/src/eval/py/prelude.py +2 -2
- package/src/eval/py/runner-artifact.ts +84 -0
- package/src/eval/py/tool-bridge.ts +34 -18
- package/src/extensibility/extensions/runner.ts +4 -0
- package/src/extensibility/extensions/types.ts +42 -4
- package/src/extensibility/plugins/marketplace/fetcher.ts +191 -7
- package/src/extensibility/shared-events.ts +5 -0
- package/src/extensibility/skc-plugins/runtime-adapters.ts +2 -1
- package/src/hooks/native-skill-hook.ts +17 -4
- package/src/internal-urls/docs-index.generated.ts +17 -16
- package/src/internal-urls/local-protocol.ts +87 -25
- package/src/internal-urls/local-root-gc.ts +127 -0
- package/src/internal-urls/mcp-protocol.ts +73 -11
- package/src/main.ts +120 -42
- package/src/memories/index.ts +10 -0
- package/src/modes/DESIGN.md +52 -0
- package/src/modes/acp/acp-agent.ts +647 -83
- package/src/modes/acp/acp-event-mapper.ts +106 -12
- package/src/modes/acp/acp-mode.ts +39 -3
- package/src/modes/action-registry.ts +1 -1
- package/src/modes/components/assistant-message.ts +123 -22
- package/src/modes/components/btw-panel.ts +82 -16
- package/src/modes/components/irc-sidebar.ts +176 -62
- package/src/modes/components/model-selector.ts +61 -4
- package/src/modes/components/notifications-settings-editor.ts +1 -1
- package/src/modes/components/oauth-selector.ts +42 -12
- package/src/modes/components/plan-preview-overlay.ts +1 -1
- package/src/modes/components/queue-pane.ts +55 -9
- package/src/modes/components/queued-message-selector.ts +53 -10
- package/src/modes/components/read-tool-group.ts +82 -14
- package/src/modes/components/runtime-mcp-add-wizard.ts +5 -0
- package/src/modes/components/sayknow-pet-widget.ts +27 -8
- package/src/modes/components/session-observer-overlay.ts +187 -32
- package/src/modes/components/settings-selector.ts +60 -18
- package/src/modes/components/tool-execution.ts +138 -27
- package/src/modes/components/tool-status-header.ts +26 -8
- package/src/modes/components/welcome.ts +50 -23
- package/src/modes/controllers/btw-controller.ts +119 -36
- package/src/modes/controllers/command-controller.ts +101 -54
- package/src/modes/controllers/event-controller.ts +119 -27
- package/src/modes/controllers/extension-ui-controller.ts +23 -12
- package/src/modes/controllers/input-controller.ts +100 -8
- package/src/modes/controllers/runtime-mcp-command-controller.ts +29 -6
- package/src/modes/controllers/selector-controller.ts +4 -1
- package/src/modes/interactive-mode.ts +201 -60
- package/src/modes/irc-observation-ledger.ts +71 -15
- package/src/modes/prompt-action-autocomplete.ts +32 -13
- package/src/modes/prompt-suggestion-controller.ts +96 -0
- package/src/modes/runtime-init.ts +20 -2
- package/src/modes/shared/agent-wire/command-dispatch.ts +3 -3
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +2 -2
- package/src/modes/types.ts +6 -0
- package/src/modes/utils/hotkeys-markdown.ts +64 -36
- package/src/modes/utils/ui-helpers.ts +99 -4
- package/src/prompts/agent-fragments/restricted-bash.md +1 -1
- package/src/prompts/agents/architect.md +17 -3
- package/src/prompts/agents/critic.md +17 -2
- package/src/prompts/agents/executor.md +1 -1
- package/src/prompts/agents/planner.md +8 -1
- package/src/prompts/system/btw-user.md +3 -8
- package/src/prompts/system/prompt-suggestion-system.md +32 -0
- package/src/prompts/system/system-prompt.md +6 -3
- package/src/prompts/tools/cron.md +3 -1
- package/src/prompts/tools/read.md +4 -2
- package/src/prompts/tools/skill-discovery.md +1 -0
- package/src/runtime/memory-domain.ts +66 -0
- package/src/runtime/memory-guard-contract.ts +73 -0
- package/src/runtime/memory-guard.ts +292 -0
- package/src/runtime/memory-limit.ts +50 -0
- package/src/runtime-mcp/client.ts +41 -55
- package/src/runtime-mcp/content-limits.ts +71 -0
- package/src/runtime-mcp/discoverable-tool-metadata.ts +1 -1
- package/src/runtime-mcp/json-rpc.ts +28 -11
- package/src/runtime-mcp/manager.ts +77 -59
- package/src/runtime-mcp/oauth-flow.ts +0 -72
- package/src/runtime-mcp/plugin-network-boundary.ts +101 -0
- package/src/runtime-mcp/redaction.ts +30 -0
- package/src/runtime-mcp/smithery-auth.ts +17 -2
- package/src/runtime-mcp/smithery-connect.ts +11 -1
- package/src/runtime-mcp/transports/http.ts +63 -22
- package/src/sdk/acp/adapter.ts +8 -1
- package/src/sdk/acp/final-text.ts +40 -0
- package/src/sdk/acp/mcp.ts +26 -0
- package/src/sdk/broker/broker.ts +34 -20
- package/src/sdk/broker/identity.ts +22 -12
- package/src/sdk/broker/lifecycle.ts +293 -43
- package/src/sdk/broker/session-index.ts +11 -1
- package/src/sdk/bus/chat-daemon-cli.ts +2 -2
- package/src/sdk/bus/chat-daemon-control.ts +22 -5
- package/src/sdk/bus/config-commands.ts +2 -2
- package/src/sdk/bus/config.ts +10 -2
- package/src/sdk/bus/control-drain-lease.ts +104 -0
- package/src/sdk/bus/conversation-store.ts +40 -6
- package/src/sdk/bus/daemon-paths.ts +2 -0
- package/src/sdk/bus/index.ts +793 -121
- package/src/sdk/bus/kind-aware-reconciliation.ts +242 -0
- package/src/sdk/bus/lifecycle-commands.ts +63 -10
- package/src/sdk/bus/lifecycle-control-runtime.ts +11 -2
- package/src/sdk/bus/lifecycle-orchestrator.ts +32 -1
- package/src/sdk/bus/notification-orchestration.ts +12 -0
- package/src/sdk/bus/notification-service.ts +87 -25
- package/src/sdk/bus/operator-runtime.ts +31 -5
- package/src/sdk/bus/prompt-reconciliation.ts +240 -0
- package/src/sdk/bus/rate-limit-pool.ts +8 -0
- package/src/sdk/bus/recent-activity.ts +90 -26
- package/src/sdk/bus/reconciliation-store.ts +224 -0
- package/src/sdk/bus/telegram-cli.ts +6 -13
- package/src/sdk/bus/telegram-daemon-cli.ts +8 -3
- package/src/sdk/bus/telegram-daemon-contract.ts +34 -9
- package/src/sdk/bus/telegram-daemon-control.ts +161 -40
- package/src/sdk/bus/telegram-daemon.ts +3649 -593
- package/src/sdk/bus/telegram-reference.ts +20 -2
- package/src/sdk/bus/topic-registry.ts +451 -12
- package/src/sdk/cli/session-cli.ts +15 -2
- package/src/sdk/client/discovery.ts +19 -3
- package/src/sdk/client/liveness.ts +49 -0
- package/src/sdk/host/control/dispatch.ts +8 -2
- package/src/sdk/host/control/operations.ts +3 -2
- package/src/sdk/host/host.ts +27 -9
- package/src/sdk/host/query/handlers.ts +125 -5
- package/src/sdk/index.ts +12 -0
- package/src/sdk/lifecycle-session.ts +19 -3
- package/src/sdk/mcp/server.ts +46 -18
- package/src/sdk/prompt-status.ts +97 -0
- package/src/sdk/protocol/operation-inventory.generated.json +145 -0
- package/src/sdk/protocol/operation-registry.ts +24 -4
- package/src/sdk/session-directory.ts +5 -1
- package/src/sdk/session.ts +69 -8
- package/src/sdk/startup-capability.ts +15 -1
- package/src/sdk/transport/auth-preface.ts +82 -0
- package/src/sdk/transport/index.ts +18 -0
- package/src/sdk/transport/relay.ts +252 -0
- package/src/sdk/transport/serve-cli.ts +105 -0
- package/src/sdk/transport/socket.ts +197 -0
- package/src/sdk/transport/stdio.ts +17 -0
- package/src/session/agent-session.ts +1112 -314
- package/src/session/blob-store.ts +25 -7
- package/src/session/btw-contract.ts +59 -0
- package/src/session/fallback-chain-controller.ts +47 -8
- package/src/session/internal/managed-session-scope.ts +1426 -259
- package/src/session/internal/managed-session-storage.ts +414 -238
- package/src/session/internal/native-publish-outcome.ts +271 -0
- package/src/session/memory-guard-checkpoint-participant.ts +131 -0
- package/src/session/session-manager.ts +2079 -469
- package/src/session/session-storage.ts +151 -11
- package/src/session/streaming-output.ts +262 -43
- package/src/setup/credential-import.ts +28 -3
- package/src/setup/provider-onboarding.ts +49 -5
- package/src/setup/provider-presets.json +2 -1
- package/src/skc-runtime/deep-interview-runtime.ts +303 -36
- package/src/skc-runtime/deep-interview-stage.ts +1016 -0
- package/src/skc-runtime/deep-interview-state.ts +8 -5
- package/src/skc-runtime/gc-render.ts +1 -0
- package/src/skc-runtime/gc-runtime.ts +11 -1
- package/src/skc-runtime/linux-proc.ts +70 -36
- package/src/skc-runtime/managed-owner-supervisor.ts +83 -4
- package/src/skc-runtime/memory-guard-owner-claims.ts +389 -0
- package/src/skc-runtime/ralplan-runtime.ts +1057 -75
- package/src/skc-runtime/repository-binding.ts +267 -0
- package/src/skc-runtime/session-state-sidecar.ts +25 -9
- package/src/skc-runtime/state-runtime.ts +50 -12
- package/src/skc-runtime/state-writer.ts +68 -56
- package/src/skc-runtime/team-launch.ts +34 -5
- package/src/skc-runtime/team-runtime.ts +41 -1
- package/src/skc-runtime/team-store.ts +32 -0
- package/src/skc-runtime/team-worker-memory-guard.ts +363 -0
- package/src/skc-runtime/team-workers.ts +1 -0
- package/src/skc-runtime/tmux-common.ts +13 -2
- package/src/skc-runtime/tmux-owner-isolation.ts +20 -1
- package/src/skc-runtime/tmux-sessions.ts +45 -6
- package/src/skc-runtime/ultragoal-guard.ts +93 -15
- package/src/skc-runtime/ultragoal-receipt-freshness.ts +123 -0
- package/src/skc-runtime/ultragoal-runtime.ts +469 -38
- package/src/skc-runtime/workflow-manifest.generated.json +195 -5
- package/src/skc-runtime/workflow-manifest.ts +67 -3
- package/src/skill-state/workflow-hud.ts +25 -2
- package/src/skill-state/workflow-mutation-guard.ts +104 -12
- package/src/slash-commands/builtin-registry.ts +1 -1
- package/src/ssh/utils.ts +14 -0
- package/src/task/discovery.ts +8 -2
- package/src/task/executor.ts +165 -47
- package/src/task/index.ts +123 -15
- package/src/task/provider-retry-status.ts +88 -0
- package/src/task/receipt.ts +3 -0
- package/src/task/render.ts +45 -26
- package/src/task/skc-command.ts +2 -2
- package/src/task/types.ts +55 -10
- package/src/task/ultragoal-redteam-activation.ts +75 -0
- package/src/tools/ask.ts +1 -1
- package/src/tools/ast-edit.ts +2 -2
- package/src/tools/bash-allowed-prefixes.ts +45 -1
- package/src/tools/bash-pty-selection.ts +2 -2
- package/src/tools/browser/launch.ts +41 -6
- package/src/tools/browser/screenshot-format.ts +6 -1
- package/src/tools/cron.ts +1 -1
- package/src/tools/fetch.ts +127 -154
- package/src/tools/image-gen.ts +476 -23
- package/src/tools/index.ts +7 -1
- package/src/tools/output-meta.ts +176 -9
- package/src/tools/path-utils.ts +5 -1
- package/src/tools/read-internals.ts +44 -0
- package/src/tools/read.ts +1544 -310
- package/src/tools/resource-gc.ts +665 -125
- package/src/tools/skill-discovery.ts +39 -3
- package/src/tools/sqlite-reader.ts +63 -5
- package/src/tools/subagent-render.ts +74 -16
- package/src/tools/subagent.ts +2 -0
- package/src/tools/tool-result.ts +14 -1
- package/src/utils/edit-mode.ts +2 -2
- package/src/utils/pasted-image-path.ts +15 -6
- package/src/utils/prompt-suggestion.ts +265 -0
- package/src/utils/shell-snapshot.ts +173 -63
- package/src/utils/sixel.ts +3 -3
- package/src/web/insane/bridge.ts +5 -1
- package/src/web/insane/url-guard.ts +140 -27
- package/src/web/scrapers/docs-rs.ts +30 -5
- package/src/web/scrapers/types.ts +19 -49
- package/src/web/scrapers/utils.ts +12 -26
- package/src/web/search/providers/codex.ts +1 -1
- package/src/workflow/workflow-intent-diff.ts +4 -1
|
@@ -2,6 +2,10 @@ import * as fs from "node:fs/promises";
|
|
|
2
2
|
import { DEFAULT_ULTRAGOAL_OBJECTIVE } from "./goal-mode-request";
|
|
3
3
|
import { resolveSkcSessionForRead, SessionResolutionError } from "./session-resolution";
|
|
4
4
|
import {
|
|
5
|
+
findCleanPauseCriticVerdict,
|
|
6
|
+
findLedgerReceiptEvent,
|
|
7
|
+
terminalCriticCeilingReached,
|
|
8
|
+
terminalCriticGateOverridden,
|
|
5
9
|
validateDeferredMemberReceiptFresh,
|
|
6
10
|
validateReceiptFreshBase,
|
|
7
11
|
validateSupersededFinalAggregateReceipt,
|
|
@@ -32,6 +36,7 @@ export type UltragoalGuardState =
|
|
|
32
36
|
| "active_dirty_quality_gate"
|
|
33
37
|
| "active_review_blocked_unrecorded"
|
|
34
38
|
| "active_review_blocked_recorded"
|
|
39
|
+
| "active_missing_critic_verdict"
|
|
35
40
|
| "unreadable_fail_closed";
|
|
36
41
|
|
|
37
42
|
export interface UltragoalGuardDiagnostic {
|
|
@@ -71,12 +76,12 @@ function objectiveMatches(currentGoal: CurrentGoalLike, plan: UltragoalPlan, ses
|
|
|
71
76
|
return plan.goals.some(goal => goal.objective === normalized);
|
|
72
77
|
}
|
|
73
78
|
|
|
74
|
-
function isKnownUltragoalObjective(currentObjective: string): boolean {
|
|
79
|
+
export function isKnownUltragoalObjective(currentObjective: string): boolean {
|
|
75
80
|
const normalized = currentObjective.trim();
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
// Exact default aggregate objective only. Substring path sniffing previously
|
|
82
|
+
// treated arbitrary objectives that merely mentioned goals.json/ledger paths
|
|
83
|
+
// as Ultragoal-owned, which could mis-arm guards. Prefer fail-closed.
|
|
84
|
+
return normalized === DEFAULT_ULTRAGOAL_OBJECTIVE;
|
|
80
85
|
}
|
|
81
86
|
|
|
82
87
|
async function ultragoalReadPaths(
|
|
@@ -256,6 +261,31 @@ export function validateCompletionReceipt(input: {
|
|
|
256
261
|
goalId: input.goal.id,
|
|
257
262
|
};
|
|
258
263
|
}
|
|
264
|
+
if (input.receiptKind === "final-aggregate") {
|
|
265
|
+
const checkpointEvent = findLedgerReceiptEvent(input.ledger, receipt);
|
|
266
|
+
if (checkpointEvent) {
|
|
267
|
+
const qualityGate =
|
|
268
|
+
typeof checkpointEvent.qualityGateJson === "object" &&
|
|
269
|
+
checkpointEvent.qualityGateJson !== null &&
|
|
270
|
+
!Array.isArray(checkpointEvent.qualityGateJson)
|
|
271
|
+
? (checkpointEvent.qualityGateJson as Record<string, unknown>)
|
|
272
|
+
: undefined;
|
|
273
|
+
const criticReview =
|
|
274
|
+
qualityGate &&
|
|
275
|
+
typeof qualityGate.criticReview === "object" &&
|
|
276
|
+
qualityGate.criticReview !== null &&
|
|
277
|
+
!Array.isArray(qualityGate.criticReview)
|
|
278
|
+
? (qualityGate.criticReview as Record<string, unknown>)
|
|
279
|
+
: undefined;
|
|
280
|
+
if (criticReview?.verdict !== "OKAY") {
|
|
281
|
+
return {
|
|
282
|
+
state: "active_missing_critic_verdict",
|
|
283
|
+
message: `Ultragoal ${input.goal.id} final aggregate receipt checkpoint requires criticReview with verdict OKAY.`,
|
|
284
|
+
goalId: input.goal.id,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
259
289
|
if (receipt.validationBatch?.role === "deferred-member") {
|
|
260
290
|
return validateDeferredMemberReceiptFresh({
|
|
261
291
|
plan: input.plan,
|
|
@@ -274,6 +304,15 @@ export function validateCompletionReceipt(input: {
|
|
|
274
304
|
receiptKind: input.receiptKind,
|
|
275
305
|
});
|
|
276
306
|
if (baseDiagnostic) return baseDiagnostic;
|
|
307
|
+
if (input.receiptKind === "final-aggregate") {
|
|
308
|
+
if (terminalCriticCeilingReached(input.ledger) && !terminalCriticGateOverridden(input.ledger)) {
|
|
309
|
+
return {
|
|
310
|
+
state: "active_stale_receipt",
|
|
311
|
+
message: `Ultragoal ${input.goal.id} final aggregate receipt is stale because the terminal-critic ceiling is currently reached.`,
|
|
312
|
+
goalId: input.goal.id,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
}
|
|
277
316
|
if (receipt.validationBatch?.role === "batch-close") {
|
|
278
317
|
for (const memberId of receipt.validationBatch.memberIds) {
|
|
279
318
|
const member = input.plan.goals.find(goal => goal.id === memberId);
|
|
@@ -856,10 +895,10 @@ export interface UltragoalPauseBlockDiagnostic {
|
|
|
856
895
|
|
|
857
896
|
/**
|
|
858
897
|
* While an Ultragoal run is active, `goal({"op":"pause"})` is only allowed when the
|
|
859
|
-
* current durable Ultragoal state is readable
|
|
860
|
-
*
|
|
861
|
-
*
|
|
862
|
-
* blocks pause rather than silently allowing a give-up.
|
|
898
|
+
* current durable Ultragoal state is readable, the latest `blocker_classified`
|
|
899
|
+
* event is `human_blocked`, and a later fresh clean pause terminal critic verdict is bound to
|
|
900
|
+
* that exact classification. Reads fail closed so unreadable durable state or
|
|
901
|
+
* ledger data blocks pause rather than silently allowing a give-up.
|
|
863
902
|
*/
|
|
864
903
|
export async function isUltragoalPauseBlocked(cwd: string): Promise<UltragoalPauseBlockDiagnostic> {
|
|
865
904
|
if (!cwd) return { blocked: false, reason: "No cwd to resolve durable Ultragoal state." };
|
|
@@ -880,14 +919,53 @@ export async function isUltragoalPauseBlocked(cwd: string): Promise<UltragoalPau
|
|
|
880
919
|
reason: `Unable to read durable Ultragoal ledger: ${error instanceof Error ? error.message : String(error)}`,
|
|
881
920
|
};
|
|
882
921
|
}
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
922
|
+
if (terminalCriticCeilingReached(ledger) && !terminalCriticGateOverridden(ledger)) {
|
|
923
|
+
return {
|
|
924
|
+
blocked: true,
|
|
925
|
+
reason:
|
|
926
|
+
"The Ultragoal run hit the terminal-critic ceiling; requires human/leader `skc ultragoal record-critic-gate-override` before further terminal attempts.",
|
|
927
|
+
};
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
const classification = [...ledger].reverse().find(event => event.event === "blocker_classified");
|
|
931
|
+
if (classification?.classification !== "human_blocked") {
|
|
932
|
+
return {
|
|
933
|
+
blocked: true,
|
|
934
|
+
reason:
|
|
935
|
+
"An Ultragoal run is active. Pausing requires the latest blocker_classified event to be human_blocked, followed by a bound clean pause terminal critic verdict.",
|
|
936
|
+
};
|
|
937
|
+
}
|
|
938
|
+
if (typeof classification.eventId !== "string" || !classification.eventId.trim()) {
|
|
939
|
+
return {
|
|
940
|
+
blocked: true,
|
|
941
|
+
reason:
|
|
942
|
+
"Pausing requires a later fresh clean pause terminal critic OKAY verdict bound to the latest human_blocked blocker_classified event; a REJECT/ITERATE/stale/missing verdict blocks the pause and the run must keep executing.",
|
|
943
|
+
};
|
|
944
|
+
}
|
|
945
|
+
let plan: UltragoalPlan | null;
|
|
946
|
+
try {
|
|
947
|
+
plan = await readUltragoalPlan(cwd);
|
|
948
|
+
} catch (error) {
|
|
949
|
+
return {
|
|
950
|
+
blocked: true,
|
|
951
|
+
reason: `Unable to read durable Ultragoal plan for pause critic verdict: ${error instanceof Error ? error.message : String(error)}`,
|
|
952
|
+
};
|
|
953
|
+
}
|
|
954
|
+
if (!plan) {
|
|
955
|
+
return { blocked: true, reason: "Unable to read durable Ultragoal plan for pause critic verdict." };
|
|
956
|
+
}
|
|
957
|
+
const criticVerdict = findCleanPauseCriticVerdict(plan, ledger, classification.eventId);
|
|
958
|
+
if (!criticVerdict) {
|
|
959
|
+
return {
|
|
960
|
+
blocked: true,
|
|
961
|
+
reason:
|
|
962
|
+
"Pausing requires a later fresh clean pause terminal critic OKAY verdict bound to the latest human_blocked blocker_classified event; a REJECT/ITERATE/stale/missing verdict blocks the pause and the run must keep executing.",
|
|
963
|
+
};
|
|
886
964
|
}
|
|
887
965
|
return {
|
|
888
|
-
blocked:
|
|
966
|
+
blocked: false,
|
|
889
967
|
reason:
|
|
890
|
-
"
|
|
968
|
+
"Latest blocker_classified event is human_blocked with a later fresh clean bound pause terminal critic verdict.",
|
|
891
969
|
};
|
|
892
970
|
}
|
|
893
971
|
|
|
@@ -902,7 +980,7 @@ export async function assertUltragoalPauseAllowed(cwd: string): Promise<void> {
|
|
|
902
980
|
[
|
|
903
981
|
diagnostic.reason,
|
|
904
982
|
"Resolvable blockers must be worked, not paused: investigate, `skc ultragoal steer --kind add_subgoal`, delegate an executor, or `skc ultragoal record-review-blockers`.",
|
|
905
|
-
'If the blocker is genuinely human-only, record `skc ultragoal classify-blocker --classification human_blocked --evidence "<human-only dependency>"`
|
|
983
|
+
'If the blocker is genuinely human-only, record `skc ultragoal classify-blocker --classification human_blocked --evidence "<human-only dependency>"`, then record a clean bound `skc ultragoal record-critic-verdict --terminus pause --classification-event-id <eventId> --verdict OKAY --evidence "<critic evidence>"` before pausing.',
|
|
906
984
|
].join("\n"),
|
|
907
985
|
);
|
|
908
986
|
}
|
|
@@ -8,6 +8,12 @@ import type {
|
|
|
8
8
|
UltragoalReceiptKind,
|
|
9
9
|
} from "./ultragoal-runtime";
|
|
10
10
|
|
|
11
|
+
export const CRITIC_VERDICT_EVENT = "critic_verdict";
|
|
12
|
+
export const CRITIC_GATE_HARD_STOP_EVENT = "critic_gate_hard_stop";
|
|
13
|
+
export const CRITIC_GATE_OVERRIDE_EVENT = "critic_gate_override";
|
|
14
|
+
export const TERMINAL_CRITIC_CEILING = 5;
|
|
15
|
+
export type CriticVerdict = "OKAY" | "ITERATE" | "REJECT";
|
|
16
|
+
|
|
11
17
|
export type UltragoalReceiptFreshnessDiagnostic = {
|
|
12
18
|
state:
|
|
13
19
|
| "inactive"
|
|
@@ -46,6 +52,103 @@ export function requiredUltragoalGoals(plan: UltragoalPlan): UltragoalGoal[] {
|
|
|
46
52
|
return plan.goals.filter(goal => goal.status !== "superseded");
|
|
47
53
|
}
|
|
48
54
|
|
|
55
|
+
/** Hash the current required-goal set for terminal critic verdict freshness. */
|
|
56
|
+
export function computeCriticVerdictPlanGeneration(plan: UltragoalPlan): string {
|
|
57
|
+
return hashStructuredValue(
|
|
58
|
+
requiredUltragoalGoals(plan).map(goal => ({
|
|
59
|
+
id: goal.id,
|
|
60
|
+
status: goal.status,
|
|
61
|
+
updatedAt: goal.updatedAt,
|
|
62
|
+
})),
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function isCleanPauseCriticVerdictShape(
|
|
67
|
+
candidate: UltragoalLedgerEvent,
|
|
68
|
+
planGeneration: string,
|
|
69
|
+
classificationEventId: string,
|
|
70
|
+
): boolean {
|
|
71
|
+
return (
|
|
72
|
+
candidate.event === CRITIC_VERDICT_EVENT &&
|
|
73
|
+
candidate.terminus === "pause" &&
|
|
74
|
+
candidate.verdict === "OKAY" &&
|
|
75
|
+
typeof candidate.evidence === "string" &&
|
|
76
|
+
candidate.evidence.trim().length > 0 &&
|
|
77
|
+
Array.isArray(candidate.blockers) &&
|
|
78
|
+
candidate.blockers.length === 0 &&
|
|
79
|
+
candidate.planGeneration === planGeneration &&
|
|
80
|
+
candidate.classificationEventId === classificationEventId
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function isCleanPauseCriticVerdict(
|
|
85
|
+
event: UltragoalLedgerEvent,
|
|
86
|
+
opts: { planGeneration: string; classificationEventId: string },
|
|
87
|
+
): boolean {
|
|
88
|
+
return isCleanPauseCriticVerdictShape(event, opts.planGeneration, opts.classificationEventId);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function findCleanPauseCriticVerdict(
|
|
92
|
+
plan: UltragoalPlan,
|
|
93
|
+
ledger: readonly UltragoalLedgerEvent[],
|
|
94
|
+
classificationEventId: string,
|
|
95
|
+
): UltragoalLedgerEvent | null {
|
|
96
|
+
const classificationIndex = ledger.findIndex(event => event.eventId === classificationEventId);
|
|
97
|
+
if (classificationIndex < 0) return null;
|
|
98
|
+
const planGeneration = computeCriticVerdictPlanGeneration(plan);
|
|
99
|
+
for (let index = ledger.length - 1; index > classificationIndex; index--) {
|
|
100
|
+
const event = ledger[index];
|
|
101
|
+
if (
|
|
102
|
+
event.event !== CRITIC_VERDICT_EVENT ||
|
|
103
|
+
event.terminus !== "pause" ||
|
|
104
|
+
event.planGeneration !== planGeneration ||
|
|
105
|
+
event.classificationEventId !== classificationEventId
|
|
106
|
+
)
|
|
107
|
+
continue;
|
|
108
|
+
return isCleanPauseCriticVerdict(event, { planGeneration, classificationEventId }) ? event : null;
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Pure: count all ledger `critic_verdict` rows for an exact plan generation. */
|
|
114
|
+
export function countTerminalCriticVerdicts(ledger: readonly UltragoalLedgerEvent[], planGeneration: string): number {
|
|
115
|
+
return ledger.filter(event => event.event === CRITIC_VERDICT_EVENT && event.planGeneration === planGeneration)
|
|
116
|
+
.length;
|
|
117
|
+
}
|
|
118
|
+
/** Pure: count every non-OKAY terminal critic verdict recorded for this run. */
|
|
119
|
+
export function countNonOkayTerminalCriticVerdicts(
|
|
120
|
+
ledger: readonly UltragoalLedgerEvent[],
|
|
121
|
+
_legacyPlanGeneration?: string,
|
|
122
|
+
): number {
|
|
123
|
+
return ledger.filter(event => event.event === CRITIC_VERDICT_EVENT && event.verdict !== "OKAY").length;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function terminalCriticHardStopReached(
|
|
127
|
+
ledger: readonly UltragoalLedgerEvent[],
|
|
128
|
+
_legacyPlanGeneration?: string,
|
|
129
|
+
): boolean {
|
|
130
|
+
return ledger.some(event => event.event === CRITIC_GATE_HARD_STOP_EVENT);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function terminalCriticGateOverridden(ledger: readonly UltragoalLedgerEvent[]): boolean {
|
|
134
|
+
let overrideAfterLatestHardStop = false;
|
|
135
|
+
for (let index = ledger.length - 1; index >= 0; index--) {
|
|
136
|
+
const event = ledger[index];
|
|
137
|
+
if (event.event === CRITIC_GATE_OVERRIDE_EVENT) overrideAfterLatestHardStop = true;
|
|
138
|
+
if (event.event === CRITIC_GATE_HARD_STOP_EVENT) return overrideAfterLatestHardStop;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function terminalCriticCeilingReached(
|
|
144
|
+
ledger: readonly UltragoalLedgerEvent[],
|
|
145
|
+
_legacyPlanGeneration?: string,
|
|
146
|
+
): boolean {
|
|
147
|
+
return (
|
|
148
|
+
countNonOkayTerminalCriticVerdicts(ledger) >= TERMINAL_CRITIC_CEILING || terminalCriticHardStopReached(ledger)
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
49
152
|
export function receiptRelevantGoals(
|
|
50
153
|
plan: UltragoalPlan,
|
|
51
154
|
goal: UltragoalGoal,
|
|
@@ -187,6 +290,26 @@ export function findLedgerReceiptEvent(
|
|
|
187
290
|
}) ?? null
|
|
188
291
|
);
|
|
189
292
|
}
|
|
293
|
+
/**
|
|
294
|
+
* A final-aggregate receipt whose recorded ledger checkpoint quality gate is
|
|
295
|
+
* missing a clean `criticReview` OKAY can never satisfy the completion guard,
|
|
296
|
+
* yet is not "stale" under {@link validateReceiptFreshBase}. Detect it so an
|
|
297
|
+
* identical-evidence complete replay can re-verify and re-mint with a
|
|
298
|
+
* corrected gate instead of no-opping into a permanently blocked run.
|
|
299
|
+
*/
|
|
300
|
+
export function finalAggregateReceiptMissingCriticOkay(
|
|
301
|
+
ledger: readonly UltragoalLedgerEvent[],
|
|
302
|
+
receipt: UltragoalCompletionVerification,
|
|
303
|
+
): boolean {
|
|
304
|
+
if (receipt.receiptKind !== "final-aggregate") return false;
|
|
305
|
+
const event = findLedgerReceiptEvent(ledger, receipt);
|
|
306
|
+
if (!event) return false;
|
|
307
|
+
const gate = event.qualityGateJson;
|
|
308
|
+
if (typeof gate !== "object" || gate === null || Array.isArray(gate)) return true;
|
|
309
|
+
const criticReview = (gate as Record<string, unknown>).criticReview;
|
|
310
|
+
if (typeof criticReview !== "object" || criticReview === null || Array.isArray(criticReview)) return true;
|
|
311
|
+
return (criticReview as Record<string, unknown>).verdict !== "OKAY";
|
|
312
|
+
}
|
|
190
313
|
|
|
191
314
|
export function validateReceiptFreshBase(input: {
|
|
192
315
|
plan: UltragoalPlan;
|