@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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decide whether an executor assignment should inject the ultragoal red-team
|
|
3
|
+
* prompt fragment.
|
|
4
|
+
*
|
|
5
|
+
* Preference order (parse, don't re-validate later):
|
|
6
|
+
* 1. Explicit typed `executionMode` on the task / ExecutorOptions — authoritative.
|
|
7
|
+
* 2. Assignment text heuristics — only explicit Ultragoal QA/red-team phrasing.
|
|
8
|
+
*
|
|
9
|
+
* Bare mentions of `executorQa` (docs, quality-gate field names, negative
|
|
10
|
+
* instructions) must not flip the mode (#2698 / #2456).
|
|
11
|
+
*
|
|
12
|
+
* Mirrors `executor.md`:
|
|
13
|
+
* "activates only when the assignment explicitly labels Executor as Ultragoal
|
|
14
|
+
* completion QA/red-team or asks for `executorQa` red-team evidence."
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export const EXECUTOR_EXECUTION_MODES = ["default", "ultragoal-red-team"] as const;
|
|
18
|
+
export type ExecutorExecutionMode = (typeof EXECUTOR_EXECUTION_MODES)[number];
|
|
19
|
+
|
|
20
|
+
const ULTRAGOAL_COMPLETION_QA = /\bultragoal\s+completion\s+(?:qa|red[-\s]?team)\b/i;
|
|
21
|
+
|
|
22
|
+
/** `executorQa` within a short window of red-team / matrix / evidence framing. */
|
|
23
|
+
const EXECUTOR_QA_EVIDENCE =
|
|
24
|
+
/\bexecutorQa\b[\s\S]{0,120}\b(?:red[-\s]?team|matrix|evidence)\b|\b(?:red[-\s]?team|matrix|evidence)\b[\s\S]{0,120}\bexecutorQa\b/i;
|
|
25
|
+
|
|
26
|
+
/** Common Ultragoal skill spawn phrasing: "executor QA/red-team lane". */
|
|
27
|
+
const EXECUTOR_QA_LANE = /\bexecutor\b[\s\S]{0,48}\b(?:qa|red[-\s]?team)\s+lane\b/i;
|
|
28
|
+
|
|
29
|
+
export function isExecutorExecutionMode(value: unknown): value is ExecutorExecutionMode {
|
|
30
|
+
return value === "default" || value === "ultragoal-red-team";
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Parse a caller-supplied mode. Unknown values fail closed to `undefined`
|
|
35
|
+
* so the assignment heuristic (or default off) still applies — never invent on.
|
|
36
|
+
*/
|
|
37
|
+
export function parseExecutorExecutionMode(value: unknown): ExecutorExecutionMode | undefined {
|
|
38
|
+
if (typeof value !== "string") return undefined;
|
|
39
|
+
const normalized = value.trim().toLowerCase().replaceAll("_", "-");
|
|
40
|
+
if (normalized === "default" || normalized === "ordinary" || normalized === "implement") {
|
|
41
|
+
return "default";
|
|
42
|
+
}
|
|
43
|
+
if (
|
|
44
|
+
normalized === "ultragoal-red-team" ||
|
|
45
|
+
normalized === "ultragoal-redteam" ||
|
|
46
|
+
normalized === "red-team" ||
|
|
47
|
+
normalized === "redteam" ||
|
|
48
|
+
normalized === "executor-qa"
|
|
49
|
+
) {
|
|
50
|
+
return "ultragoal-red-team";
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function assignmentRequestsUltragoalRedTeam(assignment: string | undefined): boolean {
|
|
56
|
+
const text = assignment?.trim() ?? "";
|
|
57
|
+
if (text.length === 0) return false;
|
|
58
|
+
return ULTRAGOAL_COMPLETION_QA.test(text) || EXECUTOR_QA_EVIDENCE.test(text) || EXECUTOR_QA_LANE.test(text);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface ResolveUltragoalRedTeamArgs {
|
|
62
|
+
readonly executionMode?: unknown;
|
|
63
|
+
readonly assignment?: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Final activation decision for the executor prompt fragment.
|
|
68
|
+
* Typed mode wins; assignment text is a compatibility fallback only.
|
|
69
|
+
*/
|
|
70
|
+
export function resolveUltragoalRedTeamActivation(args: ResolveUltragoalRedTeamArgs): boolean {
|
|
71
|
+
const mode = parseExecutorExecutionMode(args.executionMode);
|
|
72
|
+
if (mode === "ultragoal-red-team") return true;
|
|
73
|
+
if (mode === "default") return false;
|
|
74
|
+
return assignmentRequestsUltragoalRedTeam(args.assignment);
|
|
75
|
+
}
|
package/src/tools/ask.ts
CHANGED
|
@@ -553,7 +553,7 @@ export class AskTool implements AgentTool<typeof askSchema, AskToolDetails> {
|
|
|
553
553
|
): Promise<AgentToolResult<AskToolDetails>> {
|
|
554
554
|
await assertUltragoalAskAllowed(this.session.cwd);
|
|
555
555
|
const gateEmitter = this.session.getWorkflowGateEmitter?.();
|
|
556
|
-
const canUseWorkflowGate = gateEmitter?.
|
|
556
|
+
const canUseWorkflowGate = !context?.hasUI && gateEmitter?.supportsRemoteGateAnswers() === true;
|
|
557
557
|
|
|
558
558
|
// Headless fallback: unattended workflow gates are the non-TUI answer path.
|
|
559
559
|
if (!canUseWorkflowGate && (!context?.hasUI || !context.ui)) {
|
package/src/tools/ast-edit.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallb
|
|
|
3
3
|
import { type AstReplaceChange, type AstReplaceFileChange, astEdit } from "@sayknow-cli/natives";
|
|
4
4
|
import type { Component } from "@sayknow-cli/tui";
|
|
5
5
|
import { Text } from "@sayknow-cli/tui";
|
|
6
|
-
import { $
|
|
6
|
+
import { $pickenvpos, prompt, untilAborted } from "@sayknow-cli/utils";
|
|
7
7
|
import * as z from "zod/v4";
|
|
8
8
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
9
9
|
import { computeLineHash, HL_BODY_SEP } from "../hashline/hash";
|
|
@@ -199,7 +199,7 @@ export class AstEditTool implements AgentTool<typeof astEditSchema, AstEditToolD
|
|
|
199
199
|
seenPatterns.add(pat);
|
|
200
200
|
}
|
|
201
201
|
const normalizedRewrites = Object.fromEntries(ops);
|
|
202
|
-
const maxFiles = $
|
|
202
|
+
const maxFiles = $pickenvpos(["SKC_MAX_AST_FILES", "PI_MAX_AST_FILES"], 1000);
|
|
203
203
|
|
|
204
204
|
const scope = await resolveToolSearchScope({
|
|
205
205
|
rawPaths: params.paths,
|
|
@@ -18,7 +18,14 @@ export interface BashRestrictionOptions {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const SHELL_CONTROL_CHARS = new Set([";", "|", "&", "<", ">", "(", ")"]);
|
|
21
|
-
|
|
21
|
+
// `~` is handled separately: bash performs tilde expansion only at positions where a
|
|
22
|
+
// tilde can open an expansion - the start of a word, and inside an assignment word
|
|
23
|
+
// directly after the first `=` or after a `:` in the assigned value. A tilde anywhere
|
|
24
|
+
// else (e.g. the git revision `HEAD~1`) is a literal character.
|
|
25
|
+
const UNSAFE_UNQUOTED_EXPANSION_CHARS = new Set(["$", "*", "?", "[", "]", "{", "}"]);
|
|
26
|
+
// A bash assignment word has a plain assignment name before its first unquoted `=`,
|
|
27
|
+
// in either the `name=value` or the compound `name+=value` form.
|
|
28
|
+
const ASSIGNMENT_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*\+?$/u;
|
|
22
29
|
const ALLOWED_STATE_ACTIONS = new Set(["read", "write", "contract"]);
|
|
23
30
|
const CANONICAL_STATE_TARGETS = new Set<string>(CANONICAL_SKC_WORKFLOW_SKILLS);
|
|
24
31
|
const READ_ONLY_COMMANDS = new Set(["grep", "rg", "tree", "ls", "pwd", "wc", "du", "file", "stat"]);
|
|
@@ -29,6 +36,14 @@ function parseShellWords(command: string): { words: string[]; reason?: string }
|
|
|
29
36
|
let quote: "single" | "double" | null = null;
|
|
30
37
|
|
|
31
38
|
let wordStarted = false;
|
|
39
|
+
// Per-token tilde-expansion state. `assignmentNameCandidate` stays true while the
|
|
40
|
+
// characters before the first unquoted `=` could still form an assignment name (any
|
|
41
|
+
// quoting in that region disqualifies the token), `sawAssignmentEquals` records that
|
|
42
|
+
// the token is an assignment word, and `tildeExpandable` means an unquoted `~` at the
|
|
43
|
+
// current index would actually be expanded by bash.
|
|
44
|
+
let assignmentNameCandidate = true;
|
|
45
|
+
let sawAssignmentEquals = false;
|
|
46
|
+
let tildeExpandable = false;
|
|
32
47
|
for (let index = 0; index < command.length; index += 1) {
|
|
33
48
|
const char = command[index]!;
|
|
34
49
|
const next = command[index + 1];
|
|
@@ -63,11 +78,15 @@ function parseShellWords(command: string): { words: string[]; reason?: string }
|
|
|
63
78
|
if (char === "'") {
|
|
64
79
|
quote = "single";
|
|
65
80
|
wordStarted = true;
|
|
81
|
+
if (!sawAssignmentEquals) assignmentNameCandidate = false;
|
|
82
|
+
tildeExpandable = false;
|
|
66
83
|
continue;
|
|
67
84
|
}
|
|
68
85
|
if (char === '"') {
|
|
69
86
|
quote = "double";
|
|
70
87
|
wordStarted = true;
|
|
88
|
+
if (!sawAssignmentEquals) assignmentNameCandidate = false;
|
|
89
|
+
tildeExpandable = false;
|
|
71
90
|
continue;
|
|
72
91
|
}
|
|
73
92
|
if (char === "`" || (char === "$" && next === "(")) {
|
|
@@ -82,17 +101,42 @@ function parseShellWords(command: string): { words: string[]; reason?: string }
|
|
|
82
101
|
if (UNSAFE_UNQUOTED_EXPANSION_CHARS.has(char)) {
|
|
83
102
|
return { words, reason: `shell expansion character '${char}' is not allowed in restricted bash commands` };
|
|
84
103
|
}
|
|
104
|
+
// Tilde expansion is positional: bash expands a tilde only where one can open an
|
|
105
|
+
// expansion, i.e. at the start of a word or, inside an assignment word, directly
|
|
106
|
+
// after the first `=` or after a `:` in the assigned value. A tilde anywhere else
|
|
107
|
+
// is literal, which is what git revision syntax such as `HEAD~1` relies on.
|
|
108
|
+
if (char === "~" && (!wordStarted || tildeExpandable)) {
|
|
109
|
+
return { words, reason: "shell expansion character '~' is not allowed in restricted bash commands" };
|
|
110
|
+
}
|
|
85
111
|
if (/\s/u.test(char)) {
|
|
86
112
|
if (wordStarted) {
|
|
87
113
|
words.push(current);
|
|
88
114
|
current = "";
|
|
89
115
|
wordStarted = false;
|
|
90
116
|
}
|
|
117
|
+
assignmentNameCandidate = true;
|
|
118
|
+
sawAssignmentEquals = false;
|
|
119
|
+
tildeExpandable = false;
|
|
91
120
|
continue;
|
|
92
121
|
}
|
|
93
122
|
if (char === "\\") {
|
|
94
123
|
return { words, reason: "backslash escapes are not allowed in restricted bash commands" };
|
|
95
124
|
}
|
|
125
|
+
if (char === "=" && !sawAssignmentEquals) {
|
|
126
|
+
// Only a plain assignment name before the first unquoted `=` makes this an
|
|
127
|
+
// assignment word whose value bash scans for tilde expansions.
|
|
128
|
+
if (assignmentNameCandidate && ASSIGNMENT_NAME_PATTERN.test(current)) {
|
|
129
|
+
sawAssignmentEquals = true;
|
|
130
|
+
tildeExpandable = true;
|
|
131
|
+
} else {
|
|
132
|
+
assignmentNameCandidate = false;
|
|
133
|
+
tildeExpandable = false;
|
|
134
|
+
}
|
|
135
|
+
} else if (char === ":" && sawAssignmentEquals) {
|
|
136
|
+
tildeExpandable = true;
|
|
137
|
+
} else {
|
|
138
|
+
tildeExpandable = false;
|
|
139
|
+
}
|
|
96
140
|
current += char;
|
|
97
141
|
wordStarted = true;
|
|
98
142
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $
|
|
1
|
+
import { $pickenv } from "@sayknow-cli/utils/env";
|
|
2
2
|
|
|
3
3
|
/** Minimal UI-capability fields needed to decide whether bash can use the local PTY overlay. */
|
|
4
4
|
export interface BashPtyContext {
|
|
@@ -9,6 +9,6 @@ export interface BashPtyContext {
|
|
|
9
9
|
/** Return whether a bash tool call should use the local interactive PTY overlay. */
|
|
10
10
|
export function canUseInteractiveBashPty(pty: boolean, ctx: BashPtyContext | undefined): boolean {
|
|
11
11
|
if (!pty) return false;
|
|
12
|
-
if ($
|
|
12
|
+
if ($pickenv("SKC_NO_PTY", "PI_NO_PTY") === "1") return false;
|
|
13
13
|
return ctx?.hasUI === true && ctx.ui !== undefined;
|
|
14
14
|
}
|
|
@@ -3,6 +3,7 @@ import * as os from "node:os";
|
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
import * as browsers from "@puppeteer/browsers";
|
|
5
5
|
import { getPuppeteerDir } from "@sayknow-cli/utils/dirs";
|
|
6
|
+
import { $credentialEnv } from "@sayknow-cli/utils/env";
|
|
6
7
|
import * as logger from "@sayknow-cli/utils/logger";
|
|
7
8
|
import { $which } from "@sayknow-cli/utils/which";
|
|
8
9
|
import type { Browser, CDPSession, Page, default as Puppeteer, Target } from "puppeteer-core";
|
|
@@ -80,6 +81,42 @@ export async function loadPuppeteerInWorker(safeDir: string): Promise<typeof Pup
|
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Browser launch overrides resolved from trusted environment sources only.
|
|
86
|
+
*
|
|
87
|
+
* These choose the browser binary and route/verify its traffic, so whatever can
|
|
88
|
+
* set them controls what runs and who sees the session. `$env` merges the
|
|
89
|
+
* caller's `cwd/.env` into `process.env`, so reading them directly would let
|
|
90
|
+
* repository content pick the executable, point every request at an attacker's
|
|
91
|
+
* proxy, or disable certificate validation. Resolve them the same way provider
|
|
92
|
+
* credentials are: launching shell plus SKC/user-owned `.env` files, never the
|
|
93
|
+
* project `.env`.
|
|
94
|
+
*/
|
|
95
|
+
function trustedBrowserEnv(name: string): string | undefined {
|
|
96
|
+
return $credentialEnv(name);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Boolean-like trusted browser env knob (`true`/`1`/`yes`/`on`). */
|
|
100
|
+
function browserLaunchFlagEnabled(name: string): boolean {
|
|
101
|
+
const value = trustedBrowserEnv(name)?.toLowerCase();
|
|
102
|
+
return value === "true" || value === "1" || value === "yes" || value === "on";
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Test seam: the browser launch overrides as resolved from trusted env. */
|
|
106
|
+
export function resolveBrowserEnvOverridesForTest(): {
|
|
107
|
+
executablePath: string | undefined;
|
|
108
|
+
proxy: string | undefined;
|
|
109
|
+
proxyBypassLoopback: boolean;
|
|
110
|
+
ignoreCertErrors: boolean;
|
|
111
|
+
} {
|
|
112
|
+
return {
|
|
113
|
+
executablePath: trustedBrowserEnv("PUPPETEER_EXECUTABLE_PATH"),
|
|
114
|
+
proxy: trustedBrowserEnv("PUPPETEER_PROXY"),
|
|
115
|
+
proxyBypassLoopback: browserLaunchFlagEnabled("PUPPETEER_PROXY_BYPASS_LOOPBACK"),
|
|
116
|
+
ignoreCertErrors: browserLaunchFlagEnabled("PUPPETEER_PROXY_IGNORE_CERT_ERRORS"),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
83
120
|
/**
|
|
84
121
|
* Lazily download Chromium on first browser launch via @puppeteer/browsers.
|
|
85
122
|
* Skipped when a system Chromium (NixOS) or PUPPETEER_EXECUTABLE_PATH is set.
|
|
@@ -89,7 +126,7 @@ let chromiumExecutablePromise: Promise<string | undefined> | undefined;
|
|
|
89
126
|
async function ensureChromiumExecutable(): Promise<string | undefined> {
|
|
90
127
|
const sysChrome = resolveSystemChromium();
|
|
91
128
|
if (sysChrome) return sysChrome;
|
|
92
|
-
const envPath =
|
|
129
|
+
const envPath = trustedBrowserEnv("PUPPETEER_EXECUTABLE_PATH");
|
|
93
130
|
if (envPath) return envPath;
|
|
94
131
|
if (chromiumExecutablePromise) return chromiumExecutablePromise;
|
|
95
132
|
|
|
@@ -272,13 +309,12 @@ export async function launchHeadlessBrowser(opts: LaunchHeadlessOptions): Promis
|
|
|
272
309
|
// Isolated copy only (caller guarantees). Never point this at a live profile.
|
|
273
310
|
launchArgs.push(`--user-data-dir=${opts.profileWarmupDir}`);
|
|
274
311
|
}
|
|
275
|
-
const proxy =
|
|
312
|
+
const proxy = trustedBrowserEnv("PUPPETEER_PROXY");
|
|
276
313
|
if (proxy) {
|
|
277
314
|
launchArgs.push(`--proxy-server=${proxy}`);
|
|
278
315
|
// Chrome (since v72) bypasses proxies for localhost by default. When PUPPETEER_PROXY_BYPASS_LOOPBACK
|
|
279
316
|
// is true, add <-loopback> so traffic to localhost reaches the proxy (e.g. for mitmdump/auth capture).
|
|
280
|
-
|
|
281
|
-
if (bypassLoopback === "true" || bypassLoopback === "1" || bypassLoopback === "yes" || bypassLoopback === "on") {
|
|
317
|
+
if (browserLaunchFlagEnabled("PUPPETEER_PROXY_BYPASS_LOOPBACK")) {
|
|
282
318
|
launchArgs.push("--proxy-bypass-list=<-loopback>");
|
|
283
319
|
}
|
|
284
320
|
}
|
|
@@ -287,8 +323,7 @@ export async function launchHeadlessBrowser(opts: LaunchHeadlessOptions): Promis
|
|
|
287
323
|
if (opts.geo?.locale) {
|
|
288
324
|
launchArgs.push(`--lang=${opts.geo.locale}`);
|
|
289
325
|
}
|
|
290
|
-
|
|
291
|
-
if (ignoreCert === "true" || ignoreCert === "1" || ignoreCert === "yes" || ignoreCert === "on") {
|
|
326
|
+
if (browserLaunchFlagEnabled("PUPPETEER_PROXY_IGNORE_CERT_ERRORS")) {
|
|
292
327
|
launchArgs.push("--ignore-certificate-errors");
|
|
293
328
|
}
|
|
294
329
|
const launchEnv = opts.geo?.timezone ? { ...process.env, TZ: opts.geo.timezone } : undefined;
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import * as os from "node:os";
|
|
2
|
+
import * as path from "node:path";
|
|
2
3
|
|
|
3
4
|
import { formatDimensionNote, type ResizedImage } from "../../utils/image-resize";
|
|
4
5
|
|
|
5
6
|
function shortenPath(filePath: string): string {
|
|
6
7
|
const home = os.homedir();
|
|
7
|
-
|
|
8
|
+
if (!home) return filePath;
|
|
9
|
+
// Require a separator boundary so a sibling that shares the home prefix
|
|
10
|
+
// (e.g. "/home/woodyx/x" for home "/home/woody") is not corrupted into "~x/x".
|
|
11
|
+
const boundary = home.endsWith(path.sep) ? home : home + path.sep;
|
|
12
|
+
return filePath === home || filePath.startsWith(boundary) ? `~${filePath.slice(home.length)}` : filePath;
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
export function formatScreenshot(opts: {
|
package/src/tools/cron.ts
CHANGED
|
@@ -36,7 +36,7 @@ const cronSchema = z
|
|
|
36
36
|
.string()
|
|
37
37
|
.optional()
|
|
38
38
|
.describe(
|
|
39
|
-
"(op=create, required) Prompt to inject between turns when the cron fires.
|
|
39
|
+
"(op=create, required) Prompt to inject between turns when the cron fires. Every firing starts a normal agent turn whose response may be visible; use a persistent monitor, not cron, for ongoing polling that should emit only on state changes.",
|
|
40
40
|
),
|
|
41
41
|
recurring: z
|
|
42
42
|
.boolean()
|