@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
|
@@ -0,0 +1,661 @@
|
|
|
1
|
+
export const SCRIPT = String.raw `
|
|
2
|
+
(function () {
|
|
3
|
+
var linked = Number(location.hash.slice(1))
|
|
4
|
+
var data = JSON.parse(document.getElementById('data').textContent)
|
|
5
|
+
var run = data.run
|
|
6
|
+
var steps = data.steps
|
|
7
|
+
var byIndex = {}
|
|
8
|
+
steps.forEach(function (step, i) { byIndex[step.index] = i })
|
|
9
|
+
var nodes = {}
|
|
10
|
+
data.nodes.forEach(function (node) { nodes[node.id] = node })
|
|
11
|
+
var routes = {}
|
|
12
|
+
data.routes.forEach(function (route) { routes[route.key] = route })
|
|
13
|
+
|
|
14
|
+
var root = document.documentElement
|
|
15
|
+
var charts = { run: document.getElementById('chart-run'), all: document.getElementById('chart-all') }
|
|
16
|
+
var svg = charts.run
|
|
17
|
+
var flowSvg = document.getElementById('chart-flow')
|
|
18
|
+
var flowNodes = {}
|
|
19
|
+
var ownerOfStep = {}
|
|
20
|
+
data.flow.forEach(function (node) {
|
|
21
|
+
flowNodes[node.id] = node
|
|
22
|
+
node.steps.forEach(function (index) { ownerOfStep[index] = node.id })
|
|
23
|
+
})
|
|
24
|
+
var board = document.querySelector('.board')
|
|
25
|
+
var canvas = document.getElementById('canvas')
|
|
26
|
+
var panel = document.getElementById('panel')
|
|
27
|
+
var scrub = document.getElementById('scrub')
|
|
28
|
+
var where = document.getElementById('where')
|
|
29
|
+
var ticks = document.getElementById('ticks')
|
|
30
|
+
var state = { pos: 0, facts: false, follow: true, view: 'step', picked: null, timer: null, scale: 1, chart: 'flow' }
|
|
31
|
+
function visible() { return state.chart === 'flow' ? flowSvg : svg }
|
|
32
|
+
var played = []
|
|
33
|
+
|
|
34
|
+
// ---- theme, as the bench pages keep it
|
|
35
|
+
var themeButton = document.getElementById('theme')
|
|
36
|
+
function dark() { return root.dataset.theme ? root.dataset.theme === 'dark' : matchMedia('(prefers-color-scheme: dark)').matches }
|
|
37
|
+
function themeLabel() { themeButton.textContent = dark() ? 'Light mode' : 'Dark mode' }
|
|
38
|
+
try { var saved = localStorage.getItem('qvac-theme'); if (saved) root.dataset.theme = saved } catch (e) {}
|
|
39
|
+
themeLabel()
|
|
40
|
+
themeButton.addEventListener('click', function () {
|
|
41
|
+
root.dataset.theme = dark() ? 'light' : 'dark'
|
|
42
|
+
try { localStorage.setItem('qvac-theme', root.dataset.theme) } catch (e) {}
|
|
43
|
+
themeLabel()
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
// ---- helpers
|
|
47
|
+
function esc(value) {
|
|
48
|
+
return String(value).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"')
|
|
49
|
+
}
|
|
50
|
+
function short(id) { return String(id).replace(/^completion\./, '').replace(/^active\./, '') }
|
|
51
|
+
function leaves(value, prefix) {
|
|
52
|
+
if (typeof value === 'string') return [prefix ? prefix + '.' + value : value]
|
|
53
|
+
if (value && typeof value === 'object') {
|
|
54
|
+
return Object.keys(value).reduce(function (out, key) {
|
|
55
|
+
return out.concat(leaves(value[key], prefix ? prefix + '.' + key : key))
|
|
56
|
+
}, [])
|
|
57
|
+
}
|
|
58
|
+
return []
|
|
59
|
+
}
|
|
60
|
+
function place(value) { return leaves(value, '').map(short).join(', ') || '?' }
|
|
61
|
+
function activeIds(value, prefix) {
|
|
62
|
+
if (typeof value === 'string') return [prefix + '.' + value]
|
|
63
|
+
if (value && typeof value === 'object') {
|
|
64
|
+
return Object.keys(value).reduce(function (out, key) {
|
|
65
|
+
return out.concat([prefix + '.' + key], activeIds(value[key], prefix + '.' + key))
|
|
66
|
+
}, [])
|
|
67
|
+
}
|
|
68
|
+
return []
|
|
69
|
+
}
|
|
70
|
+
function eventName(type) {
|
|
71
|
+
if (!type || type === 'always') return 'always'
|
|
72
|
+
if (type.indexOf('xstate.done.actor.') === 0) return 'done'
|
|
73
|
+
if (type.indexOf('xstate.error.actor.') === 0) return 'error'
|
|
74
|
+
if (type.indexOf('xstate.after.') === 0) return 'after ' + (type.split('.')[2] || '')
|
|
75
|
+
return type
|
|
76
|
+
}
|
|
77
|
+
function since(at) {
|
|
78
|
+
if (!run.startedAt || !at) return ''
|
|
79
|
+
var s = (at - run.startedAt) / 1000
|
|
80
|
+
return '+' + (s < 10 ? s.toFixed(2) : s < 100 ? s.toFixed(1) : Math.round(s)) + ' s'
|
|
81
|
+
}
|
|
82
|
+
function value(v) {
|
|
83
|
+
if (v === undefined) return '<span class="val empty">none</span>'
|
|
84
|
+
var text = JSON.stringify(v)
|
|
85
|
+
if (text === undefined) text = String(v)
|
|
86
|
+
if (text.length <= 72) return '<span class="val">' + esc(text) + '</span>'
|
|
87
|
+
var pretty = JSON.stringify(v, null, 2)
|
|
88
|
+
var preview = text.slice(0, 64) + '…'
|
|
89
|
+
return '<details><summary><span class="val">' + esc(preview) + '</span> <span class="t">' + text.length + ' chars</span></summary><pre class="json">' + esc(pretty) + '</pre></details>'
|
|
90
|
+
}
|
|
91
|
+
function stepLink(index) {
|
|
92
|
+
return '<a class="step" data-step="' + index + '">#' + index + '</a>'
|
|
93
|
+
}
|
|
94
|
+
function stepLinks(list) {
|
|
95
|
+
if (!list || list.length === 0) return '<span class="empty">none</span>'
|
|
96
|
+
return '<div class="steps-inline">' + list.map(stepLink).join('') + '</div>'
|
|
97
|
+
}
|
|
98
|
+
function routeText(source, targets) {
|
|
99
|
+
return '<span class="route">' + esc(short(source)) + ' → <span class="to">' + esc(targets.map(short).join(', ') || 'stays') + '</span></span>'
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ---- which steps playback walks
|
|
103
|
+
// a step that waits on a person: the machine sits in approving, or it is the answer itself
|
|
104
|
+
function asking(step) {
|
|
105
|
+
if (step.kind === 'receipt') return step.name === 'human:approve'
|
|
106
|
+
return step.kind === 'transition' && activeIds(step.to, 'completion').indexOf('completion.active.tools.approving') >= 0
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// which round and call a step happened in, in words
|
|
110
|
+
function whereIn(node) {
|
|
111
|
+
if (node.kind === 'call') return 'Round ' + (node.round + 1) + ' · ' + node.title + ' · ' + (node.status === 'pending' ? 'no result' : node.status)
|
|
112
|
+
return node.title
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function context(step) {
|
|
116
|
+
var node = flowNodes[ownerOfStep[step.index]]
|
|
117
|
+
if (!node) return ''
|
|
118
|
+
return '<a class="ctx s-' + node.status + '" data-flow="' + esc(node.id) + '" title="Show this box of the run">' + esc(whereIn(node)) + '</a>'
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function plays(step) { return state.facts || step.kind !== 'transition' || !step.facts }
|
|
122
|
+
function rebuild() {
|
|
123
|
+
var at = played[state.pos]
|
|
124
|
+
played = steps.filter(plays)
|
|
125
|
+
var pos = at ? played.indexOf(at) : -1
|
|
126
|
+
if (pos < 0 && at) pos = played.findIndex(function (step) { return step.index >= at.index })
|
|
127
|
+
state.pos = Math.max(0, pos)
|
|
128
|
+
scrub.max = String(Math.max(0, played.length - 1))
|
|
129
|
+
// each tick takes the color of the box it happened in; the step that decided a call stands tall
|
|
130
|
+
var last = null
|
|
131
|
+
ticks.innerHTML = played.map(function (step, i) {
|
|
132
|
+
var node = flowNodes[ownerOfStep[step.index]]
|
|
133
|
+
var cls = node ? 's-' + node.status : ''
|
|
134
|
+
if (node && node.kind === 'call' && node.from === step.index) cls += ' decide'
|
|
135
|
+
if (asking(step)) cls += ' asked'
|
|
136
|
+
if (node && last && node.round !== last.round) cls += ' gap'
|
|
137
|
+
last = node
|
|
138
|
+
var tip = '#' + step.index + (node ? ' · ' + whereIn(node) : '')
|
|
139
|
+
return '<span class="' + cls + '" data-pos="' + i + '" title="' + esc(tip) + '"></span>'
|
|
140
|
+
}).join('')
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// the machine's state at a step: its own target, or the last transition before it
|
|
144
|
+
function stateAt(i) {
|
|
145
|
+
for (var j = byIndex[played[i].index]; j >= 0; j--) {
|
|
146
|
+
if (steps[j].kind === 'transition') return steps[j].to
|
|
147
|
+
}
|
|
148
|
+
return null
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function show(pos) {
|
|
152
|
+
if (played.length === 0) return
|
|
153
|
+
state.pos = Math.max(0, Math.min(played.length - 1, pos))
|
|
154
|
+
var step = played[state.pos]
|
|
155
|
+
scrub.value = String(state.pos)
|
|
156
|
+
where.textContent = 'step ' + (state.pos + 1) + ' of ' + played.length + ' · #' + step.index
|
|
157
|
+
try { history.replaceState(null, '', '#' + step.index) } catch (e) {}
|
|
158
|
+
Array.prototype.forEach.call(ticks.children, function (tick, i) { tick.classList.toggle('at', i === state.pos) })
|
|
159
|
+
var owner = ownerOfStep[step.index]
|
|
160
|
+
flowSvg.querySelectorAll('.fn').forEach(function (el) { el.classList.toggle('now', el.dataset.node === owner) })
|
|
161
|
+
if (state.follow && state.chart === 'flow') keepInView(flowSvg.querySelector('.fn[data-node="' + owner + '"]'))
|
|
162
|
+
var now = {}
|
|
163
|
+
activeIds(stateAt(state.pos), 'completion').forEach(function (id) { now[id] = true })
|
|
164
|
+
if (svg) {
|
|
165
|
+
var via = {}
|
|
166
|
+
if (step.kind === 'transition') step.entered.forEach(function (id) { if (!now[id]) via[id] = true })
|
|
167
|
+
svg.querySelectorAll('.n').forEach(function (el) {
|
|
168
|
+
el.classList.toggle('now', !!now[el.dataset.id])
|
|
169
|
+
el.classList.toggle('via', !!via[el.dataset.id])
|
|
170
|
+
})
|
|
171
|
+
var hot = {}
|
|
172
|
+
var taken = step.kind === 'transition' ? step.taken : []
|
|
173
|
+
taken.forEach(function (key, i) { hot[key] = i + 1 })
|
|
174
|
+
svg.querySelectorAll('.ord').forEach(function (el) { el.remove() })
|
|
175
|
+
svg.querySelectorAll('.e').forEach(function (el) {
|
|
176
|
+
var order = hot[el.dataset.key]
|
|
177
|
+
el.classList.toggle('hot', !!order)
|
|
178
|
+
arrowHead(el)
|
|
179
|
+
if (order && taken.length > 1) number(el, order)
|
|
180
|
+
})
|
|
181
|
+
var said = callout(step, now)
|
|
182
|
+
if (said && state.follow && state.chart === 'machine') keepInView(said)
|
|
183
|
+
if (state.follow && state.chart === 'machine') follow(step, now)
|
|
184
|
+
}
|
|
185
|
+
if (state.view === 'step' || state.view === 'list') render()
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// a step that took several routes numbers them in the order it took them
|
|
189
|
+
function number(el, order) {
|
|
190
|
+
var box = el.querySelector('.lab rect')
|
|
191
|
+
if (!box) return
|
|
192
|
+
var x = Number(box.getAttribute('x')) - 9
|
|
193
|
+
var y = Number(box.getAttribute('y')) + 9
|
|
194
|
+
var g = document.createElementNS('http://www.w3.org/2000/svg', 'g')
|
|
195
|
+
g.setAttribute('class', 'ord')
|
|
196
|
+
g.innerHTML = '<circle cx="' + x + '" cy="' + y + '" r="9"/><text x="' + x + '" y="' + (y + 4) + '" text-anchor="middle">' + order + '</text>'
|
|
197
|
+
el.appendChild(g)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// when the step is where a call went wrong, say so beside the state, in words
|
|
201
|
+
function callout(step, now) {
|
|
202
|
+
var old = svg.querySelector('#callout')
|
|
203
|
+
if (old) old.remove()
|
|
204
|
+
var node = flowNodes[ownerOfStep[step.index]]
|
|
205
|
+
if (!node || node.kind !== 'call' || node.status === 'ok' || node.from !== step.index) return null
|
|
206
|
+
var ids = Object.keys(now).filter(function (id) { return nodes[id] })
|
|
207
|
+
var at = ids.length ? svg.querySelector('.n[data-id="' + ids[ids.length - 1] + '"] rect') : null
|
|
208
|
+
if (!at) return null
|
|
209
|
+
var lines = [whereIn(node)].concat(node.lines)
|
|
210
|
+
var w = Math.max.apply(null, lines.map(function (l) { return l.length })) * 6.9 + 24
|
|
211
|
+
var ax = Number(at.getAttribute('x'))
|
|
212
|
+
var aw = Number(at.getAttribute('width'))
|
|
213
|
+
var vb = svg.viewBox.baseVal
|
|
214
|
+
// beside the state where there is room, else on its other side, else below it
|
|
215
|
+
var x = ax + aw + 14
|
|
216
|
+
var y = Number(at.getAttribute('y'))
|
|
217
|
+
if (x + w > vb.x + vb.width) x = ax - w - 14
|
|
218
|
+
if (x < vb.x) {
|
|
219
|
+
x = Math.max(vb.x, Math.min(ax, vb.x + vb.width - w))
|
|
220
|
+
y += Number(at.getAttribute('height')) + 12
|
|
221
|
+
}
|
|
222
|
+
var g = document.createElementNS('http://www.w3.org/2000/svg', 'g')
|
|
223
|
+
g.setAttribute('id', 'callout')
|
|
224
|
+
g.setAttribute('class', 'callout s-' + node.status)
|
|
225
|
+
g.innerHTML = '<rect x="' + x + '" y="' + y + '" width="' + w + '" height="' + (14 + lines.length * 17) + '" rx="8"/>' +
|
|
226
|
+
lines.map(function (l, i) { return '<text class="' + (i ? '' : 'head') + '" x="' + (x + 12) + '" y="' + (y + 21 + i * 17) + '">' + esc(l) + '</text>' }).join('')
|
|
227
|
+
svg.appendChild(g)
|
|
228
|
+
return g
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function arrowHead(el) {
|
|
232
|
+
var line = el.querySelector('.line')
|
|
233
|
+
var kind = el.classList.contains('picked') ? 'picked' : el.classList.contains('hot') ? 'hot' : line.dataset.head
|
|
234
|
+
line.setAttribute('marker-end', 'url(#arrow-' + (svg === charts.all ? 'all' : 'run') + '-' + kind + ')')
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// keeps the state the run is in on screen
|
|
238
|
+
function follow(step, now) {
|
|
239
|
+
var ids = Object.keys(now).filter(function (id) { return nodes[id] })
|
|
240
|
+
keepInView(ids.length ? svg.querySelector('.n[data-id="' + ids[ids.length - 1] + '"]') : null)
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function keepInView(el) {
|
|
244
|
+
if (!el) return
|
|
245
|
+
var chart = visible()
|
|
246
|
+
var box = el.getBBox()
|
|
247
|
+
var vb = chart.viewBox.baseVal
|
|
248
|
+
var left = (box.x - vb.x) * state.scale
|
|
249
|
+
var top = (box.y - vb.y) * state.scale
|
|
250
|
+
var right = left + box.width * state.scale
|
|
251
|
+
var bottom = top + box.height * state.scale
|
|
252
|
+
var margin = 40
|
|
253
|
+
// the whole element, not just its middle: a callout is wide
|
|
254
|
+
if (left < canvas.scrollLeft + margin || right > canvas.scrollLeft + canvas.clientWidth - margin ||
|
|
255
|
+
top < canvas.scrollTop + margin || bottom > canvas.scrollTop + canvas.clientHeight - margin) {
|
|
256
|
+
canvas.scrollTo({ left: (left + right - canvas.clientWidth) / 2, top: (top + bottom - canvas.clientHeight) / 2, behavior: state.timer ? 'smooth' : 'auto' })
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// ---- the panel
|
|
261
|
+
var shown = null
|
|
262
|
+
function render() {
|
|
263
|
+
var html
|
|
264
|
+
if (state.view === 'flow') html = flowPanel(state.picked)
|
|
265
|
+
else if (state.view === 'node') html = nodePanel(state.picked)
|
|
266
|
+
else if (state.view === 'edge') html = edgePanel(state.picked)
|
|
267
|
+
else if (state.view === 'list') html = listPanel()
|
|
268
|
+
else if (state.chart === 'flow' && played[state.pos]) html = flowPanel(ownerOfStep[played[state.pos].index], played[state.pos].index)
|
|
269
|
+
else html = stepPanel(played[state.pos])
|
|
270
|
+
var showing = state.view + ':' + (state.picked || (state.chart === 'flow' && played[state.pos] ? ownerOfStep[played[state.pos].index] : state.pos))
|
|
271
|
+
panel.innerHTML = tabs() + html
|
|
272
|
+
// a new box or step starts at its top; the same one keeps its place as playback moves on
|
|
273
|
+
if (showing !== shown) panel.scrollTop = 0
|
|
274
|
+
shown = showing
|
|
275
|
+
var at = panel.querySelector('li.at')
|
|
276
|
+
if (at && state.view === 'list') at.scrollIntoView({ block: 'nearest' })
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function tabs() {
|
|
280
|
+
var stepOn = state.view === 'step'
|
|
281
|
+
var listOn = state.view === 'list'
|
|
282
|
+
return '<div class="tabs"><button class="pill" type="button" data-view="step" aria-pressed="' + stepOn + '">' + (state.chart === 'flow' ? 'Where the run is' : 'This step') + '</button>' +
|
|
283
|
+
'<button class="pill" type="button" data-view="list" aria-pressed="' + listOn + '">All steps</button>' +
|
|
284
|
+
(state.view === 'node' || state.view === 'edge' || state.view === 'flow' ? '<button class="pill" type="button" data-view="step" aria-pressed="true">← back to the step</button>' : '') + '</div>'
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function title(step) {
|
|
288
|
+
if (step.kind === 'request') return 'Model request, round ' + (step.round + 1) + (step.attempt ? ' (attempt ' + (step.attempt + 1) + ')' : '')
|
|
289
|
+
if (step.kind === 'receipt') return receiptTitle(step.name)
|
|
290
|
+
if (step.facts) return 'Facts refreshed in ' + place(step.to)
|
|
291
|
+
return path(step).join(' → ')
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function receiptTitle(name) {
|
|
295
|
+
if (name.indexOf('hook:') === 0) return 'Hook ' + name.slice(5)
|
|
296
|
+
if (name === 'human:approve') return 'A person is asked to approve'
|
|
297
|
+
return 'Tool ' + name
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// every state a step passed through, not just where it started and ended
|
|
301
|
+
function path(step) {
|
|
302
|
+
var out = [place(step.from)]
|
|
303
|
+
var walk = step.drift ? [] : step.micro
|
|
304
|
+
walk.forEach(function (m) { var at = place(m.to); if (out[out.length - 1] !== at) out.push(at) })
|
|
305
|
+
if (out.length === 1) out.push(place(step.to))
|
|
306
|
+
return out
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function listPanel() {
|
|
310
|
+
return '<div class="kicker">' + steps.length + ' steps</div><ul class="list">' + steps.map(function (step) {
|
|
311
|
+
var cls = 'kind-' + step.kind + (step.facts ? ' facts' : '') + (played[state.pos] === step ? ' at' : '')
|
|
312
|
+
return '<li class="' + cls + '" data-step="' + step.index + '"><span class="idx">#' + step.index + '</span><span class="what">' + esc(title(step)) + '</span><span class="t">' + esc(step.at ? since(step.at) : '') + '</span></li>'
|
|
313
|
+
}).join('') + '</ul>'
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function stepPanel(step) {
|
|
317
|
+
return step ? context(step) + verdict(step) + stepBody(step) : stepBody(step)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// a step inside a call that went wrong starts with what went wrong, in full
|
|
321
|
+
function verdict(step) {
|
|
322
|
+
var node = flowNodes[ownerOfStep[step.index]]
|
|
323
|
+
if (!node || node.kind !== 'call' || node.status === 'ok') return ''
|
|
324
|
+
var call = data.story.rounds[node.round].calls[node.call]
|
|
325
|
+
return '<div class="reason o-' + call.outcome + '"><b>' + esc(call.name) + ' was ' + esc(call.outcome === 'pending' ? 'left without a result' : call.outcome) + ':</b> ' + esc(reasonOf(call)) + '</div>'
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function stepBody(step) {
|
|
329
|
+
if (!step) return '<p class="empty">No steps were recorded.</p>'
|
|
330
|
+
if (step.kind === 'request') return requestPanel(step)
|
|
331
|
+
if (step.kind === 'receipt') return receiptPanel(step)
|
|
332
|
+
// xstate's own events (an actor finished, an always route) say nothing a reader needs
|
|
333
|
+
var events = step.events.map(function (e) { return e.type }).filter(function (t) { return t.indexOf('xstate.') !== 0 })
|
|
334
|
+
var landed = data.meanings[leafId(step.to)]
|
|
335
|
+
var out = '<div class="kicker">Step #' + step.index + ' · ' + esc(since(step.at)) + '</div>' +
|
|
336
|
+
'<h2>' + esc(title(step)) + '</h2>' +
|
|
337
|
+
(events.length ? '<div class="chips">' + events.map(function (e) { return '<span class="chip info">' + esc(e) + '</span>' }).join('') + '</div>' : '') +
|
|
338
|
+
(landed && !step.facts ? '<div class="reason' + (landed.tone ? ' t-' + landed.tone : '') + '"><b>' + esc(place(step.to)) + ':</b> ' + esc(landed.says) + '</div>' : '')
|
|
339
|
+
if (step.drift) {
|
|
340
|
+
out += '<div class="notice">Re-running this step disagreed with what was recorded, so the recorded routes are shown: ' +
|
|
341
|
+
step.recorded.map(function (r) { return esc(eventName(r.eventType) + ': ' + r.sourceIds.map(short).join(',') + ' → ' + r.targetIds.map(short).join(',')) }).join('; ') + '</div>'
|
|
342
|
+
}
|
|
343
|
+
if (step.facts) {
|
|
344
|
+
out += '<h3>What the engine learned</h3>' + step.events.map(function (e) {
|
|
345
|
+
var keys = Object.keys(e.value || {})
|
|
346
|
+
return '<div class="kv">' + keys.map(function (k) { return '<div>' + esc(k) + '</div><div>' + value(e.value[k]) + '</div>' }).join('') + '</div>'
|
|
347
|
+
}).join('')
|
|
348
|
+
} else if (step.micro.length) {
|
|
349
|
+
out += '<h3>Why it went this way</h3>' + step.micro.map(microPanel).join('')
|
|
350
|
+
} else if (step.recorded.length) {
|
|
351
|
+
out += '<h3>The routes it took</h3><ul class="why">' + step.recorded.map(function (r) {
|
|
352
|
+
return '<li class="taken"><span class="v">' + esc(eventName(r.eventType)) + '</span>' + routeText(r.sourceIds[0] || '?', r.targetIds) +
|
|
353
|
+
'<div class="guard">' + (r.guardNames.length ? esc(r.guardNames.join(', ')) + ' held' : 'no guard') + '</div></li>'
|
|
354
|
+
}).join('') + '</ul>' + (run.replay ? '<p class="meta">' + esc(run.replay) + '</p>' : '')
|
|
355
|
+
}
|
|
356
|
+
out += '<details class="raw"><summary>The raw event</summary>' + step.events.map(function (e) { return value(e) }).join('') + '</details>'
|
|
357
|
+
out += changesPanel(step.changes)
|
|
358
|
+
return out
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function leafId(value) {
|
|
362
|
+
var leaf = leaves(value, '')[0]
|
|
363
|
+
return leaf ? 'completion.' + leaf : ''
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// what each verdict means: a guard that says no is not a rejection of anything
|
|
367
|
+
var VERDICT = { taken: 'took', rejected: 'not this route', unchecked: 'not checked', unevaluable: 'could not check' }
|
|
368
|
+
|
|
369
|
+
function microPanel(micro) {
|
|
370
|
+
var shown = micro.candidates.filter(function (c) { return c.verdict !== 'unchecked' })
|
|
371
|
+
var skipped = micro.candidates.length - shown.length
|
|
372
|
+
return '<p class="meta"><b>' + esc(eventName(micro.eventType)) + '</b> in ' + esc(place(micro.from)) + '</p><ul class="why">' +
|
|
373
|
+
shown.map(function (c) {
|
|
374
|
+
var parts = c.parts.length ? '<div class="parts">' + c.parts.map(function (p) {
|
|
375
|
+
return '<span class="chip ' + (p.value === true ? 'good' : '') + '">' + esc(p.name) + ' = ' + esc(String(p.value)) + '</span>'
|
|
376
|
+
}).join('') + '</div>' : ''
|
|
377
|
+
var reason = c.guard ? '<span class="guard">' + esc(c.guard) + ' = ' + esc(String(c.value)) + '</span>' : '<span class="guard">no guard</span>'
|
|
378
|
+
var landed = c.verdict === 'taken' && data.meanings[c.targets[0]]
|
|
379
|
+
var tone = landed && landed.tone ? ' t-' + landed.tone : ''
|
|
380
|
+
return '<li class="' + c.verdict + tone + '"><span class="v">' + esc(VERDICT[c.verdict] || c.verdict) + '</span>' + routeText(c.source, c.targets) +
|
|
381
|
+
'<div>' + reason + '</div>' + (c.facts ? '<div class="facts">' + esc(c.facts) + '</div>' : '') + parts +
|
|
382
|
+
(c.error ? '<div class="facts">' + esc(c.error) + '</div>' : '') + '</li>'
|
|
383
|
+
}).join('') + '</ul>' + (skipped ? '<p class="meta">' + skipped + ' later route' + (skipped === 1 ? ' was' : 's were') + ' not checked: an earlier one already won.</p>' : '')
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function changesPanel(changes) {
|
|
387
|
+
if (!changes.length) return ''
|
|
388
|
+
return '<h3>What changed</h3>' + changes.map(function (c) {
|
|
389
|
+
if (c.appended) {
|
|
390
|
+
return '<div class="change"><div class="path">' + esc(c.path) + '</div><p class="meta">kept ' + c.kept + ', added ' + c.appended.length + '</p>' +
|
|
391
|
+
c.appended.map(function (item) { return value(item) }).join('') + '</div>'
|
|
392
|
+
}
|
|
393
|
+
return '<div class="change"><div class="path">' + esc(c.path) + '</div><div class="sides"><div><small>before</small>' + value(c.before) + '</div><div><small>after</small>' + value(c.after) + '</div></div></div>'
|
|
394
|
+
}).join('')
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function requestPanel(step) {
|
|
398
|
+
return '<div class="kicker">Step #' + step.index + ' · model request</div><h2>' + esc(title(step)) + '</h2>' +
|
|
399
|
+
'<div class="chips">' + step.tools.map(function (t) { return '<span class="chip">' + esc(t) + '</span>' }).join('') + '</div>' +
|
|
400
|
+
(step.droppedTurns ? '<p class="meta">' + step.droppedTurns + ' turns dropped to fit the context</p>' : '') +
|
|
401
|
+
'<h3>New messages sent (' + step.appended.length + ')</h3>' + step.appended.map(message).join('')
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
function message(m) {
|
|
405
|
+
var content = m && typeof m.content === 'string' ? m.content : JSON.stringify(m && m.content)
|
|
406
|
+
var calls = m && m.tool_calls ? '<div>' + value(m.tool_calls) + '</div>' : ''
|
|
407
|
+
var long = content && content.length > 600
|
|
408
|
+
var body = long ? '<details><summary>' + esc(content.slice(0, 300)) + '…</summary><div class="body">' + esc(content) + '</div></details>' : '<div class="body">' + esc(content || '') + '</div>'
|
|
409
|
+
return '<div class="msg"><span class="role">' + esc((m && m.role) || '?') + '</span>' + body + calls + '</div>'
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
function receiptPanel(step) {
|
|
413
|
+
return '<div class="kicker">Step #' + step.index + ' · tool call</div><h2>' + esc(step.name) + ' <span class="chip ' + (step.effect === 'read' ? '' : 'warn') + '">' + esc(step.effect) + '</span>' +
|
|
414
|
+
(step.settled ? '' : ' <span class="chip bad">no result recorded</span>') + '</h2><p class="meta">call ' + esc(step.id) + '</p>' +
|
|
415
|
+
'<h3>Arguments</h3>' + value(step.args) + '<h3>Result</h3>' + value(step.result)
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
function nodePanel(id) {
|
|
419
|
+
var node = nodes[id] || { id: id, label: short(id), kind: 'state', stays: [] }
|
|
420
|
+
var entered = data.visits[id]
|
|
421
|
+
var out = Object.keys(routes).map(function (k) { return routes[k] }).filter(function (r) { return r.source === id && r.event })
|
|
422
|
+
var into = Object.keys(routes).map(function (k) { return routes[k] }).filter(function (r) { return r.target === id && r.event })
|
|
423
|
+
function list(rs, dir) {
|
|
424
|
+
if (!rs.length) return '<p class="empty">none</p>'
|
|
425
|
+
return '<ul class="why">' + rs.map(function (r) {
|
|
426
|
+
var n = (data.edges[r.key] || []).length
|
|
427
|
+
return '<li class="' + (n ? 'taken' : 'unchecked') + '" data-edge="' + esc(r.key) + '" style="cursor:pointer"><span class="v">' + (n ? '×' + n : 'never') + '</span>' +
|
|
428
|
+
routeText(r.source, [r.target]) + '<div class="guard">' + esc(r.event) + (r.guard ? ' [' + esc(r.guard) + ']' : '') + '</div></li>'
|
|
429
|
+
}).join('') + '</ul>'
|
|
430
|
+
}
|
|
431
|
+
var meaning = data.meanings[id]
|
|
432
|
+
return '<div class="kicker">State</div><h2>' + esc(node.label || short(id)) + ' <span class="chip">' + esc(node.kind) + '</span></h2><p class="meta mono">' + esc(id) + '</p>' +
|
|
433
|
+
(meaning ? '<div class="reason' + (meaning.tone ? ' t-' + meaning.tone : '') + '">' + esc(meaning.says) + '</div>' : '') +
|
|
434
|
+
'<h3>' + (entered ? 'Entered ' + entered.length + ' time' + (entered.length === 1 ? '' : 's') : 'Never entered') + '</h3>' + (entered && entered.length ? stepLinks(entered) : '') +
|
|
435
|
+
'<h3>Routes out</h3>' + list(out) + '<h3>Routes in</h3>' + list(into) +
|
|
436
|
+
(node.stays && node.stays.length ? '<h3>Handled here without leaving</h3><div class="chips">' + node.stays.map(function (s) { return '<span class="chip">' + esc(s) + '</span>' }).join('') + '</div>' : '')
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
function edgePanel(key) {
|
|
440
|
+
var r = routes[key]
|
|
441
|
+
if (!r) return '<p class="empty">Unknown route.</p>'
|
|
442
|
+
var taken = data.edges[key] || []
|
|
443
|
+
var rejected = []
|
|
444
|
+
steps.forEach(function (step) {
|
|
445
|
+
if (step.kind !== 'transition') return
|
|
446
|
+
step.micro.forEach(function (m) {
|
|
447
|
+
m.candidates.forEach(function (c) { if (c.key === key && c.verdict === 'rejected' && rejected.indexOf(step.index) < 0) rejected.push(step.index) })
|
|
448
|
+
})
|
|
449
|
+
})
|
|
450
|
+
return '<div class="kicker">Route</div><h2>' + routeText(r.source, [r.target]) + '</h2>' +
|
|
451
|
+
'<div class="chips"><span class="chip info">' + esc(r.event) + '</span>' + (r.guard ? '<span class="chip">guard ' + esc(r.guard) + '</span>' : '<span class="chip">no guard</span>') + '</div>' +
|
|
452
|
+
'<h3>Taken ' + taken.length + ' time' + (taken.length === 1 ? '' : 's') + '</h3>' + stepLinks(taken) +
|
|
453
|
+
'<h3>Checked, and its guard said no</h3>' + stepLinks(rejected) +
|
|
454
|
+
(taken.length + rejected.length === 0 ? '<p class="meta">The run never reached a point where this route was checked.</p>' : '')
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// ---- a box of the run's flowchart: how it went, then the machine steps inside it
|
|
458
|
+
var KIND = { start: 'The request', round: 'Model round', call: 'Tool call', end: 'How it ended' }
|
|
459
|
+
// open: the step to show expanded, when playback is on it
|
|
460
|
+
function flowPanel(id, open) {
|
|
461
|
+
var node = flowNodes[id]
|
|
462
|
+
if (!node) return '<p class="empty">Nothing here.</p>'
|
|
463
|
+
var pill = node.kind === 'call' ? '<span class="chip o-' + node.status + '">' + esc(node.status === 'pending' ? 'no result' : node.status) + '</span>' : ''
|
|
464
|
+
var out = '<div class="kicker">' + esc(KIND[node.kind] || node.kind) + '</div><h2>' + pill + '<span class="' + (node.kind === 'call' ? 'mono' : '') + '">' + esc(node.title) + '</span></h2>' +
|
|
465
|
+
(node.meta ? '<p class="meta">' + esc(node.meta) + '</p>' : '')
|
|
466
|
+
if (node.kind === 'call') out += callDetails(data.story.rounds[node.round].calls[node.call])
|
|
467
|
+
if (node.kind === 'round') out += roundDetails(data.story.rounds[node.round], node)
|
|
468
|
+
if (node.kind === 'start') out += '<div class="msg"><div class="body">' + esc(data.story.prompt) + '</div></div>'
|
|
469
|
+
if (node.kind === 'end') {
|
|
470
|
+
out += (run.failure ? '<div class="reason o-failed">' + esc(run.failure) + '</div>' : '') +
|
|
471
|
+
(run.response ? '<div class="msg"><span class="role">answer</span><div class="body">' + esc(run.response) + '</div></div>' : '')
|
|
472
|
+
}
|
|
473
|
+
return out + '<h3>State machine steps (' + node.steps.length + ')</h3>' + node.steps.map(function (index) {
|
|
474
|
+
var step = steps[byIndex[index]]
|
|
475
|
+
var on = index === open
|
|
476
|
+
return '<details class="mstep' + (on ? ' at' : '') + '"' + (on ? ' open' : '') + '><summary><span class="idx">#' + index + '</span> ' + esc(title(step)) + '</summary>' + stepBody(step) + '</details>'
|
|
477
|
+
}).join('')
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
function callDetails(call) {
|
|
481
|
+
var asked = call.approved === null ? '' : '<span class="chip ' + (call.approved ? 'info' : 'o-denied') + '">' + (call.approved ? 'approved' : 'declined') + ' by a person</span>'
|
|
482
|
+
var reason = call.outcome === 'ok' ? '' : '<div class="reason o-' + call.outcome + '">' + esc(reasonOf(call)) + '</div>'
|
|
483
|
+
return reason + (asked ? '<div class="chips">' + asked + '</div>' : '') +
|
|
484
|
+
'<h3>Arguments</h3>' + full(call.args) + '<h3>Result</h3>' + full(call.result)
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
function reasonOf(call) {
|
|
488
|
+
var result = call.result || {}
|
|
489
|
+
var error = typeof result === 'string' ? result : result.error
|
|
490
|
+
if (call.outcome === 'denied') return 'A person declined this call.'
|
|
491
|
+
if (call.outcome === 'pending') return 'The run stopped before this call returned.'
|
|
492
|
+
return (call.detail && call.detail.indexOf('HTTP') === 0 ? call.detail + ': ' : '') + (typeof error === 'string' ? error : JSON.stringify(error || call.detail))
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
function roundDetails(round, node) {
|
|
496
|
+
var request = node.steps.map(function (index) { return steps[byIndex[index]] }).filter(function (step) { return step.kind === 'request' })[0]
|
|
497
|
+
var calls = round.calls.map(function (call, i) {
|
|
498
|
+
return '<li class="' + (call.outcome === 'ok' ? 'taken' : 'bad') + '" data-flow="call-' + round.round + '-' + i + '" style="cursor:pointer"><span class="v">' + esc(call.outcome) + '</span><span class="route">' + esc(call.name) + '</span>' +
|
|
499
|
+
(call.outcome === 'ok' ? '' : '<div class="facts">' + esc(call.detail) + '</div>') + '</li>'
|
|
500
|
+
}).join('')
|
|
501
|
+
return (round.text ? '<h3>The model said</h3><div class="msg"><div class="body">' + esc(round.text) + '</div></div>' : '') +
|
|
502
|
+
(calls ? '<h3>It called</h3><ul class="why">' + calls + '</ul>' : '') +
|
|
503
|
+
(request ? '<h3>Sent to the model (' + request.appended.length + ' new messages)</h3>' + request.appended.map(message).join('') : '')
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
function full(v) {
|
|
507
|
+
if (v === undefined) return '<p class="empty">none</p>'
|
|
508
|
+
return '<pre class="json">' + esc(typeof v === 'string' ? v : JSON.stringify(v, null, 2)) + '</pre>'
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// ---- selection
|
|
512
|
+
function pick(view, id) {
|
|
513
|
+
state.view = view
|
|
514
|
+
state.picked = id
|
|
515
|
+
flowSvg.querySelectorAll('.fn.picked').forEach(function (el) { el.classList.remove('picked') })
|
|
516
|
+
if (view === 'flow') {
|
|
517
|
+
var box = flowSvg.querySelector('.fn[data-node="' + id + '"]')
|
|
518
|
+
if (box) box.classList.add('picked')
|
|
519
|
+
}
|
|
520
|
+
if (svg) {
|
|
521
|
+
svg.querySelectorAll('.picked').forEach(function (el) { el.classList.remove('picked'); if (el.classList.contains('e')) arrowHead(el) })
|
|
522
|
+
var el = view === 'node' ? svg.querySelector('.n[data-id="' + id + '"]') : view === 'edge' ? svg.querySelector('.e[data-key="' + CSS.escape(id) + '"]') : null
|
|
523
|
+
if (el) { el.classList.add('picked'); if (view === 'edge') arrowHead(el) }
|
|
524
|
+
}
|
|
525
|
+
render()
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
function goTo(index) {
|
|
529
|
+
var step = steps[byIndex[index]]
|
|
530
|
+
if (!step) return
|
|
531
|
+
if (!plays(step)) { state.facts = true; document.getElementById('facts').setAttribute('aria-pressed', 'true'); rebuild() }
|
|
532
|
+
state.view = 'step'
|
|
533
|
+
pick('step', null)
|
|
534
|
+
show(played.indexOf(step))
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
panel.addEventListener('click', function (event) {
|
|
538
|
+
var t = event.target.closest('[data-step],[data-view],[data-edge],[data-flow]')
|
|
539
|
+
if (!t) return
|
|
540
|
+
if (t.dataset.view) { pick(t.dataset.view, null); return }
|
|
541
|
+
if (t.dataset.flow) { pick('flow', t.dataset.flow); return }
|
|
542
|
+
if (t.dataset.edge) { pick('edge', t.dataset.edge); return }
|
|
543
|
+
goTo(Number(t.dataset.step))
|
|
544
|
+
})
|
|
545
|
+
|
|
546
|
+
document.querySelectorAll('[data-goto]').forEach(function (b) {
|
|
547
|
+
b.addEventListener('click', function () { stop(); goTo(Number(b.dataset.goto)) })
|
|
548
|
+
})
|
|
549
|
+
|
|
550
|
+
canvas.addEventListener('click', function (event) {
|
|
551
|
+
if (moved) return
|
|
552
|
+
var tb = event.target.closest('.tb')
|
|
553
|
+
if (tb) { pick('node', tb.dataset.id); return }
|
|
554
|
+
var f = event.target.closest('.fn')
|
|
555
|
+
if (f) { pick('flow', f.dataset.node); return }
|
|
556
|
+
var e = event.target.closest('.e')
|
|
557
|
+
if (e) { pick('edge', e.dataset.key); return }
|
|
558
|
+
var n = event.target.closest('.n')
|
|
559
|
+
if (n && !n.classList.contains('start')) pick('node', n.dataset.id)
|
|
560
|
+
})
|
|
561
|
+
|
|
562
|
+
// ---- controls
|
|
563
|
+
function stop() { clearInterval(state.timer); state.timer = null; document.getElementById('play').textContent = '▶' }
|
|
564
|
+
function play() {
|
|
565
|
+
if (state.timer) return stop()
|
|
566
|
+
if (state.pos >= played.length - 1) show(0)
|
|
567
|
+
document.getElementById('play').textContent = '❚❚'
|
|
568
|
+
state.timer = setInterval(function () {
|
|
569
|
+
if (state.pos >= played.length - 1) return stop()
|
|
570
|
+
show(state.pos + 1)
|
|
571
|
+
}, 900)
|
|
572
|
+
}
|
|
573
|
+
document.getElementById('play').addEventListener('click', play)
|
|
574
|
+
document.getElementById('first').addEventListener('click', function () { stop(); show(0) })
|
|
575
|
+
document.getElementById('prev').addEventListener('click', function () { stop(); show(state.pos - 1) })
|
|
576
|
+
document.getElementById('next').addEventListener('click', function () { stop(); show(state.pos + 1) })
|
|
577
|
+
scrub.addEventListener('input', function () { stop(); if (state.view !== 'list') state.view = 'step'; show(Number(scrub.value)) })
|
|
578
|
+
ticks.addEventListener('click', function (event) {
|
|
579
|
+
var t = event.target.closest('[data-pos]')
|
|
580
|
+
if (t) { stop(); state.view = 'step'; show(Number(t.dataset.pos)) }
|
|
581
|
+
})
|
|
582
|
+
document.addEventListener('keydown', function (event) {
|
|
583
|
+
if (event.target.closest('input,textarea')) return
|
|
584
|
+
if (event.key === 'ArrowRight') { stop(); show(state.pos + 1); event.preventDefault() }
|
|
585
|
+
if (event.key === 'ArrowLeft') { stop(); show(state.pos - 1); event.preventDefault() }
|
|
586
|
+
if (event.key === ' ') { play(); event.preventDefault() }
|
|
587
|
+
})
|
|
588
|
+
function toggle(id, on) {
|
|
589
|
+
var button = document.getElementById(id)
|
|
590
|
+
button.addEventListener('click', function () {
|
|
591
|
+
var next = button.getAttribute('aria-pressed') !== 'true'
|
|
592
|
+
button.setAttribute('aria-pressed', String(next))
|
|
593
|
+
on(next)
|
|
594
|
+
})
|
|
595
|
+
}
|
|
596
|
+
// ---- which chart: the run's flowchart, or the state machine
|
|
597
|
+
function setChart(name) {
|
|
598
|
+
state.chart = name
|
|
599
|
+
board.classList.toggle('on-machine', name === 'machine')
|
|
600
|
+
document.querySelectorAll('[data-chart]').forEach(function (b) { b.setAttribute('aria-pressed', String(b.dataset.chart === name)) })
|
|
601
|
+
flowSvg.style.display = name === 'flow' ? '' : 'none'
|
|
602
|
+
if (svg) svg.style.display = name === 'machine' ? '' : 'none'
|
|
603
|
+
zoom(state.scale)
|
|
604
|
+
show(state.pos)
|
|
605
|
+
}
|
|
606
|
+
document.querySelectorAll('[data-chart]').forEach(function (b) {
|
|
607
|
+
b.addEventListener('click', function () { setChart(b.dataset.chart) })
|
|
608
|
+
})
|
|
609
|
+
|
|
610
|
+
// the whole machine is its own layout; the run's is the default
|
|
611
|
+
toggle('untaken', function (on) {
|
|
612
|
+
if (!svg) return
|
|
613
|
+
svg.style.display = 'none'
|
|
614
|
+
svg = on ? charts.all : charts.run
|
|
615
|
+
if (state.chart === 'machine') svg.style.display = ''
|
|
616
|
+
zoom(state.scale)
|
|
617
|
+
if (state.view === 'node' || state.view === 'edge') pick(state.view, state.picked)
|
|
618
|
+
show(state.pos)
|
|
619
|
+
})
|
|
620
|
+
toggle('facts', function (on) { state.facts = on; rebuild(); show(state.pos) })
|
|
621
|
+
toggle('follow', function (on) { state.follow = on })
|
|
622
|
+
|
|
623
|
+
// ---- zoom and pan
|
|
624
|
+
function zoom(scale) {
|
|
625
|
+
var chart = visible()
|
|
626
|
+
if (!chart) return
|
|
627
|
+
state.scale = Math.max(0.2, Math.min(2.5, scale))
|
|
628
|
+
chart.setAttribute('width', String(Number(chart.dataset.w) * state.scale))
|
|
629
|
+
chart.setAttribute('height', String(Number(chart.dataset.h) * state.scale))
|
|
630
|
+
}
|
|
631
|
+
function fit() {
|
|
632
|
+
var chart = visible()
|
|
633
|
+
if (!chart) return
|
|
634
|
+
zoom(Math.min(1, (canvas.clientWidth - 8) / Number(chart.dataset.w), (canvas.clientHeight - 8) / Number(chart.dataset.h)))
|
|
635
|
+
canvas.scrollTo(0, 0)
|
|
636
|
+
}
|
|
637
|
+
document.getElementById('zoom-in').addEventListener('click', function () { zoom(state.scale * 1.25) })
|
|
638
|
+
document.getElementById('zoom-out').addEventListener('click', function () { zoom(state.scale / 1.25) })
|
|
639
|
+
document.getElementById('fit').addEventListener('click', fit)
|
|
640
|
+
var drag = null
|
|
641
|
+
var moved = false
|
|
642
|
+
canvas.addEventListener('pointerdown', function (event) {
|
|
643
|
+
drag = { x: event.clientX, y: event.clientY, left: canvas.scrollLeft, top: canvas.scrollTop }
|
|
644
|
+
moved = false
|
|
645
|
+
})
|
|
646
|
+
window.addEventListener('pointermove', function (event) {
|
|
647
|
+
if (!drag) return
|
|
648
|
+
var dx = event.clientX - drag.x
|
|
649
|
+
var dy = event.clientY - drag.y
|
|
650
|
+
if (Math.abs(dx) + Math.abs(dy) > 4) { moved = true; canvas.classList.add('dragging') }
|
|
651
|
+
canvas.scrollLeft = drag.left - dx
|
|
652
|
+
canvas.scrollTop = drag.top - dy
|
|
653
|
+
})
|
|
654
|
+
window.addEventListener('pointerup', function () { drag = null; canvas.classList.remove('dragging'); setTimeout(function () { moved = false }, 0) })
|
|
655
|
+
|
|
656
|
+
rebuild()
|
|
657
|
+
zoom(1)
|
|
658
|
+
if (linked && steps[byIndex[linked]]) goTo(linked)
|
|
659
|
+
else show(0)
|
|
660
|
+
})()
|
|
661
|
+
`;
|