yaml-flow 7.0.0 → 8.0.0
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/browser/asset-integrity.json +8 -4
- package/browser/board-livecards-client.js +1 -1
- package/browser/board-livecards-localstorage.js +5 -5
- package/browser/live-cards.js +19 -3307
- package/cli/board-live-cards-lib-tjYsPt5U.d.ts +321 -0
- package/{dist/cli → cli}/browser-api/board-live-cards-browser-adapter.d.ts +3 -5
- package/cli/browser-api/board-live-cards-browser-adapter.js +3 -0
- package/{dist/cli → cli}/browser-api/card-store-browser-api.d.ts +1 -2
- package/{dist/cli → cli}/browser-api/card-store-browser-api.js +1 -1
- package/cli/execution-interface-C_A6WCiK.d.ts +284 -0
- package/cli/node/artifacts-store-cli.js +11 -0
- package/cli/node/batch-runner-cli.js +3 -0
- package/cli/node/board-live-cards-cli.js +15 -0
- package/cli/node/card-store-cli.js +8 -0
- package/{dist/cli → cli}/node/execution-adapter.d.ts +3 -3
- package/cli/node/execution-adapter.js +3 -0
- package/{dist/cli → cli}/node/fs-board-adapter.d.ts +24 -11
- package/cli/node/fs-board-adapter.js +14 -0
- package/{dist/cli → cli}/node/source-cli-task-executor.js +2 -2
- package/cli/node/step-machine-cli.d.ts +7 -0
- package/cli/node/step-machine-cli.js +5 -0
- package/{dist/board-live-cards-public-CW5074xr.d.cts → cli/types-CziUxkiv.d.ts} +69 -7
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/card-store-ref.json +1 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/chat-handler.json +1 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/outputs-store-ref.json +1 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.config/task-executor.json +1 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.state-snapshot/board/graph.json +29 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime/.state-snapshot/board/lastJournalProcessedId.json +1 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/gandalf-runtime-out/.outputs/status.json +25 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-market-prices/computed_values.json +67 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-portfolio/computed_values.json +1 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/cards/card-portfolio-value/computed_values.json +52 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/holdings.json +22 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/positions.json +46 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/data-objects/quotes.json +35 -0
- package/examples/board/.demo-setup/run-1778643703151-3360-dopnpv/board-default/runtime-out/.outputs/status.json +113 -0
- package/examples/{example-board/cards/card-market-prices.json → board/cards/cardT-market-prices.json} +2 -2
- package/examples/{example-board/cards/card-portfolio.json → board/cards/cardT-portfolio.json} +3 -13
- package/examples/{example-board → board}/demo-server-config.json +0 -1
- package/examples/{example-board → board}/demo-server.js +70 -72
- package/examples/{example-board → board}/demo-shell-with-server.html +3 -3
- package/examples/{example-board → board}/demo-task-executor.js +75 -32
- package/examples/board/gandalf-cards/card-source-kinds.json +36 -0
- package/examples/board/gandalf-cards/cards/_index.json +7 -0
- package/examples/board/gandalf-cards/cards/card-source-kinds.json +64 -0
- package/examples/board/source-def-flows/copilot.flow.json +33 -0
- package/examples/board/source-def-flows/mock.flow.json +35 -0
- package/examples/board/source-def-flows/url-list.flow.json +33 -0
- package/examples/board/source-def-flows/url.flow.json +33 -0
- package/examples/board/source-def-flows/workiq.flow.json +34 -0
- package/examples/board/source-def-handlers/copilot-source-handler.js +141 -0
- package/examples/board/source-def-handlers/http-source-handler.js +145 -0
- package/examples/board/source_def_flows.json +249 -0
- package/examples/board/test/demo-http-test.js +317 -0
- package/examples/{example-board → board-local}/demo-shell-localstorage.html +4 -4
- package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/handlers}/portfolio-tracker-fetch-prices.js +1 -1
- package/examples/{browser/boards/portfolio-tracker/portfolio-tracker-public.js → portfolio-tracker/portfolio-tracker.js} +11 -14
- package/examples/{browser/boards/portfolio-tracker → portfolio-tracker/test}/portfolio-t4.js +32 -50
- package/lib/artifacts-store-lib-public-BABrgFkV.d.ts +119 -0
- package/lib/artifacts-store-lib-public-DGa8BpJT.d.cts +119 -0
- package/lib/artifacts-store-public.cjs +2 -0
- package/lib/artifacts-store-public.d.cts +5 -0
- package/lib/artifacts-store-public.d.ts +5 -0
- package/lib/artifacts-store-public.js +2 -0
- package/lib/board-live-cards-node.cjs +14 -0
- package/{dist/cli/node/execution-adapter.d.cts → lib/board-live-cards-node.d.cts} +45 -85
- package/lib/board-live-cards-node.d.ts +134 -0
- package/lib/board-live-cards-node.js +14 -0
- package/lib/board-live-cards-public-BnmRAbQV.d.cts +383 -0
- package/{dist/board-live-cards-public-hnZo0mAf.d.ts → lib/board-live-cards-public-CsmYrvpd.d.ts} +142 -77
- package/lib/board-live-cards-public.cjs +3 -0
- package/lib/board-live-cards-public.d.cts +4 -0
- package/lib/board-live-cards-public.d.ts +4 -0
- package/lib/board-live-cards-public.js +3 -0
- package/lib/board-live-cards-server-runtime.cjs +9 -0
- package/lib/board-live-cards-server-runtime.d.cts +6 -0
- package/lib/board-live-cards-server-runtime.d.ts +6 -0
- package/lib/board-live-cards-server-runtime.js +9 -0
- package/lib/board-livegraph-runtime/index.cjs +3 -0
- package/{dist → lib}/board-livegraph-runtime/index.d.cts +1 -2
- package/{dist → lib}/board-livegraph-runtime/index.d.ts +1 -2
- package/lib/board-livegraph-runtime/index.js +3 -0
- package/lib/board-worker-adapter.cjs +10 -0
- package/{dist/storage-refs.d.cts → lib/board-worker-adapter.d.cts} +5 -5
- package/{dist/storage-refs.d.ts → lib/board-worker-adapter.d.ts} +5 -5
- package/lib/board-worker-adapter.js +10 -0
- package/{dist → lib}/card-compute/index.cjs +1 -1
- package/{dist → lib}/card-compute/index.js +1 -1
- package/lib/card-store-public.cjs +2 -0
- package/lib/card-store-public.d.cts +61 -0
- package/lib/card-store-public.d.ts +61 -0
- package/lib/card-store-public.js +2 -0
- package/lib/card-validation.cjs +10 -0
- package/lib/card-validation.d.cts +35 -0
- package/lib/card-validation.d.ts +35 -0
- package/lib/card-validation.js +10 -0
- package/{dist/constants-oCEbNpul.d.ts → lib/constants-BPVLb3Es.d.ts} +1 -1
- package/{dist/constants-BzZUyYlp.d.cts → lib/constants-DXxsRN9y.d.cts} +1 -1
- package/{dist → lib}/continuous-event-graph/index.cjs +2 -2
- package/{dist → lib}/continuous-event-graph/index.d.cts +3 -5
- package/{dist → lib}/continuous-event-graph/index.d.ts +3 -5
- package/{dist → lib}/continuous-event-graph/index.js +2 -2
- package/{dist → lib}/event-graph/index.d.cts +2 -2
- package/{dist → lib}/event-graph/index.d.ts +2 -2
- package/lib/execution-refs.cjs +3 -0
- package/{dist → lib}/execution-refs.d.cts +38 -14
- package/{dist → lib}/execution-refs.d.ts +38 -14
- package/lib/execution-refs.js +3 -0
- package/lib/index.cjs +25 -0
- package/{dist → lib}/index.d.cts +7 -8
- package/{dist → lib}/index.d.ts +7 -8
- package/lib/index.js +25 -0
- package/{dist/live-cards-bridge-BXbVTsna.d.cts → lib/live-cards-bridge-DC_ZU0eS.d.ts} +134 -3
- package/{dist/live-cards-bridge-Ds28XR15.d.ts → lib/live-cards-bridge-b25aAVvE.d.cts} +134 -3
- package/lib/loader-CuuLjxVA.d.cts +42 -0
- package/lib/loader-Zborm2pq.d.ts +42 -0
- package/lib/server-runtime/index.cjs +9 -0
- package/{dist → lib}/server-runtime/index.d.cts +4 -4
- package/{dist → lib}/server-runtime/index.d.ts +4 -4
- package/lib/server-runtime/index.js +9 -0
- package/lib/step-machine/index.d.cts +64 -0
- package/lib/step-machine/index.d.ts +64 -0
- package/lib/step-machine-public/index.cjs +5 -0
- package/{dist → lib}/step-machine-public/index.d.cts +21 -1
- package/{dist → lib}/step-machine-public/index.d.ts +21 -1
- package/lib/step-machine-public/index.js +5 -0
- package/lib/storage-interface-BhAON-gW.d.cts +84 -0
- package/lib/storage-interface-BhAON-gW.d.ts +84 -0
- package/lib/stores/index.cjs +3 -0
- package/lib/stores/index.d.cts +4 -0
- package/lib/stores/index.d.ts +4 -0
- package/lib/stores/index.js +3 -0
- package/lib/stores/kv.cjs +3 -0
- package/lib/stores/kv.d.cts +32 -0
- package/lib/stores/kv.d.ts +32 -0
- package/lib/stores/kv.js +3 -0
- package/{dist → lib}/stores/memory.d.cts +1 -1
- package/{dist → lib}/stores/memory.d.ts +1 -1
- package/{dist/types-B1ZRa4aI.d.ts → lib/types-CBxkYuLY.d.ts} +2 -1
- package/{dist/types-ycun84cq.d.cts → lib/types-DQ1bKuB1.d.cts} +11 -0
- package/{dist/types-ycun84cq.d.ts → lib/types-DQ1bKuB1.d.ts} +11 -0
- package/{dist/types-BxEFcVK9.d.cts → lib/types-DkFvgxwq.d.cts} +2 -1
- package/package.json +79 -119
- package/board-live-cards-cli.js +0 -37
- package/browser/board-livecards-client.js.map +0 -1
- package/browser/board-livecards-localstorage.js.map +0 -1
- package/browser/board-livegraph-engine.js +0 -3
- package/browser/board-livegraph-engine.js.map +0 -1
- package/browser/card-compute.js +0 -266
- package/browser/compute-jsonata.js.map +0 -1
- package/card-store.js +0 -37
- package/dist/batch/index.cjs.map +0 -1
- package/dist/batch/index.js.map +0 -1
- package/dist/board-live-cards-lib-Bg6EvCo5.d.cts +0 -136
- package/dist/board-live-cards-lib-jM2uYG1v.d.ts +0 -136
- package/dist/board-livegraph-runtime/index.cjs +0 -3
- package/dist/board-livegraph-runtime/index.cjs.map +0 -1
- package/dist/board-livegraph-runtime/index.js +0 -3
- package/dist/board-livegraph-runtime/index.js.map +0 -1
- package/dist/card-compute/index.cjs.map +0 -1
- package/dist/card-compute/index.js.map +0 -1
- package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs +0 -3
- package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs.map +0 -1
- package/dist/cli/browser-api/board-live-cards-browser-adapter.d.cts +0 -37
- package/dist/cli/browser-api/board-live-cards-browser-adapter.js +0 -3
- package/dist/cli/browser-api/board-live-cards-browser-adapter.js.map +0 -1
- package/dist/cli/browser-api/card-store-browser-api.cjs +0 -2
- package/dist/cli/browser-api/card-store-browser-api.cjs.map +0 -1
- package/dist/cli/browser-api/card-store-browser-api.d.cts +0 -26
- package/dist/cli/browser-api/card-store-browser-api.js.map +0 -1
- package/dist/cli/node/artifacts-store-cli.cjs +0 -11
- package/dist/cli/node/artifacts-store-cli.cjs.map +0 -1
- package/dist/cli/node/artifacts-store-cli.d.cts +0 -8
- package/dist/cli/node/artifacts-store-cli.js +0 -11
- package/dist/cli/node/artifacts-store-cli.js.map +0 -1
- package/dist/cli/node/board-live-cards-cli.cjs +0 -15
- package/dist/cli/node/board-live-cards-cli.cjs.map +0 -1
- package/dist/cli/node/board-live-cards-cli.d.cts +0 -20
- package/dist/cli/node/board-live-cards-cli.js +0 -15
- package/dist/cli/node/board-live-cards-cli.js.map +0 -1
- package/dist/cli/node/card-store-cli.cjs +0 -8
- package/dist/cli/node/card-store-cli.cjs.map +0 -1
- package/dist/cli/node/card-store-cli.d.cts +0 -15
- package/dist/cli/node/card-store-cli.js +0 -8
- package/dist/cli/node/card-store-cli.js.map +0 -1
- package/dist/cli/node/execution-adapter.cjs +0 -3
- package/dist/cli/node/execution-adapter.cjs.map +0 -1
- package/dist/cli/node/execution-adapter.js +0 -3
- package/dist/cli/node/execution-adapter.js.map +0 -1
- package/dist/cli/node/fs-board-adapter.cjs +0 -14
- package/dist/cli/node/fs-board-adapter.cjs.map +0 -1
- package/dist/cli/node/fs-board-adapter.d.cts +0 -204
- package/dist/cli/node/fs-board-adapter.js +0 -14
- package/dist/cli/node/fs-board-adapter.js.map +0 -1
- package/dist/cli/node/source-cli-task-executor.cjs +0 -11
- package/dist/cli/node/source-cli-task-executor.cjs.map +0 -1
- package/dist/cli/node/source-cli-task-executor.js.map +0 -1
- package/dist/config/index.cjs.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/continuous-event-graph/index.cjs.map +0 -1
- package/dist/continuous-event-graph/index.js.map +0 -1
- package/dist/event-graph/index.cjs.map +0 -1
- package/dist/event-graph/index.js.map +0 -1
- package/dist/execution-refs.cjs +0 -3
- package/dist/execution-refs.cjs.map +0 -1
- package/dist/execution-refs.js +0 -3
- package/dist/execution-refs.js.map +0 -1
- package/dist/index.cjs +0 -30
- package/dist/index.cjs.map +0 -1
- package/dist/index.js +0 -30
- package/dist/index.js.map +0 -1
- package/dist/inference/index.cjs +0 -7
- package/dist/inference/index.cjs.map +0 -1
- package/dist/inference/index.d.cts +0 -229
- package/dist/inference/index.d.ts +0 -229
- package/dist/inference/index.js +0 -7
- package/dist/inference/index.js.map +0 -1
- package/dist/server-runtime/index.cjs +0 -9
- package/dist/server-runtime/index.cjs.map +0 -1
- package/dist/server-runtime/index.js +0 -9
- package/dist/server-runtime/index.js.map +0 -1
- package/dist/step-machine/index.cjs.map +0 -1
- package/dist/step-machine/index.d.cts +0 -102
- package/dist/step-machine/index.d.ts +0 -102
- package/dist/step-machine/index.js.map +0 -1
- package/dist/step-machine-public/index.cjs +0 -2
- package/dist/step-machine-public/index.cjs.map +0 -1
- package/dist/step-machine-public/index.js +0 -2
- package/dist/step-machine-public/index.js.map +0 -1
- package/dist/storage-refs.cjs +0 -10
- package/dist/storage-refs.cjs.map +0 -1
- package/dist/storage-refs.js +0 -10
- package/dist/storage-refs.js.map +0 -1
- package/dist/stores/file.cjs +0 -2
- package/dist/stores/file.cjs.map +0 -1
- package/dist/stores/file.d.cts +0 -36
- package/dist/stores/file.d.ts +0 -36
- package/dist/stores/file.js +0 -2
- package/dist/stores/file.js.map +0 -1
- package/dist/stores/index.cjs +0 -2
- package/dist/stores/index.cjs.map +0 -1
- package/dist/stores/index.d.cts +0 -4
- package/dist/stores/index.d.ts +0 -4
- package/dist/stores/index.js +0 -2
- package/dist/stores/index.js.map +0 -1
- package/dist/stores/localStorage.cjs +0 -2
- package/dist/stores/localStorage.cjs.map +0 -1
- package/dist/stores/localStorage.d.cts +0 -34
- package/dist/stores/localStorage.d.ts +0 -34
- package/dist/stores/localStorage.js +0 -2
- package/dist/stores/localStorage.js.map +0 -1
- package/dist/stores/memory.cjs.map +0 -1
- package/dist/stores/memory.js.map +0 -1
- package/dist/types-CHSdoAAA.d.cts +0 -135
- package/dist/types-CoW0gQl3.d.ts +0 -135
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-fetch-prices.py +0 -201
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.js +0 -357
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-inference-adapter.js +0 -196
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.js +0 -300
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.py +0 -617
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker.py +0 -366
- package/examples/browser/livecards-browser/index.html +0 -41
- package/examples/browser/step-machine-browser/index.html +0 -367
- package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/.runtime-out +0 -1
- package/examples/cli/step-machine-cli/portfolio-tracker/--base-ref/board-graph.json +0 -32
- package/examples/cli/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
- package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
- package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
- package/examples/cli/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
- package/examples/cli/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -125
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -32
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -26
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/poll-status-cli.js +0 -49
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -25
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -23
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -21
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -38
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -48
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -31
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/_board_pycli.py +0 -107
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/add-cards.py +0 -51
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/init-board.py +0 -45
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/poll-status.py +0 -71
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/reset-board-dir.py +0 -36
- package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-demo.flow.yaml +0 -26
- package/examples/cli/step-machine-cli/portfolio-tracker/inline-python-handlers.py +0 -39
- package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker-pycli.flow.yaml +0 -80
- package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -76
- package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -44
- package/examples/cli/step-machine-cli/portfolio-tracker/run-inline-python-demo-pycli.py +0 -43
- package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker-pycli.py +0 -77
- package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
- package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +0 -31
- package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +0 -54
- package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +0 -21
- package/examples/cli/step-machine-demo/step-cli-echo-y.js +0 -15
- package/examples/cli/step-machine-demo/step2-double-cli.js +0 -33
- package/examples/cli/step-machine-demo/two-step-math.flow.yaml +0 -93
- package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +0 -43
- package/examples/example-board/agent-instructions-cardlayout.md +0 -56
- package/examples/example-board/agent-instructions.md +0 -834
- package/examples/example-board/cards/_index.json +0 -47
- package/examples/example-board/demo-shell.html +0 -63
- package/examples/index.html +0 -785
- package/examples/npm-libs/batch/batch-step-machine.ts +0 -121
- package/examples/npm-libs/continuous-event-graph/live-cards-board.ts +0 -215
- package/examples/npm-libs/continuous-event-graph/live-portfolio-dashboard.ts +0 -555
- package/examples/npm-libs/continuous-event-graph/portfolio-tracker.ts +0 -287
- package/examples/npm-libs/continuous-event-graph/reactive-monitoring.ts +0 -265
- package/examples/npm-libs/continuous-event-graph/reactive-pipeline.ts +0 -168
- package/examples/npm-libs/continuous-event-graph/soc-incident-board.ts +0 -287
- package/examples/npm-libs/continuous-event-graph/stock-dashboard.ts +0 -229
- package/examples/npm-libs/event-graph/ci-cd-pipeline.ts +0 -243
- package/examples/npm-libs/event-graph/executor-diamond.ts +0 -165
- package/examples/npm-libs/event-graph/executor-pipeline.ts +0 -161
- package/examples/npm-libs/event-graph/research-pipeline.ts +0 -137
- package/examples/npm-libs/flows/ai-conversation.yaml +0 -116
- package/examples/npm-libs/flows/order-processing.yaml +0 -143
- package/examples/npm-libs/flows/simple-greeting.yaml +0 -54
- package/examples/npm-libs/graph-of-graphs/multi-stage-etl.ts +0 -307
- package/examples/npm-libs/graph-of-graphs/url-processing-pipeline.ts +0 -254
- package/examples/npm-libs/inference/azure-deployment.ts +0 -149
- package/examples/npm-libs/inference/copilot-cli.ts +0 -138
- package/examples/npm-libs/inference/data-pipeline.ts +0 -145
- package/examples/npm-libs/inference/pluggable-adapters.ts +0 -254
- package/examples/npm-libs/node/ai-conversation.ts +0 -195
- package/examples/npm-libs/node/simple-greeting.ts +0 -101
- package/examples/step-machine-cli/portfolio-tracker/cards/holdings-table.json +0 -22
- package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +0 -43
- package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +0 -15
- package/examples/step-machine-cli/portfolio-tracker/cards/price-fetch.json +0 -15
- package/examples/step-machine-cli/portfolio-tracker/fetch-prices.js +0 -48
- package/examples/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +0 -57
- package/examples/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +0 -27
- package/examples/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +0 -25
- package/examples/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +0 -29
- package/examples/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +0 -27
- package/examples/step-machine-cli/portfolio-tracker/handlers/status-cli.js +0 -25
- package/examples/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +0 -37
- package/examples/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +0 -53
- package/examples/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +0 -35
- package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker-task-executor.cjs +0 -96
- package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +0 -227
- package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +0 -38
- package/examples/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +0 -28
- package/step-machine-cli.js +0 -407
- /package/{dist/board-livegraph-runtime → cli/browser-api}/jsonata-sync.cjs +0 -0
- /package/{dist/cli → cli}/node/artifacts-store-cli.d.ts +0 -0
- /package/{dist/cli/node/source-cli-task-executor.d.cts → cli/node/batch-runner-cli.d.ts} +0 -0
- /package/{dist/cli → cli}/node/board-live-cards-cli.d.ts +0 -0
- /package/{dist/cli → cli}/node/card-store-cli.d.ts +0 -0
- /package/{dist/card-compute → cli/node}/jsonata-sync.cjs +0 -0
- /package/{dist/cli → cli}/node/source-cli-task-executor.d.ts +0 -0
- /package/examples/{example-board → board}/cards/card-concentration.json +0 -0
- /package/examples/{example-board → board}/cards/card-my-identity.json +0 -0
- /package/examples/{example-board → board}/cards/card-portfolio-action.json +0 -0
- /package/examples/{example-board → board}/cards/card-portfolio-intelligence.json +0 -0
- /package/examples/{example-board → board}/cards/card-portfolio-risks.json +0 -0
- /package/examples/{example-board → board}/cards/card-rebalance-impact.json +0 -0
- /package/examples/{example-board → board}/cards/card-rebalance-sim.json +0 -0
- /package/examples/{example-board/cards/card-portfolio-value.json → board/cards/cardT-portfolio-value.json} +0 -0
- /package/examples/{example-board → board}/demo-chat-handler.js +0 -0
- /package/examples/{example-board → board}/scripts/copilot_wrapper.bat +0 -0
- /package/examples/{example-board → board}/scripts/copilot_wrapper_helper.ps1 +0 -0
- /package/examples/{example-board → board}/scripts/workiq_wrapper.mjs +0 -0
- /package/examples/{browser/boards/portfolio-tracker → board/test}/portfolio-tracker-sse-worker.js +0 -0
- /package/{dist → lib}/batch/index.cjs +0 -0
- /package/{dist → lib}/batch/index.d.cts +0 -0
- /package/{dist → lib}/batch/index.d.ts +0 -0
- /package/{dist → lib}/batch/index.js +0 -0
- /package/{dist/cli/browser-api → lib/board-livegraph-runtime}/jsonata-sync.cjs +0 -0
- /package/{dist → lib}/card-compute/index.d.cts +0 -0
- /package/{dist → lib}/card-compute/index.d.ts +0 -0
- /package/{dist/cli/node → lib/card-compute}/jsonata-sync.cjs +0 -0
- /package/{dist → lib}/config/index.cjs +0 -0
- /package/{dist → lib}/config/index.d.cts +0 -0
- /package/{dist → lib}/config/index.d.ts +0 -0
- /package/{dist → lib}/config/index.js +0 -0
- /package/{dist → lib}/continuous-event-graph/jsonata-sync.cjs +0 -0
- /package/{dist → lib}/event-graph/index.cjs +0 -0
- /package/{dist → lib}/event-graph/index.js +0 -0
- /package/{dist → lib}/jsonata-sync.cjs +0 -0
- /package/{dist → lib}/server-runtime/jsonata-sync.cjs +0 -0
- /package/{dist → lib}/step-machine/index.cjs +0 -0
- /package/{dist → lib}/step-machine/index.js +0 -0
- /package/{dist → lib}/step-machine-public/jsonata-sync.cjs +0 -0
- /package/{dist → lib}/stores/memory.cjs +0 -0
- /package/{dist → lib}/stores/memory.js +0 -0
- /package/{dist → lib}/types-BBhqYGhE.d.cts +0 -0
- /package/{dist → lib}/types-BBhqYGhE.d.ts +0 -0
- /package/{dist → lib}/validate-BAVzUJWa.d.ts +0 -0
- /package/{dist → lib}/validate-Dbu7ygys.d.cts +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-source-kinds",
|
|
3
|
+
"meta": {
|
|
4
|
+
"title": "Source Connection Types",
|
|
5
|
+
"tags": ["admin"],
|
|
6
|
+
"desc": "Reference card listing the source def kinds supported by the demo task executor.",
|
|
7
|
+
"_gandalfCard": true
|
|
8
|
+
},
|
|
9
|
+
"provides": [],
|
|
10
|
+
"compute": [],
|
|
11
|
+
"view": {
|
|
12
|
+
"elements": [
|
|
13
|
+
{
|
|
14
|
+
"kind": "table",
|
|
15
|
+
"label": "Supported connection types",
|
|
16
|
+
"data": {
|
|
17
|
+
"bind": "card_data.kinds",
|
|
18
|
+
"columns": ["kind", "description"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"layout": {
|
|
23
|
+
"board": { "col": 4, "order": 99 },
|
|
24
|
+
"canvas": { "x": 900, "y": 50, "w": 480, "h": 240 }
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"card_data": {
|
|
28
|
+
"kinds": [
|
|
29
|
+
{ "kind": "mock", "description": "Look up a key in the built-in MOCK_DB dictionary and return static JSON." },
|
|
30
|
+
{ "kind": "copilot", "description": "Invoke GitHub Copilot CLI using copilot.prompt_template (or top-level prompt_template shorthand) with {{key}} interpolation from _projections and args." },
|
|
31
|
+
{ "kind": "workiq", "description": "Invoke WorkIQ (Microsoft 365 Copilot) using workiq.query_template with {{key}} interpolation. Requires workiq CLI + az login." },
|
|
32
|
+
{ "kind": "url", "description": "Single URL fetch via curl with {{key}} interpolation from _projections. Supports method, headers, args, tickersFrom, and cacheTimeout (seconds)." },
|
|
33
|
+
{ "kind": "url-list", "description": "Fan-out fetch over _projections.url_list (string[]), returning an array of raw JSON responses. Supports method, headers, and cacheTimeout." }
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-source-kinds",
|
|
3
|
+
"meta": {
|
|
4
|
+
"title": "Source Connection Types",
|
|
5
|
+
"tags": [
|
|
6
|
+
"admin"
|
|
7
|
+
],
|
|
8
|
+
"desc": "Reference card listing the source def kinds supported by the demo task executor.",
|
|
9
|
+
"_gandalfCard": true
|
|
10
|
+
},
|
|
11
|
+
"provides": [],
|
|
12
|
+
"compute": [],
|
|
13
|
+
"view": {
|
|
14
|
+
"elements": [
|
|
15
|
+
{
|
|
16
|
+
"kind": "table",
|
|
17
|
+
"label": "Supported connection types",
|
|
18
|
+
"data": {
|
|
19
|
+
"bind": "card_data.kinds",
|
|
20
|
+
"columns": [
|
|
21
|
+
"kind",
|
|
22
|
+
"description"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"layout": {
|
|
28
|
+
"board": {
|
|
29
|
+
"col": 4,
|
|
30
|
+
"order": 99
|
|
31
|
+
},
|
|
32
|
+
"canvas": {
|
|
33
|
+
"x": 900,
|
|
34
|
+
"y": 50,
|
|
35
|
+
"w": 480,
|
|
36
|
+
"h": 240
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"card_data": {
|
|
41
|
+
"kinds": [
|
|
42
|
+
{
|
|
43
|
+
"kind": "mock",
|
|
44
|
+
"description": "Look up a key in the built-in MOCK_DB dictionary and return static JSON."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"kind": "copilot",
|
|
48
|
+
"description": "Invoke GitHub Copilot CLI using copilot.prompt_template (or top-level prompt_template shorthand) with {{key}} interpolation from _projections and args."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"kind": "workiq",
|
|
52
|
+
"description": "Invoke WorkIQ (Microsoft 365 Copilot) using workiq.query_template with {{key}} interpolation. Requires workiq CLI + az login."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"kind": "url",
|
|
56
|
+
"description": "Single URL fetch via curl with {{key}} interpolation from _projections. Supports method, headers, args, tickersFrom, and cacheTimeout (seconds)."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"kind": "url-list",
|
|
60
|
+
"description": "Fan-out fetch over _projections.url_list (string[]), returning an array of raw JSON responses. Supports method, headers, and cacheTimeout."
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "demo-source-copilot",
|
|
3
|
+
"settings": {
|
|
4
|
+
"start_step": "execute",
|
|
5
|
+
"max_total_steps": 8,
|
|
6
|
+
"timeout_ms": 180000
|
|
7
|
+
},
|
|
8
|
+
"steps": {
|
|
9
|
+
"execute": {
|
|
10
|
+
"description": "Execute copilot source def",
|
|
11
|
+
"handler": {
|
|
12
|
+
"type": "ref",
|
|
13
|
+
"howToRun": "demo-local-module",
|
|
14
|
+
"whatToRun": { "kind": "fs-path", "value": "./source-def-handlers/copilot-source-handler.js" }
|
|
15
|
+
},
|
|
16
|
+
"transitions": {
|
|
17
|
+
"success": "completed",
|
|
18
|
+
"failure": "failed"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"terminal_states": {
|
|
23
|
+
"completed": {
|
|
24
|
+
"description": "Copilot source succeeded",
|
|
25
|
+
"return_intent": "success",
|
|
26
|
+
"return_artifacts": ["resultValue", "wroteOutputDirectly"]
|
|
27
|
+
},
|
|
28
|
+
"failed": {
|
|
29
|
+
"description": "Copilot source failed",
|
|
30
|
+
"return_intent": "failure"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "demo-source-mock",
|
|
3
|
+
"settings": {
|
|
4
|
+
"start_step": "execute",
|
|
5
|
+
"max_total_steps": 5,
|
|
6
|
+
"timeout_ms": 30000
|
|
7
|
+
},
|
|
8
|
+
"steps": {
|
|
9
|
+
"execute": {
|
|
10
|
+
"description": "Execute mock source def",
|
|
11
|
+
"handler": {
|
|
12
|
+
"type": "compute-jsonata",
|
|
13
|
+
"expr": [
|
|
14
|
+
"data.resultValue = $lookup(expects_data.mockDb, expects_data.sourceDef.mock)",
|
|
15
|
+
"result = $exists(data.resultValue) ? \"success\" : \"failure\""
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"transitions": {
|
|
19
|
+
"success": "completed",
|
|
20
|
+
"failure": "failed"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"terminal_states": {
|
|
25
|
+
"completed": {
|
|
26
|
+
"description": "Mock lookup succeeded",
|
|
27
|
+
"return_intent": "success",
|
|
28
|
+
"return_artifacts": ["resultValue", "wroteOutputDirectly"]
|
|
29
|
+
},
|
|
30
|
+
"failed": {
|
|
31
|
+
"description": "Mock lookup failed",
|
|
32
|
+
"return_intent": "failure"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "demo-source-url-list",
|
|
3
|
+
"settings": {
|
|
4
|
+
"start_step": "execute",
|
|
5
|
+
"max_total_steps": 10,
|
|
6
|
+
"timeout_ms": 60000
|
|
7
|
+
},
|
|
8
|
+
"steps": {
|
|
9
|
+
"execute": {
|
|
10
|
+
"description": "Execute URL list source def",
|
|
11
|
+
"handler": {
|
|
12
|
+
"type": "ref",
|
|
13
|
+
"howToRun": "demo-local-module",
|
|
14
|
+
"whatToRun": { "kind": "fs-path", "value": "./source-def-handlers/http-source-handler.js" }
|
|
15
|
+
},
|
|
16
|
+
"transitions": {
|
|
17
|
+
"success": "completed",
|
|
18
|
+
"failure": "failed"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"terminal_states": {
|
|
23
|
+
"completed": {
|
|
24
|
+
"description": "URL list fetch succeeded",
|
|
25
|
+
"return_intent": "success",
|
|
26
|
+
"return_artifacts": ["resultValue", "wroteOutputDirectly"]
|
|
27
|
+
},
|
|
28
|
+
"failed": {
|
|
29
|
+
"description": "URL list fetch failed",
|
|
30
|
+
"return_intent": "failure"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "demo-source-url",
|
|
3
|
+
"settings": {
|
|
4
|
+
"start_step": "execute",
|
|
5
|
+
"max_total_steps": 10,
|
|
6
|
+
"timeout_ms": 60000
|
|
7
|
+
},
|
|
8
|
+
"steps": {
|
|
9
|
+
"execute": {
|
|
10
|
+
"description": "Execute single URL source def",
|
|
11
|
+
"handler": {
|
|
12
|
+
"type": "ref",
|
|
13
|
+
"howToRun": "demo-local-module",
|
|
14
|
+
"whatToRun": { "kind": "fs-path", "value": "./source-def-handlers/http-source-handler.js" }
|
|
15
|
+
},
|
|
16
|
+
"transitions": {
|
|
17
|
+
"success": "completed",
|
|
18
|
+
"failure": "failed"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"terminal_states": {
|
|
23
|
+
"completed": {
|
|
24
|
+
"description": "URL fetch succeeded",
|
|
25
|
+
"return_intent": "success",
|
|
26
|
+
"return_artifacts": ["resultValue", "wroteOutputDirectly"]
|
|
27
|
+
},
|
|
28
|
+
"failed": {
|
|
29
|
+
"description": "URL fetch failed",
|
|
30
|
+
"return_intent": "failure"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "demo-source-workiq",
|
|
3
|
+
"settings": {
|
|
4
|
+
"start_step": "execute",
|
|
5
|
+
"max_total_steps": 8,
|
|
6
|
+
"timeout_ms": 120000
|
|
7
|
+
},
|
|
8
|
+
"steps": {
|
|
9
|
+
"execute": {
|
|
10
|
+
"description": "Execute workiq source def via demo-server HTTP proxy",
|
|
11
|
+
"handler": {
|
|
12
|
+
"type": "ref",
|
|
13
|
+
"howToRun": "http:post",
|
|
14
|
+
"whatToRun": { "kind": "http-url", "value": "/api/workiq/ask" }
|
|
15
|
+
},
|
|
16
|
+
"transitions": {
|
|
17
|
+
"success": "completed",
|
|
18
|
+
"failure": "failed"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"terminal_states": {
|
|
23
|
+
"completed": {
|
|
24
|
+
"description": "WorkIQ source succeeded",
|
|
25
|
+
"return_intent": "success",
|
|
26
|
+
"return_artifacts": ["resultValue", "wroteOutputDirectly"]
|
|
27
|
+
},
|
|
28
|
+
"failed": {
|
|
29
|
+
"description": "WorkIQ source failed",
|
|
30
|
+
"return_intent": "failure",
|
|
31
|
+
"return_artifacts": ["error"]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { execFileSync } from 'node:child_process';
|
|
6
|
+
|
|
7
|
+
function interpolate(template, args) {
|
|
8
|
+
return String(template).replace(/\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}/g, (_m, key) => {
|
|
9
|
+
const v = args?.[key];
|
|
10
|
+
if (v === undefined) return '';
|
|
11
|
+
return typeof v === 'string' ? v : JSON.stringify(v);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const DEFAULT_PROMPT_CONTEXT = {
|
|
16
|
+
view_kind_guidance: [
|
|
17
|
+
'VIEW KIND GUIDANCE (for dynamic ref rendering):',
|
|
18
|
+
'- Return a _view object whenever your output data is meant for a ref element.',
|
|
19
|
+
'- Allowed _view.kind values only: table, editable-table, chart, metric, list, badge, text, narrative, markdown, form, filter, todo, alert.',
|
|
20
|
+
'- If uncertain, use "table".',
|
|
21
|
+
'- For array rows that users should edit, prefer "editable-table" and set _view.data.writeTo to a card_data path.',
|
|
22
|
+
'- For chart, set _view.data.chartType and _view.data.columns with [labelField, valueField].',
|
|
23
|
+
'- Keep _view.data minimal and valid JSON (no comments, no trailing text).',
|
|
24
|
+
].join('\n'),
|
|
25
|
+
card_layout_guidance: [
|
|
26
|
+
'CARD LAYOUT GUIDANCE:',
|
|
27
|
+
'- Prefer compact outputs that fit a card: one primary structure plus concise rationale text.',
|
|
28
|
+
'- Avoid repeating values already present in upstream inputs.',
|
|
29
|
+
'- If you produce both machine-readable and human-readable content, keep machine-readable fields top-level and concise prose in a separate field.',
|
|
30
|
+
].join('\n'),
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
function resolvePrompt(sourceDef, promptContext) {
|
|
34
|
+
const cfg = sourceDef?.copilot && typeof sourceDef.copilot === 'object' ? sourceDef.copilot : {};
|
|
35
|
+
const template = cfg.prompt_template ?? sourceDef.prompt_template;
|
|
36
|
+
if (!template || typeof template !== 'string') return null;
|
|
37
|
+
const args = {
|
|
38
|
+
...(promptContext || DEFAULT_PROMPT_CONTEXT),
|
|
39
|
+
...(sourceDef?._projections || {}),
|
|
40
|
+
...(cfg.args || sourceDef.args || {}),
|
|
41
|
+
};
|
|
42
|
+
return interpolate(template, args);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function runCopilot(prompt, sourceDef, executorDir, extra) {
|
|
46
|
+
const wrapperPath = path.join(executorDir, 'scripts', 'copilot_wrapper.bat');
|
|
47
|
+
if (process.platform === 'win32' && fs.existsSync(wrapperPath)) {
|
|
48
|
+
const tmpBase = path.join(process.env.TEMP || process.cwd(), `copilot-handler-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`);
|
|
49
|
+
const outFile = `${tmpBase}.out.json`;
|
|
50
|
+
const promptFile = `${tmpBase}.prompt.txt`;
|
|
51
|
+
const sessionDir = path.join(
|
|
52
|
+
extra?.boardSetupRoot || (process.env.TEMP || process.cwd()),
|
|
53
|
+
'copilot-sessions',
|
|
54
|
+
String(sourceDef?.bindTo || 'default').replace(/[^a-zA-Z0-9_-]/g, '_'),
|
|
55
|
+
);
|
|
56
|
+
fs.mkdirSync(sessionDir, { recursive: true });
|
|
57
|
+
fs.writeFileSync(promptFile, prompt, 'utf-8');
|
|
58
|
+
|
|
59
|
+
let shapeFile = '';
|
|
60
|
+
const shape = sourceDef?.copilot?.result_shape ?? sourceDef?.result_shape;
|
|
61
|
+
if (shape && typeof shape === 'object') {
|
|
62
|
+
shapeFile = `${tmpBase}.shape.json`;
|
|
63
|
+
fs.writeFileSync(shapeFile, JSON.stringify(shape), 'utf-8');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
execFileSync('cmd.exe', [
|
|
68
|
+
'/d', '/c',
|
|
69
|
+
wrapperPath,
|
|
70
|
+
outFile,
|
|
71
|
+
sessionDir,
|
|
72
|
+
extra?.boardSetupRoot || process.cwd(),
|
|
73
|
+
`@${promptFile}`,
|
|
74
|
+
'json',
|
|
75
|
+
String(sourceDef?.bindTo || 'executor'),
|
|
76
|
+
'',
|
|
77
|
+
shapeFile,
|
|
78
|
+
], {
|
|
79
|
+
encoding: 'utf-8',
|
|
80
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
81
|
+
windowsHide: true,
|
|
82
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
83
|
+
});
|
|
84
|
+
return JSON.parse(fs.readFileSync(outFile, 'utf-8').replace(/^\uFEFF/, ''));
|
|
85
|
+
} finally {
|
|
86
|
+
try { fs.unlinkSync(promptFile); } catch {}
|
|
87
|
+
try { fs.unlinkSync(outFile); } catch {}
|
|
88
|
+
if (shapeFile) { try { fs.unlinkSync(shapeFile); } catch {} }
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const stdout = execFileSync('copilot', ['--allow-all'], {
|
|
93
|
+
input: prompt,
|
|
94
|
+
encoding: 'utf-8',
|
|
95
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
96
|
+
timeout: 120000,
|
|
97
|
+
cwd: extra?.boardSetupRoot || process.cwd(),
|
|
98
|
+
windowsHide: true,
|
|
99
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const firstBrace = stdout.indexOf('{');
|
|
103
|
+
const firstBracket = stdout.indexOf('[');
|
|
104
|
+
let jsonStart = -1;
|
|
105
|
+
if (firstBrace === -1) jsonStart = firstBracket;
|
|
106
|
+
else if (firstBracket === -1) jsonStart = firstBrace;
|
|
107
|
+
else jsonStart = Math.min(firstBrace, firstBracket);
|
|
108
|
+
|
|
109
|
+
if (jsonStart !== -1) {
|
|
110
|
+
try {
|
|
111
|
+
return JSON.parse(stdout.slice(jsonStart));
|
|
112
|
+
} catch {
|
|
113
|
+
return stdout;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return stdout;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export async function execute(context) {
|
|
120
|
+
const sourceDef = context?.sourceDef || {};
|
|
121
|
+
const extra = context?.extra || {};
|
|
122
|
+
const executorDir = context?.executorDir || process.cwd();
|
|
123
|
+
const promptContext = context?.promptContext || DEFAULT_PROMPT_CONTEXT;
|
|
124
|
+
|
|
125
|
+
const prompt = resolvePrompt(sourceDef, promptContext);
|
|
126
|
+
if (!prompt) {
|
|
127
|
+
return {
|
|
128
|
+
result: 'failure',
|
|
129
|
+
data: { error: 'Source definition missing copilot.prompt_template (or prompt_template)' },
|
|
130
|
+
error: 'missing prompt_template',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
try {
|
|
135
|
+
const resultValue = runCopilot(prompt, sourceDef, executorDir, extra);
|
|
136
|
+
return { result: 'success', data: { resultValue } };
|
|
137
|
+
} catch (err) {
|
|
138
|
+
const msg = String(err?.message || err);
|
|
139
|
+
return { result: 'failure', data: { error: `copilot invocation failed: ${msg}` }, error: msg };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import crypto from 'node:crypto';
|
|
7
|
+
|
|
8
|
+
const CACHE_DIR = path.join(os.tmpdir(), 'demo-executor-cache');
|
|
9
|
+
const DEFAULT_CACHE_TTL_MS = 60 * 60 * 1000;
|
|
10
|
+
|
|
11
|
+
function interpolate(template, args) {
|
|
12
|
+
return String(template).replace(/\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}/g, (_m, key) => {
|
|
13
|
+
const v = args?.[key];
|
|
14
|
+
if (v === undefined) return '';
|
|
15
|
+
return typeof v === 'string' ? v : JSON.stringify(v);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function cacheKey(seed) {
|
|
20
|
+
return crypto.createHash('sha1').update(seed).digest('hex');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function readCache(key, ttlMs) {
|
|
24
|
+
const p = path.join(CACHE_DIR, `${key}.json`);
|
|
25
|
+
try {
|
|
26
|
+
const stat = fs.statSync(p);
|
|
27
|
+
const ageMs = Date.now() - stat.mtimeMs;
|
|
28
|
+
if (ageMs > ttlMs) return null;
|
|
29
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
30
|
+
} catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function writeCache(key, value) {
|
|
36
|
+
fs.mkdirSync(CACHE_DIR, { recursive: true });
|
|
37
|
+
fs.writeFileSync(path.join(CACHE_DIR, `${key}.json`), JSON.stringify(value));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function fetchJson(url, method, headers) {
|
|
41
|
+
const response = await fetch(url, { method, headers });
|
|
42
|
+
const text = await response.text();
|
|
43
|
+
let parsed;
|
|
44
|
+
try {
|
|
45
|
+
parsed = text ? JSON.parse(text) : {};
|
|
46
|
+
} catch {
|
|
47
|
+
throw new Error(`Invalid JSON from ${url}`);
|
|
48
|
+
}
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const msg = typeof parsed?.error === 'string' ? parsed.error : `HTTP ${response.status}`;
|
|
51
|
+
throw new Error(msg);
|
|
52
|
+
}
|
|
53
|
+
return parsed;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async function doFetchApi(url, method, headers, ttlMs) {
|
|
57
|
+
const key = cacheKey(`url:${method}:${url}`);
|
|
58
|
+
const cached = readCache(key, ttlMs);
|
|
59
|
+
if (cached !== null) {
|
|
60
|
+
console.error(`[http-source-handler] cache hit for ${url}`);
|
|
61
|
+
return cached;
|
|
62
|
+
}
|
|
63
|
+
const data = await fetchJson(url, method, headers);
|
|
64
|
+
writeCache(key, data);
|
|
65
|
+
return data;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function resolveTickersArg(sourceDef, fetchArgs) {
|
|
69
|
+
const tickersFrom = sourceDef?.tickersFrom;
|
|
70
|
+
if (typeof tickersFrom !== 'string' || !tickersFrom.includes('.')) return;
|
|
71
|
+
const [refKey, fieldName] = tickersFrom.split('.', 2);
|
|
72
|
+
const arr = sourceDef?._projections?.[refKey];
|
|
73
|
+
if (!Array.isArray(arr)) return;
|
|
74
|
+
const vals = arr
|
|
75
|
+
.filter((row) => row && typeof row === 'object' && row[fieldName])
|
|
76
|
+
.map((row) => String(row[fieldName]));
|
|
77
|
+
if (vals.length > 0) fetchArgs.tickers = vals.join(',');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function executeUrl(sourceDef) {
|
|
81
|
+
const cfg = sourceDef?.url;
|
|
82
|
+
if (!cfg || typeof cfg !== 'object') {
|
|
83
|
+
throw new Error('url source requires object config');
|
|
84
|
+
}
|
|
85
|
+
const method = String(cfg.method || 'GET').toUpperCase();
|
|
86
|
+
const headers = cfg.headers && typeof cfg.headers === 'object' ? cfg.headers : {};
|
|
87
|
+
const ttlMs = typeof cfg.cacheTimeout === 'number' ? cfg.cacheTimeout * 1000 : DEFAULT_CACHE_TTL_MS;
|
|
88
|
+
const fetchArgs = cfg.args && typeof cfg.args === 'object' ? { ...cfg.args } : {};
|
|
89
|
+
|
|
90
|
+
resolveTickersArg(sourceDef, fetchArgs);
|
|
91
|
+
if (sourceDef?.tickersFrom && !fetchArgs.tickers) {
|
|
92
|
+
throw new Error('url: tickersFrom resolved to empty list - skipping fetch');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const ctx = {
|
|
96
|
+
...(sourceDef?._projections || {}),
|
|
97
|
+
...fetchArgs,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
if (typeof cfg.url !== 'string' || !cfg.url) {
|
|
101
|
+
throw new Error('url source missing url template');
|
|
102
|
+
}
|
|
103
|
+
const url = interpolate(cfg.url, ctx);
|
|
104
|
+
return doFetchApi(url, method, headers, ttlMs);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async function executeUrlList(sourceDef) {
|
|
108
|
+
const cfg = sourceDef?.['url-list'];
|
|
109
|
+
if (!cfg || typeof cfg !== 'object') {
|
|
110
|
+
throw new Error('url-list source requires object config');
|
|
111
|
+
}
|
|
112
|
+
const method = String(cfg.method || 'GET').toUpperCase();
|
|
113
|
+
const headers = cfg.headers && typeof cfg.headers === 'object' ? cfg.headers : {};
|
|
114
|
+
const ttlMs = typeof cfg.cacheTimeout === 'number' ? cfg.cacheTimeout * 1000 : DEFAULT_CACHE_TTL_MS;
|
|
115
|
+
|
|
116
|
+
const urlList = sourceDef?._projections?.url_list;
|
|
117
|
+
if (!Array.isArray(urlList) || urlList.length === 0) {
|
|
118
|
+
throw new Error('url-list source requires _projections.url_list as non-empty array');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const results = [];
|
|
122
|
+
for (const u of urlList) {
|
|
123
|
+
results.push(await doFetchApi(String(u), method, headers, ttlMs));
|
|
124
|
+
}
|
|
125
|
+
return results;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export async function execute(context) {
|
|
129
|
+
const kind = context?.kind;
|
|
130
|
+
const sourceDef = context?.sourceDef || {};
|
|
131
|
+
try {
|
|
132
|
+
let resultValue;
|
|
133
|
+
if (kind === 'url') {
|
|
134
|
+
resultValue = await executeUrl(sourceDef);
|
|
135
|
+
} else if (kind === 'url-list') {
|
|
136
|
+
resultValue = await executeUrlList(sourceDef);
|
|
137
|
+
} else {
|
|
138
|
+
throw new Error(`http-source-handler does not support kind: ${kind}`);
|
|
139
|
+
}
|
|
140
|
+
return { result: 'success', data: { resultValue } };
|
|
141
|
+
} catch (err) {
|
|
142
|
+
const msg = String(err?.message || err);
|
|
143
|
+
return { result: 'failure', data: { error: msg }, error: msg };
|
|
144
|
+
}
|
|
145
|
+
}
|