@gajae-code/coding-agent 0.17.1 → 0.17.4
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 +266 -0
- package/dist/types/async/job-manager.d.ts +7 -6
- 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 +24 -0
- package/dist/types/config/file-lock.d.ts +10 -1
- package/dist/types/config/model-profile-activation.d.ts +63 -4
- package/dist/types/config/model-registry.d.ts +20 -2
- package/dist/types/config/settings-schema.d.ts +11 -0
- package/dist/types/coordinator-mcp/question-state.d.ts +6 -1
- package/dist/types/coordinator-mcp/server.d.ts +3 -0
- package/dist/types/daemon/operator-contract.d.ts +5 -1
- package/dist/types/eval/js/worker-protocol.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/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/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 +22 -0
- package/dist/types/modes/acp/acp-agent.d.ts +94 -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/thinking-selector.d.ts +2 -1
- 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/manager.d.ts +56 -0
- 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/acp/adapter.d.ts +27 -0
- package/dist/types/sdk/acp/final-text.d.ts +8 -0
- package/dist/types/sdk/broker/broker.d.ts +13 -2
- package/dist/types/sdk/broker/ensure.d.ts +46 -1
- package/dist/types/sdk/broker/identity.d.ts +3 -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/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 +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 +3 -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 +83 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +38 -1
- package/dist/types/sdk/prompt-failure.d.ts +30 -1
- package/dist/types/sdk/prompt-status.d.ts +8 -0
- package/dist/types/sdk/prompt-tool-boundary.d.ts +73 -0
- package/dist/types/sdk/router/replay-retention-gap-cache.d.ts +13 -0
- package/dist/types/sdk/router/session-router.d.ts +2 -0
- 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 +73 -2
- package/dist/types/sdk/transport/stdio.d.ts +5 -1
- package/dist/types/session/agent-session.d.ts +168 -21
- 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/thinking.d.ts +3 -1
- package/dist/types/tools/bash.d.ts +37 -11
- package/dist/types/tools/job.d.ts +1 -1
- package/dist/types/tools/steer-fold.d.ts +31 -0
- package/dist/types/utils/git.d.ts +28 -2
- package/dist/types/utils/mupdf-embedded.d.ts +2 -0
- package/dist/types/utils/mupdf-wasm-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 +60 -9
- 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 +535 -0
- package/src/cli/session-picker.ts +2 -1
- package/src/cli/setup-cli.ts +9 -1
- package/src/cli/skills-cli.ts +46 -2
- package/src/cli.ts +61 -1
- package/src/commands/daemon.ts +65 -69
- package/src/commands/sdk.ts +232 -100
- package/src/commands/setup.ts +2 -0
- package/src/commands/skills.ts +11 -0
- package/src/config/autorouting-tier-map.ts +16 -0
- package/src/config/file-lock.ts +199 -68
- package/src/config/model-profile-activation.ts +406 -53
- package/src/config/model-registry.ts +204 -25
- 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 +175 -8
- package/src/coordinator-mcp/server.ts +528 -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/debug/report-bundle.ts +114 -24
- 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/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/runtime-skill-discovery.ts +61 -3
- package/src/extensibility/shared-events.ts +3 -1
- package/src/gjc-runtime/managed-owner-admission.ts +67 -50
- package/src/gjc-runtime/session-state-lock.ts +165 -24
- package/src/gjc-runtime/ultragoal-succession.ts +31 -3
- package/src/internal-urls/docs-index.generated.ts +21 -19
- 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 +123 -55
- package/src/modes/acp/acp-agent.ts +593 -47
- package/src/modes/acp/acp-event-mapper.ts +9 -0
- package/src/modes/acp/startup-provenance.ts +59 -0
- package/src/modes/components/custom-provider-wizard.ts +308 -7
- package/src/modes/components/model-selector.ts +31 -15
- package/src/modes/components/oauth-selector.ts +9 -0
- package/src/modes/components/session-selector.ts +47 -4
- package/src/modes/components/status-line/segments.ts +6 -1
- package/src/modes/components/thinking-selector.ts +7 -3
- 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/selector-controller.ts +177 -18
- 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/manager.ts +689 -55
- 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 +90 -9
- package/src/sdk/acp/final-text.ts +19 -2
- package/src/sdk/broker/broker.ts +378 -52
- package/src/sdk/broker/ensure.ts +97 -19
- package/src/sdk/broker/identity.ts +9 -1
- package/src/sdk/broker/lifecycle-ledger.ts +95 -31
- package/src/sdk/broker/lifecycle.ts +690 -141
- package/src/sdk/broker/runtime.ts +1 -1
- package/src/sdk/broker/session-index.ts +97 -4
- package/src/sdk/broker/spawn-authority.ts +35 -7
- package/src/sdk/broker/stderr-drainer.ts +59 -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 +721 -84
- package/src/sdk/bus/telegram-daemon-cli.ts +31 -2
- package/src/sdk/bus/telegram-daemon-contract.ts +3 -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 +687 -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 +636 -9
- package/src/sdk/host/session-runtime.ts +499 -118
- 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/prompt-deadline-flush.ts +334 -0
- package/src/sdk/prompt-deadline-manager.ts +136 -4
- package/src/sdk/prompt-failure.ts +43 -1
- package/src/sdk/prompt-status.ts +8 -0
- package/src/sdk/prompt-tool-boundary.ts +121 -0
- package/src/sdk/protocol/operation-inventory.generated.json +106 -0
- package/src/sdk/router/replay-retention-gap-cache.ts +27 -0
- package/src/sdk/router/session-router.ts +31 -4
- package/src/sdk/session.ts +194 -16
- package/src/sdk/startup-capability.ts +1 -1
- package/src/sdk/transport/relay.ts +71 -6
- package/src/sdk/transport/serve-cli.ts +494 -49
- package/src/sdk/transport/socket.ts +12 -11
- package/src/sdk/transport/stdio.ts +7 -3
- package/src/session/agent-session.ts +2437 -400
- 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 +58 -18
- package/src/session/internal/managed-session-storage.ts +304 -11
- package/src/session/session-manager.ts +382 -44
- package/src/session/session-work-lease.ts +34 -0
- package/src/session-import/codex.ts +12 -3
- package/src/setup/model-onboarding-guidance.ts +1 -1
- package/src/setup/provider-onboarding.ts +397 -24
- package/src/slash-commands/builtin-registry.ts +258 -14
- package/src/task/index.ts +14 -2
- package/src/thinking.ts +21 -2
- package/src/tools/bash.ts +98 -78
- package/src/tools/fetch.ts +119 -20
- 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/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-wasm-embedded.ts +3 -0
- package/src/utils/mupdf-wasm.ts +24 -2
- package/src/utils/mupdf.ts +129 -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
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import {
|
|
3
|
+
PUBLIC_COMMANDS,
|
|
4
|
+
PUBLIC_HELP_SECTIONS,
|
|
5
|
+
type PublicCommandDescriptor,
|
|
6
|
+
type PublicHelpSection,
|
|
7
|
+
} from "./public-command-registry";
|
|
8
|
+
|
|
9
|
+
export const PUBLIC_HELP_MAX_BYTES = 8192;
|
|
10
|
+
const FRAGMENT_BYTES = 1024;
|
|
11
|
+
|
|
12
|
+
export interface PublicHelpOptions {
|
|
13
|
+
json?: boolean;
|
|
14
|
+
section?: string;
|
|
15
|
+
page?: string | number;
|
|
16
|
+
revision?: string;
|
|
17
|
+
}
|
|
18
|
+
export type PublicHelpErrorCode =
|
|
19
|
+
| "unknown_command"
|
|
20
|
+
| "invalid_section"
|
|
21
|
+
| "invalid_page"
|
|
22
|
+
| "invalid_revision"
|
|
23
|
+
| "revision_mismatch"
|
|
24
|
+
| "static_metadata_too_large"
|
|
25
|
+
| "invalid_registry";
|
|
26
|
+
export class PublicHelpError extends Error {
|
|
27
|
+
readonly exitCode: 2 | 1;
|
|
28
|
+
constructor(readonly code: PublicHelpErrorCode) {
|
|
29
|
+
super(
|
|
30
|
+
{
|
|
31
|
+
unknown_command: "Unknown public command. Request help at the nearest known command.",
|
|
32
|
+
invalid_section: "Select a documented help section.",
|
|
33
|
+
invalid_page: "Select an available positive decimal safe-integer help page.",
|
|
34
|
+
invalid_revision: "Help revision must be a lowercase SHA256 digest.",
|
|
35
|
+
revision_mismatch: "Help metadata changed. Begin a new help traversal without the old revision.",
|
|
36
|
+
static_metadata_too_large: "Static help metadata cannot fit the output budget.",
|
|
37
|
+
invalid_registry: "Static help registry contains an invalid command relationship or value.",
|
|
38
|
+
}[code],
|
|
39
|
+
);
|
|
40
|
+
this.name = "PublicHelpError";
|
|
41
|
+
this.exitCode = code === "static_metadata_too_large" || code === "invalid_registry" ? 1 : 2;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export interface PublicHelpEntry {
|
|
45
|
+
id: string;
|
|
46
|
+
kind: "overview" | "usage" | "child" | "argument" | "option" | "example" | "recovery";
|
|
47
|
+
complete: true;
|
|
48
|
+
value: unknown;
|
|
49
|
+
}
|
|
50
|
+
export interface PublicHelpFragment {
|
|
51
|
+
id: string;
|
|
52
|
+
kind: "fragment";
|
|
53
|
+
complete: false;
|
|
54
|
+
encoding: "base64";
|
|
55
|
+
offsetBytes: number;
|
|
56
|
+
totalBytes: number;
|
|
57
|
+
sha256: string;
|
|
58
|
+
data: string;
|
|
59
|
+
}
|
|
60
|
+
export interface PublicHelpNext {
|
|
61
|
+
section: PublicHelpSection;
|
|
62
|
+
page: number;
|
|
63
|
+
executable: "gjc";
|
|
64
|
+
argv: string[];
|
|
65
|
+
}
|
|
66
|
+
export interface PublicHelpDocument {
|
|
67
|
+
schema: "gjc.command-help";
|
|
68
|
+
version: 1;
|
|
69
|
+
ok: true;
|
|
70
|
+
command: readonly string[];
|
|
71
|
+
canonicalCommand: readonly string[];
|
|
72
|
+
revision: string;
|
|
73
|
+
section: PublicHelpSection;
|
|
74
|
+
page: number;
|
|
75
|
+
sections: readonly PublicHelpSection[];
|
|
76
|
+
entries: readonly (PublicHelpEntry | PublicHelpFragment)[];
|
|
77
|
+
sectionComplete: boolean;
|
|
78
|
+
documentComplete: boolean;
|
|
79
|
+
next: PublicHelpNext | null;
|
|
80
|
+
}
|
|
81
|
+
export interface PublicHelpRenderResult {
|
|
82
|
+
/** Complete serialization including its single trailing newline. No output is written. */
|
|
83
|
+
output: string;
|
|
84
|
+
bytes: number;
|
|
85
|
+
document: PublicHelpDocument;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Sorted object keys; array ordering is semantic. JSON escaping preserves lone surrogates. */
|
|
89
|
+
function canonicalJson(value: unknown): string {
|
|
90
|
+
const normalize = (item: unknown): unknown => {
|
|
91
|
+
if (item === null || typeof item === "string" || typeof item === "boolean") return item;
|
|
92
|
+
if (typeof item === "number" && Number.isFinite(item)) return item;
|
|
93
|
+
if (Array.isArray(item)) return item.map(value => (value === undefined ? null : normalize(value)));
|
|
94
|
+
if (item && typeof item === "object") {
|
|
95
|
+
const result: Record<string, unknown> = {};
|
|
96
|
+
for (const key of Object.keys(item).sort()) {
|
|
97
|
+
const value = (item as Record<string, unknown>)[key];
|
|
98
|
+
if (value !== undefined) Object.defineProperty(result, key, { value: normalize(value), enumerable: true });
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
throw new PublicHelpError("invalid_registry");
|
|
103
|
+
};
|
|
104
|
+
return JSON.stringify(normalize(value));
|
|
105
|
+
}
|
|
106
|
+
function sha256(value: string | Uint8Array): string {
|
|
107
|
+
return createHash("sha256").update(value).digest("hex");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** The digest covers every descriptor and this renderer's paging/schema policy. */
|
|
111
|
+
export function getPublicHelpRevision(registry: readonly PublicCommandDescriptor[] = PUBLIC_COMMANDS): string {
|
|
112
|
+
return sha256(
|
|
113
|
+
canonicalJson({
|
|
114
|
+
schema: "gjc.command-help",
|
|
115
|
+
version: 1,
|
|
116
|
+
pagingVersion: 1,
|
|
117
|
+
maxBytes: PUBLIC_HELP_MAX_BYTES,
|
|
118
|
+
fragmentBytes: FRAGMENT_BYTES,
|
|
119
|
+
sections: PUBLIC_HELP_SECTIONS,
|
|
120
|
+
registry,
|
|
121
|
+
entryOrder: registry.map(row => ({ arguments: Object.keys(row.args), options: Object.keys(row.flags) })),
|
|
122
|
+
}),
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function entriesFor(
|
|
127
|
+
descriptor: PublicCommandDescriptor,
|
|
128
|
+
registry: readonly PublicCommandDescriptor[],
|
|
129
|
+
): Record<PublicHelpSection, PublicHelpEntry[]> {
|
|
130
|
+
const prefix = descriptor.command.join("/");
|
|
131
|
+
const entry = (
|
|
132
|
+
section: PublicHelpSection,
|
|
133
|
+
key: string,
|
|
134
|
+
kind: PublicHelpEntry["kind"],
|
|
135
|
+
value: unknown,
|
|
136
|
+
): PublicHelpEntry => ({ id: `${prefix}/${section}/${key}`, kind, complete: true, value });
|
|
137
|
+
const sections: Record<PublicHelpSection, PublicHelpEntry[]> = {
|
|
138
|
+
overview: [],
|
|
139
|
+
usage: descriptor.usage.map((value, index) => entry("usage", String(index + 1), "usage", value)),
|
|
140
|
+
children: descriptor.children.map(token => {
|
|
141
|
+
const path = [...descriptor.command, token];
|
|
142
|
+
const child = registry.find(
|
|
143
|
+
row => row.command.length === path.length && row.command.every((part, index) => part === path[index]),
|
|
144
|
+
);
|
|
145
|
+
if (!child) throw new PublicHelpError("invalid_registry");
|
|
146
|
+
return entry("children", token, "child", {
|
|
147
|
+
command: child.command,
|
|
148
|
+
canonicalCommand: child.canonicalCommand,
|
|
149
|
+
description: child.description,
|
|
150
|
+
help: { executable: "gjc", argv: [...child.command, "--help"] },
|
|
151
|
+
});
|
|
152
|
+
}),
|
|
153
|
+
arguments: Object.entries(descriptor.args).map(([name, arg]) =>
|
|
154
|
+
entry("arguments", name, "argument", {
|
|
155
|
+
name,
|
|
156
|
+
required: arg.required ?? false,
|
|
157
|
+
multiple: arg.multiple ?? false,
|
|
158
|
+
description: arg.description,
|
|
159
|
+
...(arg.options ? { choices: arg.options } : {}),
|
|
160
|
+
}),
|
|
161
|
+
),
|
|
162
|
+
options: Object.entries(descriptor.flags).map(([name, flag]) =>
|
|
163
|
+
entry("options", name, "option", {
|
|
164
|
+
name: `--${name}`,
|
|
165
|
+
type: flag.kind,
|
|
166
|
+
...(flag.char ? { short: `-${flag.char}` } : {}),
|
|
167
|
+
required: flag.required ?? false,
|
|
168
|
+
multiple: flag.multiple ?? false,
|
|
169
|
+
...(flag.default !== undefined ? { default: flag.default } : {}),
|
|
170
|
+
...(flag.options ? { choices: flag.options } : {}),
|
|
171
|
+
description: flag.description,
|
|
172
|
+
...(flag.conflicts ? { conflicts: flag.conflicts.map(name => `--${name}`) } : {}),
|
|
173
|
+
...(flag.requires ? { requires: flag.requires.map(name => `--${name}`) } : {}),
|
|
174
|
+
...(flag.risk ? { risk: flag.risk } : {}),
|
|
175
|
+
}),
|
|
176
|
+
),
|
|
177
|
+
examples: descriptor.examples.map((value, index) => entry("examples", String(index + 1), "example", value)),
|
|
178
|
+
recovery: descriptor.recovery.map((value, index) => entry("recovery", String(index + 1), "recovery", value)),
|
|
179
|
+
};
|
|
180
|
+
// Constraints belong to recovery, so overview can reference rather than duplicate them.
|
|
181
|
+
for (const [index, description] of descriptor.constraints.entries())
|
|
182
|
+
sections.recovery.push(
|
|
183
|
+
entry("recovery", `constraint-${index + 1}`, "recovery", {
|
|
184
|
+
description,
|
|
185
|
+
disruption: "none",
|
|
186
|
+
requiresConfirmation: false,
|
|
187
|
+
}),
|
|
188
|
+
);
|
|
189
|
+
if (descriptor.risk)
|
|
190
|
+
sections.recovery.push(
|
|
191
|
+
entry("recovery", "risk", "recovery", {
|
|
192
|
+
description: descriptor.risk,
|
|
193
|
+
disruption: "interrupts-work",
|
|
194
|
+
requiresConfirmation: true,
|
|
195
|
+
}),
|
|
196
|
+
);
|
|
197
|
+
if (descriptor.exactlyOneOf?.length)
|
|
198
|
+
sections.usage.push(
|
|
199
|
+
entry("usage", "exclusive-options", "usage", {
|
|
200
|
+
syntax: `Exactly one option is required in each group: ${descriptor.exactlyOneOf.map(group => group.map(name => `--${name}`).join(" | ")).join("; ")}`,
|
|
201
|
+
executable: false,
|
|
202
|
+
}),
|
|
203
|
+
);
|
|
204
|
+
sections.overview.push(
|
|
205
|
+
entry("overview", "summary", "overview", {
|
|
206
|
+
description: descriptor.description,
|
|
207
|
+
...(descriptor.defaultChild ? { defaultCommand: [...descriptor.command, descriptor.defaultChild] } : {}),
|
|
208
|
+
entries: PUBLIC_HELP_SECTIONS.filter(section => section !== "overview").map(section => ({
|
|
209
|
+
section,
|
|
210
|
+
ids: sections[section].map(value => value.id),
|
|
211
|
+
})),
|
|
212
|
+
}),
|
|
213
|
+
);
|
|
214
|
+
return sections;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** JSON literals are display values, not shell commands; escape terminal controls explicitly. */
|
|
218
|
+
function display(value: unknown): string {
|
|
219
|
+
return JSON.stringify(value).replace(
|
|
220
|
+
/[\u007f-\u009f\u2028\u2029]/g,
|
|
221
|
+
character => `\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`,
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
function serialize(document: PublicHelpDocument, json: boolean): string {
|
|
225
|
+
if (json) return `${JSON.stringify(document)}\n`;
|
|
226
|
+
return `${[
|
|
227
|
+
`COMMAND ${display(document.command)}`,
|
|
228
|
+
`CANONICAL COMMAND ${display(document.canonicalCommand)}`,
|
|
229
|
+
`REVISION ${document.revision}`,
|
|
230
|
+
`SECTION ${document.section} PAGE ${document.page}`,
|
|
231
|
+
`SECTIONS ${display(document.sections)}`,
|
|
232
|
+
"ENTRIES (JSON display literals; do not paste escaped strings as shell argv)",
|
|
233
|
+
...document.entries.map(entry => display(entry)),
|
|
234
|
+
`SECTION COMPLETE ${document.sectionComplete}`,
|
|
235
|
+
`DOCUMENT COMPLETE ${document.documentComplete}`,
|
|
236
|
+
`CONTINUATION ${display(document.next)}`,
|
|
237
|
+
].join("\n")}\n`;
|
|
238
|
+
}
|
|
239
|
+
function pageNumber(value: PublicHelpOptions["page"]): number {
|
|
240
|
+
if (value === undefined) return 1;
|
|
241
|
+
if (typeof value === "string" && !/^[0-9]+$/.test(value)) throw new PublicHelpError("invalid_page");
|
|
242
|
+
const page = Number(value);
|
|
243
|
+
if (!Number.isSafeInteger(page) || page < 1) throw new PublicHelpError("invalid_page");
|
|
244
|
+
return page;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Pure command-local rendering. Each page holds one complete entry or one byte fragment;
|
|
249
|
+
* empty sections still have page 1. This keeps traversal stable and independently bounded.
|
|
250
|
+
* The optional registry supports isolated static fixtures without replacing global state.
|
|
251
|
+
*/
|
|
252
|
+
export function renderPublicCommandHelp(
|
|
253
|
+
command: readonly string[],
|
|
254
|
+
options: PublicHelpOptions = {},
|
|
255
|
+
registry: readonly PublicCommandDescriptor[] = PUBLIC_COMMANDS,
|
|
256
|
+
): PublicHelpRenderResult {
|
|
257
|
+
const descriptor = registry.find(
|
|
258
|
+
row => row.command.length === command.length && row.command.every((part, index) => part === command[index]),
|
|
259
|
+
);
|
|
260
|
+
if (!descriptor) throw new PublicHelpError("unknown_command");
|
|
261
|
+
const section = options.section ?? "overview";
|
|
262
|
+
if (!(PUBLIC_HELP_SECTIONS as readonly string[]).includes(section)) throw new PublicHelpError("invalid_section");
|
|
263
|
+
const selectedSection = section as PublicHelpSection;
|
|
264
|
+
const page = pageNumber(options.page);
|
|
265
|
+
if (options.revision !== undefined && !/^[0-9a-f]{64}$/.test(options.revision))
|
|
266
|
+
throw new PublicHelpError("invalid_revision");
|
|
267
|
+
const revision = getPublicHelpRevision(registry);
|
|
268
|
+
if (options.revision !== undefined && options.revision !== revision) throw new PublicHelpError("revision_mismatch");
|
|
269
|
+
const json = options.json === true;
|
|
270
|
+
const next = (section: PublicHelpSection, page: number): PublicHelpNext => ({
|
|
271
|
+
section,
|
|
272
|
+
page,
|
|
273
|
+
executable: "gjc",
|
|
274
|
+
argv: [
|
|
275
|
+
...descriptor.command,
|
|
276
|
+
"--help",
|
|
277
|
+
"--help-revision",
|
|
278
|
+
revision,
|
|
279
|
+
"--help-section",
|
|
280
|
+
section,
|
|
281
|
+
"--help-page",
|
|
282
|
+
String(page),
|
|
283
|
+
...(json ? ["--json"] : []),
|
|
284
|
+
],
|
|
285
|
+
});
|
|
286
|
+
const document = (
|
|
287
|
+
section: PublicHelpSection,
|
|
288
|
+
page: number,
|
|
289
|
+
entries: PublicHelpDocument["entries"],
|
|
290
|
+
sectionComplete: boolean,
|
|
291
|
+
continuation: PublicHelpNext | null,
|
|
292
|
+
): PublicHelpDocument => ({
|
|
293
|
+
schema: "gjc.command-help",
|
|
294
|
+
version: 1,
|
|
295
|
+
ok: true,
|
|
296
|
+
command: descriptor.command,
|
|
297
|
+
canonicalCommand: descriptor.canonicalCommand,
|
|
298
|
+
revision,
|
|
299
|
+
section,
|
|
300
|
+
page,
|
|
301
|
+
sections: PUBLIC_HELP_SECTIONS,
|
|
302
|
+
entries,
|
|
303
|
+
sectionComplete,
|
|
304
|
+
documentComplete: continuation === null,
|
|
305
|
+
next: continuation,
|
|
306
|
+
});
|
|
307
|
+
// Reserve the longest section name and largest safe page number in both metadata and argv.
|
|
308
|
+
// false is one byte longer than true; a continuation is always larger than null.
|
|
309
|
+
const reservedBytes = (entries: PublicHelpDocument["entries"]): number =>
|
|
310
|
+
Buffer.byteLength(
|
|
311
|
+
serialize(
|
|
312
|
+
document("arguments", Number.MAX_SAFE_INTEGER, entries, false, next("arguments", Number.MAX_SAFE_INTEGER)),
|
|
313
|
+
json,
|
|
314
|
+
),
|
|
315
|
+
);
|
|
316
|
+
if (reservedBytes([]) > PUBLIC_HELP_MAX_BYTES) throw new PublicHelpError("static_metadata_too_large");
|
|
317
|
+
const pages: (PublicHelpEntry | PublicHelpFragment)[] = [];
|
|
318
|
+
for (const entry of entriesFor(descriptor, registry)[selectedSection]) {
|
|
319
|
+
if (reservedBytes([entry]) <= PUBLIC_HELP_MAX_BYTES) {
|
|
320
|
+
pages.push(entry);
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
const bytes = Buffer.from(canonicalJson(entry.value), "utf8");
|
|
324
|
+
const digest = sha256(bytes);
|
|
325
|
+
for (let offset = 0; offset < bytes.length; offset += FRAGMENT_BYTES) {
|
|
326
|
+
const fragment: PublicHelpFragment = {
|
|
327
|
+
id: entry.id,
|
|
328
|
+
kind: "fragment",
|
|
329
|
+
complete: false,
|
|
330
|
+
encoding: "base64",
|
|
331
|
+
offsetBytes: offset,
|
|
332
|
+
totalBytes: bytes.length,
|
|
333
|
+
sha256: digest,
|
|
334
|
+
data: bytes.subarray(offset, offset + FRAGMENT_BYTES).toString("base64"),
|
|
335
|
+
};
|
|
336
|
+
if (reservedBytes([fragment]) > PUBLIC_HELP_MAX_BYTES) throw new PublicHelpError("static_metadata_too_large");
|
|
337
|
+
pages.push(fragment);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
const pageCount = Math.max(1, pages.length);
|
|
341
|
+
if (page > pageCount) throw new PublicHelpError("invalid_page");
|
|
342
|
+
const sectionComplete = page === pageCount;
|
|
343
|
+
const followingSection = PUBLIC_HELP_SECTIONS[PUBLIC_HELP_SECTIONS.indexOf(selectedSection) + 1];
|
|
344
|
+
const continuation = !sectionComplete
|
|
345
|
+
? next(selectedSection, page + 1)
|
|
346
|
+
: followingSection
|
|
347
|
+
? next(followingSection, 1)
|
|
348
|
+
: null;
|
|
349
|
+
const result = document(
|
|
350
|
+
selectedSection,
|
|
351
|
+
page,
|
|
352
|
+
pages.length ? [pages[page - 1]!] : [],
|
|
353
|
+
sectionComplete,
|
|
354
|
+
continuation,
|
|
355
|
+
);
|
|
356
|
+
const output = serialize(result, json);
|
|
357
|
+
const bytes = Buffer.byteLength(output);
|
|
358
|
+
if (bytes > PUBLIC_HELP_MAX_BYTES) throw new PublicHelpError("static_metadata_too_large");
|
|
359
|
+
return { output, bytes, document: result };
|
|
360
|
+
}
|