@qvac/harness 1.0.0-rc.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1168 -1
- package/NOTICE.md +16 -0
- package/README.md +278 -471
- package/dist-lib/index.d.ts +101 -169
- package/dist-lib/index.js +423 -1506
- package/dist-lib/lib/addon-seal.bare.d.ts +1 -0
- package/dist-lib/lib/addon-seal.bare.js +3 -0
- package/dist-lib/lib/addon-seal.node.d.ts +1 -0
- package/dist-lib/lib/addon-seal.node.js +1 -0
- package/dist-lib/lib/agent/delegate.d.ts +83 -0
- package/dist-lib/lib/agent/delegate.js +261 -0
- package/dist-lib/lib/agent/follow.d.ts +32 -0
- package/dist-lib/lib/agent/follow.js +162 -0
- package/dist-lib/lib/agent/index.d.ts +37 -0
- package/dist-lib/lib/agent/index.js +42 -0
- package/dist-lib/lib/agent/plan.d.ts +6 -0
- package/dist-lib/lib/agent/plan.js +74 -0
- package/dist-lib/lib/agent/resolve.d.ts +3 -0
- package/dist-lib/lib/agent/resolve.js +78 -0
- package/dist-lib/lib/{capabilities → agent}/tool-names.d.ts +0 -1
- package/dist-lib/lib/{capabilities → agent}/tool-names.js +0 -1
- package/dist-lib/lib/{capabilities → agent}/tool-selection.d.ts +3 -6
- package/dist-lib/lib/{capabilities → agent}/tool-selection.js +9 -1
- package/dist-lib/lib/agent/tools.d.ts +14 -0
- package/dist-lib/lib/agent/tools.js +16 -0
- package/dist-lib/lib/agent/transfer.d.ts +7 -0
- package/dist-lib/lib/agent/transfer.js +26 -0
- package/dist-lib/lib/capabilities/agent-ports.d.ts +3 -0
- package/dist-lib/lib/capabilities/agent-ports.js +9 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/answering.d.ts +1 -1
- package/dist-lib/lib/capabilities/completion-engine/actors/answering.js +25 -9
- package/dist-lib/lib/capabilities/completion-engine/actors/batching.d.ts +3 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/batching.js +90 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/direct-search.d.ts +2 -1
- package/dist-lib/lib/capabilities/completion-engine/actors/direct-search.js +14 -5
- package/dist-lib/lib/capabilities/completion-engine/actors/execute.d.ts +5 -3
- package/dist-lib/lib/capabilities/completion-engine/actors/execute.js +8 -3
- package/dist-lib/lib/capabilities/completion-engine/actors/executing.d.ts +29 -2
- package/dist-lib/lib/capabilities/completion-engine/actors/executing.js +100 -40
- package/dist-lib/lib/capabilities/completion-engine/actors/execution-plan.d.ts +11 -10
- package/dist-lib/lib/capabilities/completion-engine/actors/execution-plan.js +28 -21
- package/dist-lib/lib/capabilities/completion-engine/actors/finishing.js +2 -2
- package/dist-lib/lib/capabilities/completion-engine/actors/inspect-prepare.d.ts +4 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/inspect-prepare.js +67 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/inspecting.d.ts +10 -3
- package/dist-lib/lib/capabilities/completion-engine/actors/inspecting.js +14 -11
- package/dist-lib/lib/capabilities/completion-engine/actors/loading-skill.d.ts +7 -3
- package/dist-lib/lib/capabilities/completion-engine/actors/loading-skill.js +30 -31
- package/dist-lib/lib/capabilities/completion-engine/actors/preparing.d.ts +3 -2
- package/dist-lib/lib/capabilities/completion-engine/actors/preparing.js +86 -102
- package/dist-lib/lib/capabilities/completion-engine/actors/rejecting.d.ts +1 -1
- package/dist-lib/lib/capabilities/completion-engine/actors/rejecting.js +24 -7
- package/dist-lib/lib/capabilities/completion-engine/actors/rejection.d.ts +4 -2
- package/dist-lib/lib/capabilities/completion-engine/actors/rejection.js +8 -8
- package/dist-lib/lib/capabilities/completion-engine/actors/resolving.d.ts +1 -1
- package/dist-lib/lib/capabilities/completion-engine/actors/resolving.js +73 -15
- package/dist-lib/lib/capabilities/completion-engine/actors/retrieving.d.ts +10 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/retrieving.js +56 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/run-prepare.d.ts +4 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/run-prepare.js +74 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/skill-step.d.ts +2 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/skill-step.js +76 -0
- package/dist-lib/lib/capabilities/completion-engine/actors/stream.d.ts +2 -2
- package/dist-lib/lib/capabilities/completion-engine/actors/stream.js +2 -1
- package/dist-lib/lib/capabilities/completion-engine/actors/streaming.d.ts +1 -1
- package/dist-lib/lib/capabilities/completion-engine/actors/streaming.js +84 -26
- package/dist-lib/lib/capabilities/completion-engine/actors/wrap-up.d.ts +1 -1
- package/dist-lib/lib/capabilities/completion-engine/actors/wrap-up.js +16 -6
- package/dist-lib/lib/capabilities/completion-engine/actors.d.ts +11 -0
- package/dist-lib/lib/capabilities/completion-engine/actors.js +216 -0
- package/dist-lib/lib/capabilities/completion-engine/driver.d.ts +12 -5
- package/dist-lib/lib/capabilities/completion-engine/driver.js +118 -33
- package/dist-lib/lib/capabilities/completion-engine/durable.d.ts +2 -1
- package/dist-lib/lib/capabilities/completion-engine/durable.js +6 -4
- package/dist-lib/lib/capabilities/completion-engine/engine.d.ts +65 -0
- package/dist-lib/lib/{machine → capabilities/completion-engine}/engine.js +67 -130
- package/dist-lib/lib/capabilities/completion-engine/index.d.ts +30 -0
- package/dist-lib/lib/capabilities/completion-engine/index.js +44 -0
- package/dist-lib/lib/capabilities/completion-engine/loop.d.ts +58 -0
- package/dist-lib/lib/capabilities/completion-engine/loop.js +62 -0
- package/dist-lib/lib/capabilities/completion-engine/metrics.d.ts +4 -0
- package/dist-lib/lib/capabilities/completion-engine/metrics.js +46 -0
- package/dist-lib/lib/capabilities/completion-engine/operations.d.ts +5 -2
- package/dist-lib/lib/capabilities/completion-engine/operations.js +84 -15
- package/dist-lib/lib/capabilities/completion-engine/ports.d.ts +25 -2
- package/dist-lib/lib/capabilities/completion-engine/ports.js +25 -16
- package/dist-lib/lib/capabilities/completion-engine/prepare-step.d.ts +26 -0
- package/dist-lib/lib/{machine → capabilities/completion-engine}/replay-output.d.ts +1 -1
- package/dist-lib/lib/{machine → capabilities/completion-engine}/replay-output.js +1 -1
- package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/round.d.ts +24 -4
- package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/round.js +242 -27
- package/dist-lib/lib/capabilities/completion-engine/session.d.ts +19 -12
- package/dist-lib/lib/capabilities/completion-engine/session.js +12 -6
- package/dist-lib/lib/capabilities/completion-engine/splice.d.ts +2 -0
- package/dist-lib/lib/capabilities/completion-engine/splice.js +7 -0
- package/dist-lib/lib/capabilities/completion-engine/stages.d.ts +23 -0
- package/dist-lib/lib/capabilities/completion-engine/tool-caller.d.ts +10 -0
- package/dist-lib/lib/capabilities/completion-engine/tool-caller.js +151 -0
- package/dist-lib/lib/capabilities/completion-engine/tool-execution.d.ts +77 -0
- package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/tool-execution.js +74 -25
- package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/turns.d.ts +8 -4
- package/dist-lib/lib/capabilities/completion-engine/turns.js +225 -0
- package/dist-lib/lib/capabilities/enhance.d.ts +1 -1
- package/dist-lib/lib/capabilities/enhance.js +3 -2
- package/dist-lib/lib/capabilities/invoke.d.ts +1 -1
- package/dist-lib/lib/capabilities/preview-model-source.d.ts +1 -10
- package/dist-lib/lib/capabilities/preview-model-source.js +3 -1
- package/dist-lib/lib/capabilities/sdk-tool.d.ts +10 -0
- package/dist-lib/lib/capabilities/sdk-tool.js +130 -0
- package/dist-lib/lib/capabilities/skill-entry.d.ts +8 -0
- package/dist-lib/lib/capabilities/skill-entry.js +14 -0
- package/dist-lib/lib/capabilities/tool-plan.d.ts +6 -5
- package/dist-lib/lib/capabilities/tool-plan.js +16 -10
- package/dist-lib/lib/capabilities/tool-turns.d.ts +29 -4
- package/dist-lib/lib/capabilities/tool-turns.js +120 -10
- package/dist-lib/lib/capabilities/usage-breakdown.d.ts +1 -1
- package/dist-lib/lib/capabilities/usage-breakdown.js +4 -1
- package/dist-lib/lib/connect.d.ts +6 -0
- package/dist-lib/lib/connect.js +153 -65
- package/dist-lib/lib/context-window.d.ts +4 -2
- package/dist-lib/lib/context-window.js +27 -16
- package/dist-lib/lib/contract/agent.d.ts +65 -0
- package/dist-lib/lib/{capabilities/types.d.ts → contract/completion.d.ts} +140 -26
- package/dist-lib/lib/contract/exec.d.ts +134 -0
- package/dist-lib/lib/{hooks/types.d.ts → contract/hooks.d.ts} +62 -10
- package/dist-lib/lib/contract/index.d.ts +5 -0
- package/dist-lib/lib/contract/knowledge.d.ts +60 -0
- package/dist-lib/lib/contract/knowledge.js +1 -0
- package/dist-lib/lib/contract/models.d.ts +56 -0
- package/dist-lib/lib/contract/models.js +1 -0
- package/dist-lib/lib/contract/run.d.ts +142 -0
- package/dist-lib/lib/contract/run.js +1 -0
- package/dist-lib/lib/contract/sandbox.d.ts +29 -0
- package/dist-lib/lib/contract/sandbox.js +1 -0
- package/dist-lib/lib/contract/skill-readiness.d.ts +14 -0
- package/dist-lib/lib/contract/skill-readiness.js +1 -0
- package/dist-lib/lib/{capabilities/voice.d.ts → contract/speech.d.ts} +11 -16
- package/dist-lib/lib/contract/speech.js +1 -0
- package/dist-lib/lib/contract-types.d.ts +43 -16
- package/dist-lib/lib/docx/index.d.ts +0 -1
- package/dist-lib/lib/docx/index.js +15 -24
- package/dist-lib/lib/embeddings/index.d.ts +63 -0
- package/dist-lib/lib/embeddings/index.js +267 -0
- package/dist-lib/lib/fold/index.d.ts +50 -0
- package/dist-lib/lib/fold/index.js +123 -0
- package/dist-lib/lib/{tools/exec/adapters/python/guarded-fetch.d.ts → guarded-fetch.d.ts} +5 -12
- package/dist-lib/lib/{tools/exec/adapters/python/guarded-fetch.js → guarded-fetch.js} +12 -34
- package/dist-lib/lib/helpers/completion-params.d.ts +3 -0
- package/dist-lib/lib/helpers/completion-params.js +12 -0
- package/dist-lib/lib/helpers/copy.d.ts +1 -0
- package/dist-lib/lib/helpers/copy.js +5 -0
- package/dist-lib/lib/helpers/drain.d.ts +5 -0
- package/dist-lib/lib/helpers/drain.js +19 -0
- package/dist-lib/lib/{machine/errors.d.ts → helpers/engine-error.d.ts} +6 -9
- package/dist-lib/lib/{machine/errors.js → helpers/engine-error.js} +9 -25
- package/dist-lib/lib/helpers/failure-result.d.ts +21 -0
- package/dist-lib/lib/helpers/failure-result.js +39 -0
- package/dist-lib/lib/helpers/head-tail.d.ts +7 -0
- package/dist-lib/lib/helpers/head-tail.js +19 -0
- package/dist-lib/lib/helpers/image-settings.d.ts +2 -0
- package/dist-lib/lib/helpers/image-settings.js +19 -0
- package/dist-lib/lib/helpers/mcp-methods.d.ts +2 -0
- package/dist-lib/lib/helpers/mcp-methods.js +14 -0
- package/dist-lib/lib/helpers/race-abort.d.ts +1 -1
- package/dist-lib/lib/helpers/race-abort.js +1 -1
- package/dist-lib/lib/helpers/repeated-reply.d.ts +2 -0
- package/dist-lib/lib/helpers/repeated-reply.js +63 -0
- package/dist-lib/lib/helpers/run-outcome.d.ts +5 -4
- package/dist-lib/lib/helpers/run-outcome.js +11 -9
- package/dist-lib/lib/{machine → helpers}/stable-stringify.js +1 -1
- package/dist-lib/lib/helpers/tool-call-markup.d.ts +1 -0
- package/dist-lib/lib/helpers/tool-call-markup.js +9 -5
- package/dist-lib/lib/helpers/tool-label.d.ts +2 -2
- package/dist-lib/lib/helpers/tool-label.js +3 -3
- package/dist-lib/lib/hooks/built-in/arg-repair.d.ts +1 -1
- package/dist-lib/lib/hooks/built-in/arg-repair.js +109 -19
- package/dist-lib/lib/hooks/built-in/egress.d.ts +1 -1
- package/dist-lib/lib/hooks/built-in/egress.js +13 -21
- package/dist-lib/lib/hooks/built-in/sandbox.d.ts +1 -1
- package/dist-lib/lib/hooks/built-in/skill-catalog.d.ts +1 -1
- package/dist-lib/lib/hooks/index.d.ts +48 -0
- package/dist-lib/lib/hooks/index.js +130 -0
- package/dist-lib/lib/hooks/run.d.ts +9 -6
- package/dist-lib/lib/hooks/run.js +113 -48
- package/dist-lib/lib/{completion-lifecycle.d.ts → lifecycle/completion-run.d.ts} +1 -1
- package/dist-lib/lib/{completion-lifecycle.js → lifecycle/completion-run.js} +1 -1
- package/dist-lib/lib/lifecycle/index.d.ts +83 -0
- package/dist-lib/lib/lifecycle/index.js +335 -0
- package/dist-lib/lib/{harness-lifecycle.js → lifecycle/machine.js} +2 -2
- package/dist-lib/lib/machine/completion/actions/completion.d.ts +11 -2
- package/dist-lib/lib/machine/completion/actions/completion.js +98 -14
- package/dist-lib/lib/machine/completion/actions/prepare.d.ts +9 -0
- package/dist-lib/lib/machine/completion/actions/prepare.js +30 -0
- package/dist-lib/lib/machine/completion/actions/tools.d.ts +10 -1
- package/dist-lib/lib/machine/completion/actions/tools.js +79 -7
- package/dist-lib/lib/machine/completion/context.d.ts +7 -2
- package/dist-lib/lib/machine/completion/context.js +29 -5
- package/dist-lib/lib/machine/completion/guards/retry.d.ts +1 -0
- package/dist-lib/lib/machine/completion/guards/retry.js +6 -3
- package/dist-lib/lib/machine/completion/implementations.d.ts +38 -12
- package/dist-lib/lib/machine/completion/implementations.js +81 -31
- package/dist-lib/lib/machine/completion/machine.d.ts +140 -63
- package/dist-lib/lib/machine/completion/machine.js +194 -58
- package/dist-lib/lib/machine/completion/ports.d.ts +7 -55
- package/dist-lib/lib/machine/completion/ports.js +1 -224
- package/dist-lib/lib/machine/completion/rules.d.ts +20 -19
- package/dist-lib/lib/machine/completion/rules.js +73 -52
- package/dist-lib/lib/machine/completion/types.d.ts +110 -187
- package/dist-lib/lib/machine/completion/version.d.ts +1 -0
- package/dist-lib/lib/machine/completion/version.js +1 -0
- package/dist-lib/lib/machine/definition.d.ts +23 -0
- package/dist-lib/lib/machine/definition.js +76 -0
- package/dist-lib/lib/machine/index.d.ts +463 -20
- package/dist-lib/lib/machine/index.js +15 -11
- package/dist-lib/lib/models/llm-presets.d.ts +1 -0
- package/dist-lib/lib/models/model-catalog-constants.d.ts +3 -1
- package/dist-lib/lib/models/model-catalog-constants.js +9 -1
- package/dist-lib/lib/models/model-catalog.d.ts +31 -4
- package/dist-lib/lib/models/model-catalog.js +89 -8
- package/dist-lib/lib/models/model-fit.d.ts +55 -0
- package/dist-lib/lib/models/model-fit.js +102 -0
- package/dist-lib/lib/models/model-handle.d.ts +4 -0
- package/dist-lib/lib/models/model-handle.js +8 -1
- package/dist-lib/lib/models/model-list.d.ts +4 -0
- package/dist-lib/lib/models/model-pool.d.ts +35 -10
- package/dist-lib/lib/models/model-pool.js +63 -14
- package/dist-lib/lib/models/music-catalog.d.ts +1 -1
- package/dist-lib/lib/models/music-catalog.js +8 -1
- package/dist-lib/lib/models/sdk-faults.d.ts +2 -0
- package/dist-lib/lib/models/sdk-faults.js +18 -0
- package/dist-lib/lib/models/tts-model-default.js +3 -3
- package/dist-lib/lib/office/engine/codes.d.ts +62 -0
- package/dist-lib/lib/office/engine/codes.js +61 -0
- package/dist-lib/lib/office/engine/docx/document.d.ts +216 -0
- package/dist-lib/lib/office/engine/docx/document.js +1152 -0
- package/dist-lib/lib/office/engine/docx/index.d.ts +7 -0
- package/dist-lib/lib/office/engine/docx/index.js +8 -0
- package/dist-lib/lib/office/engine/docx/styles.d.ts +31 -0
- package/dist-lib/lib/office/engine/docx/styles.js +173 -0
- package/dist-lib/lib/office/engine/docx/template.d.ts +18 -0
- package/dist-lib/lib/office/engine/docx/template.js +133 -0
- package/dist-lib/lib/office/engine/docx/text.d.ts +55 -0
- package/dist-lib/lib/office/engine/docx/text.js +538 -0
- package/dist-lib/lib/office/engine/drawingml/chart.d.ts +63 -0
- package/dist-lib/lib/office/engine/drawingml/chart.js +539 -0
- package/dist-lib/lib/office/engine/drawingml/text.d.ts +35 -0
- package/dist-lib/lib/office/engine/drawingml/text.js +352 -0
- package/dist-lib/lib/office/engine/errors.d.ts +6 -0
- package/dist-lib/lib/office/engine/errors.js +12 -0
- package/dist-lib/lib/office/engine/image.d.ts +8 -0
- package/dist-lib/lib/office/engine/image.js +48 -0
- package/dist-lib/lib/office/engine/index.d.ts +12 -0
- package/dist-lib/lib/office/engine/index.js +7 -0
- package/dist-lib/lib/office/engine/opc/content-types.d.ts +17 -0
- package/dist-lib/lib/office/engine/opc/content-types.js +74 -0
- package/dist-lib/lib/office/engine/opc/media.d.ts +13 -0
- package/dist-lib/lib/office/engine/opc/media.js +11 -0
- package/dist-lib/lib/office/engine/opc/package.d.ts +51 -0
- package/dist-lib/lib/office/engine/opc/package.js +324 -0
- package/dist-lib/lib/office/engine/opc/paths.d.ts +7 -0
- package/dist-lib/lib/office/engine/opc/paths.js +46 -0
- package/dist-lib/lib/office/engine/opc/properties.d.ts +7 -0
- package/dist-lib/lib/office/engine/opc/properties.js +75 -0
- package/dist-lib/lib/office/engine/opc/relationships.d.ts +23 -0
- package/dist-lib/lib/office/engine/opc/relationships.js +65 -0
- package/dist-lib/lib/office/engine/opc/zip.d.ts +15 -0
- package/dist-lib/lib/office/engine/opc/zip.js +264 -0
- package/dist-lib/lib/office/engine/pptx/fit.d.ts +12 -0
- package/dist-lib/lib/office/engine/pptx/fit.js +37 -0
- package/dist-lib/lib/office/engine/pptx/index.d.ts +8 -0
- package/dist-lib/lib/office/engine/pptx/index.js +8 -0
- package/dist-lib/lib/office/engine/pptx/inherit.d.ts +29 -0
- package/dist-lib/lib/office/engine/pptx/inherit.js +155 -0
- package/dist-lib/lib/office/engine/pptx/notes.d.ts +5 -0
- package/dist-lib/lib/office/engine/pptx/notes.js +85 -0
- package/dist-lib/lib/office/engine/pptx/presentation.d.ts +54 -0
- package/dist-lib/lib/office/engine/pptx/presentation.js +749 -0
- package/dist-lib/lib/office/engine/pptx/read.d.ts +9 -0
- package/dist-lib/lib/office/engine/pptx/read.js +66 -0
- package/dist-lib/lib/office/engine/pptx/shapes.d.ts +52 -0
- package/dist-lib/lib/office/engine/pptx/shapes.js +276 -0
- package/dist-lib/lib/office/engine/pptx/slides.d.ts +27 -0
- package/dist-lib/lib/office/engine/pptx/slides.js +123 -0
- package/dist-lib/lib/office/engine/pptx/template.d.ts +20 -0
- package/dist-lib/lib/office/engine/pptx/template.js +391 -0
- package/dist-lib/lib/office/engine/pptx/types.d.ts +120 -0
- package/dist-lib/lib/office/engine/pptx/types.js +1 -0
- package/dist-lib/lib/office/engine/units.d.ts +3 -0
- package/dist-lib/lib/office/engine/units.js +12 -0
- package/dist-lib/lib/office/engine/utf8.d.ts +2 -0
- package/dist-lib/lib/office/engine/utf8.js +103 -0
- package/dist-lib/lib/office/engine/xlsx/formula.d.ts +49 -0
- package/dist-lib/lib/office/engine/xlsx/formula.js +381 -0
- package/dist-lib/lib/office/engine/xlsx/index.d.ts +8 -0
- package/dist-lib/lib/office/engine/xlsx/index.js +8 -0
- package/dist-lib/lib/office/engine/xlsx/refs.d.ts +22 -0
- package/dist-lib/lib/office/engine/xlsx/refs.js +82 -0
- package/dist-lib/lib/office/engine/xlsx/reshape.d.ts +21 -0
- package/dist-lib/lib/office/engine/xlsx/reshape.js +424 -0
- package/dist-lib/lib/office/engine/xlsx/sheet.d.ts +108 -0
- package/dist-lib/lib/office/engine/xlsx/sheet.js +662 -0
- package/dist-lib/lib/office/engine/xlsx/strings.d.ts +15 -0
- package/dist-lib/lib/office/engine/xlsx/strings.js +93 -0
- package/dist-lib/lib/office/engine/xlsx/styles.d.ts +38 -0
- package/dist-lib/lib/office/engine/xlsx/styles.js +369 -0
- package/dist-lib/lib/office/engine/xlsx/template.d.ts +7 -0
- package/dist-lib/lib/office/engine/xlsx/template.js +54 -0
- package/dist-lib/lib/office/engine/xlsx/workbook.d.ts +161 -0
- package/dist-lib/lib/office/engine/xlsx/workbook.js +850 -0
- package/dist-lib/lib/office/engine/xlsx/write.d.ts +2 -0
- package/dist-lib/lib/office/engine/xlsx/write.js +42 -0
- package/dist-lib/lib/office/engine/xml.d.ts +45 -0
- package/dist-lib/lib/office/engine/xml.js +258 -0
- package/dist-lib/lib/office/extract.d.ts +9 -0
- package/dist-lib/lib/office/extract.js +19 -0
- package/dist-lib/lib/office/index.d.ts +1 -1
- package/dist-lib/lib/office/index.js +74 -19
- package/dist-lib/lib/plugins/addons.d.ts +2 -0
- package/dist-lib/lib/plugins/addons.js +12 -0
- package/dist-lib/lib/plugins/context.d.ts +16 -0
- package/dist-lib/lib/plugins/context.js +48 -0
- package/dist-lib/lib/plugins/index.d.ts +3 -0
- package/dist-lib/lib/plugins/index.js +1 -0
- package/dist-lib/lib/plugins/registry.d.ts +116 -0
- package/dist-lib/lib/plugins/registry.js +505 -0
- package/dist-lib/lib/plugins/runtime.d.ts +27 -0
- package/dist-lib/lib/plugins/runtime.js +143 -0
- package/dist-lib/lib/plugins/scope.d.ts +17 -0
- package/dist-lib/lib/plugins/scope.js +55 -0
- package/dist-lib/lib/prompt.d.ts +2 -5
- package/dist-lib/lib/prompt.js +9 -0
- package/dist-lib/lib/residency/completion-runtime.d.ts +52 -0
- package/dist-lib/lib/{capabilities → residency}/completion-runtime.js +22 -15
- package/dist-lib/lib/residency/index.d.ts +148 -0
- package/dist-lib/lib/residency/index.js +539 -0
- package/dist-lib/lib/run-log/boundary.d.ts +17 -0
- package/dist-lib/lib/run-log/boundary.js +58 -0
- package/dist-lib/lib/run-log/history-codec.d.ts +7 -6
- package/dist-lib/lib/run-log/history-codec.js +175 -46
- package/dist-lib/lib/run-log/index.d.ts +46 -0
- package/dist-lib/lib/run-log/index.js +40 -0
- package/dist-lib/lib/run-log/inspect.d.ts +53 -0
- package/dist-lib/lib/{run-log-inspect.js → run-log/inspect.js} +196 -139
- package/dist-lib/lib/run-log/live.d.ts +37 -0
- package/dist-lib/lib/run-log/live.js +195 -0
- package/dist-lib/lib/run-log/persisted-actor.d.ts +1 -6
- package/dist-lib/lib/run-log/persisted-actor.js +4 -3
- package/dist-lib/lib/run-log/protocol-types.d.ts +37 -14
- package/dist-lib/lib/run-log/protocol.d.ts +1 -2
- package/dist-lib/lib/run-log/protocol.js +45 -40
- package/dist-lib/lib/{run-log-redact.d.ts → run-log/redact.d.ts} +3 -2
- package/dist-lib/lib/{run-log-redact.js → run-log/redact.js} +101 -16
- package/dist-lib/lib/run-log/replay.d.ts +3 -2
- package/dist-lib/lib/run-log/replay.js +7 -6
- package/dist-lib/lib/run-log/request-codec.d.ts +17 -0
- package/dist-lib/lib/run-log/request-codec.js +87 -0
- package/dist-lib/lib/run-log/run-journal.d.ts +14 -8
- package/dist-lib/lib/run-log/run-journal.js +100 -75
- package/dist-lib/lib/sdk-loader.d.ts +2 -7
- package/dist-lib/lib/sdk-loader.js +8 -15
- package/dist-lib/lib/sdk-storage.js +3 -1
- package/dist-lib/lib/serve.js +139 -38
- package/dist-lib/lib/skills-host/index.d.ts +59 -0
- package/dist-lib/lib/skills-host/index.js +268 -0
- package/dist-lib/lib/spawn.d.ts +37 -3
- package/dist-lib/lib/spawn.js +7 -3
- package/dist-lib/lib/spill.d.ts +11 -0
- package/dist-lib/lib/spill.js +82 -0
- package/dist-lib/lib/tools/{exec/adapters/python → attachments}/output-policy.d.ts +2 -3
- package/dist-lib/lib/tools/{exec/adapters/python/attachments.d.ts → attachments/staging.d.ts} +2 -2
- package/dist-lib/lib/tools/{exec/adapters/python/attachments.js → attachments/staging.js} +3 -3
- package/dist-lib/lib/tools/catalog.d.ts +1 -1
- package/dist-lib/lib/tools/catalog.js +1 -1
- package/dist-lib/lib/tools/create-documents.d.ts +1 -1
- package/dist-lib/lib/tools/edit-documents.d.ts +1 -1
- package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.d.ts +5 -7
- package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.js +3 -2
- package/dist-lib/lib/tools/exec/bare-runtime.js +2 -4
- package/dist-lib/lib/tools/exec/python-source.d.ts +6 -0
- package/dist-lib/lib/tools/exec/python-source.js +243 -0
- package/dist-lib/lib/tools/exec/runner.d.ts +24 -45
- package/dist-lib/lib/tools/exec/runner.js +68 -34
- package/dist-lib/lib/tools/exec/scope.d.ts +2 -0
- package/dist-lib/lib/tools/exec/scope.js +33 -2
- package/dist-lib/lib/tools/exec/shell-guidance.d.ts +11 -9
- package/dist-lib/lib/tools/exec/shell-guidance.js +28 -57
- package/dist-lib/lib/tools/exec/video-tools.d.ts +0 -1
- package/dist-lib/lib/tools/exec/video-tools.js +0 -5
- package/dist-lib/lib/tools/exec.d.ts +7 -14
- package/dist-lib/lib/tools/exec.js +181 -457
- package/dist-lib/lib/tools/file-glob.d.ts +1 -1
- package/dist-lib/lib/tools/file-glob.js +1 -0
- package/dist-lib/lib/tools/fs/scope.d.ts +1 -0
- package/dist-lib/lib/tools/fs/scope.js +8 -3
- package/dist-lib/lib/tools/grep.d.ts +1 -1
- package/dist-lib/lib/tools/grep.js +1 -0
- package/dist-lib/lib/tools/http-request.d.ts +1 -1
- package/dist-lib/lib/tools/http-request.js +1 -0
- package/dist-lib/lib/tools/index.d.ts +21 -0
- package/dist-lib/lib/tools/index.js +46 -0
- package/dist-lib/lib/tools/office/ops.d.ts +13 -0
- package/dist-lib/lib/tools/office/ops.js +100 -0
- package/dist-lib/lib/tools/office.d.ts +12 -0
- package/dist-lib/lib/tools/office.js +486 -0
- package/dist-lib/lib/tools/operations/compile.d.ts +3 -3
- package/dist-lib/lib/tools/operations/compile.js +2 -1
- package/dist-lib/lib/tools/operations/decoders.js +1 -1
- package/dist-lib/lib/tools/operations/manifest.d.ts +1 -1
- package/dist-lib/lib/tools/outbound-guard.d.ts +3 -1
- package/dist-lib/lib/tools/outbound-guard.js +4 -0
- package/dist-lib/lib/tools/pdf/build.d.ts +43 -0
- package/dist-lib/lib/tools/pdf/build.js +150 -0
- package/dist-lib/lib/tools/pdf/images.d.ts +7 -0
- package/dist-lib/lib/tools/pdf/images.js +82 -0
- package/dist-lib/lib/tools/pdf/request.d.ts +63 -0
- package/dist-lib/lib/tools/pdf/request.js +335 -0
- package/dist-lib/lib/tools/pdf.d.ts +6 -0
- package/dist-lib/lib/tools/pdf.js +303 -0
- package/dist-lib/lib/tools/read-files.d.ts +1 -1
- package/dist-lib/lib/tools/read-files.js +5 -1
- package/dist-lib/lib/tools/skill.d.ts +2 -4
- package/dist-lib/lib/tools/skill.js +20 -22
- package/dist-lib/lib/tools/skills/auth-resolver.d.ts +1 -1
- package/dist-lib/lib/tools/skills/catalog.d.ts +9 -2
- package/dist-lib/lib/tools/skills/catalog.js +7 -7
- package/dist-lib/lib/tools/skills/cli-schema.js +1 -1
- package/dist-lib/lib/tools/skills/frontmatter-parser.d.ts +1 -0
- package/dist-lib/lib/tools/skills/frontmatter-parser.js +1 -0
- package/dist-lib/lib/tools/skills/mention.d.ts +1 -2
- package/dist-lib/lib/tools/skills/mention.js +0 -3
- package/dist-lib/lib/tools/skills/scope-key.d.ts +2 -1
- package/dist-lib/lib/tools/skills/scope-key.js +2 -3
- package/dist-lib/lib/tools/skills/skill-state.d.ts +2 -2
- package/dist-lib/lib/tools/skills/skill-state.js +11 -28
- package/dist-lib/lib/tools/toolsets.d.ts +3 -7
- package/dist-lib/lib/tools/toolsets.js +5 -9
- package/dist-lib/lib/tools/web-fetch.d.ts +1 -1
- package/dist-lib/lib/tools/web-fetch.js +42 -6
- package/dist-lib/lib/web-fetch/embedded-state.js +1 -1
- package/dist-lib/lib/web-fetch/extract.js +1 -1
- package/dist-lib/lib/web-fetch/images.js +1 -1
- package/dist-lib/lib/web-fetch/video.js +1 -1
- package/dist-lib/lib/wire.d.ts +8 -0
- package/dist-lib/lib/wire.js +112 -2
- package/dist-lib/plugins/code-mode/index.d.ts +16 -0
- package/dist-lib/plugins/code-mode/index.js +43 -0
- package/dist-lib/plugins/coding/index.d.ts +15 -0
- package/dist-lib/plugins/coding/index.js +42 -0
- package/dist-lib/plugins/coding/jobs.d.ts +24 -0
- package/dist-lib/plugins/coding/jobs.js +144 -0
- package/dist-lib/plugins/coding/session.d.ts +51 -0
- package/dist-lib/plugins/coding/session.js +263 -0
- package/dist-lib/plugins/coding/write-file.d.ts +3 -0
- package/dist-lib/plugins/coding/write-file.js +52 -0
- package/dist-lib/plugins/command-hooks/index.d.ts +88 -0
- package/dist-lib/plugins/command-hooks/index.js +338 -0
- package/dist-lib/plugins/external-agents/acp.d.ts +27 -0
- package/dist-lib/plugins/external-agents/acp.js +264 -0
- package/dist-lib/plugins/external-agents/cli.d.ts +3 -0
- package/dist-lib/plugins/external-agents/cli.js +199 -0
- package/dist-lib/plugins/external-agents/index.d.ts +25 -0
- package/dist-lib/plugins/external-agents/index.js +54 -0
- package/dist-lib/plugins/external-agents/process.d.ts +19 -0
- package/dist-lib/plugins/external-agents/process.js +92 -0
- package/dist-lib/plugins/external-agents/targets.d.ts +32 -0
- package/dist-lib/plugins/external-agents/targets.js +66 -0
- package/dist-lib/{lib/tools → plugins/image}/edit-image.d.ts +3 -2
- package/dist-lib/{lib/tools → plugins/image}/edit-image.js +7 -2
- package/dist-lib/{lib/tools → plugins/image}/generate-image.d.ts +6 -12
- package/dist-lib/{lib/tools → plugins/image}/generate-image.js +6 -7
- package/dist-lib/plugins/image/index.d.ts +25 -0
- package/dist-lib/plugins/image/index.js +76 -0
- package/dist-lib/plugins/knowledge/index.d.ts +21 -0
- package/dist-lib/plugins/knowledge/index.js +47 -0
- package/dist-lib/plugins/knowledge/search-tool.d.ts +4 -0
- package/dist-lib/plugins/knowledge/search-tool.js +38 -0
- package/dist-lib/plugins/knowledge/store.d.ts +42 -0
- package/dist-lib/plugins/knowledge/store.js +332 -0
- package/dist-lib/plugins/lsp/index.d.ts +32 -0
- package/dist-lib/plugins/lsp/index.js +77 -0
- package/dist-lib/plugins/lsp/pool.d.ts +24 -0
- package/dist-lib/plugins/lsp/pool.js +73 -0
- package/dist-lib/plugins/lsp/rpc.d.ts +37 -0
- package/dist-lib/plugins/lsp/rpc.js +145 -0
- package/dist-lib/plugins/lsp/server.d.ts +55 -0
- package/dist-lib/plugins/lsp/server.js +192 -0
- package/dist-lib/plugins/lsp/tool.d.ts +12 -0
- package/dist-lib/plugins/lsp/tool.js +366 -0
- package/dist-lib/plugins/mcp/call.d.ts +17 -0
- package/dist-lib/{lib/tools/mcp-call.js → plugins/mcp/call.js} +92 -84
- package/dist-lib/plugins/mcp/index.d.ts +21 -0
- package/dist-lib/plugins/mcp/index.js +85 -0
- package/dist-lib/{lib/tools → plugins}/mcp/protocol.d.ts +9 -16
- package/dist-lib/{lib/tools → plugins}/mcp/protocol.js +3 -16
- package/dist-lib/plugins/mcp/server.d.ts +23 -0
- package/dist-lib/plugins/mcp/server.js +108 -0
- package/dist-lib/{lib/tools → plugins/music}/generate-music.d.ts +6 -15
- package/dist-lib/{lib/tools → plugins/music}/generate-music.js +7 -8
- package/dist-lib/plugins/music/index.d.ts +24 -0
- package/dist-lib/plugins/music/index.js +48 -0
- package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli-process.d.ts +2 -2
- package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli-process.js +2 -2
- package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli.d.ts +1 -1
- package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli.js +7 -7
- package/dist-lib/{lib/tools/exec → plugins}/obsidian/command.js +1 -1
- package/dist-lib/{lib/tools/exec → plugins}/obsidian/guidance.d.ts +0 -1
- package/dist-lib/{lib/tools/exec → plugins}/obsidian/guidance.js +0 -7
- package/dist-lib/plugins/obsidian/index.d.ts +26 -0
- package/dist-lib/plugins/obsidian/index.js +138 -0
- package/dist-lib/{lib/tools/skills/obsidian-readiness.d.ts → plugins/obsidian/readiness.d.ts} +1 -0
- package/dist-lib/{lib/tools/skills/obsidian-readiness.js → plugins/obsidian/readiness.js} +7 -0
- package/dist-lib/plugins/python/guarded-fetch.d.ts +13 -0
- package/dist-lib/plugins/python/guarded-fetch.js +32 -0
- package/dist-lib/plugins/python/index.d.ts +18 -0
- package/dist-lib/plugins/python/index.js +19 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/interrupt-timer.js +2 -2
- package/dist-lib/plugins/python/language.d.ts +8 -0
- package/dist-lib/plugins/python/language.js +377 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/loader.d.ts +1 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/loader.js +8 -1
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/memfs.js +3 -3
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/module-distributions.js +0 -3
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/pyodide.js +4 -4
- package/dist-lib/plugins/python/python-adapter.d.ts +41 -0
- package/dist-lib/plugins/python/python-adapter.js +515 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/run-session.d.ts +1 -2
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/run-session.js +10 -99
- package/dist-lib/plugins/python/shell-redirect.d.ts +8 -0
- package/dist-lib/plugins/python/shell-redirect.js +25 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/wheels.js +5 -3
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/active.js +1 -1
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/client.d.ts +1 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/client.js +6 -3
- package/dist-lib/plugins/python/worker/entry.d.ts +1 -0
- package/dist-lib/plugins/python/worker/entry.js +9 -0
- package/dist-lib/plugins/python/worker/interrupt-deadline.d.ts +1 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/interrupt-deadline.js +1 -1
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/serve.js +2 -2
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/spawn.d.ts +1 -0
- package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/spawn.js +7 -0
- package/dist-lib/plugins/quickjs/index.d.ts +20 -0
- package/dist-lib/plugins/quickjs/index.js +25 -0
- package/dist-lib/plugins/quickjs/language.d.ts +3 -0
- package/dist-lib/plugins/quickjs/language.js +59 -0
- package/dist-lib/plugins/quickjs/runtime.d.ts +38 -0
- package/dist-lib/plugins/quickjs/runtime.js +421 -0
- package/dist-lib/plugins/quickjs/text-decoder.d.ts +1 -0
- package/dist-lib/plugins/quickjs/text-decoder.js +15 -0
- package/dist-lib/plugins/run-report/brand.d.ts +1 -0
- package/dist-lib/plugins/run-report/brand.js +1 -0
- package/dist-lib/plugins/run-report/flow-view.d.ts +6 -0
- package/dist-lib/plugins/run-report/flow-view.js +53 -0
- package/dist-lib/plugins/run-report/flow.d.ts +33 -0
- package/dist-lib/plugins/run-report/flow.js +201 -0
- package/dist-lib/plugins/run-report/index.d.ts +17 -0
- package/dist-lib/plugins/run-report/index.js +27 -0
- package/dist-lib/plugins/run-report/layout.d.ts +39 -0
- package/dist-lib/plugins/run-report/layout.js +175 -0
- package/dist-lib/plugins/run-report/meaning.d.ts +6 -0
- package/dist-lib/plugins/run-report/meaning.js +43 -0
- package/dist-lib/plugins/run-report/model.d.ts +86 -0
- package/dist-lib/plugins/run-report/model.js +387 -0
- package/dist-lib/plugins/run-report/page.d.ts +13 -0
- package/dist-lib/plugins/run-report/page.js +234 -0
- package/dist-lib/plugins/run-report/script.d.ts +1 -0
- package/dist-lib/plugins/run-report/script.js +661 -0
- package/dist-lib/plugins/run-report/story.d.ts +48 -0
- package/dist-lib/plugins/run-report/story.js +188 -0
- package/dist-lib/plugins/run-report/style.d.ts +1 -0
- package/dist-lib/plugins/run-report/style.js +410 -0
- package/dist-lib/plugins/run-report/why.d.ts +28 -0
- package/dist-lib/plugins/run-report/why.js +170 -0
- package/dist-lib/plugins/sandbox-macos/index.d.ts +48 -0
- package/dist-lib/plugins/sandbox-macos/index.js +175 -0
- package/dist-lib/plugins/sandbox-vm/index.d.ts +24 -0
- package/dist-lib/plugins/sandbox-vm/index.js +27 -0
- package/dist-lib/plugins/sandbox-vm/vm-shell.d.ts +46 -0
- package/dist-lib/plugins/sandbox-vm/vm-shell.js +106 -0
- package/dist-lib/{lib → plugins/speech}/audio-transcode-bare.js +2 -2
- package/dist-lib/plugins/speech/index.d.ts +17 -0
- package/dist-lib/plugins/speech/index.js +24 -0
- package/dist-lib/plugins/speech/speech-engine.d.ts +23 -0
- package/dist-lib/plugins/speech/speech-engine.js +55 -0
- package/dist-lib/plugins/speech/speech-runtime.d.ts +22 -0
- package/dist-lib/plugins/speech/speech-runtime.js +212 -0
- package/dist-lib/{lib/capabilities → plugins/speech}/speech-text.d.ts +1 -0
- package/dist-lib/{lib/capabilities → plugins/speech}/speech-text.js +10 -3
- package/dist-lib/plugins/speech/voice-lane.d.ts +2 -0
- package/dist-lib/plugins/speech/voice-lane.js +9 -0
- package/dist-lib/plugins/speech/voice.d.ts +17 -0
- package/dist-lib/{lib/capabilities → plugins/speech}/voice.js +27 -25
- package/dist-lib/plugins/translation/index.d.ts +22 -0
- package/dist-lib/plugins/translation/index.js +63 -0
- package/dist-lib/{lib/models → plugins/translation}/nmt-catalog.d.ts +0 -1
- package/dist-lib/{lib/models → plugins/translation}/nmt-catalog.js +0 -3
- package/dist-lib/{lib/tools → plugins/translation}/translate.d.ts +14 -6
- package/dist-lib/{lib/tools → plugins/translation}/translate.js +14 -8
- package/dist-lib/plugins/walkie-talkie/crew.d.ts +27 -0
- package/dist-lib/plugins/walkie-talkie/crew.js +103 -0
- package/dist-lib/plugins/walkie-talkie/index.d.ts +127 -0
- package/dist-lib/plugins/walkie-talkie/index.js +340 -0
- package/dist-lib/plugins/walkie-talkie/wire.d.ts +67 -0
- package/dist-lib/plugins/walkie-talkie/wire.js +136 -0
- package/dist-lib/plugins/weather/geocode.d.ts +25 -0
- package/dist-lib/plugins/weather/geocode.js +101 -0
- package/dist-lib/plugins/weather/index.d.ts +15 -0
- package/dist-lib/plugins/weather/index.js +17 -0
- package/dist-lib/plugins/weather/lookup.d.ts +6 -0
- package/dist-lib/plugins/weather/lookup.js +169 -0
- package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/place.js +5 -1
- package/dist-lib/plugins/web-search/engine-registry.d.ts +44 -0
- package/dist-lib/plugins/web-search/engine-registry.js +17 -0
- package/dist-lib/{lib → plugins}/web-search/engines/aol.d.ts +1 -0
- package/dist-lib/{lib → plugins}/web-search/engines/aol.js +5 -3
- package/dist-lib/{lib → plugins}/web-search/engines/bing.d.ts +1 -0
- package/dist-lib/{lib → plugins}/web-search/engines/bing.js +9 -4
- package/dist-lib/{lib → plugins}/web-search/engines/brave.d.ts +1 -0
- package/dist-lib/{lib → plugins}/web-search/engines/brave.js +5 -3
- package/dist-lib/{lib → plugins}/web-search/engines/duckduckgo.d.ts +1 -0
- package/dist-lib/{lib → plugins}/web-search/engines/duckduckgo.js +5 -2
- package/dist-lib/{lib → plugins}/web-search/engines/google.d.ts +1 -0
- package/dist-lib/{lib → plugins}/web-search/engines/google.js +6 -4
- package/dist-lib/{lib → plugins}/web-search/engines/wikipedia.d.ts +1 -0
- package/dist-lib/{lib → plugins}/web-search/engines/wikipedia.js +5 -3
- package/dist-lib/{lib → plugins}/web-search/engines/yahoo.d.ts +1 -0
- package/dist-lib/{lib → plugins}/web-search/engines/yahoo.js +5 -3
- package/dist-lib/{lib → plugins}/web-search/fetch-html.js +1 -1
- package/dist-lib/plugins/web-search/index.d.ts +18 -0
- package/dist-lib/plugins/web-search/index.js +33 -0
- package/dist-lib/{lib → plugins}/web-search/orchestrator.d.ts +3 -1
- package/dist-lib/{lib → plugins}/web-search/orchestrator.js +5 -5
- package/dist-lib/plugins/web-search/tool.d.ts +3 -0
- package/dist-lib/{lib/tools/web-search.js → plugins/web-search/tool.js} +18 -14
- package/dist-lib/plugins/web-search/types.js +1 -0
- package/dist-lib/schema/generate.js +5 -2
- package/dist-lib/schema/harness.js +158 -7
- package/dist-lib/spec/bind.js +20 -4
- package/dist-lib/spec/calls.js +4 -0
- package/dist-lib/spec/hrpc/hrpc.json +52 -0
- package/dist-lib/spec/hrpc/index.js +51 -3
- package/dist-lib/spec/hrpc/messages.js +595 -17
- package/dist-lib/spec/hyperschema/index.js +595 -17
- package/dist-lib/spec/hyperschema/schema.json +464 -1
- package/dist-lib/spec/hyperschema/types.d.ts +113 -2
- package/package.json +262 -485
- package/patches/{@qvac%2Finference@0.20.0.patch → @qvac%2Finference@0.21.0.patch} +8 -8
- package/scripts/addon-externals.cjs +386 -0
- package/scripts/addon-externals.d.ts +30 -0
- package/wheels/manifest.json +1 -160
- package/worker/harness-sidecar.mjs +80 -59
- package/dist-lib/lib/capabilities/completion-engine/actors/inspect-preload.d.ts +0 -3
- package/dist-lib/lib/capabilities/completion-engine/actors/inspect-preload.js +0 -75
- package/dist-lib/lib/capabilities/completion-engine/actors/preload-failure.d.ts +0 -9
- package/dist-lib/lib/capabilities/completion-engine/actors/preload-failure.js +0 -11
- package/dist-lib/lib/capabilities/completion-engine/actors/preloading.d.ts +0 -3
- package/dist-lib/lib/capabilities/completion-engine/actors/preloading.js +0 -114
- package/dist-lib/lib/capabilities/completion-loop/index.d.ts +0 -80
- package/dist-lib/lib/capabilities/completion-loop/index.js +0 -158
- package/dist-lib/lib/capabilities/completion-loop/metrics.d.ts +0 -5
- package/dist-lib/lib/capabilities/completion-loop/metrics.js +0 -29
- package/dist-lib/lib/capabilities/completion-loop/tool-execution.d.ts +0 -60
- package/dist-lib/lib/capabilities/completion-loop/turns.js +0 -112
- package/dist-lib/lib/capabilities/completion-runtime.d.ts +0 -46
- package/dist-lib/lib/capabilities/completion.d.ts +0 -18
- package/dist-lib/lib/capabilities/completion.js +0 -22
- package/dist-lib/lib/helpers/recovery-required.d.ts +0 -1
- package/dist-lib/lib/helpers/recovery-required.js +0 -1
- package/dist-lib/lib/hooks/built-in/index.d.ts +0 -4
- package/dist-lib/lib/hooks/built-in/index.js +0 -4
- package/dist-lib/lib/hooks/pipeline.d.ts +0 -24
- package/dist-lib/lib/hooks/pipeline.js +0 -74
- package/dist-lib/lib/hooks/registry.d.ts +0 -2
- package/dist-lib/lib/hooks/registry.js +0 -7
- package/dist-lib/lib/machine/completion/actions/skills.d.ts +0 -9
- package/dist-lib/lib/machine/completion/actions/skills.js +0 -83
- package/dist-lib/lib/machine/engine.d.ts +0 -93
- package/dist-lib/lib/machine/guards.d.ts +0 -2
- package/dist-lib/lib/machine/guards.js +0 -6
- package/dist-lib/lib/office/pptx.d.ts +0 -1
- package/dist-lib/lib/office/pptx.js +0 -26
- package/dist-lib/lib/office/python.d.ts +0 -8
- package/dist-lib/lib/office/python.js +0 -32
- package/dist-lib/lib/office/xlsx.d.ts +0 -1
- package/dist-lib/lib/office/xlsx.js +0 -26
- package/dist-lib/lib/run-log-inspect.d.ts +0 -25
- package/dist-lib/lib/run-log-protocol.d.ts +0 -2
- package/dist-lib/lib/run-log-protocol.js +0 -1
- package/dist-lib/lib/tool-call-display.d.ts +0 -1
- package/dist-lib/lib/tools/exec/adapters/adapter.d.ts +0 -31
- package/dist-lib/lib/tools/exec/adapters/python/create-effect.d.ts +0 -7
- package/dist-lib/lib/tools/exec/adapters/python/create-effect.js +0 -318
- package/dist-lib/lib/tools/exec/adapters/python/python-adapter.d.ts +0 -89
- package/dist-lib/lib/tools/exec/adapters/python/python-adapter.js +0 -1371
- package/dist-lib/lib/tools/exec/adapters/python/worker/entry.js +0 -3
- package/dist-lib/lib/tools/exec/obsidian/route.d.ts +0 -17
- package/dist-lib/lib/tools/exec/obsidian/route.js +0 -91
- package/dist-lib/lib/tools/mcp-call.d.ts +0 -14
- package/dist-lib/lib/tools/rag-search.d.ts +0 -2
- package/dist-lib/lib/tools/rag-search.js +0 -105
- package/dist-lib/lib/tools/weather-lookup.d.ts +0 -8
- package/dist-lib/lib/tools/weather-lookup.js +0 -122
- package/dist-lib/lib/tools/web-search.d.ts +0 -6
- package/dist-lib/lib/web-search/engine-registry.d.ts +0 -7
- package/dist-lib/lib/web-search/engine-registry.js +0 -17
- package/wheels/cffi-2.0.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
- package/wheels/cryptography-47.0.0-cp314-abi3-pyemscripten_2026_0_wasm32.whl +0 -0
- package/wheels/defusedxml-0.7.1-py2.py3-none-any.whl +0 -0
- package/wheels/et_xmlfile-2.0.0-py3-none-any.whl +0 -0
- package/wheels/fonttools-4.62.1-py3-none-any.whl +0 -0
- package/wheels/fpdf2-2.8.8-py3-none-any.whl +0 -0
- package/wheels/lxml-6.0.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
- package/wheels/openpyxl-3.1.5-py2.py3-none-any.whl +0 -0
- package/wheels/pillow-12.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
- package/wheels/pycparser-3.0-py3-none-any.whl +0 -0
- package/wheels/pypdf-6.15.0-py3-none-any.whl +0 -0
- package/wheels/python_docx-1.2.0-py3-none-any.whl +0 -0
- package/wheels/python_pptx-1.0.2-py3-none-any.whl +0 -0
- package/wheels/six-1.17.0-py2.py3-none-any.whl +0 -0
- package/wheels/typing_extensions-4.15.0-py3-none-any.whl +0 -0
- package/wheels/xlsxwriter-3.2.9-py3-none-any.whl +0 -0
- /package/dist-lib/lib/{tools/skills → agent}/tool-grants.d.ts +0 -0
- /package/dist-lib/lib/{tools/skills → agent}/tool-grants.js +0 -0
- /package/dist-lib/lib/capabilities/{types.js → completion-engine/prepare-step.js} +0 -0
- /package/dist-lib/lib/{hooks/types.js → capabilities/completion-engine/stages.js} +0 -0
- /package/dist-lib/lib/{tool-call-display.js → contract/agent.js} +0 -0
- /package/dist-lib/lib/{tools/exec/adapters/adapter.js → contract/completion.js} +0 -0
- /package/dist-lib/lib/{tools/exec/adapters/python/worker/entry.d.ts → contract/exec.js} +0 -0
- /package/dist-lib/lib/{tools/exec/adapters/python/worker/interrupt-deadline.d.ts → contract/hooks.js} +0 -0
- /package/dist-lib/lib/{web-search/types.js → contract/index.js} +0 -0
- /package/dist-lib/lib/{capabilities/completion-engine → helpers}/abort-polyfill.d.ts +0 -0
- /package/dist-lib/lib/{capabilities/completion-engine → helpers}/abort-polyfill.js +0 -0
- /package/dist-lib/lib/{web-search → helpers}/html-helpers.d.ts +0 -0
- /package/dist-lib/lib/{web-search → helpers}/html-helpers.js +0 -0
- /package/dist-lib/lib/{tools → helpers}/model-args.d.ts +0 -0
- /package/dist-lib/lib/{tools → helpers}/model-args.js +0 -0
- /package/dist-lib/lib/{machine → helpers}/stable-stringify.d.ts +0 -0
- /package/dist-lib/lib/{web-search → helpers}/user-agents.d.ts +0 -0
- /package/dist-lib/lib/{web-search → helpers}/user-agents.js +0 -0
- /package/dist-lib/lib/{harness-lifecycle.d.ts → lifecycle/machine.d.ts} +0 -0
- /package/dist-lib/lib/tools/{exec/adapters/python → attachments}/output-policy.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/command.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/note-name.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/note-name.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/output.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/output.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/safe-path.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/safe-path.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-create.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-create.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-fs.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-fs.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-paths.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-paths.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-read.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-read.js +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-write.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-write.js +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/deadline-state.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/deadline-state.js +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/distributions.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/distributions.js +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/interrupt-timer.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/memfs.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/module-distributions.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/named-hosts.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/named-hosts.js +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/net-shim.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/net-shim.js +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/pyodide.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/wheels.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/active.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/protocol.d.ts +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/protocol.js +0 -0
- /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/serve.d.ts +0 -0
- /package/dist-lib/{lib/capabilities → plugins/speech}/audio-resample.d.ts +0 -0
- /package/dist-lib/{lib/capabilities → plugins/speech}/audio-resample.js +0 -0
- /package/dist-lib/{lib → plugins/speech}/audio-transcode-bare.d.ts +0 -0
- /package/dist-lib/{lib → plugins/speech}/audio-transcode-node.d.ts +0 -0
- /package/dist-lib/{lib → plugins/speech}/audio-transcode-node.js +0 -0
- /package/dist-lib/{lib/capabilities → plugins/speech}/speech-lexicon.d.ts +0 -0
- /package/dist-lib/{lib/capabilities → plugins/speech}/speech-lexicon.js +0 -0
- /package/dist-lib/{lib → plugins/speech}/wav-encode.d.ts +0 -0
- /package/dist-lib/{lib → plugins/speech}/wav-encode.js +0 -0
- /package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/place.d.ts +0 -0
- /package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/report.d.ts +0 -0
- /package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/report.js +0 -0
- /package/dist-lib/{lib → plugins}/web-search/fetch-html.d.ts +0 -0
- /package/dist-lib/{lib → plugins}/web-search/format-results.d.ts +0 -0
- /package/dist-lib/{lib → plugins}/web-search/format-results.js +0 -0
- /package/dist-lib/{lib → plugins}/web-search/merge-results.d.ts +0 -0
- /package/dist-lib/{lib → plugins}/web-search/merge-results.js +0 -0
- /package/dist-lib/{lib → plugins}/web-search/types.d.ts +0 -0
- /package/dist-lib/{lib → plugins}/web-search/url-helpers.d.ts +0 -0
- /package/dist-lib/{lib → plugins}/web-search/url-helpers.js +0 -0
- /package/dist-lib/{lib → plugins}/web-search/url-normalize.d.ts +0 -0
- /package/dist-lib/{lib → plugins}/web-search/url-normalize.js +0 -0
|
@@ -1,21 +1,13 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
1
|
import { createHash } from 'crypto';
|
|
4
|
-
import b4a from 'b4a';
|
|
5
2
|
import { AbortedError } from '../helpers/race-abort.js';
|
|
6
|
-
import { checkPdfBuildSource, checkBareLengthArgs, checkPptxBuildSource, checkPythonSource, checkUnstagedRead, createPythonAdapter, isPythonLanguage, parseInputs, parseOutputs, parsePackages, parseWorkdir, pinned, runsThroughPyodide, sandboxInstallError, unwrapPythonSource } from './exec/adapters/python/python-adapter.js';
|
|
7
|
-
import { pythonCreateEffect } from './exec/adapters/python/create-effect.js';
|
|
8
|
-
import { namedHosts } from './exec/adapters/python/named-hosts.js';
|
|
9
|
-
import { pythonReachesNetwork } from './exec/adapters/python/net-shim.js';
|
|
10
3
|
import { createShellAdapter } from './exec/adapters/shell/shell-adapter.js';
|
|
11
|
-
import {
|
|
4
|
+
import { isPythonLanguage } from './exec/python-source.js';
|
|
12
5
|
import { MAX_OUTPUT_CHARS_LIMIT } from './exec/runner.js';
|
|
13
6
|
import { bareBin, firstCommandToken, sanitizeCommand } from './exec/scope.js';
|
|
14
|
-
import {
|
|
7
|
+
import { LANGUAGE_UNAVAILABLE_ERROR, PYTHON_UNAVAILABLE_ERROR, SHELL_DOWNLOAD_NOTE, shellOnlyError, videoToolError } from './exec/shell-guidance.js';
|
|
15
8
|
import { shellArgv } from './exec/shell-argv.js';
|
|
16
9
|
import { bareRuntime } from './exec/bare-runtime.js';
|
|
17
10
|
import { canonicalDenyRoots, defaultRealpath, hostPath, resolveKey } from './fs/scope.js';
|
|
18
|
-
import { unquoteArg } from './model-args.js';
|
|
19
11
|
import { settingsEnv } from './skills/skill-settings.js';
|
|
20
12
|
import { checkCliOps } from './skills/cli-schema.js';
|
|
21
13
|
function parsePositiveInt(value, name, max) {
|
|
@@ -50,291 +42,67 @@ function shellEffect(command, toolOps) {
|
|
|
50
42
|
}
|
|
51
43
|
return matched.every((op) => op.annotation(argv) === 'read') ? 'read' : 'write';
|
|
52
44
|
}
|
|
53
|
-
function resolveExecution({ adapters, fallback }, args, ctx) {
|
|
54
|
-
for (const adapter of adapters) {
|
|
55
|
-
const plan = adapter.resolve(args, ctx);
|
|
56
|
-
if (plan) {
|
|
57
|
-
return plan;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return fallback.resolve(args, ctx);
|
|
61
|
-
}
|
|
62
|
-
function isPresent(value) {
|
|
63
|
-
return value !== undefined && value !== null;
|
|
64
|
-
}
|
|
65
|
-
function checkFileArgs(args, python) {
|
|
66
|
-
if (!python && (isPresent(args.inputs) || isPresent(args.outputs))) {
|
|
67
|
-
return FILES_NEED_PYTHON_ERROR;
|
|
68
|
-
}
|
|
69
|
-
const inputs = parseInputs(args.inputs);
|
|
70
|
-
if (inputs && 'error' in inputs) {
|
|
71
|
-
return inputs.error;
|
|
72
|
-
}
|
|
73
|
-
const outputs = parseOutputs(args.outputs);
|
|
74
|
-
if (outputs && 'error' in outputs) {
|
|
75
|
-
return outputs.error;
|
|
76
|
-
}
|
|
77
|
-
if (!python) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
const workdir = parseWorkdir(args.workdir);
|
|
81
|
-
return workdir && typeof workdir === 'object' ? workdir.error : null;
|
|
82
|
-
}
|
|
83
|
-
function truncateLabel(text) {
|
|
84
|
-
return text.length > 120 ? `${text.slice(0, 120)}…` : text;
|
|
85
|
-
}
|
|
86
|
-
const CONNECT_ANSWER_MS = 60_000;
|
|
87
|
-
function connectAsker(askUser) {
|
|
88
|
-
return async (host) => {
|
|
89
|
-
let timer;
|
|
90
|
-
const late = new Promise((resolve) => {
|
|
91
|
-
timer = setTimeout(() => resolve(null), CONNECT_ANSWER_MS);
|
|
92
|
-
});
|
|
93
|
-
try {
|
|
94
|
-
const answer = await Promise.race([
|
|
95
|
-
askUser({
|
|
96
|
-
question: `This Python run wants to connect to ${host}, which its approved code does not name. Allow it for this run?`,
|
|
97
|
-
options: ['Allow', 'Deny']
|
|
98
|
-
}),
|
|
99
|
-
late
|
|
100
|
-
]);
|
|
101
|
-
return /^allow/i.test((answer ?? '').trim());
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
clearTimeout(timer);
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
function networkPrefix(source) {
|
|
109
|
-
const hosts = namedHosts(source);
|
|
110
|
-
if (hosts.length === 0) {
|
|
111
|
-
return ' · network: no host named in the code';
|
|
112
|
-
}
|
|
113
|
-
return ` · network: ${hosts.join(', ')}`;
|
|
114
|
-
}
|
|
115
|
-
function packageSuffix(args) {
|
|
116
|
-
if (!Array.isArray(args.packages) || args.packages.length === 0)
|
|
117
|
-
return '';
|
|
118
|
-
const count = args.packages.length;
|
|
119
|
-
return ` (+${count} pkg${count === 1 ? '' : 's'}: ${truncateLabel(args.packages.join(', '))})`;
|
|
120
|
-
}
|
|
121
|
-
function uploadOrdinal(inputs, index) {
|
|
122
|
-
return inputs.slice(0, index + 1).filter((i) => i.attachmentId === undefined).length;
|
|
123
|
-
}
|
|
124
|
-
function fileSuffix(args) {
|
|
125
|
-
const inputs = parseInputs(args.inputs);
|
|
126
|
-
const outputs = parseOutputs(args.outputs);
|
|
127
|
-
const from = Array.isArray(inputs) && inputs.length > 0
|
|
128
|
-
? ` ← ${inputs.length} file${inputs.length === 1 ? '' : 's'} (${truncateLabel(inputs
|
|
129
|
-
.map((i, n) => `${i.attachmentId ?? `upload-${uploadOrdinal(inputs, n)}`}→${i.path}`)
|
|
130
|
-
.join(', '))})`
|
|
131
|
-
: '';
|
|
132
|
-
const to = Array.isArray(outputs) && outputs.length > 0 ? ` → ${truncateLabel(outputs.join(', '))}` : '';
|
|
133
|
-
return `${from}${to}`;
|
|
134
|
-
}
|
|
135
45
|
function stringList(value) {
|
|
136
46
|
if (!Array.isArray(value))
|
|
137
47
|
return undefined;
|
|
138
48
|
return value.filter((v) => typeof v === 'string');
|
|
139
49
|
}
|
|
140
|
-
function
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
const packages = stringList(args.packages);
|
|
147
|
-
const impossible = videoToolError('', { packages, python: true, network });
|
|
148
|
-
if (impossible) {
|
|
149
|
-
return impossible;
|
|
150
|
-
}
|
|
151
|
-
if (packages?.length) {
|
|
152
|
-
return `command is required: call exec again with language "python", packages: ${JSON.stringify(packages.map(pinned))} and the Python source that uses them in command. Installing and running are the same one call.`;
|
|
153
|
-
}
|
|
154
|
-
return 'command is required';
|
|
155
|
-
}
|
|
156
|
-
function parseScriptArgs(value) {
|
|
157
|
-
if (Array.isArray(value)) {
|
|
158
|
-
return value.map(String);
|
|
159
|
-
}
|
|
160
|
-
if (typeof value === 'string' && value.trim().startsWith('[')) {
|
|
161
|
-
try {
|
|
162
|
-
const parsed = JSON.parse(value);
|
|
163
|
-
if (Array.isArray(parsed)) {
|
|
164
|
-
return parsed.map(String);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
50
|
+
function firstAnswer(languages, answer) {
|
|
51
|
+
for (const language of languages) {
|
|
52
|
+
const found = answer(language);
|
|
53
|
+
if (found) {
|
|
54
|
+
return found;
|
|
168
55
|
}
|
|
169
56
|
}
|
|
170
|
-
return
|
|
57
|
+
return null;
|
|
171
58
|
}
|
|
172
|
-
function
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const tokens = script.split(/\s+/).filter(Boolean);
|
|
180
|
-
script = tokens[0] ?? '';
|
|
181
|
-
if (!scriptArgs.length) {
|
|
182
|
-
scriptArgs = tokens.slice(1);
|
|
59
|
+
function resolveCall(rawArgs, languages) {
|
|
60
|
+
const name = languageName(rawArgs.language);
|
|
61
|
+
const ordered = [...languages].sort((a, b) => Number(b.name === name) - Number(a.name === name));
|
|
62
|
+
for (const language of ordered) {
|
|
63
|
+
const call = language.call(rawArgs);
|
|
64
|
+
if (call) {
|
|
65
|
+
return 'error' in call ? call : { ...call, language };
|
|
183
66
|
}
|
|
184
67
|
}
|
|
185
|
-
if (
|
|
186
|
-
|
|
68
|
+
if (isPythonLanguage(rawArgs.language)) {
|
|
69
|
+
return { error: PYTHON_UNAVAILABLE_ERROR };
|
|
187
70
|
}
|
|
188
|
-
return {
|
|
71
|
+
return namesShell(rawArgs.language) ? { args: rawArgs } : { error: LANGUAGE_UNAVAILABLE_ERROR };
|
|
189
72
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
if (!script) {
|
|
193
|
-
if (scriptArgs.length) {
|
|
194
|
-
return {
|
|
195
|
-
error: 'scriptArgs need `script`: pass the scripts/*.py path exactly as the skill instructions name it'
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
if (script.includes('\n')) {
|
|
201
|
-
return {
|
|
202
|
-
args: { ...rawArgs, language: 'python', command: script, script: undefined },
|
|
203
|
-
trusted: false
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
if (!script.startsWith('scripts/') || !script.endsWith('.py')) {
|
|
207
|
-
return {
|
|
208
|
-
error: 'script takes a scripts/*.py path bundled with a skill, not a command line — ' +
|
|
209
|
-
`run a shell command by passing it in \`command\` instead. Got: ${String(rawArgs.script)}`
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
const skill = typeof rawArgs.skill === 'string' ? unquoteArg(rawArgs.skill) : '';
|
|
213
|
-
if (!skill) {
|
|
214
|
-
return { error: 'script runs need the owning skill name in `skill`' };
|
|
215
|
-
}
|
|
216
|
-
if (!skillsDir) {
|
|
217
|
-
return { error: 'script execution is not available on this device' };
|
|
218
|
-
}
|
|
219
|
-
if (String(rawArgs.command ?? '').trim()) {
|
|
220
|
-
return { error: 'pass either command or script, never both' };
|
|
221
|
-
}
|
|
222
|
-
const segments = [...skill.split('/'), ...script.split('/')];
|
|
223
|
-
if (segments.some((segment) => segment === '' || segment === '..' || segment.includes('\\'))) {
|
|
224
|
-
return { error: `script not found in skill ${skill}: ${script}` };
|
|
225
|
-
}
|
|
226
|
-
let source;
|
|
227
|
-
try {
|
|
228
|
-
const scriptPath = path.join(skillsDir, skill, script);
|
|
229
|
-
const regularPath = () => {
|
|
230
|
-
let current = skillsDir;
|
|
231
|
-
for (const segment of segments) {
|
|
232
|
-
current = path.join(current, segment);
|
|
233
|
-
if (fs.lstatSync(current).isSymbolicLink()) {
|
|
234
|
-
return false;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return true;
|
|
238
|
-
};
|
|
239
|
-
if (!regularPath()) {
|
|
240
|
-
return { error: `script not found in skill ${skill}: ${script}` };
|
|
241
|
-
}
|
|
242
|
-
const before = fs.statSync(scriptPath);
|
|
243
|
-
if (!before.isFile()) {
|
|
244
|
-
return { error: `script not found in skill ${skill}: ${script}` };
|
|
245
|
-
}
|
|
246
|
-
const fd = fs.openSync(scriptPath, fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW ?? 0));
|
|
247
|
-
try {
|
|
248
|
-
const opened = fs.fstatSync(fd);
|
|
249
|
-
if (!opened.isFile() || opened.dev !== before.dev || opened.ino !== before.ino) {
|
|
250
|
-
return { error: `script not found in skill ${skill}: ${script}` };
|
|
251
|
-
}
|
|
252
|
-
source = readScriptSource(fd);
|
|
253
|
-
const current = fs.statSync(scriptPath);
|
|
254
|
-
if (!regularPath() || current.dev !== opened.dev || current.ino !== opened.ino) {
|
|
255
|
-
return { error: `script not found in skill ${skill}: ${script}` };
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
finally {
|
|
259
|
-
fs.closeSync(fd);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
catch {
|
|
263
|
-
return { error: `script not found in skill ${skill}: ${script}` };
|
|
264
|
-
}
|
|
265
|
-
const staged = stagingGap(rawArgs, scriptArgs);
|
|
266
|
-
if (staged) {
|
|
267
|
-
return { error: staged };
|
|
268
|
-
}
|
|
269
|
-
const argv = JSON.stringify([script.slice('scripts/'.length), ...scriptArgs]);
|
|
270
|
-
const command = `import sys\nsys.argv = ${argv}\n${source}`;
|
|
271
|
-
return { args: { ...rawArgs, language: 'python', command, scriptArgs }, trusted: true };
|
|
73
|
+
function languageName(language) {
|
|
74
|
+
return typeof language === 'string' ? language.trim().toLowerCase() : '';
|
|
272
75
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const buffer = b4a.allocUnsafe(8192);
|
|
277
|
-
const length = fs.readSync(fd, buffer);
|
|
278
|
-
if (length === 0) {
|
|
279
|
-
break;
|
|
280
|
-
}
|
|
281
|
-
chunks.push(buffer.subarray(0, length));
|
|
282
|
-
}
|
|
283
|
-
return b4a.toString(b4a.concat(chunks), 'utf8');
|
|
76
|
+
const SHELL_NAMES = new Set(['', 'shell', 'bash', 'sh', 'zsh']);
|
|
77
|
+
function namesShell(language) {
|
|
78
|
+
return SHELL_NAMES.has(languageName(language));
|
|
284
79
|
}
|
|
285
|
-
const
|
|
286
|
-
function
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
...(Array.isArray(outputs) ? outputs : [])
|
|
292
|
-
]);
|
|
293
|
-
const missing = scriptArgs.filter((arg) => SCRIPT_FILE_ARG.test(arg) && !known.has(arg));
|
|
294
|
-
if (!missing.length) {
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
return (`scriptArgs name ${missing.map((name) => `"${name}"`).join(', ')} but the working directory ` +
|
|
298
|
-
'starts empty: stage each existing file in inputs [{ attachmentId, path }] and declare each ' +
|
|
299
|
-
'produced file in outputs');
|
|
80
|
+
const NOT_SHELL = ['packages', 'inputs', 'outputs', 'script'];
|
|
81
|
+
function shellStray(args) {
|
|
82
|
+
const name = NOT_SHELL.find((each) => args[each] !== undefined && args[each] !== null);
|
|
83
|
+
return name
|
|
84
|
+
? `${name} is not an argument here: a shell call takes only command, workdir, timeoutMs and maxOutputChars`
|
|
85
|
+
: null;
|
|
300
86
|
}
|
|
301
|
-
function
|
|
302
|
-
|
|
303
|
-
const argsSuffix = scriptArgs.length ? ` ${scriptArgs.join(' ')}` : '';
|
|
304
|
-
return `python script ${unquoteArg(args.skill ?? '?')}/${script}${argsSuffix}`;
|
|
87
|
+
function loadRun(call, skillsDir) {
|
|
88
|
+
return call.bundled ? call.bundled.load(skillsDir) : { args: call.args, trusted: false };
|
|
305
89
|
}
|
|
306
90
|
const WORKDIR_NO_ROOTS_ERROR = 'workdir is not available: no directories are granted to this device, so a working directory ' +
|
|
307
91
|
'cannot be validated. Omit workdir and use absolute paths in the command.';
|
|
308
|
-
function
|
|
309
|
-
if (
|
|
310
|
-
return args;
|
|
311
|
-
|
|
312
|
-
const declared = (stringList(args.packages) ?? []).length > 0 && startsLikePython(command);
|
|
313
|
-
const wrapped = unwrapPythonSource(command) !== null;
|
|
314
|
-
return isPythonSourceShaped(command) || declared || wrapped
|
|
315
|
-
? { ...args, language: 'python' }
|
|
316
|
-
: args;
|
|
317
|
-
}
|
|
318
|
-
function checkExecutionScope(args, { toolOps, disablePyodide, sandbox, network }) {
|
|
92
|
+
function checkExecutionScope(args, language, { toolOps, sandbox, languages }) {
|
|
93
|
+
if (language) {
|
|
94
|
+
return language.scope(args, { sandbox });
|
|
95
|
+
}
|
|
319
96
|
const command = String(args.command ?? '').trim();
|
|
320
97
|
const video = videoToolError(command, {
|
|
321
98
|
packages: stringList(args.packages),
|
|
322
|
-
python:
|
|
323
|
-
network
|
|
99
|
+
python: false,
|
|
100
|
+
network: languages.some((each) => each.online({ sandbox }))
|
|
324
101
|
});
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
return null;
|
|
330
|
-
}
|
|
331
|
-
if (!disablePyodide) {
|
|
332
|
-
const redirect = pythonRedirectError(command, sandbox);
|
|
333
|
-
if (redirect) {
|
|
334
|
-
return redirect;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
return checkShellScope(command, toolOps);
|
|
102
|
+
return (video ??
|
|
103
|
+
firstAnswer(languages, (each) => each.redirect(args, { sandbox })) ??
|
|
104
|
+
shellOnlyError(command) ??
|
|
105
|
+
checkShellScope(command, toolOps));
|
|
338
106
|
}
|
|
339
107
|
async function skillsEnv(skillSettings, ctx) {
|
|
340
108
|
const skills = ctx?.skills ?? [];
|
|
@@ -347,57 +115,44 @@ async function skillsEnv(skillSettings, ctx) {
|
|
|
347
115
|
}
|
|
348
116
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
349
117
|
}
|
|
350
|
-
|
|
351
|
-
const
|
|
352
|
-
const
|
|
118
|
+
function execSchema(languages) {
|
|
119
|
+
const text = languages.map((language) => language.text);
|
|
120
|
+
const runs = (each) => text.map((t) => `, or ${each(t)}`).join('');
|
|
121
|
+
const language = text.length
|
|
122
|
+
? {
|
|
123
|
+
language: {
|
|
124
|
+
type: 'string',
|
|
125
|
+
description: `Optional runtime. ${text.map((t) => t.language).join(' ')} Default is shell.`
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
: {};
|
|
129
|
+
const promptLanguage = text.length
|
|
130
|
+
? {
|
|
131
|
+
language: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
enum: ['shell', ...languages.map((each) => each.name)],
|
|
134
|
+
description: `${text.map((t) => t.prompt.language).join('; ')}; default shell.`
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
: {};
|
|
138
|
+
const workdir = text.length
|
|
139
|
+
? ` on the shell path${text.map((t) => `, ${t.workdir}`).join('')}`
|
|
140
|
+
: '';
|
|
353
141
|
return {
|
|
354
|
-
|
|
355
|
-
policyVersion: createHash('sha256')
|
|
356
|
-
.update(JSON.stringify({
|
|
357
|
-
version: 1,
|
|
358
|
-
policyVersion: policyVersion ?? null,
|
|
359
|
-
disablePyodide,
|
|
360
|
-
deniedRoots: [...(deniedRoots ?? [])].sort(),
|
|
361
|
-
skillsDir: skillsDir ?? null
|
|
362
|
-
}))
|
|
363
|
-
.digest('hex'),
|
|
364
|
-
toolset: 'exec',
|
|
365
|
-
description: "Execute a shell command on the user's device, or Python via in-process Pyodide. " +
|
|
142
|
+
description: `Execute a shell command on the user's device${runs((t) => t.runs)}. ` +
|
|
366
143
|
'One program per call: chaining, pipes, redirection and shell expansion are rejected. ' +
|
|
367
144
|
'Returns stdout, stderr, and exit code. ' +
|
|
368
|
-
|
|
369
|
-
'command is the first line of the program, there is no shell or interpreter to invoke, and ' +
|
|
370
|
-
'packages are declared in packages rather than installed. ' +
|
|
371
|
-
'When a loaded skill names a bundled script, run it by passing skill and script (with scriptArgs) ' +
|
|
372
|
-
'instead of command — never retype a script as source. ' +
|
|
145
|
+
text.map((t) => `${t.guide} `).join('') +
|
|
373
146
|
'Prefer one-shot commands; do not use for long-running daemons.',
|
|
374
147
|
parameters: {
|
|
375
148
|
type: 'object',
|
|
376
149
|
properties: {
|
|
377
|
-
command: {
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
'whose first line is the first line of the program (no shell, no interpreter, no quoting)'
|
|
381
|
-
},
|
|
382
|
-
language: {
|
|
383
|
-
type: 'string',
|
|
384
|
-
description: 'Optional runtime. "python" runs command as Python via in-process Pyodide. Default is shell.'
|
|
385
|
-
},
|
|
386
|
-
packages: {
|
|
387
|
-
type: 'array',
|
|
388
|
-
description: 'Optional array of PyPI package names (strings) to install (via micropip) before the code runs. Only with language "python".'
|
|
389
|
-
},
|
|
390
|
-
inputs: {
|
|
391
|
-
type: 'array',
|
|
392
|
-
description: 'Optional chat attachments to place in the working directory before the code runs, as objects {attachmentId, path}. path is a bare file name (no directories). Omit attachmentId to stage the image the user attached to their latest message. Any other uploaded file — PDF, .docx, .xlsx, .pptx — is staged by attachmentId, copied verbatim from the [Attached file "…"] line on the user\'s message; ids also come from earlier tool results. Only with language "python".'
|
|
393
|
-
},
|
|
394
|
-
outputs: {
|
|
395
|
-
type: 'array',
|
|
396
|
-
description: 'Optional bare file names (strings) the code writes in the working directory; each is attached to the chat when the run succeeds. Only with language "python".'
|
|
397
|
-
},
|
|
150
|
+
command: { type: 'string', description: `Shell command${runs((t) => t.command)}` },
|
|
151
|
+
...language,
|
|
152
|
+
...Object.assign({}, ...text.map((t) => t.properties)),
|
|
398
153
|
workdir: {
|
|
399
154
|
type: 'string',
|
|
400
|
-
description:
|
|
155
|
+
description: `Optional working directory: a host path${workdir}.`
|
|
401
156
|
},
|
|
402
157
|
timeoutMs: {
|
|
403
158
|
type: 'number',
|
|
@@ -405,167 +160,132 @@ export function createExecTool({ policyVersion, spawn, killProcess, loadPyodide,
|
|
|
405
160
|
},
|
|
406
161
|
maxOutputChars: {
|
|
407
162
|
type: 'number',
|
|
408
|
-
description: 'Optional stdout/stderr cap in characters (default 8192, max 65536). Raise when reading long content, e.g. a full note.'
|
|
409
|
-
},
|
|
410
|
-
script: {
|
|
411
|
-
type: 'string',
|
|
412
|
-
description: 'Run a python script bundled with a loaded skill instead of passing source: a scripts/*.py path exactly as the skill instructions name it (e.g. "scripts/extract_text.py"). Requires skill; leave command unset; pass arguments in scriptArgs and stage files via inputs/outputs as the instructions show.'
|
|
413
|
-
},
|
|
414
|
-
skill: {
|
|
415
|
-
type: 'string',
|
|
416
|
-
description: 'With script: the name of the skill that bundles the script (e.g. "pdf").'
|
|
417
|
-
},
|
|
418
|
-
scriptArgs: {
|
|
419
|
-
type: 'array',
|
|
420
|
-
description: 'With script: string arguments handed to the script as its command line, in order.'
|
|
163
|
+
description: 'Optional stdout/stderr cap in characters (default 8192, max 65536); longer output keeps its start and end. Raise when reading long content, e.g. a full note.'
|
|
421
164
|
}
|
|
422
165
|
},
|
|
423
166
|
required: []
|
|
424
167
|
},
|
|
425
168
|
prompt: {
|
|
426
|
-
description:
|
|
427
|
-
'
|
|
428
|
-
|
|
429
|
-
'bundled with a loaded skill via `skill`+`script`+`scriptArgs`, never as retyped source.',
|
|
169
|
+
description: `Run one program on the user's device: a shell command${runs((t) => t.prompt.runs)}. ` +
|
|
170
|
+
'Chaining, pipes, redirection and shell expansion are rejected. ' +
|
|
171
|
+
`Returns stdout, stderr, exit code.${text.map((t) => ` ${t.prompt.guide}`).join('')}`,
|
|
430
172
|
parameters: {
|
|
431
173
|
type: 'object',
|
|
432
174
|
properties: {
|
|
433
175
|
command: {
|
|
434
176
|
type: 'string',
|
|
435
|
-
description:
|
|
436
|
-
},
|
|
437
|
-
language: {
|
|
438
|
-
type: 'string',
|
|
439
|
-
enum: ['shell', 'python'],
|
|
440
|
-
description: '"python" runs `command` as Python; default shell.'
|
|
441
|
-
},
|
|
442
|
-
packages: { type: 'array', description: 'python only: PyPI packages to install.' },
|
|
443
|
-
inputs: {
|
|
444
|
-
type: 'array',
|
|
445
|
-
description: 'python only: attachments to stage as {attachmentId, path}, path a bare file name; ' +
|
|
446
|
-
'omit attachmentId for the latest attached image.'
|
|
447
|
-
},
|
|
448
|
-
outputs: {
|
|
449
|
-
type: 'array',
|
|
450
|
-
description: 'Only with language "python": bare file names the code writes; attached on success.'
|
|
177
|
+
description: `Shell command${runs((t) => t.prompt.command)}.`
|
|
451
178
|
},
|
|
179
|
+
...promptLanguage,
|
|
180
|
+
...Object.assign({}, ...text.map((t) => t.prompt.properties)),
|
|
452
181
|
workdir: { type: 'string' },
|
|
453
182
|
timeoutMs: { type: 'number', description: 'default 120000, max 600000.' },
|
|
454
183
|
maxOutputChars: {
|
|
455
184
|
type: 'number',
|
|
456
|
-
description: 'stdout/stderr cap (default 8192, max 65536); raise for long content.'
|
|
457
|
-
}
|
|
458
|
-
script: {
|
|
459
|
-
type: 'string',
|
|
460
|
-
description: 'Run a python script bundled with a loaded skill instead of passing source: a scripts/*.py ' +
|
|
461
|
-
'path exactly as the skill instructions name it (e.g. "scripts/extract_text.py"). Requires ' +
|
|
462
|
-
'`skill`; leave `command` unset. Never a command line — shell commands go in `command`.'
|
|
463
|
-
},
|
|
464
|
-
skill: {
|
|
465
|
-
type: 'string',
|
|
466
|
-
description: 'With script: the name of the skill that bundles it (e.g. "pdf").'
|
|
467
|
-
},
|
|
468
|
-
scriptArgs: { type: 'array', description: 'With script: string arguments in order.' }
|
|
185
|
+
description: 'stdout/stderr cap (default 8192, max 65536), keeping start and end; raise for long content.'
|
|
186
|
+
}
|
|
469
187
|
},
|
|
470
188
|
required: []
|
|
471
189
|
}
|
|
472
|
-
}
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export function createExecTool({ policyVersion, spawn, killProcess, shell: composedShell, languages = [], routes = [], skillSettings, realpath = defaultRealpath, deniedRoots, skillsDir } = {}) {
|
|
194
|
+
const shell = composedShell ??
|
|
195
|
+
createShellAdapter({
|
|
196
|
+
spawn,
|
|
197
|
+
killProcess,
|
|
198
|
+
loadRuntime: bareRuntime,
|
|
199
|
+
downloadNote: [SHELL_DOWNLOAD_NOTE, ...languages.map((each) => each.text.download)]
|
|
200
|
+
.filter(Boolean)
|
|
201
|
+
.join(' ')
|
|
202
|
+
});
|
|
203
|
+
const commandRequired = (args, scope, language) => firstAnswer(languages, (each) => each.redirect(args, scope)) ??
|
|
204
|
+
(language ? null : shellStray(args)) ??
|
|
205
|
+
'command is required';
|
|
206
|
+
return {
|
|
207
|
+
name: 'exec',
|
|
208
|
+
policyVersion: createHash('sha256')
|
|
209
|
+
.update(JSON.stringify({
|
|
210
|
+
version: 2,
|
|
211
|
+
policyVersion: policyVersion ?? null,
|
|
212
|
+
shell: shell.name,
|
|
213
|
+
languages: languages.map((each) => each.name),
|
|
214
|
+
routes: routes.map((each) => each.name),
|
|
215
|
+
deniedRoots: [...(deniedRoots ?? [])].sort(),
|
|
216
|
+
skillsDir: skillsDir ?? null
|
|
217
|
+
}))
|
|
218
|
+
.digest('hex'),
|
|
219
|
+
toolset: 'exec',
|
|
220
|
+
addons: { 'bare-subprocess': bareRuntime },
|
|
221
|
+
...execSchema(languages),
|
|
473
222
|
autoApprove: false,
|
|
474
223
|
effect(rawArgs, ctx) {
|
|
475
|
-
const
|
|
476
|
-
if (
|
|
224
|
+
const call = resolveCall(rawArgs, languages);
|
|
225
|
+
if ('error' in call) {
|
|
226
|
+
return 'write';
|
|
227
|
+
}
|
|
228
|
+
if (call.bundled) {
|
|
477
229
|
return 'read';
|
|
478
230
|
}
|
|
479
|
-
if (
|
|
480
|
-
return
|
|
231
|
+
if (call.language) {
|
|
232
|
+
return call.language.effect(call.args);
|
|
481
233
|
}
|
|
482
|
-
return shellEffect(String(args.command ?? '').trim(), ctx?.toolOps);
|
|
234
|
+
return shellEffect(String(call.args.command ?? '').trim(), ctx?.toolOps);
|
|
483
235
|
},
|
|
484
236
|
validate(args, ctx) {
|
|
485
|
-
const
|
|
486
|
-
if (
|
|
487
|
-
return
|
|
237
|
+
const call = resolveCall(args, languages);
|
|
238
|
+
if ('error' in call) {
|
|
239
|
+
return call.error;
|
|
488
240
|
}
|
|
489
|
-
const
|
|
241
|
+
const run = loadRun(call, skillsDir);
|
|
242
|
+
if ('error' in run) {
|
|
243
|
+
return run.error;
|
|
244
|
+
}
|
|
245
|
+
const { language } = call;
|
|
246
|
+
const rawArgs = run.args;
|
|
247
|
+
const sandbox = ctx?.sandboxMode === true;
|
|
490
248
|
const command = String(rawArgs.command ?? '').trim();
|
|
491
249
|
if (!command) {
|
|
492
|
-
return
|
|
250
|
+
return commandRequired(rawArgs, { sandbox }, language);
|
|
493
251
|
}
|
|
494
|
-
const scopeError = checkExecutionScope(rawArgs, {
|
|
252
|
+
const scopeError = checkExecutionScope(rawArgs, language, {
|
|
495
253
|
toolOps: ctx?.toolOps,
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
network: pythonNetwork && ctx?.sandboxMode !== true
|
|
254
|
+
sandbox,
|
|
255
|
+
languages
|
|
499
256
|
});
|
|
500
257
|
if (scopeError) {
|
|
501
258
|
return scopeError;
|
|
502
259
|
}
|
|
503
|
-
const python = runsThroughPyodide(rawArgs.language, disablePyodide);
|
|
504
260
|
const workdirGiven = rawArgs.workdir !== undefined && rawArgs.workdir !== null;
|
|
505
|
-
if (workdirGiven && !
|
|
261
|
+
if (workdirGiven && !language && (ctx?.fsRoots ?? []).length === 0) {
|
|
506
262
|
return WORKDIR_NO_ROOTS_ERROR;
|
|
507
263
|
}
|
|
508
|
-
if (
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
if (packages && 'error' in packages) {
|
|
515
|
-
return packages.error;
|
|
516
|
-
}
|
|
517
|
-
const refusal = ctx?.sandboxMode === true ? sandboxInstallError(command, packages) : null;
|
|
518
|
-
if (refusal) {
|
|
519
|
-
return refusal;
|
|
520
|
-
}
|
|
521
|
-
if (!scriptRun || !scriptRun.trusted) {
|
|
522
|
-
const sourceError = checkPythonSource(command);
|
|
523
|
-
if (sourceError) {
|
|
524
|
-
return sourceError;
|
|
525
|
-
}
|
|
526
|
-
const pptxError = checkPptxBuildSource(unwrapPythonSource(command) ?? command, outputs, packages);
|
|
527
|
-
if (pptxError) {
|
|
528
|
-
return pptxError;
|
|
529
|
-
}
|
|
530
|
-
const pdfError = checkPdfBuildSource(unwrapPythonSource(command) ?? command, outputs, packages);
|
|
531
|
-
if (pdfError) {
|
|
532
|
-
return pdfError;
|
|
533
|
-
}
|
|
534
|
-
const bareLength = checkBareLengthArgs(unwrapPythonSource(command) ?? command, packages);
|
|
535
|
-
if (bareLength) {
|
|
536
|
-
return bareLength;
|
|
537
|
-
}
|
|
538
|
-
const inputs = parseInputs(rawArgs.inputs);
|
|
539
|
-
const unstagedRead = checkUnstagedRead(unwrapPythonSource(command) ?? command, Array.isArray(inputs) ? inputs : undefined);
|
|
540
|
-
if (unstagedRead) {
|
|
541
|
-
return unstagedRead;
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
const parsed = parsePackages(rawArgs.packages);
|
|
546
|
-
if (parsed && 'error' in parsed) {
|
|
547
|
-
return parsed.error;
|
|
548
|
-
}
|
|
549
|
-
if (parsed && !python) {
|
|
550
|
-
return PACKAGES_NEED_PYTHON_ERROR;
|
|
264
|
+
if (language) {
|
|
265
|
+
return language.validate(rawArgs, {
|
|
266
|
+
sandbox,
|
|
267
|
+
trusted: run.trusted,
|
|
268
|
+
toolNames: ctx?.toolNames
|
|
269
|
+
});
|
|
551
270
|
}
|
|
552
|
-
return
|
|
271
|
+
return firstAnswer(languages, (each) => each.strays(rawArgs)) ?? shellStray(rawArgs);
|
|
553
272
|
},
|
|
554
273
|
resource(rawArgs, ctx) {
|
|
555
|
-
const
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
274
|
+
const call = resolveCall(rawArgs, languages);
|
|
275
|
+
if ('error' in call) {
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
if (call.bundled) {
|
|
279
|
+
return { kind: 'command', label: call.bundled.label };
|
|
559
280
|
}
|
|
560
|
-
const
|
|
281
|
+
const { args } = call;
|
|
282
|
+
const command = String(args.command ?? '').trim();
|
|
561
283
|
if (!command) {
|
|
562
284
|
return null;
|
|
563
285
|
}
|
|
564
286
|
const workdir = typeof args.workdir === 'string' && args.workdir.trim() ? args.workdir.trim() : null;
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
const body = runsThroughPyodide(args.language, disablePyodide)
|
|
568
|
-
? `python${online ? networkPrefix(source) : ''}${packageSuffix(args)}${fileSuffix(args)}: ${source.slice(0, 120)}`
|
|
287
|
+
const body = call.language
|
|
288
|
+
? call.language.label(args, { sandbox: ctx?.sandboxMode === true })
|
|
569
289
|
: command;
|
|
570
290
|
return {
|
|
571
291
|
kind: 'command',
|
|
@@ -573,20 +293,25 @@ export function createExecTool({ policyVersion, spawn, killProcess, loadPyodide,
|
|
|
573
293
|
};
|
|
574
294
|
},
|
|
575
295
|
async execute(args, ctx) {
|
|
576
|
-
const
|
|
577
|
-
if (
|
|
578
|
-
return { error:
|
|
296
|
+
const call = resolveCall(args, languages);
|
|
297
|
+
if ('error' in call) {
|
|
298
|
+
return { error: call.error };
|
|
579
299
|
}
|
|
580
|
-
const
|
|
300
|
+
const run = loadRun(call, skillsDir);
|
|
301
|
+
if ('error' in run) {
|
|
302
|
+
return { error: run.error };
|
|
303
|
+
}
|
|
304
|
+
const { language } = call;
|
|
305
|
+
const rawArgs = run.args;
|
|
306
|
+
const sandbox = ctx?.sandboxMode === true;
|
|
581
307
|
const command = String(rawArgs.command ?? '').trim();
|
|
582
308
|
if (!command) {
|
|
583
|
-
return { error:
|
|
309
|
+
return { error: commandRequired(rawArgs, { sandbox }, language) };
|
|
584
310
|
}
|
|
585
|
-
const scopeError = checkExecutionScope(rawArgs, {
|
|
311
|
+
const scopeError = checkExecutionScope(rawArgs, language, {
|
|
586
312
|
toolOps: ctx?.toolOps,
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
network: pythonNetwork && ctx?.sandboxMode !== true
|
|
313
|
+
sandbox,
|
|
314
|
+
languages
|
|
590
315
|
});
|
|
591
316
|
if (scopeError) {
|
|
592
317
|
return { error: scopeError };
|
|
@@ -594,14 +319,13 @@ export function createExecTool({ policyVersion, spawn, killProcess, loadPyodide,
|
|
|
594
319
|
const workdir = rawArgs.workdir === undefined || rawArgs.workdir === null
|
|
595
320
|
? undefined
|
|
596
321
|
: String(rawArgs.workdir);
|
|
597
|
-
const
|
|
322
|
+
const deny = await canonicalDenyRoots(deniedRoots, realpath);
|
|
598
323
|
let cwd = workdir;
|
|
599
|
-
if (workdir !== undefined &&
|
|
324
|
+
if (workdir !== undefined && !language) {
|
|
600
325
|
const roots = ctx?.fsRoots ?? [];
|
|
601
326
|
if (roots.length === 0) {
|
|
602
327
|
return { error: WORKDIR_NO_ROOTS_ERROR };
|
|
603
328
|
}
|
|
604
|
-
const deny = await canonicalDenyRoots(deniedRoots, realpath);
|
|
605
329
|
const resolved = await resolveKey(workdir, roots, { realpath, deny });
|
|
606
330
|
if ('error' in resolved) {
|
|
607
331
|
return { error: resolved.error };
|
|
@@ -634,22 +358,18 @@ export function createExecTool({ policyVersion, spawn, killProcess, loadPyodide,
|
|
|
634
358
|
if (maxOutputChars && typeof maxOutputChars === 'object') {
|
|
635
359
|
return maxOutputChars;
|
|
636
360
|
}
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
spawn,
|
|
641
|
-
killProcess,
|
|
642
|
-
loadRuntime: spawn ? undefined : bareRuntime,
|
|
361
|
+
const route = language ? undefined : routes.find((each) => each.claims(command));
|
|
362
|
+
if (route) {
|
|
363
|
+
return route.run(command, ctx, {
|
|
643
364
|
timeoutMs: timeout,
|
|
644
|
-
maxOutputChars
|
|
365
|
+
maxOutputChars,
|
|
366
|
+
signal: ctx?.signal,
|
|
367
|
+
runtime: spawn ? async () => ({ spawn, killProcess }) : bareRuntime
|
|
645
368
|
});
|
|
646
|
-
if (obsidian) {
|
|
647
|
-
return obsidian;
|
|
648
|
-
}
|
|
649
369
|
}
|
|
650
370
|
const skillEnv = skillSettings ? await skillsEnv(skillSettings, ctx) : undefined;
|
|
651
371
|
try {
|
|
652
|
-
const
|
|
372
|
+
const context = {
|
|
653
373
|
attach: ctx?.attach,
|
|
654
374
|
fetchAttachment: ctx?.fetchAttachment,
|
|
655
375
|
turnImages: ctx?.turnImages,
|
|
@@ -657,14 +377,18 @@ export function createExecTool({ policyVersion, spawn, killProcess, loadPyodide,
|
|
|
657
377
|
sandboxMode: ctx?.sandboxMode,
|
|
658
378
|
toolNames: ctx?.toolNames,
|
|
659
379
|
approval: ctx?.approval,
|
|
660
|
-
|
|
661
|
-
|
|
380
|
+
askUser: ctx?.askUser,
|
|
381
|
+
writeRoots: (ctx?.fsWriteRoots ?? []).flatMap((each) => each.kind === 'local' ? [each.root] : []),
|
|
382
|
+
deniedRoots: deny
|
|
383
|
+
};
|
|
384
|
+
const execution = language?.resolve(rawArgs, context) ?? shell.resolve(rawArgs, context);
|
|
662
385
|
return await execution.run({
|
|
663
386
|
cwd,
|
|
664
387
|
timeoutMs: timeout,
|
|
665
388
|
maxOutputChars,
|
|
666
389
|
signal: ctx?.signal,
|
|
667
|
-
env: skillEnv
|
|
390
|
+
env: skillEnv,
|
|
391
|
+
spill: ctx?.spill
|
|
668
392
|
});
|
|
669
393
|
}
|
|
670
394
|
catch (err) {
|