@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
|
@@ -5,6 +5,18 @@ import { isEnoent, logger } from "@sayknow-cli/utils";
|
|
|
5
5
|
|
|
6
6
|
const BLOB_PREFIX = "blob:sha256:";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Owner-only permissions for on-disk blob directories and files.
|
|
10
|
+
*
|
|
11
|
+
* Blob stores can live inside a managed session scope (e.g. the resident-cache
|
|
12
|
+
* `EphemeralBlobStore` created on the explicit session path). The managed-tree
|
|
13
|
+
* snapshot fails closed unless every descendant is owner-only, so blobs and
|
|
14
|
+
* their directories MUST be created 0700/0600 rather than inheriting a
|
|
15
|
+
* group/other-readable mode from the process umask.
|
|
16
|
+
*/
|
|
17
|
+
const BLOB_DIR_MODE = 0o700;
|
|
18
|
+
const BLOB_FILE_MODE = 0o600;
|
|
19
|
+
|
|
8
20
|
export interface BlobPutResult {
|
|
9
21
|
hash: string;
|
|
10
22
|
path: string;
|
|
@@ -112,7 +124,13 @@ export class BlobStore {
|
|
|
112
124
|
},
|
|
113
125
|
};
|
|
114
126
|
|
|
115
|
-
|
|
127
|
+
// Create the blob directory 0700 and the file 0600 at creation, mirroring
|
|
128
|
+
// putSync/putImmutableSync. The previous Bun.write let the parent dir be
|
|
129
|
+
// created with the process umask (e.g. 0755) and the file at 0644 before a
|
|
130
|
+
// follow-up chmod, violating the owner-only contract above and leaving a
|
|
131
|
+
// group/other-readable window a managed-tree snapshot fails closed on.
|
|
132
|
+
await fsp.mkdir(this.dir, { recursive: true, mode: BLOB_DIR_MODE });
|
|
133
|
+
await fsp.writeFile(blobPath, data, { mode: BLOB_FILE_MODE });
|
|
116
134
|
return result;
|
|
117
135
|
}
|
|
118
136
|
|
|
@@ -131,8 +149,8 @@ export class BlobStore {
|
|
|
131
149
|
return `${BLOB_PREFIX}${hash}`;
|
|
132
150
|
},
|
|
133
151
|
};
|
|
134
|
-
fs.mkdirSync(this.dir, { recursive: true });
|
|
135
|
-
fs.writeFileSync(blobPath, data);
|
|
152
|
+
fs.mkdirSync(this.dir, { recursive: true, mode: BLOB_DIR_MODE });
|
|
153
|
+
fs.writeFileSync(blobPath, data, { mode: BLOB_FILE_MODE });
|
|
136
154
|
return result;
|
|
137
155
|
}
|
|
138
156
|
|
|
@@ -147,7 +165,7 @@ export class BlobStore {
|
|
|
147
165
|
const hash = sha256Hex(data);
|
|
148
166
|
const blobPath = path.join(this.dir, hash);
|
|
149
167
|
const result = makeBlobPutResult(hash, blobPath, data.byteLength);
|
|
150
|
-
fs.mkdirSync(this.dir, { recursive: true });
|
|
168
|
+
fs.mkdirSync(this.dir, { recursive: true, mode: BLOB_DIR_MODE });
|
|
151
169
|
|
|
152
170
|
if (fs.existsSync(blobPath)) {
|
|
153
171
|
verifyBlobFileSync(hash, blobPath);
|
|
@@ -156,7 +174,7 @@ export class BlobStore {
|
|
|
156
174
|
|
|
157
175
|
const tempPath = uniqueTempBlobPath(this.dir, hash);
|
|
158
176
|
try {
|
|
159
|
-
const fd = fs.openSync(tempPath, "wx");
|
|
177
|
+
const fd = fs.openSync(tempPath, "wx", BLOB_FILE_MODE);
|
|
160
178
|
try {
|
|
161
179
|
fs.writeFileSync(fd, data);
|
|
162
180
|
fs.fsyncSync(fd);
|
|
@@ -274,7 +292,7 @@ export class EphemeralBlobStore extends BlobStore {
|
|
|
274
292
|
constructor(dir: string) {
|
|
275
293
|
super(dir);
|
|
276
294
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
277
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
295
|
+
fs.mkdirSync(dir, { recursive: true, mode: BLOB_DIR_MODE });
|
|
278
296
|
}
|
|
279
297
|
|
|
280
298
|
#cachePut(hash: string, data: Buffer): void {
|
|
@@ -333,7 +351,7 @@ export class EphemeralBlobStore extends BlobStore {
|
|
|
333
351
|
this.#bufferCache.clear();
|
|
334
352
|
this.#bufferCacheBytes = 0;
|
|
335
353
|
fs.rmSync(this.dir, { recursive: true, force: true });
|
|
336
|
-
fs.mkdirSync(this.dir, { recursive: true });
|
|
354
|
+
fs.mkdirSync(this.dir, { recursive: true, mode: BLOB_DIR_MODE });
|
|
337
355
|
}
|
|
338
356
|
|
|
339
357
|
dispose(): void {
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export const BTW_MAX_CONTEXT_TURNS = 12;
|
|
2
|
+
export const BTW_MAX_CONTEXT_UTF8_BYTES = 64 * 1024;
|
|
3
|
+
export const BTW_MAX_QUESTION_UTF8_BYTES = 16 * 1024;
|
|
4
|
+
export const BTW_MAX_ANSWER_UTF8_BYTES = 32 * 1024;
|
|
5
|
+
export const BTW_MAX_ERROR_UTF8_BYTES = 4 * 1024;
|
|
6
|
+
export const BTW_STREAM_IDLE_TIMEOUT_MS = 30_000;
|
|
7
|
+
export const BTW_STREAM_TOTAL_TIMEOUT_MS = 120_000;
|
|
8
|
+
|
|
9
|
+
export interface BtwTextExchange {
|
|
10
|
+
question: string;
|
|
11
|
+
answer: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function utf8ByteLength(text: string): number {
|
|
15
|
+
return Buffer.byteLength(text, "utf8");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function truncateUtf8(text: string, maxBytes: number): string {
|
|
19
|
+
if (utf8ByteLength(text) <= maxBytes) return text;
|
|
20
|
+
let bytes = 0;
|
|
21
|
+
let result = "";
|
|
22
|
+
for (const character of text) {
|
|
23
|
+
const characterBytes = utf8ByteLength(character);
|
|
24
|
+
if (bytes + characterBytes > maxBytes) break;
|
|
25
|
+
result += character;
|
|
26
|
+
bytes += characterBytes;
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function sanitizeBtwError(text: string): string {
|
|
32
|
+
const sanitized = text
|
|
33
|
+
.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, " ")
|
|
34
|
+
.replace(/[\u202A-\u202E\u2066-\u2069]/g, "")
|
|
35
|
+
.replace(/\s+/g, " ")
|
|
36
|
+
.trim();
|
|
37
|
+
return truncateUtf8(sanitized || "Side-chat request failed.", BTW_MAX_ERROR_UTF8_BYTES);
|
|
38
|
+
}
|
|
39
|
+
export function exchangeUtf8Bytes(exchange: BtwTextExchange): number {
|
|
40
|
+
return utf8ByteLength(exchange.question) + utf8ByteLength(exchange.answer);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function boundBtwExchanges(exchanges: readonly BtwTextExchange[]): BtwTextExchange[] {
|
|
44
|
+
const bounded: BtwTextExchange[] = [];
|
|
45
|
+
let totalBytes = 0;
|
|
46
|
+
for (let index = exchanges.length - 1; index >= 0 && bounded.length < BTW_MAX_CONTEXT_TURNS; index -= 1) {
|
|
47
|
+
const exchange = exchanges[index];
|
|
48
|
+
if (!exchange) continue;
|
|
49
|
+
const normalized = {
|
|
50
|
+
question: truncateUtf8(exchange.question, BTW_MAX_QUESTION_UTF8_BYTES),
|
|
51
|
+
answer: truncateUtf8(exchange.answer, BTW_MAX_ANSWER_UTF8_BYTES),
|
|
52
|
+
};
|
|
53
|
+
const bytes = exchangeUtf8Bytes(normalized);
|
|
54
|
+
if (bytes > BTW_MAX_CONTEXT_UTF8_BYTES - totalBytes) break;
|
|
55
|
+
bounded.unshift(normalized);
|
|
56
|
+
totalBytes += bytes;
|
|
57
|
+
}
|
|
58
|
+
return bounded;
|
|
59
|
+
}
|
|
@@ -30,6 +30,7 @@ export class FallbackChainController {
|
|
|
30
30
|
|
|
31
31
|
#attemptStarted = false;
|
|
32
32
|
#totalAttemptsUsed = 0;
|
|
33
|
+
#restoredEntryIndices = new Set<number>();
|
|
33
34
|
skips: Array<{ selector: string; reason: string }> = [];
|
|
34
35
|
exhaustedForTurn = false;
|
|
35
36
|
|
|
@@ -46,6 +47,10 @@ export class FallbackChainController {
|
|
|
46
47
|
return this.#totalAttemptsUsed;
|
|
47
48
|
}
|
|
48
49
|
|
|
50
|
+
#maxTotalAttempts(): number {
|
|
51
|
+
return this.maxAttempts * this.chain.entries.length + this.#restoredEntryIndices.size;
|
|
52
|
+
}
|
|
53
|
+
|
|
49
54
|
currentSelector(): string | undefined {
|
|
50
55
|
return this.chain.entries[this.activeIndex];
|
|
51
56
|
}
|
|
@@ -59,7 +64,7 @@ export class FallbackChainController {
|
|
|
59
64
|
/** Charge an upstream request at its concrete transport boundary. */
|
|
60
65
|
onAttemptStarted(): void {
|
|
61
66
|
if (!this.currentSelector() || this.exhaustedForTurn) return;
|
|
62
|
-
if (this.#totalAttemptsUsed >= this
|
|
67
|
+
if (this.#totalAttemptsUsed >= this.#maxTotalAttempts()) {
|
|
63
68
|
this.activeIndex = this.chain.entries.length;
|
|
64
69
|
this.exhaustedForTurn = true;
|
|
65
70
|
return;
|
|
@@ -82,6 +87,7 @@ export class FallbackChainController {
|
|
|
82
87
|
this.attemptsUsed = 0;
|
|
83
88
|
this.#totalAttemptsUsed = 0;
|
|
84
89
|
this.tried = [];
|
|
90
|
+
this.#restoredEntryIndices.clear();
|
|
85
91
|
this.#attemptStarted = false;
|
|
86
92
|
}
|
|
87
93
|
|
|
@@ -91,6 +97,7 @@ export class FallbackChainController {
|
|
|
91
97
|
this.skips = [...skips];
|
|
92
98
|
this.attemptsUsed = 0;
|
|
93
99
|
this.#totalAttemptsUsed = 0;
|
|
100
|
+
this.#restoredEntryIndices.clear();
|
|
94
101
|
this.#attemptStarted = false;
|
|
95
102
|
this.exhaustedForTurn = this.activeIndex >= this.chain.entries.length;
|
|
96
103
|
}
|
|
@@ -104,7 +111,7 @@ export class FallbackChainController {
|
|
|
104
111
|
}
|
|
105
112
|
this.#attemptStarted = false;
|
|
106
113
|
this.tried.push({ selector, triggerClass, reason });
|
|
107
|
-
if (this.#totalAttemptsUsed >= this
|
|
114
|
+
if (this.#totalAttemptsUsed >= this.#maxTotalAttempts()) {
|
|
108
115
|
this.activeIndex = this.chain.entries.length;
|
|
109
116
|
this.exhaustedForTurn = true;
|
|
110
117
|
return "exhausted";
|
|
@@ -126,19 +133,23 @@ export class FallbackChainController {
|
|
|
126
133
|
}
|
|
127
134
|
|
|
128
135
|
/**
|
|
129
|
-
* Restore the entry that just advanced
|
|
130
|
-
*
|
|
136
|
+
* Restore the entry that just advanced for one attempt with a rotated credential.
|
|
137
|
+
* Each non-terminal entry may be restored once, so credential rotation remains
|
|
138
|
+
* bounded and cannot consume the attempts reserved for downstream entries.
|
|
131
139
|
*/
|
|
132
140
|
restorePreviousEntryForRetry(): boolean {
|
|
141
|
+
const previousIndex = this.activeIndex - 1;
|
|
133
142
|
if (
|
|
134
|
-
|
|
143
|
+
previousIndex < 0 ||
|
|
135
144
|
this.exhaustedForTurn ||
|
|
136
|
-
this.#
|
|
145
|
+
this.#restoredEntryIndices.has(previousIndex) ||
|
|
146
|
+
this.#totalAttemptsUsed >= this.#maxTotalAttempts()
|
|
137
147
|
) {
|
|
138
148
|
return false;
|
|
139
149
|
}
|
|
140
|
-
this.
|
|
141
|
-
this.
|
|
150
|
+
this.#restoredEntryIndices.add(previousIndex);
|
|
151
|
+
this.activeIndex = previousIndex;
|
|
152
|
+
this.attemptsUsed = this.maxAttempts - 1;
|
|
142
153
|
this.exhaustedForTurn = false;
|
|
143
154
|
this.#attemptStarted = false;
|
|
144
155
|
return true;
|
|
@@ -157,6 +168,7 @@ export class FallbackChainController {
|
|
|
157
168
|
this.attemptsUsed = 0;
|
|
158
169
|
this.#totalAttemptsUsed = 0;
|
|
159
170
|
this.tried = [];
|
|
171
|
+
this.#restoredEntryIndices.clear();
|
|
160
172
|
this.skips = [];
|
|
161
173
|
this.exhaustedForTurn = this.chain.entries.length === 0;
|
|
162
174
|
this.#attemptStarted = false;
|
|
@@ -174,6 +186,33 @@ export function cappedExponentialWithFullJitter(
|
|
|
174
186
|
return Math.floor(Math.max(0, cap) * Math.max(0, Math.min(1, random())));
|
|
175
187
|
}
|
|
176
188
|
|
|
189
|
+
/**
|
|
190
|
+
* Legacy auto-compaction retry delay.
|
|
191
|
+
*
|
|
192
|
+
* Deliberately the mirror image of `effectiveFallbackDelay`: this path recovers
|
|
193
|
+
* Retry-After by regex over provider error prose (`#parseRetryAfterMsFromError`),
|
|
194
|
+
* so it follows the documented legacy rule — `retry.maxDelayMs` caps every
|
|
195
|
+
* legacy session retry delay, including provider retry-after hints. Managed
|
|
196
|
+
* fallback stays uncapped because it retries within its own per-entry budget;
|
|
197
|
+
* compaction has no such budget, so the final candidate would otherwise sleep
|
|
198
|
+
* for the full server-suggested duration.
|
|
199
|
+
*
|
|
200
|
+
* `maxDelayMs <= 0` means "no cap", matching `cappedExponentialWithFullJitter`.
|
|
201
|
+
* A missing, NaN, or infinite hint collapses to "no usable hint".
|
|
202
|
+
*/
|
|
203
|
+
export function compactionRetryDelay(
|
|
204
|
+
baseDelayMs: number,
|
|
205
|
+
maxDelayMs: number,
|
|
206
|
+
attempt: number,
|
|
207
|
+
retryAfterMs: number | undefined,
|
|
208
|
+
): number {
|
|
209
|
+
const exponential = baseDelayMs * 2 ** Math.max(0, attempt);
|
|
210
|
+
const hint = Number.isFinite(retryAfterMs) ? Math.max(0, retryAfterMs as number) : 0;
|
|
211
|
+
const hinted = Math.max(exponential, hint);
|
|
212
|
+
const bounded = maxDelayMs > 0 ? Math.min(hinted, maxDelayMs) : hinted;
|
|
213
|
+
return Math.max(0, bounded);
|
|
214
|
+
}
|
|
215
|
+
|
|
177
216
|
/** Retry-After is intentionally uncapped. */
|
|
178
217
|
export function effectiveFallbackDelay(
|
|
179
218
|
baseDelayMs: number,
|