@gajae-code/coding-agent 0.17.2 → 0.17.5
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 +267 -0
- package/dist/types/cli/daemon-cli.d.ts +3 -1
- package/dist/types/cli/github-release.d.ts +17 -0
- package/dist/types/cli/public-command-entry.d.ts +56 -0
- package/dist/types/cli/public-command-errors.d.ts +126 -0
- package/dist/types/cli/public-command-evidence.d.ts +99 -0
- package/dist/types/cli/public-command-help.d.ts +65 -0
- package/dist/types/cli/public-command-registry.d.ts +69 -0
- package/dist/types/cli/session-picker.d.ts +1 -1
- package/dist/types/cli/setup-cli.d.ts +1 -0
- package/dist/types/cli/skills-cli.d.ts +5 -0
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/commands/daemon.d.ts +4 -50
- package/dist/types/commands/sdk.d.ts +20 -37
- package/dist/types/commands/setup.d.ts +3 -0
- package/dist/types/commands/skills.d.ts +9 -0
- package/dist/types/config/autorouting-tier-map.d.ts +1049 -3
- package/dist/types/config/file-lock.d.ts +13 -3
- package/dist/types/config/model-profile-activation.d.ts +45 -1
- package/dist/types/config/model-registry.d.ts +14 -3
- package/dist/types/config/model-resolver.d.ts +1 -1
- package/dist/types/config/settings-schema.d.ts +11 -0
- package/dist/types/coordinator-mcp/question-state.d.ts +6 -1
- package/dist/types/daemon/operator-contract.d.ts +5 -1
- package/dist/types/eval/js/worker-protocol.d.ts +2 -0
- package/dist/types/exec/bash-executor.d.ts +2 -0
- package/dist/types/extensibility/extensions/types.d.ts +12 -0
- package/dist/types/extensibility/gjc-plugins/registry.d.ts +4 -0
- package/dist/types/extensibility/gjc-plugins/runtime-adapters.d.ts +11 -2
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +18 -0
- package/dist/types/extensibility/shared-events.d.ts +3 -1
- package/dist/types/gjc-runtime/session-state-lock.d.ts +61 -0
- package/dist/types/gjc-runtime/state-writer.d.ts +14 -1
- package/dist/types/harness-control-plane/control-endpoint.d.ts +4 -1
- package/dist/types/harness-control-plane/finalize.d.ts +14 -3
- package/dist/types/internal-urls/embedded-protocol.d.ts +9 -0
- package/dist/types/internal-urls/index.d.ts +1 -0
- package/dist/types/internal-urls/parse.d.ts +9 -1
- package/dist/types/main.d.ts +23 -1
- package/dist/types/modes/acp/acp-agent.d.ts +55 -1
- package/dist/types/modes/acp/startup-provenance.d.ts +16 -0
- package/dist/types/modes/components/custom-provider-wizard.d.ts +19 -1
- package/dist/types/modes/components/session-selector.d.ts +5 -2
- package/dist/types/modes/components/user-message-selector.d.ts +5 -2
- package/dist/types/modes/controllers/command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +1 -1
- package/dist/types/modes/interactive-mode.d.ts +1 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +11 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +14 -1
- package/dist/types/modes/types.d.ts +2 -2
- package/dist/types/runtime/process-lifecycle.d.ts +2 -0
- package/dist/types/runtime-mcp/loader.d.ts +2 -0
- package/dist/types/runtime-mcp/manager.d.ts +69 -6
- package/dist/types/runtime-mcp/pool.d.ts +17 -0
- package/dist/types/runtime-mcp/redaction.d.ts +20 -0
- package/dist/types/runtime-mcp/startup-policy.d.ts +6 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +9 -0
- package/dist/types/runtime-mcp/transports/http.d.ts +11 -0
- package/dist/types/sdk/broker/broker.d.ts +17 -4
- package/dist/types/sdk/broker/ensure.d.ts +3 -0
- package/dist/types/sdk/broker/identity.d.ts +5 -1
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +23 -3
- package/dist/types/sdk/broker/lifecycle.d.ts +15 -8
- package/dist/types/sdk/broker/managed-task-dag.d.ts +1335 -0
- package/dist/types/sdk/broker/managed-task-verification.d.ts +37 -0
- package/dist/types/sdk/broker/runtime.d.ts +1 -1
- package/dist/types/sdk/broker/session-index.d.ts +22 -3
- package/dist/types/sdk/broker/spawn-authority.d.ts +12 -0
- package/dist/types/sdk/broker/startup-failure.d.ts +4 -0
- package/dist/types/sdk/broker/stderr-drainer.d.ts +13 -0
- package/dist/types/sdk/bus/index.d.ts +19 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +7 -1
- package/dist/types/sdk/bus/telegram-daemon.d.ts +5 -0
- package/dist/types/sdk/cli/master-cli.d.ts +6 -10
- package/dist/types/sdk/cli/rows.d.ts +19 -1
- package/dist/types/sdk/cli/session-cli.d.ts +22 -5
- package/dist/types/sdk/client/client.d.ts +2 -0
- package/dist/types/sdk/guides/cli.d.ts +3 -4
- package/dist/types/sdk/guides/verify.d.ts +2 -0
- package/dist/types/sdk/host/host.d.ts +9 -0
- package/dist/types/sdk/host/session-runtime.d.ts +31 -0
- package/dist/types/sdk/host/types.d.ts +10 -0
- package/dist/types/sdk/index.d.ts +1 -0
- package/dist/types/sdk/prompt-deadline-flush.d.ts +85 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +37 -0
- package/dist/types/sdk/prompt-tool-boundary.d.ts +73 -0
- package/dist/types/sdk/router/session-router.d.ts +2 -0
- package/dist/types/sdk/session.d.ts +3 -3
- package/dist/types/sdk/startup-capability.d.ts +2 -0
- package/dist/types/sdk/transport/relay.d.ts +1 -0
- package/dist/types/sdk/transport/serve-cli.d.ts +48 -4
- package/dist/types/sdk/transport/stdio.d.ts +5 -1
- package/dist/types/session/agent-session.d.ts +175 -23
- package/dist/types/session/fallback-chain-controller.d.ts +6 -6
- package/dist/types/session/fold-coordinator.d.ts +17 -3
- package/dist/types/session/internal/managed-session-storage.d.ts +7 -1
- package/dist/types/session/session-manager.d.ts +64 -1
- package/dist/types/session/session-work-lease.d.ts +14 -0
- package/dist/types/setup/model-onboarding-guidance.d.ts +1 -1
- package/dist/types/setup/provider-onboarding.d.ts +81 -1
- package/dist/types/task/types.d.ts +2 -0
- package/dist/types/tools/bash-interactive.d.ts +1 -0
- package/dist/types/tools/bash.d.ts +37 -11
- package/dist/types/tools/fetch.d.ts +10 -1
- package/dist/types/tools/job.d.ts +1 -1
- package/dist/types/tools/steer-fold.d.ts +31 -0
- package/dist/types/tools/subagent.d.ts +8 -1
- package/dist/types/utils/git.d.ts +28 -2
- package/dist/types/utils/mupdf-embedded.d.ts +2 -0
- package/dist/types/utils/mupdf.d.ts +4 -0
- package/dist/types/utils/session-title-generation.d.ts +6 -0
- package/dist/types/utils/title-generator.d.ts +11 -2
- package/dist/types/web/scrapers/types.d.ts +3 -0
- package/package.json +18 -10
- package/scripts/build-binary.ts +9 -3
- package/scripts/compile-args.ts +0 -9
- package/scripts/embed-mupdf.ts +52 -0
- package/scripts/generate-sdk-operation-inventory.ts +31 -1
- package/scripts/vendor-markit.ts +196 -0
- package/src/async/job-manager.ts +22 -1
- package/src/cli/daemon-cli.ts +53 -18
- package/src/cli/github-release.ts +87 -5
- package/src/cli/mcp-cli.ts +38 -4
- package/src/cli/public-command-entry.ts +450 -0
- package/src/cli/public-command-errors.ts +581 -0
- package/src/cli/public-command-evidence.ts +717 -0
- package/src/cli/public-command-help.ts +360 -0
- package/src/cli/public-command-registry.ts +541 -0
- package/src/cli/session-picker.ts +2 -1
- package/src/cli/setup-cli.ts +10 -1
- package/src/cli/skills-cli.ts +46 -2
- package/src/cli/stats-cli.ts +11 -1
- package/src/cli.ts +61 -1
- package/src/commands/daemon.ts +65 -69
- package/src/commands/sdk.ts +175 -117
- package/src/commands/setup.ts +2 -0
- package/src/commands/skills.ts +11 -0
- package/src/config/autorouting-tier-map.ts +543 -3
- package/src/config/file-lock.ts +206 -65
- package/src/config/model-discovery-manager.ts +4 -4
- package/src/config/model-profile-activation.ts +417 -66
- package/src/config/model-registry.ts +254 -36
- package/src/config/model-resolver.ts +6 -1
- package/src/config/settings-schema.ts +26 -2
- package/src/coordinator-mcp/policy.ts +10 -5
- package/src/coordinator-mcp/question-gate-codec.ts +17 -0
- package/src/coordinator-mcp/question-state.ts +179 -9
- package/src/coordinator-mcp/server.ts +521 -87
- package/src/coordinator-mcp/session-reaper.ts +6 -4
- package/src/crash/record-loader.ts +6 -2
- package/src/daemon/operator-contract.ts +26 -12
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +1 -1
- package/src/eval/js/context-manager.ts +8 -8
- package/src/eval/js/worker-core.ts +9 -4
- package/src/eval/js/worker-protocol.ts +2 -0
- package/src/exec/bash-executor.ts +3 -0
- package/src/extensibility/extensions/runner.ts +52 -4
- package/src/extensibility/extensions/types.ts +10 -0
- package/src/extensibility/gjc-plugins/registry.ts +196 -37
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +46 -8
- package/src/extensibility/runtime-skill-discovery.ts +61 -3
- package/src/extensibility/shared-events.ts +3 -1
- package/src/gjc-runtime/session-state-lock.ts +165 -24
- package/src/gjc-runtime/state-writer.ts +317 -6
- package/src/gjc-runtime/ultragoal-succession.ts +31 -3
- package/src/harness-control-plane/control-endpoint.ts +24 -6
- package/src/harness-control-plane/finalize.ts +312 -25
- package/src/harness-control-plane/owner.ts +323 -89
- package/src/internal-urls/docs-index.generated.ts +23 -20
- package/src/internal-urls/embedded-protocol.ts +83 -0
- package/src/internal-urls/index.ts +1 -0
- package/src/internal-urls/parse.ts +21 -1
- package/src/internal-urls/router.ts +4 -2
- package/src/main.ts +192 -74
- package/src/modes/acp/acp-agent.ts +973 -56
- package/src/modes/acp/startup-provenance.ts +59 -0
- package/src/modes/components/custom-provider-wizard.ts +308 -7
- package/src/modes/components/gjc-bundle-settings.ts +21 -1
- package/src/modes/components/oauth-selector.ts +9 -0
- package/src/modes/components/session-selector.ts +47 -4
- package/src/modes/components/tool-status-header.ts +72 -6
- package/src/modes/components/user-message-selector.ts +57 -15
- package/src/modes/controllers/command-controller.ts +58 -32
- package/src/modes/controllers/extension-ui-controller.ts +33 -7
- package/src/modes/controllers/input-controller.ts +4 -0
- package/src/modes/controllers/runtime-mcp-command-controller.ts +1 -1
- package/src/modes/controllers/selector-controller.ts +161 -15
- package/src/modes/interactive-mode.ts +21 -7
- package/src/modes/runtime-init.ts +1 -0
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +124 -7
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +16 -2
- package/src/modes/types.ts +2 -2
- package/src/prompts/agent-fragments/browser-aside.md +1 -0
- package/src/prompts/system/title-system.md +1 -1
- package/src/prompts/tools/bash.md +1 -1
- package/src/prompts/tools/job.md +1 -1
- package/src/prompts/tools/read.md +2 -0
- package/src/runtime/network-prewarm-service.test.ts +36 -1
- package/src/runtime/network-prewarm-service.ts +28 -3
- package/src/runtime/process-lifecycle.ts +22 -11
- package/src/runtime-mcp/config.ts +16 -1
- package/src/runtime-mcp/loader.ts +6 -3
- package/src/runtime-mcp/manager.ts +845 -109
- package/src/runtime-mcp/pool.test.ts +31 -0
- package/src/runtime-mcp/pool.ts +304 -28
- package/src/runtime-mcp/redaction.ts +42 -0
- package/src/runtime-mcp/startup-policy.ts +7 -0
- package/src/runtime-mcp/tool-bridge.ts +71 -0
- package/src/runtime-mcp/transports/http.ts +108 -25
- package/src/sdk/acp/adapter.ts +27 -8
- package/src/sdk/broker/broker.ts +1431 -198
- package/src/sdk/broker/ensure.ts +21 -3
- package/src/sdk/broker/identity.ts +22 -1
- package/src/sdk/broker/lifecycle-ledger.ts +95 -31
- package/src/sdk/broker/lifecycle.ts +690 -141
- package/src/sdk/broker/managed-task-dag.ts +1927 -0
- package/src/sdk/broker/managed-task-verification.ts +642 -0
- package/src/sdk/broker/runtime.ts +1 -1
- package/src/sdk/broker/session-index.ts +97 -4
- package/src/sdk/broker/spawn-authority.ts +175 -14
- package/src/sdk/broker/startup-failure.ts +80 -1
- package/src/sdk/broker/stderr-drainer.ts +59 -0
- package/src/sdk/broker/transport.ts +1 -0
- package/src/sdk/bus/chat-daemon-control.ts +2 -2
- package/src/sdk/bus/chat-daemon-runtime.ts +1 -0
- package/src/sdk/bus/index.ts +707 -81
- package/src/sdk/bus/telegram-daemon-cli.ts +31 -2
- package/src/sdk/bus/telegram-daemon-contract.ts +7 -1
- package/src/sdk/bus/telegram-daemon.ts +10 -3
- package/src/sdk/cli/master-cli.ts +47 -36
- package/src/sdk/cli/rows.ts +30 -7
- package/src/sdk/cli/session-cli.ts +705 -184
- package/src/sdk/client/client.ts +18 -0
- package/src/sdk/guides/catalog.ts +2 -2
- package/src/sdk/guides/cli.ts +20 -62
- package/src/sdk/guides/verify.ts +14 -0
- package/src/sdk/host/host.ts +49 -5
- package/src/sdk/host/session-runtime.test.ts +184 -2
- package/src/sdk/host/session-runtime.ts +322 -101
- package/src/sdk/host/types.ts +12 -1
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +84 -0
- package/src/sdk/host/websocket-transport.ts +40 -6
- package/src/sdk/index.ts +11 -0
- package/src/sdk/lifecycle/service.ts +2 -0
- package/src/sdk/prompt-deadline-flush.ts +356 -0
- package/src/sdk/prompt-deadline-manager.ts +133 -1
- package/src/sdk/prompt-tool-boundary.ts +121 -0
- package/src/sdk/protocol/operation-inventory.generated.json +106 -0
- package/src/sdk/router/session-router.ts +9 -1
- package/src/sdk/session.ts +763 -116
- package/src/sdk/startup-capability.ts +1 -1
- package/src/sdk/transport/relay.ts +71 -6
- package/src/sdk/transport/serve-cli.ts +397 -42
- package/src/sdk/transport/socket.ts +12 -11
- package/src/sdk/transport/stdio.ts +7 -3
- package/src/session/agent-session.ts +2472 -407
- package/src/session/fallback-chain-controller.ts +6 -7
- package/src/session/fold-coordinator.ts +24 -5
- package/src/session/internal/managed-session-scope.ts +68 -18
- package/src/session/internal/managed-session-storage.ts +334 -12
- package/src/session/session-manager.ts +382 -44
- package/src/session/session-work-lease.ts +34 -0
- package/src/setup/model-onboarding-guidance.ts +1 -1
- package/src/setup/provider-onboarding.ts +397 -24
- package/src/setup/provider-presets.json +2 -1
- package/src/slash-commands/builtin-registry.ts +259 -15
- package/src/task/executor.ts +46 -17
- package/src/task/index.ts +14 -2
- package/src/task/types.ts +2 -0
- package/src/tools/bash-interactive.ts +2 -0
- package/src/tools/bash.ts +118 -78
- package/src/tools/fetch.ts +140 -25
- package/src/tools/job.ts +151 -25
- package/src/tools/output-meta.ts +15 -2
- package/src/tools/path-utils.ts +27 -3
- package/src/tools/read.ts +3 -3
- package/src/tools/steer-fold.ts +107 -0
- package/src/tools/subagent-render.ts +24 -1
- package/src/tools/subagent.ts +27 -1
- package/src/tools/tool-catalog.generated.ts +29 -2
- package/src/tools/tool-errors.ts +4 -0
- package/src/utils/git.ts +53 -3
- package/src/utils/markit.ts +55 -41
- package/src/utils/mupdf-assets.d.ts +4 -0
- package/src/utils/mupdf-embedded.ts +4 -0
- package/src/utils/mupdf.ts +136 -0
- package/src/utils/session-title-generation.ts +29 -0
- package/src/utils/title-generator.ts +46 -2
- package/src/web/scrapers/types.ts +24 -3
- package/vendor/markit-ai/LICENSE +21 -0
- package/vendor/markit-ai/MANIFEST.json +412 -0
- package/vendor/markit-ai/dist/commands/config.d.ts +4 -0
- package/vendor/markit-ai/dist/commands/config.js +139 -0
- package/vendor/markit-ai/dist/commands/convert.d.ts +6 -0
- package/vendor/markit-ai/dist/commands/convert.js +113 -0
- package/vendor/markit-ai/dist/commands/formats.d.ts +2 -0
- package/vendor/markit-ai/dist/commands/formats.js +92 -0
- package/vendor/markit-ai/dist/commands/init.d.ts +2 -0
- package/vendor/markit-ai/dist/commands/init.js +29 -0
- package/vendor/markit-ai/dist/commands/onboard.d.ts +2 -0
- package/vendor/markit-ai/dist/commands/onboard.js +61 -0
- package/vendor/markit-ai/dist/commands/plugin.d.ts +4 -0
- package/vendor/markit-ai/dist/commands/plugin.js +58 -0
- package/vendor/markit-ai/dist/config.d.ts +26 -0
- package/vendor/markit-ai/dist/config.js +42 -0
- package/vendor/markit-ai/dist/converters/audio.d.ts +7 -0
- package/vendor/markit-ai/dist/converters/audio.js +104 -0
- package/vendor/markit-ai/dist/converters/csv.d.ts +7 -0
- package/vendor/markit-ai/dist/converters/csv.js +83 -0
- package/vendor/markit-ai/dist/converters/docx.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/docx.js +57 -0
- package/vendor/markit-ai/dist/converters/epub.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/epub.js +128 -0
- package/vendor/markit-ai/dist/converters/github.d.ts +18 -0
- package/vendor/markit-ai/dist/converters/github.js +148 -0
- package/vendor/markit-ai/dist/converters/html.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/html.js +30 -0
- package/vendor/markit-ai/dist/converters/image.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/image.js +124 -0
- package/vendor/markit-ai/dist/converters/ipynb.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/ipynb.js +75 -0
- package/vendor/markit-ai/dist/converters/iwork.d.ts +20 -0
- package/vendor/markit-ai/dist/converters/iwork.js +391 -0
- package/vendor/markit-ai/dist/converters/json.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/json.js +21 -0
- package/vendor/markit-ai/dist/converters/pdf/columns.d.ts +35 -0
- package/vendor/markit-ai/dist/converters/pdf/columns.js +93 -0
- package/vendor/markit-ai/dist/converters/pdf/extract.d.ts +19 -0
- package/vendor/markit-ai/dist/converters/pdf/extract.js +514 -0
- package/vendor/markit-ai/dist/converters/pdf/grid.d.ts +25 -0
- package/vendor/markit-ai/dist/converters/pdf/grid.js +795 -0
- package/vendor/markit-ai/dist/converters/pdf/headers.d.ts +24 -0
- package/vendor/markit-ai/dist/converters/pdf/headers.js +108 -0
- package/vendor/markit-ai/dist/converters/pdf/index.d.ts +19 -0
- package/vendor/markit-ai/dist/converters/pdf/index.js +136 -0
- package/vendor/markit-ai/dist/converters/pdf/mupdf-loader.js +9 -0
- package/vendor/markit-ai/dist/converters/pdf/render.d.ts +24 -0
- package/vendor/markit-ai/dist/converters/pdf/render.js +513 -0
- package/vendor/markit-ai/dist/converters/pdf/types.d.ts +75 -0
- package/vendor/markit-ai/dist/converters/pdf/types.js +1 -0
- package/vendor/markit-ai/dist/converters/plain-text.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/plain-text.js +87 -0
- package/vendor/markit-ai/dist/converters/pptx.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/pptx.js +289 -0
- package/vendor/markit-ai/dist/converters/rss.d.ts +11 -0
- package/vendor/markit-ai/dist/converters/rss.js +138 -0
- package/vendor/markit-ai/dist/converters/wikipedia.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/wikipedia.js +33 -0
- package/vendor/markit-ai/dist/converters/xlsx.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/xlsx.js +147 -0
- package/vendor/markit-ai/dist/converters/xml.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/xml.js +18 -0
- package/vendor/markit-ai/dist/converters/yaml.d.ts +6 -0
- package/vendor/markit-ai/dist/converters/yaml.js +17 -0
- package/vendor/markit-ai/dist/converters/zip.d.ts +8 -0
- package/vendor/markit-ai/dist/converters/zip.js +57 -0
- package/vendor/markit-ai/dist/index.d.ts +30 -0
- package/vendor/markit-ai/dist/index.js +26 -0
- package/vendor/markit-ai/dist/main.d.ts +2 -0
- package/vendor/markit-ai/dist/main.js +191 -0
- package/vendor/markit-ai/dist/markit.d.ts +45 -0
- package/vendor/markit-ai/dist/markit.js +267 -0
- package/vendor/markit-ai/dist/plugins/api.d.ts +7 -0
- package/vendor/markit-ai/dist/plugins/api.js +42 -0
- package/vendor/markit-ai/dist/plugins/index.d.ts +4 -0
- package/vendor/markit-ai/dist/plugins/index.js +3 -0
- package/vendor/markit-ai/dist/plugins/installer.d.ts +25 -0
- package/vendor/markit-ai/dist/plugins/installer.js +176 -0
- package/vendor/markit-ai/dist/plugins/loader.d.ts +6 -0
- package/vendor/markit-ai/dist/plugins/loader.js +61 -0
- package/vendor/markit-ai/dist/plugins/types.d.ts +25 -0
- package/vendor/markit-ai/dist/plugins/types.js +1 -0
- package/vendor/markit-ai/dist/providers/anthropic.d.ts +2 -0
- package/vendor/markit-ai/dist/providers/anthropic.js +47 -0
- package/vendor/markit-ai/dist/providers/index.d.ts +21 -0
- package/vendor/markit-ai/dist/providers/index.js +56 -0
- package/vendor/markit-ai/dist/providers/openai.d.ts +2 -0
- package/vendor/markit-ai/dist/providers/openai.js +76 -0
- package/vendor/markit-ai/dist/providers/types.d.ts +26 -0
- package/vendor/markit-ai/dist/providers/types.js +1 -0
- package/vendor/markit-ai/dist/types.d.ts +36 -0
- package/vendor/markit-ai/dist/types.js +1 -0
- package/vendor/markit-ai/dist/utils/exit-codes.d.ts +4 -0
- package/vendor/markit-ai/dist/utils/exit-codes.js +4 -0
- package/vendor/markit-ai/dist/utils/output.d.ts +22 -0
- package/vendor/markit-ai/dist/utils/output.js +31 -0
- package/vendor/markit-ai/dist/utils/turndown.d.ts +8 -0
- package/vendor/markit-ai/dist/utils/turndown.js +70 -0
- package/vendor/markit-ai/package.json +74 -0
- package/vendor/markit-ai.patch +49 -0
package/src/commands/sdk.ts
CHANGED
|
@@ -4,8 +4,10 @@ import * as fs from "node:fs/promises";
|
|
|
4
4
|
import * as os from "node:os";
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { logger } from "@gajae-code/utils";
|
|
7
|
-
import { Args, CliParseError, Command, Flags
|
|
7
|
+
import { Args, CliParseError, Command, Flags } from "@gajae-code/utils/cli";
|
|
8
8
|
import type { Args as ParsedArgs } from "../cli/args";
|
|
9
|
+
import { isSafeSdkInternalAgentDir, scanPublicCommand } from "../cli/public-command-entry";
|
|
10
|
+
import { PublicCommandFailure } from "../cli/public-command-errors";
|
|
9
11
|
import { parseModelString } from "../config/model-resolver";
|
|
10
12
|
import { Settings } from "../config/settings";
|
|
11
13
|
import { applyStartupModelProfiles, createSessionManager } from "../main";
|
|
@@ -26,13 +28,14 @@ import {
|
|
|
26
28
|
type SessionLifecycleLaunchRequest,
|
|
27
29
|
type SessionLifecycleTranscriptIdentity,
|
|
28
30
|
sessionHostAttachedClients,
|
|
29
|
-
|
|
31
|
+
sessionHostWorkLeaseActive,
|
|
30
32
|
startBrokerDeadRegistrationSweep,
|
|
31
33
|
writeSessionLifecycleFailure,
|
|
32
34
|
writeSessionLifecycleReady,
|
|
33
35
|
} from "../sdk/broker/lifecycle";
|
|
34
36
|
import { processIncarnation } from "../sdk/broker/process-incarnation";
|
|
35
37
|
import { writeBrokerStartupFailureMarker } from "../sdk/broker/startup-failure";
|
|
38
|
+
import { runSdkStderrDrainer } from "../sdk/broker/stderr-drainer";
|
|
36
39
|
import { renderSdkSearchTable, runSdkSearch, runSdkSessionCli } from "../sdk/cli";
|
|
37
40
|
import { renderSpawnTable, runSdkSpawn, SdkMasterCliError } from "../sdk/cli/master-cli";
|
|
38
41
|
import { runSdkGuidesCli } from "../sdk/guides/cli";
|
|
@@ -209,10 +212,10 @@ export async function watchSessionHostBrokerLiveness(deps: {
|
|
|
209
212
|
* no client attached before treating itself as abandoned.
|
|
210
213
|
*
|
|
211
214
|
* This cannot fire during healthy work. "Attached" is the host's own live
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
215
|
+
* demand count: observer-only sockets (such as an idle chat daemon) do not
|
|
216
|
+
* reset the window, while an in-flight turn is reported separately. Only a
|
|
217
|
+
* client that is actually demanding the host opens it, and 30 minutes is far
|
|
218
|
+
* longer than any client
|
|
216
219
|
* reconnect budget (ACP's is seconds), so a crashed-and-restarted client
|
|
217
220
|
* reattaches long before the window closes.
|
|
218
221
|
*/
|
|
@@ -238,8 +241,8 @@ const SESSION_HOST_ATTACHMENT_POLL_MS = 30_000;
|
|
|
238
241
|
* from every client for a full idle grace, or nobody has come for it at all
|
|
239
242
|
* for a full first-attach grace.
|
|
240
243
|
*
|
|
241
|
-
* `readAttachedClients` reports the host's own live client
|
|
242
|
-
*
|
|
244
|
+
* `readAttachedClients` reports the host's own live demanding-client count;
|
|
245
|
+
* `undefined` means the SDK endpoint publishes no such evidence — before
|
|
243
246
|
* startup, after teardown, or when every reader itself fails. That ambiguity is
|
|
244
247
|
* never instant detachment: it cannot reap on the poll that first sees it, it
|
|
245
248
|
* can only open a window. Which window depends on what was already observed. A
|
|
@@ -250,28 +253,27 @@ const SESSION_HOST_ATTACHMENT_POLL_MS = 30_000;
|
|
|
250
253
|
* an observed count of zero. Every reachable state therefore carries a finite
|
|
251
254
|
* bound.
|
|
252
255
|
*
|
|
253
|
-
* `
|
|
254
|
-
*
|
|
255
|
-
* arrive over an endpoint a client dialed. Live work therefore
|
|
256
|
-
* windows, which is what keeps a mid-prompt host alive whether
|
|
257
|
-
* zero or stops being readable at all. That still bounds a
|
|
258
|
-
* runtime never came up: with no transport it can never receive
|
|
259
|
-
* never
|
|
260
|
-
*
|
|
261
|
-
* never removes it.
|
|
256
|
+
* `readWorkLease` reports whether the host's authoritative session-work lease
|
|
257
|
+
* is held. A lease is positive proof a client did come for this host: a prompt
|
|
258
|
+
* can only arrive over an endpoint a client dialed. Live work therefore
|
|
259
|
+
* restarts both windows, which is what keeps a mid-prompt host alive whether
|
|
260
|
+
* its count reads zero or stops being readable at all. That still bounds a
|
|
261
|
+
* host whose SDK runtime never came up: with no transport it can never receive
|
|
262
|
+
* a prompt, so it never acquires work and its window keeps running from process
|
|
263
|
+
* start. Releasing the lease resumes the applicable bound.
|
|
262
264
|
*/
|
|
263
265
|
export async function watchSessionHostClientAttachment(deps: {
|
|
264
266
|
readAttachedClients: () => number | undefined;
|
|
265
|
-
|
|
267
|
+
readWorkLease?: () => boolean;
|
|
266
268
|
now?: () => number;
|
|
267
269
|
sleep?: (ms: number) => Promise<void>;
|
|
268
270
|
idleGraceMs?: number;
|
|
269
271
|
firstAttachGraceMs?: number;
|
|
270
272
|
pollMs?: number;
|
|
271
|
-
}): Promise<
|
|
273
|
+
}): Promise<"detached_idle"> {
|
|
272
274
|
const now = deps.now ?? Date.now;
|
|
273
275
|
const sleep = deps.sleep ?? (async ms => await Bun.sleep(ms));
|
|
274
|
-
const
|
|
276
|
+
const readWorkLease = deps.readWorkLease ?? (() => false);
|
|
275
277
|
const idleGraceMs = deps.idleGraceMs ?? SESSION_HOST_DETACHED_IDLE_GRACE_MS;
|
|
276
278
|
const firstAttachGraceMs = deps.firstAttachGraceMs ?? SESSION_HOST_FIRST_ATTACH_GRACE_MS;
|
|
277
279
|
const pollMs = deps.pollMs ?? SESSION_HOST_ATTACHMENT_POLL_MS;
|
|
@@ -281,7 +283,7 @@ export async function watchSessionHostClientAttachment(deps: {
|
|
|
281
283
|
let unattendedSince = now();
|
|
282
284
|
for (;;) {
|
|
283
285
|
const attached = deps.readAttachedClients();
|
|
284
|
-
if (
|
|
286
|
+
if (readWorkLease()) {
|
|
285
287
|
unattendedSince = now();
|
|
286
288
|
detachedSince = null;
|
|
287
289
|
}
|
|
@@ -294,9 +296,9 @@ export async function watchSessionHostClientAttachment(deps: {
|
|
|
294
296
|
// registration stops publishing a count instead of reporting zero.
|
|
295
297
|
// Both accrue against the idle bound rather than running forever.
|
|
296
298
|
detachedSince ??= now();
|
|
297
|
-
if (now() - detachedSince >= idleGraceMs) return;
|
|
299
|
+
if (now() - detachedSince >= idleGraceMs) return "detached_idle";
|
|
298
300
|
} else if (now() - unattendedSince >= firstAttachGraceMs) {
|
|
299
|
-
return;
|
|
301
|
+
return "detached_idle";
|
|
300
302
|
}
|
|
301
303
|
await sleep(pollMs);
|
|
302
304
|
}
|
|
@@ -686,10 +688,10 @@ export async function runSessionHost(
|
|
|
686
688
|
lifecycleTranscriptPath = session.sessionManager.getSessionFile();
|
|
687
689
|
});
|
|
688
690
|
let sessionDisposal: Promise<void> | undefined;
|
|
689
|
-
const disposeSession = (): Promise<void> => {
|
|
691
|
+
const disposeSession = (reason?: "detached_idle"): Promise<void> => {
|
|
690
692
|
sessionDisposal ??= (async () => {
|
|
691
693
|
try {
|
|
692
|
-
await session.dispose();
|
|
694
|
+
await session.dispose(reason === undefined ? {} : { sessionShutdownReason: reason });
|
|
693
695
|
} catch (error) {
|
|
694
696
|
if (!isSessionDisposalIncompleteError(error)) throw error;
|
|
695
697
|
await session.awaitDisposeCompletion();
|
|
@@ -735,8 +737,8 @@ export async function runSessionHost(
|
|
|
735
737
|
return failureRollback;
|
|
736
738
|
};
|
|
737
739
|
const sessionEndpointPath = path.join(request.stateRoot, "sdk", `${request.sessionId}.json`);
|
|
738
|
-
const exitAfterSessionDisposal = async (): Promise<void> => {
|
|
739
|
-
await disposeSession();
|
|
740
|
+
const exitAfterSessionDisposal = async (reason?: "detached_idle"): Promise<void> => {
|
|
741
|
+
await disposeSession(reason);
|
|
740
742
|
let failure: SdkStartupFailure | undefined;
|
|
741
743
|
try {
|
|
742
744
|
const endpoint = JSON.parse(await fs.readFile(sessionEndpointPath, "utf8")) as {
|
|
@@ -766,11 +768,11 @@ export async function runSessionHost(
|
|
|
766
768
|
process.exit(process.exitCode ?? 0);
|
|
767
769
|
};
|
|
768
770
|
let stopping = false;
|
|
769
|
-
const stop = () => {
|
|
771
|
+
const stop = (reason?: "detached_idle") => {
|
|
770
772
|
if (capability.result?.status === "started") {
|
|
771
773
|
if (stopping) return;
|
|
772
774
|
stopping = true;
|
|
773
|
-
void exitAfterSessionDisposal();
|
|
775
|
+
void exitAfterSessionDisposal(reason);
|
|
774
776
|
return;
|
|
775
777
|
}
|
|
776
778
|
const failure = capability.normalizeFailure("startup", "failed", "SDK lifecycle host terminated.");
|
|
@@ -858,31 +860,53 @@ export async function runSessionHost(
|
|
|
858
860
|
await Bun.sleep(5_000);
|
|
859
861
|
}
|
|
860
862
|
startMemoryBackendAfterReadiness(startDeferredMemoryBackend);
|
|
861
|
-
process.once("SIGTERM", stop);
|
|
862
|
-
process.once("SIGINT", stop);
|
|
863
|
+
process.once("SIGTERM", () => stop());
|
|
864
|
+
process.once("SIGINT", () => stop());
|
|
863
865
|
// Two independent bounds, either of which reaps this detached host through
|
|
864
866
|
// the same graceful teardown a SIGTERM would take. The first covers a broker
|
|
865
867
|
// that is gone for good; the second covers the opposite case, a perfectly
|
|
866
868
|
// healthy broker whose host nobody is attached to any more and for which no
|
|
867
869
|
// `session.close` will ever arrive.
|
|
868
|
-
await Promise.race([
|
|
869
|
-
watchSessionHostBrokerLiveness({ agentDir }),
|
|
870
|
+
const reapReason = await Promise.race([
|
|
871
|
+
watchSessionHostBrokerLiveness({ agentDir }).then(() => undefined),
|
|
870
872
|
watchSessionHostClientAttachment({
|
|
871
873
|
readAttachedClients: sessionHostAttachedClients,
|
|
872
|
-
|
|
874
|
+
readWorkLease: sessionHostWorkLeaseActive,
|
|
873
875
|
}),
|
|
874
876
|
]);
|
|
875
|
-
stop();
|
|
877
|
+
stop(reapReason);
|
|
876
878
|
await new Promise<void>(() => {});
|
|
877
879
|
}
|
|
878
880
|
|
|
879
|
-
export type SdkInternalArgv =
|
|
881
|
+
export type SdkInternalArgv =
|
|
882
|
+
| { action: "broker-internal"; agentDir: string }
|
|
883
|
+
| { action: "session-host-internal" }
|
|
884
|
+
| { action: "stderr-drain-internal"; logPath: string; maxBytes: number };
|
|
880
885
|
|
|
881
886
|
/** Parses the exact private argv contracts used by SDK child-process spawns. */
|
|
882
887
|
export function parseSdkInternalArgv(argv: readonly string[]): SdkInternalArgv {
|
|
883
888
|
if (argv[0] === "session-host-internal" && argv.length === 1) return { action: "session-host-internal" };
|
|
884
|
-
if (
|
|
889
|
+
if (
|
|
890
|
+
argv[0] === "broker-internal" &&
|
|
891
|
+
argv.length === 3 &&
|
|
892
|
+
argv[1] === "--agent-dir" &&
|
|
893
|
+
typeof argv[2] === "string" &&
|
|
894
|
+
isSafeSdkInternalAgentDir(argv[2])
|
|
895
|
+
)
|
|
885
896
|
return { action: "broker-internal", agentDir: argv[2] };
|
|
897
|
+
if (
|
|
898
|
+
argv[0] === "stderr-drain-internal" &&
|
|
899
|
+
argv.length === 5 &&
|
|
900
|
+
argv[1] === "--path" &&
|
|
901
|
+
argv[2] &&
|
|
902
|
+
path.isAbsolute(argv[2]) &&
|
|
903
|
+
argv[3] === "--max-bytes"
|
|
904
|
+
) {
|
|
905
|
+
const maxBytes = parsePositiveTimeout(argv[4], "--max-bytes");
|
|
906
|
+
if (maxBytes !== undefined && maxBytes <= 64 * 1024) {
|
|
907
|
+
return { action: "stderr-drain-internal", logPath: argv[2], maxBytes };
|
|
908
|
+
}
|
|
909
|
+
}
|
|
886
910
|
throw new CliParseError("Invalid internal SDK invocation.");
|
|
887
911
|
}
|
|
888
912
|
|
|
@@ -911,12 +935,12 @@ class SdkServeHelp extends Command {
|
|
|
911
935
|
|
|
912
936
|
class SdkSessionHelp extends Command {
|
|
913
937
|
static description =
|
|
914
|
-
"Manage SDK sessions: `gjc sdk session list|inspect|send|status|tail|retire`, or the explicit raw hatch `gjc sdk session raw control|query|global`. The session CLI is broker-bound and credential-free.";
|
|
938
|
+
"Manage SDK sessions: `gjc sdk session list|inspect|send|status|tail|close|retire`, or the explicit raw hatch `gjc sdk session raw control|query|global`. The session CLI is broker-bound and credential-free.";
|
|
915
939
|
static args = {
|
|
916
940
|
verb: Args.string({
|
|
917
941
|
description: "Session verb",
|
|
918
942
|
required: false,
|
|
919
|
-
options: ["list", "inspect", "send", "status", "tail", "retire", "raw"],
|
|
943
|
+
options: ["list", "inspect", "send", "status", "tail", "close", "retire", "raw"],
|
|
920
944
|
}),
|
|
921
945
|
target: Args.string({
|
|
922
946
|
description: "Session id (or the raw kind control|query|global for `raw`)",
|
|
@@ -943,7 +967,8 @@ class SdkSessionHelp extends Command {
|
|
|
943
967
|
}),
|
|
944
968
|
confirm: Flags.boolean({ description: "Confirm a destructive local CLI control operation" }),
|
|
945
969
|
cursor: Flags.string({
|
|
946
|
-
description:
|
|
970
|
+
description:
|
|
971
|
+
"Raw query continuation/search cursor, or session tail checkpoint claim (tail also requires --after-transcript-id)",
|
|
947
972
|
}),
|
|
948
973
|
scope: Flags.string({
|
|
949
974
|
description:
|
|
@@ -960,6 +985,10 @@ class SdkSessionHelp extends Command {
|
|
|
960
985
|
strict: Flags.boolean({ description: "tail --strict: fail closed on retention gaps" }),
|
|
961
986
|
"until-idle": Flags.boolean({ description: "tail --until-idle: exit after an observed terminal turn state" }),
|
|
962
987
|
"all-events": Flags.boolean({ description: "tail --all-events: include every event-ring kind" }),
|
|
988
|
+
"after-transcript-id": Flags.string({
|
|
989
|
+
description:
|
|
990
|
+
"tail --cursor (required): omit transcript rows up to and including this row id (the caller already has them)",
|
|
991
|
+
}),
|
|
963
992
|
page: Flags.boolean({ description: "raw global session.list: return exactly one broker page" }),
|
|
964
993
|
};
|
|
965
994
|
async run(): Promise<void> {}
|
|
@@ -1061,6 +1090,7 @@ class SdkSessionCommand extends Command {
|
|
|
1061
1090
|
strict: Boolean(flagRec.strict),
|
|
1062
1091
|
untilIdle: Boolean(flagRec["until-idle"]),
|
|
1063
1092
|
allEvents: Boolean(flagRec["all-events"]),
|
|
1093
|
+
afterTranscriptId: flagRec["after-transcript-id"] as string | undefined,
|
|
1064
1094
|
page: Boolean(flagRec.page),
|
|
1065
1095
|
limit: flagRec.limit as number | undefined,
|
|
1066
1096
|
agentDir: flagRec["agent-dir"] as string | undefined,
|
|
@@ -1100,95 +1130,123 @@ class SdkGuidesCommand extends Command {
|
|
|
1100
1130
|
});
|
|
1101
1131
|
}
|
|
1102
1132
|
}
|
|
1103
|
-
|
|
1104
1133
|
export default class Sdk extends Command {
|
|
1105
|
-
static description =
|
|
1106
|
-
"gjc sdk serve --stdio | --socket <path> [--session <id>]; gjc sdk search [--scope repo|pwd|global] [--json] [--limit N] [--cursor ...]; gjc sdk spawn --cwd <dir> --prompt <task> (master only); gjc sdk session list|inspect|send|status|tail; gjc sdk guides refresh|list|show|status|trust";
|
|
1134
|
+
static description = "SDK command runtime; public grammar and help are registry-owned.";
|
|
1107
1135
|
static hidden = false;
|
|
1108
1136
|
static delegateHelp = true;
|
|
1109
|
-
static args = {
|
|
1110
|
-
action: Args.string({ required: false, options: ["serve", "search", "spawn", "session", "guides"] }),
|
|
1111
|
-
};
|
|
1112
|
-
static flags = SdkServeHelp.flags;
|
|
1113
1137
|
async run(): Promise<void> {
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
:
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
if (action === "spawn") {
|
|
1148
|
-
await new SdkSpawnCommand(this.argv.slice(1), this.config).run();
|
|
1149
|
-
return;
|
|
1150
|
-
}
|
|
1151
|
-
if (action === "session") {
|
|
1152
|
-
await new SdkSessionCommand(this.argv.slice(1), this.config).run();
|
|
1153
|
-
return;
|
|
1154
|
-
}
|
|
1155
|
-
if (action === "guides") {
|
|
1156
|
-
await new SdkGuidesCommand(this.argv.slice(1), this.config).run();
|
|
1157
|
-
return;
|
|
1158
|
-
}
|
|
1159
|
-
if (action === "serve") {
|
|
1160
|
-
try {
|
|
1161
|
-
await runSdkServe(this.argv.slice(1));
|
|
1162
|
-
} catch (error) {
|
|
1163
|
-
if (!(error instanceof SdkServeError)) throw error;
|
|
1164
|
-
// stdout is the frame channel in --stdio mode, so the envelope goes to
|
|
1165
|
-
// stderr; returning instead of rethrowing is what keeps a session-selection
|
|
1166
|
-
// failure from reaching the embedder as an uncaught exception.
|
|
1167
|
-
process.stderr.write(
|
|
1168
|
-
`${JSON.stringify({
|
|
1169
|
-
ok: false,
|
|
1170
|
-
error: {
|
|
1171
|
-
code: error.code,
|
|
1172
|
-
message: error.message,
|
|
1173
|
-
...(error.details === undefined ? {} : { details: error.details }),
|
|
1174
|
-
// A broker teardown that failed alongside the primary failure is
|
|
1175
|
-
// recorded on the error; dropping it here would hide from the
|
|
1176
|
-
// embedder that the session may not have been released cleanly.
|
|
1177
|
-
...(error.cleanupError === undefined ? {} : { cleanupError: error.cleanupError }),
|
|
1178
|
-
},
|
|
1179
|
-
})}\n`,
|
|
1138
|
+
if (
|
|
1139
|
+
this.argv[0] !== "broker-internal" &&
|
|
1140
|
+
this.argv[0] !== "session-host-internal" &&
|
|
1141
|
+
this.argv[0] !== "stderr-drain-internal"
|
|
1142
|
+
) {
|
|
1143
|
+
const scan = scanPublicCommand("sdk", this.argv);
|
|
1144
|
+
if (scan.kind !== "operation") throw new PublicCommandFailure({ kind: "usage", proof: "pre-effect" });
|
|
1145
|
+
const { args, flags } = scan;
|
|
1146
|
+
const operation = scan.descriptor.command[1];
|
|
1147
|
+
const stringFlag = (name: string): string | undefined => flags[name] as string | undefined;
|
|
1148
|
+
const timeoutMs = flags["timeout-ms"] === undefined ? undefined : Number(flags["timeout-ms"]);
|
|
1149
|
+
if (operation === "spawn") {
|
|
1150
|
+
const spawn = await runSdkSpawn({
|
|
1151
|
+
cwd: stringFlag("cwd"),
|
|
1152
|
+
prompt: stringFlag("prompt"),
|
|
1153
|
+
model: stringFlag("model"),
|
|
1154
|
+
profile: stringFlag("profile"),
|
|
1155
|
+
agentDir: stringFlag("agent-dir"),
|
|
1156
|
+
idempotencyKey: stringFlag("idempotency-key"),
|
|
1157
|
+
});
|
|
1158
|
+
process.stdout.write(`${flags.json ? JSON.stringify(spawn.rendered) : renderSpawnTable(spawn.rendered)}\n`);
|
|
1159
|
+
return;
|
|
1160
|
+
}
|
|
1161
|
+
if (operation === "search") {
|
|
1162
|
+
const search = await runSdkSearch({
|
|
1163
|
+
agentDir: stringFlag("agent-dir"),
|
|
1164
|
+
repo: stringFlag("repo"),
|
|
1165
|
+
scope: stringFlag("scope"),
|
|
1166
|
+
limit: flags.limit as number | undefined,
|
|
1167
|
+
cursor: stringFlag("cursor"),
|
|
1168
|
+
});
|
|
1169
|
+
process.stdout.write(
|
|
1170
|
+
`${flags.json ? JSON.stringify(search.result) : renderSdkSearchTable(search.result)}\n`,
|
|
1180
1171
|
);
|
|
1181
|
-
|
|
1172
|
+
return;
|
|
1182
1173
|
}
|
|
1183
|
-
|
|
1174
|
+
if (operation === "session") {
|
|
1175
|
+
await runSdkSessionCli({
|
|
1176
|
+
action: scan.descriptor.command[2],
|
|
1177
|
+
rawAction: scan.descriptor.command[3],
|
|
1178
|
+
sessionId: args.sessionId as string | undefined,
|
|
1179
|
+
opRef: (args.opRef as string | undefined) ?? stringFlag("op-ref"),
|
|
1180
|
+
operation: stringFlag("op"),
|
|
1181
|
+
query: stringFlag("query"),
|
|
1182
|
+
text: stringFlag("text"),
|
|
1183
|
+
jsonInput: stringFlag("json-input"),
|
|
1184
|
+
jsonInputFile: stringFlag("json-input-file"),
|
|
1185
|
+
jsonInputStdin: Boolean(flags["json-input-stdin"]),
|
|
1186
|
+
confirm: Boolean(flags.confirm),
|
|
1187
|
+
idempotencyKey: stringFlag("idempotency-key"),
|
|
1188
|
+
cursor: stringFlag("cursor"),
|
|
1189
|
+
afterTranscriptId: stringFlag("after-transcript-id"),
|
|
1190
|
+
wait: Boolean(flags.wait),
|
|
1191
|
+
timeoutMs,
|
|
1192
|
+
strict: Boolean(flags.strict),
|
|
1193
|
+
untilIdle: Boolean(flags["until-idle"]),
|
|
1194
|
+
allEvents: Boolean(flags["all-events"]),
|
|
1195
|
+
page: Boolean(flags.page),
|
|
1196
|
+
limit: flags.limit as number | undefined,
|
|
1197
|
+
agentDir: stringFlag("agent-dir"),
|
|
1198
|
+
repo: stringFlag("repo"),
|
|
1199
|
+
scope: stringFlag("scope"),
|
|
1200
|
+
json: flags.json === true,
|
|
1201
|
+
});
|
|
1202
|
+
return;
|
|
1203
|
+
}
|
|
1204
|
+
if (operation === "guides") {
|
|
1205
|
+
await runSdkGuidesCli({
|
|
1206
|
+
action: scan.descriptor.command[2],
|
|
1207
|
+
guideId: args.guideId as string | undefined,
|
|
1208
|
+
url: stringFlag("url"),
|
|
1209
|
+
agentDir: stringFlag("agent-dir"),
|
|
1210
|
+
timeoutMs,
|
|
1211
|
+
});
|
|
1212
|
+
return;
|
|
1213
|
+
}
|
|
1214
|
+
if (operation === "serve") {
|
|
1215
|
+
try {
|
|
1216
|
+
await runSdkServe(scan.operationArgv.slice(1));
|
|
1217
|
+
} catch (error) {
|
|
1218
|
+
if (!(error instanceof SdkServeError)) throw error;
|
|
1219
|
+
// A command invoked outside the public family dispatcher still owns its
|
|
1220
|
+
// stderr envelope. The dispatcher itself keeps the typed failure for the
|
|
1221
|
+
// shared JSON/text boundary so it can render the full contract.
|
|
1222
|
+
if (this.config?.commands instanceof Map && this.config.commands.has("sdk")) throw error;
|
|
1223
|
+
process.stderr.write(
|
|
1224
|
+
`${JSON.stringify({
|
|
1225
|
+
ok: false,
|
|
1226
|
+
error: {
|
|
1227
|
+
code: error.code,
|
|
1228
|
+
message: error.message,
|
|
1229
|
+
...(error.details === undefined ? {} : { details: error.details }),
|
|
1230
|
+
...(error.cleanupError === undefined ? {} : { cleanupError: error.cleanupError }),
|
|
1231
|
+
},
|
|
1232
|
+
})}\n`,
|
|
1233
|
+
);
|
|
1234
|
+
process.exitCode = error.exitCode;
|
|
1235
|
+
}
|
|
1236
|
+
return;
|
|
1237
|
+
}
|
|
1238
|
+
throw new PublicCommandFailure({ kind: "usage", proof: "pre-effect" });
|
|
1184
1239
|
}
|
|
1185
|
-
|
|
1186
|
-
throw new CliParseError("Expected action to be serve, search, spawn, session, or guides.");
|
|
1240
|
+
|
|
1187
1241
|
const internal = parseSdkInternalArgv(this.argv);
|
|
1188
1242
|
if (internal.action === "session-host-internal") {
|
|
1189
1243
|
await runSessionHost();
|
|
1190
1244
|
return;
|
|
1191
1245
|
}
|
|
1246
|
+
if (internal.action === "stderr-drain-internal") {
|
|
1247
|
+
await runSdkStderrDrainer(internal.logPath, internal.maxBytes);
|
|
1248
|
+
return;
|
|
1249
|
+
}
|
|
1192
1250
|
const agentDir = path.resolve(internal.agentDir);
|
|
1193
1251
|
let broker: Broker | undefined;
|
|
1194
1252
|
try {
|
package/src/commands/setup.ts
CHANGED
|
@@ -76,6 +76,7 @@ export default class Setup extends Command {
|
|
|
76
76
|
}),
|
|
77
77
|
"api-key-env": Flags.string({ description: "Read provider API key from this environment variable" }),
|
|
78
78
|
model: Flags.string({ description: "Model id to add (repeat or comma-separate)", multiple: true }),
|
|
79
|
+
discover: Flags.boolean({ description: "Discover models from the provider OpenAI /v1/models endpoint" }),
|
|
79
80
|
"models-path": Flags.string({ description: "Override models config path" }),
|
|
80
81
|
remove: Flags.boolean({ description: "Roll back the Paseo registration GJC created" }),
|
|
81
82
|
mpreset: Flags.string({ description: "Register an additional gjc-<preset> Paseo provider" }),
|
|
@@ -97,6 +98,7 @@ export default class Setup extends Command {
|
|
|
97
98
|
baseUrl: flags["base-url"],
|
|
98
99
|
apiKeyEnv: flags["api-key-env"],
|
|
99
100
|
model: flags.model,
|
|
101
|
+
discover: flags.discover,
|
|
100
102
|
modelsPath: flags["models-path"],
|
|
101
103
|
smoke: flags.smoke,
|
|
102
104
|
install: flags.install,
|
package/src/commands/skills.ts
CHANGED
|
@@ -28,6 +28,11 @@ export default class Skills extends Command {
|
|
|
28
28
|
options: ["all", "project", "user"],
|
|
29
29
|
default: "all",
|
|
30
30
|
}),
|
|
31
|
+
limit: Flags.integer({ description: "Max discover results, clamped to 1-50 (default 50)" }),
|
|
32
|
+
offset: Flags.integer({ description: "Zero-based offset into the discover results (default 0)" }),
|
|
33
|
+
query: Flags.string({
|
|
34
|
+
description: "Filter discover results by name, description, source, or use conditions",
|
|
35
|
+
}),
|
|
31
36
|
};
|
|
32
37
|
|
|
33
38
|
static examples = [
|
|
@@ -36,6 +41,9 @@ export default class Skills extends Command {
|
|
|
36
41
|
"# Machine-readable embedded skill content\n gjc skills read ralplan --json",
|
|
37
42
|
"# Show filesystem-discovered skills (project and user) with diagnostics\n gjc skills discover",
|
|
38
43
|
"# Show only project-scope skills (project .gjc/skills locations)\n gjc skills discover --source project --json",
|
|
44
|
+
"# Narrow a truncated catalog to the skills you care about\n gjc skills discover --query ego-browser",
|
|
45
|
+
"# Show only the first 10 discovered skills\n gjc skills discover --limit 10",
|
|
46
|
+
"# Page past the first 50: discover prints the exact next-page command\n gjc skills discover --offset 50",
|
|
39
47
|
];
|
|
40
48
|
|
|
41
49
|
async run(): Promise<void> {
|
|
@@ -51,6 +59,9 @@ export default class Skills extends Command {
|
|
|
51
59
|
flags: {
|
|
52
60
|
json: flags.json,
|
|
53
61
|
source: (flags.source as "all" | "project" | "user" | undefined) ?? "all",
|
|
62
|
+
limit: flags.limit,
|
|
63
|
+
offset: flags.offset,
|
|
64
|
+
query: flags.query,
|
|
54
65
|
},
|
|
55
66
|
};
|
|
56
67
|
await runSkillsCommand(cmd);
|