@nodetool-ai/cli 0.7.0-rc.23 → 0.8.2
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/README.md +82 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/ExecutionTree.d.ts +2 -1
- package/dist/ExecutionTree.d.ts.map +1 -1
- package/dist/ExecutionTree.js +1 -1
- package/dist/ExecutionTree.js.map +1 -1
- package/dist/affected/affected.d.ts +45 -0
- package/dist/affected/affected.d.ts.map +1 -0
- package/dist/affected/affected.js +160 -0
- package/dist/affected/affected.js.map +1 -0
- package/dist/agent-toolbelt.d.ts +15 -0
- package/dist/agent-toolbelt.d.ts.map +1 -0
- package/dist/agent-toolbelt.js +28 -0
- package/dist/agent-toolbelt.js.map +1 -0
- package/dist/api-client.d.ts +12 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +21 -0
- package/dist/api-client.js.map +1 -0
- package/dist/app-build/bundle.d.ts +15 -0
- package/dist/app-build/bundle.d.ts.map +1 -0
- package/dist/app-build/bundle.js +45 -0
- package/dist/app-build/bundle.js.map +1 -0
- package/dist/app-build/watch.d.ts +13 -0
- package/dist/app-build/watch.d.ts.map +1 -0
- package/dist/app-build/watch.js +25 -0
- package/dist/app-build/watch.js.map +1 -0
- package/dist/app-debug/app-target.d.ts +14 -0
- package/dist/app-debug/app-target.d.ts.map +1 -0
- package/dist/app-debug/app-target.js +120 -0
- package/dist/app-debug/app-target.js.map +1 -0
- package/dist/app-debug/harness.d.ts +29 -0
- package/dist/app-debug/harness.d.ts.map +1 -0
- package/dist/app-debug/harness.js +116 -0
- package/dist/app-debug/harness.js.map +1 -0
- package/dist/app-debug/index.d.ts +12 -0
- package/dist/app-debug/index.d.ts.map +1 -0
- package/dist/app-debug/index.js +9 -0
- package/dist/app-debug/index.js.map +1 -0
- package/dist/app.d.ts +38 -48
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +980 -677
- package/dist/app.js.map +1 -1
- package/dist/bash-tool.d.ts +13 -0
- package/dist/bash-tool.d.ts.map +1 -0
- package/dist/bash-tool.js +85 -0
- package/dist/bash-tool.js.map +1 -0
- package/dist/chat-codeact.d.ts +93 -0
- package/dist/chat-codeact.d.ts.map +1 -0
- package/dist/chat-codeact.js +179 -0
- package/dist/chat-codeact.js.map +1 -0
- package/dist/chat-context.d.ts +18 -0
- package/dist/chat-context.d.ts.map +1 -0
- package/dist/chat-context.js +32 -0
- package/dist/chat-context.js.map +1 -0
- package/dist/chat-media.d.ts +3 -0
- package/dist/chat-media.d.ts.map +1 -0
- package/dist/chat-media.js +46 -0
- package/dist/chat-media.js.map +1 -0
- package/dist/chat-prompts.d.ts +20 -0
- package/dist/chat-prompts.d.ts.map +1 -0
- package/dist/chat-prompts.js +42 -0
- package/dist/chat-prompts.js.map +1 -0
- package/dist/chat-sessions.d.ts +25 -0
- package/dist/chat-sessions.d.ts.map +1 -0
- package/dist/chat-sessions.js +153 -0
- package/dist/chat-sessions.js.map +1 -0
- package/dist/command-errors.d.ts +10 -0
- package/dist/command-errors.d.ts.map +1 -0
- package/dist/command-errors.js +15 -0
- package/dist/command-errors.js.map +1 -0
- package/dist/commands/__tests__/jtbd.test.d.ts +2 -0
- package/dist/commands/__tests__/jtbd.test.d.ts.map +1 -0
- package/dist/commands/__tests__/jtbd.test.js +120 -0
- package/dist/commands/__tests__/jtbd.test.js.map +1 -0
- package/dist/commands/__tests__/timeline-render-audio.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-render-audio.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-render-audio.test.js +53 -0
- package/dist/commands/__tests__/timeline-render-audio.test.js.map +1 -0
- package/dist/commands/__tests__/timeline-render-completeness.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-render-completeness.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-render-completeness.test.js +117 -0
- package/dist/commands/__tests__/timeline-render-completeness.test.js.map +1 -0
- package/dist/commands/__tests__/timeline-render.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-render.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-render.test.js +115 -0
- package/dist/commands/__tests__/timeline-render.test.js.map +1 -0
- package/dist/commands/__tests__/timeline-score.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-score.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-score.test.js +100 -0
- package/dist/commands/__tests__/timeline-score.test.js.map +1 -0
- package/dist/commands/affected.d.ts +9 -0
- package/dist/commands/affected.d.ts.map +1 -0
- package/dist/commands/affected.js +122 -0
- package/dist/commands/affected.js.map +1 -0
- package/dist/commands/agent.d.ts +26 -4
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +328 -306
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/app.d.ts +3 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +405 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/apps.d.ts +15 -0
- package/dist/commands/apps.d.ts.map +1 -0
- package/dist/commands/apps.js +180 -0
- package/dist/commands/apps.js.map +1 -0
- package/dist/commands/auth.d.ts +12 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +154 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/collections.d.ts +10 -0
- package/dist/commands/collections.d.ts.map +1 -0
- package/dist/commands/collections.js +257 -0
- package/dist/commands/collections.js.map +1 -0
- package/dist/commands/costs.d.ts +15 -0
- package/dist/commands/costs.d.ts.map +1 -0
- package/dist/commands/costs.js +201 -0
- package/dist/commands/costs.js.map +1 -0
- package/dist/commands/db.d.ts +3 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +176 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/debug-summary-output.d.ts +22 -0
- package/dist/commands/debug-summary-output.d.ts.map +1 -0
- package/dist/commands/debug-summary-output.js +28 -0
- package/dist/commands/debug-summary-output.js.map +1 -0
- package/dist/commands/debug.d.ts +13 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +138 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/deploy-helpers.d.ts +49 -18
- package/dist/commands/deploy-helpers.d.ts.map +1 -1
- package/dist/commands/deploy-helpers.js +10 -276
- package/dist/commands/deploy-helpers.js.map +1 -1
- package/dist/commands/deploy.d.ts +0 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +21 -217
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/errors.d.ts +11 -0
- package/dist/commands/errors.d.ts.map +1 -0
- package/dist/commands/errors.js +177 -0
- package/dist/commands/errors.js.map +1 -0
- package/dist/commands/eval.d.ts +152 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +690 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/extension.d.ts +12 -0
- package/dist/commands/extension.d.ts.map +1 -0
- package/dist/commands/extension.js +30 -0
- package/dist/commands/extension.js.map +1 -0
- package/dist/commands/game-benchmark.d.ts +34 -0
- package/dist/commands/game-benchmark.d.ts.map +1 -0
- package/dist/commands/game-benchmark.js +95 -0
- package/dist/commands/game-benchmark.js.map +1 -0
- package/dist/commands/game-smoke.d.ts +3 -0
- package/dist/commands/game-smoke.d.ts.map +1 -0
- package/dist/commands/game-smoke.js +23 -0
- package/dist/commands/game-smoke.js.map +1 -0
- package/dist/commands/game.d.ts +4 -0
- package/dist/commands/game.d.ts.map +1 -0
- package/dist/commands/game.js +624 -0
- package/dist/commands/game.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +324 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/generations.d.ts +17 -0
- package/dist/commands/generations.d.ts.map +1 -0
- package/dist/commands/generations.js +408 -0
- package/dist/commands/generations.js.map +1 -0
- package/dist/commands/harness.d.ts +69 -0
- package/dist/commands/harness.d.ts.map +1 -0
- package/dist/commands/harness.js +575 -0
- package/dist/commands/harness.js.map +1 -0
- package/dist/commands/js-script-validation-output.d.ts +7 -0
- package/dist/commands/js-script-validation-output.d.ts.map +1 -0
- package/dist/commands/js-script-validation-output.js +5 -0
- package/dist/commands/js-script-validation-output.js.map +1 -0
- package/dist/commands/js-script-versions.d.ts +53 -0
- package/dist/commands/js-script-versions.d.ts.map +1 -0
- package/dist/commands/js-script-versions.js +89 -0
- package/dist/commands/js-script-versions.js.map +1 -0
- package/dist/commands/js-script.d.ts +29 -0
- package/dist/commands/js-script.d.ts.map +1 -0
- package/dist/commands/js-script.js +211 -0
- package/dist/commands/js-script.js.map +1 -0
- package/dist/commands/jtbd.d.ts +38 -0
- package/dist/commands/jtbd.d.ts.map +1 -0
- package/dist/commands/jtbd.js +261 -0
- package/dist/commands/jtbd.js.map +1 -0
- package/dist/commands/local-db.d.ts +16 -0
- package/dist/commands/local-db.d.ts.map +1 -0
- package/dist/commands/local-db.js +33 -0
- package/dist/commands/local-db.js.map +1 -0
- package/dist/commands/mcp.d.ts +21 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +164 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/migrate-code-inputs.d.ts +24 -0
- package/dist/commands/migrate-code-inputs.d.ts.map +1 -0
- package/dist/commands/migrate-code-inputs.js +120 -0
- package/dist/commands/migrate-code-inputs.js.map +1 -0
- package/dist/commands/models-hf.js +4 -4
- package/dist/commands/models-hf.js.map +1 -1
- package/dist/commands/models-recommended.d.ts.map +1 -1
- package/dist/commands/models-recommended.js +16 -24
- package/dist/commands/models-recommended.js.map +1 -1
- package/dist/commands/node.d.ts +10 -0
- package/dist/commands/node.d.ts.map +1 -0
- package/dist/commands/node.js +72 -0
- package/dist/commands/node.js.map +1 -0
- package/dist/commands/output.d.ts +24 -0
- package/dist/commands/output.d.ts.map +1 -0
- package/dist/commands/output.js +132 -0
- package/dist/commands/output.js.map +1 -0
- package/dist/commands/package-helpers.d.ts +1 -7
- package/dist/commands/package-helpers.d.ts.map +1 -1
- package/dist/commands/package-helpers.js +3 -26
- package/dist/commands/package-helpers.js.map +1 -1
- package/dist/commands/package.d.ts.map +1 -1
- package/dist/commands/package.js +14 -14
- package/dist/commands/package.js.map +1 -1
- package/dist/commands/packs.d.ts +13 -0
- package/dist/commands/packs.d.ts.map +1 -0
- package/dist/commands/packs.js +60 -0
- package/dist/commands/packs.js.map +1 -0
- package/dist/commands/reliability.d.ts +14 -0
- package/dist/commands/reliability.d.ts.map +1 -0
- package/dist/commands/reliability.js +80 -0
- package/dist/commands/reliability.js.map +1 -0
- package/dist/commands/resource-read.d.ts +28 -0
- package/dist/commands/resource-read.d.ts.map +1 -0
- package/dist/commands/resource-read.js +316 -0
- package/dist/commands/resource-read.js.map +1 -0
- package/dist/commands/runs.d.ts +7 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +302 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/sketch-validation-output.d.ts +7 -0
- package/dist/commands/sketch-validation-output.d.ts.map +1 -0
- package/dist/commands/sketch-validation-output.js +5 -0
- package/dist/commands/sketch-validation-output.js.map +1 -0
- package/dist/commands/sketch-versions.d.ts +66 -0
- package/dist/commands/sketch-versions.d.ts.map +1 -0
- package/dist/commands/sketch-versions.js +108 -0
- package/dist/commands/sketch-versions.js.map +1 -0
- package/dist/commands/sketch.d.ts +21 -0
- package/dist/commands/sketch.d.ts.map +1 -0
- package/dist/commands/sketch.js +101 -0
- package/dist/commands/sketch.js.map +1 -0
- package/dist/commands/storage.d.ts +24 -0
- package/dist/commands/storage.d.ts.map +1 -0
- package/dist/commands/storage.js +112 -0
- package/dist/commands/storage.js.map +1 -0
- package/dist/commands/telegram.d.ts +11 -0
- package/dist/commands/telegram.d.ts.map +1 -0
- package/dist/commands/telegram.js +66 -0
- package/dist/commands/telegram.js.map +1 -0
- package/dist/commands/timeline-render.d.ts +85 -0
- package/dist/commands/timeline-render.d.ts.map +1 -0
- package/dist/commands/timeline-render.js +474 -0
- package/dist/commands/timeline-render.js.map +1 -0
- package/dist/commands/timeline-score.d.ts +16 -0
- package/dist/commands/timeline-score.d.ts.map +1 -0
- package/dist/commands/timeline-score.js +89 -0
- package/dist/commands/timeline-score.js.map +1 -0
- package/dist/commands/timeline-validation-output.d.ts +7 -0
- package/dist/commands/timeline-validation-output.d.ts.map +1 -0
- package/dist/commands/timeline-validation-output.js +9 -0
- package/dist/commands/timeline-validation-output.js.map +1 -0
- package/dist/commands/timeline-versions.d.ts +72 -0
- package/dist/commands/timeline-versions.d.ts.map +1 -0
- package/dist/commands/timeline-versions.js +108 -0
- package/dist/commands/timeline-versions.js.map +1 -0
- package/dist/commands/timeline.d.ts +22 -0
- package/dist/commands/timeline.d.ts.map +1 -0
- package/dist/commands/timeline.js +105 -0
- package/dist/commands/timeline.js.map +1 -0
- package/dist/commands/validate.d.ts +22 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +127 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/validation-output.d.ts +25 -0
- package/dist/commands/validation-output.d.ts.map +1 -0
- package/dist/commands/validation-output.js +29 -0
- package/dist/commands/validation-output.js.map +1 -0
- package/dist/commands/version-commands.d.ts +94 -0
- package/dist/commands/version-commands.d.ts.map +1 -0
- package/dist/commands/version-commands.js +227 -0
- package/dist/commands/version-commands.js.map +1 -0
- package/dist/commands/worker-models.d.ts +13 -0
- package/dist/commands/worker-models.d.ts.map +1 -0
- package/dist/commands/worker-models.js +207 -0
- package/dist/commands/worker-models.js.map +1 -0
- package/dist/commands/worker.d.ts +23 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +374 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/debug/browser-runner.d.ts +21 -0
- package/dist/debug/browser-runner.d.ts.map +1 -0
- package/dist/debug/browser-runner.js +196 -0
- package/dist/debug/browser-runner.js.map +1 -0
- package/dist/debug/collector.d.ts +9 -0
- package/dist/debug/collector.d.ts.map +1 -0
- package/dist/debug/collector.js +9 -0
- package/dist/debug/collector.js.map +1 -0
- package/dist/debug/diff.d.ts +48 -0
- package/dist/debug/diff.d.ts.map +1 -0
- package/dist/debug/diff.js +68 -0
- package/dist/debug/diff.js.map +1 -0
- package/dist/debug/harness.d.ts +11 -0
- package/dist/debug/harness.d.ts.map +1 -0
- package/dist/debug/harness.js +103 -0
- package/dist/debug/harness.js.map +1 -0
- package/dist/debug/index.d.ts +17 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +16 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/markdown.d.ts +3 -0
- package/dist/debug/markdown.d.ts.map +1 -0
- package/dist/debug/markdown.js +127 -0
- package/dist/debug/markdown.js.map +1 -0
- package/dist/debug/server-runner.d.ts +24 -0
- package/dist/debug/server-runner.d.ts.map +1 -0
- package/dist/debug/server-runner.js +197 -0
- package/dist/debug/server-runner.js.map +1 -0
- package/dist/debug/target.d.ts +34 -0
- package/dist/debug/target.d.ts.map +1 -0
- package/dist/debug/target.js +104 -0
- package/dist/debug/target.js.map +1 -0
- package/dist/debug/trace.d.ts +30 -0
- package/dist/debug/trace.d.ts.map +1 -0
- package/dist/debug/trace.js +87 -0
- package/dist/debug/trace.js.map +1 -0
- package/dist/debug/types.d.ts +82 -0
- package/dist/debug/types.d.ts.map +1 -0
- package/dist/debug/types.js +13 -0
- package/dist/debug/types.js.map +1 -0
- package/dist/debug/verdict.d.ts +3 -0
- package/dist/debug/verdict.d.ts.map +1 -0
- package/dist/debug/verdict.js +78 -0
- package/dist/debug/verdict.js.map +1 -0
- package/dist/debug/watch.d.ts +23 -0
- package/dist/debug/watch.d.ts.map +1 -0
- package/dist/debug/watch.js +68 -0
- package/dist/debug/watch.js.map +1 -0
- package/dist/diagnose.d.ts +139 -0
- package/dist/diagnose.d.ts.map +1 -0
- package/dist/diagnose.js +418 -0
- package/dist/diagnose.js.map +1 -0
- package/dist/evals/graph-runner.d.ts +8 -0
- package/dist/evals/graph-runner.d.ts.map +1 -0
- package/dist/evals/graph-runner.js +136 -0
- package/dist/evals/graph-runner.js.map +1 -0
- package/dist/harness/capability-coverage.d.ts +161 -0
- package/dist/harness/capability-coverage.d.ts.map +1 -0
- package/dist/harness/capability-coverage.js +266 -0
- package/dist/harness/capability-coverage.js.map +1 -0
- package/dist/harness/capability-table.d.ts +17 -0
- package/dist/harness/capability-table.d.ts.map +1 -0
- package/dist/harness/capability-table.js +3844 -0
- package/dist/harness/capability-table.js.map +1 -0
- package/dist/harness/changed-files.d.ts +20 -0
- package/dist/harness/changed-files.d.ts.map +1 -0
- package/dist/harness/changed-files.js +90 -0
- package/dist/harness/changed-files.js.map +1 -0
- package/dist/harness/declared-capabilities.d.ts +12 -0
- package/dist/harness/declared-capabilities.d.ts.map +1 -0
- package/dist/harness/declared-capabilities.js +21 -0
- package/dist/harness/declared-capabilities.js.map +1 -0
- package/dist/harness/registry.d.ts +190 -0
- package/dist/harness/registry.d.ts.map +1 -0
- package/dist/harness/registry.js +2034 -0
- package/dist/harness/registry.js.map +1 -0
- package/dist/index.js +122 -131
- package/dist/index.js.map +1 -1
- package/dist/interaction-script.d.ts +40 -0
- package/dist/interaction-script.d.ts.map +1 -0
- package/dist/interaction-script.js +96 -0
- package/dist/interaction-script.js.map +1 -0
- package/dist/js-script-debug/harness.d.ts +124 -0
- package/dist/js-script-debug/harness.d.ts.map +1 -0
- package/dist/js-script-debug/harness.js +230 -0
- package/dist/js-script-debug/harness.js.map +1 -0
- package/dist/js-script-debug/index.d.ts +9 -0
- package/dist/js-script-debug/index.d.ts.map +1 -0
- package/dist/js-script-debug/index.js +9 -0
- package/dist/js-script-debug/index.js.map +1 -0
- package/dist/js-script-debug/interactions.d.ts +19 -0
- package/dist/js-script-debug/interactions.d.ts.map +1 -0
- package/dist/js-script-debug/interactions.js +17 -0
- package/dist/js-script-debug/interactions.js.map +1 -0
- package/dist/js-script-debug/target.d.ts +20 -0
- package/dist/js-script-debug/target.d.ts.map +1 -0
- package/dist/js-script-debug/target.js +78 -0
- package/dist/js-script-debug/target.js.map +1 -0
- package/dist/local-model-interfaces.d.ts +20 -0
- package/dist/local-model-interfaces.d.ts.map +1 -0
- package/dist/local-model-interfaces.js +41 -0
- package/dist/local-model-interfaces.js.map +1 -0
- package/dist/local-secrets.d.ts +3 -0
- package/dist/local-secrets.d.ts.map +1 -0
- package/dist/local-secrets.js +16 -0
- package/dist/local-secrets.js.map +1 -0
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +7 -2
- package/dist/markdown.js.map +1 -1
- package/dist/node/run-node.d.ts +28 -0
- package/dist/node/run-node.d.ts.map +1 -0
- package/dist/node/run-node.js +76 -0
- package/dist/node/run-node.js.map +1 -0
- package/dist/node-registry.d.ts +27 -0
- package/dist/node-registry.d.ts.map +1 -0
- package/dist/node-registry.js +33 -0
- package/dist/node-registry.js.map +1 -0
- package/dist/nodetool-main.d.ts +15 -0
- package/dist/nodetool-main.d.ts.map +1 -0
- package/dist/nodetool-main.js +1368 -0
- package/dist/nodetool-main.js.map +1 -0
- package/dist/nodetool.d.ts +0 -13
- package/dist/nodetool.d.ts.map +1 -1
- package/dist/nodetool.js +17 -1147
- package/dist/nodetool.js.map +1 -1
- package/dist/numeric-options.d.ts +22 -0
- package/dist/numeric-options.d.ts.map +1 -0
- package/dist/numeric-options.js +45 -0
- package/dist/numeric-options.js.map +1 -0
- package/dist/permission-gate.d.ts +55 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +118 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/predicates.d.ts +6 -0
- package/dist/predicates.d.ts.map +1 -0
- package/dist/predicates.js +6 -0
- package/dist/predicates.js.map +1 -0
- package/dist/providers.d.ts +73 -10
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +339 -97
- package/dist/providers.js.map +1 -1
- package/dist/readline-input.d.ts +13 -19
- package/dist/readline-input.d.ts.map +1 -1
- package/dist/readline-input.js +201 -190
- package/dist/readline-input.js.map +1 -1
- package/dist/run-budget.d.ts +40 -0
- package/dist/run-budget.d.ts.map +1 -0
- package/dist/run-budget.js +119 -0
- package/dist/run-budget.js.map +1 -0
- package/dist/run-dsl-supervised.d.ts +11 -0
- package/dist/run-dsl-supervised.d.ts.map +1 -0
- package/dist/run-dsl-supervised.js +82 -0
- package/dist/run-dsl-supervised.js.map +1 -0
- package/dist/run-dsl.d.ts +29 -0
- package/dist/run-dsl.d.ts.map +1 -1
- package/dist/run-dsl.js +44 -10
- package/dist/run-dsl.js.map +1 -1
- package/dist/run-json.d.ts +24 -0
- package/dist/run-json.d.ts.map +1 -0
- package/dist/run-json.js +132 -0
- package/dist/run-json.js.map +1 -0
- package/dist/sandbox-catalog.d.ts +24 -0
- package/dist/sandbox-catalog.d.ts.map +1 -0
- package/dist/sandbox-catalog.js +78 -0
- package/dist/sandbox-catalog.js.map +1 -0
- package/dist/settings.d.ts +11 -10
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +71 -13
- package/dist/settings.js.map +1 -1
- package/dist/sketch-debug/harness.d.ts +87 -0
- package/dist/sketch-debug/harness.d.ts.map +1 -0
- package/dist/sketch-debug/harness.js +145 -0
- package/dist/sketch-debug/harness.js.map +1 -0
- package/dist/sketch-debug/index.d.ts +9 -0
- package/dist/sketch-debug/index.d.ts.map +1 -0
- package/dist/sketch-debug/index.js +9 -0
- package/dist/sketch-debug/index.js.map +1 -0
- package/dist/sketch-debug/interactions.d.ts +19 -0
- package/dist/sketch-debug/interactions.d.ts.map +1 -0
- package/dist/sketch-debug/interactions.js +17 -0
- package/dist/sketch-debug/interactions.js.map +1 -0
- package/dist/sketch-debug/target.d.ts +48 -0
- package/dist/sketch-debug/target.d.ts.map +1 -0
- package/dist/sketch-debug/target.js +138 -0
- package/dist/sketch-debug/target.js.map +1 -0
- package/dist/stdin.d.ts +18 -19
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +160 -157
- package/dist/stdin.js.map +1 -1
- package/dist/supervisor.d.ts +97 -0
- package/dist/supervisor.d.ts.map +1 -0
- package/dist/supervisor.js +194 -0
- package/dist/supervisor.js.map +1 -0
- package/dist/terminal-clipboard.d.ts +3 -0
- package/dist/terminal-clipboard.d.ts.map +1 -0
- package/dist/terminal-clipboard.js +24 -0
- package/dist/terminal-clipboard.js.map +1 -0
- package/dist/terminal-mouse.d.ts +24 -0
- package/dist/terminal-mouse.d.ts.map +1 -0
- package/dist/terminal-mouse.js +84 -0
- package/dist/terminal-mouse.js.map +1 -0
- package/dist/terminal-screen.d.ts +41 -0
- package/dist/terminal-screen.d.ts.map +1 -0
- package/dist/terminal-screen.js +228 -0
- package/dist/terminal-screen.js.map +1 -0
- package/dist/timeline-debug/harness.d.ts +79 -0
- package/dist/timeline-debug/harness.d.ts.map +1 -0
- package/dist/timeline-debug/harness.js +122 -0
- package/dist/timeline-debug/harness.js.map +1 -0
- package/dist/timeline-debug/index.d.ts +9 -0
- package/dist/timeline-debug/index.d.ts.map +1 -0
- package/dist/timeline-debug/index.js +9 -0
- package/dist/timeline-debug/index.js.map +1 -0
- package/dist/timeline-debug/interactions.d.ts +19 -0
- package/dist/timeline-debug/interactions.d.ts.map +1 -0
- package/dist/timeline-debug/interactions.js +17 -0
- package/dist/timeline-debug/interactions.js.map +1 -0
- package/dist/timeline-debug/target.d.ts +34 -0
- package/dist/timeline-debug/target.d.ts.map +1 -0
- package/dist/timeline-debug/target.js +132 -0
- package/dist/timeline-debug/target.js.map +1 -0
- package/dist/tool-format.d.ts +54 -0
- package/dist/tool-format.d.ts.map +1 -0
- package/dist/tool-format.js +360 -0
- package/dist/tool-format.js.map +1 -0
- package/dist/useExecutionState.d.ts.map +1 -1
- package/dist/useExecutionState.js +8 -4
- package/dist/useExecutionState.js.map +1 -1
- package/dist/validate/index.d.ts +28 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +51 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/websocket-client.d.ts +78 -15
- package/dist/websocket-client.d.ts.map +1 -1
- package/dist/websocket-client.js +497 -171
- package/dist/websocket-client.js.map +1 -1
- package/package.json +65 -31
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One rendering of a document validation, shared by the timeline, sketch and
|
|
3
|
+
* JS-script commands. A restored document is checked and reported exactly the
|
|
4
|
+
* way a validated one is, and all three read the same on screen.
|
|
5
|
+
*/
|
|
6
|
+
export interface ValidationIssueLike {
|
|
7
|
+
severity: string;
|
|
8
|
+
message: string;
|
|
9
|
+
code: string;
|
|
10
|
+
path?: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface ValidationLike<I extends ValidationIssueLike> {
|
|
13
|
+
ok: boolean;
|
|
14
|
+
errors: I[];
|
|
15
|
+
warnings: I[];
|
|
16
|
+
}
|
|
17
|
+
/** `[path]` when the issue carries one, nothing otherwise. */
|
|
18
|
+
export declare function issueLocation(issue: ValidationIssueLike): string;
|
|
19
|
+
/**
|
|
20
|
+
* Headline, then one line per issue — errors before warnings. `where` names the
|
|
21
|
+
* part of the document an issue points at; per-document renderers pass the
|
|
22
|
+
* locator their issue type carries and fall back to `issueLocation`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function renderValidation<I extends ValidationIssueLike>(validation: ValidationLike<I>, where?: (issue: I) => string): string[];
|
|
25
|
+
//# sourceMappingURL=validation-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-output.d.ts","sourceRoot":"","sources":["../../src/commands/validation-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,mBAAmB;IAC3D,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,mBAAmB,EAC5D,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,EAC7B,KAAK,GAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAsB,GAC1C,MAAM,EAAE,CAaV"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One rendering of a document validation, shared by the timeline, sketch and
|
|
3
|
+
* JS-script commands. A restored document is checked and reported exactly the
|
|
4
|
+
* way a validated one is, and all three read the same on screen.
|
|
5
|
+
*/
|
|
6
|
+
/** `[path]` when the issue carries one, nothing otherwise. */
|
|
7
|
+
export function issueLocation(issue) {
|
|
8
|
+
return issue.path != null ? ` [${issue.path}]` : "";
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Headline, then one line per issue — errors before warnings. `where` names the
|
|
12
|
+
* part of the document an issue points at; per-document renderers pass the
|
|
13
|
+
* locator their issue type carries and fall back to `issueLocation`.
|
|
14
|
+
*/
|
|
15
|
+
export function renderValidation(validation, where = issueLocation) {
|
|
16
|
+
const errors = validation.errors.length;
|
|
17
|
+
const warnings = validation.warnings.length;
|
|
18
|
+
const mark = validation.ok ? (warnings ? "⚠️" : "✅") : "❌";
|
|
19
|
+
const lines = ["", `${mark} ${errors} error(s), ${warnings} warning(s)`];
|
|
20
|
+
if (errors + warnings === 0)
|
|
21
|
+
return lines;
|
|
22
|
+
lines.push("");
|
|
23
|
+
for (const issue of [...validation.errors, ...validation.warnings]) {
|
|
24
|
+
const tag = issue.severity === "error" ? "error" : "warn ";
|
|
25
|
+
lines.push(` ${tag} ${issue.message}${where(issue)} (${issue.code})`);
|
|
26
|
+
}
|
|
27
|
+
return lines;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=validation-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-output.js","sourceRoot":"","sources":["../../src/commands/validation-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,OAAO,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAA6B,EAC7B,KAAK,GAAyB,aAAa;IAE3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,cAAc,QAAQ,aAAa,CAAC,CAAC;IACzE,IAAI,MAAM,GAAG,QAAQ,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<document> versions list|show|create|restore|delete` — one registration for
|
|
3
|
+
* every document type that keeps immutable snapshots (timeline sequences,
|
|
4
|
+
* image documents, JS scripts).
|
|
5
|
+
*
|
|
6
|
+
* Each type keeps its own row shapes, table columns and messages in a
|
|
7
|
+
* `VersionCommandSpec`; the command wiring, the CAS-guarded restore order
|
|
8
|
+
* (snapshot the pre-restore state, write, re-validate) and the exit codes are
|
|
9
|
+
* written once here. `restore` mirrors the tRPC routers: an old document is
|
|
10
|
+
* restored against today's schema, so a restore whose document no longer
|
|
11
|
+
* validates exits non-zero.
|
|
12
|
+
*/
|
|
13
|
+
import type { Command } from "commander";
|
|
14
|
+
/** A decoded JSON document, before anything validates its shape. */
|
|
15
|
+
export type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
16
|
+
[key: string]: JsonValue;
|
|
17
|
+
};
|
|
18
|
+
/** The model calls these commands make — the whole database seam. */
|
|
19
|
+
export interface VersionStore<Doc, Row> {
|
|
20
|
+
load: (id: string) => Promise<Doc | null>;
|
|
21
|
+
listVersions: (documentId: string, opts: {
|
|
22
|
+
limit?: number;
|
|
23
|
+
saveType?: string;
|
|
24
|
+
}) => Promise<Row[]>;
|
|
25
|
+
findVersion: (documentId: string, version: number) => Promise<Row | null>;
|
|
26
|
+
snapshot: (doc: Doc, opts: {
|
|
27
|
+
saveType: "manual" | "restore";
|
|
28
|
+
name?: string | null;
|
|
29
|
+
}) => Promise<Row>;
|
|
30
|
+
/**
|
|
31
|
+
* Write a version's document and settings back onto the parent document,
|
|
32
|
+
* compare-and-swap on the `updated_at` it was loaded with. Resolves to null
|
|
33
|
+
* when someone else wrote first.
|
|
34
|
+
*/
|
|
35
|
+
restore: (doc: Doc, version: Row) => Promise<Doc | null>;
|
|
36
|
+
deleteVersion: (documentId: string, version: number) => Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
interface Validation {
|
|
39
|
+
ok: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** Everything one document type contributes to the shared commands. */
|
|
42
|
+
export interface VersionCommandSpec<Doc, Row, Item, V extends Validation, Counts, Meta> {
|
|
43
|
+
/** Argument placeholder, e.g. `timeline_id`. */
|
|
44
|
+
idArg: string;
|
|
45
|
+
/** The key naming the parent document in `--json` output, e.g. `timelineId`. */
|
|
46
|
+
idKey: string;
|
|
47
|
+
/** Descriptions, verbatim — these are the documented CLI surface. */
|
|
48
|
+
descriptions: {
|
|
49
|
+
group: string;
|
|
50
|
+
list: string;
|
|
51
|
+
show: string;
|
|
52
|
+
create: string;
|
|
53
|
+
restore: string;
|
|
54
|
+
delete: string;
|
|
55
|
+
restoreJson: string;
|
|
56
|
+
};
|
|
57
|
+
notFoundDocument: (id: string) => string;
|
|
58
|
+
notFoundVersion: (id: string, version: number) => string;
|
|
59
|
+
/** Thrown when the CAS restore loses the race. */
|
|
60
|
+
conflict: string;
|
|
61
|
+
confirmDelete: (id: string, version: number) => string;
|
|
62
|
+
deleted: (id: string, version: number) => string;
|
|
63
|
+
toItem: (row: Row) => Item;
|
|
64
|
+
/** The table columns, for `list` and for `show`'s header row. */
|
|
65
|
+
tableRow: (item: Item) => Record<string, unknown>;
|
|
66
|
+
counts: (document: JsonValue | undefined) => Counts;
|
|
67
|
+
/** The line `show` prints under the table. */
|
|
68
|
+
showSummary: (counts: Counts, item: Item) => string;
|
|
69
|
+
/** The line `restore` prints on success. */
|
|
70
|
+
restoreSummary: (id: string, version: number, counts: Counts, row: Row) => string;
|
|
71
|
+
/** Extra `--json` keys describing the document after a restore. */
|
|
72
|
+
restoreJsonExtra: (doc: Doc) => Record<string, unknown>;
|
|
73
|
+
/** The render settings the validator needs, read off the version row. */
|
|
74
|
+
validateMeta: (row: Row) => Meta;
|
|
75
|
+
renderValidation: (validation: V) => string[];
|
|
76
|
+
}
|
|
77
|
+
/** Injected with lazy defaults so registration stays light and actions unit-test. */
|
|
78
|
+
export interface VersionCommandDeps<Doc, Row, V extends Validation, Meta> {
|
|
79
|
+
store?: () => Promise<VersionStore<Doc, Row>>;
|
|
80
|
+
validate?: (document: unknown, meta: Meta) => Promise<V> | V;
|
|
81
|
+
confirmDelete?: (message: string, force?: boolean) => Promise<boolean>;
|
|
82
|
+
}
|
|
83
|
+
/** A version is a positive integer; anything else names itself in the error. */
|
|
84
|
+
export declare function parseVersionNumber(raw: string): number;
|
|
85
|
+
/** Parse a stored document without throwing — an unreadable one is a finding. */
|
|
86
|
+
export declare function parseVersionDocument(raw: unknown): JsonValue;
|
|
87
|
+
/** Count an array-valued field, or 0 for anything else. */
|
|
88
|
+
export declare function countArray(value: unknown): number;
|
|
89
|
+
export declare function registerVersionCommands<Doc, Row, Item, V extends Validation, Counts, Meta>(parent: Command, spec: VersionCommandSpec<Doc, Row, Item, V, Counts, Meta>, deps: VersionCommandDeps<Doc, Row, V, Meta>, defaults: {
|
|
90
|
+
store: () => Promise<VersionStore<Doc, Row>>;
|
|
91
|
+
validate: (document: unknown, meta: Meta) => Promise<V> | V;
|
|
92
|
+
}): void;
|
|
93
|
+
export {};
|
|
94
|
+
//# sourceMappingURL=version-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-commands.d.ts","sourceRoot":"","sources":["../../src/commands/version-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { printCommandError } from "../command-errors.js";
|
|
2
|
+
import { asJson, confirm, printTable } from "./output.js";
|
|
3
|
+
import { numericOptionParser } from "../numeric-options.js";
|
|
4
|
+
import { isString } from "../predicates.js";
|
|
5
|
+
/** A version is a positive integer; anything else names itself in the error. */
|
|
6
|
+
export function parseVersionNumber(raw) {
|
|
7
|
+
const value = Number(raw.trim());
|
|
8
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
9
|
+
throw new Error(`version must be a positive integer (got "${raw}")`);
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
/** Parse a stored document without throwing — an unreadable one is a finding. */
|
|
14
|
+
export function parseVersionDocument(raw) {
|
|
15
|
+
// SAFETY: a Postgres json column arrives already decoded; either way the
|
|
16
|
+
// stored document is JSON.
|
|
17
|
+
if (!isString(raw))
|
|
18
|
+
return raw;
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(raw);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return raw;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Count an array-valued field, or 0 for anything else. */
|
|
27
|
+
export function countArray(value) {
|
|
28
|
+
return Array.isArray(value) ? value.length : 0;
|
|
29
|
+
}
|
|
30
|
+
export function registerVersionCommands(parent, spec, deps, defaults) {
|
|
31
|
+
const openStore = deps.store ?? defaults.store;
|
|
32
|
+
const validate = deps.validate ?? defaults.validate;
|
|
33
|
+
const confirmDelete = deps.confirmDelete ??
|
|
34
|
+
((message, force) => confirm(message, { force }));
|
|
35
|
+
const id = `<${spec.idArg}>`;
|
|
36
|
+
async function requireDocument(store, documentId) {
|
|
37
|
+
const doc = await store.load(documentId);
|
|
38
|
+
if (!doc)
|
|
39
|
+
throw new Error(spec.notFoundDocument(documentId));
|
|
40
|
+
return doc;
|
|
41
|
+
}
|
|
42
|
+
async function requireVersion(store, documentId, version) {
|
|
43
|
+
const row = await store.findVersion(documentId, version);
|
|
44
|
+
if (!row)
|
|
45
|
+
throw new Error(spec.notFoundVersion(documentId, version));
|
|
46
|
+
return row;
|
|
47
|
+
}
|
|
48
|
+
const versions = parent
|
|
49
|
+
.command("versions")
|
|
50
|
+
.description(spec.descriptions.group);
|
|
51
|
+
versions
|
|
52
|
+
.command(`list ${id}`)
|
|
53
|
+
.description(spec.descriptions.list)
|
|
54
|
+
.option("--save-type <type>", "Only manual, autosave or restore snapshots")
|
|
55
|
+
.option("--limit <n>", "Maximum versions to list (default 100)", numericOptionParser("--limit", { integer: true, min: 1 }))
|
|
56
|
+
.option("--json", "Print the versions as JSON")
|
|
57
|
+
.action(async (documentId, opts) => {
|
|
58
|
+
try {
|
|
59
|
+
const store = await openStore();
|
|
60
|
+
await requireDocument(store, documentId);
|
|
61
|
+
const query = {};
|
|
62
|
+
if (opts.limit !== undefined) {
|
|
63
|
+
query.limit = opts.limit;
|
|
64
|
+
}
|
|
65
|
+
if (opts.saveType) {
|
|
66
|
+
query.saveType = opts.saveType;
|
|
67
|
+
}
|
|
68
|
+
const rows = await store.listVersions(documentId, query);
|
|
69
|
+
const items = rows.map(spec.toItem);
|
|
70
|
+
if (opts.json) {
|
|
71
|
+
asJson({ [spec.idKey]: documentId, versions: items });
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
printTable(items.map(spec.tableRow));
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
printCommandError(e, opts.json);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
versions
|
|
82
|
+
.command(`show ${id} <version>`)
|
|
83
|
+
.description(spec.descriptions.show)
|
|
84
|
+
.option("--json", "Print the metadata and the full document as JSON")
|
|
85
|
+
.action(async (documentId, version, opts) => {
|
|
86
|
+
try {
|
|
87
|
+
const number = parseVersionNumber(version);
|
|
88
|
+
const store = await openStore();
|
|
89
|
+
await requireDocument(store, documentId);
|
|
90
|
+
const row = await requireVersion(store, documentId, number);
|
|
91
|
+
const item = spec.toItem(row);
|
|
92
|
+
const document = parseVersionDocument(row.document);
|
|
93
|
+
if (opts.json) {
|
|
94
|
+
asJson({ ...item, document });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
printTable([spec.tableRow(item)]);
|
|
98
|
+
console.log(spec.showSummary(spec.counts(document), item));
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
printCommandError(e, opts.json);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
versions
|
|
106
|
+
.command(`create ${id}`)
|
|
107
|
+
.description(spec.descriptions.create)
|
|
108
|
+
.option("--name <name>", "Label for the snapshot")
|
|
109
|
+
.option("--json", "Print the created version as JSON")
|
|
110
|
+
.action(async (documentId, opts) => {
|
|
111
|
+
try {
|
|
112
|
+
const store = await openStore();
|
|
113
|
+
const doc = await requireDocument(store, documentId);
|
|
114
|
+
const row = await store.snapshot(doc, {
|
|
115
|
+
saveType: "manual",
|
|
116
|
+
name: opts.name ?? null
|
|
117
|
+
});
|
|
118
|
+
const item = spec.toItem(row);
|
|
119
|
+
if (opts.json) {
|
|
120
|
+
asJson(item);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
console.log(`✅ Snapshot saved as v${item.version}${item.name ? ` (${String(item.name)})` : ""}`);
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
printCommandError(e, opts.json);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
versions
|
|
131
|
+
.command(`restore ${id} <version>`)
|
|
132
|
+
.description(spec.descriptions.restore)
|
|
133
|
+
.option("--json", spec.descriptions.restoreJson)
|
|
134
|
+
.action(async (documentId, version, opts) => {
|
|
135
|
+
// The verdict leaves the try block in a variable: `process.exit` throws
|
|
136
|
+
// under test, and an exit inside the try would be caught here as a
|
|
137
|
+
// command failure.
|
|
138
|
+
let restoredOk = false;
|
|
139
|
+
try {
|
|
140
|
+
const number = parseVersionNumber(version);
|
|
141
|
+
const store = await openStore();
|
|
142
|
+
const doc = await requireDocument(store, documentId);
|
|
143
|
+
const target = await requireVersion(store, documentId, number);
|
|
144
|
+
// Snapshot what is about to be overwritten first, so the restore is
|
|
145
|
+
// itself undoable — same order the tRPC router uses.
|
|
146
|
+
const backup = await store.snapshot(doc, {
|
|
147
|
+
saveType: "restore",
|
|
148
|
+
name: `Before restore to v${number}`
|
|
149
|
+
});
|
|
150
|
+
const updated = await store.restore(doc, target);
|
|
151
|
+
if (!updated)
|
|
152
|
+
throw new Error(spec.conflict);
|
|
153
|
+
const document = parseVersionDocument(target.document);
|
|
154
|
+
const validation = await validate(document, spec.validateMeta(target));
|
|
155
|
+
if (opts.json) {
|
|
156
|
+
asJson({
|
|
157
|
+
[spec.idKey]: documentId,
|
|
158
|
+
restored: spec.toItem(target),
|
|
159
|
+
snapshot: spec.toItem(backup),
|
|
160
|
+
...spec.restoreJsonExtra(updated),
|
|
161
|
+
validation
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log(spec.restoreSummary(documentId, number, spec.counts(document), target));
|
|
166
|
+
const meta = backup;
|
|
167
|
+
console.log(` pre-restore state saved as v${meta.version} (${meta.save_type})`);
|
|
168
|
+
console.log(spec.renderValidation(validation).join("\n"));
|
|
169
|
+
}
|
|
170
|
+
restoredOk = validation.ok;
|
|
171
|
+
}
|
|
172
|
+
catch (e) {
|
|
173
|
+
printCommandError(e, opts.json);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
process.exit(restoredOk ? 0 : 1);
|
|
177
|
+
});
|
|
178
|
+
versions
|
|
179
|
+
.command(`delete ${id} <version>`)
|
|
180
|
+
.description(spec.descriptions.delete)
|
|
181
|
+
.option("-y, --yes", "Skip the confirmation prompt")
|
|
182
|
+
.option("--json", "Print the result as JSON")
|
|
183
|
+
.action(async (documentId, version, opts) => {
|
|
184
|
+
let aborted = false;
|
|
185
|
+
try {
|
|
186
|
+
const number = parseVersionNumber(version);
|
|
187
|
+
const store = await openStore();
|
|
188
|
+
await requireDocument(store, documentId);
|
|
189
|
+
await requireVersion(store, documentId, number);
|
|
190
|
+
const ok = await confirmDelete(spec.confirmDelete(documentId, number), opts.yes);
|
|
191
|
+
if (!ok) {
|
|
192
|
+
aborted = true;
|
|
193
|
+
if (opts.json) {
|
|
194
|
+
asJson({
|
|
195
|
+
[spec.idKey]: documentId,
|
|
196
|
+
version: number,
|
|
197
|
+
deleted: false,
|
|
198
|
+
aborted: true
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
console.error("Aborted.");
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
await store.deleteVersion(documentId, number);
|
|
207
|
+
if (opts.json) {
|
|
208
|
+
asJson({
|
|
209
|
+
[spec.idKey]: documentId,
|
|
210
|
+
version: number,
|
|
211
|
+
deleted: true
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
console.log(spec.deleted(documentId, number));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
printCommandError(e, opts.json);
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
if (aborted)
|
|
224
|
+
process.exit(1);
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=version-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-commands.js","sourceRoot":"","sources":["../../src/commands/version-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool worker models` — inspect and manage the HF model cache on a
|
|
3
|
+
* remote GPU worker directly via the WebSocket bridge (no TS server required).
|
|
4
|
+
*
|
|
5
|
+
* Verbs:
|
|
6
|
+
* worker models list [<worker-id>] [--json]
|
|
7
|
+
* worker models download --repo-id <id> [<worker-id>] [-a <glob>] [-i <glob>]
|
|
8
|
+
* worker models delete --repo-id <id> [<worker-id>]
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from "commander";
|
|
11
|
+
import { WorkerManager } from "@nodetool-ai/compute";
|
|
12
|
+
export declare function registerWorkerModelsCommands(worker: Command, getManager: () => Promise<WorkerManager>): void;
|
|
13
|
+
//# sourceMappingURL=worker-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-models.d.ts","sourceRoot":"","sources":["../../src/commands/worker-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,aAAa,EAEd,MAAM,sBAAsB,CAAC;AA+F9B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,GACvC,IAAI,CAQN"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool worker models` — inspect and manage the HF model cache on a
|
|
3
|
+
* remote GPU worker directly via the WebSocket bridge (no TS server required).
|
|
4
|
+
*
|
|
5
|
+
* Verbs:
|
|
6
|
+
* worker models list [<worker-id>] [--json]
|
|
7
|
+
* worker models download --repo-id <id> [<worker-id>] [-a <glob>] [-i <glob>]
|
|
8
|
+
* worker models delete --repo-id <id> [<worker-id>]
|
|
9
|
+
*/
|
|
10
|
+
import { attachWorkerActivityHeartbeat } from "@nodetool-ai/compute";
|
|
11
|
+
import { WebsocketPythonBridge } from "@nodetool-ai/runtime";
|
|
12
|
+
import { resolveWorkerHfToken } from "@nodetool-ai/huggingface";
|
|
13
|
+
import { getSecret } from "@nodetool-ai/models";
|
|
14
|
+
import { printTable, asJson } from "./output.js";
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Formatting helpers
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
function formatBytes(n) {
|
|
19
|
+
if (!n || n <= 0)
|
|
20
|
+
return "-";
|
|
21
|
+
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
22
|
+
let value = n;
|
|
23
|
+
let i = 0;
|
|
24
|
+
while (value >= 1024 && i < units.length - 1) {
|
|
25
|
+
value /= 1024;
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
return `${value.toFixed(1)} ${units[i]}`;
|
|
29
|
+
}
|
|
30
|
+
/** Local single-user id used across the TS stack for secret-store reads. */
|
|
31
|
+
const LOCAL_USER_ID = "1";
|
|
32
|
+
function collectOption(value, previous) {
|
|
33
|
+
return previous ? [...previous, value] : [value];
|
|
34
|
+
}
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Bridge connection helper
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Resolve the target worker, open a WebSocket bridge, and return it.
|
|
40
|
+
* The bridge has `autoRestart: false` so it won't reconnect once closed —
|
|
41
|
+
* CLI commands are one-shot and call `bridge.close()` in a finally block.
|
|
42
|
+
*
|
|
43
|
+
* When `workerId` is omitted, falls back to the currently-attached instance.
|
|
44
|
+
*/
|
|
45
|
+
async function openBridge(manager, workerId) {
|
|
46
|
+
let conn;
|
|
47
|
+
let instanceId;
|
|
48
|
+
if (workerId) {
|
|
49
|
+
conn = await manager.connectionInfo(workerId);
|
|
50
|
+
instanceId = workerId;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const active = await manager.getActiveWorker();
|
|
54
|
+
if (!active) {
|
|
55
|
+
throw new Error("No worker attached. Provide a worker id or attach one with `worker create --attach`.");
|
|
56
|
+
}
|
|
57
|
+
conn = { wsUrl: active.ws_url, token: active.token };
|
|
58
|
+
instanceId = active.id;
|
|
59
|
+
}
|
|
60
|
+
const bridge = new WebsocketPythonBridge({
|
|
61
|
+
wsUrl: conn.wsUrl,
|
|
62
|
+
workerToken: conn.token ?? undefined,
|
|
63
|
+
autoRestart: false
|
|
64
|
+
});
|
|
65
|
+
// A model download runs for tens of minutes and sends nothing outbound after
|
|
66
|
+
// the request — the reaper would otherwise pause the pod mid-download. This
|
|
67
|
+
// touches the worker the command names, not the attached one.
|
|
68
|
+
attachWorkerActivityHeartbeat(bridge, {
|
|
69
|
+
resolveInstanceId: async () => instanceId
|
|
70
|
+
});
|
|
71
|
+
await bridge.connect();
|
|
72
|
+
if (!bridge.supportsModelManagement()) {
|
|
73
|
+
bridge.close();
|
|
74
|
+
throw new Error("This worker's image is too old for model management (protocol_version < 2). " +
|
|
75
|
+
"Upgrade the worker image.");
|
|
76
|
+
}
|
|
77
|
+
return bridge;
|
|
78
|
+
}
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// Registration
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
export function registerWorkerModelsCommands(worker, getManager) {
|
|
83
|
+
const models = worker
|
|
84
|
+
.command("models")
|
|
85
|
+
.description("Manage the HF model cache on a remote worker");
|
|
86
|
+
registerList(models, getManager);
|
|
87
|
+
registerDownload(models, getManager);
|
|
88
|
+
registerDelete(models, getManager);
|
|
89
|
+
}
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// worker models list
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
function registerList(models, getManager) {
|
|
94
|
+
models
|
|
95
|
+
.command("list [worker-id]")
|
|
96
|
+
.description("List cached HuggingFace models on the worker")
|
|
97
|
+
.option("--json", "Output as JSON")
|
|
98
|
+
.action(async (workerId, opts) => {
|
|
99
|
+
const manager = await getManager();
|
|
100
|
+
let bridge = null;
|
|
101
|
+
try {
|
|
102
|
+
bridge = await openBridge(manager, workerId);
|
|
103
|
+
const cached = await bridge.listCachedModels();
|
|
104
|
+
if (opts.json) {
|
|
105
|
+
asJson(cached);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (cached.length === 0) {
|
|
109
|
+
console.log("(no cached models)");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
printTable(cached.map((m) => ({
|
|
113
|
+
repo_id: m["repo_id"] ?? m["id"] ?? "",
|
|
114
|
+
type: m["type"] ?? "-",
|
|
115
|
+
size: formatBytes(m["size_on_disk"]),
|
|
116
|
+
pipeline: m["pipeline_tag"] ?? "-"
|
|
117
|
+
})), ["repo_id", "type", "size", "pipeline"]);
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
bridge?.close();
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// worker models download
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
function registerDownload(models, getManager) {
|
|
128
|
+
models
|
|
129
|
+
.command("download [worker-id]")
|
|
130
|
+
.description("Download a HuggingFace model into the worker's cache")
|
|
131
|
+
.requiredOption("--repo-id <id>", "HuggingFace repo id (owner/name)")
|
|
132
|
+
.option("--file-path <path>", "Download a single file from the repo")
|
|
133
|
+
.option("-a, --allow-patterns <pattern>", "Only download files matching this glob (repeatable)", collectOption)
|
|
134
|
+
.option("-i, --ignore-patterns <pattern>", "Skip files matching this glob (repeatable)", collectOption)
|
|
135
|
+
.action(async (workerId, opts) => {
|
|
136
|
+
const manager = await getManager();
|
|
137
|
+
let bridge = null;
|
|
138
|
+
try {
|
|
139
|
+
bridge = await openBridge(manager, workerId);
|
|
140
|
+
let lastLine = "";
|
|
141
|
+
let errorMessage = null;
|
|
142
|
+
const render = (u) => {
|
|
143
|
+
if (u.status === "error") {
|
|
144
|
+
errorMessage = u.error ?? "download failed";
|
|
145
|
+
}
|
|
146
|
+
const pct = u.total_bytes > 0
|
|
147
|
+
? Math.floor((u.downloaded_bytes / u.total_bytes) * 100)
|
|
148
|
+
: 0;
|
|
149
|
+
const line = `[${u.status}] ${u.repo_id} ${u.downloaded_files}/${u.total_files} files ${formatBytes(u.downloaded_bytes)}/${formatBytes(u.total_bytes)} ${pct}%`;
|
|
150
|
+
if (line !== lastLine) {
|
|
151
|
+
process.stderr.write(`\r${line.padEnd(100)}`);
|
|
152
|
+
lastLine = line;
|
|
153
|
+
}
|
|
154
|
+
if (u.status === "completed" ||
|
|
155
|
+
u.status === "error" ||
|
|
156
|
+
u.status === "cancelled") {
|
|
157
|
+
process.stderr.write("\n");
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
// The worker holds no HuggingFace credential, so a gated repo
|
|
161
|
+
// (FLUX.1-dev, RMBG-2.0, ...) 401s unless this host supplies one.
|
|
162
|
+
const token = await resolveWorkerHfToken((key) => getSecret(key, LOCAL_USER_ID));
|
|
163
|
+
await bridge.downloadModel({
|
|
164
|
+
repo_id: opts.repoId,
|
|
165
|
+
path: opts.filePath ?? null,
|
|
166
|
+
allow_patterns: opts.allowPatterns ?? null,
|
|
167
|
+
ignore_patterns: opts.ignorePatterns ?? null,
|
|
168
|
+
token
|
|
169
|
+
}, render);
|
|
170
|
+
if (errorMessage) {
|
|
171
|
+
console.error(errorMessage);
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
console.log(`Downloaded '${opts.repoId}' to worker cache.`);
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
bridge?.close();
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
// worker models delete
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
function registerDelete(models, getManager) {
|
|
185
|
+
models
|
|
186
|
+
.command("delete [worker-id]")
|
|
187
|
+
.description("Delete a cached HuggingFace model from the worker")
|
|
188
|
+
.requiredOption("--repo-id <id>", "HuggingFace repo id (owner/name)")
|
|
189
|
+
.action(async (workerId, opts) => {
|
|
190
|
+
const manager = await getManager();
|
|
191
|
+
let bridge = null;
|
|
192
|
+
try {
|
|
193
|
+
bridge = await openBridge(manager, workerId);
|
|
194
|
+
const deleted = await bridge.deleteCachedModel(opts.repoId);
|
|
195
|
+
if (deleted) {
|
|
196
|
+
console.log(`Deleted '${opts.repoId}' from worker cache.`);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.log(`'${opts.repoId}' was not found in the worker cache.`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
bridge?.close();
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=worker-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-models.js","sourceRoot":"","sources":["../../src/commands/worker-models.ts"],"names":[],"mappings":"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"}
|