@nodetool-ai/cli 0.7.0-rc.23 → 0.8.1
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 +79 -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 +50 -0
- package/dist/affected/affected.d.ts.map +1 -0
- package/dist/affected/affected.js +118 -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 +27 -0
- package/dist/app-debug/harness.d.ts.map +1 -0
- package/dist/app-debug/harness.js +93 -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 +979 -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 +85 -0
- package/dist/chat-codeact.d.ts.map +1 -0
- package/dist/chat-codeact.js +141 -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 +27 -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.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/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 +327 -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 +381 -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.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/eval.d.ts +152 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +688 -0
- package/dist/commands/eval.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 +395 -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 +19 -0
- package/dist/commands/harness.d.ts.map +1 -0
- package/dist/commands/harness.js +361 -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 +227 -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/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.js +2 -2
- 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/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 +117 -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 +80 -0
- package/dist/commands/timeline-render.d.ts.map +1 -0
- package/dist/commands/timeline-render.js +465 -0
- package/dist/commands/timeline-render.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 +119 -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 +22 -0
- package/dist/debug/server-runner.d.ts.map +1 -0
- package/dist/debug/server-runner.js +164 -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 +3576 -0
- package/dist/harness/capability-table.js.map +1 -0
- package/dist/harness/changed-files.d.ts +18 -0
- package/dist/harness/changed-files.d.ts.map +1 -0
- package/dist/harness/changed-files.js +76 -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 +162 -0
- package/dist/harness/registry.d.ts.map +1 -0
- package/dist/harness/registry.js +1738 -0
- package/dist/harness/registry.js.map +1 -0
- package/dist/index.js +121 -130
- package/dist/index.js.map +1 -1
- package/dist/interaction-script.d.ts +17 -0
- package/dist/interaction-script.d.ts.map +1 -0
- package/dist/interaction-script.js +47 -0
- package/dist/interaction-script.js.map +1 -0
- package/dist/js-script-debug/harness.d.ts +114 -0
- package/dist/js-script-debug/harness.d.ts.map +1 -0
- package/dist/js-script-debug/harness.js +252 -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 +64 -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 +13 -0
- package/dist/node-registry.d.ts.map +1 -0
- package/dist/node-registry.js +36 -0
- package/dist/node-registry.js.map +1 -0
- package/dist/nodetool.js +845 -309
- 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 +329 -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 +23 -0
- package/dist/run-dsl.d.ts.map +1 -1
- package/dist/run-dsl.js +40 -9
- 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 +12 -0
- package/dist/sandbox-catalog.d.ts.map +1 -0
- package/dist/sandbox-catalog.js +27 -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 +178 -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 +159 -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 +155 -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 +62 -31
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { printCommandError } from "../command-errors.js";
|
|
2
|
+
import { renderJsScriptValidation } from "./js-script-validation-output.js";
|
|
3
|
+
import { registerJsScriptVersionsCommands } from "./js-script-versions.js";
|
|
4
|
+
import { isRecord } from "../predicates.js";
|
|
5
|
+
export { renderJsScriptValidation };
|
|
6
|
+
/** Read a `js_scripts` row through the local database. */
|
|
7
|
+
async function scriptLoader() {
|
|
8
|
+
const { initDb, JsScript } = await import("@nodetool-ai/models");
|
|
9
|
+
const { getDefaultDbPath } = await import("@nodetool-ai/config");
|
|
10
|
+
let ready = false;
|
|
11
|
+
return async (id) => {
|
|
12
|
+
if (!ready) {
|
|
13
|
+
initDb(getDefaultDbPath());
|
|
14
|
+
ready = true;
|
|
15
|
+
}
|
|
16
|
+
const row = await JsScript.findById(id);
|
|
17
|
+
return row ? { id: row.id, name: row.name, document: row.document } : null;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** `--inputs` is a JSON object; anything else names itself in the error. */
|
|
21
|
+
export function parseInputsOption(raw) {
|
|
22
|
+
let parsed;
|
|
23
|
+
try {
|
|
24
|
+
parsed = JSON.parse(raw);
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
throw new Error(`--inputs is not valid JSON: ${e.message}`);
|
|
28
|
+
}
|
|
29
|
+
if (!isRecord(parsed)) {
|
|
30
|
+
throw new Error("--inputs must be a JSON object, e.g. '{\"a\":1}'");
|
|
31
|
+
}
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* `--input-streams` stages items per handle for a body that reads `stream`:
|
|
36
|
+
* a JSON object whose every value is an array.
|
|
37
|
+
*/
|
|
38
|
+
export function parseInputStreamsOption(raw) {
|
|
39
|
+
let parsed;
|
|
40
|
+
try {
|
|
41
|
+
parsed = JSON.parse(raw);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
throw new Error(`--input-streams is not valid JSON: ${e.message}`);
|
|
45
|
+
}
|
|
46
|
+
if (!isRecord(parsed)) {
|
|
47
|
+
throw new Error("--input-streams must be a JSON object of arrays, e.g. '{\"nums\":[1,2,3]}'");
|
|
48
|
+
}
|
|
49
|
+
const staged = {};
|
|
50
|
+
for (const [handle, items] of Object.entries(parsed)) {
|
|
51
|
+
if (!Array.isArray(items)) {
|
|
52
|
+
throw new Error(`--input-streams entry "${handle}" is not an array`);
|
|
53
|
+
}
|
|
54
|
+
staged[handle] = items;
|
|
55
|
+
}
|
|
56
|
+
return staged;
|
|
57
|
+
}
|
|
58
|
+
export function registerJsScriptCommands(program) {
|
|
59
|
+
const jsscript = program
|
|
60
|
+
.command("jsscript")
|
|
61
|
+
.description("Work with JS script documents");
|
|
62
|
+
jsscript
|
|
63
|
+
.command("validate <script_id_or_file>")
|
|
64
|
+
.description("Validate a JS script without running it: body syntax, imports against the declared packages, undeclared inputs, outputs nothing emits, tests naming ports the script lacks. Takes a script JSON file or a js_scripts row id")
|
|
65
|
+
.option("--json", "Print the full JsScriptValidation as JSON")
|
|
66
|
+
.option("--warnings-as-errors", "Exit non-zero when there are warnings (not just errors)")
|
|
67
|
+
.action(async (ref, opts) => {
|
|
68
|
+
try {
|
|
69
|
+
const { runJsScriptValidate } = await import("../js-script-debug/index.js");
|
|
70
|
+
const { target, validation } = await runJsScriptValidate(ref, {
|
|
71
|
+
loadScript: await scriptLoader()
|
|
72
|
+
});
|
|
73
|
+
if (opts.json) {
|
|
74
|
+
console.log(JSON.stringify({ target, validation }, null, 2));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(renderJsScriptValidation(validation).join("\n"));
|
|
78
|
+
}
|
|
79
|
+
const failed = !validation.ok ||
|
|
80
|
+
(opts.warningsAsErrors === true && validation.warnings.length > 0);
|
|
81
|
+
process.exit(failed ? 1 : 0);
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
printCommandError(e, opts.json);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
jsscript
|
|
89
|
+
.command("run <script_id_or_file>")
|
|
90
|
+
.description("Run a JS script once in the QuickJS sandbox and print its outputs, streamed emits, logs and error")
|
|
91
|
+
.option("--inputs <json>", "Input values, e.g. '{\"a\":1}'")
|
|
92
|
+
.option("--input-streams <json>", "Items staged per handle for a body that reads `stream`, e.g. '{\"nums\":[1,2,3]}'")
|
|
93
|
+
.option("--json", "Print the run result as JSON")
|
|
94
|
+
.action(async (ref, opts) => {
|
|
95
|
+
let ok = false;
|
|
96
|
+
try {
|
|
97
|
+
const { runJsScriptOnce } = await import("../js-script-debug/index.js");
|
|
98
|
+
const inputs = opts.inputs ? parseInputsOption(opts.inputs) : {};
|
|
99
|
+
const inputStreams = opts.inputStreams
|
|
100
|
+
? parseInputStreamsOption(opts.inputStreams)
|
|
101
|
+
: undefined;
|
|
102
|
+
const { result } = await runJsScriptOnce(ref, inputs, { loadScript: await scriptLoader() }, inputStreams);
|
|
103
|
+
if (opts.json) {
|
|
104
|
+
// process.exit below drops what a pipe has not taken yet, so a
|
|
105
|
+
// result past the pipe buffer (64 KB) arrived cut off.
|
|
106
|
+
await new Promise((resolve) => process.stdout.write(`${JSON.stringify(result, null, 2)}\n`, () => resolve()));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
printRunResult(result);
|
|
110
|
+
}
|
|
111
|
+
ok = result.ok;
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
printCommandError(e, opts.json);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
process.exit(ok ? 0 : 1);
|
|
118
|
+
});
|
|
119
|
+
jsscript
|
|
120
|
+
.command("test <script_id_or_file>")
|
|
121
|
+
.description("Run a JS script's saved test cases and grade each one. Exits non-zero when any case fails")
|
|
122
|
+
.option("--json", "Print the grade report as JSON")
|
|
123
|
+
.action(async (ref, opts) => {
|
|
124
|
+
let ok = false;
|
|
125
|
+
try {
|
|
126
|
+
const { runJsScriptTests } = await import("../js-script-debug/index.js");
|
|
127
|
+
const { report } = await runJsScriptTests(ref, {
|
|
128
|
+
loadScript: await scriptLoader()
|
|
129
|
+
});
|
|
130
|
+
if (opts.json) {
|
|
131
|
+
console.log(JSON.stringify(report, null, 2));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
printTestReport(report);
|
|
135
|
+
}
|
|
136
|
+
ok = report.ok;
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
printCommandError(e, opts.json);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
process.exit(ok ? 0 : 1);
|
|
143
|
+
});
|
|
144
|
+
jsscript
|
|
145
|
+
.command("debug <script_id_or_file>")
|
|
146
|
+
.description("Replay a scripted editing session against a JS script headlessly and collect a debug bundle (the document, the report, every step's result)")
|
|
147
|
+
.option("--interact <json>", 'Scripted steps: [{"tool":"set_code","input":{"code":"..."}}] — the ui_jsscript_ prefix is optional')
|
|
148
|
+
.option("--out <dir>", "Bundle output directory (default: nodetool-debug/jsscript-<id>-<timestamp>)")
|
|
149
|
+
.option("--json", "Print the full JsScriptDebugReport as JSON to stdout")
|
|
150
|
+
.action(async (ref, opts) => {
|
|
151
|
+
try {
|
|
152
|
+
const { parseInteractionScript, runJsScriptDebug } = await import("../js-script-debug/index.js");
|
|
153
|
+
const interact = opts.interact
|
|
154
|
+
? parseInteractionScript(opts.interact)
|
|
155
|
+
: undefined;
|
|
156
|
+
const debugOptions = {};
|
|
157
|
+
if (interact) {
|
|
158
|
+
debugOptions.interact = interact;
|
|
159
|
+
}
|
|
160
|
+
if (opts.out) {
|
|
161
|
+
debugOptions.outDir = opts.out;
|
|
162
|
+
}
|
|
163
|
+
const { report, bundleDir } = await runJsScriptDebug(ref, debugOptions, {
|
|
164
|
+
loadScript: await scriptLoader(),
|
|
165
|
+
onLog: (line) => console.error(line)
|
|
166
|
+
});
|
|
167
|
+
if (opts.json) {
|
|
168
|
+
console.log(JSON.stringify(report, null, 2));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
printJsScriptSummary(report, bundleDir);
|
|
172
|
+
}
|
|
173
|
+
process.exit(report.verdict.ok ? 0 : 1);
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
printCommandError(e, opts.json);
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
registerJsScriptVersionsCommands(jsscript);
|
|
181
|
+
}
|
|
182
|
+
function printRunResult(result) {
|
|
183
|
+
console.log(`\n${result.ok ? "✅" : "❌"} ${result.ok ? "ran" : "failed"} in ${result.duration_ms}ms`);
|
|
184
|
+
if (result.error)
|
|
185
|
+
console.log(` error: ${result.error}`);
|
|
186
|
+
if (result.outputs) {
|
|
187
|
+
console.log(` outputs: ${JSON.stringify(result.outputs)}`);
|
|
188
|
+
}
|
|
189
|
+
if (result.streamed && result.streamed.length > 0) {
|
|
190
|
+
console.log(` streamed: ${JSON.stringify(result.streamed)}`);
|
|
191
|
+
}
|
|
192
|
+
for (const line of result.logs)
|
|
193
|
+
console.log(` log: ${line}`);
|
|
194
|
+
}
|
|
195
|
+
function printTestReport(report) {
|
|
196
|
+
console.log(`\n${report.ok ? "✅" : "❌"} ${report.passed} passed, ${report.failed} failed`);
|
|
197
|
+
for (const testCase of report.results) {
|
|
198
|
+
console.log(` ${testCase.ok ? "✓" : "✗"} ${testCase.name}`);
|
|
199
|
+
if (testCase.error)
|
|
200
|
+
console.log(` error: ${testCase.error}`);
|
|
201
|
+
for (const mismatch of testCase.mismatches) {
|
|
202
|
+
console.log(` ${mismatch.output}: expected ${JSON.stringify(mismatch.expected)}, got ${JSON.stringify(mismatch.actual)}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function printJsScriptSummary(report, bundleDir) {
|
|
207
|
+
const mark = report.verdict.ok ? "✅" : "❌";
|
|
208
|
+
console.log(`\n${mark} ${report.verdict.headline}`);
|
|
209
|
+
console.log(` script: ${report.meta.inputCount} input(s), ${report.meta.outputCount} output(s), ${report.meta.testCount} test(s)`);
|
|
210
|
+
const failed = report.interactions.filter((i) => !i.ok).length;
|
|
211
|
+
if (report.interactions.length > 0) {
|
|
212
|
+
console.log(` session: ${report.interactions.length} step(s), ${failed} failed`);
|
|
213
|
+
}
|
|
214
|
+
if (report.verdict.issues.length > 0) {
|
|
215
|
+
console.log("\nIssues:");
|
|
216
|
+
for (const issue of report.verdict.issues)
|
|
217
|
+
console.log(` - ${issue}`);
|
|
218
|
+
}
|
|
219
|
+
if (report.verdict.warnings && report.verdict.warnings.length > 0) {
|
|
220
|
+
console.log("\nWarnings:");
|
|
221
|
+
for (const warning of report.verdict.warnings)
|
|
222
|
+
console.log(` - ${warning}`);
|
|
223
|
+
}
|
|
224
|
+
console.log(`\nDebug bundle: ${bundleDir}`);
|
|
225
|
+
console.log(" report.md / report.json · jsscript.json");
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=js-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-script.js","sourceRoot":"","sources":["../../src/commands/js-script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool jtbd` — run the jobs an agent is asked to get done, and review how
|
|
3
|
+
* the runs went.
|
|
4
|
+
*
|
|
5
|
+
* Three subcommands, one loop:
|
|
6
|
+
*
|
|
7
|
+
* list what jobs exist, what they cross, how hard they are meant to be
|
|
8
|
+
* run drive a model through them and write a bundle per run
|
|
9
|
+
* optimize read those bundles back and propose a fix per run
|
|
10
|
+
*
|
|
11
|
+
* `run` and `optimize` are separate commands rather than one flag because the
|
|
12
|
+
* bundle is the handoff. A run costs model time and produces a record worth
|
|
13
|
+
* keeping; reviewing it is a different model, a different prompt, and often a
|
|
14
|
+
* different day. Splitting them means a bundle can be re-reviewed with a better
|
|
15
|
+
* optimizer without paying for the runs again — and that a human can read the
|
|
16
|
+
* transcript before any model proposes anything.
|
|
17
|
+
*
|
|
18
|
+
* `optimize` writes proposals into the bundle. It changes no prompt and no
|
|
19
|
+
* tool; see `packages/agents/src/jtbd/optimize.ts` for why.
|
|
20
|
+
*/
|
|
21
|
+
import type { Command } from "commander";
|
|
22
|
+
type InitializeSecrets = () => Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* The collaborators these subcommands reach for, behind loaders.
|
|
25
|
+
*
|
|
26
|
+
* `@nodetool-ai/agents` is heavy and `nodetool jtbd list` must not pay for it,
|
|
27
|
+
* so production still resolves both lazily through `import()`. Passing them in
|
|
28
|
+
* is what lets a test supply fakes without mocking modules: `typeof import(…)`
|
|
29
|
+
* is a type position, so naming the modules here loads nothing, and `Pick`
|
|
30
|
+
* keeps a double down to the members this file actually calls.
|
|
31
|
+
*/
|
|
32
|
+
export interface JtbdDeps {
|
|
33
|
+
loadAgents: () => Promise<Pick<typeof import("@nodetool-ai/agents"), "JOBS_TO_BE_DONE" | "runJobSuite" | "optimizeFromRun" | "renderRunForReview">>;
|
|
34
|
+
loadProviders: () => Promise<Pick<typeof import("../providers.js"), "createProviderStrict" | "buildConfiguredProviders">>;
|
|
35
|
+
}
|
|
36
|
+
export declare function registerJtbdCommand(program: Command, initializeSecrets: InitializeSecrets, deps?: JtbdDeps): void;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=jtbd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jtbd.d.ts","sourceRoot":"","sources":["../../src/commands/jtbd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BzC,KAAK,iBAAiB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,OAAO,CACvB,IAAI,CACF,cAAc,qBAAqB,CAAC,EACpC,iBAAiB,GAAG,aAAa,GAAG,iBAAiB,GAAG,oBAAoB,CAC7E,CACF,CAAC;IACF,aAAa,EAAE,MAAM,OAAO,CAC1B,IAAI,CACF,cAAc,iBAAiB,CAAC,EAChC,sBAAsB,GAAG,0BAA0B,CACpD,CACF,CAAC;CACH;AAyQD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,GAAE,QAAsB,GAC3B,IAAI,CA0CN"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool jtbd` — run the jobs an agent is asked to get done, and review how
|
|
3
|
+
* the runs went.
|
|
4
|
+
*
|
|
5
|
+
* Three subcommands, one loop:
|
|
6
|
+
*
|
|
7
|
+
* list what jobs exist, what they cross, how hard they are meant to be
|
|
8
|
+
* run drive a model through them and write a bundle per run
|
|
9
|
+
* optimize read those bundles back and propose a fix per run
|
|
10
|
+
*
|
|
11
|
+
* `run` and `optimize` are separate commands rather than one flag because the
|
|
12
|
+
* bundle is the handoff. A run costs model time and produces a record worth
|
|
13
|
+
* keeping; reviewing it is a different model, a different prompt, and often a
|
|
14
|
+
* different day. Splitting them means a bundle can be re-reviewed with a better
|
|
15
|
+
* optimizer without paying for the runs again — and that a human can read the
|
|
16
|
+
* transcript before any model proposes anything.
|
|
17
|
+
*
|
|
18
|
+
* `optimize` writes proposals into the bundle. It changes no prompt and no
|
|
19
|
+
* tool; see `packages/agents/src/jtbd/optimize.ts` for why.
|
|
20
|
+
*/
|
|
21
|
+
import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
|
|
22
|
+
import { join, resolve } from "node:path";
|
|
23
|
+
import { parseNumericOption } from "../numeric-options.js";
|
|
24
|
+
const DEFAULT_OUT = "nodetool-debug/jtbd";
|
|
25
|
+
const defaultDeps = {
|
|
26
|
+
loadAgents: () => import("@nodetool-ai/agents"),
|
|
27
|
+
loadProviders: () => import("../providers.js")
|
|
28
|
+
};
|
|
29
|
+
const slug = (text) => text.replace(/[^a-zA-Z0-9_-]+/g, "-").replace(/^-|-$/g, "");
|
|
30
|
+
async function listJobs(opts, deps) {
|
|
31
|
+
const { JOBS_TO_BE_DONE } = await deps.loadAgents();
|
|
32
|
+
if (opts.json) {
|
|
33
|
+
console.log(JSON.stringify(JOBS_TO_BE_DONE.map((job) => ({
|
|
34
|
+
id: job.id,
|
|
35
|
+
statement: job.statement,
|
|
36
|
+
surfaces: job.surfaces,
|
|
37
|
+
difficulty: job.difficulty,
|
|
38
|
+
objective: job.objective,
|
|
39
|
+
outcomes: job.outcomeNames,
|
|
40
|
+
expectedToolCalls: job.expectedToolCalls
|
|
41
|
+
})), null, 2));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
for (const job of JOBS_TO_BE_DONE) {
|
|
45
|
+
console.log(`${job.id} [${job.difficulty}] ${job.surfaces.join(", ")}`);
|
|
46
|
+
console.log(` ${job.statement}`);
|
|
47
|
+
console.log(` outcomes: ${job.outcomeNames.join(", ")}`);
|
|
48
|
+
console.log("");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* One directory per run, holding the report, the transcript on its own (so a
|
|
53
|
+
* person can read it without wading through JSON), and the friction. The
|
|
54
|
+
* transcript is the artifact the whole loop exists to produce, so it gets its
|
|
55
|
+
* own file rather than living only as a field.
|
|
56
|
+
*/
|
|
57
|
+
async function writeRunBundle(dir, report, deps) {
|
|
58
|
+
const runDir = join(dir, slug(report.jobId));
|
|
59
|
+
await mkdir(runDir, { recursive: true });
|
|
60
|
+
await writeFile(join(runDir, "report.json"), JSON.stringify(report, null, 2), "utf-8");
|
|
61
|
+
const { renderRunForReview } = await deps.loadAgents();
|
|
62
|
+
await writeFile(join(runDir, "review.md"), renderRunForReview(report), "utf-8");
|
|
63
|
+
return runDir;
|
|
64
|
+
}
|
|
65
|
+
async function runJobs(opts, initializeSecrets, deps) {
|
|
66
|
+
if (!opts.provider || !opts.model) {
|
|
67
|
+
console.error("--provider and --model are required");
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
await initializeSecrets();
|
|
72
|
+
const [agents, providersMod] = await Promise.all([
|
|
73
|
+
deps.loadAgents(),
|
|
74
|
+
deps.loadProviders()
|
|
75
|
+
]);
|
|
76
|
+
const { JOBS_TO_BE_DONE, runJobSuite } = agents;
|
|
77
|
+
const ids = opts.jobs
|
|
78
|
+
?.split(",")
|
|
79
|
+
.map((s) => s.trim())
|
|
80
|
+
.filter(Boolean);
|
|
81
|
+
const jobs = ids === undefined
|
|
82
|
+
? JOBS_TO_BE_DONE
|
|
83
|
+
: JOBS_TO_BE_DONE.filter((job) => ids.includes(job.id));
|
|
84
|
+
if (jobs.length === 0) {
|
|
85
|
+
console.error(`No jobs matched ${ids?.join(", ") ?? "(none)"}`);
|
|
86
|
+
process.exitCode = 1;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const provider = await providersMod.createProviderStrict(opts.provider);
|
|
90
|
+
const providers = opts.findModel === false
|
|
91
|
+
? undefined
|
|
92
|
+
: await providersMod.buildConfiguredProviders();
|
|
93
|
+
const runOptions = {
|
|
94
|
+
provider,
|
|
95
|
+
model: opts.model,
|
|
96
|
+
jobs,
|
|
97
|
+
onEvent: (line) => {
|
|
98
|
+
if (!opts.json)
|
|
99
|
+
console.log(line);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
if (providers !== undefined)
|
|
103
|
+
runOptions.providers = providers;
|
|
104
|
+
if (opts.maxIterations !== undefined) {
|
|
105
|
+
runOptions.maxIterations = parseNumericOption(opts.maxIterations, "--max-iterations", { integer: true, min: 1 });
|
|
106
|
+
}
|
|
107
|
+
const report = await runJobSuite(runOptions);
|
|
108
|
+
const outDir = resolve(opts.out ?? DEFAULT_OUT);
|
|
109
|
+
await mkdir(outDir, { recursive: true });
|
|
110
|
+
for (const run of report.jobs) {
|
|
111
|
+
if (run.skipped)
|
|
112
|
+
continue;
|
|
113
|
+
await writeRunBundle(outDir, run, deps);
|
|
114
|
+
}
|
|
115
|
+
await writeFile(join(outDir, "suite.json"), JSON.stringify(report, null, 2), "utf-8");
|
|
116
|
+
if (opts.json) {
|
|
117
|
+
console.log(JSON.stringify(report, null, 2));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
printSuite(report, outDir);
|
|
121
|
+
}
|
|
122
|
+
if (opts.minAchieved !== undefined) {
|
|
123
|
+
const threshold = parseNumericOption(opts.minAchieved, "--min-achieved", {
|
|
124
|
+
min: 0,
|
|
125
|
+
max: 1
|
|
126
|
+
});
|
|
127
|
+
if (report.summary.achievementRate < threshold) {
|
|
128
|
+
console.error(`Achievement rate ${report.summary.achievementRate.toFixed(2)} is below --min-achieved ${threshold}`);
|
|
129
|
+
process.exitCode = 1;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function printSuite(report, outDir) {
|
|
134
|
+
const { summary } = report;
|
|
135
|
+
console.log("");
|
|
136
|
+
console.log(`${report.provider}/${report.model}`);
|
|
137
|
+
for (const run of report.jobs) {
|
|
138
|
+
if (run.skipped) {
|
|
139
|
+
console.log(` ‑ ${run.jobId}: skipped (needs model providers)`);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const failed = run.outcomes.filter((o) => !o.passed).map((o) => o.name);
|
|
143
|
+
console.log(` ${run.achieved ? "✔" : "✘"} ${run.jobId}: ${run.totalToolCalls} calls` +
|
|
144
|
+
(failed.length > 0 ? `, missed ${failed.join(", ")}` : ""));
|
|
145
|
+
for (const signal of run.friction) {
|
|
146
|
+
console.log(` ⚠ [${signal.owner}] ${signal.summary}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
console.log("");
|
|
150
|
+
console.log(`achieved ${summary.achieved}/${summary.total - summary.skipped}` +
|
|
151
|
+
` (${(summary.achievementRate * 100).toFixed(0)}%)` +
|
|
152
|
+
` friction: ${summary.frictionByOwner.harness} harness,` +
|
|
153
|
+
` ${summary.frictionByOwner.prompt} prompt,` +
|
|
154
|
+
` ${summary.frictionByOwner.unattributed} unattributed` +
|
|
155
|
+
` $${summary.totalCostUsd.toFixed(4)}`);
|
|
156
|
+
console.log(`bundle: ${outDir}`);
|
|
157
|
+
}
|
|
158
|
+
/** Every `report.json` under the bundle directory, one per job run. */
|
|
159
|
+
async function loadRunReports(dir) {
|
|
160
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
161
|
+
const reports = [];
|
|
162
|
+
for (const entry of entries) {
|
|
163
|
+
if (!entry.isDirectory())
|
|
164
|
+
continue;
|
|
165
|
+
const path = join(dir, entry.name, "report.json");
|
|
166
|
+
try {
|
|
167
|
+
reports.push(JSON.parse(await readFile(path, "utf-8")));
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// A directory without a readable report is not a run bundle. Skipping it
|
|
171
|
+
// is right: the bundle dir is a normal folder a user may keep notes in.
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return reports;
|
|
175
|
+
}
|
|
176
|
+
async function optimizeRuns(opts, initializeSecrets, deps) {
|
|
177
|
+
if (!opts.provider || !opts.model) {
|
|
178
|
+
console.error("--provider and --model are required");
|
|
179
|
+
process.exitCode = 1;
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
await initializeSecrets();
|
|
183
|
+
const dir = resolve(opts.bundle ?? DEFAULT_OUT);
|
|
184
|
+
const reports = await loadRunReports(dir);
|
|
185
|
+
if (reports.length === 0) {
|
|
186
|
+
console.error(`No run bundles found under ${dir} — run \`nodetool jtbd run\` first`);
|
|
187
|
+
process.exitCode = 1;
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const [{ optimizeFromRun }, providersMod] = await Promise.all([
|
|
191
|
+
deps.loadAgents(),
|
|
192
|
+
deps.loadProviders()
|
|
193
|
+
]);
|
|
194
|
+
const provider = await providersMod.createProviderStrict(opts.provider);
|
|
195
|
+
const selected = opts.all === true ? reports : reports.filter((r) => !r.achieved || r.friction.length > 0);
|
|
196
|
+
if (selected.length === 0) {
|
|
197
|
+
console.log("Every run was clean — nothing to review. Use --all to review anyway.");
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const results = [];
|
|
201
|
+
for (const report of selected) {
|
|
202
|
+
if (!opts.json)
|
|
203
|
+
console.log(`▶ reviewing ${report.jobId}`);
|
|
204
|
+
const optimization = await optimizeFromRun(report, {
|
|
205
|
+
provider,
|
|
206
|
+
model: opts.model
|
|
207
|
+
});
|
|
208
|
+
results.push(optimization);
|
|
209
|
+
await writeFile(join(dir, slug(report.jobId), "proposals.json"), JSON.stringify(optimization, null, 2), "utf-8");
|
|
210
|
+
if (opts.json)
|
|
211
|
+
continue;
|
|
212
|
+
if (optimization.error !== undefined) {
|
|
213
|
+
console.log(` ! review failed: ${optimization.error}`);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (optimization.proposals.length === 0) {
|
|
217
|
+
console.log(" (nothing worth changing)");
|
|
218
|
+
}
|
|
219
|
+
for (const proposal of optimization.proposals) {
|
|
220
|
+
console.log(` [${proposal.owner}] ${proposal.target} (confidence ${proposal.confidence.toFixed(2)})`);
|
|
221
|
+
console.log(` ${proposal.diagnosis}`);
|
|
222
|
+
console.log(` → ${proposal.change}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (opts.json)
|
|
226
|
+
console.log(JSON.stringify(results, null, 2));
|
|
227
|
+
else
|
|
228
|
+
console.log(`\nproposals written under ${dir}`);
|
|
229
|
+
}
|
|
230
|
+
export function registerJtbdCommand(program, initializeSecrets, deps = defaultDeps) {
|
|
231
|
+
const cmd = program
|
|
232
|
+
.command("jtbd")
|
|
233
|
+
.description("Jobs to be done: run end-to-end agent jobs, record the transcripts, and review how they went");
|
|
234
|
+
cmd
|
|
235
|
+
.command("list")
|
|
236
|
+
.description("List the jobs, the surfaces they cross, and their outcomes")
|
|
237
|
+
.option("--json", "Print as JSON")
|
|
238
|
+
.action((opts) => listJobs(opts, deps));
|
|
239
|
+
cmd
|
|
240
|
+
.command("run")
|
|
241
|
+
.description("Drive a model through the jobs and write a bundle per run")
|
|
242
|
+
.option("-p, --provider <id>", "Provider id (anthropic, openai, ollama, ...)")
|
|
243
|
+
.option("-m, --model <id>", "Model id for the provider")
|
|
244
|
+
.option("--jobs <ids>", "Comma-separated job ids (default: all; see list)")
|
|
245
|
+
.option("--out <dir>", `Bundle directory (default ${DEFAULT_OUT})`)
|
|
246
|
+
.option("--max-iterations <n>", "Turn cap per job when the job declares none")
|
|
247
|
+
.option("--min-achieved <rate>", "Exit non-zero when the achievement rate is below this threshold (0..1)")
|
|
248
|
+
.option("--no-find-model", "Run without configured model providers")
|
|
249
|
+
.option("--json", "Print the full report as JSON")
|
|
250
|
+
.action((opts) => runJobs(opts, initializeSecrets, deps));
|
|
251
|
+
cmd
|
|
252
|
+
.command("optimize")
|
|
253
|
+
.description("Review recorded runs and propose a harness or prompt fix per run (writes proposals; changes nothing)")
|
|
254
|
+
.option("-p, --provider <id>", "Reviewing provider — use a different one than ran the jobs")
|
|
255
|
+
.option("-m, --model <id>", "Reviewing model id")
|
|
256
|
+
.option("--bundle <dir>", `Bundle directory to review (default ${DEFAULT_OUT})`)
|
|
257
|
+
.option("--all", "Review clean runs too, not just failures and friction")
|
|
258
|
+
.option("--json", "Print the proposals as JSON")
|
|
259
|
+
.action((opts) => optimizeRuns(opts, initializeSecrets, deps));
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=jtbd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jtbd.js","sourceRoot":"","sources":["../../src/commands/jtbd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local single-user DB bootstrap for CLI commands that run in-process rather
|
|
3
|
+
* than against a running server. Mirrors the `setupDb` in nodetool.ts (secrets
|
|
4
|
+
* commands) without pulling in the heavy deploy stack.
|
|
5
|
+
*/
|
|
6
|
+
/** Local single-user id used across the TS stack. */
|
|
7
|
+
export declare const LOCAL_USER_ID = "1";
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the local SQLite DB and best-effort unlock the secret store
|
|
10
|
+
* (needed for any provider that resolves API keys, e.g. embeddings). If the
|
|
11
|
+
* store can't be unlocked it warns to stderr and still resolves — a command
|
|
12
|
+
* that then needs a secret fails at that later point, so the DB stays usable
|
|
13
|
+
* for commands that don't. Idempotent.
|
|
14
|
+
*/
|
|
15
|
+
export declare function setupLocalDb(): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=local-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-db.d.ts","sourceRoot":"","sources":["../../src/commands/local-db.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,qDAAqD;AACrD,eAAO,MAAM,aAAa,MAAM,CAAC;AAIjC;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAc5C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local single-user DB bootstrap for CLI commands that run in-process rather
|
|
3
|
+
* than against a running server. Mirrors the `setupDb` in nodetool.ts (secrets
|
|
4
|
+
* commands) without pulling in the heavy deploy stack.
|
|
5
|
+
*/
|
|
6
|
+
import { initDb } from "@nodetool-ai/models";
|
|
7
|
+
import { initMasterKey } from "@nodetool-ai/security";
|
|
8
|
+
import { getDefaultDbPath } from "@nodetool-ai/config";
|
|
9
|
+
/** Local single-user id used across the TS stack. */
|
|
10
|
+
export const LOCAL_USER_ID = "1";
|
|
11
|
+
let ready = null;
|
|
12
|
+
/**
|
|
13
|
+
* Initialize the local SQLite DB and best-effort unlock the secret store
|
|
14
|
+
* (needed for any provider that resolves API keys, e.g. embeddings). If the
|
|
15
|
+
* store can't be unlocked it warns to stderr and still resolves — a command
|
|
16
|
+
* that then needs a secret fails at that later point, so the DB stays usable
|
|
17
|
+
* for commands that don't. Idempotent.
|
|
18
|
+
*/
|
|
19
|
+
export function setupLocalDb() {
|
|
20
|
+
ready ??= (async () => {
|
|
21
|
+
initDb(getDefaultDbPath());
|
|
22
|
+
try {
|
|
23
|
+
await initMasterKey();
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
27
|
+
process.stderr.write(`Could not unlock the secret store: ${msg}\n` +
|
|
28
|
+
`Tip: set SECRETS_MASTER_KEY or grant keychain access.\n`);
|
|
29
|
+
}
|
|
30
|
+
})();
|
|
31
|
+
return ready;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=local-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-db.js","sourceRoot":"","sources":["../../src/commands/local-db.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,IAAI,KAAK,GAAyB,IAAI,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,GAAG,IAAI;gBAC3C,yDAAyD,CAC5D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface MigrateCodeInputsOptions {
|
|
2
|
+
dryRun?: boolean;
|
|
3
|
+
/** Migrate this user's workflows instead of the local user's. */
|
|
4
|
+
userId?: string;
|
|
5
|
+
json?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface MigrateCodeInputsReport {
|
|
8
|
+
workflowsScanned: number;
|
|
9
|
+
codeNodesScanned: number;
|
|
10
|
+
nodesRewritten: number;
|
|
11
|
+
workflowsUpdated: number;
|
|
12
|
+
failed: number;
|
|
13
|
+
entries: Array<{
|
|
14
|
+
workflowId: string;
|
|
15
|
+
workflowName: string;
|
|
16
|
+
nodeId: string;
|
|
17
|
+
rewritten: string[];
|
|
18
|
+
error?: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
export declare function migrateCodeInputs(options?: MigrateCodeInputsOptions): Promise<MigrateCodeInputsReport>;
|
|
22
|
+
export declare function formatMigrateCodeInputsReport(report: MigrateCodeInputsReport, dryRun: boolean): string;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=migrate-code-inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-code-inputs.d.ts","sourceRoot":"","sources":["../../src/commands/migrate-code-inputs.ts"],"names":[],"mappings":"AA2BA,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAsCD,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAmElC;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,OAAO,GACd,MAAM,CAiBR"}
|