agent-orcha 0.0.5 → 0.0.7

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 (264) hide show
  1. package/README.md +194 -1277
  2. package/dist/lib/agents/agent-executor.d.ts +4 -2
  3. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  4. package/dist/lib/agents/agent-executor.js +68 -52
  5. package/dist/lib/agents/agent-executor.js.map +1 -1
  6. package/dist/lib/agents/agent-loader.d.ts +3 -0
  7. package/dist/lib/agents/agent-loader.d.ts.map +1 -1
  8. package/dist/lib/agents/agent-loader.js +10 -1
  9. package/dist/lib/agents/agent-loader.js.map +1 -1
  10. package/dist/lib/agents/react-loop.d.ts.map +1 -1
  11. package/dist/lib/agents/react-loop.js +180 -142
  12. package/dist/lib/agents/react-loop.js.map +1 -1
  13. package/dist/lib/agents/types.d.ts +181 -18
  14. package/dist/lib/agents/types.d.ts.map +1 -1
  15. package/dist/lib/agents/types.js +18 -2
  16. package/dist/lib/agents/types.js.map +1 -1
  17. package/dist/lib/functions/function-loader.d.ts +2 -0
  18. package/dist/lib/functions/function-loader.d.ts.map +1 -1
  19. package/dist/lib/functions/function-loader.js +10 -0
  20. package/dist/lib/functions/function-loader.js.map +1 -1
  21. package/dist/lib/integrations/email.d.ts +38 -0
  22. package/dist/lib/integrations/email.d.ts.map +1 -0
  23. package/dist/lib/integrations/email.js +249 -0
  24. package/dist/lib/integrations/email.js.map +1 -0
  25. package/dist/lib/integrations/integration-manager.d.ts +5 -0
  26. package/dist/lib/integrations/integration-manager.d.ts.map +1 -1
  27. package/dist/lib/integrations/integration-manager.js +53 -3
  28. package/dist/lib/integrations/integration-manager.js.map +1 -1
  29. package/dist/lib/integrations/types.d.ts +187 -4
  30. package/dist/lib/integrations/types.d.ts.map +1 -1
  31. package/dist/lib/integrations/types.js +24 -1
  32. package/dist/lib/integrations/types.js.map +1 -1
  33. package/dist/lib/knowledge/knowledge-store.d.ts +6 -0
  34. package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
  35. package/dist/lib/knowledge/knowledge-store.js +71 -4
  36. package/dist/lib/knowledge/knowledge-store.js.map +1 -1
  37. package/dist/lib/knowledge/loaders/file-loaders.d.ts +8 -2
  38. package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
  39. package/dist/lib/knowledge/loaders/file-loaders.js +89 -60
  40. package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
  41. package/dist/lib/knowledge/loaders/web-loader.d.ts +12 -3
  42. package/dist/lib/knowledge/loaders/web-loader.d.ts.map +1 -1
  43. package/dist/lib/knowledge/loaders/web-loader.js +56 -22
  44. package/dist/lib/knowledge/loaders/web-loader.js.map +1 -1
  45. package/dist/lib/knowledge/types.d.ts +56 -20
  46. package/dist/lib/knowledge/types.d.ts.map +1 -1
  47. package/dist/lib/knowledge/types.js +18 -3
  48. package/dist/lib/knowledge/types.js.map +1 -1
  49. package/dist/lib/llm/llm-call-logger.d.ts +3 -1
  50. package/dist/lib/llm/llm-call-logger.d.ts.map +1 -1
  51. package/dist/lib/llm/llm-call-logger.js +31 -26
  52. package/dist/lib/llm/llm-call-logger.js.map +1 -1
  53. package/dist/lib/llm/llm-config.d.ts +8 -0
  54. package/dist/lib/llm/llm-config.d.ts.map +1 -1
  55. package/dist/lib/llm/llm-config.js +3 -1
  56. package/dist/lib/llm/llm-config.js.map +1 -1
  57. package/dist/lib/llm/llm-factory.d.ts.map +1 -1
  58. package/dist/lib/llm/llm-factory.js +3 -0
  59. package/dist/lib/llm/llm-factory.js.map +1 -1
  60. package/dist/lib/llm/providers/anthropic-chat-model.d.ts +5 -1
  61. package/dist/lib/llm/providers/anthropic-chat-model.d.ts.map +1 -1
  62. package/dist/lib/llm/providers/anthropic-chat-model.js +118 -42
  63. package/dist/lib/llm/providers/anthropic-chat-model.js.map +1 -1
  64. package/dist/lib/llm/providers/gemini-chat-model.d.ts +3 -2
  65. package/dist/lib/llm/providers/gemini-chat-model.d.ts.map +1 -1
  66. package/dist/lib/llm/providers/gemini-chat-model.js +83 -24
  67. package/dist/lib/llm/providers/gemini-chat-model.js.map +1 -1
  68. package/dist/lib/llm/providers/openai-chat-model.d.ts +10 -1
  69. package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
  70. package/dist/lib/llm/providers/openai-chat-model.js +233 -32
  71. package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
  72. package/dist/lib/logger.d.ts.map +1 -1
  73. package/dist/lib/logger.js +0 -1
  74. package/dist/lib/logger.js.map +1 -1
  75. package/dist/lib/mcp/mcp-client.d.ts.map +1 -1
  76. package/dist/lib/mcp/mcp-client.js +5 -3
  77. package/dist/lib/mcp/mcp-client.js.map +1 -1
  78. package/dist/lib/mcp/types.d.ts +0 -9
  79. package/dist/lib/mcp/types.d.ts.map +1 -1
  80. package/dist/lib/mcp/types.js +1 -2
  81. package/dist/lib/mcp/types.js.map +1 -1
  82. package/dist/lib/memory/memory-manager.d.ts +1 -0
  83. package/dist/lib/memory/memory-manager.d.ts.map +1 -1
  84. package/dist/lib/memory/memory-manager.js +9 -0
  85. package/dist/lib/memory/memory-manager.js.map +1 -1
  86. package/dist/lib/orchestrator.d.ts +2 -8
  87. package/dist/lib/orchestrator.d.ts.map +1 -1
  88. package/dist/lib/orchestrator.js +96 -3
  89. package/dist/lib/orchestrator.js.map +1 -1
  90. package/dist/lib/sandbox/cdp-client.d.ts +14 -0
  91. package/dist/lib/sandbox/cdp-client.d.ts.map +1 -0
  92. package/dist/lib/sandbox/cdp-client.js +113 -0
  93. package/dist/lib/sandbox/cdp-client.js.map +1 -0
  94. package/dist/lib/sandbox/html-to-markdown.d.ts +9 -1
  95. package/dist/lib/sandbox/html-to-markdown.d.ts.map +1 -1
  96. package/dist/lib/sandbox/html-to-markdown.js +67 -10
  97. package/dist/lib/sandbox/html-to-markdown.js.map +1 -1
  98. package/dist/lib/sandbox/index.d.ts +5 -0
  99. package/dist/lib/sandbox/index.d.ts.map +1 -1
  100. package/dist/lib/sandbox/index.js +4 -0
  101. package/dist/lib/sandbox/index.js.map +1 -1
  102. package/dist/lib/sandbox/page-readiness.d.ts +37 -0
  103. package/dist/lib/sandbox/page-readiness.d.ts.map +1 -0
  104. package/dist/lib/sandbox/page-readiness.js +235 -0
  105. package/dist/lib/sandbox/page-readiness.js.map +1 -0
  106. package/dist/lib/sandbox/sandbox-browser.d.ts +4 -0
  107. package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -0
  108. package/dist/lib/sandbox/sandbox-browser.js +303 -0
  109. package/dist/lib/sandbox/sandbox-browser.js.map +1 -0
  110. package/dist/lib/sandbox/sandbox-file.d.ts +4 -0
  111. package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -0
  112. package/dist/lib/sandbox/sandbox-file.js +168 -0
  113. package/dist/lib/sandbox/sandbox-file.js.map +1 -0
  114. package/dist/lib/sandbox/sandbox-shell.d.ts +4 -0
  115. package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -0
  116. package/dist/lib/sandbox/sandbox-shell.js +93 -0
  117. package/dist/lib/sandbox/sandbox-shell.js.map +1 -0
  118. package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
  119. package/dist/lib/sandbox/sandbox-web.js +37 -22
  120. package/dist/lib/sandbox/sandbox-web.js.map +1 -1
  121. package/dist/lib/sandbox/types.d.ts +9 -0
  122. package/dist/lib/sandbox/types.d.ts.map +1 -1
  123. package/dist/lib/sandbox/types.js +1 -0
  124. package/dist/lib/sandbox/types.js.map +1 -1
  125. package/dist/lib/sandbox/vision-browser.d.ts +4 -0
  126. package/dist/lib/sandbox/vision-browser.d.ts.map +1 -0
  127. package/dist/lib/sandbox/vision-browser.js +289 -0
  128. package/dist/lib/sandbox/vision-browser.js.map +1 -0
  129. package/dist/lib/skills/skill-loader.d.ts +2 -0
  130. package/dist/lib/skills/skill-loader.d.ts.map +1 -1
  131. package/dist/lib/skills/skill-loader.js +12 -1
  132. package/dist/lib/skills/skill-loader.js.map +1 -1
  133. package/dist/lib/tasks/task-manager.d.ts +3 -1
  134. package/dist/lib/tasks/task-manager.d.ts.map +1 -1
  135. package/dist/lib/tasks/task-manager.js +11 -0
  136. package/dist/lib/tasks/task-manager.js.map +1 -1
  137. package/dist/lib/tasks/task-store.d.ts +1 -1
  138. package/dist/lib/tasks/task-store.d.ts.map +1 -1
  139. package/dist/lib/tasks/task-store.js.map +1 -1
  140. package/dist/lib/tasks/types.d.ts +18 -0
  141. package/dist/lib/tasks/types.d.ts.map +1 -1
  142. package/dist/lib/tools/built-in/integration-tools.d.ts +4 -0
  143. package/dist/lib/tools/built-in/integration-tools.d.ts.map +1 -0
  144. package/dist/lib/tools/built-in/integration-tools.js +47 -0
  145. package/dist/lib/tools/built-in/integration-tools.js.map +1 -0
  146. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
  147. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +12 -6
  148. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
  149. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
  150. package/dist/lib/tools/built-in/knowledge-sql.tool.js +4 -3
  151. package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
  152. package/dist/lib/tools/built-in/query-validators.d.ts.map +1 -1
  153. package/dist/lib/tools/built-in/query-validators.js +4 -0
  154. package/dist/lib/tools/built-in/query-validators.js.map +1 -1
  155. package/dist/lib/tools/workspace/workspace-tools.d.ts +1 -0
  156. package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
  157. package/dist/lib/tools/workspace/workspace-tools.js +39 -0
  158. package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
  159. package/dist/lib/triggers/cron-trigger.d.ts +1 -1
  160. package/dist/lib/triggers/cron-trigger.d.ts.map +1 -1
  161. package/dist/lib/triggers/cron-trigger.js.map +1 -1
  162. package/dist/lib/triggers/trigger-manager.d.ts +1 -0
  163. package/dist/lib/triggers/trigger-manager.d.ts.map +1 -1
  164. package/dist/lib/triggers/trigger-manager.js +26 -0
  165. package/dist/lib/triggers/trigger-manager.js.map +1 -1
  166. package/dist/lib/triggers/webhook-trigger.d.ts +1 -1
  167. package/dist/lib/triggers/webhook-trigger.d.ts.map +1 -1
  168. package/dist/lib/triggers/webhook-trigger.js.map +1 -1
  169. package/dist/lib/types/llm-types.d.ts +22 -4
  170. package/dist/lib/types/llm-types.d.ts.map +1 -1
  171. package/dist/lib/types/llm-types.js +50 -0
  172. package/dist/lib/types/llm-types.js.map +1 -1
  173. package/dist/lib/types/tool-factory.d.ts +2 -2
  174. package/dist/lib/types/tool-factory.d.ts.map +1 -1
  175. package/dist/lib/types/tool-factory.js.map +1 -1
  176. package/dist/lib/utils/env-substitution.d.ts +6 -0
  177. package/dist/lib/utils/env-substitution.d.ts.map +1 -0
  178. package/dist/lib/utils/env-substitution.js +15 -0
  179. package/dist/lib/utils/env-substitution.js.map +1 -0
  180. package/dist/lib/workflows/react-workflow-executor.js +3 -3
  181. package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
  182. package/dist/lib/workflows/types.d.ts +10 -10
  183. package/dist/lib/workflows/workflow-loader.d.ts +3 -0
  184. package/dist/lib/workflows/workflow-loader.d.ts.map +1 -1
  185. package/dist/lib/workflows/workflow-loader.js +10 -1
  186. package/dist/lib/workflows/workflow-loader.js.map +1 -1
  187. package/dist/public/chat.html +114 -0
  188. package/dist/public/index.html +157 -0
  189. package/dist/public/src/components/AgentComposer.js +807 -0
  190. package/dist/public/src/components/AgentsView.js +740 -317
  191. package/dist/public/src/components/AppRoot.js +30 -5
  192. package/dist/public/src/components/GraphView.js +372 -288
  193. package/dist/public/src/components/IdeView.js +163 -7
  194. package/dist/public/src/components/MonitorView.js +139 -1
  195. package/dist/public/src/components/StandaloneChat.js +889 -0
  196. package/dist/public/src/components/WorkflowsView.js +180 -28
  197. package/dist/public/src/services/ApiService.js +7 -2
  198. package/dist/public/src/services/SessionStore.js +83 -0
  199. package/dist/public/src/store.js +0 -2
  200. package/dist/public/src/utils/markdown.js +13 -0
  201. package/dist/src/cli/index.js +7 -4
  202. package/dist/src/cli/index.js.map +1 -1
  203. package/dist/src/middleware/auth.d.ts.map +1 -1
  204. package/dist/src/middleware/auth.js +28 -6
  205. package/dist/src/middleware/auth.js.map +1 -1
  206. package/dist/src/middleware/rate-limit.d.ts +8 -0
  207. package/dist/src/middleware/rate-limit.d.ts.map +1 -0
  208. package/dist/src/middleware/rate-limit.js +21 -0
  209. package/dist/src/middleware/rate-limit.js.map +1 -0
  210. package/dist/src/routes/agents.route.d.ts.map +1 -1
  211. package/dist/src/routes/agents.route.js +136 -10
  212. package/dist/src/routes/agents.route.js.map +1 -1
  213. package/dist/src/routes/chat.route.d.ts +3 -0
  214. package/dist/src/routes/chat.route.d.ts.map +1 -0
  215. package/dist/src/routes/chat.route.js +155 -0
  216. package/dist/src/routes/chat.route.js.map +1 -0
  217. package/dist/src/routes/files.route.d.ts.map +1 -1
  218. package/dist/src/routes/files.route.js +37 -2
  219. package/dist/src/routes/files.route.js.map +1 -1
  220. package/dist/src/routes/llm.route.d.ts.map +1 -1
  221. package/dist/src/routes/llm.route.js +40 -5
  222. package/dist/src/routes/llm.route.js.map +1 -1
  223. package/dist/src/routes/tasks.route.d.ts.map +1 -1
  224. package/dist/src/routes/tasks.route.js +15 -1
  225. package/dist/src/routes/tasks.route.js.map +1 -1
  226. package/dist/src/routes/vnc.route.d.ts +3 -0
  227. package/dist/src/routes/vnc.route.d.ts.map +1 -0
  228. package/dist/src/routes/vnc.route.js +49 -0
  229. package/dist/src/routes/vnc.route.js.map +1 -0
  230. package/dist/src/server.d.ts.map +1 -1
  231. package/dist/src/server.js +5 -1
  232. package/dist/src/server.js.map +1 -1
  233. package/dist/templates/Demo.md +152 -0
  234. package/dist/templates/README.md +12 -3
  235. package/dist/templates/agents/architect.agent.yaml +20 -12
  236. package/dist/templates/agents/chatbot.agent.yaml +23 -26
  237. package/dist/templates/agents/corporate.agent.yaml +65 -0
  238. package/dist/templates/agents/investment-analyst.agent.yaml +80 -0
  239. package/dist/templates/agents/music-librarian.agent.yaml +70 -0
  240. package/dist/templates/agents/network-security.agent.yaml +82 -0
  241. package/dist/templates/agents/transport-security.agent.yaml +70 -0
  242. package/dist/templates/agents/web-engineer.agent.yaml +99 -0
  243. package/dist/templates/agents/web-pilot.agent.yaml +58 -0
  244. package/dist/templates/knowledge/music-store/LICENSE.md +11 -0
  245. package/dist/templates/knowledge/music-store/musicstore.sqlite +0 -0
  246. package/dist/templates/knowledge/music-store/tables.png +0 -0
  247. package/dist/templates/knowledge/music-store.knowledge.yaml +138 -0
  248. package/dist/templates/knowledge/org-chart/personnel.csv +21 -21
  249. package/dist/templates/knowledge/org-chart.knowledge.yaml +4 -0
  250. package/dist/templates/knowledge/pet-store.knowledge.yaml +3 -0
  251. package/dist/templates/knowledge/security-incidents/incidents.json +55935 -0
  252. package/dist/templates/knowledge/security-incidents.knowledge.yaml +46 -0
  253. package/dist/templates/knowledge/{example.knowledge.yaml → transcripts.knowledge.yaml} +9 -5
  254. package/dist/templates/knowledge/transport-ot/systems.csv +117 -0
  255. package/dist/templates/knowledge/transport-ot.knowledge.yaml +55 -0
  256. package/dist/templates/llm.json +7 -30
  257. package/dist/templates/mcp.json +7 -4
  258. package/dist/templates/skills/orcha-builder/SKILL.md +106 -226
  259. package/dist/templates/skills/pii-guard/SKILL.md +22 -0
  260. package/dist/templates/skills/sandbox/SKILL.md +25 -48
  261. package/dist/templates/skills/web-pilot/SKILL.md +51 -0
  262. package/package.json +8 -3
  263. package/dist/templates/agents/knowledge-broker.agent.yaml +0 -39
  264. package/dist/templates/agents/sandbox.agent.yaml +0 -56
@@ -5,106 +5,87 @@ description: Documentation for creating and modifying ORCHA resources (agents, w
5
5
 
6
6
  # ORCHA Resource Schemas
7
7
 
8
- Use this reference when creating or modifying ORCHA resources. All resource files live in the workspace root under their respective directories.
9
-
10
- ---
11
-
12
8
  ## Agents (`agents/<name>.agent.yaml`)
13
9
 
14
10
  ```yaml
15
- name: my-agent # Unique identifier (kebab-case)
16
- description: What the agent does # Human-readable description
17
- version: "1.0.0" # Optional, defaults to 1.0.0
18
-
11
+ name: my-agent
12
+ description: What the agent does
19
13
  llm:
20
- name: default # LLM config name from llm.json
21
- temperature: 0.7 # 0.0 = deterministic, 1.0 = creative
22
-
14
+ name: default
15
+ temperature: 0.7
23
16
  prompt:
24
17
  system: |
25
- You are a helpful assistant.
26
- Your instructions go here.
18
+ Your system prompt here.
27
19
  inputVariables:
28
- - query # Variables injected at runtime
29
-
30
- tools: # Optional tool references
31
- - mcp:server-name # All tools from an MCP server
32
- - knowledge:store-name # Knowledge search tools
33
- - function:my-function # Custom function tool
34
- - builtin:tool-name # Built-in tool
35
- - sandbox:exec # Sandbox tools (exec, web_fetch, web_search)
36
- - workspace:read # Workspace tools (read, write, list, list_resources)
37
-
38
- skills: # Optional skills
39
- - skill-name # Skill name from skills directory
40
- # OR
41
- mode: all # Include all available skills
42
-
43
- output: # Optional output config
44
- format: text # text | json | structured
45
- schema: # Required if format is structured
46
- type: object
47
- properties:
48
- result:
49
- type: string
50
-
51
- memory: # Optional conversation memory
20
+ - query
21
+ tools: # mcp:<server> | knowledge:<store> | function:<name>
22
+ - mcp:server-name # builtin:<name> | sandbox:<tool> | project:<tool>
23
+ - knowledge:store-name # sandbox: exec, shell, web_fetch, web_search, browser_*
24
+ - sandbox:browser_navigate # project: read, write, delete, list, list_resources
25
+ skills:
26
+ - skill-name # or use mode: all to attach all skills
27
+ output:
28
+ format: text # text | structured
29
+ memory:
52
30
  enabled: true
53
- maxLines: 100 # Max conversation history lines
54
-
55
- metadata: # Optional metadata
56
- category: general
57
- tags:
58
- - example
59
-
60
- integrations: # Optional integrations
31
+ maxLines: 100
32
+ integrations:
61
33
  - type: collabnook
62
- url: wss://collabnook.com/ws
34
+ url: "wss://collabnook.com/ws" # optional — defaults to wss://collabnook.com/ws
63
35
  channel: general
64
- botName: MyBot
65
-
66
- triggers: # Optional triggers
36
+ botName: Bot
37
+ - type: email
38
+ imap:
39
+ host: imap.gmail.com
40
+ port: 993
41
+ smtp:
42
+ host: smtp.gmail.com
43
+ port: 587
44
+ auth:
45
+ user: agent@example.com
46
+ pass: pw
47
+ pollInterval: 60
48
+ folder: INBOX
49
+ triggers:
67
50
  - type: cron
68
- schedule: "*/5 * * * *" # Cron expression
51
+ schedule: "*/5 * * * *"
69
52
  input:
70
- query: "Periodic task"
53
+ query: "Task"
54
+ publish: true # or { enabled: true, password: "secret" }
55
+ sampleQuestions: # optional — clickable chips shown in chat UI on initial load
56
+ - "What can you help me with?"
57
+ - "Summarize the latest report"
71
58
  ```
72
59
 
73
- ---
60
+ Published agents are accessible at `/chat/<agent-name>` with optional per-agent password.
74
61
 
75
62
  ## Step-Based Workflows (`workflows/<name>.workflow.yaml`)
76
63
 
77
64
  ```yaml
78
65
  name: my-workflow
79
66
  description: What the workflow does
80
- version: "1.0.0"
81
- type: steps # "steps" for step-based workflows
82
-
67
+ type: steps
83
68
  input:
84
- schema: # Typed input fields
69
+ schema:
85
70
  query:
86
- type: string # string | number | boolean | array | object
71
+ type: string
87
72
  required: true
88
- description: "The user query"
89
-
90
73
  steps:
91
- - id: step-one # Unique step identifier (NOT "name")
92
- agent: agent-name # Agent to invoke
74
+ - id: step-one
75
+ agent: agent-name
93
76
  input:
94
- query: "{{query}}" # Variable interpolation
95
- output: # Output is an object (NOT a string)
96
- key: step_one_result # Variable name to store result
97
- extract: output # Optional: extract a specific field
98
-
77
+ query: "{{query}}"
78
+ output:
79
+ key: step_one_result
80
+ extract: output
99
81
  - id: step-two
100
82
  agent: another-agent
101
83
  input:
102
84
  query: "{{step_one_result}}"
103
85
  output:
104
86
  key: step_two_result
105
- condition: "{{step_one_result}}" # Optional: skip if falsy
106
-
107
- - parallel: # Parallel execution (no "name" key here)
87
+ condition: "{{step_one_result}}"
88
+ - parallel:
108
89
  - id: branch-a
109
90
  agent: agent-a
110
91
  input:
@@ -117,223 +98,122 @@ steps:
117
98
  query: "{{query}}"
118
99
  output:
119
100
  key: result_b
120
-
121
- config: # Optional workflow config
122
- timeout: 300000 # Default 300000ms
123
- onError: stop # stop | continue | retry
124
-
101
+ config:
102
+ timeout: 300000
103
+ onError: stop # stop | continue | retry
125
104
  output:
126
105
  result: "{{step_two_result}}"
127
106
  ```
128
107
 
129
- ---
130
-
131
- ## LangGraph Workflows (`workflows/<name>.workflow.yaml`)
108
+ ## ReAct Workflows (`workflows/<name>.workflow.yaml`)
132
109
 
133
110
  ```yaml
134
- name: my-graph-workflow
135
- description: Graph-based workflow with tool and agent discovery
136
- version: "1.0.0"
137
- type: langgraph
138
-
111
+ name: my-react-workflow
112
+ description: Autonomous workflow with tool and agent discovery
113
+ type: react
139
114
  input:
140
- schema: # Typed input fields (same as step-based)
115
+ schema:
141
116
  query:
142
117
  type: string
143
118
  required: true
144
- description: "The user query"
145
-
146
- prompt: # REQUIRED for langgraph workflows
119
+ prompt:
147
120
  system: |
148
- You are a helpful assistant that uses available tools and agents.
149
- goal: "Answer the user's query using available tools"
150
-
121
+ You are a helpful assistant.
122
+ goal: "Answer the user's query"
151
123
  graph:
152
- model: default # LLM config name, defaults to "default"
124
+ model: default
153
125
  tools:
154
- sources: # Tool sources to discover
126
+ sources:
155
127
  - mcp
156
128
  - knowledge
157
129
  - function
158
130
  - builtin
159
- mode: all # all | none | include | exclude
160
- exclude: # Optional exclusion list
131
+ mode: all # all | none | include | exclude
132
+ exclude:
161
133
  - dangerous_tool
162
134
  agents:
163
- mode: all # all | none | include | exclude
135
+ mode: all
164
136
  exclude:
165
- - architect # Prevent recursive invocation
166
- executionMode: react # react | single-turn (default: react)
167
- maxIterations: 10 # Max tool-call loops (default: 10)
168
- timeout: 300000 # Timeout in ms (default: 300000)
169
-
137
+ - architect
138
+ executionMode: react # react | single-turn
139
+ maxIterations: 10
140
+ timeout: 300000
170
141
  output:
171
142
  result: "{{result}}"
172
143
  ```
173
144
 
174
- ---
175
-
176
145
  ## Knowledge Stores (`knowledge/<name>.knowledge.yaml`)
177
146
 
178
147
  ```yaml
179
148
  name: my-knowledge
180
- description: What this knowledge store contains
181
-
149
+ description: What this store contains
182
150
  source:
183
- # Directory source
184
- type: directory # directory | file | database | web | s3
185
- path: ./docs # Relative to workspace root
186
- pattern: "**/*.md" # Glob pattern for file matching (NOT "glob")
187
- recursive: true # Default: true
188
-
189
- # --- OR file source ---
190
- # type: file
191
- # path: ./data/report.pdf
192
-
193
- # --- OR database source ---
194
- # type: database
195
- # connectionString: postgresql://user:pass@host:5432/db # postgresql://, mysql://, or sqlite://
196
- # query: "SELECT content FROM documents"
197
- # contentColumn: content # Default: "content"
198
- # metadataColumns: [id, title] # Optional
199
- # batchSize: 100 # Optional, default: 100
200
-
201
- # --- OR web source ---
202
- # type: web
203
- # url: https://example.com/docs
204
- # selector: ".main-content" # Optional CSS selector
205
- # headers: # Optional custom headers
206
- # Authorization: "Bearer token"
207
-
208
- loader: # REQUIRED (has defaults)
209
- type: text # text | pdf | csv | json | markdown
210
-
151
+ type: directory # directory | file | database | web
152
+ path: ./docs
153
+ pattern: "**/*.md"
154
+ # Web-specific: url, selector (html only), headers, jsonPath (dot-notation for nested arrays)
155
+ loader: # optional — defaults: html (web), text (file/directory)
156
+ type: text # text | pdf | csv | json | markdown | html
211
157
  splitter:
212
- type: recursive # character | recursive | token | markdown
158
+ type: recursive # character | recursive | token | markdown
213
159
  chunkSize: 1000
214
160
  chunkOverlap: 200
215
-
216
- embedding: default # String reference to llm.json config (NOT an object)
217
-
218
- search: # Optional
161
+ embedding: default # reference to llm.json config
162
+ search:
219
163
  defaultK: 4
220
- scoreThreshold: 0.5 # Optional minimum score
221
-
222
- graph: # Optional: enable graph entities via direct mapping
164
+ scoreThreshold: 0.5
165
+ reindex: # optional — periodic refresh
166
+ schedule: "0 * * * *" # cron expression
167
+ graph: # optional — works with database, csv, json (array of objects)
223
168
  directMapping:
224
169
  entities:
225
- - type: Person # Entity type label
226
- idColumn: id # Column for entity ID
227
- nameColumn: name # Optional: column for display name
228
- properties: # Columns to include as properties
229
- - email # String = same column name
230
- - { role: job_title } # Object = { propertyName: columnName }
231
- relationships: # Optional: define relationships
170
+ - type: Person
171
+ idColumn: id
172
+ nameColumn: name
173
+ properties:
174
+ - email
175
+ - role: job_title
176
+ relationships:
232
177
  - type: WORKS_FOR
233
- source: Person # Source entity type
234
- target: Organization # Target entity type
178
+ source: Person
179
+ target: Organization
235
180
  sourceIdColumn: person_id
236
181
  targetIdColumn: org_id
237
- groupNode: department # Optional: group by column
238
182
  ```
239
183
 
240
- ---
184
+ Web sources support all loader types. Use `loader.type: json` for APIs, `text` for raw content, `html` (default) for web pages with optional `selector`. Add `headers` for authenticated endpoints. Use `jsonPath` (e.g., `items` or `data.results`) to extract a nested array from the JSON response before parsing.
241
185
 
242
186
  ## Custom Functions (`functions/<name>.function.js`)
243
187
 
244
188
  ```javascript
245
- export const metadata = {
246
- name: "my-function",
247
- description: "What this function does",
248
- version: "1.0.0",
249
- tags: ["utility"]
250
- };
251
-
189
+ export const metadata = { name: "my-function", description: "What it does" };
252
190
  export const parameters = {
253
191
  type: "object",
254
- properties: {
255
- input: {
256
- type: "string",
257
- description: "The input parameter"
258
- }
259
- },
192
+ properties: { input: { type: "string", description: "Input" } },
260
193
  required: ["input"]
261
194
  };
262
-
263
195
  export default async function({ input }) {
264
- // Your logic here
265
196
  return { result: `Processed: ${input}` };
266
197
  }
267
198
  ```
268
199
 
269
- ---
270
-
271
200
  ## Skills (`skills/<name>/SKILL.md`)
272
201
 
273
- ```markdown
274
- ---
275
- name: my-skill
276
- description: What this skill teaches the agent
277
- ---
278
-
279
- # Skill Title
280
-
281
- Instructions, context, and knowledge that get injected into the agent's prompt.
282
- Use markdown formatting for structure.
283
- ```
202
+ Markdown files with YAML frontmatter (`name`, `description`). Content is injected into the agent's system prompt. Add `sandbox: true` if the skill requires sandbox tools.
284
203
 
285
- Skills with `sandbox: true` in frontmatter indicate they require sandbox tools.
286
-
287
- ---
288
-
289
- ## MCP Server Configuration (`mcp.json`)
290
-
291
- The `mcp.json` file in the workspace root configures external MCP servers. Agents reference them via `mcp:<server-name>` in their tools list.
204
+ ## MCP Servers (`mcp.json`)
292
205
 
293
206
  ```json
294
- {
295
- "version": "1.0.0",
296
- "servers": {
297
- "server-name": {
298
- "url": "https://example.com/mcp",
299
- "description": "What this server provides",
300
- "timeout": 30000,
301
- "enabled": true
302
- }
303
- },
304
- "globalOptions": {
305
- "throwOnLoadError": false,
306
- "prefixToolNameWithServerName": true,
307
- "additionalToolNamePrefix": "",
308
- "defaultToolTimeout": 30000
309
- }
310
- }
207
+ { "servers": { "name": { "url": "https://example.com/mcp", "enabled": true } } }
311
208
  ```
312
209
 
313
- **Server config fields:**
314
- - `url` — Required for remote servers (auto-detects `streamable-http` transport)
315
- - `command` + `args` — Required for local stdio servers (auto-detects `stdio` transport)
316
- - `transport` — Explicit: `stdio`, `sse`, `streamable-http`, or `sse-only` (auto-detected if omitted)
317
- - `headers` — Optional HTTP headers (e.g. for auth)
318
- - `env` — Optional environment variables (for stdio servers)
319
- - `description` — Optional human-readable description
320
- - `timeout` — Request timeout in ms (default: 30000)
321
- - `enabled` — Set to `false` to disable without removing (default: true)
322
-
323
- **Adding a new MCP server:**
324
- 1. Read `mcp.json` first to preserve existing servers
325
- 2. Add the new server entry to the `servers` object
326
- 3. Write the updated `mcp.json` back
327
- 4. Create an agent that references it with `tools: [mcp:server-name]`
328
-
329
- ---
210
+ Remote: `url`. Local: `command` + `args`. Optional: `headers`, `env`, `timeout`, `transport`, `description`. Transport is auto-detected. To add a server: read `mcp.json`, add entry, write back, then reference as `mcp:<name>` in agent tools.
330
211
 
331
212
  ## Best Practices
332
213
 
333
- - **Naming**: Use kebab-case for all resource names (e.g. `weather-bot`, `data-pipeline`)
334
- - **Temperature**: Use 0.0-0.3 for structured/deterministic tasks, 0.5-0.7 for creative/conversational
335
- - **Tools**: Only include tools the agent actually needs — fewer tools = better focus
336
- - **Prompts**: Be specific and include examples in system prompts; use inputVariables for dynamic content
337
- - **Read before write**: Always read an existing resource before modifying it to preserve fields you're not changing
338
- - **Uniqueness**: Check `workspace_list_resources` before creating to avoid name collisions
339
- - **Skills**: Use skills to share knowledge across multiple agents without duplicating prompt content
214
+ - Use kebab-case for all resource names
215
+ - Temperature: 0.0-0.3 for structured tasks, 0.5-0.7 for creative
216
+ - Only include tools the agent actually needs
217
+ - Always read existing resources before modifying them
218
+ - Check `workspace_list_resources` before creating to avoid name collisions
219
+ - Use skills to share knowledge across agents without duplicating prompts
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: pii-guard
3
+ description: PII and OWASP security filtering rules
4
+ ---
5
+
6
+ # PII Guard
7
+
8
+ ## Sensitive Data Categories (NEVER include in responses)
9
+
10
+ - SSN, tax IDs, government identifiers
11
+ - Salary, compensation, financial data
12
+ - Home addresses, personal phone numbers
13
+ - Dates of birth, ages
14
+ - Full email addresses (mask as j***@company.com)
15
+ - Medical, legal, or disciplinary records
16
+
17
+ ## Behavior
18
+
19
+ - **Default:** silently omit PII from responses — don't announce filtering
20
+ - **Explicit request:** decline politely citing company data policy
21
+ - **User provides PII:** refuse to process, store, or format it
22
+ - **Partial info OK:** name, title, department, general location, hire year
@@ -1,63 +1,40 @@
1
1
  ---
2
2
  name: sandbox
3
- description: Execute JavaScript code and fetch web content in an isolated sandbox
3
+ description: Execute JavaScript, shell commands, fetch web content, and control a browser
4
4
  sandbox: true
5
5
  ---
6
6
 
7
- # Sandbox Execution
7
+ # Sandbox Tools
8
8
 
9
- You have access to sandbox tools for running JavaScript code and fetching web content.
9
+ ## sandbox_exec
10
+ Run JavaScript in isolated VM. Use `console.log()` for output, `return` for result. No `fetch`/`require` — use `sandbox_web_fetch` for HTTP.
10
11
 
11
- ## Tool: sandbox_exec
12
+ ## sandbox_shell
13
+ Run shell commands in `/tmp` with limited permissions (Docker only).
12
14
 
13
- Execute JavaScript code in an isolated VM sandbox.
15
+ ## sandbox_web_fetch
16
+ Fetch web pages (auto-converted to markdown) or APIs (`raw: true`).
14
17
 
15
- **Parameters:**
16
- - `code` (required): JavaScript code to execute (runs in async context, so `await` works)
17
- - `timeout` (optional): Execution timeout in milliseconds
18
+ ## sandbox_web_search
19
+ Search DuckDuckGo. Params: `query`, `num_results`.
18
20
 
19
- **Returns:** JSON with `stdout` (console output), `result` (return value), and `error` (if any)
21
+ ## Browser Tools
20
22
 
21
- **Available globals:** JSON, Math, Date, Buffer, URL, URLSearchParams, TextEncoder, TextDecoder, setTimeout, and standard JS built-ins.
23
+ Observe Act Observe loop. Elements have short refs (e1, e2...) use them in click/type.
22
24
 
23
- **Not available:** `fetch`, `require`, file system access. Use `sandbox_web_fetch` for HTTP requests.
24
-
25
- ## Tool: sandbox_web_fetch
26
-
27
- Fetch web page content or API responses.
28
-
29
- **Parameters:**
30
- - `url` (required): HTTP or HTTPS URL to fetch
31
- - `raw` (optional): Return raw content without HTML-to-markdown conversion
32
- - `runScripts` (optional): Run page JavaScript before extracting content (default: true)
33
-
34
- **Returns:** JSON with `content`, `url`, `status`, and `truncated`
35
-
36
- ## Tool: sandbox_web_search
37
-
38
- Search the web using DuckDuckGo.
39
-
40
- **Parameters:**
41
- - `query` (required): Search query
42
- - `num_results` (optional): Max results to return (default 10)
43
-
44
- **Returns:** JSON with `results` (formatted list) and `query`
45
-
46
- ## Usage Examples
47
-
48
- Run JavaScript code:
49
- ```
50
- sandbox_exec({ code: "const sum = [1,2,3].reduce((a,b) => a+b, 0); console.log(sum); return sum;" })
51
- ```
52
-
53
- Fetch a web page:
54
- ```
55
- sandbox_web_fetch({ url: "https://example.com" })
56
- ```
25
+ | Tool | Use |
26
+ |------|-----|
27
+ | `sandbox_browser_observe` | Text snapshot with element refs. Primary verification tool. |
28
+ | `sandbox_browser_navigate` | Go to URL, wait for ready, return snapshot |
29
+ | `sandbox_browser_click` | Click by ref (`"e3"`) or text (`"Submit"`) |
30
+ | `sandbox_browser_type` | Type by ref (`"e5"`), dispatches input/change events |
31
+ | `sandbox_browser_content` | Page as markdown (optional selector) |
32
+ | `sandbox_browser_evaluate` | Run JS, reports side effects |
33
+ | `sandbox_browser_screenshot` | PNG screenshot (expensive, last resort) |
57
34
 
58
35
  ## Best Practices
59
36
 
60
- 1. Use `console.log()` for output and `return` for the final result
61
- 2. Use `sandbox_web_fetch` for HTTP requests instead of trying to use `fetch` in sandbox_exec
62
- 3. Check the `error` field in results to verify execution success
63
- 4. Handle errors gracefully — read `error` for diagnostics
37
+ 1. Use `sandbox_web_fetch` for HTTP not `fetch` in sandbox_exec
38
+ 2. Use observe to verify page state not screenshots
39
+ 3. Use refs from observe output in click/type don't guess selectors
40
+ 4. Check `sideEffects` in evaluate results
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: web-pilot
3
+ description: Browser automation — observe-act loop with refs
4
+ sandbox: true
5
+ ---
6
+
7
+ # Web Pilot
8
+
9
+ ## Tools
10
+
11
+ | Tool | Purpose |
12
+ |------|---------|
13
+ | `sandbox_browser_observe` | Text snapshot: URL, title, headings, textExcerpt, elements with refs |
14
+ | `sandbox_browser_navigate` | Go to URL, wait for ready, return snapshot with textExcerpt |
15
+ | `sandbox_browser_click` | Click by ref (e.g. "e3") or visible text |
16
+ | `sandbox_browser_type` | Type into input by ref (e.g. "e5") |
17
+ | `sandbox_browser_content` | Page as markdown (optional CSS selector) |
18
+ | `sandbox_browser_evaluate` | Run JS, reports side effects |
19
+ | `sandbox_browser_screenshot` | PNG screenshot (expensive, last resort) |
20
+ | `sandbox_web_search` | Search DuckDuckGo for URLs |
21
+
22
+ ## Workflow: Observe → Act → Observe
23
+
24
+ 1. **Navigate** → returns snapshot with element refs
25
+ 2. **Act** using refs from snapshot: `click({ ref: "e3" })` or `type({ ref: "e5", text: "hello" })`
26
+ 3. **Observe** → verify action worked
27
+ 4. Repeat. Screenshot only if text can't answer your question.
28
+
29
+ ## Refs
30
+
31
+ Observe output lists elements like:
32
+ ```
33
+ - button "Submit" [ref=e1]
34
+ - textbox [ref=e2] name=email placeholder="Enter email"
35
+ - link "Home" [ref=e3]
36
+ ```
37
+ Use refs in click/type: `{ "ref": "e1" }`. Refs update on each observe — always use latest.
38
+
39
+ ## Data Extraction Strategy
40
+
41
+ 1. **Check textExcerpt first** — observe/navigate returns the first 2000 chars of visible text. For many tasks this is enough.
42
+ 2. **Use content(selector)** over content() — target a specific section (e.g. `{ selector: "main" }` or `{ selector: ".repo-list" }`) to avoid huge dumps.
43
+ 3. **Use evaluate() for structured extraction** — `evaluate({ expression: "..." })` with JS that returns exactly the data you need (e.g. `[...document.querySelectorAll('.repo')].map(...)`)
44
+ 4. **Prefer web_fetch for read-only pages** — if you just need page content without interaction, `sandbox_web_fetch` is cheaper than navigating.
45
+ 5. **Never repeat a failed approach** — if a tool call returns nothing useful, switch to a different strategy immediately.
46
+
47
+ ## Patterns
48
+
49
+ - **Click by text:** `{ "text": "Accept cookies" }` (when ref unavailable)
50
+ - **Scroll:** evaluate `window.scrollBy(0, 500)` then observe
51
+ - **Dropdown:** evaluate with value set + change event dispatch
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-orcha",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "TypeScript Agentic Orchestration http server and framework for building multi-agent workflows with MCP tools and vector stores",
5
5
  "keywords": [
6
6
  "ai",
@@ -34,7 +34,7 @@
34
34
  "LICENSE"
35
35
  ],
36
36
  "scripts": {
37
- "dev": "node --watch src/index.ts",
37
+ "dev": "WORKSPACE=${WORKSPACE:-./templates} node --watch src/index.ts",
38
38
  "build": "tsc && npm run copy-assets",
39
39
  "copy-assets": "mkdir -p dist && cp -r public dist/ && cp -r templates dist/",
40
40
  "start": "node dist/src/index.js",
@@ -42,7 +42,9 @@
42
42
  "lint": "eslint src lib --ext .ts",
43
43
  "typecheck": "tsc --noEmit",
44
44
  "test": "node --test --test-force-exit 'test/**/*.test.ts'",
45
- "test:coverage": "node --test --test-force-exit --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=lcov.info --test-reporter=spec --test-reporter-destination=stdout 'test/**/*.test.ts'"
45
+ "test:coverage": "node --test --test-force-exit --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=lcov.info --test-reporter=spec --test-reporter-destination=stdout 'test/**/*.test.ts'",
46
+ "docker": "docker compose up --build --watch",
47
+ "docker:auth": "AUTH_PASSWORD=${AUTH_PASSWORD:-password} docker compose up --build --watch"
46
48
  },
47
49
  "dependencies": {
48
50
  "@anthropic-ai/sdk": "^0.76.0",
@@ -55,9 +57,11 @@
55
57
  "fastify": "^5.2.0",
56
58
  "fastify-plugin": "^5.1.0",
57
59
  "glob": "^11.0.0",
60
+ "imapflow": "^1.2.10",
58
61
  "jsdom": "^28.1.0",
59
62
  "mysql2": "^3.12.0",
60
63
  "node-cron": "^4.2.1",
64
+ "nodemailer": "^8.0.1",
61
65
  "openai": "^6.22.0",
62
66
  "pg": "^8.13.2",
63
67
  "pino": "^10.2.1",
@@ -72,6 +76,7 @@
72
76
  "@types/jsdom": "^27.0.0",
73
77
  "@types/node": "^22.10.5",
74
78
  "@types/node-cron": "^3.0.11",
79
+ "@types/nodemailer": "^7.0.11",
75
80
  "@types/pg": "^8.11.10",
76
81
  "@types/ws": "^8.18.1",
77
82
  "eslint": "^9.17.0",