@sayknow-cli/coding-agent 0.4.7 → 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 +97 -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 +20 -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
package/src/capability/index.ts
CHANGED
|
@@ -41,6 +41,8 @@ const disabledProviders = new Set<string>();
|
|
|
41
41
|
|
|
42
42
|
/** Settings manager for persistence (if set) */
|
|
43
43
|
let settings: Settings | null = null;
|
|
44
|
+
/** Session-local settings keyed by normalized working directory. */
|
|
45
|
+
const settingsByCwd = new Map<string, Settings>();
|
|
44
46
|
|
|
45
47
|
// =============================================================================
|
|
46
48
|
// Registration API
|
|
@@ -208,8 +210,9 @@ async function loadImpl<T>(
|
|
|
208
210
|
* Filter providers based on options and disabled state.
|
|
209
211
|
*/
|
|
210
212
|
function filterProviders<T>(capability: Capability<T>, options: LoadOptions): Provider<T>[] {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
+
const activeSettings = options.settings ?? settingsByCwd.get(path.normalize(options.cwd ?? getProjectDir()));
|
|
214
|
+
const activeDisabledProviders = new Set(activeSettings?.get("disabledProviders") ?? disabledProviders);
|
|
215
|
+
let providers = (capability.providers as Provider<T>[]).filter(p => !activeDisabledProviders.has(p.id));
|
|
213
216
|
if (options.providers) {
|
|
214
217
|
const allowed = new Set(options.providers);
|
|
215
218
|
providers = providers.filter(p => allowed.has(p.id));
|
|
@@ -249,63 +252,76 @@ export async function loadCapability<T>(capabilityId: string, options: LoadOptio
|
|
|
249
252
|
* Call this once on startup to enable persistent provider state.
|
|
250
253
|
*/
|
|
251
254
|
export function initializeWithSettings(activeSettings: Settings): void {
|
|
255
|
+
settingsByCwd.set(path.normalize(activeSettings.getCwd()), activeSettings);
|
|
252
256
|
settings = activeSettings;
|
|
253
|
-
|
|
254
|
-
const disabled = settings.get("disabledProviders");
|
|
257
|
+
const disabled = activeSettings.get("disabledProviders");
|
|
255
258
|
disabledProviders.clear();
|
|
256
|
-
for (const id of disabled)
|
|
257
|
-
disabledProviders.add(id);
|
|
258
|
-
}
|
|
259
|
+
for (const id of disabled) disabledProviders.add(id);
|
|
259
260
|
}
|
|
260
261
|
|
|
262
|
+
function assertDisabledProvidersWritable(activeSettings: Settings): void {
|
|
263
|
+
if (!activeSettings.canWriteDurableConfig()) {
|
|
264
|
+
throw new Error(
|
|
265
|
+
"Cannot change settings while config.yml has invalid YAML syntax. Repair config.yml and reload settings.",
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
261
269
|
/**
|
|
262
270
|
* Persist current disabled providers to settings.
|
|
263
271
|
*/
|
|
264
|
-
function persistDisabledProviders(): void {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
}
|
|
272
|
+
function persistDisabledProviders(activeSettings: Settings, providers: ReadonlySet<string>): void {
|
|
273
|
+
assertDisabledProvidersWritable(activeSettings);
|
|
274
|
+
activeSettings.set("disabledProviders", Array.from(providers));
|
|
268
275
|
}
|
|
269
276
|
|
|
270
|
-
/**
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
277
|
+
/** Disable a provider for the supplied session settings. */
|
|
278
|
+
export function disableProvider(
|
|
279
|
+
providerId: string,
|
|
280
|
+
activeSettings: Settings = settings ??
|
|
281
|
+
(() => {
|
|
282
|
+
throw new Error("Capability settings unavailable");
|
|
283
|
+
})(),
|
|
284
|
+
): void {
|
|
285
|
+
const providers = new Set(activeSettings.get("disabledProviders"));
|
|
286
|
+
providers.add(providerId);
|
|
287
|
+
persistDisabledProviders(activeSettings, providers);
|
|
276
288
|
}
|
|
277
289
|
|
|
278
|
-
/**
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
290
|
+
/** Enable a provider for the supplied session settings. */
|
|
291
|
+
export function enableProvider(
|
|
292
|
+
providerId: string,
|
|
293
|
+
activeSettings: Settings = settings ??
|
|
294
|
+
(() => {
|
|
295
|
+
throw new Error("Capability settings unavailable");
|
|
296
|
+
})(),
|
|
297
|
+
): void {
|
|
298
|
+
const providers = new Set(activeSettings.get("disabledProviders"));
|
|
299
|
+
providers.delete(providerId);
|
|
300
|
+
persistDisabledProviders(activeSettings, providers);
|
|
284
301
|
}
|
|
285
302
|
|
|
286
|
-
/**
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
303
|
+
/** Check whether a provider is enabled by the supplied session settings. */
|
|
304
|
+
export function isProviderEnabled(
|
|
305
|
+
providerId: string,
|
|
306
|
+
activeSettings: Settings | undefined = settings ?? undefined,
|
|
307
|
+
): boolean {
|
|
308
|
+
return !new Set(activeSettings?.get("disabledProviders") ?? disabledProviders).has(providerId);
|
|
291
309
|
}
|
|
292
310
|
|
|
293
|
-
/**
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
export function getDisabledProviders(): string[] {
|
|
297
|
-
return Array.from(disabledProviders);
|
|
311
|
+
/** Get disabled providers from the supplied session settings. */
|
|
312
|
+
export function getDisabledProviders(activeSettings: Settings | undefined = settings ?? undefined): string[] {
|
|
313
|
+
return [...(activeSettings?.get("disabledProviders") ?? disabledProviders)];
|
|
298
314
|
}
|
|
299
315
|
|
|
300
|
-
/**
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
persistDisabledProviders();
|
|
316
|
+
/** Replace disabled providers for the supplied session settings. */
|
|
317
|
+
export function setDisabledProviders(
|
|
318
|
+
providerIds: string[],
|
|
319
|
+
activeSettings: Settings = settings ??
|
|
320
|
+
(() => {
|
|
321
|
+
throw new Error("Capability settings unavailable");
|
|
322
|
+
})(),
|
|
323
|
+
): void {
|
|
324
|
+
persistDisabledProviders(activeSettings, new Set(providerIds));
|
|
309
325
|
}
|
|
310
326
|
|
|
311
327
|
// =============================================================================
|
package/src/capability/types.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* and get back a unified array of MCP servers.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import type { Settings } from "../config/settings";
|
|
9
10
|
/**
|
|
10
11
|
* Context passed to every provider loader.
|
|
11
12
|
*/
|
|
@@ -72,6 +73,8 @@ export interface LoadOptions {
|
|
|
72
73
|
includeDisabled?: boolean;
|
|
73
74
|
/** Explicit disabled extension IDs to apply instead of settings. */
|
|
74
75
|
disabledExtensions?: string[];
|
|
76
|
+
/** Session settings whose provider policy applies to this load. */
|
|
77
|
+
settings?: Settings;
|
|
75
78
|
}
|
|
76
79
|
|
|
77
80
|
/**
|
package/src/cli/args.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI argument parsing
|
|
2
|
+
* CLI argument parsing
|
|
3
3
|
*/
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import { type Effort, THINKING_EFFORTS } from "@sayknow-cli/ai";
|
|
6
|
-
import {
|
|
6
|
+
import { logger } from "@sayknow-cli/utils";
|
|
7
7
|
import { CliParseError } from "@sayknow-cli/utils/cli";
|
|
8
|
-
import chalk from "chalk";
|
|
9
8
|
import { parseEffort } from "../thinking";
|
|
10
9
|
import { BUILTIN_TOOLS } from "../tools";
|
|
11
10
|
|
|
@@ -206,17 +205,23 @@ export function parseArgs(args: string[]): Args {
|
|
|
206
205
|
}
|
|
207
206
|
}
|
|
208
207
|
result.tools = validTools;
|
|
209
|
-
} else if (arg === "--thinking"
|
|
208
|
+
} else if (arg === "--thinking") {
|
|
209
|
+
// Match --credential / --mcp-config: a missing value or a following flag is
|
|
210
|
+
// a usage error, not a silent no-op / accidental consumption of `-p`.
|
|
211
|
+
const next = args[i + 1];
|
|
212
|
+
if (!next || next.startsWith("-")) {
|
|
213
|
+
throw new CliParseError(`--thinking requires <level> (${THINKING_EFFORTS.join(", ")})`);
|
|
214
|
+
}
|
|
210
215
|
const rawThinking = args[++i];
|
|
211
216
|
const thinking = parseEffort(rawThinking);
|
|
212
|
-
if (thinking
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
level:
|
|
217
|
-
|
|
218
|
-
});
|
|
217
|
+
if (thinking === undefined) {
|
|
218
|
+
// Fail closed: a silent ignore left users believing `ultra` (or any typo)
|
|
219
|
+
// was applied. Help / Flags.options advertise the real Effort enum.
|
|
220
|
+
throw new CliParseError(
|
|
221
|
+
`Invalid --thinking level "${rawThinking}". Expected one of: ${THINKING_EFFORTS.join(", ")}`,
|
|
222
|
+
);
|
|
219
223
|
}
|
|
224
|
+
result.thinking = thinking;
|
|
220
225
|
} else if (arg === "--print" || arg === "-p") {
|
|
221
226
|
result.print = true;
|
|
222
227
|
} else if (arg === "--export" && i + 1 < args.length) {
|
|
@@ -253,92 +258,3 @@ export function parseArgs(args: string[]): Args {
|
|
|
253
258
|
|
|
254
259
|
return result;
|
|
255
260
|
}
|
|
256
|
-
|
|
257
|
-
export function getExtraHelpText(): string {
|
|
258
|
-
return `${chalk.bold("Environment Variables:")}
|
|
259
|
-
${chalk.dim("# Core Providers")}
|
|
260
|
-
ANTHROPIC_API_KEY - Anthropic Claude models
|
|
261
|
-
ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth (takes precedence over API key)
|
|
262
|
-
CLAUDE_CODE_USE_FOUNDRY - Enable Anthropic Foundry mode (uses Foundry endpoint + mTLS)
|
|
263
|
-
FOUNDRY_BASE_URL - Anthropic Foundry base URL (e.g., https://<foundry-host>)
|
|
264
|
-
ANTHROPIC_FOUNDRY_API_KEY - Anthropic token used as Authorization: Bearer <token> in Foundry mode
|
|
265
|
-
ANTHROPIC_CUSTOM_HEADERS - Extra Foundry headers (e.g., "user-id: USERNAME")
|
|
266
|
-
CLAUDE_CODE_CLIENT_CERT - Client certificate (PEM path or inline PEM) for mTLS
|
|
267
|
-
CLAUDE_CODE_CLIENT_KEY - Client private key (PEM path or inline PEM) for mTLS
|
|
268
|
-
NODE_EXTRA_CA_CERTS - CA bundle path (or inline PEM) for server certificate validation
|
|
269
|
-
OPENAI_API_KEY - OpenAI GPT models
|
|
270
|
-
GEMINI_API_KEY - Google Gemini models
|
|
271
|
-
GITHUB_TOKEN - GitHub Copilot (or GH_TOKEN, COPILOT_GITHUB_TOKEN)
|
|
272
|
-
|
|
273
|
-
${chalk.dim("# Additional LLM Providers")}
|
|
274
|
-
AZURE_OPENAI_API_KEY - Azure OpenAI models
|
|
275
|
-
GROQ_API_KEY - Groq models
|
|
276
|
-
CEREBRAS_API_KEY - Cerebras models
|
|
277
|
-
XAI_API_KEY - xAI Grok models
|
|
278
|
-
OPENROUTER_API_KEY - OpenRouter aggregated models
|
|
279
|
-
KILO_API_KEY - Kilo Gateway models
|
|
280
|
-
MISTRAL_API_KEY - Mistral models
|
|
281
|
-
ZAI_API_KEY - z.ai models (ZhipuAI/GLM)
|
|
282
|
-
MINIMAX_API_KEY - MiniMax models
|
|
283
|
-
OPENCODE_API_KEY - OpenCode Zen/OpenCode Go models
|
|
284
|
-
CURSOR_ACCESS_TOKEN - Cursor AI models
|
|
285
|
-
AI_GATEWAY_API_KEY - Vercel AI Gateway
|
|
286
|
-
|
|
287
|
-
${chalk.dim("# Cloud Providers")}
|
|
288
|
-
AWS_PROFILE - AWS Bedrock (or AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
|
|
289
|
-
GOOGLE_CLOUD_PROJECT - Google Vertex AI (requires GOOGLE_CLOUD_LOCATION)
|
|
290
|
-
GOOGLE_APPLICATION_CREDENTIALS - Service account for Vertex AI
|
|
291
|
-
|
|
292
|
-
${chalk.dim("# Search & Tools")}
|
|
293
|
-
EXA_API_KEY - Exa web search
|
|
294
|
-
BRAVE_API_KEY - Brave web search
|
|
295
|
-
PERPLEXITY_API_KEY - Perplexity web search (API)
|
|
296
|
-
PERPLEXITY_COOKIES - Perplexity web search (session cookie)
|
|
297
|
-
TAVILY_API_KEY - Tavily web search
|
|
298
|
-
ANTHROPIC_SEARCH_API_KEY - Anthropic search provider
|
|
299
|
-
|
|
300
|
-
${chalk.dim("# Configuration")}
|
|
301
|
-
SKC_CODING_AGENT_DIR - Session storage directory (default: ~/${CONFIG_DIR_NAME}/agent)
|
|
302
|
-
SKC_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)
|
|
303
|
-
SKC_SMOL_MODEL - Override smol/fast model (see --smol)
|
|
304
|
-
SKC_SLOW_MODEL - Override slow/reasoning model (see --slow)
|
|
305
|
-
SKC_PLAN_MODEL - Override planning model (see --plan)
|
|
306
|
-
SKC_NO_PTY - Disable PTY-based interactive bash execution
|
|
307
|
-
--tmux - Launch interactive startup inside a fresh tmux session
|
|
308
|
-
skc session - List, inspect, create, remove, or attach tagged SKC-managed tmux sessions
|
|
309
|
-
SKC_LAUNCH_POLICY - Launch policy for --tmux startup: tmux or direct
|
|
310
|
-
SKC_TMUX_SESSION - Explicit tmux session name override for --tmux startup
|
|
311
|
-
SKC_TMUX_PROFILE - Apply SKC tmux scroll/mouse/clipboard profile to --tmux sessions (set 0/off to skip)
|
|
312
|
-
SKC_MOUSE - Mouse-wheel scroll in --tmux sessions (set 0/off to let the host terminal scroll)
|
|
313
|
-
|
|
314
|
-
For complete environment variable reference, see:
|
|
315
|
-
${chalk.dim("docs/environment-variables.md")}
|
|
316
|
-
${chalk.bold("Available Tools (default-enabled unless noted):")}
|
|
317
|
-
read - Read file contents
|
|
318
|
-
bash - Execute bash commands
|
|
319
|
-
edit - Edit files with find/replace
|
|
320
|
-
write - Write files (creates/overwrites)
|
|
321
|
-
grep - Search file contents
|
|
322
|
-
find - Find files by glob pattern
|
|
323
|
-
lsp - Language server protocol (code intelligence)
|
|
324
|
-
python - Execute Python code (requires: ${APP_NAME} setup python)
|
|
325
|
-
notebook - Edit Jupyter notebooks
|
|
326
|
-
browser - Browser automation (Puppeteer)
|
|
327
|
-
task - Launch sub-agents for parallel tasks
|
|
328
|
-
todo_write - Manage todo/task lists
|
|
329
|
-
web_search - Search the web
|
|
330
|
-
ask - Ask user questions (interactive mode only)
|
|
331
|
-
|
|
332
|
-
${chalk.bold("Useful Commands:")}
|
|
333
|
-
${APP_NAME} --list-models - List configured provider models
|
|
334
|
-
${APP_NAME} --help - Show this help`;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
export function printHelp(): void {
|
|
338
|
-
process.stdout.write(
|
|
339
|
-
`${chalk.bold(APP_NAME)} - red-octopus AI coding assistant\n\n` +
|
|
340
|
-
`Run ${APP_NAME} --help for full command and option details.\n` +
|
|
341
|
-
`Run ${APP_NAME} <command> --help for command-specific help.\n\n` +
|
|
342
|
-
`${getExtraHelpText()}\n`,
|
|
343
|
-
);
|
|
344
|
-
}
|
package/src/cli/fast-help.ts
CHANGED
|
@@ -84,7 +84,7 @@ Environment Variables:
|
|
|
84
84
|
SKC_LAUNCH_POLICY - Launch policy for --tmux startup: tmux or direct
|
|
85
85
|
SKC_TMUX_SESSION - Explicit tmux session name override for --tmux startup
|
|
86
86
|
SKC_TMUX_PROFILE - Apply SKC tmux scroll/mouse/clipboard profile to --tmux sessions (set 0/off to skip)
|
|
87
|
-
SKC_MOUSE -
|
|
87
|
+
SKC_MOUSE - Apply tmux copy-mode mouse capture in --tmux sessions (set 0/off to skip)
|
|
88
88
|
|
|
89
89
|
For complete environment variable reference, see:
|
|
90
90
|
docs/environment-variables.md
|
package/src/cli/mcp-cli.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { getMCPConfigPath, getProjectDir } from "@sayknow-cli/utils";
|
|
8
8
|
import { getMCPServer, readMCPConfigFile, removeMCPServer, upsertMCPServer } from "../runtime-mcp/config-writer";
|
|
9
|
+
import { redactMCPEndpoint } from "../runtime-mcp/redaction";
|
|
9
10
|
import type { MCPConfigFile, MCPServerConfig } from "../runtime-mcp/types";
|
|
10
11
|
|
|
11
12
|
export type MCPAction = "add" | "list" | "remove";
|
|
@@ -141,24 +142,6 @@ function redactRecord(
|
|
|
141
142
|
);
|
|
142
143
|
}
|
|
143
144
|
|
|
144
|
-
function redactUrl(value: string | undefined): string | undefined {
|
|
145
|
-
if (!value) return value;
|
|
146
|
-
try {
|
|
147
|
-
const url = new URL(value);
|
|
148
|
-
if (url.username) url.username = REDACTED;
|
|
149
|
-
if (url.password) url.password = REDACTED;
|
|
150
|
-
if (url.search) {
|
|
151
|
-
for (const key of Array.from(url.searchParams.keys())) {
|
|
152
|
-
url.searchParams.set(key, REDACTED);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
url.hash = "";
|
|
156
|
-
return url.toString();
|
|
157
|
-
} catch {
|
|
158
|
-
return SENSITIVE_KEY_PATTERN.test(value) ? REDACTED : value;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
145
|
function redactArgs(args: string[] | undefined): string[] | undefined {
|
|
163
146
|
if (!args) return undefined;
|
|
164
147
|
const redacted: string[] = [];
|
|
@@ -196,7 +179,7 @@ export function redactMCPServerConfig(config: MCPServerConfig): MCPServerConfig
|
|
|
196
179
|
if (headers) redacted.headers = headers;
|
|
197
180
|
}
|
|
198
181
|
if ("url" in redacted) {
|
|
199
|
-
const url =
|
|
182
|
+
const url = redactMCPEndpoint(redacted.url);
|
|
200
183
|
if (url) redacted.url = url;
|
|
201
184
|
}
|
|
202
185
|
if ("args" in redacted) {
|
|
@@ -207,7 +190,7 @@ export function redactMCPServerConfig(config: MCPServerConfig): MCPServerConfig
|
|
|
207
190
|
redacted.auth = {
|
|
208
191
|
type: redacted.auth.type,
|
|
209
192
|
credentialId: redacted.auth.credentialId ? REDACTED : undefined,
|
|
210
|
-
tokenUrl:
|
|
193
|
+
tokenUrl: redactMCPEndpoint(redacted.auth.tokenUrl),
|
|
211
194
|
clientId: redacted.auth.clientId ? REDACTED : undefined,
|
|
212
195
|
clientSecret: redacted.auth.clientSecret ? REDACTED : undefined,
|
|
213
196
|
};
|
|
@@ -216,7 +199,7 @@ export function redactMCPServerConfig(config: MCPServerConfig): MCPServerConfig
|
|
|
216
199
|
redacted.oauth = {
|
|
217
200
|
clientId: redacted.oauth.clientId ? REDACTED : undefined,
|
|
218
201
|
clientSecret: redacted.oauth.clientSecret ? REDACTED : undefined,
|
|
219
|
-
redirectUri:
|
|
202
|
+
redirectUri: redactMCPEndpoint(redacted.oauth.redirectUri),
|
|
220
203
|
callbackPort: redacted.oauth.callbackPort,
|
|
221
204
|
callbackPath: redacted.oauth.callbackPath,
|
|
222
205
|
};
|
package/src/cli/notify-cli.ts
CHANGED
|
@@ -7,7 +7,6 @@ import { createInterface } from "node:readline/promises";
|
|
|
7
7
|
import { APP_NAME } from "@sayknow-cli/utils/dirs";
|
|
8
8
|
import chalk from "chalk";
|
|
9
9
|
import { Settings, type SettingsAtomicPatch } from "../config/settings";
|
|
10
|
-
import { isProcessIncarnation, processIncarnation } from "../sdk/broker/process-incarnation";
|
|
11
10
|
import { type EnsureChatDaemonResult, ensureDiscordDaemon, ensureSlackDaemon } from "../sdk/bus/chat-daemon-control";
|
|
12
11
|
import { getNotificationConfig, maskToken, tokenFingerprint } from "../sdk/bus/config";
|
|
13
12
|
import {
|
|
@@ -33,7 +32,7 @@ import {
|
|
|
33
32
|
import {
|
|
34
33
|
type EnsureTelegramDaemonDetailedResult,
|
|
35
34
|
ensureTelegramDaemonRunningDetailed,
|
|
36
|
-
|
|
35
|
+
resolveTelegramSetupPreflight,
|
|
37
36
|
} from "../sdk/bus/telegram-daemon";
|
|
38
37
|
import { runDaemonInternal } from "../sdk/bus/telegram-daemon-cli";
|
|
39
38
|
import {
|
|
@@ -414,6 +413,7 @@ async function runTelegramSetup(cmd: NotifyCommandArgs, deps: NotifyCommandDeps)
|
|
|
414
413
|
settings,
|
|
415
414
|
cwd: process.cwd(),
|
|
416
415
|
sessionId: `notify-cli-${process.pid}`,
|
|
416
|
+
registerRoot: false,
|
|
417
417
|
}),
|
|
418
418
|
persistInactive: async marker => await persistTelegramActivationMarker(settings, marker),
|
|
419
419
|
clearInactive: async marker => await clearTelegramActivationMarker(settings, marker),
|
|
@@ -458,42 +458,10 @@ function proposedIdentityFromSetupPreflight(
|
|
|
458
458
|
|
|
459
459
|
async function resolveSetupPreflight(settings: Settings, deps: NotifyCommandDeps): Promise<TelegramSetupPreflight> {
|
|
460
460
|
if (deps.setupPreflight) return deps.setupPreflight;
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
const validPid = Number.isSafeInteger(state.pid) && state.pid > 0;
|
|
466
|
-
if (!validPid || !(deps.setupPidAlive ?? daemonPidAlive)(state.pid)) return { storedChatId: cfg.chatId };
|
|
467
|
-
const persistedIncarnation = state.incarnation;
|
|
468
|
-
const currentIncarnation = (deps.setupPidIncarnation ?? processIncarnation)(state.pid);
|
|
469
|
-
if (
|
|
470
|
-
!isProcessIncarnation(persistedIncarnation) ||
|
|
471
|
-
!isProcessIncarnation(currentIncarnation) ||
|
|
472
|
-
persistedIncarnation !== currentIncarnation
|
|
473
|
-
)
|
|
474
|
-
return { storedChatId: cfg.chatId };
|
|
475
|
-
return {
|
|
476
|
-
storedChatId: cfg.chatId,
|
|
477
|
-
daemon: {
|
|
478
|
-
live: true,
|
|
479
|
-
tokenFingerprint: typeof state.tokenFingerprint === "string" ? state.tokenFingerprint : undefined,
|
|
480
|
-
chatId: typeof state.chatId === "string" ? state.chatId : undefined,
|
|
481
|
-
},
|
|
482
|
-
};
|
|
483
|
-
} catch {
|
|
484
|
-
// A state read failure is not proof of a live daemon; proceed normally. The
|
|
485
|
-
// daemon's own 409 handling remains the backstop against poller contention.
|
|
486
|
-
return { storedChatId: cfg.chatId };
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
function daemonPidAlive(pid: number): boolean {
|
|
491
|
-
try {
|
|
492
|
-
process.kill(pid, 0);
|
|
493
|
-
return true;
|
|
494
|
-
} catch (error) {
|
|
495
|
-
return (error as NodeJS.ErrnoException).code === "EPERM";
|
|
496
|
-
}
|
|
461
|
+
return await resolveTelegramSetupPreflight(settings, {
|
|
462
|
+
pidAlive: deps.setupPidAlive,
|
|
463
|
+
pidIncarnation: deps.setupPidIncarnation,
|
|
464
|
+
});
|
|
497
465
|
}
|
|
498
466
|
|
|
499
467
|
type TokenPromptInput = NodeJS.ReadStream & {
|
package/src/cli/read-cli.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { renderError } from "../tools/tool-errors";
|
|
|
15
15
|
|
|
16
16
|
export interface ReadCommandArgs {
|
|
17
17
|
path: string;
|
|
18
|
+
truncation?: "head" | "last" | "both";
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
export async function runReadCommand(cmd: ReadCommandArgs): Promise<void> {
|
|
@@ -37,7 +38,7 @@ export async function runReadCommand(cmd: ReadCommandArgs): Promise<void> {
|
|
|
37
38
|
const tool = wrapToolWithMetaNotice(new ReadTool(session));
|
|
38
39
|
|
|
39
40
|
try {
|
|
40
|
-
const result = await tool.execute("skc-read", { path: cmd.path });
|
|
41
|
+
const result = await tool.execute("skc-read", { path: cmd.path, truncation: cmd.truncation });
|
|
41
42
|
|
|
42
43
|
for (const block of result.content) {
|
|
43
44
|
if (block.type === "text") {
|
package/src/cli/setup-cli.ts
CHANGED
|
@@ -18,7 +18,11 @@ import {
|
|
|
18
18
|
} from "../hooks/codex-native-hooks-config";
|
|
19
19
|
import { theme } from "../modes/theme/theme";
|
|
20
20
|
import { formatCredentialAutoImportResult, runExternalCredentialAutoImport } from "../setup/credential-auto-import";
|
|
21
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
formatDiscoverySummary,
|
|
23
|
+
getAutoImportOAuthCredentialSkips,
|
|
24
|
+
isAutoImportOAuthCredential,
|
|
25
|
+
} from "../setup/credential-import";
|
|
22
26
|
import {
|
|
23
27
|
formatHermesSetupResult,
|
|
24
28
|
type HermesSetupFlags,
|
|
@@ -596,8 +600,10 @@ export async function handleCredentialsSetup(
|
|
|
596
600
|
trigger: "setup-cli",
|
|
597
601
|
});
|
|
598
602
|
const result = preview.discovery ?? { importable: [], skipped: [], environment: [] };
|
|
599
|
-
const
|
|
600
|
-
const
|
|
603
|
+
const now = Date.now();
|
|
604
|
+
const candidates = result.importable.filter(credential => isAutoImportOAuthCredential(credential, now));
|
|
605
|
+
const autoImportSkips = getAutoImportOAuthCredentialSkips(result.importable, now);
|
|
606
|
+
const filteredResult = { ...result, importable: candidates, skipped: [...result.skipped, ...autoImportSkips] };
|
|
601
607
|
const redactedPlan = {
|
|
602
608
|
importable: candidates.map(c => ({
|
|
603
609
|
provider: c.provider,
|
|
@@ -607,7 +613,7 @@ export async function handleCredentialsSetup(
|
|
|
607
613
|
expiresAt: c.expiresAt,
|
|
608
614
|
redactedToken: c.redactedToken,
|
|
609
615
|
})),
|
|
610
|
-
skipped:
|
|
616
|
+
skipped: filteredResult.skipped,
|
|
611
617
|
environment: result.environment,
|
|
612
618
|
keychainChecked: flags.keychain === true,
|
|
613
619
|
};
|