@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,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool apps` — application (mini app) bundles from the local database.
|
|
3
|
+
*
|
|
4
|
+
* An ApplicationBundle is one JSON file carrying an app together with the full
|
|
5
|
+
* graph of every workflow its operations bind, so an app ships as a single
|
|
6
|
+
* artifact. Inside the file an operation's `workflowId` is a bundle-local key;
|
|
7
|
+
* importing creates the workflows and rewrites the keys to the new ids.
|
|
8
|
+
*
|
|
9
|
+
* These commands talk to the local DB directly, like `workflows export-bundle`
|
|
10
|
+
* — no running server. The bundle logic itself is pure and lives in
|
|
11
|
+
* `@nodetool-ai/app-runtime`; only the row writing is here.
|
|
12
|
+
*/
|
|
13
|
+
import { applyBundle, bundleFromApplication, parseApplicationBundle, serializeApplicationBundle } from "@nodetool-ai/app-runtime";
|
|
14
|
+
import { Application, Workflow, createStableUuid, createTimeOrderedUuid, releasedApplicationRelease } from "@nodetool-ai/models";
|
|
15
|
+
import { asJson, printTable } from "./output.js";
|
|
16
|
+
import { setupLocalDb, LOCAL_USER_ID } from "./local-db.js";
|
|
17
|
+
function fail(e) {
|
|
18
|
+
console.error(String(e instanceof Error ? e.message : e));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
async function loadApp(id) {
|
|
22
|
+
const app = await Application.findById(id);
|
|
23
|
+
if (!app || app.user_id !== LOCAL_USER_ID) {
|
|
24
|
+
throw new Error(`Application not found: ${id}`);
|
|
25
|
+
}
|
|
26
|
+
return app;
|
|
27
|
+
}
|
|
28
|
+
/** Keep a bundle's default filename from escaping the working directory. */
|
|
29
|
+
function safeFileName(name) {
|
|
30
|
+
return name.replace(/[^A-Za-z0-9._-]+/g, "_").replace(/^[._]+/, "") || "app";
|
|
31
|
+
}
|
|
32
|
+
export function registerAppsCommands(program) {
|
|
33
|
+
const apps = program
|
|
34
|
+
.command("apps")
|
|
35
|
+
.description("Mini app (application) management");
|
|
36
|
+
apps
|
|
37
|
+
.command("list")
|
|
38
|
+
.description("List applications in the local database")
|
|
39
|
+
.option("--json", "Output as JSON")
|
|
40
|
+
.action(async (opts) => {
|
|
41
|
+
try {
|
|
42
|
+
await setupLocalDb();
|
|
43
|
+
const rows = (await Application.listByUser(LOCAL_USER_ID)).map((a) => ({
|
|
44
|
+
id: a.id,
|
|
45
|
+
name: a.name,
|
|
46
|
+
operations: a.toDocument().operations.length,
|
|
47
|
+
updated_at: a.updated_at
|
|
48
|
+
}));
|
|
49
|
+
if (opts.json) {
|
|
50
|
+
asJson(rows);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
printTable(rows, ["id", "name", "operations", "updated_at"]);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
fail(e);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
apps
|
|
60
|
+
.command("export-bundle <application_id>")
|
|
61
|
+
.description("Export an application as a portable bundle: the app document plus the " +
|
|
62
|
+
"full graph of every workflow it binds, in a single JSON file")
|
|
63
|
+
.option("-o, --output <file>", "Output path (default: <name>.app.json)")
|
|
64
|
+
.option("--released", "Export the released snapshot and the graphs it pinned, not the draft")
|
|
65
|
+
.action(async (id, opts) => {
|
|
66
|
+
try {
|
|
67
|
+
const { writeFile } = await import("node:fs/promises");
|
|
68
|
+
await setupLocalDb();
|
|
69
|
+
const app = await loadApp(id);
|
|
70
|
+
const release = opts.released
|
|
71
|
+
? await releasedApplicationRelease(id)
|
|
72
|
+
: null;
|
|
73
|
+
if (opts.released && !release) {
|
|
74
|
+
throw new Error(`Application ${id} has no released version`);
|
|
75
|
+
}
|
|
76
|
+
const document = release ? release.document : app.toDocument();
|
|
77
|
+
const pinned = new Map((release?.workflows ?? []).map((entry) => [entry.workflowId, entry]));
|
|
78
|
+
const sources = [];
|
|
79
|
+
const seen = new Set();
|
|
80
|
+
for (const operation of document.operations) {
|
|
81
|
+
if (seen.has(operation.workflowId))
|
|
82
|
+
continue;
|
|
83
|
+
seen.add(operation.workflowId);
|
|
84
|
+
const pin = pinned.get(operation.workflowId);
|
|
85
|
+
const workflow = await Workflow.find(LOCAL_USER_ID, operation.workflowId);
|
|
86
|
+
const graph = pin?.graph ?? workflow?.getGraph();
|
|
87
|
+
if (!graph) {
|
|
88
|
+
console.error(` warning: operation '${operation.id}' binds missing workflow ` +
|
|
89
|
+
`${operation.workflowId} (left unresolved in the bundle)`);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
sources.push({
|
|
93
|
+
workflowId: operation.workflowId,
|
|
94
|
+
name: workflow?.name ?? operation.name,
|
|
95
|
+
description: workflow?.description ?? "",
|
|
96
|
+
graph,
|
|
97
|
+
version: pin?.version ?? null,
|
|
98
|
+
graphHash: pin?.graphHash ?? null
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const bundle = bundleFromApplication({ name: app.name, description: app.description, document }, sources);
|
|
102
|
+
const outPath = opts.output ?? `${safeFileName(app.name)}.app.json`;
|
|
103
|
+
await writeFile(outPath, serializeApplicationBundle(bundle), "utf8");
|
|
104
|
+
console.error(` bundled ${bundle.workflows.length} workflow(s) with app '${app.name}'`);
|
|
105
|
+
console.log(outPath);
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
fail(e);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
apps
|
|
112
|
+
.command("import-bundle <bundle_file>")
|
|
113
|
+
.description("Import an application bundle into the local library: create its " +
|
|
114
|
+
"workflows and the app, with operations rewired to the new ids")
|
|
115
|
+
.option("--json", "Output the created application as JSON")
|
|
116
|
+
.option("--project <id>", "Project to create the app in", "default")
|
|
117
|
+
.action(async (bundleFile, opts) => {
|
|
118
|
+
try {
|
|
119
|
+
const { readFile } = await import("node:fs/promises");
|
|
120
|
+
await setupLocalDb();
|
|
121
|
+
const bundle = parseApplicationBundle(JSON.parse(await readFile(bundleFile, "utf8")));
|
|
122
|
+
if (!bundle) {
|
|
123
|
+
throw new Error(`Not a valid application bundle: ${bundleFile}`);
|
|
124
|
+
}
|
|
125
|
+
// A workflow carrying a `sourceId` gets a row id derived from it, so
|
|
126
|
+
// importing two bundles that ship the same workflow — two example
|
|
127
|
+
// apps binding one template — reuses the row instead of duplicating
|
|
128
|
+
// it. Without a `sourceId` every import creates fresh workflows.
|
|
129
|
+
const result = applyBundle(bundle, {
|
|
130
|
+
newWorkflowId: (workflow) => workflow.sourceId
|
|
131
|
+
? createStableUuid(LOCAL_USER_ID, workflow.sourceId)
|
|
132
|
+
: createTimeOrderedUuid()
|
|
133
|
+
});
|
|
134
|
+
// Workflows first, so the app never references a row that does not
|
|
135
|
+
// exist yet.
|
|
136
|
+
let reused = 0;
|
|
137
|
+
for (const workflow of result.workflows) {
|
|
138
|
+
if (workflow.sourceId &&
|
|
139
|
+
(await Workflow.find(LOCAL_USER_ID, workflow.id))) {
|
|
140
|
+
reused += 1;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
await Workflow.create({
|
|
144
|
+
id: workflow.id,
|
|
145
|
+
user_id: LOCAL_USER_ID,
|
|
146
|
+
name: workflow.name,
|
|
147
|
+
description: workflow.description ?? "",
|
|
148
|
+
access: "private",
|
|
149
|
+
graph: workflow.graph
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const app = await Application.create({
|
|
153
|
+
user_id: LOCAL_USER_ID,
|
|
154
|
+
project_id: opts.project ?? "default",
|
|
155
|
+
name: result.app.name,
|
|
156
|
+
description: result.app.description,
|
|
157
|
+
document: JSON.stringify(result.app.document)
|
|
158
|
+
});
|
|
159
|
+
console.error(` imported app '${app.name}' with ${result.workflows.length} workflow(s)` +
|
|
160
|
+
(reused > 0 ? ` (${reused} already present, reused)` : ""));
|
|
161
|
+
if (opts.json) {
|
|
162
|
+
asJson({
|
|
163
|
+
id: app.id,
|
|
164
|
+
name: app.name,
|
|
165
|
+
workflows: result.workflows.map((w) => ({
|
|
166
|
+
id: w.id,
|
|
167
|
+
name: w.name
|
|
168
|
+
}))
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.log(app.id);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
fail(e);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=apps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool auth claude` — sign in with a Claude subscription for the Claude
|
|
3
|
+
* Agent provider.
|
|
4
|
+
*
|
|
5
|
+
* Runs the same OAuth flow the `claude` CLI does and writes the tokens to the
|
|
6
|
+
* Claude Agent SDK's credential file (`~/.claude/.credentials.json`), so a
|
|
7
|
+
* NodeTool login and a `claude login` are interchangeable. No database, no
|
|
8
|
+
* server — the SDK reads that file directly.
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from "commander";
|
|
11
|
+
export declare function registerAuthCommands(program: Command): void;
|
|
12
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2I3D"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool auth claude` — sign in with a Claude subscription for the Claude
|
|
3
|
+
* Agent provider.
|
|
4
|
+
*
|
|
5
|
+
* Runs the same OAuth flow the `claude` CLI does and writes the tokens to the
|
|
6
|
+
* Claude Agent SDK's credential file (`~/.claude/.credentials.json`), so a
|
|
7
|
+
* NodeTool login and a `claude login` are interchangeable. No database, no
|
|
8
|
+
* server — the SDK reads that file directly.
|
|
9
|
+
*/
|
|
10
|
+
import { createInterface } from "node:readline";
|
|
11
|
+
import { ClaudeCodeLogin, DefaultBrowserLauncher } from "@nodetool-ai/runtime/oauth";
|
|
12
|
+
import { asJson, printKv } from "./output.js";
|
|
13
|
+
function fail(e) {
|
|
14
|
+
console.error(String(e instanceof Error ? e.message : e));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
/** Read one line from stdin, prompting on stderr so `--json` stays pipeable. */
|
|
18
|
+
async function prompt(question) {
|
|
19
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
20
|
+
try {
|
|
21
|
+
return await new Promise((resolve) => {
|
|
22
|
+
process.stderr.write(question);
|
|
23
|
+
rl.question("", resolve);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
rl.close();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function describeExpiry(expiresAt) {
|
|
31
|
+
if (expiresAt == null)
|
|
32
|
+
return "never";
|
|
33
|
+
return new Date(expiresAt).toISOString();
|
|
34
|
+
}
|
|
35
|
+
export function registerAuthCommands(program) {
|
|
36
|
+
const auth = program
|
|
37
|
+
.command("auth")
|
|
38
|
+
.description("Sign in to providers that use an account instead of an API key");
|
|
39
|
+
const claude = auth
|
|
40
|
+
.command("claude")
|
|
41
|
+
.description("Claude subscription login for the Claude Agent provider");
|
|
42
|
+
claude
|
|
43
|
+
.command("login")
|
|
44
|
+
.description("Sign in with a Claude subscription and store the credentials")
|
|
45
|
+
.option("--console", "Sign in with a Console (API-billed) account")
|
|
46
|
+
.option("--manual", "Skip the loopback listener and paste the code shown in the browser")
|
|
47
|
+
.option("--no-browser", "Print the URL instead of opening a browser")
|
|
48
|
+
.option("--json", "Output as JSON")
|
|
49
|
+
.action(async (opts) => {
|
|
50
|
+
const login = new ClaudeCodeLogin();
|
|
51
|
+
try {
|
|
52
|
+
const pending = await login.begin({
|
|
53
|
+
loginMethod: opts.console ? "console" : "claude-ai",
|
|
54
|
+
manualOnly: opts.manual
|
|
55
|
+
});
|
|
56
|
+
const url = pending.authUrl ?? pending.manualAuthUrl;
|
|
57
|
+
if (opts.browser !== false) {
|
|
58
|
+
await new DefaultBrowserLauncher().open(url).catch(() => {
|
|
59
|
+
// No browser on this host — the printed URL is the fallback.
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
process.stderr.write(`\nOpen this URL to sign in:\n\n ${url}\n\n`);
|
|
63
|
+
let credentials;
|
|
64
|
+
if (pending.authUrl) {
|
|
65
|
+
process.stderr.write("Waiting for the browser to redirect back (Ctrl-C to cancel)...\n");
|
|
66
|
+
credentials = await pending.waitForRedirect();
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const code = await prompt("Paste the code shown in the browser > ");
|
|
70
|
+
credentials = await pending.completeWithPastedCode(code);
|
|
71
|
+
}
|
|
72
|
+
const summary = {
|
|
73
|
+
connected: true,
|
|
74
|
+
subscription_type: credentials.subscriptionType,
|
|
75
|
+
scopes: credentials.scopes.join(" "),
|
|
76
|
+
expires_at: describeExpiry(credentials.expiresAt),
|
|
77
|
+
credentials_path: login.credentialsPath
|
|
78
|
+
};
|
|
79
|
+
if (opts.json) {
|
|
80
|
+
asJson(summary);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
console.log("\nSigned in to Claude.");
|
|
84
|
+
printKv(summary);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
fail(e);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
claude
|
|
91
|
+
.command("status")
|
|
92
|
+
.description("Show whether Claude subscription credentials are stored")
|
|
93
|
+
.option("--json", "Output as JSON")
|
|
94
|
+
.action(async (opts) => {
|
|
95
|
+
try {
|
|
96
|
+
const status = await new ClaudeCodeLogin().status();
|
|
97
|
+
const summary = {
|
|
98
|
+
connected: status.connected,
|
|
99
|
+
expired: status.expired,
|
|
100
|
+
subscription_type: status.subscriptionType,
|
|
101
|
+
rate_limit_tier: status.rateLimitTier,
|
|
102
|
+
scopes: status.scopes.join(" "),
|
|
103
|
+
expires_at: describeExpiry(status.expiresAt),
|
|
104
|
+
credentials_path: status.credentialsPath
|
|
105
|
+
};
|
|
106
|
+
if (opts.json) {
|
|
107
|
+
asJson(summary);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!status.connected) {
|
|
111
|
+
console.log(`Not signed in. Run 'nodetool auth claude login'. (${status.credentialsPath})`);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
printKv(summary);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
fail(e);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
claude
|
|
121
|
+
.command("refresh")
|
|
122
|
+
.description("Refresh the stored access token")
|
|
123
|
+
.option("--force", "Refresh even when the current token is still valid")
|
|
124
|
+
.option("--json", "Output as JSON")
|
|
125
|
+
.action(async (opts) => {
|
|
126
|
+
try {
|
|
127
|
+
const credentials = await new ClaudeCodeLogin().refresh({
|
|
128
|
+
force: opts.force
|
|
129
|
+
});
|
|
130
|
+
const summary = { expires_at: describeExpiry(credentials.expiresAt) };
|
|
131
|
+
if (opts.json) {
|
|
132
|
+
asJson(summary);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
printKv(summary);
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
fail(e);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
claude
|
|
142
|
+
.command("logout")
|
|
143
|
+
.description("Remove the stored Claude subscription credentials")
|
|
144
|
+
.action(async () => {
|
|
145
|
+
try {
|
|
146
|
+
const removed = await new ClaudeCodeLogin().logout();
|
|
147
|
+
console.log(removed ? "Signed out of Claude." : "No stored Claude credentials.");
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
fail(e);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool collections` — manage RAG vector-store collections.
|
|
3
|
+
*
|
|
4
|
+
* Runs in-process against the default vector provider (sqlite-vec unless
|
|
5
|
+
* NODETOOL_VECTOR_PROVIDER points elsewhere), so it works without a running
|
|
6
|
+
* server. Indexing chunks documents with the same splitter the server uses.
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from "commander";
|
|
9
|
+
export declare function registerCollectionCommands(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=collections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/commands/collections.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCzC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoPjE"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nodetool collections` — manage RAG vector-store collections.
|
|
3
|
+
*
|
|
4
|
+
* Runs in-process against the default vector provider (sqlite-vec unless
|
|
5
|
+
* NODETOOL_VECTOR_PROVIDER points elsewhere), so it works without a running
|
|
6
|
+
* server. Indexing chunks documents with the same splitter the server uses.
|
|
7
|
+
*/
|
|
8
|
+
import { readFile } from "node:fs/promises";
|
|
9
|
+
import { basename } from "node:path";
|
|
10
|
+
import { getDefaultVectorProvider, splitDocument, CollectionNotFoundError } from "@nodetool-ai/vectorstore";
|
|
11
|
+
import { Workflow } from "@nodetool-ai/models";
|
|
12
|
+
import { asJson, printTable, printKv, confirm } from "./output.js";
|
|
13
|
+
import { setupLocalDb } from "./local-db.js";
|
|
14
|
+
import { isNonEmptyString } from "../predicates.js";
|
|
15
|
+
function fail(e) {
|
|
16
|
+
if (e instanceof CollectionNotFoundError) {
|
|
17
|
+
console.error(e.message);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
console.error(String(e instanceof Error ? e.message : e));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
/** Resolve a workflow's name from an id, forgivingly (null on any failure). */
|
|
24
|
+
async function workflowName(id) {
|
|
25
|
+
if (!isNonEmptyString(id)) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const wf = (await Workflow.get(id));
|
|
30
|
+
return wf?.name ?? null;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function registerCollectionCommands(program) {
|
|
37
|
+
const collections = program
|
|
38
|
+
.command("collections")
|
|
39
|
+
.description("Manage RAG vector-store collections");
|
|
40
|
+
collections
|
|
41
|
+
.command("list")
|
|
42
|
+
.description("List collections with document counts")
|
|
43
|
+
.option("--json", "Output as JSON")
|
|
44
|
+
.action(async (opts) => {
|
|
45
|
+
try {
|
|
46
|
+
await setupLocalDb();
|
|
47
|
+
const provider = getDefaultVectorProvider();
|
|
48
|
+
const infos = await provider.listCollections();
|
|
49
|
+
const rows = [];
|
|
50
|
+
for (const info of infos) {
|
|
51
|
+
try {
|
|
52
|
+
const collection = await provider.getCollection({ name: info.name });
|
|
53
|
+
const count = await collection.count();
|
|
54
|
+
const metadata = info.metadata ?? {};
|
|
55
|
+
rows.push({
|
|
56
|
+
name: info.name,
|
|
57
|
+
count,
|
|
58
|
+
embedding_model: metadata["embedding_model"] ?? "",
|
|
59
|
+
workflow: (await workflowName(metadata["workflow"])) ?? ""
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
// A collection can race a delete between listCollections() and
|
|
64
|
+
// getCollection(); skip only that. Surface anything else (corrupt
|
|
65
|
+
// collection, provider failure) instead of hiding it.
|
|
66
|
+
if (!(err instanceof CollectionNotFoundError)) {
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (opts.json) {
|
|
72
|
+
asJson(rows);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
printTable(rows);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
fail(e);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
collections
|
|
82
|
+
.command("get <name>")
|
|
83
|
+
.description("Show a collection's metadata and document count")
|
|
84
|
+
.option("--json", "Output as JSON")
|
|
85
|
+
.action(async (name, opts) => {
|
|
86
|
+
try {
|
|
87
|
+
await setupLocalDb();
|
|
88
|
+
const collection = await getDefaultVectorProvider().getCollection({
|
|
89
|
+
name
|
|
90
|
+
});
|
|
91
|
+
const count = await collection.count();
|
|
92
|
+
const metadata = collection.metadata ?? {};
|
|
93
|
+
if (opts.json) {
|
|
94
|
+
asJson({ name: collection.name, count, metadata });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
printKv({ name: collection.name, count, ...metadata });
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
fail(e);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
collections
|
|
104
|
+
.command("create <name>")
|
|
105
|
+
.description("Create a collection")
|
|
106
|
+
.option("--embedding-model <model>", "Embedding model id")
|
|
107
|
+
.option("--embedding-provider <provider>", "Embedding provider id")
|
|
108
|
+
.option("--json", "Output as JSON")
|
|
109
|
+
.action(async (name, opts) => {
|
|
110
|
+
try {
|
|
111
|
+
await setupLocalDb();
|
|
112
|
+
const metadata = {};
|
|
113
|
+
if (opts.embeddingModel) {
|
|
114
|
+
metadata["embedding_model"] = opts.embeddingModel;
|
|
115
|
+
}
|
|
116
|
+
if (opts.embeddingProvider) {
|
|
117
|
+
metadata["embedding_provider"] = opts.embeddingProvider;
|
|
118
|
+
}
|
|
119
|
+
const collection = await getDefaultVectorProvider().createCollection({
|
|
120
|
+
name,
|
|
121
|
+
metadata
|
|
122
|
+
});
|
|
123
|
+
if (opts.json) {
|
|
124
|
+
asJson({ name: collection.name, metadata: collection.metadata });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
console.log(`Created collection '${collection.name}'.`);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
fail(e);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
collections
|
|
134
|
+
.command("delete <name>")
|
|
135
|
+
.description("Delete a collection and all its documents")
|
|
136
|
+
.option("-y, --yes", "Skip the confirmation prompt")
|
|
137
|
+
.option("--json", "Output as JSON")
|
|
138
|
+
.action(async (name, opts) => {
|
|
139
|
+
try {
|
|
140
|
+
const ok = await confirm(`Delete collection '${name}' and all its documents?`, { force: opts.yes });
|
|
141
|
+
if (!ok) {
|
|
142
|
+
if (opts.json) {
|
|
143
|
+
asJson({ deleted: false, aborted: true });
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.error("Aborted.");
|
|
147
|
+
}
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
await setupLocalDb();
|
|
151
|
+
await getDefaultVectorProvider().deleteCollection(name);
|
|
152
|
+
const message = `Collection ${name} deleted successfully`;
|
|
153
|
+
if (opts.json) {
|
|
154
|
+
asJson({ message });
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
console.log(message);
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
fail(e);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
collections
|
|
164
|
+
.command("query <name> <text...>")
|
|
165
|
+
.description("Semantic search over a collection")
|
|
166
|
+
.option("-n, --n-results <n>", "Number of results", "10")
|
|
167
|
+
.option("--json", "Output as JSON")
|
|
168
|
+
.action(async (name, text, opts) => {
|
|
169
|
+
const nResults = Number.parseInt(opts.nResults, 10);
|
|
170
|
+
if (!Number.isFinite(nResults) || nResults <= 0) {
|
|
171
|
+
console.error(`Invalid --n-results value: ${opts.nResults}`);
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
await setupLocalDb();
|
|
176
|
+
const collection = await getDefaultVectorProvider().getCollection({
|
|
177
|
+
name
|
|
178
|
+
});
|
|
179
|
+
const matches = await collection.query({
|
|
180
|
+
text: text.join(" "),
|
|
181
|
+
topK: nResults
|
|
182
|
+
});
|
|
183
|
+
if (opts.json) {
|
|
184
|
+
asJson(matches);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (matches.length === 0) {
|
|
188
|
+
console.log("(no matches)");
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
printTable(matches.map((m) => ({
|
|
192
|
+
id: m.id,
|
|
193
|
+
distance: m.distance?.toFixed(4) ?? "",
|
|
194
|
+
document: (m.document ?? "").replace(/\s+/g, " ").slice(0, 80)
|
|
195
|
+
})));
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
fail(e);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
collections
|
|
202
|
+
.command("index <name> <file...>")
|
|
203
|
+
.description("Chunk and index one or more text documents into a collection")
|
|
204
|
+
.option("--json", "Output as JSON")
|
|
205
|
+
.action(async (name, files, opts) => {
|
|
206
|
+
try {
|
|
207
|
+
await setupLocalDb();
|
|
208
|
+
const collection = await getDefaultVectorProvider().getCollection({
|
|
209
|
+
name
|
|
210
|
+
});
|
|
211
|
+
const results = [];
|
|
212
|
+
for (const file of files) {
|
|
213
|
+
try {
|
|
214
|
+
const text = await readFile(file, "utf8");
|
|
215
|
+
const fileName = basename(file);
|
|
216
|
+
const chunks = splitDocument(text, fileName);
|
|
217
|
+
if (chunks.length > 0) {
|
|
218
|
+
// Derive the record-id prefix from the full path (sanitized) so
|
|
219
|
+
// two files with the same basename (a/foo.txt, b/foo.txt) don't
|
|
220
|
+
// collide and overwrite each other's chunks. Re-indexing the same
|
|
221
|
+
// path stays idempotent.
|
|
222
|
+
const idPrefix = file.replace(/[^A-Za-z0-9._-]+/g, "_");
|
|
223
|
+
await collection.upsert(chunks.map((c, i) => ({
|
|
224
|
+
id: `${idPrefix}#${i}`,
|
|
225
|
+
document: c.text,
|
|
226
|
+
metadata: {
|
|
227
|
+
source: file,
|
|
228
|
+
start_index: String(c.start_index)
|
|
229
|
+
}
|
|
230
|
+
})));
|
|
231
|
+
}
|
|
232
|
+
results.push({ file, chunks: chunks.length, error: "" });
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
results.push({
|
|
236
|
+
file,
|
|
237
|
+
chunks: 0,
|
|
238
|
+
error: String(e instanceof Error ? e.message : e)
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (opts.json) {
|
|
243
|
+
asJson(results);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
printTable(results);
|
|
247
|
+
}
|
|
248
|
+
if (results.some((r) => r.error)) {
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (e) {
|
|
253
|
+
fail(e);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=collections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/commands/collections.ts"],"names":[],"mappings":"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"}
|