@qvac/harness 1.0.0-rc.1 → 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 +4 -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 +261 -484
- 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,6 +1,6 @@
|
|
|
1
|
-
import { errorMessage } from '
|
|
2
|
-
import { hlog } from '
|
|
3
|
-
import { MAX_OUTPUT_FILE_BYTES, MAX_OUTPUT_TOTAL_BYTES } from '
|
|
1
|
+
import { errorMessage } from '../../lib/guards.js';
|
|
2
|
+
import { hlog } from '../../lib/log.js';
|
|
3
|
+
import { MAX_OUTPUT_FILE_BYTES, MAX_OUTPUT_TOTAL_BYTES } from '../../lib/tools/attachments/output-policy.js';
|
|
4
4
|
let runCounter = 0;
|
|
5
5
|
function filePath(dir, name) {
|
|
6
6
|
return `${dir}/${name}`;
|
|
@@ -20,12 +20,10 @@ export const MODULE_DISTRIBUTIONS = {
|
|
|
20
20
|
cvxpy: 'cvxpy-base',
|
|
21
21
|
dateutil: 'python-dateutil',
|
|
22
22
|
dns: 'dnspython',
|
|
23
|
-
docx: 'python-docx',
|
|
24
23
|
erfa: 'pyerfa',
|
|
25
24
|
fitz: 'PyMuPDF',
|
|
26
25
|
flint: 'python-flint',
|
|
27
26
|
flirt: 'python-flirt',
|
|
28
|
-
fpdf: 'fpdf2',
|
|
29
27
|
google: 'protobuf',
|
|
30
28
|
gridfs: 'pymongo',
|
|
31
29
|
isympy: 'sympy',
|
|
@@ -33,7 +31,6 @@ export const MODULE_DISTRIBUTIONS = {
|
|
|
33
31
|
mpl_toolkits: 'matplotlib',
|
|
34
32
|
mypyc: 'mypy',
|
|
35
33
|
nacl: 'pynacl',
|
|
36
|
-
pptx: 'python-pptx',
|
|
37
34
|
pygame: 'pygame-ce',
|
|
38
35
|
pylab: 'matplotlib',
|
|
39
36
|
pysat: 'python-sat',
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AbortController } from 'bare-abort-controller';
|
|
2
2
|
import ScopeLock from 'scope-lock';
|
|
3
|
-
import { errorMessage } from '
|
|
4
|
-
import { AbortedError, raceAbort } from '
|
|
5
|
-
import { hlog } from '
|
|
6
|
-
import { MAX_OUTPUT_CHARS } from '../../runner.js';
|
|
3
|
+
import { errorMessage } from '../../lib/guards.js';
|
|
4
|
+
import { AbortedError, raceAbort } from '../../lib/helpers/race-abort.js';
|
|
5
|
+
import { hlog } from '../../lib/log.js';
|
|
6
|
+
import { MAX_OUTPUT_CHARS } from '../../lib/tools/exec/runner.js';
|
|
7
7
|
import { startInterruptTimer } from './interrupt-timer.js';
|
|
8
8
|
import { pyodideLoadOptions } from './loader.js';
|
|
9
9
|
import { isPyodideFatal, performRun } from './run-session.js';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ExecutionAdapter } from '../../lib/contract/exec.ts';
|
|
2
|
+
import { type ExecInput } from '../../lib/tools/attachments/staging.ts';
|
|
3
|
+
import { type ExecError } from '../../lib/tools/attachments/output-policy.ts';
|
|
4
|
+
import { type LoadPyodideFn } from './pyodide.ts';
|
|
5
|
+
export declare function pinned(spec: string): string;
|
|
6
|
+
export declare function pipMessage(targets: readonly string[] | null, { sandbox }?: {
|
|
7
|
+
sandbox?: boolean | undefined;
|
|
8
|
+
}): string;
|
|
9
|
+
export declare function sandboxInstallError(command: string, declared: readonly string[] | undefined): string | null;
|
|
10
|
+
export interface PipFromSourceHintOptions {
|
|
11
|
+
readonly packages?: readonly string[] | undefined;
|
|
12
|
+
readonly sandbox?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function pipFromSourceHint(stderr: string, source: string, { packages, sandbox }?: PipFromSourceHintOptions): string | null;
|
|
15
|
+
export declare function stringLiteralProgramHint(source: string): string | null;
|
|
16
|
+
export declare function checkCollapsedCompound(source: string): string | null;
|
|
17
|
+
export declare function checkPythonSource(command: string): string | null;
|
|
18
|
+
export declare function syntaxErrorHint(stderr: string, source: string): string | null;
|
|
19
|
+
export declare function missingFileHint(stderr: string): string | null;
|
|
20
|
+
export declare function parsePackages(value: unknown): string[] | ExecError | undefined;
|
|
21
|
+
export declare function parseInputs(value: unknown): ExecInput[] | ExecError | undefined;
|
|
22
|
+
export declare function parseOutputs(value: unknown): string[] | ExecError | undefined;
|
|
23
|
+
export declare function parseWorkdir(value: unknown): string | ExecError | undefined;
|
|
24
|
+
export interface OfficeImportContext {
|
|
25
|
+
readonly packages: readonly string[] | undefined;
|
|
26
|
+
readonly toolNames: readonly string[] | undefined;
|
|
27
|
+
}
|
|
28
|
+
export declare function officeModuleHint(stderr: string, toolNames: readonly string[] | undefined): string | null;
|
|
29
|
+
export declare function officeImportError(source: string, { packages, toolNames }: OfficeImportContext): string | null;
|
|
30
|
+
export interface MissingModuleHintOptions {
|
|
31
|
+
readonly packages?: readonly string[] | undefined;
|
|
32
|
+
readonly sandbox?: boolean;
|
|
33
|
+
readonly network?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare function missingModuleHint(stderr: string, { packages, sandbox, network }?: MissingModuleHintOptions): string | null;
|
|
36
|
+
export declare function shellNameHint(stderr: string): string | null;
|
|
37
|
+
export declare function noProcessHint(stderr: string, sandbox?: boolean): string | null;
|
|
38
|
+
export declare function noNetworkHint(stderr: string, tools?: readonly string[], network?: boolean): string | null;
|
|
39
|
+
export declare function nativeWheelHint(stderr: string): string | null;
|
|
40
|
+
export declare function packageFetchFailedHint(stderr: string): string | null;
|
|
41
|
+
export declare function createPythonAdapter(loadPyodide?: LoadPyodideFn, network?: boolean): ExecutionAdapter;
|
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import b4a from 'b4a';
|
|
2
|
+
import { attachOutputs, stageInputs } from '../../lib/tools/attachments/staging.js';
|
|
3
|
+
import { checkFileName, checkOutputName, MAX_INPUTS, MAX_OUTPUTS } from '../../lib/tools/attachments/output-policy.js';
|
|
4
|
+
import { runPython } from './pyodide.js';
|
|
5
|
+
import { isTranscoder, TRANSCODE_ERROR, VIDEO_TOOLS_ERROR, videoTool } from '../../lib/tools/exec/video-tools.js';
|
|
6
|
+
import { moduleDistribution } from './distributions.js';
|
|
7
|
+
import { namedHosts } from './named-hosts.js';
|
|
8
|
+
import { normalizeDistribution, planVendoredInstall, vendoredSpec } from './wheels.js';
|
|
9
|
+
import { isPythonLanguage, pipInstallTargets, unwrapPythonSource } from '../../lib/tools/exec/python-source.js';
|
|
10
|
+
const SHELL_WRAPPER = /^(python3?|py|pip3?)(\s*$|\s+(-[A-Za-z]|['"]|[\w./]))/;
|
|
11
|
+
const SANDBOX_NO_INSTALL = 'and sandbox mode installs only the packages bundled with this app, which do not include it. Use only what is already installed, or tell the user it is unavailable while sandbox mode is on.';
|
|
12
|
+
const specName = (spec) => normalizeDistribution(spec.split(/[=<>!~[]/)[0] ?? '');
|
|
13
|
+
export function pinned(spec) {
|
|
14
|
+
return /[=<>!~]/.test(spec) ? spec : (vendoredSpec(spec) ?? spec);
|
|
15
|
+
}
|
|
16
|
+
export function pipMessage(targets, { sandbox = false } = {}) {
|
|
17
|
+
const specs = targets?.map(pinned) ?? null;
|
|
18
|
+
if (sandbox && !(specs?.length && planVendoredInstall(specs))) {
|
|
19
|
+
return `pip is not available, ${SANDBOX_NO_INSTALL}`;
|
|
20
|
+
}
|
|
21
|
+
const declare = specs ? `packages: ${JSON.stringify(specs)}` : 'the PyPI names in packages';
|
|
22
|
+
return `pip is not available. Call exec with language "python", ${declare} and the Python source in command. Installing and running are the same one call.`;
|
|
23
|
+
}
|
|
24
|
+
export function sandboxInstallError(command, declared) {
|
|
25
|
+
const install = pipInstallTargets(command)?.map(pinned) ?? null;
|
|
26
|
+
const packages = [...new Set([...(declared ?? []), ...(install ?? [])])];
|
|
27
|
+
if (packages.length === 0 || planVendoredInstall(packages)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return install
|
|
31
|
+
? pipMessage(install, { sandbox: true })
|
|
32
|
+
: 'sandbox mode: installing packages reaches the network';
|
|
33
|
+
}
|
|
34
|
+
const PIP_CALL = /\b(?:subprocess\.\w+|os\.(?:system|popen)|Popen|check_(?:output|call))\s*\(/;
|
|
35
|
+
const STRING_LITERAL = /"([^"\n]*)"|'([^'\n]*)'/g;
|
|
36
|
+
function pipLineTargets(line) {
|
|
37
|
+
const words = [...line.matchAll(STRING_LITERAL)].map((match) => match[1] ?? match[2] ?? '');
|
|
38
|
+
const whole = words.find((word) => /\bpip3?\b[^]*\binstall\b/.test(word));
|
|
39
|
+
if (whole !== undefined) {
|
|
40
|
+
return pipInstallTargets(whole.trim());
|
|
41
|
+
}
|
|
42
|
+
const at = words.findIndex((word) => /^pip3?$/.test(word));
|
|
43
|
+
if (at === -1) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
return pipInstallTargets(words.slice(at).join(' '));
|
|
47
|
+
}
|
|
48
|
+
export function pipFromSourceHint(stderr, source, { packages, sandbox = false } = {}) {
|
|
49
|
+
if (!/emscripten does not support processes/.test(stderr))
|
|
50
|
+
return null;
|
|
51
|
+
for (const line of source.split('\n')) {
|
|
52
|
+
if (!PIP_CALL.test(line))
|
|
53
|
+
continue;
|
|
54
|
+
const targets = pipLineTargets(line);
|
|
55
|
+
if (targets === undefined) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const declared = packages ?? [];
|
|
59
|
+
const has = new Set(declared.map(specName));
|
|
60
|
+
const missing = (targets ?? []).filter((t) => !has.has(specName(t))).map(pinned);
|
|
61
|
+
if (sandbox && (targets === null || !planVendoredInstall([...declared, ...missing]))) {
|
|
62
|
+
return `pip cannot run here: this Python cannot start processes, so that line failed, ${SANDBOX_NO_INSTALL} Delete the pip line.`;
|
|
63
|
+
}
|
|
64
|
+
if (targets === null) {
|
|
65
|
+
return 'pip cannot run here: this Python cannot start processes, so that line failed. Delete it and declare the PyPI names in packages on this same call.';
|
|
66
|
+
}
|
|
67
|
+
if (missing.length) {
|
|
68
|
+
return `pip cannot run here: this Python cannot start processes, so that line failed. Delete it and send the same source with packages: ${JSON.stringify([...declared, ...missing])} on this one call. Installing and running are the same call.`;
|
|
69
|
+
}
|
|
70
|
+
if (declared.length) {
|
|
71
|
+
return `pip cannot run here: this Python cannot start processes, so that line failed. packages: ${JSON.stringify(declared)} already installs before your code runs, so delete the pip line and send the rest.`;
|
|
72
|
+
}
|
|
73
|
+
return 'pip cannot run here: this Python cannot start processes, so that line failed. Delete it and declare the PyPI names in packages on this same call.';
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
export function stringLiteralProgramHint(source) {
|
|
78
|
+
const first = source.trimStart()[0];
|
|
79
|
+
if (first !== '"' && first !== "'") {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (!source.trimEnd().endsWith(first)) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
if (!/\bimport\b/.test(source)) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return ('command is wrapped in a string literal, so Python evaluates it as text and runs ' +
|
|
89
|
+
'nothing: remove the wrapping quotes (and any escaped \\" quotes) so the first line ' +
|
|
90
|
+
'of command is the first line of the program, e.g. import json.');
|
|
91
|
+
}
|
|
92
|
+
const COLLAPSED_COMPOUND = /;\s*(?:async\s+)?(?:for|if|while|with|def|class|try|match)\b/;
|
|
93
|
+
export function checkCollapsedCompound(source) {
|
|
94
|
+
if (source.includes('\n'))
|
|
95
|
+
return null;
|
|
96
|
+
if (!COLLAPSED_COMPOUND.test(source))
|
|
97
|
+
return null;
|
|
98
|
+
return ('command must keep real newlines: a compound statement (for/if/while/with/def/…) ' +
|
|
99
|
+
'cannot follow a semicolon. Pass multi-line Python source with newline characters, ' +
|
|
100
|
+
'not a single-line semicolon chain.');
|
|
101
|
+
}
|
|
102
|
+
export function checkPythonSource(command) {
|
|
103
|
+
const source = unwrapPythonSource(command) ?? command;
|
|
104
|
+
const literal = stringLiteralProgramHint(source);
|
|
105
|
+
if (literal) {
|
|
106
|
+
return literal;
|
|
107
|
+
}
|
|
108
|
+
const collapsed = checkCollapsedCompound(source);
|
|
109
|
+
if (collapsed) {
|
|
110
|
+
return collapsed;
|
|
111
|
+
}
|
|
112
|
+
const first = command.trimStart().split('\n')[0] ?? '';
|
|
113
|
+
if (!SHELL_WRAPPER.test(first)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
if (pipInstallTargets(command)) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
if (/^pip3?\b/.test(first) || /^(python3?|py)\s+-m\s+pip\b/.test(first)) {
|
|
120
|
+
return 'language "python" does not run shell commands: install packages via the packages argument (e.g. packages: ["requests"]), not pip';
|
|
121
|
+
}
|
|
122
|
+
if (unwrapPythonSource(command)) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return 'language "python" runs command as Python source: its first line is the first line of the program, so command must start with the code itself. There is no shell, no interpreter, and no script file to name.';
|
|
126
|
+
}
|
|
127
|
+
export function syntaxErrorHint(stderr, source) {
|
|
128
|
+
if (!/SyntaxError/.test(stderr))
|
|
129
|
+
return null;
|
|
130
|
+
return (checkCollapsedCompound(source) ??
|
|
131
|
+
'SyntaxError means the Python source is invalid as written — keep real newlines for for/if/with/def bodies; do not collapse a multi-line program into one semicolon-separated line.');
|
|
132
|
+
}
|
|
133
|
+
const ATTACHMENT_ID = /^[0-9a-f]{32}$/i;
|
|
134
|
+
export function missingFileHint(stderr) {
|
|
135
|
+
const name = /FileNotFoundError: \[Errno \d+\] No such file or directory: '([^']+)'/.exec(stderr)?.[1];
|
|
136
|
+
if (!name) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
if (ATTACHMENT_ID.test(name)) {
|
|
140
|
+
return (`"${name}" is an attachment id, not a file name, and nothing is on disk under it. ` +
|
|
141
|
+
'An id belongs in `attachmentId`; `path` is a bare file name you choose, and the code ' +
|
|
142
|
+
`opens that name. Stage it as inputs [{ "attachmentId": "${name}", "path": "photo.png" }] ` +
|
|
143
|
+
'and open "photo.png".');
|
|
144
|
+
}
|
|
145
|
+
return (`the working directory starts empty on every call — ${name} from an earlier run is gone. ` +
|
|
146
|
+
`Stage the chat attachment via inputs [{ "attachmentId": "<id from the tool result that ` +
|
|
147
|
+
`produced it, or from the [Attached file …] line if the user uploaded it>", ` +
|
|
148
|
+
`"path": "${name}" }] and open it by that bare name; if no id for it appears anywhere ` +
|
|
149
|
+
'in the chat, ask the user to attach the file.');
|
|
150
|
+
}
|
|
151
|
+
export function parsePackages(value) {
|
|
152
|
+
if (value === undefined || value === null)
|
|
153
|
+
return undefined;
|
|
154
|
+
if (!Array.isArray(value) || value.some((p) => typeof p !== 'string' || !p.trim())) {
|
|
155
|
+
return { error: 'packages must be an array of non-empty strings' };
|
|
156
|
+
}
|
|
157
|
+
const trimmed = value.map((p) => p.trim());
|
|
158
|
+
if (trimmed.some((p) => p.includes(':'))) {
|
|
159
|
+
return { error: 'packages must be PyPI names, not URLs' };
|
|
160
|
+
}
|
|
161
|
+
return trimmed;
|
|
162
|
+
}
|
|
163
|
+
function inputEntry(value) {
|
|
164
|
+
if (typeof value !== 'object' || value === null)
|
|
165
|
+
return null;
|
|
166
|
+
return {
|
|
167
|
+
attachmentId: 'attachmentId' in value ? value.attachmentId : undefined,
|
|
168
|
+
path: 'path' in value ? value.path : undefined
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
export function parseInputs(value) {
|
|
172
|
+
if (value === undefined || value === null)
|
|
173
|
+
return undefined;
|
|
174
|
+
if (!Array.isArray(value)) {
|
|
175
|
+
return { error: 'inputs must be an array' };
|
|
176
|
+
}
|
|
177
|
+
if (value.length > MAX_INPUTS) {
|
|
178
|
+
return { error: `inputs must declare at most ${MAX_INPUTS} files` };
|
|
179
|
+
}
|
|
180
|
+
const parsed = [];
|
|
181
|
+
const paths = new Set();
|
|
182
|
+
for (const raw of value) {
|
|
183
|
+
const entry = inputEntry(raw);
|
|
184
|
+
if (!entry) {
|
|
185
|
+
return { error: 'each input must be an { attachmentId, path } object' };
|
|
186
|
+
}
|
|
187
|
+
const attachmentId = attachmentIdOf(entry.attachmentId);
|
|
188
|
+
if (attachmentId === '') {
|
|
189
|
+
return { error: 'attachmentId must be a non-empty string, or omitted for a user upload' };
|
|
190
|
+
}
|
|
191
|
+
const path = typeof entry.path === 'string' ? entry.path.trim() : '';
|
|
192
|
+
const nameError = checkFileName(path);
|
|
193
|
+
if (nameError) {
|
|
194
|
+
return { error: `input path: ${nameError}` };
|
|
195
|
+
}
|
|
196
|
+
if (paths.has(path)) {
|
|
197
|
+
return { error: 'input paths must be unique' };
|
|
198
|
+
}
|
|
199
|
+
paths.add(path);
|
|
200
|
+
parsed.push({ attachmentId, path });
|
|
201
|
+
}
|
|
202
|
+
return parsed;
|
|
203
|
+
}
|
|
204
|
+
export function parseOutputs(value) {
|
|
205
|
+
if (value === undefined || value === null)
|
|
206
|
+
return undefined;
|
|
207
|
+
if (!Array.isArray(value) || value.some((o) => typeof o !== 'string')) {
|
|
208
|
+
return { error: 'outputs must be an array of file names' };
|
|
209
|
+
}
|
|
210
|
+
if (value.length > MAX_OUTPUTS) {
|
|
211
|
+
return { error: `outputs must declare at most ${MAX_OUTPUTS} files` };
|
|
212
|
+
}
|
|
213
|
+
const trimmed = [...new Set(value.map((o) => o.trim()))];
|
|
214
|
+
for (const name of trimmed) {
|
|
215
|
+
const nameError = checkOutputName(name);
|
|
216
|
+
if (nameError) {
|
|
217
|
+
return { error: `output name: ${nameError}` };
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return trimmed;
|
|
221
|
+
}
|
|
222
|
+
export function parseWorkdir(value) {
|
|
223
|
+
if (value === undefined || value === null)
|
|
224
|
+
return undefined;
|
|
225
|
+
if (typeof value !== 'string') {
|
|
226
|
+
return { error: 'workdir must be a string' };
|
|
227
|
+
}
|
|
228
|
+
const trimmed = value.trim();
|
|
229
|
+
if (!trimmed) {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
const nameError = checkFileName(trimmed);
|
|
233
|
+
if (nameError) {
|
|
234
|
+
return { error: `workdir: ${nameError}` };
|
|
235
|
+
}
|
|
236
|
+
return trimmed;
|
|
237
|
+
}
|
|
238
|
+
function prepare(args, cwd) {
|
|
239
|
+
const packages = parsePackages(args.packages);
|
|
240
|
+
if (packages && 'error' in packages) {
|
|
241
|
+
return packages;
|
|
242
|
+
}
|
|
243
|
+
const inputs = parseInputs(args.inputs);
|
|
244
|
+
if (inputs && 'error' in inputs) {
|
|
245
|
+
return inputs;
|
|
246
|
+
}
|
|
247
|
+
const outputs = parseOutputs(args.outputs);
|
|
248
|
+
if (outputs && 'error' in outputs) {
|
|
249
|
+
return outputs;
|
|
250
|
+
}
|
|
251
|
+
const workdir = parseWorkdir(cwd);
|
|
252
|
+
if (workdir && typeof workdir === 'object') {
|
|
253
|
+
return workdir;
|
|
254
|
+
}
|
|
255
|
+
return { packages, inputs, outputs, workdir };
|
|
256
|
+
}
|
|
257
|
+
const OFFICE_MODULES = {
|
|
258
|
+
pptx: { tool: 'pptx', skill: 'presentations' },
|
|
259
|
+
docx: { tool: 'docx', skill: 'word' },
|
|
260
|
+
openpyxl: { tool: 'xlsx', skill: 'excel' }
|
|
261
|
+
};
|
|
262
|
+
const OFFICE_PACKAGES = {
|
|
263
|
+
'python-pptx': 'pptx',
|
|
264
|
+
'python-docx': 'docx',
|
|
265
|
+
openpyxl: 'openpyxl'
|
|
266
|
+
};
|
|
267
|
+
const OFFICE_IMPORT = /^\s*(?:from\s+(pptx|docx|openpyxl)\b|import\s+(?:[\w.]+\s*(?:as\s+\w+\s*)?,\s*)*(pptx|docx|openpyxl)\b)/m;
|
|
268
|
+
function officeAnswer(module, toolNames) {
|
|
269
|
+
const office = OFFICE_MODULES[module];
|
|
270
|
+
if (!office) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
const call = toolNames?.includes(office.tool)
|
|
274
|
+
? `call the ${office.tool} tool`
|
|
275
|
+
: `load the "${office.skill}" skill and call the ${office.tool} tool it grants`;
|
|
276
|
+
return `module "${module}" is not installed: Office files are read and edited without Python here. Do not retry in Python; ${call} with the same content.`;
|
|
277
|
+
}
|
|
278
|
+
export function officeModuleHint(stderr, toolNames) {
|
|
279
|
+
const module = /ModuleNotFoundError: No module named '([^'.]+)/.exec(stderr)?.[1];
|
|
280
|
+
return module ? officeAnswer(module, toolNames) : null;
|
|
281
|
+
}
|
|
282
|
+
export function officeImportError(source, { packages, toolNames }) {
|
|
283
|
+
const imported = OFFICE_IMPORT.exec(source);
|
|
284
|
+
const declared = (packages ?? [])
|
|
285
|
+
.map((spec) => OFFICE_PACKAGES[spec.split(/[=<>!~[ ]/)[0]?.toLowerCase() ?? ''])
|
|
286
|
+
.find(Boolean);
|
|
287
|
+
const module = imported?.[1] ?? imported?.[2] ?? declared;
|
|
288
|
+
return module ? officeAnswer(module, toolNames) : null;
|
|
289
|
+
}
|
|
290
|
+
export function missingModuleHint(stderr, { packages, sandbox = false, network = false } = {}) {
|
|
291
|
+
const module = /ModuleNotFoundError: No module named '([^']+)'/.exec(stderr)?.[1];
|
|
292
|
+
if (!module) {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
const root = module.split('.')[0] ?? '';
|
|
296
|
+
const tool = videoTool(root);
|
|
297
|
+
if (tool && (!network || isTranscoder(tool))) {
|
|
298
|
+
return network ? TRANSCODE_ERROR : VIDEO_TOOLS_ERROR;
|
|
299
|
+
}
|
|
300
|
+
if (module !== root) {
|
|
301
|
+
const then = sandbox
|
|
302
|
+
? 'If the path is right it ships as its own distribution under a shared namespace, which sandbox mode cannot install: tell the user.'
|
|
303
|
+
: 'If the path is right it ships as its own distribution under a shared namespace, as google.* does: declare that distribution in packages.';
|
|
304
|
+
return `"${module}" failed to import although "${root}" loaded. Check the import path first. ${then}`;
|
|
305
|
+
}
|
|
306
|
+
const distribution = moduleDistribution(root);
|
|
307
|
+
const provider = distribution ?? root;
|
|
308
|
+
const vendored = vendoredSpec(provider);
|
|
309
|
+
if (sandbox && !vendored) {
|
|
310
|
+
return `module "${root}" is not installed, ${SANDBOX_NO_INSTALL}`;
|
|
311
|
+
}
|
|
312
|
+
const spec = vendored ?? provider;
|
|
313
|
+
const renamed = distribution !== null && distribution.toLowerCase() !== root.toLowerCase();
|
|
314
|
+
const declared = (packages ?? []).map(specName);
|
|
315
|
+
if (declared.includes(root.toLowerCase()) && renamed) {
|
|
316
|
+
return `"${root}" was declared in packages but does not provide that module; the distribution that does is "${spec}": put that in packages instead. There is no pip.`;
|
|
317
|
+
}
|
|
318
|
+
if (declared.includes(root.toLowerCase()) || declared.includes(provider.toLowerCase())) {
|
|
319
|
+
return `"${provider}" is already declared in packages and still does not provide "${root}", so declaring it again cannot help. Import the module name the library really exports, or tell the user it is unavailable on this device.`;
|
|
320
|
+
}
|
|
321
|
+
return `module "${root}" is not installed: add "${spec}" to packages (packages: ["${spec}"]) and run the same source again. There is no pip.`;
|
|
322
|
+
}
|
|
323
|
+
export function shellNameHint(stderr) {
|
|
324
|
+
const name = /NameError: name '(python3?|py|pip3?)' is not defined/.exec(stderr)?.[1];
|
|
325
|
+
if (!name) {
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
return `"${name}" is not defined because command already runs as Python source — remove the ${name} invocation and pass only the Python code itself`;
|
|
329
|
+
}
|
|
330
|
+
export function noProcessHint(stderr, sandbox = false) {
|
|
331
|
+
if (!/emscripten does not support processes/.test(stderr))
|
|
332
|
+
return null;
|
|
333
|
+
const packages = sandbox
|
|
334
|
+
? ' In sandbox mode only the packages bundled with this app install;'
|
|
335
|
+
: ' Declare PyPI packages in packages;';
|
|
336
|
+
return `Python here cannot start processes: there is no shell and no pip from the source.${packages} run a shell command as its own exec call without language.`;
|
|
337
|
+
}
|
|
338
|
+
const FETCH_TOOLS = ['http_request', 'web_fetch'];
|
|
339
|
+
export function noNetworkHint(stderr, tools, network = false) {
|
|
340
|
+
if (network)
|
|
341
|
+
return null;
|
|
342
|
+
if (!/Host is unreachable|Network is unreachable|socket\.gaierror|URLError|Temporary failure in name resolution|NewConnectionError|XMLHttpRequest is not defined/.test(stderr)) {
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
const failed = 'Python here cannot open network connections (requests, urllib and sockets fail), and retrying will not change that.';
|
|
346
|
+
const fetchers = FETCH_TOOLS.filter((name) => !tools || tools.includes(name));
|
|
347
|
+
return fetchers.length
|
|
348
|
+
? `${failed} Fetch the URL with the ${fetchers.join(' or ')} tool and pass the data into the source.`
|
|
349
|
+
: `${failed} No tool that fetches a URL is available to you, so tell the user.`;
|
|
350
|
+
}
|
|
351
|
+
export function nativeWheelHint(stderr) {
|
|
352
|
+
const name = /Can't find a pure Python 3 wheel for '([^']+)'/.exec(stderr)?.[1];
|
|
353
|
+
if (!name) {
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
return `"${name}" is built from compiled code, and this device installs only pure-Python packages plus the set already built into its Python. Nothing about this call can install it: use a pure-Python library instead, or tell the user it is not available here.`;
|
|
357
|
+
}
|
|
358
|
+
export function packageFetchFailedHint(stderr) {
|
|
359
|
+
const name = /Can't fetch metadata for '([^']+)'/.exec(stderr)?.[1];
|
|
360
|
+
if (!name) {
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
363
|
+
return `"${name}" could not be fetched: either it is not a PyPI distribution name or this device has no network. Where a skill documents an exact spec for that library, send that spec verbatim; otherwise the package cannot be installed here — tell the user and stop. Do not try other names.`;
|
|
364
|
+
}
|
|
365
|
+
function fail(stderr) {
|
|
366
|
+
return { stdout: '', stderr, exitCode: 1 };
|
|
367
|
+
}
|
|
368
|
+
async function stage(inputs, fetchAttachment, opts = {}) {
|
|
369
|
+
if (!inputs?.length)
|
|
370
|
+
return undefined;
|
|
371
|
+
if (!fetchAttachment) {
|
|
372
|
+
return { error: 'this device cannot read chat attachments' };
|
|
373
|
+
}
|
|
374
|
+
return stageInputs(fetchAttachment, inputs, opts);
|
|
375
|
+
}
|
|
376
|
+
async function collect(result, { declared, attach, runBudget, source }) {
|
|
377
|
+
const base = {
|
|
378
|
+
stdout: result.stdout,
|
|
379
|
+
stderr: result.stderr,
|
|
380
|
+
exitCode: result.exitCode
|
|
381
|
+
};
|
|
382
|
+
if (!declared?.length || !attach) {
|
|
383
|
+
return base;
|
|
384
|
+
}
|
|
385
|
+
const { attachments, missingOutputs, rejectedOutputs } = await attachOutputs(attach, (result.exitCode === 0 && result.files) || new Map(), { declared, runBudget });
|
|
386
|
+
const rejected = [...(result.rejected ?? []), ...rejectedOutputs];
|
|
387
|
+
return {
|
|
388
|
+
...base,
|
|
389
|
+
attachments: attachments.length > 0 ? attachments : undefined,
|
|
390
|
+
missingOutputs: missingOutputs.length > 0 ? missingOutputs : undefined,
|
|
391
|
+
rejectedOutputs: rejected.length > 0 ? rejected : undefined
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
const CONNECT_ANSWER_MS = 60_000;
|
|
395
|
+
function connectAsker(askUser) {
|
|
396
|
+
return async (host) => {
|
|
397
|
+
let timer;
|
|
398
|
+
const late = new Promise((resolve) => {
|
|
399
|
+
timer = setTimeout(() => resolve(null), CONNECT_ANSWER_MS);
|
|
400
|
+
});
|
|
401
|
+
try {
|
|
402
|
+
const answer = await Promise.race([
|
|
403
|
+
askUser({
|
|
404
|
+
question: `This Python run wants to connect to ${host}, which its approved code does not name. Allow it for this run?`,
|
|
405
|
+
options: ['Allow', 'Deny']
|
|
406
|
+
}),
|
|
407
|
+
late
|
|
408
|
+
]);
|
|
409
|
+
return /^allow/i.test((answer ?? '').trim());
|
|
410
|
+
}
|
|
411
|
+
finally {
|
|
412
|
+
clearTimeout(timer);
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
export function createPythonAdapter(loadPyodide, network = false) {
|
|
417
|
+
return {
|
|
418
|
+
resolve(args, ctx) {
|
|
419
|
+
if (!isPythonLanguage(args.language))
|
|
420
|
+
return null;
|
|
421
|
+
const command = String(args.command ?? '').trim();
|
|
422
|
+
const attach = ctx?.attach;
|
|
423
|
+
const fetchAttachment = ctx?.fetchAttachment;
|
|
424
|
+
const turnImages = ctx?.turnImages;
|
|
425
|
+
const runBudget = ctx?.runBudget;
|
|
426
|
+
const sandbox = ctx?.sandboxMode === true;
|
|
427
|
+
const toolNames = ctx?.toolNames;
|
|
428
|
+
const approved = ctx?.approval === 'allowed' || ctx?.approval === 'skip-all';
|
|
429
|
+
const reach = network && !sandbox && approved;
|
|
430
|
+
const gated = reach && ctx?.approval === 'allowed';
|
|
431
|
+
const confirmConnect = ctx?.askUser ? connectAsker(ctx.askUser) : undefined;
|
|
432
|
+
return {
|
|
433
|
+
async run(options) {
|
|
434
|
+
if (!command) {
|
|
435
|
+
return fail('command is required');
|
|
436
|
+
}
|
|
437
|
+
const sourceError = checkPythonSource(command);
|
|
438
|
+
if (sourceError) {
|
|
439
|
+
return fail(sourceError);
|
|
440
|
+
}
|
|
441
|
+
const source = unwrapPythonSource(command) ?? command;
|
|
442
|
+
const prepared = prepare(args, options.cwd);
|
|
443
|
+
if ('error' in prepared) {
|
|
444
|
+
return fail(prepared.error);
|
|
445
|
+
}
|
|
446
|
+
if (prepared.outputs?.length && !attach) {
|
|
447
|
+
return fail('this device cannot persist produced files');
|
|
448
|
+
}
|
|
449
|
+
const staged = await stage(prepared.inputs, fetchAttachment, {
|
|
450
|
+
turnImages,
|
|
451
|
+
signal: options.signal
|
|
452
|
+
});
|
|
453
|
+
if (staged && 'error' in staged) {
|
|
454
|
+
return fail(staged.error);
|
|
455
|
+
}
|
|
456
|
+
const install = pipInstallTargets(command)?.map(pinned) ?? null;
|
|
457
|
+
const packages = install
|
|
458
|
+
? [...new Set([...(prepared.packages ?? []), ...install])]
|
|
459
|
+
: prepared.packages;
|
|
460
|
+
const refusal = sandbox ? sandboxInstallError(command, prepared.packages) : null;
|
|
461
|
+
if (refusal) {
|
|
462
|
+
return fail(refusal);
|
|
463
|
+
}
|
|
464
|
+
const result = await runPython(install ? 'pass' : source, {
|
|
465
|
+
timeoutMs: options.timeoutMs,
|
|
466
|
+
maxOutputChars: options.maxOutputChars,
|
|
467
|
+
signal: options.signal,
|
|
468
|
+
packages,
|
|
469
|
+
inputs: staged?.files,
|
|
470
|
+
outputs: prepared.outputs,
|
|
471
|
+
workdir: prepared.workdir,
|
|
472
|
+
loadPyodide,
|
|
473
|
+
network: reach,
|
|
474
|
+
hosts: gated ? namedHosts(source) : undefined,
|
|
475
|
+
askConnect: gated ? confirmConnect : undefined
|
|
476
|
+
});
|
|
477
|
+
const hint = packageFetchFailedHint(result.stderr) ??
|
|
478
|
+
nativeWheelHint(result.stderr) ??
|
|
479
|
+
officeModuleHint(result.stderr, toolNames) ??
|
|
480
|
+
missingModuleHint(result.stderr, { packages, sandbox, network: reach }) ??
|
|
481
|
+
pipFromSourceHint(result.stderr, source, { packages, sandbox }) ??
|
|
482
|
+
noProcessHint(result.stderr, sandbox) ??
|
|
483
|
+
noNetworkHint(result.stderr, toolNames, reach) ??
|
|
484
|
+
missingFileHint(result.stderr) ??
|
|
485
|
+
shellNameHint(result.stderr) ??
|
|
486
|
+
syntaxErrorHint(result.stderr, source);
|
|
487
|
+
const hinted = hint ? { ...result, stderr: `${result.stderr}\n${hint}` } : result;
|
|
488
|
+
const installed = install && result.exitCode === 0
|
|
489
|
+
? {
|
|
490
|
+
...hinted,
|
|
491
|
+
stdout: `installed: ${packages?.join(', ')}\nnothing was run — call exec again with language "python", packages: ${JSON.stringify(packages ?? [])} and the Python source in command\n${hinted.stdout}`
|
|
492
|
+
}
|
|
493
|
+
: hinted;
|
|
494
|
+
const undelivered = result.undeclared?.length
|
|
495
|
+
? {
|
|
496
|
+
...installed,
|
|
497
|
+
stderr: `${installed.stderr}${installed.stderr ? '\n' : ''}${result.undeclared.join(', ')} ${result.undeclared.length === 1 ? 'was' : 'were'} written but not declared in outputs, so ${result.undeclared.length === 1 ? 'it was' : 'they were'} discarded and nothing reached the user. There is no shell to inspect it with and nothing to look for on disk: declare it in outputs and run the same code again.`
|
|
498
|
+
}
|
|
499
|
+
: installed;
|
|
500
|
+
return collect(undelivered, {
|
|
501
|
+
declared: prepared.outputs,
|
|
502
|
+
attach,
|
|
503
|
+
runBudget,
|
|
504
|
+
source
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
function attachmentIdOf(value) {
|
|
512
|
+
if (value === undefined)
|
|
513
|
+
return undefined;
|
|
514
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
515
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ExecResult } from '../../lib/tools/exec/runner.ts';
|
|
2
2
|
export interface PyodideLike {
|
|
3
3
|
runPython(code: string, options?: {
|
|
4
4
|
filename?: string;
|
|
@@ -71,7 +71,6 @@ export interface RunOutcome {
|
|
|
71
71
|
readonly result: PythonRunResult;
|
|
72
72
|
readonly evict: boolean;
|
|
73
73
|
}
|
|
74
|
-
export declare function cap(text: string, limit: number): string;
|
|
75
74
|
export declare function isPyodideFatal(error: unknown): boolean;
|
|
76
75
|
export declare function repairDoubleEscapedSource(code: string, message: string): string | null;
|
|
77
76
|
export interface PerformRunOptions {
|