@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,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `workflows list|get`, `jobs list|get`, `assets list|get`.
|
|
3
|
+
*
|
|
4
|
+
* Each reads from the local SQLite database, or from a server when `--api-url`
|
|
5
|
+
* (or `NODETOOL_API_URL`) is set. The two sources return different records —
|
|
6
|
+
* the local model row carries every column, the server returns its declared
|
|
7
|
+
* response schema — so both are projected onto one field list per resource
|
|
8
|
+
* before anything is printed. Without that, `--json` handed an agent a
|
|
9
|
+
* different key set depending on an environment variable it never set.
|
|
10
|
+
*
|
|
11
|
+
* Each field list is the intersection of the model row and the server's
|
|
12
|
+
* response schema, so every key in the output is real on both paths: the
|
|
13
|
+
* server's derived fields (`etag`, `get_url`, `thumb_url`, `input_schema`) and
|
|
14
|
+
* the local-only blobs (a job's `graph` and `logs`) are both left out.
|
|
15
|
+
*/
|
|
16
|
+
import { Workflow, Job, Asset } from "@nodetool-ai/models";
|
|
17
|
+
import { createApiClient } from "../api-client.js";
|
|
18
|
+
import { printCommandError } from "../command-errors.js";
|
|
19
|
+
import { printTable, asJson } from "./output.js";
|
|
20
|
+
const WORKFLOW_FIELDS = [
|
|
21
|
+
"id",
|
|
22
|
+
"access",
|
|
23
|
+
"name",
|
|
24
|
+
"tool_name",
|
|
25
|
+
"description",
|
|
26
|
+
"tags",
|
|
27
|
+
"thumbnail",
|
|
28
|
+
"thumbnail_url",
|
|
29
|
+
"graph",
|
|
30
|
+
"settings",
|
|
31
|
+
"package_name",
|
|
32
|
+
"path",
|
|
33
|
+
"run_mode",
|
|
34
|
+
"workspace_id",
|
|
35
|
+
"html_app",
|
|
36
|
+
"app_doc",
|
|
37
|
+
"created_at",
|
|
38
|
+
"updated_at"
|
|
39
|
+
];
|
|
40
|
+
const JOB_FIELDS = [
|
|
41
|
+
"id",
|
|
42
|
+
"user_id",
|
|
43
|
+
"job_type",
|
|
44
|
+
"status",
|
|
45
|
+
"name",
|
|
46
|
+
"workflow_id",
|
|
47
|
+
"started_at",
|
|
48
|
+
"finished_at",
|
|
49
|
+
"error",
|
|
50
|
+
"cost"
|
|
51
|
+
];
|
|
52
|
+
const ASSET_FIELDS = [
|
|
53
|
+
"id",
|
|
54
|
+
"user_id",
|
|
55
|
+
"parent_id",
|
|
56
|
+
"name",
|
|
57
|
+
"content_type",
|
|
58
|
+
"size",
|
|
59
|
+
"duration",
|
|
60
|
+
"metadata",
|
|
61
|
+
"sketch_document_id",
|
|
62
|
+
"workflow_id",
|
|
63
|
+
"node_id",
|
|
64
|
+
"job_id",
|
|
65
|
+
"timeline_id",
|
|
66
|
+
"created_at"
|
|
67
|
+
];
|
|
68
|
+
/** Missing keys become null so both sources emit the same key set. */
|
|
69
|
+
function project(raw, fields) {
|
|
70
|
+
const row = {};
|
|
71
|
+
for (const field of fields) {
|
|
72
|
+
row[field] = raw[field] ?? null;
|
|
73
|
+
}
|
|
74
|
+
return row;
|
|
75
|
+
}
|
|
76
|
+
function emitList(opts, rows, fields, columns) {
|
|
77
|
+
const projected = rows.map((row) => project(row, fields));
|
|
78
|
+
if (opts.json) {
|
|
79
|
+
asJson(projected);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
printTable(projected, columns);
|
|
83
|
+
}
|
|
84
|
+
function emitOne(opts, raw, fields, columns) {
|
|
85
|
+
const projected = project(raw, fields);
|
|
86
|
+
if (opts.json) {
|
|
87
|
+
asJson(projected);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
printTable([projected], columns);
|
|
91
|
+
}
|
|
92
|
+
function parseLimit(limit) {
|
|
93
|
+
return Number.parseInt(limit ?? "100", 10);
|
|
94
|
+
}
|
|
95
|
+
export function registerResourceReadCommands(parents, deps) {
|
|
96
|
+
const { ensureDb, localUserId } = deps;
|
|
97
|
+
parents.workflows
|
|
98
|
+
.command("list")
|
|
99
|
+
.description("List workflows (reads the local database; --api-url for remote)")
|
|
100
|
+
.option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
|
|
101
|
+
.option("--limit <n>", "Max results", "100")
|
|
102
|
+
.option("--json", "Output as JSON")
|
|
103
|
+
.action(async (opts) => {
|
|
104
|
+
try {
|
|
105
|
+
const limit = parseLimit(opts.limit);
|
|
106
|
+
let rows;
|
|
107
|
+
if (opts.apiUrl) {
|
|
108
|
+
const data = await createApiClient(opts.apiUrl).workflows.list.query({
|
|
109
|
+
limit
|
|
110
|
+
});
|
|
111
|
+
rows = data.workflows;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
ensureDb();
|
|
115
|
+
const [items] = await Workflow.paginate(localUserId, { limit });
|
|
116
|
+
rows = items.map((w) => ({ ...w }));
|
|
117
|
+
}
|
|
118
|
+
emitList(opts, rows, WORKFLOW_FIELDS, ["id", "name", "updated_at"]);
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
printCommandError(e, opts.json);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
parents.workflows
|
|
126
|
+
.command("get <workflow_id>")
|
|
127
|
+
.description("Get a workflow by ID (reads the local database; --api-url for remote)")
|
|
128
|
+
.option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
|
|
129
|
+
.option("--json", "Output as JSON")
|
|
130
|
+
.action(async (workflowId, opts) => {
|
|
131
|
+
try {
|
|
132
|
+
let data;
|
|
133
|
+
if (opts.apiUrl) {
|
|
134
|
+
data = await createApiClient(opts.apiUrl).workflows.get.query({
|
|
135
|
+
id: workflowId
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
ensureDb();
|
|
140
|
+
const wf = await Workflow.find(localUserId, workflowId);
|
|
141
|
+
if (!wf)
|
|
142
|
+
throw new Error(`Workflow not found: ${workflowId}`);
|
|
143
|
+
data = { ...wf };
|
|
144
|
+
}
|
|
145
|
+
emitOne(opts, data, WORKFLOW_FIELDS, [
|
|
146
|
+
"id",
|
|
147
|
+
"name",
|
|
148
|
+
"description",
|
|
149
|
+
"updated_at"
|
|
150
|
+
]);
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
printCommandError(e, opts.json);
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
parents.jobs
|
|
158
|
+
.command("list")
|
|
159
|
+
.description("List jobs (reads the local database; --api-url for remote)")
|
|
160
|
+
.option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
|
|
161
|
+
.option("--workflow-id <id>", "Filter by workflow ID")
|
|
162
|
+
.option("--limit <n>", "Max results", "100")
|
|
163
|
+
.option("--json", "Output as JSON")
|
|
164
|
+
.action(async (opts) => {
|
|
165
|
+
try {
|
|
166
|
+
const limit = parseLimit(opts.limit);
|
|
167
|
+
let rows;
|
|
168
|
+
if (opts.apiUrl) {
|
|
169
|
+
const query = { limit };
|
|
170
|
+
if (opts.workflowId) {
|
|
171
|
+
query.workflow_id = opts.workflowId;
|
|
172
|
+
}
|
|
173
|
+
const data = await createApiClient(opts.apiUrl).jobs.list.query(query);
|
|
174
|
+
rows = data.jobs;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
ensureDb();
|
|
178
|
+
const page = { limit };
|
|
179
|
+
if (opts.workflowId) {
|
|
180
|
+
page.workflowId = opts.workflowId;
|
|
181
|
+
}
|
|
182
|
+
const [items] = await Job.paginate(localUserId, page);
|
|
183
|
+
rows = items.map((j) => ({ ...j }));
|
|
184
|
+
}
|
|
185
|
+
emitList(opts, rows, JOB_FIELDS, [
|
|
186
|
+
"id",
|
|
187
|
+
"status",
|
|
188
|
+
"workflow_id",
|
|
189
|
+
"started_at",
|
|
190
|
+
"cost"
|
|
191
|
+
]);
|
|
192
|
+
}
|
|
193
|
+
catch (e) {
|
|
194
|
+
printCommandError(e, opts.json);
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
parents.jobs
|
|
199
|
+
.command("get <job_id>")
|
|
200
|
+
.description("Get a job by ID (reads the local database; --api-url for remote)")
|
|
201
|
+
.option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
|
|
202
|
+
.option("--json", "Output as JSON")
|
|
203
|
+
.action(async (jobId, opts) => {
|
|
204
|
+
try {
|
|
205
|
+
let data;
|
|
206
|
+
if (opts.apiUrl) {
|
|
207
|
+
data = await createApiClient(opts.apiUrl).jobs.get.query({
|
|
208
|
+
id: jobId
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
ensureDb();
|
|
213
|
+
const job = await Job.find(localUserId, jobId);
|
|
214
|
+
if (!job)
|
|
215
|
+
throw new Error(`Job not found: ${jobId}`);
|
|
216
|
+
data = { ...job };
|
|
217
|
+
}
|
|
218
|
+
emitOne(opts, data, JOB_FIELDS, [
|
|
219
|
+
"id",
|
|
220
|
+
"status",
|
|
221
|
+
"workflow_id",
|
|
222
|
+
"error",
|
|
223
|
+
"cost"
|
|
224
|
+
]);
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
printCommandError(e, opts.json);
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
parents.assets
|
|
232
|
+
.command("list")
|
|
233
|
+
.description("List assets (reads the local database; --api-url for remote)")
|
|
234
|
+
.option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
|
|
235
|
+
.option("--query <q>", "Search query")
|
|
236
|
+
.option("--content-type <type>", "Filter by content type")
|
|
237
|
+
.option("--limit <n>", "Max results", "100")
|
|
238
|
+
.option("--json", "Output as JSON")
|
|
239
|
+
.action(async (opts) => {
|
|
240
|
+
try {
|
|
241
|
+
const limit = parseLimit(opts.limit);
|
|
242
|
+
let rows;
|
|
243
|
+
if (opts.apiUrl) {
|
|
244
|
+
const query = {
|
|
245
|
+
page_size: limit
|
|
246
|
+
};
|
|
247
|
+
if (opts.contentType) {
|
|
248
|
+
query.content_type = opts.contentType;
|
|
249
|
+
}
|
|
250
|
+
const data = await createApiClient(opts.apiUrl).assets.list.query(query);
|
|
251
|
+
rows = data.assets;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
ensureDb();
|
|
255
|
+
const page = { limit };
|
|
256
|
+
if (opts.contentType) {
|
|
257
|
+
page.contentType = opts.contentType;
|
|
258
|
+
}
|
|
259
|
+
const [items] = await Asset.paginate(localUserId, page);
|
|
260
|
+
rows = items.map((a) => ({ ...a }));
|
|
261
|
+
}
|
|
262
|
+
// --query has no server-side search; filter by name in memory (matches
|
|
263
|
+
// the direct path too, which paginates without a search term).
|
|
264
|
+
if (opts.query) {
|
|
265
|
+
const q = opts.query.toLowerCase();
|
|
266
|
+
rows = rows.filter((r) => String(r["name"] ?? "")
|
|
267
|
+
.toLowerCase()
|
|
268
|
+
.includes(q));
|
|
269
|
+
}
|
|
270
|
+
emitList(opts, rows, ASSET_FIELDS, [
|
|
271
|
+
"id",
|
|
272
|
+
"name",
|
|
273
|
+
"content_type",
|
|
274
|
+
"size"
|
|
275
|
+
]);
|
|
276
|
+
}
|
|
277
|
+
catch (e) {
|
|
278
|
+
printCommandError(e, opts.json);
|
|
279
|
+
process.exit(1);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
parents.assets
|
|
283
|
+
.command("get <asset_id>")
|
|
284
|
+
.description("Get an asset by ID (reads the local database; --api-url for remote)")
|
|
285
|
+
.option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
|
|
286
|
+
.option("--json", "Output as JSON")
|
|
287
|
+
.action(async (assetId, opts) => {
|
|
288
|
+
try {
|
|
289
|
+
let data;
|
|
290
|
+
if (opts.apiUrl) {
|
|
291
|
+
data = await createApiClient(opts.apiUrl).assets.get.query({
|
|
292
|
+
id: assetId
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
ensureDb();
|
|
297
|
+
const asset = await Asset.find(localUserId, assetId);
|
|
298
|
+
if (!asset)
|
|
299
|
+
throw new Error(`Asset not found: ${assetId}`);
|
|
300
|
+
data = { ...asset };
|
|
301
|
+
}
|
|
302
|
+
emitOne(opts, data, ASSET_FIELDS, [
|
|
303
|
+
"id",
|
|
304
|
+
"name",
|
|
305
|
+
"content_type",
|
|
306
|
+
"size",
|
|
307
|
+
"created_at"
|
|
308
|
+
]);
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
printCommandError(e, opts.json);
|
|
312
|
+
process.exit(1);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=resource-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-read.js","sourceRoot":"","sources":["../../src/commands/resource-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
export interface RunsCommandDependencies {
|
|
3
|
+
ensureDb: () => Promise<void>;
|
|
4
|
+
localUserId: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function registerRunsCommands(program: Command, deps: RunsCommandDependencies): void;
|
|
7
|
+
//# sourceMappingURL=runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,MAAM,WAAW,uBAAuB;IAAG,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;CAAE;AAqJhG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAkF1F"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
2
|
+
import { TRPCClientError } from "@trpc/client";
|
|
3
|
+
import { listRuns, getRun, getRunTrace, getRunLogs, readRunUpdates } from "@nodetool-ai/execution";
|
|
4
|
+
import { runGetOptionsSchema, runListOptionsSchema, runTraceOptionsSchema, runLogsOptionsSchema, runUpdatesOptionsSchema, TRACE_SPAN_LIMIT, TRACE_EVENT_LIMIT } from "@nodetool-ai/protocol";
|
|
5
|
+
import { createApiClient } from "../api-client.js";
|
|
6
|
+
import { printCommandError } from "../command-errors.js";
|
|
7
|
+
import { asJson, printKv, printTable } from "./output.js";
|
|
8
|
+
const TERMINAL_DRAIN_IDLE_MS = 1_000;
|
|
9
|
+
const TERMINAL_DRAIN_MAX_MS = 5_000;
|
|
10
|
+
async function reader(apiUrl, deps) {
|
|
11
|
+
if (apiUrl) {
|
|
12
|
+
const client = createApiClient(apiUrl);
|
|
13
|
+
return {
|
|
14
|
+
list: (options) => client.runs.list.query(options), get: (id, options) => client.runs.get.query({ id, ...options }),
|
|
15
|
+
trace: (id, options) => client.runs.trace.query({ id, ...options }),
|
|
16
|
+
logs: (id, options) => client.runs.logs.query({ id, ...options }),
|
|
17
|
+
updates: (id, options, signal) => client.runs.updates.query({ id, ...options }, { signal })
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
await deps.ensureDb();
|
|
21
|
+
return {
|
|
22
|
+
list: (options) => listRuns(deps.localUserId, options), get: (id, options) => getRun(deps.localUserId, id, options),
|
|
23
|
+
trace: (id, options) => getRunTrace(deps.localUserId, id, options),
|
|
24
|
+
logs: (id, options) => getRunLogs(deps.localUserId, id, options),
|
|
25
|
+
updates: (id, options) => readRunUpdates(deps.localUserId, id, options)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function integer(value, option, minimum, maximum) {
|
|
29
|
+
const parsed = Number(value);
|
|
30
|
+
if (!/^\d+$/.test(value) || !Number.isSafeInteger(parsed) || parsed < minimum || parsed > maximum) {
|
|
31
|
+
throw new Error(`${option} must be an integer between ${minimum} and ${maximum}`);
|
|
32
|
+
}
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
function attr(attributes, key) { const value = attributes[key]; return value === undefined || value === null || value === "" ? undefined : String(value); }
|
|
36
|
+
function clip(text, max) { const flat = text.replace(/\s+/g, " "); return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat; }
|
|
37
|
+
/** The most identifying attribute of a span: the node for node spans, provider/model for LLM spans. */
|
|
38
|
+
function spanDetail(attributes) {
|
|
39
|
+
const node = attr(attributes, "node.id");
|
|
40
|
+
const type = attr(attributes, "node.type");
|
|
41
|
+
if (node) {
|
|
42
|
+
return clip(type ? `${node} (${type})` : node, 48);
|
|
43
|
+
}
|
|
44
|
+
const provider = attr(attributes, "llm.provider");
|
|
45
|
+
const model = attr(attributes, "llm.model");
|
|
46
|
+
return provider || model ? clip([provider, model].filter(Boolean).join("/"), 48) : "";
|
|
47
|
+
}
|
|
48
|
+
function fail(error, json) { printCommandError(error, json); process.exitCode = 1; }
|
|
49
|
+
function common(command) {
|
|
50
|
+
return command.option("--api-url <url>", "Read a server instead of the local database", process.env["NODETOOL_API_URL"])
|
|
51
|
+
.option("--json", "JSON result; tail emits NDJSON");
|
|
52
|
+
}
|
|
53
|
+
/** Follow coalesced durable snapshots. Event frames are emitted once per stable identity. */
|
|
54
|
+
async function tail(reader, id, options) {
|
|
55
|
+
let cursor = integer(options.cursor, "--cursor", 0, Number.MAX_SAFE_INTEGER);
|
|
56
|
+
const limit = integer(options.limit, "--limit", 1, 500);
|
|
57
|
+
const interval = integer(options.pollInterval, "--poll-interval", 10, 5_000);
|
|
58
|
+
const timeout = options.timeout === undefined ? null : integer(options.timeout, "--timeout", 1, 86_400) * 1_000;
|
|
59
|
+
const controller = new AbortController();
|
|
60
|
+
const interrupt = () => { controller.abort("interrupt"); };
|
|
61
|
+
process.once("SIGINT", interrupt);
|
|
62
|
+
const timer = timeout === null ? null : setTimeout(() => { controller.abort("timeout"); }, timeout);
|
|
63
|
+
const seenSpans = new Map();
|
|
64
|
+
const seenEvents = new Set();
|
|
65
|
+
const emit = (value, text) => {
|
|
66
|
+
if (options.json) {
|
|
67
|
+
console.log(JSON.stringify(value));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log(text);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
let first = true;
|
|
74
|
+
let terminalDrainStarted = null;
|
|
75
|
+
let lastProgressAt = Date.now();
|
|
76
|
+
let dedupLimitReported = false;
|
|
77
|
+
const dedupLimit = () => {
|
|
78
|
+
if (dedupLimitReported) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
dedupLimitReported = true;
|
|
82
|
+
emit({ type: "gap", cursor, reason: "dedup_limit" }, "Deduplication capacity reached. Later replay may repeat records.");
|
|
83
|
+
};
|
|
84
|
+
try {
|
|
85
|
+
while (!controller.signal.aborted) {
|
|
86
|
+
let page;
|
|
87
|
+
try {
|
|
88
|
+
page = await reader.updates(id, runUpdatesOptionsSchema.parse({ cursor, limit, include_content: options.includeContent ?? false }), controller.signal);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (!options.apiUrl || !(error instanceof TRPCClientError) || error.data) {
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
emit({ type: "reconnecting", cursor }, `Connection lost. Retrying from cursor ${cursor}.`);
|
|
95
|
+
await delay(interval, undefined, { signal: controller.signal });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
controller.signal.throwIfAborted();
|
|
99
|
+
if (first || page.records.length > 0) {
|
|
100
|
+
emit({ type: "resnapshot", run_id: page.run.id, after_cursor: cursor, cursor: page.cursor, resnapshot_required: page.resnapshot_required,
|
|
101
|
+
content_state: page.content_state, content_expired: page.content_expired, truncated: page.truncated, incomplete: page.incomplete, limited: page.limited }, `Run ${page.run.id}: latest snapshots after cursor ${cursor} (intermediate updates may be coalesced).`);
|
|
102
|
+
first = false;
|
|
103
|
+
}
|
|
104
|
+
for (const update of page.records) {
|
|
105
|
+
if ((seenSpans.get(update.record.span_id) ?? -1) >= update.cursor) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (seenSpans.has(update.record.span_id) || seenSpans.size < TRACE_SPAN_LIMIT + 1) {
|
|
109
|
+
seenSpans.set(update.record.span_id, update.cursor);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
dedupLimit();
|
|
113
|
+
}
|
|
114
|
+
emit({ type: "span", ...update }, `${update.cursor} ${update.record.name} ${update.record.span_id} ${update.record.status.code}`);
|
|
115
|
+
for (const [index, event] of update.record.events.entries()) {
|
|
116
|
+
const eventId = event.id ?? `${update.record.span_id}:${index}`;
|
|
117
|
+
const key = `${update.record.span_id}:${eventId}`;
|
|
118
|
+
if (seenEvents.has(key)) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (seenEvents.size < TRACE_EVENT_LIMIT) {
|
|
122
|
+
seenEvents.add(key);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
dedupLimit();
|
|
126
|
+
}
|
|
127
|
+
emit({ type: "event", run_id: update.run_id, span_id: update.record.span_id, cursor: update.cursor, event: { ...event, id: eventId } }, `${event.time_ms} ${event.name} ${JSON.stringify(event.attributes ?? {})}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (page.cursor > cursor) {
|
|
131
|
+
lastProgressAt = Date.now();
|
|
132
|
+
}
|
|
133
|
+
cursor = Math.max(cursor, page.cursor);
|
|
134
|
+
if (page.has_more) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (page.run.status !== "running") {
|
|
138
|
+
const now = Date.now();
|
|
139
|
+
if (terminalDrainStarted === null) {
|
|
140
|
+
terminalDrainStarted = now;
|
|
141
|
+
lastProgressAt = now;
|
|
142
|
+
}
|
|
143
|
+
if (page.trace_settled || now - lastProgressAt >= TERMINAL_DRAIN_IDLE_MS || now - terminalDrainStarted >= TERMINAL_DRAIN_MAX_MS) {
|
|
144
|
+
if (!page.trace_settled) {
|
|
145
|
+
emit({ type: "gap", cursor, reason: "terminal_trace_incomplete" }, "Run ended before all final span snapshots were stored. Resume from this cursor to check later.");
|
|
146
|
+
}
|
|
147
|
+
emit({ type: "terminal", run: page.run, cursor, trace_settled: page.trace_settled }, `Run ${page.run.id} ${page.run.status}. Cursor ${cursor}.`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
await delay(interval, undefined, { signal: controller.signal });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (!controller.signal.aborted) {
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
process.removeListener("SIGINT", interrupt);
|
|
161
|
+
if (timer !== null) {
|
|
162
|
+
clearTimeout(timer);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (controller.signal.reason === "interrupt") {
|
|
166
|
+
emit({ type: "interrupted", cursor }, `Stopped following at cursor ${cursor}.`);
|
|
167
|
+
process.exitCode = 130;
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
throw new Error(`Timed out following run ${id} at cursor ${cursor}`);
|
|
171
|
+
}
|
|
172
|
+
export function registerRunsCommands(program, deps) {
|
|
173
|
+
const runs = program.command("runs").description("Inspect durable app runs, workflow jobs and chat turns");
|
|
174
|
+
common(runs.command("list").description("List owned runs, newest first")
|
|
175
|
+
.option("--kind <kind>", "app, workflow or chat").option("--app-id <id>", "App filter")
|
|
176
|
+
.option("--instance-id <id>", "Instance filter").option("--workflow-id <id>", "Workflow filter")
|
|
177
|
+
.option("--thread-id <id>", "Chat thread filter").option("--status <status>", "running, completed, failed or cancelled")
|
|
178
|
+
.option("--origin <origin>", "ui, agent, cli, debug or public").option("--since <iso>", "Inclusive start time")
|
|
179
|
+
.option("--until <iso>", "Exclusive end time").option("--limit <n>", "Results, 1–100", "20")
|
|
180
|
+
.option("--cursor <cursor>", "Opaque next_cursor from the previous page"))
|
|
181
|
+
.action(async (options) => {
|
|
182
|
+
try {
|
|
183
|
+
const query = runListOptionsSchema.parse({ kind: options.kind, app_id: options.appId, instance_id: options.instanceId,
|
|
184
|
+
workflow_id: options.workflowId, thread_id: options.threadId, status: options.status, origin: options.origin,
|
|
185
|
+
since: options.since, until: options.until, limit: integer(options.limit, "--limit", 1, 100), cursor: options.cursor });
|
|
186
|
+
const result = await (await reader(options.apiUrl, deps)).list(query);
|
|
187
|
+
if (options.json) {
|
|
188
|
+
asJson(result);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
printTable(result.runs, ["id", "kind", "status", "origin", "started_at", "cost_usd"]);
|
|
192
|
+
if (result.next_cursor) {
|
|
193
|
+
console.log(`next_cursor: ${result.next_cursor}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
fail(error, options.json);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
common(runs.command("show <id>").description("Read the run and bounded diagnostic summary")
|
|
202
|
+
.option("--include-content", "Read capped app run inputs and outputs"))
|
|
203
|
+
.action(async (id, options) => {
|
|
204
|
+
try {
|
|
205
|
+
const query = runGetOptionsSchema.parse({ include_content: options.includeContent ?? false });
|
|
206
|
+
const result = await (await reader(options.apiUrl, deps)).get(id, query);
|
|
207
|
+
if (options.json) {
|
|
208
|
+
asJson(result);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
printKv({ id: result.run.id, kind: result.run.kind, status: result.run.status, error: result.run.error,
|
|
212
|
+
cost_usd: result.run.cost_usd, first_failed_span_id: result.summary.first_failed_span_id,
|
|
213
|
+
content_state: result.summary.content_state, truncated: result.summary.truncated, incomplete: result.summary.incomplete });
|
|
214
|
+
if (result.summary.failure_path.length > 0) {
|
|
215
|
+
printTable(result.summary.failure_path, ["span_id", "name", "status", "duration_ms", "error"]);
|
|
216
|
+
}
|
|
217
|
+
if (options.includeContent && result.run.app) {
|
|
218
|
+
asJson(result.run.app);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
fail(error, options.json);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
common(runs.command("trace <id>").description("Read the span tree")
|
|
226
|
+
.option("--depth <n>", "Tree depth, 0–64", "4").option("--focus <span-id>", "Focus a full 16-character span ID")
|
|
227
|
+
.option("--name <name>", "Span name filter").option("--errors-only", "Only failed spans and their ancestors")
|
|
228
|
+
.option("--limit <n>", "Spans, 1–500", "100").option("--include-content", "Read capped content on the focused span"))
|
|
229
|
+
.action(async (id, options) => {
|
|
230
|
+
try {
|
|
231
|
+
const query = runTraceOptionsSchema.parse({ depth: integer(options.depth, "--depth", 0, 64), focus_span_id: options.focus,
|
|
232
|
+
name: options.name, errors_only: options.errorsOnly ?? false, limit: integer(options.limit, "--limit", 1, 500), include_content: options.includeContent ?? false });
|
|
233
|
+
const result = await (await reader(options.apiUrl, deps)).trace(id, query);
|
|
234
|
+
if (options.json) {
|
|
235
|
+
asJson(result);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
printTable(result.nodes.map(({ record, depth }) => ({ span_id: record.span_id, name: `${" ".repeat(depth)}${record.name}`, status: record.status.code, duration_ms: record.duration_ms, detail: spanDetail(record.attributes) })));
|
|
239
|
+
printKv({ content_state: result.content_state, truncated: result.truncated, incomplete: result.incomplete, limited: result.limited });
|
|
240
|
+
if (options.includeContent) {
|
|
241
|
+
asJson(result.nodes.map(({ record }) => record));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
fail(error, options.json);
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
common(runs.command("logs <id>").description("Read stored span events, oldest first")
|
|
250
|
+
.option("--level <level>", "Log level filter").option("--source <source>", "Source filter").option("--span <span-id>", "Full span ID filter")
|
|
251
|
+
.option("--since-ms <time>", "Inclusive event timestamp in milliseconds").option("--until-ms <time>", "Exclusive event timestamp in milliseconds")
|
|
252
|
+
.option("--limit <n>", "Events, 1–500", "100").option("--cursor <cursor>", "Opaque next_cursor from previous page")
|
|
253
|
+
.option("--include-content", "Read capped event content"))
|
|
254
|
+
.action(async (id, options) => {
|
|
255
|
+
try {
|
|
256
|
+
const query = runLogsOptionsSchema.parse({ level: options.level, source: options.source, span_id: options.span,
|
|
257
|
+
since_ms: options.sinceMs === undefined ? undefined : Number(options.sinceMs), until_ms: options.untilMs === undefined ? undefined : Number(options.untilMs),
|
|
258
|
+
limit: integer(options.limit, "--limit", 1, 500), cursor: options.cursor, include_content: options.includeContent ?? false });
|
|
259
|
+
const result = await (await reader(options.apiUrl, deps)).logs(id, query);
|
|
260
|
+
if (options.json) {
|
|
261
|
+
asJson(result);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
if (options.includeContent) {
|
|
265
|
+
printTable(result.logs.map((event) => ({ ...event, message: clip(attr(event.attributes, "log.message") ?? "", 80), arguments: clip(attr(event.attributes, "log.arguments") ?? "", 40) })), ["time_ms", "level", "source", "span_id", "message", "arguments"]);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
printTable(result.logs, ["time_ms", "level", "source", "span_id", "name"]);
|
|
269
|
+
if (result.logs.length > 0) {
|
|
270
|
+
console.log("Messages are excluded. Pass --include-content to read them.");
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
printKv({ content_state: result.content_state, truncated: result.truncated, incomplete: result.incomplete, limited: result.limited });
|
|
274
|
+
if (result.next_cursor) {
|
|
275
|
+
console.log(`next_cursor: ${result.next_cursor}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
fail(error, options.json);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
common(runs.command("tail <id>").description("Follow durable span snapshots and events until the run ends")
|
|
284
|
+
.option("--cursor <n>", "Resume after a durable cursor", "0").option("--limit <n>", "Snapshots per page, 1–500", "100")
|
|
285
|
+
.option("--poll-interval <ms>", "Polling interval, 10–5000 ms", "250").option("--timeout <seconds>", "Stop waiting after 1–86400 seconds")
|
|
286
|
+
.option("--include-content", "Read capped owner content"))
|
|
287
|
+
.action(async (id, options) => {
|
|
288
|
+
try {
|
|
289
|
+
await tail(await reader(options.apiUrl, deps), id, options);
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
if (options.json) {
|
|
293
|
+
console.log(JSON.stringify({ type: "error", error: error instanceof Error ? error.message : String(error) }));
|
|
294
|
+
process.exitCode = 1;
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
fail(error);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=runs.js.map
|