@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,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless ("server") debug surface: runs a workflow through
|
|
3
|
+
* `@nodetool-ai/execution`'s `ExecutionSession` exactly as
|
|
4
|
+
* `nodetool workflows run` does, but captures the full processing-message
|
|
5
|
+
* stream and the OpenTelemetry trace instead of just the final outputs.
|
|
6
|
+
*
|
|
7
|
+
* This is integration code — it pulls in the node registries, runtime context,
|
|
8
|
+
* and Python bridge — so it is exercised end-to-end rather than unit-tested.
|
|
9
|
+
*/
|
|
10
|
+
import { getDefaultAssetsPath } from "@nodetool-ai/config";
|
|
11
|
+
import { getSecret, Project, Workflow } from "@nodetool-ai/models";
|
|
12
|
+
import { ExecutionSession, isExecutionPreflightError } from "@nodetool-ai/execution";
|
|
13
|
+
import { ProcessingContext } from "@nodetool-ai/runtime";
|
|
14
|
+
import { FileStorageAdapter } from "@nodetool-ai/storage";
|
|
15
|
+
import { summarizeInterventions } from "@nodetool-ai/execution/debug";
|
|
16
|
+
import { createGraphNodeTypeResolver } from "@nodetool-ai/node-sdk";
|
|
17
|
+
import { buildFullRegistry } from "../node-registry.js";
|
|
18
|
+
import { createSupervisorHandle, recordSupervisorCost, streamInterventionLines } from "../supervisor.js";
|
|
19
|
+
import { isRecord } from "../predicates.js";
|
|
20
|
+
import { collectExecutionSummary } from "./collector.js";
|
|
21
|
+
import { readTraceSummary } from "./trace.js";
|
|
22
|
+
/** An output_update carrying a streamed audio chunk's samples. */
|
|
23
|
+
const isAudioChunkOutputUpdate = (message) => {
|
|
24
|
+
if (message.type !== "output_update")
|
|
25
|
+
return false;
|
|
26
|
+
const value = message.value;
|
|
27
|
+
return (isRecord(value) &&
|
|
28
|
+
value.type === "chunk" &&
|
|
29
|
+
value.content_type === "audio");
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The project a server run of this workflow uses: the stored workflow's
|
|
33
|
+
* project, else the user's Personal project, where uploads land. Without it
|
|
34
|
+
* project-scoped capabilities such as `get_asset` reject every asset.
|
|
35
|
+
*/
|
|
36
|
+
async function resolveRunProjectId(workflowId) {
|
|
37
|
+
const workflow = workflowId ? await Workflow.find("1", workflowId) : null;
|
|
38
|
+
return workflow?.project_id ?? (await Project.ensurePersonal("1")).id;
|
|
39
|
+
}
|
|
40
|
+
export async function runOnServer(input) {
|
|
41
|
+
const { graph, workflowId, params } = input;
|
|
42
|
+
const startedAt = Date.now();
|
|
43
|
+
const registry = buildFullRegistry();
|
|
44
|
+
const jobId = `debug-${Date.now()}`;
|
|
45
|
+
// Match a server run's workspace assignment so file/workspace nodes land in
|
|
46
|
+
// the same place a real run would.
|
|
47
|
+
const { resolveWorkflowWorkspace } = await import("@nodetool-ai/websocket");
|
|
48
|
+
const workspace = await resolveWorkflowWorkspace(workflowId ?? null, "1");
|
|
49
|
+
const contextInit = {
|
|
50
|
+
jobId,
|
|
51
|
+
workflowId,
|
|
52
|
+
userId: "1",
|
|
53
|
+
projectId: await resolveRunProjectId(workflowId),
|
|
54
|
+
secretResolver: getSecret,
|
|
55
|
+
storage: new FileStorageAdapter(getDefaultAssetsPath()),
|
|
56
|
+
workspace,
|
|
57
|
+
// The debug bundle crosses a JSON boundary. Store generated media so raw
|
|
58
|
+
// RGBA frames and image collections remain encoded, compact references.
|
|
59
|
+
assetOutputMode: "storage_url"
|
|
60
|
+
};
|
|
61
|
+
const context = input.context ? input.context.copy({ jobId, workflowId, workspace }) : new ProcessingContext(contextInit);
|
|
62
|
+
// ExecutionSession owns editor-only-node pruning (Comment/Group/Reroute —
|
|
63
|
+
// the web editor prunes them at serialize time; without this every
|
|
64
|
+
// commented example would die with "Unknown node type"), graph hydration,
|
|
65
|
+
// Python-bridge connection, and executor resolution (registry → Python
|
|
66
|
+
// bridge → throw) — the three steps this surface used to hand-roll.
|
|
67
|
+
// `limits.runTimeoutMs` replaces the old `withTimeout` race: instead of
|
|
68
|
+
// resolving a synthetic result while abandoning a still-running kernel, the
|
|
69
|
+
// facade calls `session.cancel("timeout")`, which actually tears the run
|
|
70
|
+
// down, and `session.result` only settles once that teardown completes.
|
|
71
|
+
// Supervision plumbs through the facade — the one integration point every
|
|
72
|
+
// surface shares (docs/workflow-supervisor-design.md §7).
|
|
73
|
+
const supervisor = input.supervisor
|
|
74
|
+
? await createSupervisorHandle({ config: input.supervisor, context })
|
|
75
|
+
: null;
|
|
76
|
+
const sessionOptions = {
|
|
77
|
+
graph,
|
|
78
|
+
registry,
|
|
79
|
+
// Registry alone hydrates node flags but not `propertyTypes`, and
|
|
80
|
+
// correlation analysis reads list-ness only from that map — so every
|
|
81
|
+
// `list[...]` handle read as non-list here and a stream arriving on one
|
|
82
|
+
// collapsed to empty scope, keeping the last value. `Directed Film to
|
|
83
|
+
// Timeline` animated one shot of N under `debug` and all N under
|
|
84
|
+
// `workflows run`, which is backwards for a harness whose whole job is
|
|
85
|
+
// to reproduce a run. Same resolver `workflows run` and the websocket
|
|
86
|
+
// runner already pass.
|
|
87
|
+
resolveNodeType: createGraphNodeTypeResolver(registry).resolveNodeType,
|
|
88
|
+
jobId,
|
|
89
|
+
workflowId,
|
|
90
|
+
params,
|
|
91
|
+
context,
|
|
92
|
+
limits: { runTimeoutMs: input.timeoutMs }
|
|
93
|
+
};
|
|
94
|
+
// Capture is retention, so it stays off unless a supervised run needs the
|
|
95
|
+
// stream to print its `⛨` lines as they happen.
|
|
96
|
+
if (supervisor) {
|
|
97
|
+
sessionOptions.supervisor = supervisor.handle;
|
|
98
|
+
sessionOptions.captureMessages = true;
|
|
99
|
+
}
|
|
100
|
+
// A live host relays everything emitted on the run's context. That is a
|
|
101
|
+
// superset of RunResult.messages: a node can emit on its own, and an Agent
|
|
102
|
+
// node's tool calls (what a mini app's Agent Activity widget shows) only
|
|
103
|
+
// ever travel that way. The realtime-audio firehose stays out, as it does
|
|
104
|
+
// from the runner's own retention.
|
|
105
|
+
const relayed = [];
|
|
106
|
+
const detachRelay = context.addMessageListener((message) => {
|
|
107
|
+
if (!isAudioChunkOutputUpdate(message))
|
|
108
|
+
relayed.push(message);
|
|
109
|
+
});
|
|
110
|
+
// A run this runtime cannot honour (unknown model, unregistered provider,
|
|
111
|
+
// missing credential) is refused by `create()` before the kernel starts.
|
|
112
|
+
// The harness's job is to report why a run did not happen, so the refusal
|
|
113
|
+
// becomes a failed report rather than a thrown stack.
|
|
114
|
+
let session;
|
|
115
|
+
try {
|
|
116
|
+
session = await ExecutionSession.create(sessionOptions);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
detachRelay();
|
|
120
|
+
if (!isExecutionPreflightError(err))
|
|
121
|
+
throw err;
|
|
122
|
+
supervisor?.handle.close();
|
|
123
|
+
const summary = collectExecutionSummary([]);
|
|
124
|
+
summary.status = "failed";
|
|
125
|
+
summary.error = err.message;
|
|
126
|
+
return {
|
|
127
|
+
report: {
|
|
128
|
+
surface: "server",
|
|
129
|
+
ok: false,
|
|
130
|
+
status: "failed",
|
|
131
|
+
error: err.message,
|
|
132
|
+
durationMs: Date.now() - startedAt,
|
|
133
|
+
summary,
|
|
134
|
+
trace: null
|
|
135
|
+
},
|
|
136
|
+
rawMessages: []
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const interventionLines = supervisor
|
|
140
|
+
? streamInterventionLines(session.messages, input.onInterventionLine ?? ((line) => console.error(line)))
|
|
141
|
+
: Promise.resolve();
|
|
142
|
+
// `session.result` never rejects — kernel failures (including an unknown
|
|
143
|
+
// node type surfaced during executor resolution) resolve as `status:
|
|
144
|
+
// "failed"` instead of throwing, so no try/catch is needed here.
|
|
145
|
+
const result = await session.result;
|
|
146
|
+
await interventionLines;
|
|
147
|
+
supervisor?.handle.close();
|
|
148
|
+
const timedOut = session.cancelReason === "timeout";
|
|
149
|
+
detachRelay();
|
|
150
|
+
const messages = relayed.length > 0 ? relayed : (result.messages ?? []);
|
|
151
|
+
const summary = collectExecutionSummary(messages);
|
|
152
|
+
// The runner's RunResult status is authoritative; fall back to the message
|
|
153
|
+
// stream's view if it's missing.
|
|
154
|
+
summary.status = result.status ?? summary.status;
|
|
155
|
+
const error = result.error ??
|
|
156
|
+
(timedOut
|
|
157
|
+
? `Debug server run exceeded timeout (${input.timeoutMs}ms)`
|
|
158
|
+
: undefined);
|
|
159
|
+
if (error && !summary.error)
|
|
160
|
+
summary.error = error;
|
|
161
|
+
// Spans are written eagerly via SimpleSpanProcessor, but the underlying
|
|
162
|
+
// WriteStream flushes async — give it a beat before reading the file back.
|
|
163
|
+
let trace = null;
|
|
164
|
+
if (input.tracePath) {
|
|
165
|
+
await new Promise((r) => setTimeout(r, 250));
|
|
166
|
+
trace = await readTraceSummary(input.tracePath);
|
|
167
|
+
}
|
|
168
|
+
const interventions = result.interventions ?? [];
|
|
169
|
+
if (supervisor && interventions.length > 0) {
|
|
170
|
+
await recordSupervisorCost({
|
|
171
|
+
interventions,
|
|
172
|
+
jobId,
|
|
173
|
+
workflowId,
|
|
174
|
+
userId: "1",
|
|
175
|
+
providerId: supervisor.providerId,
|
|
176
|
+
model: supervisor.model
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
const report = {
|
|
180
|
+
surface: "server",
|
|
181
|
+
ok: result.status === "completed",
|
|
182
|
+
status: result.status ?? summary.status,
|
|
183
|
+
error: error ?? summary.error,
|
|
184
|
+
durationMs: Date.now() - startedAt,
|
|
185
|
+
summary,
|
|
186
|
+
trace
|
|
187
|
+
};
|
|
188
|
+
if (supervisor) {
|
|
189
|
+
report.supervised = {
|
|
190
|
+
provider: supervisor.providerId,
|
|
191
|
+
model: supervisor.model,
|
|
192
|
+
summary: summarizeInterventions(interventions)
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return { report, rawMessages: messages };
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=server-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-runner.js","sourceRoot":"","sources":["../../src/debug/server-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DebugGraph, DebugTargetInfo } from "./types.js";
|
|
2
|
+
export interface ResolvedTarget {
|
|
3
|
+
info: DebugTargetInfo;
|
|
4
|
+
graph: DebugGraph;
|
|
5
|
+
/** Params discovered in a file's `params` field, merged under caller params. */
|
|
6
|
+
fileParams: Record<string, unknown>;
|
|
7
|
+
/** The workflow's app-builder document (`app_doc`), when present. */
|
|
8
|
+
appDoc: unknown;
|
|
9
|
+
}
|
|
10
|
+
/** A path-shaped ref, as opposed to a database id. */
|
|
11
|
+
export declare function looksLikeFile(ref: string): boolean;
|
|
12
|
+
/** A DSL ref, which has to be executed rather than read. */
|
|
13
|
+
export declare function looksLikeDsl(ref: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Read a file target's JSON: a `.json` file straight off disk, or the JSON a
|
|
16
|
+
* DSL file prints when executed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function readFileTarget(ref: string): Promise<{
|
|
19
|
+
raw: unknown;
|
|
20
|
+
source: "json" | "dsl";
|
|
21
|
+
}>;
|
|
22
|
+
/** Convert ReactFlow `node.data` to kernel `node.properties` in place. */
|
|
23
|
+
export declare function normalizeGraph(graph: DebugGraph): DebugGraph;
|
|
24
|
+
/**
|
|
25
|
+
* Load a workflow from a file (JSON or DSL) or the local DB.
|
|
26
|
+
*
|
|
27
|
+
* `loadFromDb` is injected so this module stays free of a hard `@nodetool-ai/models`
|
|
28
|
+
* import at module load (keeps it light for the command-registration test path).
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveTarget(ref: string, loadFromDb: (id: string) => Promise<{
|
|
31
|
+
graph: DebugGraph;
|
|
32
|
+
app_doc?: unknown;
|
|
33
|
+
} | null>): Promise<ResolvedTarget>;
|
|
34
|
+
//# sourceMappingURL=target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/debug/target.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,CAAC,CAcnD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAW5D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,GACnF,OAAO,CAAC,cAAc,CAAC,CA2CzB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a workflow debug target (DB id, JSON file, or TypeScript DSL file)
|
|
3
|
+
* into a normalized runner-shape graph plus metadata.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors the resolution + normalization the `workflows run` command does so the
|
|
6
|
+
* debug harness executes the exact same graph the runner would.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync } from "node:fs";
|
|
9
|
+
import { dirname, resolve } from "node:path";
|
|
10
|
+
/** A path-shaped ref, as opposed to a database id. */
|
|
11
|
+
export function looksLikeFile(ref) {
|
|
12
|
+
return (ref.endsWith(".json") ||
|
|
13
|
+
ref.endsWith(".ts") ||
|
|
14
|
+
ref.endsWith(".tsx") ||
|
|
15
|
+
ref.includes("/") ||
|
|
16
|
+
ref.includes("\\"));
|
|
17
|
+
}
|
|
18
|
+
/** A DSL ref, which has to be executed rather than read. */
|
|
19
|
+
export function looksLikeDsl(ref) {
|
|
20
|
+
return ref.endsWith(".ts") || ref.endsWith(".tsx");
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Read a file target's JSON: a `.json` file straight off disk, or the JSON a
|
|
24
|
+
* DSL file prints when executed.
|
|
25
|
+
*/
|
|
26
|
+
export async function readFileTarget(ref) {
|
|
27
|
+
if (looksLikeDsl(ref)) {
|
|
28
|
+
// DSL file: execute via tsx and capture the emitted JSON workflow.
|
|
29
|
+
// execFileSync, not execSync: the path goes through argv, so quotes or
|
|
30
|
+
// `$(...)` in a file name stay a file name instead of becoming shell.
|
|
31
|
+
const { execFileSync } = await import("node:child_process");
|
|
32
|
+
const output = execFileSync("npx", ["tsx", resolve(ref)], {
|
|
33
|
+
encoding: "utf8",
|
|
34
|
+
cwd: dirname(resolve(ref)),
|
|
35
|
+
timeout: 30000
|
|
36
|
+
});
|
|
37
|
+
return { raw: JSON.parse(output.trim()), source: "dsl" };
|
|
38
|
+
}
|
|
39
|
+
return { raw: JSON.parse(readFileSync(ref, "utf8")), source: "json" };
|
|
40
|
+
}
|
|
41
|
+
/** Convert ReactFlow `node.data` to kernel `node.properties` in place. */
|
|
42
|
+
export function normalizeGraph(graph) {
|
|
43
|
+
return {
|
|
44
|
+
nodes: (graph.nodes ?? []).map((n) => {
|
|
45
|
+
if (n.properties === undefined && n.data !== undefined) {
|
|
46
|
+
const { data, ...rest } = n;
|
|
47
|
+
return { ...rest, properties: data };
|
|
48
|
+
}
|
|
49
|
+
return n;
|
|
50
|
+
}),
|
|
51
|
+
edges: graph.edges ?? []
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Load a workflow from a file (JSON or DSL) or the local DB.
|
|
56
|
+
*
|
|
57
|
+
* `loadFromDb` is injected so this module stays free of a hard `@nodetool-ai/models`
|
|
58
|
+
* import at module load (keeps it light for the command-registration test path).
|
|
59
|
+
*/
|
|
60
|
+
export async function resolveTarget(ref, loadFromDb) {
|
|
61
|
+
let raw;
|
|
62
|
+
let source;
|
|
63
|
+
let workflowId;
|
|
64
|
+
const fileParams = {};
|
|
65
|
+
if (looksLikeFile(ref)) {
|
|
66
|
+
const file = await readFileTarget(ref);
|
|
67
|
+
raw = file.raw;
|
|
68
|
+
source = file.source;
|
|
69
|
+
workflowId = raw.workflow_id ?? raw.id ?? null;
|
|
70
|
+
if (raw.params)
|
|
71
|
+
Object.assign(fileParams, raw.params);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const wf = await loadFromDb(ref);
|
|
75
|
+
if (!wf)
|
|
76
|
+
throw new Error(`Workflow not found: ${ref}`);
|
|
77
|
+
raw = wf;
|
|
78
|
+
workflowId = ref;
|
|
79
|
+
source = "id";
|
|
80
|
+
}
|
|
81
|
+
const rawGraph = raw.graph ?? raw;
|
|
82
|
+
if (!rawGraph?.nodes || !rawGraph?.edges) {
|
|
83
|
+
throw new Error("Invalid workflow: missing nodes or edges");
|
|
84
|
+
}
|
|
85
|
+
// A truthy non-array (`"nodes": 3`, `"edges": {}`) clears the check above and
|
|
86
|
+
// used to reach `.map()` below as a raw TypeError.
|
|
87
|
+
if (!Array.isArray(rawGraph.nodes) || !Array.isArray(rawGraph.edges)) {
|
|
88
|
+
throw new Error("Invalid workflow: nodes and edges must be arrays");
|
|
89
|
+
}
|
|
90
|
+
const graph = normalizeGraph(rawGraph);
|
|
91
|
+
return {
|
|
92
|
+
info: {
|
|
93
|
+
ref,
|
|
94
|
+
source,
|
|
95
|
+
workflowId,
|
|
96
|
+
nodeCount: graph.nodes.length,
|
|
97
|
+
edgeCount: graph.edges.length
|
|
98
|
+
},
|
|
99
|
+
graph,
|
|
100
|
+
fileParams,
|
|
101
|
+
appDoc: raw.app_doc ?? null
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/debug/target.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { TraceSummary } from "./types.js";
|
|
2
|
+
/** One span as serialized by the JSONL trace exporter. */
|
|
3
|
+
export interface TraceSpan {
|
|
4
|
+
trace_id: string;
|
|
5
|
+
span_id: string;
|
|
6
|
+
parent_span_id: string | null;
|
|
7
|
+
name: string;
|
|
8
|
+
kind: string;
|
|
9
|
+
start_time_ms: number;
|
|
10
|
+
end_time_ms: number;
|
|
11
|
+
duration_ms: number;
|
|
12
|
+
status: {
|
|
13
|
+
code: string;
|
|
14
|
+
message?: string;
|
|
15
|
+
};
|
|
16
|
+
attributes: Record<string, unknown>;
|
|
17
|
+
events: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
time_ms: number;
|
|
20
|
+
attributes?: Record<string, unknown>;
|
|
21
|
+
}>;
|
|
22
|
+
resource: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/** Parse a JSONL trace file body, skipping blank/corrupt lines. */
|
|
25
|
+
export declare function parseTraceJsonl(text: string): TraceSpan[];
|
|
26
|
+
/** Roll spans up into a `TraceSummary`. */
|
|
27
|
+
export declare function summarizeSpans(spans: TraceSpan[]): TraceSummary;
|
|
28
|
+
/** Read + summarize a trace file. Returns null when the file is missing/empty. */
|
|
29
|
+
export declare function readTraceSummary(path: string): Promise<TraceSummary | null>;
|
|
30
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/debug/trace.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,0DAA0D;AAC1D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACvF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAID,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAYzD;AAOD,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CA2C/D;AAED,kFAAkF;AAClF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAUjF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads and summarizes the OpenTelemetry JSONL trace a debug run produces.
|
|
3
|
+
*
|
|
4
|
+
* The runtime's `JsonlFileSpanExporter` writes one span per line in the shape
|
|
5
|
+
* documented in AGENTS.md (workflow.run → node.process → agent.* → llm.*). We
|
|
6
|
+
* roll those up into per-name timing plus token/cost totals from the
|
|
7
|
+
* `gen_ai.usage.*` attributes carried by every llm.chat / llm.stream span.
|
|
8
|
+
*/
|
|
9
|
+
import { readFile } from "node:fs/promises";
|
|
10
|
+
import { isNumber } from "../predicates.js";
|
|
11
|
+
const SLOWEST_LIMIT = 10;
|
|
12
|
+
/** Parse a JSONL trace file body, skipping blank/corrupt lines. */
|
|
13
|
+
export function parseTraceJsonl(text) {
|
|
14
|
+
const spans = [];
|
|
15
|
+
for (const line of text.split("\n")) {
|
|
16
|
+
const trimmed = line.trim();
|
|
17
|
+
if (!trimmed)
|
|
18
|
+
continue;
|
|
19
|
+
try {
|
|
20
|
+
spans.push(JSON.parse(trimmed));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Ignore partial/corrupt lines (e.g. a crash mid-write).
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return spans;
|
|
27
|
+
}
|
|
28
|
+
function numAttr(attrs, key) {
|
|
29
|
+
const v = attrs[key];
|
|
30
|
+
return isNumber(v) ? v : 0;
|
|
31
|
+
}
|
|
32
|
+
/** Roll spans up into a `TraceSummary`. */
|
|
33
|
+
export function summarizeSpans(spans) {
|
|
34
|
+
const byName = {};
|
|
35
|
+
let inputTokens = 0;
|
|
36
|
+
let outputTokens = 0;
|
|
37
|
+
let totalTokens = 0;
|
|
38
|
+
let costUsd = 0;
|
|
39
|
+
let minStart = Number.POSITIVE_INFINITY;
|
|
40
|
+
let maxEnd = Number.NEGATIVE_INFINITY;
|
|
41
|
+
for (const span of spans) {
|
|
42
|
+
const bucket = (byName[span.name] ??= { count: 0, totalDurationMs: 0 });
|
|
43
|
+
bucket.count += 1;
|
|
44
|
+
bucket.totalDurationMs += span.duration_ms;
|
|
45
|
+
if (Number.isFinite(span.start_time_ms))
|
|
46
|
+
minStart = Math.min(minStart, span.start_time_ms);
|
|
47
|
+
if (Number.isFinite(span.end_time_ms))
|
|
48
|
+
maxEnd = Math.max(maxEnd, span.end_time_ms);
|
|
49
|
+
const a = span.attributes ?? {};
|
|
50
|
+
inputTokens += numAttr(a, "gen_ai.usage.input_tokens");
|
|
51
|
+
outputTokens += numAttr(a, "gen_ai.usage.output_tokens");
|
|
52
|
+
totalTokens += numAttr(a, "gen_ai.usage.total_tokens");
|
|
53
|
+
costUsd += numAttr(a, "gen_ai.usage.cost_usd");
|
|
54
|
+
}
|
|
55
|
+
const slowest = spans
|
|
56
|
+
.slice()
|
|
57
|
+
.sort((x, y) => y.duration_ms - x.duration_ms)
|
|
58
|
+
.slice(0, SLOWEST_LIMIT)
|
|
59
|
+
.map((s) => ({ name: s.name, durationMs: s.duration_ms, status: s.status?.code ?? "UNSET" }));
|
|
60
|
+
return {
|
|
61
|
+
spanCount: spans.length,
|
|
62
|
+
totalDurationMs: spans.length > 0 && minStart !== Number.POSITIVE_INFINITY ? maxEnd - minStart : null,
|
|
63
|
+
tokens: {
|
|
64
|
+
input: inputTokens,
|
|
65
|
+
output: outputTokens,
|
|
66
|
+
total: totalTokens || inputTokens + outputTokens
|
|
67
|
+
},
|
|
68
|
+
costUsd,
|
|
69
|
+
byName,
|
|
70
|
+
slowest
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** Read + summarize a trace file. Returns null when the file is missing/empty. */
|
|
74
|
+
export async function readTraceSummary(path) {
|
|
75
|
+
let text;
|
|
76
|
+
try {
|
|
77
|
+
text = await readFile(path, "utf8");
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const spans = parseTraceJsonl(text);
|
|
83
|
+
if (spans.length === 0)
|
|
84
|
+
return null;
|
|
85
|
+
return summarizeSpans(spans);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/debug/trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the workflow debug harness.
|
|
3
|
+
*
|
|
4
|
+
* The harness runs a workflow end-to-end on two surfaces — the headless server
|
|
5
|
+
* (kernel `WorkflowRunner`) and a real browser (the `e2e_runner` page driven by
|
|
6
|
+
* Playwright) — and folds everything worth inspecting into a single
|
|
7
|
+
* `DebugReport`: the workflow graph JSON, every processing message (logs, node
|
|
8
|
+
* IO, outputs, edges, LLM calls), an OpenTelemetry span summary, browser console
|
|
9
|
+
* errors and a screenshot. The report is written to a bundle directory and also
|
|
10
|
+
* returned so an agent can iterate without re-parsing files.
|
|
11
|
+
*/
|
|
12
|
+
import type { DebugGraph, DebugTargetInfo, DebugVerdict, ExecutionSummary, ServerRunReport } from "@nodetool-ai/execution/debug";
|
|
13
|
+
import type { SupervisorRunConfig } from "../supervisor.js";
|
|
14
|
+
export type { DebugError, DebugGraph, DebugTargetInfo, DebugVerdict, EdgeDebug, ExecutionSummary, LlmCallDebug, LogEntry, NodeDebug, NodeOutput, RunVerdict, ServerRunReport, TraceSummary } from "@nodetool-ai/execution/debug";
|
|
15
|
+
/** A canvas screenshot captured at one stage of the browser run. */
|
|
16
|
+
interface BrowserStageShot {
|
|
17
|
+
/** 0-based capture order. */
|
|
18
|
+
index: number;
|
|
19
|
+
/** Run status at capture time (running until the final frame). */
|
|
20
|
+
status: string;
|
|
21
|
+
/** Bundle-relative path to the screenshot. */
|
|
22
|
+
file: string;
|
|
23
|
+
}
|
|
24
|
+
export interface BrowserRunReport {
|
|
25
|
+
surface: "browser";
|
|
26
|
+
ok: boolean;
|
|
27
|
+
status: string;
|
|
28
|
+
error: string | null;
|
|
29
|
+
durationMs: number | null;
|
|
30
|
+
summary: ExecutionSummary;
|
|
31
|
+
consoleErrors: string[];
|
|
32
|
+
/** Bundle-relative path to the final settled screenshot. */
|
|
33
|
+
screenshotFile?: string;
|
|
34
|
+
/** Canvas screenshots captured at successive stages of the run. */
|
|
35
|
+
stages?: BrowserStageShot[];
|
|
36
|
+
/** Bundle-relative path to the raw browser RunRecord JSON. */
|
|
37
|
+
recordFile?: string;
|
|
38
|
+
/** Set when the browser surface could not run (missing deps / browser). */
|
|
39
|
+
unavailableReason?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface DebugReport {
|
|
42
|
+
generatedAt: string;
|
|
43
|
+
target: DebugTargetInfo;
|
|
44
|
+
/** The workflow graph JSON (runner shape). */
|
|
45
|
+
workflow: DebugGraph;
|
|
46
|
+
server: ServerRunReport | null;
|
|
47
|
+
browser: BrowserRunReport | null;
|
|
48
|
+
verdict: DebugVerdict;
|
|
49
|
+
/** Absolute path to the on-disk bundle, when one was written. */
|
|
50
|
+
bundleDir: string | null;
|
|
51
|
+
}
|
|
52
|
+
/** Options that drive a debug run. */
|
|
53
|
+
export interface DebugOptions {
|
|
54
|
+
/** Run the headless server surface. Default true. */
|
|
55
|
+
server?: boolean;
|
|
56
|
+
/** Run the real-browser surface (Playwright). Expensive; default false. */
|
|
57
|
+
browser?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Capture an OpenTelemetry trace of the server run (timing/tokens/cost).
|
|
60
|
+
* Expensive — loads the OTel SDK and adds per-span overhead. Default false.
|
|
61
|
+
*/
|
|
62
|
+
trace?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* On the browser surface, capture a canvas screenshot at every stage of the
|
|
65
|
+
* run instead of only the final frame. Expensive; implies `browser`. Default
|
|
66
|
+
* false.
|
|
67
|
+
*/
|
|
68
|
+
stages?: boolean;
|
|
69
|
+
/** Input params keyed by input-node name. */
|
|
70
|
+
params?: Record<string, unknown>;
|
|
71
|
+
/** Bundle output directory. When omitted a timestamped dir is generated. */
|
|
72
|
+
outDir?: string;
|
|
73
|
+
/** Per-surface run timeout, ms. */
|
|
74
|
+
timeoutMs?: number;
|
|
75
|
+
/**
|
|
76
|
+
* Supervise the server surface (`--supervise` and its bounds). The browser
|
|
77
|
+
* surface runs the workflow through the web runtime, which has no supervisor
|
|
78
|
+
* of its own until the editor toggle ships, so it is unaffected.
|
|
79
|
+
*/
|
|
80
|
+
supervisor?: SupervisorRunConfig;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,YAAY,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACb,MAAM,8BAA8B,CAAC;AAEtC,oEAAoE;AACpE,UAAU,gBAAgB;IACxB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the workflow debug harness.
|
|
3
|
+
*
|
|
4
|
+
* The harness runs a workflow end-to-end on two surfaces — the headless server
|
|
5
|
+
* (kernel `WorkflowRunner`) and a real browser (the `e2e_runner` page driven by
|
|
6
|
+
* Playwright) — and folds everything worth inspecting into a single
|
|
7
|
+
* `DebugReport`: the workflow graph JSON, every processing message (logs, node
|
|
8
|
+
* IO, outputs, edges, LLM calls), an OpenTelemetry span summary, browser console
|
|
9
|
+
* errors and a screenshot. The report is written to a bundle directory and also
|
|
10
|
+
* returned so an agent can iterate without re-parsing files.
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../../src/debug/verdict.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,YAAY,CAgFd"}
|