@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,89 @@
|
|
|
1
|
+
import { printCommandError } from "../command-errors.js";
|
|
2
|
+
import { runTimelineRender } from "./timeline-render.js";
|
|
3
|
+
/** Evenly spaced frames a `--sheet` render samples by default. */
|
|
4
|
+
const SHEET_FRAME_COUNT = 12;
|
|
5
|
+
export function evenlySpacedFrames(totalFrames, count) {
|
|
6
|
+
if (totalFrames <= 1)
|
|
7
|
+
return [0];
|
|
8
|
+
const n = Math.min(count, totalFrames);
|
|
9
|
+
const frames = new Set();
|
|
10
|
+
for (let i = 0; i < n; i += 1) {
|
|
11
|
+
frames.add(Math.round((i * (totalFrames - 1)) / Math.max(1, n - 1)));
|
|
12
|
+
}
|
|
13
|
+
return [...frames].sort((a, b) => a - b);
|
|
14
|
+
}
|
|
15
|
+
export function registerTimelineScoreCommand(timeline, loadSequence) {
|
|
16
|
+
timeline
|
|
17
|
+
.command("score <timeline_id_or_file>")
|
|
18
|
+
.description("Score a timeline document's craft against the shipped showcase examples (kite, prism, serein, tidewater, voltra) — a deterministic, no-LLM scorecard. Takes a timeline JSON file or a timeline_sequences row id")
|
|
19
|
+
.option("--json", "Print the full TimelineCraftScoreResult as JSON")
|
|
20
|
+
.option("--min-score <n>", "Exit non-zero when the score is below this threshold")
|
|
21
|
+
.option("--sheet <out.png>", `Also render a GPU contact sheet of ${SHEET_FRAME_COUNT} evenly spaced frames through the same renderer 'timeline render --sheet' uses`)
|
|
22
|
+
.action(async (ref, opts) => {
|
|
23
|
+
try {
|
|
24
|
+
const { resolveTimelineTarget } = await import("../timeline-debug/target.js");
|
|
25
|
+
const { scoreTimelineCraft } = await import("@nodetool-ai/execution/timeline-debug");
|
|
26
|
+
const sequenceLoader = await loadSequence();
|
|
27
|
+
const resolved = await resolveTimelineTarget(ref, {
|
|
28
|
+
loadSequence: sequenceLoader
|
|
29
|
+
});
|
|
30
|
+
const result = await scoreTimelineCraft(resolved.raw, {
|
|
31
|
+
fps: resolved.meta.fps,
|
|
32
|
+
width: resolved.meta.width,
|
|
33
|
+
height: resolved.meta.height
|
|
34
|
+
});
|
|
35
|
+
if (opts.sheet) {
|
|
36
|
+
const fps = resolved.meta.fps && resolved.meta.fps > 0
|
|
37
|
+
? resolved.meta.fps
|
|
38
|
+
: 30;
|
|
39
|
+
const durationMs = resolved.meta.durationMs && resolved.meta.durationMs > 0
|
|
40
|
+
? resolved.meta.durationMs
|
|
41
|
+
: resolved.document.clips.reduce((end, clip) => Math.max(end, clip.startMs + clip.durationMs), 0);
|
|
42
|
+
const totalFrames = Math.max(1, Math.round((durationMs / 1000) * fps));
|
|
43
|
+
const frames = evenlySpacedFrames(totalFrames, SHEET_FRAME_COUNT);
|
|
44
|
+
await runTimelineRender(ref, { out: opts.sheet, sheet: true, frames: frames.join(",") }, sequenceLoader);
|
|
45
|
+
}
|
|
46
|
+
if (opts.json) {
|
|
47
|
+
console.log(JSON.stringify(result, null, 2));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(renderTimelineScore(result).join("\n"));
|
|
51
|
+
}
|
|
52
|
+
const failed = opts.minScore !== undefined && result.score < Number(opts.minScore);
|
|
53
|
+
process.exit(failed ? 1 : 0);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
printCommandError(e, opts.json);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/** Human-readable rendering of a `TimelineCraftScoreResult`. */
|
|
62
|
+
export function renderTimelineScore(result) {
|
|
63
|
+
const lines = [];
|
|
64
|
+
const distinctCodes = Object.keys(result.showcaseWarningCodeCounts).length;
|
|
65
|
+
lines.push(`Craft score: ${result.score.toFixed(1)}/100 (raw ${result.rawScore.toFixed(1)}, -${result.penalty} for ${distinctCodes} distinct showcase warning code(s))`);
|
|
66
|
+
lines.push(`Reference band: ${result.reference.entries.map((e) => e.slug).join(", ") || "(none found)"}`);
|
|
67
|
+
lines.push("");
|
|
68
|
+
lines.push("Metric value median credit");
|
|
69
|
+
for (const metric of result.metricScores) {
|
|
70
|
+
lines.push(`${metric.metric.padEnd(30)} ${metric.value.toFixed(2).padStart(8)} ${metric.referenceMedian.toFixed(2).padStart(8)} ${metric.credit.toFixed(2).padStart(8)}`);
|
|
71
|
+
}
|
|
72
|
+
if (result.showcaseWarnings.length > 0) {
|
|
73
|
+
lines.push("");
|
|
74
|
+
lines.push("Showcase warnings (penalized once per code, all instances shown):");
|
|
75
|
+
for (const [code, count] of Object.entries(result.showcaseWarningCodeCounts)) {
|
|
76
|
+
lines.push(` - ${code} ×${count}`);
|
|
77
|
+
}
|
|
78
|
+
lines.push("");
|
|
79
|
+
for (const warning of result.showcaseWarnings) {
|
|
80
|
+
lines.push(` - [${warning.code}] ${warning.message}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (!result.validation.ok) {
|
|
84
|
+
lines.push("");
|
|
85
|
+
lines.push(`Document has ${result.validation.errors.length} validation error(s) — run 'timeline validate' for details.`);
|
|
86
|
+
}
|
|
87
|
+
return lines;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=timeline-score.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-score.js","sourceRoot":"","sources":["../../src/commands/timeline-score.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable rendering of a `TimelineValidation`, shared by
|
|
3
|
+
* `timeline validate` and `timeline versions restore`.
|
|
4
|
+
*/
|
|
5
|
+
import type { TimelineValidation } from "@nodetool-ai/execution/timeline-debug";
|
|
6
|
+
export declare function renderTimelineValidation(validation: TimelineValidation): string[];
|
|
7
|
+
//# sourceMappingURL=timeline-validation-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-validation-output.d.ts","sourceRoot":"","sources":["../../src/commands/timeline-validation-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,uCAAuC,CAAC;AAG/C,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,kBAAkB,GAC7B,MAAM,EAAE,CAQV"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { issueLocation, renderValidation } from "./validation-output.js";
|
|
2
|
+
export function renderTimelineValidation(validation) {
|
|
3
|
+
return renderValidation(validation, (issue) => issue.clipId != null
|
|
4
|
+
? ` [clip ${issue.clipId}]`
|
|
5
|
+
: issue.trackId != null
|
|
6
|
+
? ` [track ${issue.trackId}]`
|
|
7
|
+
: issueLocation(issue));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=timeline-validation-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-validation-output.js","sourceRoot":"","sources":["../../src/commands/timeline-validation-output.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,MAAM,UAAU,wBAAwB,CACtC,UAA8B;IAE9B,OAAO,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAyB,EAAE,EAAE,CAChE,KAAK,CAAC,MAAM,IAAI,IAAI;QAClB,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG;QAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI;YACrB,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,GAAG;YAC7B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool timeline versions` — the version-history half of the timeline
|
|
3
|
+
* harness. The commands themselves live in `version-commands.ts`; this file is
|
|
4
|
+
* the timeline's row shapes, database seam, columns and messages.
|
|
5
|
+
*
|
|
6
|
+
* Timeline sequences keep immutable snapshots: manual saves, autosaves the
|
|
7
|
+
* server writes at most every five minutes, and the pre-restore snapshot that
|
|
8
|
+
* makes a restore undoable. The history is read and written directly against
|
|
9
|
+
* the local database, the way `timeline validate` and `timeline debug` read a
|
|
10
|
+
* sequence row, so an agent can work without a server.
|
|
11
|
+
*/
|
|
12
|
+
import type { Command } from "commander";
|
|
13
|
+
import type { TimelineValidation } from "@nodetool-ai/execution/timeline-debug";
|
|
14
|
+
import { type JsonValue, type VersionCommandDeps, type VersionStore } from "./version-commands.js";
|
|
15
|
+
export { parseVersionDocument, parseVersionNumber } from "./version-commands.js";
|
|
16
|
+
/** A `timeline_sequences` row as these commands need it. */
|
|
17
|
+
export interface TimelineSequenceRow {
|
|
18
|
+
id: string;
|
|
19
|
+
user_id: string;
|
|
20
|
+
name?: string | null;
|
|
21
|
+
fps: number;
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
duration_ms: number;
|
|
25
|
+
updated_at: string;
|
|
26
|
+
document: string;
|
|
27
|
+
}
|
|
28
|
+
/** A `timeline_sequence_versions` row. */
|
|
29
|
+
export interface TimelineVersionRow {
|
|
30
|
+
id: string;
|
|
31
|
+
timeline_id: string;
|
|
32
|
+
version: number;
|
|
33
|
+
name: string | null;
|
|
34
|
+
save_type: string;
|
|
35
|
+
fps: number;
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
duration_ms: number;
|
|
39
|
+
created_at: string;
|
|
40
|
+
document: string;
|
|
41
|
+
}
|
|
42
|
+
export type TimelineVersionStore = VersionStore<TimelineSequenceRow, TimelineVersionRow>;
|
|
43
|
+
/** The list-item shape, matching the tRPC router's `timelineVersionListItem`. */
|
|
44
|
+
export interface TimelineVersionListItem {
|
|
45
|
+
id: string;
|
|
46
|
+
timelineId: string;
|
|
47
|
+
version: number;
|
|
48
|
+
name: string | null;
|
|
49
|
+
saveType: string;
|
|
50
|
+
fps: number;
|
|
51
|
+
width: number;
|
|
52
|
+
height: number;
|
|
53
|
+
durationMs: number;
|
|
54
|
+
createdAt: string;
|
|
55
|
+
}
|
|
56
|
+
export declare function toVersionListItem(row: TimelineVersionRow): TimelineVersionListItem;
|
|
57
|
+
/** One table row per version: what it is, when it was taken, what it renders. */
|
|
58
|
+
export declare function versionTableRows(items: TimelineVersionListItem[]): Record<string, unknown>[];
|
|
59
|
+
/** Track / clip / marker counts of whatever a version stored. */
|
|
60
|
+
export declare function documentCounts(document: JsonValue | undefined): {
|
|
61
|
+
tracks: number;
|
|
62
|
+
clips: number;
|
|
63
|
+
markers: number;
|
|
64
|
+
};
|
|
65
|
+
interface TimelineValidateMeta {
|
|
66
|
+
fps?: number;
|
|
67
|
+
width?: number;
|
|
68
|
+
height?: number;
|
|
69
|
+
}
|
|
70
|
+
export type TimelineVersionsDeps = VersionCommandDeps<TimelineSequenceRow, TimelineVersionRow, TimelineValidation, TimelineValidateMeta>;
|
|
71
|
+
export declare function registerTimelineVersionsCommands(timeline: Command, deps?: TimelineVersionsDeps): void;
|
|
72
|
+
//# sourceMappingURL=timeline-versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-versions.d.ts","sourceRoot":"","sources":["../../src/commands/timeline-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAC7C,mBAAmB,EACnB,kBAAkB,CACnB,CAAC;AAEF,iFAAiF;AACjF,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,kBAAkB,GACtB,uBAAuB,CAazB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,uBAAuB,EAAE,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAE3B;AAaD,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS;IAG1D,MAAM;IACN,KAAK;IACL,OAAO;EAEV;AAkCD,UAAU,oBAAoB;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0DD,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CACnD,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,CACrB,CAAC;AAEF,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,OAAO,EACjB,IAAI,GAAE,oBAAyB,GAC9B,IAAI,CAKN"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { renderTimelineValidation } from "./timeline-validation-output.js";
|
|
2
|
+
import { countArray, registerVersionCommands } from "./version-commands.js";
|
|
3
|
+
export { parseVersionDocument, parseVersionNumber } from "./version-commands.js";
|
|
4
|
+
export function toVersionListItem(row) {
|
|
5
|
+
return {
|
|
6
|
+
id: row.id,
|
|
7
|
+
timelineId: row.timeline_id,
|
|
8
|
+
version: row.version,
|
|
9
|
+
name: row.name ?? null,
|
|
10
|
+
saveType: row.save_type,
|
|
11
|
+
fps: row.fps,
|
|
12
|
+
width: row.width,
|
|
13
|
+
height: row.height,
|
|
14
|
+
durationMs: row.duration_ms,
|
|
15
|
+
createdAt: row.created_at
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** One table row per version: what it is, when it was taken, what it renders. */
|
|
19
|
+
export function versionTableRows(items) {
|
|
20
|
+
return items.map(tableRow);
|
|
21
|
+
}
|
|
22
|
+
function tableRow(v) {
|
|
23
|
+
return {
|
|
24
|
+
version: v.version,
|
|
25
|
+
saveType: v.saveType,
|
|
26
|
+
name: v.name ?? "",
|
|
27
|
+
createdAt: v.createdAt,
|
|
28
|
+
fps: v.fps,
|
|
29
|
+
resolution: `${v.width}x${v.height}`
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Track / clip / marker counts of whatever a version stored. */
|
|
33
|
+
export function documentCounts(document) {
|
|
34
|
+
const doc = (document ?? {});
|
|
35
|
+
return {
|
|
36
|
+
tracks: countArray(doc.tracks),
|
|
37
|
+
clips: countArray(doc.clips),
|
|
38
|
+
markers: countArray(doc.markers)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async function defaultStore() {
|
|
42
|
+
const { initDb, TimelineSequence, TimelineSequenceVersion } = await import("@nodetool-ai/models");
|
|
43
|
+
const { getDefaultDbPath } = await import("@nodetool-ai/config");
|
|
44
|
+
initDb(getDefaultDbPath());
|
|
45
|
+
return {
|
|
46
|
+
load: async (id) => await TimelineSequence.findById(id),
|
|
47
|
+
listVersions: async (timelineId, opts) => await TimelineSequenceVersion.listForTimeline(timelineId, opts),
|
|
48
|
+
findVersion: async (timelineId, version) => await TimelineSequenceVersion.findByVersion(timelineId, version),
|
|
49
|
+
snapshot: async (seq, opts) => await TimelineSequenceVersion.snapshot(seq, opts),
|
|
50
|
+
restore: async (seq, version) => await TimelineSequence.updateFieldsIfUnchanged(seq.id, seq.updated_at, {
|
|
51
|
+
document: version.document,
|
|
52
|
+
fps: version.fps,
|
|
53
|
+
width: version.width,
|
|
54
|
+
height: version.height,
|
|
55
|
+
duration_ms: version.duration_ms
|
|
56
|
+
}),
|
|
57
|
+
deleteVersion: async (timelineId, version) => {
|
|
58
|
+
const row = await TimelineSequenceVersion.findByVersion(timelineId, version);
|
|
59
|
+
if (row)
|
|
60
|
+
await row.delete();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function defaultValidate(raw, meta) {
|
|
65
|
+
const { validateTimelineSequence } = await import("@nodetool-ai/execution/timeline-debug");
|
|
66
|
+
return await validateTimelineSequence(raw, meta);
|
|
67
|
+
}
|
|
68
|
+
const spec = {
|
|
69
|
+
idArg: "timeline_id",
|
|
70
|
+
idKey: "timelineId",
|
|
71
|
+
descriptions: {
|
|
72
|
+
group: "Inspect and restore the snapshot history of a timeline sequence (manual saves, autosaves, pre-restore snapshots)",
|
|
73
|
+
list: "List a timeline's versions, newest first",
|
|
74
|
+
show: "Print one version's metadata and the document it stored",
|
|
75
|
+
create: "Snapshot the sequence as it stands now (a manual save)",
|
|
76
|
+
restore: "Restore a version onto the sequence. The pre-restore state is snapshotted first, and the restored document is validated against the current schema — a restore whose document no longer validates exits non-zero",
|
|
77
|
+
delete: "Delete one version from a timeline's history",
|
|
78
|
+
restoreJson: "Print the restore result and validation as JSON"
|
|
79
|
+
},
|
|
80
|
+
notFoundDocument: (id) => `Timeline sequence not found: ${id}`,
|
|
81
|
+
notFoundVersion: (id, version) => `Timeline version not found: ${id} v${version}`,
|
|
82
|
+
conflict: "Timeline has been modified since last load",
|
|
83
|
+
confirmDelete: (id, version) => `Delete v${version} of timeline ${id}?`,
|
|
84
|
+
deleted: (id, version) => `✅ Deleted v${version} of timeline ${id}`,
|
|
85
|
+
toItem: toVersionListItem,
|
|
86
|
+
tableRow,
|
|
87
|
+
counts: documentCounts,
|
|
88
|
+
showSummary: (counts, item) => `\n ${counts.tracks} track(s), ${counts.clips} clip(s), ${counts.markers} marker(s), ${item.durationMs}ms`,
|
|
89
|
+
restoreSummary: (id, version, counts, row) => `✅ Restored v${version} onto ${id}: ${counts.tracks} track(s), ${counts.clips} clip(s), ${row.duration_ms}ms @ ${row.fps}fps ${row.width}x${row.height}`,
|
|
90
|
+
restoreJsonExtra: (seq) => ({
|
|
91
|
+
sequence: {
|
|
92
|
+
id: seq.id,
|
|
93
|
+
fps: seq.fps,
|
|
94
|
+
width: seq.width,
|
|
95
|
+
height: seq.height,
|
|
96
|
+
durationMs: seq.duration_ms
|
|
97
|
+
}
|
|
98
|
+
}),
|
|
99
|
+
validateMeta: (row) => ({ fps: row.fps, width: row.width, height: row.height }),
|
|
100
|
+
renderValidation: renderTimelineValidation
|
|
101
|
+
};
|
|
102
|
+
export function registerTimelineVersionsCommands(timeline, deps = {}) {
|
|
103
|
+
registerVersionCommands(timeline, spec, deps, {
|
|
104
|
+
store: defaultStore,
|
|
105
|
+
validate: defaultValidate
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=timeline-versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-versions.js","sourceRoot":"","sources":["../../src/commands/timeline-versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool timeline validate`, `debug`, `render` and `versions` — the
|
|
3
|
+
* timeline harness commands.
|
|
4
|
+
*
|
|
5
|
+
* `validate` checks a timeline document statically: tracks a clip points at,
|
|
6
|
+
* fields a round trip through the schema would strip, timings that cannot
|
|
7
|
+
* render. `debug` additionally replays a scripted `--interact` edit session
|
|
8
|
+
* against the headless `ui_timeline_*` bridge and writes a bundle. Both take a
|
|
9
|
+
* timeline JSON file or a `timeline_sequences` row id. `render`
|
|
10
|
+
* (timeline-render.ts) renders the picture through the GPU compositor.
|
|
11
|
+
* `versions` (timeline-versions.ts) reads and restores a sequence's snapshot
|
|
12
|
+
* history.
|
|
13
|
+
*
|
|
14
|
+
* Heavy dependencies (the database, the validator core, the bridge) are
|
|
15
|
+
* imported lazily inside each action, so command registration stays light and
|
|
16
|
+
* unit-testable.
|
|
17
|
+
*/
|
|
18
|
+
import type { Command } from "commander";
|
|
19
|
+
import { renderTimelineValidation } from "./timeline-validation-output.js";
|
|
20
|
+
export { renderTimelineValidation };
|
|
21
|
+
export declare function registerTimelineCommands(program: Command): void;
|
|
22
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/commands/timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAK3E,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAuCpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgG/D"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { printCommandError } from "../command-errors.js";
|
|
2
|
+
import { printDebugSummary } from "./debug-summary-output.js";
|
|
3
|
+
import { renderTimelineValidation } from "./timeline-validation-output.js";
|
|
4
|
+
import { registerTimelineRenderCommand } from "./timeline-render.js";
|
|
5
|
+
import { registerTimelineScoreCommand } from "./timeline-score.js";
|
|
6
|
+
import { registerTimelineVersionsCommands } from "./timeline-versions.js";
|
|
7
|
+
export { renderTimelineValidation };
|
|
8
|
+
/** Read a sequence row through the local database. */
|
|
9
|
+
async function sequenceLoader() {
|
|
10
|
+
const { initDb, TimelineSequence } = await import("@nodetool-ai/models");
|
|
11
|
+
const { getDefaultDbPath } = await import("@nodetool-ai/config");
|
|
12
|
+
let ready = false;
|
|
13
|
+
return async (id) => {
|
|
14
|
+
if (!ready) {
|
|
15
|
+
initDb(getDefaultDbPath());
|
|
16
|
+
ready = true;
|
|
17
|
+
}
|
|
18
|
+
const row = await TimelineSequence.findById(id);
|
|
19
|
+
return row
|
|
20
|
+
? {
|
|
21
|
+
id: row.id,
|
|
22
|
+
name: row.name,
|
|
23
|
+
fps: row.fps,
|
|
24
|
+
width: row.width,
|
|
25
|
+
height: row.height,
|
|
26
|
+
document: row.document
|
|
27
|
+
}
|
|
28
|
+
: null;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function registerTimelineCommands(program) {
|
|
32
|
+
const timeline = program
|
|
33
|
+
.command("timeline")
|
|
34
|
+
.description("Work with timeline sequences");
|
|
35
|
+
timeline
|
|
36
|
+
.command("validate <timeline_id_or_file>")
|
|
37
|
+
.description("Validate a timeline document without rendering it: clips on missing tracks, fields a schema round trip would strip, unrenderable timings. Takes a timeline JSON file or a timeline_sequences row id")
|
|
38
|
+
.option("--json", "Print the full TimelineValidation as JSON")
|
|
39
|
+
.option("--warnings-as-errors", "Exit non-zero when there are warnings (not just errors)")
|
|
40
|
+
.action(async (ref, opts) => {
|
|
41
|
+
try {
|
|
42
|
+
const { runTimelineValidate } = await import("../timeline-debug/index.js");
|
|
43
|
+
const { target, validation } = await runTimelineValidate(ref, {
|
|
44
|
+
loadSequence: await sequenceLoader()
|
|
45
|
+
});
|
|
46
|
+
if (opts.json) {
|
|
47
|
+
console.log(JSON.stringify({ target, validation }, null, 2));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(renderTimelineValidation(validation).join("\n"));
|
|
51
|
+
}
|
|
52
|
+
const failed = !validation.ok ||
|
|
53
|
+
(opts.warningsAsErrors === true && validation.warnings.length > 0);
|
|
54
|
+
process.exit(failed ? 1 : 0);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
printCommandError(e, opts.json);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
timeline
|
|
62
|
+
.command("debug <timeline_id_or_file>")
|
|
63
|
+
.description("Replay a scripted edit session against a timeline headlessly and collect a debug bundle (the document, the report, every step's result)")
|
|
64
|
+
.option("--interact <json>", 'Scripted steps: [{"tool":"add_track","input":{"type":"audio"}}] — the ui_timeline_ prefix is optional')
|
|
65
|
+
.option("--out <dir>", "Bundle output directory (default: nodetool-debug/timeline-<id>-<timestamp>)")
|
|
66
|
+
.option("--json", "Print the full TimelineDebugReport as JSON to stdout")
|
|
67
|
+
.action(async (ref, opts) => {
|
|
68
|
+
try {
|
|
69
|
+
const { parseInteractionScript, runTimelineDebug } = await import("../timeline-debug/index.js");
|
|
70
|
+
const interact = opts.interact
|
|
71
|
+
? parseInteractionScript(opts.interact)
|
|
72
|
+
: undefined;
|
|
73
|
+
const debugOptions = {};
|
|
74
|
+
if (interact) {
|
|
75
|
+
debugOptions.interact = interact;
|
|
76
|
+
}
|
|
77
|
+
if (opts.out) {
|
|
78
|
+
debugOptions.outDir = opts.out;
|
|
79
|
+
}
|
|
80
|
+
const { report, bundleDir } = await runTimelineDebug(ref, debugOptions, {
|
|
81
|
+
loadSequence: await sequenceLoader(),
|
|
82
|
+
onLog: (line) => console.error(line)
|
|
83
|
+
});
|
|
84
|
+
if (opts.json) {
|
|
85
|
+
console.log(JSON.stringify(report, null, 2));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
printDebugSummary(report, bundleDir, {
|
|
89
|
+
label: "timeline",
|
|
90
|
+
meta: `${report.meta.trackCount} track(s), ${report.meta.clipCount} clip(s), ${report.meta.durationMs}ms @ ${report.meta.fps}fps`,
|
|
91
|
+
file: "timeline.json"
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
process.exit(report.verdict.ok ? 0 : 1);
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
printCommandError(e, opts.json);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
registerTimelineRenderCommand(timeline, sequenceLoader);
|
|
102
|
+
registerTimelineScoreCommand(timeline, sequenceLoader);
|
|
103
|
+
registerTimelineVersionsCommands(timeline);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/commands/timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool validate` — static workflow validator.
|
|
3
|
+
*
|
|
4
|
+
* Loads a workflow (DB id, JSON file, or DSL .ts file) and checks it against
|
|
5
|
+
* the node registry without running it: unknown node types, missing required
|
|
6
|
+
* properties, unselected models, dangling/mis-typed edges. Returns in well
|
|
7
|
+
* under a second, so it's the fast pre-flight before an expensive `debug` run.
|
|
8
|
+
* Heavy deps are imported lazily so command registration stays light.
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from "commander";
|
|
11
|
+
import { type GraphValidationReport } from "@nodetool-ai/node-sdk";
|
|
12
|
+
type SecretLookup = (key: string) => Promise<string | null | undefined> | string | null | undefined;
|
|
13
|
+
/** Resolve declared node settings exactly as BaseNode secret injection does. */
|
|
14
|
+
export declare function collectAvailableSecrets(keys: readonly string[], getSecret: SecretLookup): Promise<Set<string>>;
|
|
15
|
+
export declare function registerValidateCommand(program: Command): void;
|
|
16
|
+
/**
|
|
17
|
+
* Human-readable report: headline, one line per issue, then a legend for the
|
|
18
|
+
* codes that occurred. Pure so it can be asserted on directly.
|
|
19
|
+
*/
|
|
20
|
+
export declare function renderValidation(report: GraphValidationReport): string[];
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAQ/B,KAAK,YAAY,GAAG,CAClB,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEpE,gFAAgF;AAChF,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAOtB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0D9D;AAuCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAqBxE"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { validationHeadline } from "@nodetool-ai/node-sdk";
|
|
2
|
+
import { printCommandError } from "../command-errors.js";
|
|
3
|
+
/** Resolve declared node settings exactly as BaseNode secret injection does. */
|
|
4
|
+
export async function collectAvailableSecrets(keys, getSecret) {
|
|
5
|
+
const found = new Set();
|
|
6
|
+
for (const key of keys) {
|
|
7
|
+
const value = await getSecret(key);
|
|
8
|
+
if (value)
|
|
9
|
+
found.add(key);
|
|
10
|
+
}
|
|
11
|
+
return found;
|
|
12
|
+
}
|
|
13
|
+
export function registerValidateCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command("validate <workflow_id_or_file>")
|
|
16
|
+
.description("Validate a workflow against the node registry without running it (unknown nodes, missing props, bad edges)")
|
|
17
|
+
.option("--json", "Print the full validation report as JSON")
|
|
18
|
+
.option("--warnings-as-errors", "Exit non-zero when there are warnings (not just errors)")
|
|
19
|
+
.action(async (ref, opts) => {
|
|
20
|
+
try {
|
|
21
|
+
const { runValidate } = await import("../validate/index.js");
|
|
22
|
+
// Only a DB-id target needs the database; file/DSL targets validate
|
|
23
|
+
// with no DB at all, so initialize it lazily on first lookup.
|
|
24
|
+
let dbReady = false;
|
|
25
|
+
const ensureDb = async () => {
|
|
26
|
+
if (!dbReady) {
|
|
27
|
+
const { initDb } = await import("@nodetool-ai/models");
|
|
28
|
+
const { getDefaultDbPath } = await import("@nodetool-ai/config");
|
|
29
|
+
initDb(getDefaultDbPath());
|
|
30
|
+
dbReady = true;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const { target, report } = await runValidate(ref, {
|
|
34
|
+
loadFromDb: async (id) => {
|
|
35
|
+
await ensureDb();
|
|
36
|
+
const { Workflow } = await import("@nodetool-ai/models");
|
|
37
|
+
return Workflow.get(id);
|
|
38
|
+
},
|
|
39
|
+
// Node required settings use exact names. Provider aliases are
|
|
40
|
+
// resolved separately by the run preflight.
|
|
41
|
+
availableSecrets: async (keys) => {
|
|
42
|
+
await ensureDb();
|
|
43
|
+
const { getSecret } = await import("@nodetool-ai/models");
|
|
44
|
+
return collectAvailableSecrets(keys, (key) => getSecret(key, "1"));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
if (opts.json) {
|
|
48
|
+
console.log(JSON.stringify({ target, report }, null, 2));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log(renderValidation(report).join("\n"));
|
|
52
|
+
}
|
|
53
|
+
const failed = !report.ok ||
|
|
54
|
+
(opts.warningsAsErrors === true && report.counts.warnings > 0);
|
|
55
|
+
process.exit(failed ? 1 : 0);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
printCommandError(e, opts.json);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* One line per issue code, printed as a legend under the issues so the report
|
|
65
|
+
* explains itself without a trip to the docs.
|
|
66
|
+
*/
|
|
67
|
+
const CODE_LEGEND = {
|
|
68
|
+
invalid_graph: "the graph's nodes or edges is not an array",
|
|
69
|
+
unknown_node: "node type is not in the registry",
|
|
70
|
+
duplicate_id: "two nodes share an id",
|
|
71
|
+
property: "property is missing, empty, or the wrong shape",
|
|
72
|
+
dangling_edge: "edge references a node the graph does not contain",
|
|
73
|
+
unknown_handle: "edge references a handle the node does not have",
|
|
74
|
+
type_mismatch: "the two ends of an edge carry different types",
|
|
75
|
+
fan_in: "several edges target one input that takes a single value",
|
|
76
|
+
untyped_dynamic_slot: "edge targets a dynamic input with no declared type, so the connection is not type-checked — expected on workflows saved before typed slots, one per dynamic edge; informational, never a failure",
|
|
77
|
+
dynamic_type_mismatch: "inline value of a dynamic input does not match the type the slot declares",
|
|
78
|
+
unknown_provider: "a model property names a provider the runtime cannot build",
|
|
79
|
+
missing_secret: "a node declares a credential this install cannot resolve — the run may fail when the node executes",
|
|
80
|
+
slot_type_alias: "a dynamic slot is typed with a JSON-Schema/TypeScript name instead of NodeTool's, so the handle will not connect",
|
|
81
|
+
code_syntax: "a Code node's body is not valid JavaScript",
|
|
82
|
+
code_module: "a Code node's body uses `export`, a dynamic import, or an import the sandbox loader cannot serve",
|
|
83
|
+
code_undefined_name: "a Code node reads a name that is neither a sandbox API nor one of its inputs",
|
|
84
|
+
code_no_return: "a Code node can finish without returning its outputs",
|
|
85
|
+
code_return_shape: "a Code node returns something other than an output object",
|
|
86
|
+
code_missing_output: "a return path leaves a declared output unset",
|
|
87
|
+
code_undeclared_output: "a Code node returns a key it does not declare as an output handle",
|
|
88
|
+
code_unused_input: "a Code node input the body never reads"
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Human-readable report: headline, one line per issue, then a legend for the
|
|
92
|
+
* codes that occurred. Pure so it can be asserted on directly.
|
|
93
|
+
*/
|
|
94
|
+
export function renderValidation(report) {
|
|
95
|
+
const mark = report.ok ? (report.counts.warnings ? "⚠️" : "✅") : "❌";
|
|
96
|
+
const lines = ["", `${mark} ${validationHeadline(report)}`];
|
|
97
|
+
if (report.issues.length === 0)
|
|
98
|
+
return lines;
|
|
99
|
+
lines.push("");
|
|
100
|
+
for (const issue of report.issues) {
|
|
101
|
+
lines.push(` ${formatIssue(issue)}`);
|
|
102
|
+
}
|
|
103
|
+
const codes = [...new Set(report.issues.map((i) => i.code))]
|
|
104
|
+
.filter((code) => code in CODE_LEGEND)
|
|
105
|
+
.sort();
|
|
106
|
+
if (codes.length > 0) {
|
|
107
|
+
lines.push("", " Codes:");
|
|
108
|
+
for (const code of codes) {
|
|
109
|
+
lines.push(` ${code} — ${CODE_LEGEND[code]}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return lines;
|
|
113
|
+
}
|
|
114
|
+
function formatIssue(issue) {
|
|
115
|
+
const tag = issue.severity === "error"
|
|
116
|
+
? "error"
|
|
117
|
+
: issue.severity === "info"
|
|
118
|
+
? "info "
|
|
119
|
+
: "warn ";
|
|
120
|
+
const where = issue.nodeId != null
|
|
121
|
+
? ` [${issue.nodeType ?? "node"} ${issue.nodeId}]`
|
|
122
|
+
: issue.edgeId != null
|
|
123
|
+
? ` [edge ${issue.edgeId}]`
|
|
124
|
+
: "";
|
|
125
|
+
return `${tag} ${issue.message}${where} (${issue.code})`;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|