ultravisor 1.0.3 → 1.0.8

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.
Files changed (248) hide show
  1. package/.claude/launch.json +11 -0
  2. package/.claude/ultravisor-dev-config.json +3 -0
  3. package/card-audit.json +1545 -0
  4. package/docs/_sidebar.md +17 -0
  5. package/docs/css/docuserve.css +73 -0
  6. package/docs/features/beacon-authentication.md +209 -0
  7. package/docs/features/beacon-providers.md +1299 -0
  8. package/docs/features/beacons.md +530 -0
  9. package/docs/features/capabilities.md +193 -0
  10. package/docs/features/llm-model-setup.md +505 -0
  11. package/docs/features/llm.md +262 -0
  12. package/docs/features/tasks-content-system.md +110 -0
  13. package/docs/features/tasks-data-transform.md +233 -0
  14. package/docs/features/tasks-extension.md +36 -0
  15. package/docs/features/tasks-file-system.md +203 -0
  16. package/docs/features/tasks-flow-control.md +125 -0
  17. package/docs/features/tasks-http-client.md +119 -0
  18. package/docs/features/tasks-llm.md +118 -0
  19. package/docs/features/tasks-meadow-api.md +163 -0
  20. package/docs/features/tasks-user-interaction.md +49 -0
  21. package/docs/features/tasks.md +14 -0
  22. package/docs/index.html +1 -1
  23. package/docs/retold-catalog.json +1 -1
  24. package/docs/retold-keyword-index.json +17374 -5
  25. package/operation-library/api-data-pipeline.json +143 -0
  26. package/operation-library/beacon-remote-command.json +72 -0
  27. package/operation-library/conditional-file-backup.json +143 -0
  28. package/operation-library/config-processor.json +136 -0
  29. package/operation-library/csv-data-analysis.json +228 -0
  30. package/operation-library/csv-to-json.json +160 -0
  31. package/operation-library/directory-inventory.json +128 -0
  32. package/operation-library/expression-calculator.json +114 -0
  33. package/operation-library/file-search-replace.json +175 -0
  34. package/operation-library/git-status-report.json +368 -0
  35. package/operation-library/health-check-ping.json +329 -0
  36. package/operation-library/json-config-merge.json +313 -0
  37. package/operation-library/llm-embedding-tool-use.json +314 -0
  38. package/operation-library/llm-multi-turn-analysis.json +322 -0
  39. package/operation-library/llm-summarize.json +264 -0
  40. package/operation-library/log-line-counter.json +185 -0
  41. package/operation-library/meadow-crud-lifecycle.json +264 -0
  42. package/operation-library/npm-project-validator.json +193 -0
  43. package/operation-library/rest-api-orchestrator.json +218 -0
  44. package/operation-library/shell-system-info.json +137 -0
  45. package/operation-library/simple-echo.json +95 -0
  46. package/operation-library/template-processor.json +299 -0
  47. package/operation-library/text-sanitizer.json +176 -0
  48. package/package.json +12 -8
  49. package/source/Ultravisor.cjs +30 -3
  50. package/source/beacon/Ultravisor-Beacon-CLI.cjs +143 -0
  51. package/source/beacon/Ultravisor-Beacon-CapabilityProvider.cjs +129 -0
  52. package/source/beacon/Ultravisor-Beacon-Client.cjs +568 -0
  53. package/source/beacon/Ultravisor-Beacon-Executor.cjs +500 -0
  54. package/source/beacon/Ultravisor-Beacon-ProviderRegistry.cjs +330 -0
  55. package/source/beacon/providers/Ultravisor-Beacon-Provider-FileSystem.cjs +331 -0
  56. package/source/beacon/providers/Ultravisor-Beacon-Provider-LLM.cjs +966 -0
  57. package/source/beacon/providers/Ultravisor-Beacon-Provider-Shell.cjs +95 -0
  58. package/source/cli/Ultravisor-CLIProgram.cjs +44 -22
  59. package/source/cli/commands/Ultravisor-Command-SingleOperation.cjs +29 -18
  60. package/source/cli/commands/Ultravisor-Command-SingleTask.cjs +62 -19
  61. package/source/cli/commands/Ultravisor-Command-UpdateTask.cjs +27 -15
  62. package/source/config/Ultravisor-Default-Command-Configuration.cjs +12 -3
  63. package/source/services/Ultravisor-Beacon-Coordinator.cjs +966 -0
  64. package/source/services/Ultravisor-ExecutionEngine.cjs +1093 -0
  65. package/source/services/Ultravisor-ExecutionManifest.cjs +629 -0
  66. package/source/services/Ultravisor-Hypervisor-State.cjs +270 -97
  67. package/source/services/Ultravisor-Hypervisor.cjs +185 -75
  68. package/source/services/Ultravisor-Schedule-Persistence-Base.cjs +45 -0
  69. package/source/services/Ultravisor-StateManager.cjs +253 -0
  70. package/source/services/Ultravisor-TaskTypeRegistry.cjs +213 -0
  71. package/source/services/persistence/Ultravisor-Schedule-Persistence-JSONFile.cjs +140 -0
  72. package/source/services/tasks/Ultravisor-BuiltIn-TaskConfigs.cjs +19 -0
  73. package/source/services/tasks/Ultravisor-TaskHelper-BeaconDispatch.cjs +107 -0
  74. package/source/services/tasks/Ultravisor-TaskType-Base.cjs +125 -0
  75. package/source/services/tasks/content-system/Ultravisor-TaskConfigs-ContentSystem.cjs +90 -0
  76. package/source/services/tasks/content-system/definitions/content-create-folder.json +24 -0
  77. package/source/services/tasks/content-system/definitions/content-list-files.json +27 -0
  78. package/source/services/tasks/content-system/definitions/content-read-file.json +26 -0
  79. package/source/services/tasks/content-system/definitions/content-save-file.json +26 -0
  80. package/source/services/tasks/data-transform/Ultravisor-TaskConfigs-DataTransform.cjs +577 -0
  81. package/source/services/tasks/data-transform/Ultravisor-TaskType-ReplaceString.cjs +80 -0
  82. package/source/services/tasks/data-transform/Ultravisor-TaskType-SetValues.cjs +74 -0
  83. package/source/services/tasks/data-transform/Ultravisor-TaskType-StringAppender.cjs +90 -0
  84. package/source/services/tasks/data-transform/definitions/comprehension-intersect.json +24 -0
  85. package/source/services/tasks/data-transform/definitions/csv-transform.json +24 -0
  86. package/source/services/tasks/data-transform/definitions/expression-solver.json +20 -0
  87. package/source/services/tasks/data-transform/definitions/histogram.json +23 -0
  88. package/source/services/tasks/data-transform/definitions/parse-csv.json +27 -0
  89. package/source/services/tasks/data-transform/definitions/replace-string.json +27 -0
  90. package/source/services/tasks/data-transform/definitions/set-values.json +17 -0
  91. package/source/services/tasks/data-transform/definitions/string-appender.json +22 -0
  92. package/source/services/tasks/data-transform/definitions/template-string.json +20 -0
  93. package/source/services/tasks/extension/Ultravisor-TaskConfigs-Extension.cjs +87 -0
  94. package/source/services/tasks/extension/definitions/beacon-dispatch.json +32 -0
  95. package/source/services/tasks/file-system/Ultravisor-TaskConfigs-FileSystem.cjs +509 -0
  96. package/source/services/tasks/file-system/Ultravisor-TaskType-ReadFile.cjs +96 -0
  97. package/source/services/tasks/file-system/Ultravisor-TaskType-ReadFileBuffered.cjs +123 -0
  98. package/source/services/tasks/file-system/Ultravisor-TaskType-WriteFile.cjs +106 -0
  99. package/source/services/tasks/file-system/definitions/copy-file.json +27 -0
  100. package/source/services/tasks/file-system/definitions/list-files.json +27 -0
  101. package/source/services/tasks/file-system/definitions/read-file-buffered.json +31 -0
  102. package/source/services/tasks/file-system/definitions/read-file.json +26 -0
  103. package/source/services/tasks/file-system/definitions/read-json.json +23 -0
  104. package/source/services/tasks/file-system/definitions/write-file.json +29 -0
  105. package/source/services/tasks/file-system/definitions/write-json.json +30 -0
  106. package/source/services/tasks/flow-control/Ultravisor-TaskConfigs-FlowControl.cjs +353 -0
  107. package/source/services/tasks/flow-control/Ultravisor-TaskType-IfConditional.cjs +125 -0
  108. package/source/services/tasks/flow-control/Ultravisor-TaskType-LaunchOperation.cjs +186 -0
  109. package/source/services/tasks/flow-control/Ultravisor-TaskType-SplitExecute.cjs +164 -0
  110. package/source/services/tasks/flow-control/definitions/if-conditional.json +25 -0
  111. package/source/services/tasks/flow-control/definitions/launch-operation.json +27 -0
  112. package/source/services/tasks/flow-control/definitions/split-execute.json +32 -0
  113. package/source/services/tasks/http-client/Ultravisor-TaskConfigs-HttpClient.cjs +281 -0
  114. package/source/services/tasks/http-client/definitions/get-json.json +26 -0
  115. package/source/services/tasks/http-client/definitions/get-text.json +26 -0
  116. package/source/services/tasks/http-client/definitions/rest-request.json +32 -0
  117. package/source/services/tasks/http-client/definitions/send-json.json +28 -0
  118. package/source/services/tasks/llm/Ultravisor-TaskConfigs-LLM.cjs +605 -0
  119. package/source/services/tasks/llm/definitions/llm-chat-completion.json +46 -0
  120. package/source/services/tasks/llm/definitions/llm-embedding.json +31 -0
  121. package/source/services/tasks/llm/definitions/llm-tool-use.json +42 -0
  122. package/source/services/tasks/meadow-api/Ultravisor-TaskConfigs-MeadowApi.cjs +341 -0
  123. package/source/services/tasks/meadow-api/definitions/meadow-count.json +26 -0
  124. package/source/services/tasks/meadow-api/definitions/meadow-create.json +26 -0
  125. package/source/services/tasks/meadow-api/definitions/meadow-delete.json +23 -0
  126. package/source/services/tasks/meadow-api/definitions/meadow-read.json +26 -0
  127. package/source/services/tasks/meadow-api/definitions/meadow-reads.json +29 -0
  128. package/source/services/tasks/meadow-api/definitions/meadow-update.json +26 -0
  129. package/source/services/tasks/shell/Ultravisor-TaskConfigs-Shell.cjs +63 -0
  130. package/source/services/tasks/shell/definitions/command.json +29 -0
  131. package/source/services/tasks/user-interaction/Ultravisor-TaskConfigs-UserInteraction.cjs +64 -0
  132. package/source/services/tasks/user-interaction/Ultravisor-TaskType-ErrorMessage.cjs +55 -0
  133. package/source/services/tasks/user-interaction/Ultravisor-TaskType-ValueInput.cjs +47 -0
  134. package/source/services/tasks/user-interaction/definitions/error-message.json +18 -0
  135. package/source/services/tasks/user-interaction/definitions/value-input.json +23 -0
  136. package/source/web_server/Ultravisor-API-Server.cjs +849 -124
  137. package/test/Ultravisor_browser_tests.js +2226 -0
  138. package/test/Ultravisor_operation_library_tests.js +894 -0
  139. package/test/Ultravisor_tests.js +4946 -5044
  140. package/test/workflows/test-content-concatenate-all.json +339 -0
  141. package/test/workflows/test-content-full-pipeline.json +159 -0
  142. package/test/workflows/test-content-list-files.json +76 -0
  143. package/test/workflows/test-content-save-and-read.json +106 -0
  144. package/webinterface/css/ultravisor-themes.css +668 -0
  145. package/webinterface/css/ultravisor.css +37 -14
  146. package/webinterface/docs/card-help/beacon-dispatch.md +30 -0
  147. package/webinterface/docs/card-help/command.md +27 -0
  148. package/webinterface/docs/card-help/comprehension-intersect.md +24 -0
  149. package/webinterface/docs/card-help/content-create-folder.md +22 -0
  150. package/webinterface/docs/card-help/content-list-files.md +25 -0
  151. package/webinterface/docs/card-help/content-read-file.md +24 -0
  152. package/webinterface/docs/card-help/content-save-file.md +24 -0
  153. package/webinterface/docs/card-help/copy-file.md +25 -0
  154. package/webinterface/docs/card-help/csv-transform.md +24 -0
  155. package/webinterface/docs/card-help/end.md +11 -0
  156. package/webinterface/docs/card-help/error-message.md +16 -0
  157. package/webinterface/docs/card-help/expression-solver.md +21 -0
  158. package/webinterface/docs/card-help/get-json.md +24 -0
  159. package/webinterface/docs/card-help/get-text.md +24 -0
  160. package/webinterface/docs/card-help/histogram.md +23 -0
  161. package/webinterface/docs/card-help/if-conditional.md +23 -0
  162. package/webinterface/docs/card-help/launch-operation.md +25 -0
  163. package/webinterface/docs/card-help/list-files.md +25 -0
  164. package/webinterface/docs/card-help/llm-chat-completion.md +43 -0
  165. package/webinterface/docs/card-help/llm-embedding.md +24 -0
  166. package/webinterface/docs/card-help/llm-tool-use.md +39 -0
  167. package/webinterface/docs/card-help/meadow-count.md +24 -0
  168. package/webinterface/docs/card-help/meadow-create.md +24 -0
  169. package/webinterface/docs/card-help/meadow-delete.md +19 -0
  170. package/webinterface/docs/card-help/meadow-read.md +24 -0
  171. package/webinterface/docs/card-help/meadow-reads.md +27 -0
  172. package/webinterface/docs/card-help/meadow-update.md +24 -0
  173. package/webinterface/docs/card-help/parse-csv.md +27 -0
  174. package/webinterface/docs/card-help/read-file-buffered.md +29 -0
  175. package/webinterface/docs/card-help/read-file.md +24 -0
  176. package/webinterface/docs/card-help/read-json.md +21 -0
  177. package/webinterface/docs/card-help/replace-string.md +25 -0
  178. package/webinterface/docs/card-help/rest-request.md +30 -0
  179. package/webinterface/docs/card-help/send-json.md +26 -0
  180. package/webinterface/docs/card-help/set-values.md +16 -0
  181. package/webinterface/docs/card-help/split-execute.md +35 -0
  182. package/webinterface/docs/card-help/start.md +11 -0
  183. package/webinterface/docs/card-help/string-appender.md +22 -0
  184. package/webinterface/docs/card-help/template-string.md +21 -0
  185. package/webinterface/docs/card-help/value-input.md +24 -0
  186. package/webinterface/docs/card-help/write-file.md +27 -0
  187. package/webinterface/docs/card-help/write-json.md +28 -0
  188. package/webinterface/html/index.html +5 -0
  189. package/webinterface/package.json +13 -4
  190. package/webinterface/source/Pict-Application-Ultravisor.js +564 -70
  191. package/webinterface/source/Ultravisor-TimingUtils.js +99 -0
  192. package/webinterface/source/card-help-content.js +46 -0
  193. package/webinterface/source/cards/Ultravisor-BuiltIn-CardConfigs.js +174 -0
  194. package/webinterface/source/cards/Ultravisor-CardConfigGenerator.js +431 -0
  195. package/webinterface/source/data/ExampleFlow-CSVPipeline.js +231 -0
  196. package/webinterface/source/data/ExampleFlow-FileProcessor.js +315 -0
  197. package/webinterface/source/data/ExampleFlow-MeadowPipeline.js +328 -0
  198. package/webinterface/source/panels/Ultravisor-CardSettingsPanel.js +902 -0
  199. package/webinterface/source/providers/PictRouter-Ultravisor-Configuration.json +20 -8
  200. package/webinterface/source/views/PictView-Ultravisor-BeaconList.js +817 -0
  201. package/webinterface/source/views/PictView-Ultravisor-BottomBar.js +5 -5
  202. package/webinterface/source/views/PictView-Ultravisor-Dashboard.js +25 -25
  203. package/webinterface/source/views/PictView-Ultravisor-Documentation.js +856 -0
  204. package/webinterface/source/views/PictView-Ultravisor-FlowEditor.js +777 -0
  205. package/webinterface/source/views/PictView-Ultravisor-ManifestList.js +321 -58
  206. package/webinterface/source/views/PictView-Ultravisor-OperationEdit.js +36 -91
  207. package/webinterface/source/views/PictView-Ultravisor-OperationList.js +388 -16
  208. package/webinterface/source/views/PictView-Ultravisor-PendingInput.js +314 -0
  209. package/webinterface/source/views/PictView-Ultravisor-Schedule.js +521 -65
  210. package/webinterface/source/views/PictView-Ultravisor-TimingView.js +333 -71
  211. package/webinterface/source/views/PictView-Ultravisor-TopBar.js +257 -21
  212. package/webinterface/theme-sampler.html +645 -0
  213. package/debug/Harness.js +0 -6
  214. package/source/services/Ultravisor-Operation-Manifest.cjs +0 -160
  215. package/source/services/Ultravisor-Operation.cjs +0 -200
  216. package/source/services/Ultravisor-Task.cjs +0 -349
  217. package/source/services/events/Ultravisor-Hypervisor-Event-Solver.cjs +0 -11
  218. package/source/services/tasks/Ultravisor-Task-Base.cjs +0 -264
  219. package/source/services/tasks/Ultravisor-Task-CollectValues.cjs +0 -188
  220. package/source/services/tasks/Ultravisor-Task-Command.cjs +0 -65
  221. package/source/services/tasks/Ultravisor-Task-CommandEach.cjs +0 -190
  222. package/source/services/tasks/Ultravisor-Task-Conditional.cjs +0 -104
  223. package/source/services/tasks/Ultravisor-Task-DateWindow.cjs +0 -72
  224. package/source/services/tasks/Ultravisor-Task-GeneratePagedOperation.cjs +0 -336
  225. package/source/services/tasks/Ultravisor-Task-LaunchOperation.cjs +0 -143
  226. package/source/services/tasks/Ultravisor-Task-LaunchTask.cjs +0 -146
  227. package/source/services/tasks/Ultravisor-Task-LineMatch.cjs +0 -158
  228. package/source/services/tasks/Ultravisor-Task-Request.cjs +0 -56
  229. package/source/services/tasks/Ultravisor-Task-Solver.cjs +0 -89
  230. package/source/services/tasks/Ultravisor-Task-TemplateString.cjs +0 -93
  231. package/source/services/tasks/rest/Ultravisor-Task-GetBinary.cjs +0 -127
  232. package/source/services/tasks/rest/Ultravisor-Task-GetJSON.cjs +0 -119
  233. package/source/services/tasks/rest/Ultravisor-Task-GetText.cjs +0 -109
  234. package/source/services/tasks/rest/Ultravisor-Task-GetXML.cjs +0 -112
  235. package/source/services/tasks/rest/Ultravisor-Task-RestRequest.cjs +0 -499
  236. package/source/services/tasks/rest/Ultravisor-Task-SendJSON.cjs +0 -150
  237. package/source/services/tasks/stagingfiles/Ultravisor-Task-CopyFile.cjs +0 -110
  238. package/source/services/tasks/stagingfiles/Ultravisor-Task-ListFiles.cjs +0 -89
  239. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadBinary.cjs +0 -87
  240. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadJSON.cjs +0 -67
  241. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadText.cjs +0 -66
  242. package/source/services/tasks/stagingfiles/Ultravisor-Task-ReadXML.cjs +0 -69
  243. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteBinary.cjs +0 -95
  244. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteJSON.cjs +0 -96
  245. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteText.cjs +0 -99
  246. package/source/services/tasks/stagingfiles/Ultravisor-Task-WriteXML.cjs +0 -102
  247. package/webinterface/source/views/PictView-Ultravisor-TaskEdit.js +0 -220
  248. package/webinterface/source/views/PictView-Ultravisor-TaskList.js +0 -248
@@ -0,0 +1,262 @@
1
+ # LLM Integration
2
+
3
+ Ultravisor can send requests to large language models (LLMs) through the
4
+ Beacon system. An LLM Beacon wraps an API — OpenAI, Anthropic, a local
5
+ Ollama instance, or any OpenAI-compatible endpoint — and exposes it as a
6
+ capability that operation graphs can use like any other task.
7
+
8
+ This means you can build workflows that read data, send it to an LLM for
9
+ analysis or generation, and act on the response, all within the standard
10
+ Ultravisor operation graph.
11
+
12
+ ## How It Works
13
+
14
+ The LLM functionality has two layers:
15
+
16
+ 1. **Beacon Provider** (`LLM`) — runs on the Beacon worker, wraps the
17
+ actual HTTP calls to the LLM API. This is the "thin wrapper" that
18
+ handles authentication, request formatting, and response normalization
19
+ across different backends.
20
+
21
+ 2. **Graph Task Types** (`llm-chat-completion`, `llm-embedding`,
22
+ `llm-tool-use`) — run on the Ultravisor server, dispatch work to an
23
+ LLM Beacon, manage conversation history, and route results back into
24
+ the operation state.
25
+
26
+ ```
27
+ ┌──────────────────────┐ ┌────────────────────┐ ┌──────────────┐
28
+ │ Operation Graph │ │ BeaconCoordinator │ │ LLM Beacon │
29
+ │ │ │ │ │ │
30
+ │ llm-chat-completion │─enqueue─▶ Work Queue │ │ LLM Provider│
31
+ │ (builds messages, │ │ │◀─poll──│ │
32
+ │ manages history) │ │ assign work │─work──▶│ HTTP call │
33
+ │ │ │ │ │ to LLM API │
34
+ │ WaitingForInput... │ │ │◀result─│ (OpenAI, │
35
+ │ │ │ resumeOperation() │ │ Anthropic, │
36
+ │ updates history, │◀resume──│ │ │ Ollama) │
37
+ │ writes to state │ │ │ │ │
38
+ └──────────────────────┘ └────────────────────┘ └──────────────┘
39
+ ```
40
+
41
+ ## Supported Backends
42
+
43
+ | Backend | Config value | Description |
44
+ |--------------------|----------------------|--------------------------------------------|
45
+ | OpenAI | `openai` | GPT-4, GPT-4o, o1, etc. |
46
+ | Anthropic | `anthropic` | Claude Opus, Sonnet, Haiku |
47
+ | Ollama | `ollama` | Local models (Llama 3, Mistral, Phi, etc.) |
48
+ | OpenAI-compatible | `openai-compatible` | Any API that follows the OpenAI format |
49
+
50
+ The provider normalizes differences between backends automatically. For
51
+ example, Anthropic uses `x-api-key` headers and a different message
52
+ format; Ollama puts parameters in an `options` object. You don't need to
53
+ worry about these details — just set the `Backend` config value and
54
+ provide your messages.
55
+
56
+ ## Actions
57
+
58
+ ### ChatCompletion
59
+
60
+ Send messages to an LLM and receive a text completion.
61
+
62
+ **Settings:**
63
+
64
+ | Name | Required | Description |
65
+ |-----------------|----------|--------------------------------------------------|
66
+ | Messages | No | JSON array of `{role, content}` message objects |
67
+ | SystemPrompt | No | System prompt (prepended automatically) |
68
+ | Model | No | Override the default model |
69
+ | Temperature | No | Sampling temperature (0-2, lower = more focused) |
70
+ | MaxTokens | No | Maximum tokens to generate |
71
+ | TopP | No | Nucleus sampling parameter |
72
+ | StopSequences | No | JSON array of stop sequences |
73
+ | ResponseFormat | No | `"text"` or `"json_object"` |
74
+
75
+ **Outputs:**
76
+
77
+ | Name | Description |
78
+ |------------------|--------------------------------------|
79
+ | Content | The generated text |
80
+ | Model | Model that produced the response |
81
+ | FinishReason | Why generation stopped (`stop`, `length`, etc.) |
82
+ | PromptTokens | Token count for the input |
83
+ | CompletionTokens | Token count for the output |
84
+ | TotalTokens | Combined token count |
85
+ | Result | Same as Content (convention) |
86
+
87
+ ### Embedding
88
+
89
+ Generate vector embeddings for text.
90
+
91
+ **Settings:**
92
+
93
+ | Name | Required | Description |
94
+ |-------|----------|-----------------------------------|
95
+ | Text | Yes | Text to embed |
96
+ | Model | No | Override the default model |
97
+
98
+ **Outputs:**
99
+
100
+ | Name | Description |
101
+ |------------|------------------------------------------|
102
+ | Embedding | JSON array of floating point numbers |
103
+ | Dimensions | Number of dimensions in the embedding |
104
+ | Model | Model used |
105
+
106
+ ### ToolUse
107
+
108
+ Chat completion with tool/function definitions. The LLM can request tool
109
+ calls, which are returned as structured data.
110
+
111
+ **Settings:**
112
+
113
+ | Name | Required | Description |
114
+ |------------|----------|--------------------------------------------|
115
+ | Messages | Yes | JSON array of message objects |
116
+ | Tools | Yes | JSON array of tool definitions |
117
+ | Model | No | Override model name |
118
+ | ToolChoice | No | `"auto"`, `"none"`, or a specific tool name |
119
+ | Temperature| No | Sampling temperature |
120
+ | MaxTokens | No | Maximum tokens to generate |
121
+
122
+ **Outputs:**
123
+
124
+ | Name | Description |
125
+ |------------------|--------------------------------------------|
126
+ | Content | Text response (may be empty if tool call) |
127
+ | ToolCalls | JSON array of tool call objects |
128
+ | FinishReason | `stop`, `tool_calls`, etc. |
129
+ | PromptTokens | Token count for the input |
130
+ | CompletionTokens | Token count for the output |
131
+
132
+ Tool call objects are normalized to the OpenAI format regardless of
133
+ backend:
134
+
135
+ ```json
136
+ {
137
+ "id": "call_abc123",
138
+ "type": "function",
139
+ "function": {
140
+ "name": "get_weather",
141
+ "arguments": "{\"city\": \"Portland\"}"
142
+ }
143
+ }
144
+ ```
145
+
146
+ ## Graph Task Types
147
+
148
+ The server-side task types wrap `beacon-dispatch` with LLM-specific
149
+ conveniences: message building, conversation history, and state I/O.
150
+
151
+ ### llm-chat-completion
152
+
153
+ The primary task for using LLMs in operation graphs.
154
+
155
+ **Convenience settings** (in addition to all ChatCompletion settings):
156
+
157
+ | Name | Description |
158
+ |--------------------|----------------------------------------------------------|
159
+ | UserPrompt | User message text (builds Messages for you) |
160
+ | InputAddress | State address to read context data from — appended to UserPrompt |
161
+ | Destination | State address to write the completion content to |
162
+ | AffinityKey | Route to a specific Beacon |
163
+ | TimeoutMs | Override timeout (default: 120000) |
164
+
165
+ **Example node data:**
166
+
167
+ ```json
168
+ {
169
+ "SystemPrompt": "You are a code review assistant.",
170
+ "UserPrompt": "Review this code for bugs:",
171
+ "InputAddress": "TaskOutput.read-file-node.Content",
172
+ "Destination": "Operation.ReviewResult",
173
+ "Temperature": 0.3,
174
+ "MaxTokens": 2048
175
+ }
176
+ ```
177
+
178
+ ### Conversation Management
179
+
180
+ Multi-turn conversations are supported through shared message history
181
+ stored in operation or global state.
182
+
183
+ | Setting | Description |
184
+ |----------------------------|--------------------------------------------------------|
185
+ | ConversationAddress | State address for the message history array |
186
+ | AppendToConversation | Append this exchange to history (default: true) |
187
+ | ConversationMaxMessages | Sliding window — keep only the N most recent messages |
188
+ | ConversationMaxTokens | Token budget — trim oldest messages when exceeded |
189
+ | PersistConversation | Copy history to GlobalState on completion |
190
+ | ConversationPersistAddress | GlobalState address for cross-operation persistence |
191
+
192
+ **How it works:**
193
+
194
+ When `ConversationAddress` is set, the task:
195
+
196
+ 1. Reads existing message history from that state address
197
+ 2. Prepends `SystemPrompt` if not already present
198
+ 3. Appends the new `UserPrompt` as a user message
199
+ 4. Applies sliding window limits (max messages, max tokens)
200
+ 5. Sends the full history to the LLM
201
+ 6. Appends the assistant response to the history
202
+ 7. Writes updated history back to the state address
203
+
204
+ **Within a single operation** — use `Operation.` addresses:
205
+
206
+ ```
207
+ llm-node-1 (ConversationAddress: "Operation.Chat")
208
+ → llm-node-2 (ConversationAddress: "Operation.Chat")
209
+ → llm-node-3 (ConversationAddress: "Operation.Chat")
210
+ ```
211
+
212
+ Each node sees the full conversation so far and adds to it.
213
+
214
+ **Across operations** — use `Global.` addresses:
215
+
216
+ Set `ConversationAddress: "Global.Sessions.MyAgent"` to store history in
217
+ GlobalState, which persists across operation runs.
218
+
219
+ Or use `PersistConversation: true` with
220
+ `ConversationPersistAddress: "Global.Sessions.MyAgent"` to work in
221
+ OperationState during the run and copy to GlobalState when done.
222
+
223
+ ### llm-embedding
224
+
225
+ Dispatches an embedding request. Supports `InputAddress` to read text
226
+ from state and `Destination` to write the embedding.
227
+
228
+ ### llm-tool-use
229
+
230
+ Like `llm-chat-completion` but includes tool definitions. Supports
231
+ conversation management. Returns both `Content` and `ToolCalls`.
232
+
233
+ ## Routing
234
+
235
+ All LLM Beacons advertise `Capability: "LLM"`. When an `llm-chat-completion`
236
+ task runs, the coordinator assigns the work to any available LLM Beacon.
237
+
238
+ To target a specific Beacon (e.g., the one running Claude vs. the one
239
+ running Llama), use `AffinityKey`:
240
+
241
+ ```json
242
+ {
243
+ "UserPrompt": "Explain quantum computing",
244
+ "AffinityKey": "claude-worker"
245
+ }
246
+ ```
247
+
248
+ The first request with that affinity key binds to whichever Beacon picks
249
+ it up. Subsequent requests with the same key go to the same Beacon.
250
+
251
+ ## Example Operations
252
+
253
+ Two example operations are included in `operation-library/`:
254
+
255
+ - **llm-summarize.json** — Reads a file, sends it to an LLM for
256
+ summarization, writes the result. Demonstrates single-turn usage with
257
+ `InputAddress` and `Destination`.
258
+
259
+ - **llm-multi-turn-analysis.json** — Three chained LLM calls sharing
260
+ a `ConversationAddress`: initial analysis, follow-up question, and
261
+ final synthesis. Demonstrates multi-turn conversation with persistence
262
+ to GlobalState.
@@ -0,0 +1,110 @@
1
+ # Content System Tasks
2
+
3
+ Tasks for reading, writing, and managing files on remote Content System beacon workers. These tasks operate on remote content directories rather than the local file system.
4
+
5
+ ---
6
+
7
+ ## Content Read File
8
+
9
+ Reads a markdown or content file from a remote Content System beacon.
10
+
11
+ ### Settings
12
+
13
+ - **FilePath** — Relative path within the content directory on the beacon.
14
+ - **Destination** — State address to store the file content.
15
+ - **AffinityKey** — Worker affinity key to route to a specific beacon.
16
+ - **TimeoutMs** — Timeout in milliseconds (default `300000`).
17
+
18
+ ### Outputs
19
+
20
+ - **Content** — The file content as a string.
21
+ - **StdOut** — Status message from the beacon.
22
+
23
+ ### Events
24
+
25
+ - **Complete** — Fires after a successful read.
26
+ - **Error** — Fires if the file is not found or the beacon is unreachable.
27
+
28
+ ### Tips
29
+
30
+ Content System cards operate on remote Beacon workers, not the local file system. Use AffinityKey to ensure reads and writes go to the same beacon instance. For local file operations, use **Read File** instead.
31
+
32
+ ---
33
+
34
+ ## Content Save File
35
+
36
+ Saves content to a file on a remote Content System beacon.
37
+
38
+ ### Settings
39
+
40
+ - **FilePath** — Relative path within the content directory.
41
+ - **Content** — The file content to write. Supports Pict template expressions.
42
+ - **AffinityKey** — Worker affinity key to route to a specific beacon.
43
+ - **TimeoutMs** — Timeout in milliseconds (default `300000`).
44
+
45
+ ### Outputs
46
+
47
+ - **FilePath** — Path of the saved file.
48
+ - **StdOut** — Status message from the beacon.
49
+
50
+ ### Events
51
+
52
+ - **Complete** — Fires after a successful save.
53
+ - **Error** — Fires on failure.
54
+
55
+ ### Tips
56
+
57
+ Use Content Save File to publish generated content (reports, processed data, rendered templates) to a Content System. Pair with **Content Read File** to read-modify-write content files on a beacon.
58
+
59
+ ---
60
+
61
+ ## Content List Files
62
+
63
+ Lists files in a directory on a remote Content System beacon.
64
+
65
+ ### Settings
66
+
67
+ - **Path** — Relative directory path within the content directory. Leave empty for the root.
68
+ - **Pattern** — Glob pattern filter (e.g. `*.md`, `*.json`).
69
+ - **Recursive** — When `true`, lists files in subdirectories.
70
+ - **AffinityKey** — Worker affinity key to route to a specific beacon.
71
+ - **TimeoutMs** — Timeout in milliseconds (default `300000`).
72
+
73
+ ### Outputs
74
+
75
+ - **Files** — JSON array of file entries.
76
+ - **StdOut** — Status message from the beacon.
77
+
78
+ ### Events
79
+
80
+ - **Complete** — Fires after listing.
81
+ - **Error** — Fires on failure.
82
+
83
+ ### Tips
84
+
85
+ Use Content List Files to discover available content on a beacon before processing. Combine with **Split Execute** to iterate over the file list and read or transform each file.
86
+
87
+ ---
88
+
89
+ ## Content Create Folder
90
+
91
+ Creates a folder in the content directory on a remote Content System beacon.
92
+
93
+ ### Settings
94
+
95
+ - **Path** — Relative folder path to create.
96
+ - **AffinityKey** — Worker affinity key to route to a specific beacon.
97
+ - **TimeoutMs** — Timeout in milliseconds (default `300000`).
98
+
99
+ ### Outputs
100
+
101
+ - **StdOut** — Status message from the beacon.
102
+
103
+ ### Events
104
+
105
+ - **Complete** — Fires after the folder is created.
106
+ - **Error** — Fires on failure.
107
+
108
+ ### Tips
109
+
110
+ Use Content Create Folder before **Content Save File** to ensure the target directory structure exists. The operation is idempotent — creating a folder that already exists succeeds without error.
@@ -0,0 +1,233 @@
1
+ # Data Transform Tasks
2
+
3
+ Tasks for manipulating values, strings, templates, expressions, and tabular data within operation state.
4
+
5
+ ---
6
+
7
+ ## Set Values
8
+
9
+ Sets one or more values in operation state at specified addresses. This is the primary card for initializing variables, copying data between state locations, and injecting literal values.
10
+
11
+ ### Settings
12
+
13
+ - **Mappings** — An array of mapping objects. Each mapping has a `To` address (where to write) and either a `Value` (literal) or `From` address (copy from state).
14
+
15
+ ### Events
16
+
17
+ - **Complete** — Fires after all mappings are applied.
18
+ - **Error** — Fires if a mapping fails.
19
+
20
+ ### Tips
21
+
22
+ Use Set Values at the start of a flow to initialize default values before branching logic. Mappings are applied in order, so later entries can reference values set by earlier ones within the same card.
23
+
24
+ ---
25
+
26
+ ## Replace String
27
+
28
+ Replaces all occurrences of a search string within the input text.
29
+
30
+ ### Settings
31
+
32
+ - **InputString** — The source text to search within. Supports Pict template expressions.
33
+ - **SearchString** — The text or pattern to find.
34
+ - **ReplaceString** — The replacement text (empty string to delete matches).
35
+ - **UseRegex** — When `true`, treats SearchString as a regular expression.
36
+ - **CaseSensitive** — Case-sensitive matching (default `true`).
37
+
38
+ ### Outputs
39
+
40
+ - **ReplacedString** — The result after all replacements.
41
+ - **ReplacementCount** — Number of replacements made.
42
+
43
+ ### Events
44
+
45
+ - **ReplaceComplete** — Fires after replacement.
46
+ - **Error** — Fires on failure (e.g. invalid regex).
47
+
48
+ ### Tips
49
+
50
+ Enable UseRegex for advanced pattern matching such as removing HTML tags, normalizing whitespace, or extracting structured tokens. Use ReplacementCount to verify that expected substitutions occurred.
51
+
52
+ ---
53
+
54
+ ## String Appender
55
+
56
+ Appends a string to an existing value at a specified state address. Useful for building up output incrementally across loop iterations or multiple steps.
57
+
58
+ ### Settings
59
+
60
+ - **InputString** — The text to append. Supports Pict template expressions.
61
+ - **OutputAddress** — State address of the string to append to.
62
+ - **AppendNewline** — When `true`, appends a newline character after the input string.
63
+ - **Separator** — String inserted between the existing content and new content. Overrides AppendNewline when set.
64
+
65
+ ### Outputs
66
+
67
+ - **AppendedString** — The full accumulated string after appending.
68
+
69
+ ### Events
70
+
71
+ - **Completed** — Fires after the append.
72
+
73
+ ### Tips
74
+
75
+ Combine with **Split Execute** to build a report line by line. Use AppendNewline for log-style output or Separator for CSV-style concatenation with a custom delimiter.
76
+
77
+ ---
78
+
79
+ ## Template String
80
+
81
+ Processes a Pict template string against the current operation state, resolving expressions like `{~D:Record.Name~}` into their runtime values.
82
+
83
+ ### Settings
84
+
85
+ - **Template** — A Pict template string containing `{~D:...~}` expressions that reference state addresses.
86
+ - **Destination** — State address to store the rendered result. If empty, the result is available at the default output.
87
+
88
+ ### Outputs
89
+
90
+ - **Result** — The fully rendered template output.
91
+
92
+ ### Events
93
+
94
+ - **Complete** — Fires after rendering.
95
+ - **Error** — Fires if template parsing fails.
96
+
97
+ ### Tips
98
+
99
+ Template String is the workhorse for building dynamic URLs, file paths, messages, and prompts. Any Pict template expression is supported, including conditionals and joins. Chain multiple Template String cards to build complex content from intermediate values.
100
+
101
+ ---
102
+
103
+ ## Expression Solver
104
+
105
+ Evaluates a mathematical or logical expression using the Fable ExpressionParser and stores the result in state.
106
+
107
+ ### Settings
108
+
109
+ - **Expression** — The expression to evaluate. Can reference state values by address.
110
+ - **Destination** — State address to store the evaluation result.
111
+
112
+ ### Outputs
113
+
114
+ - **Result** — The computed result as a string.
115
+
116
+ ### Events
117
+
118
+ - **Complete** — Fires after evaluation.
119
+ - **Error** — Fires on parse or evaluation failure.
120
+
121
+ ### Tips
122
+
123
+ Use Expression Solver for arithmetic calculations, string length checks, or combining multiple state values into a computed result. The expression language supports standard math operators, comparisons, and common functions.
124
+
125
+ ---
126
+
127
+ ## Parse CSV
128
+
129
+ Parses CSV text into an array of records (objects with field names as keys).
130
+
131
+ ### Settings
132
+
133
+ - **SourceAddress** — State address containing the CSV text to parse.
134
+ - **Delimiter** — Column delimiter character (default `,`).
135
+ - **HasHeaders** — When `true`, the first row provides field names. When `false`, fields are indexed numerically.
136
+ - **Destination** — State address to store the parsed records array.
137
+ - **QuoteCharacter** — Character used to quote fields that contain the delimiter (default `"`).
138
+ - **TrimFields** — Trim leading/trailing whitespace from field values.
139
+ - **SkipEmptyLines** — Skip blank lines in the input.
140
+
141
+ ### Outputs
142
+
143
+ - **Records** — Array of parsed row objects.
144
+ - **ColumnCount** — Number of columns detected.
145
+ - **Headers** — Array of header names from the first row.
146
+
147
+ ### Events
148
+
149
+ - **Complete** — Fires after parsing.
150
+
151
+ ### Tips
152
+
153
+ Chain **Read File** → **Parse CSV** → **CSV Transform** for a complete data import pipeline. Use TrimFields and SkipEmptyLines to handle messy real-world CSV exports cleanly.
154
+
155
+ ---
156
+
157
+ ## CSV Transform
158
+
159
+ Transforms an array of parsed CSV records by applying field mappings, filters, and output field selection.
160
+
161
+ ### Settings
162
+
163
+ - **SourceAddress** — State address of the records array to transform.
164
+ - **Destination** — State address to store the transformed records.
165
+ - **Delimiter** — Delimiter for re-serialization (default `,`).
166
+ - **FieldMapping** — JSON array of mapping objects with `From`, `To`, and optional `Template` properties for field renaming and transformation.
167
+ - **FilterExpression** — An expression to filter rows. Only rows where the expression evaluates to true are included.
168
+ - **OutputFields** — JSON array of field names to include in the output. Omit to include all fields.
169
+
170
+ ### Outputs
171
+
172
+ - **Records** — The transformed records array.
173
+
174
+ ### Events
175
+
176
+ - **Complete** — Fires after transformation.
177
+
178
+ ### Tips
179
+
180
+ Use FieldMapping to rename columns, compute derived fields with templates, or restructure data. Combine with FilterExpression to extract subsets of records in a single step.
181
+
182
+ ---
183
+
184
+ ## Histogram
185
+
186
+ Computes a frequency distribution over a specific field in a dataset array.
187
+
188
+ ### Settings
189
+
190
+ - **SourceAddress** — State address of the data array to analyze.
191
+ - **Field** — Field name to compute frequencies for (default `score`).
192
+ - **Bins** — Number of bins for numeric data (default `5`).
193
+ - **Destination** — State address to store the statistics object.
194
+ - **SortBy** — Sort frequency results by `count` or `key`.
195
+
196
+ ### Outputs
197
+
198
+ - **Stats** — An object containing the frequency distribution, bin boundaries, and summary statistics.
199
+
200
+ ### Events
201
+
202
+ - **Complete** — Fires after computation.
203
+
204
+ ### Tips
205
+
206
+ Use Histogram after parsing or loading a dataset to get a quick statistical overview. Combine with **Template String** to generate a text-based report of the distribution.
207
+
208
+ ---
209
+
210
+ ## Comprehension Intersect
211
+
212
+ Intersects two arrays by matching records on a common field, similar to an SQL inner join.
213
+
214
+ ### Settings
215
+
216
+ - **SourceAddressA** — State address of the first array.
217
+ - **SourceAddressB** — State address of the second array.
218
+ - **MatchField** — Field name to match records on. Records from both arrays with the same value in this field are merged.
219
+ - **Destination** — State address to store the intersected results.
220
+ - **JoinType** — Join type (default `inner`). Inner join returns only records that match in both arrays.
221
+
222
+ ### Outputs
223
+
224
+ - **Result** — Array of merged record objects.
225
+ - **MatchCount** — Number of matched records.
226
+
227
+ ### Events
228
+
229
+ - **Complete** — Fires after intersection.
230
+
231
+ ### Tips
232
+
233
+ Use Comprehension Intersect to combine data from two different sources — for example, joining a list of user IDs from one API with user details from another. The matched records are merged into single objects containing fields from both sources.
@@ -0,0 +1,36 @@
1
+ # Extension Tasks
2
+
3
+ Tasks for dispatching work to remote Beacon worker nodes, providing low-level access to the distributed execution infrastructure.
4
+
5
+ ---
6
+
7
+ ## Beacon Dispatch
8
+
9
+ Dispatches a work item to a remote Beacon worker node. The task pauses until the Beacon completes execution and reports results back.
10
+
11
+ ### Settings
12
+
13
+ - **RemoteCapability** — Required capability on the Beacon (e.g. `Shell`, `FileSystem`, `LLM`).
14
+ - **RemoteAction** — Specific action within the capability (e.g. `Execute`, `Read`).
15
+ - **Command** — Shell command to execute on the Beacon (when using Shell capability).
16
+ - **Parameters** — Command-line parameters for the shell command.
17
+ - **AffinityKey** — Worker affinity routing key. Requests with the same key are routed to the same Beacon.
18
+ - **TimeoutMs** — Work item timeout in milliseconds (default `300000`).
19
+ - **InputData** — JSON data to pass to the Beacon worker.
20
+ - **Destination** — State address to write results to on completion.
21
+
22
+ ### Outputs
23
+
24
+ - **StdOut** — Standard output from the Beacon execution.
25
+ - **Result** — Result data from the Beacon.
26
+ - **ExitCode** — Exit code of the remote command.
27
+ - **BeaconID** — ID of the Beacon that executed the work.
28
+
29
+ ### Events
30
+
31
+ - **Complete** — Fires when the Beacon finishes.
32
+ - **Error** — Fires on failure or timeout.
33
+
34
+ ### Tips
35
+
36
+ Beacon Dispatch is the low-level card for sending arbitrary work to remote workers. Use AffinityKey to ensure related work items run on the same Beacon instance. For common patterns, prefer the specialized cards (LLM Chat Completion, Content Read File, etc.) which use Beacon Dispatch internally with appropriate defaults.