0pflow 0.1.0-dev.00aaa03

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 (197) hide show
  1. package/dist/__tests__/agent-parser.test.d.ts +2 -0
  2. package/dist/__tests__/agent-parser.test.d.ts.map +1 -0
  3. package/dist/__tests__/agent-parser.test.js +64 -0
  4. package/dist/__tests__/agent-parser.test.js.map +1 -0
  5. package/dist/__tests__/agent.e2e.test.d.ts +2 -0
  6. package/dist/__tests__/agent.e2e.test.d.ts.map +1 -0
  7. package/dist/__tests__/agent.e2e.test.js +90 -0
  8. package/dist/__tests__/agent.e2e.test.js.map +1 -0
  9. package/dist/__tests__/agent.test.d.ts +2 -0
  10. package/dist/__tests__/agent.test.d.ts.map +1 -0
  11. package/dist/__tests__/agent.test.js +30 -0
  12. package/dist/__tests__/agent.test.js.map +1 -0
  13. package/dist/__tests__/context.test.d.ts +2 -0
  14. package/dist/__tests__/context.test.d.ts.map +1 -0
  15. package/dist/__tests__/context.test.js +53 -0
  16. package/dist/__tests__/context.test.js.map +1 -0
  17. package/dist/__tests__/dbos.test.d.ts +2 -0
  18. package/dist/__tests__/dbos.test.d.ts.map +1 -0
  19. package/dist/__tests__/dbos.test.js +35 -0
  20. package/dist/__tests__/dbos.test.js.map +1 -0
  21. package/dist/__tests__/factory.test.d.ts +2 -0
  22. package/dist/__tests__/factory.test.d.ts.map +1 -0
  23. package/dist/__tests__/factory.test.js +126 -0
  24. package/dist/__tests__/factory.test.js.map +1 -0
  25. package/dist/__tests__/integration.e2e.test.d.ts +2 -0
  26. package/dist/__tests__/integration.e2e.test.d.ts.map +1 -0
  27. package/dist/__tests__/integration.e2e.test.js +127 -0
  28. package/dist/__tests__/integration.e2e.test.js.map +1 -0
  29. package/dist/__tests__/integration.test.d.ts +2 -0
  30. package/dist/__tests__/integration.test.d.ts.map +1 -0
  31. package/dist/__tests__/integration.test.js +103 -0
  32. package/dist/__tests__/integration.test.js.map +1 -0
  33. package/dist/__tests__/model-config.test.d.ts +2 -0
  34. package/dist/__tests__/model-config.test.d.ts.map +1 -0
  35. package/dist/__tests__/model-config.test.js +48 -0
  36. package/dist/__tests__/model-config.test.js.map +1 -0
  37. package/dist/__tests__/node-registry.test.d.ts +2 -0
  38. package/dist/__tests__/node-registry.test.d.ts.map +1 -0
  39. package/dist/__tests__/node-registry.test.js +63 -0
  40. package/dist/__tests__/node-registry.test.js.map +1 -0
  41. package/dist/__tests__/node.test.d.ts +2 -0
  42. package/dist/__tests__/node.test.d.ts.map +1 -0
  43. package/dist/__tests__/node.test.js +48 -0
  44. package/dist/__tests__/node.test.js.map +1 -0
  45. package/dist/__tests__/registry.test.d.ts +2 -0
  46. package/dist/__tests__/registry.test.d.ts.map +1 -0
  47. package/dist/__tests__/registry.test.js +62 -0
  48. package/dist/__tests__/registry.test.js.map +1 -0
  49. package/dist/__tests__/web-tool.test.d.ts +2 -0
  50. package/dist/__tests__/web-tool.test.d.ts.map +1 -0
  51. package/dist/__tests__/web-tool.test.js +99 -0
  52. package/dist/__tests__/web-tool.test.js.map +1 -0
  53. package/dist/__tests__/workflow.test.d.ts +2 -0
  54. package/dist/__tests__/workflow.test.d.ts.map +1 -0
  55. package/dist/__tests__/workflow.test.js +49 -0
  56. package/dist/__tests__/workflow.test.js.map +1 -0
  57. package/dist/agent.d.ts +46 -0
  58. package/dist/agent.d.ts.map +1 -0
  59. package/dist/agent.js +75 -0
  60. package/dist/agent.js.map +1 -0
  61. package/dist/cli/__tests__/discovery.test.d.ts +2 -0
  62. package/dist/cli/__tests__/discovery.test.d.ts.map +1 -0
  63. package/dist/cli/__tests__/discovery.test.js +26 -0
  64. package/dist/cli/__tests__/discovery.test.js.map +1 -0
  65. package/dist/cli/__tests__/env.test.d.ts +2 -0
  66. package/dist/cli/__tests__/env.test.d.ts.map +1 -0
  67. package/dist/cli/__tests__/env.test.js +32 -0
  68. package/dist/cli/__tests__/env.test.js.map +1 -0
  69. package/dist/cli/__tests__/runs.test.d.ts +2 -0
  70. package/dist/cli/__tests__/runs.test.d.ts.map +1 -0
  71. package/dist/cli/__tests__/runs.test.js +46 -0
  72. package/dist/cli/__tests__/runs.test.js.map +1 -0
  73. package/dist/cli/app.d.ts +6 -0
  74. package/dist/cli/app.d.ts.map +1 -0
  75. package/dist/cli/app.js +21 -0
  76. package/dist/cli/app.js.map +1 -0
  77. package/dist/cli/discovery.d.ts +24 -0
  78. package/dist/cli/discovery.d.ts.map +1 -0
  79. package/dist/cli/discovery.js +88 -0
  80. package/dist/cli/discovery.js.map +1 -0
  81. package/dist/cli/env.d.ts +15 -0
  82. package/dist/cli/env.d.ts.map +1 -0
  83. package/dist/cli/env.js +54 -0
  84. package/dist/cli/env.js.map +1 -0
  85. package/dist/cli/index.d.ts +3 -0
  86. package/dist/cli/index.d.ts.map +1 -0
  87. package/dist/cli/index.js +423 -0
  88. package/dist/cli/index.js.map +1 -0
  89. package/dist/cli/install.d.ts +54 -0
  90. package/dist/cli/install.d.ts.map +1 -0
  91. package/dist/cli/install.js +217 -0
  92. package/dist/cli/install.js.map +1 -0
  93. package/dist/cli/mcp/config.d.ts +5 -0
  94. package/dist/cli/mcp/config.d.ts.map +1 -0
  95. package/dist/cli/mcp/config.js +14 -0
  96. package/dist/cli/mcp/config.js.map +1 -0
  97. package/dist/cli/mcp/lib/templates.d.ts +12 -0
  98. package/dist/cli/mcp/lib/templates.d.ts.map +1 -0
  99. package/dist/cli/mcp/lib/templates.js +77 -0
  100. package/dist/cli/mcp/lib/templates.js.map +1 -0
  101. package/dist/cli/mcp/server.d.ts +5 -0
  102. package/dist/cli/mcp/server.d.ts.map +1 -0
  103. package/dist/cli/mcp/server.js +15 -0
  104. package/dist/cli/mcp/server.js.map +1 -0
  105. package/dist/cli/mcp/serverInfo.d.ts +7 -0
  106. package/dist/cli/mcp/serverInfo.d.ts.map +1 -0
  107. package/dist/cli/mcp/serverInfo.js +7 -0
  108. package/dist/cli/mcp/serverInfo.js.map +1 -0
  109. package/dist/cli/mcp/tools/createApp.d.ts +15 -0
  110. package/dist/cli/mcp/tools/createApp.d.ts.map +1 -0
  111. package/dist/cli/mcp/tools/createApp.js +81 -0
  112. package/dist/cli/mcp/tools/createApp.js.map +1 -0
  113. package/dist/cli/mcp/tools/createDatabase.d.ts +14 -0
  114. package/dist/cli/mcp/tools/createDatabase.d.ts.map +1 -0
  115. package/dist/cli/mcp/tools/createDatabase.js +66 -0
  116. package/dist/cli/mcp/tools/createDatabase.js.map +1 -0
  117. package/dist/cli/mcp/tools/index.d.ts +24 -0
  118. package/dist/cli/mcp/tools/index.d.ts.map +1 -0
  119. package/dist/cli/mcp/tools/index.js +11 -0
  120. package/dist/cli/mcp/tools/index.js.map +1 -0
  121. package/dist/cli/mcp/tools/setupAppSchema.d.ts +17 -0
  122. package/dist/cli/mcp/tools/setupAppSchema.d.ts.map +1 -0
  123. package/dist/cli/mcp/tools/setupAppSchema.js +157 -0
  124. package/dist/cli/mcp/tools/setupAppSchema.js.map +1 -0
  125. package/dist/cli/mcp/types.d.ts +3 -0
  126. package/dist/cli/mcp/types.d.ts.map +1 -0
  127. package/dist/cli/mcp/types.js +2 -0
  128. package/dist/cli/mcp/types.js.map +1 -0
  129. package/dist/cli/runs.d.ts +28 -0
  130. package/dist/cli/runs.d.ts.map +1 -0
  131. package/dist/cli/runs.js +70 -0
  132. package/dist/cli/runs.js.map +1 -0
  133. package/dist/cli/trace.d.ts +31 -0
  134. package/dist/cli/trace.d.ts.map +1 -0
  135. package/dist/cli/trace.js +264 -0
  136. package/dist/cli/trace.js.map +1 -0
  137. package/dist/context.d.ts +13 -0
  138. package/dist/context.d.ts.map +1 -0
  139. package/dist/context.js +25 -0
  140. package/dist/context.js.map +1 -0
  141. package/dist/dbos.d.ts +15 -0
  142. package/dist/dbos.d.ts.map +1 -0
  143. package/dist/dbos.js +27 -0
  144. package/dist/dbos.js.map +1 -0
  145. package/dist/factory.d.ts +6 -0
  146. package/dist/factory.d.ts.map +1 -0
  147. package/dist/factory.js +78 -0
  148. package/dist/factory.js.map +1 -0
  149. package/dist/index.d.ts +20 -0
  150. package/dist/index.d.ts.map +1 -0
  151. package/dist/index.js +18 -0
  152. package/dist/index.js.map +1 -0
  153. package/dist/node.d.ts +19 -0
  154. package/dist/node.d.ts.map +1 -0
  155. package/dist/node.js +16 -0
  156. package/dist/node.js.map +1 -0
  157. package/dist/nodes/agent/executor.d.ts +70 -0
  158. package/dist/nodes/agent/executor.d.ts.map +1 -0
  159. package/dist/nodes/agent/executor.js +230 -0
  160. package/dist/nodes/agent/executor.js.map +1 -0
  161. package/dist/nodes/agent/index.d.ts +7 -0
  162. package/dist/nodes/agent/index.d.ts.map +1 -0
  163. package/dist/nodes/agent/index.js +5 -0
  164. package/dist/nodes/agent/index.js.map +1 -0
  165. package/dist/nodes/agent/model-config.d.ts +42 -0
  166. package/dist/nodes/agent/model-config.d.ts.map +1 -0
  167. package/dist/nodes/agent/model-config.js +58 -0
  168. package/dist/nodes/agent/model-config.js.map +1 -0
  169. package/dist/nodes/agent/parser.d.ts +22 -0
  170. package/dist/nodes/agent/parser.d.ts.map +1 -0
  171. package/dist/nodes/agent/parser.js +42 -0
  172. package/dist/nodes/agent/parser.js.map +1 -0
  173. package/dist/nodes/builtin/index.d.ts +9 -0
  174. package/dist/nodes/builtin/index.d.ts.map +1 -0
  175. package/dist/nodes/builtin/index.js +10 -0
  176. package/dist/nodes/builtin/index.js.map +1 -0
  177. package/dist/nodes/builtin/web.d.ts +25 -0
  178. package/dist/nodes/builtin/web.d.ts.map +1 -0
  179. package/dist/nodes/builtin/web.js +86 -0
  180. package/dist/nodes/builtin/web.js.map +1 -0
  181. package/dist/nodes/registry.d.ts +32 -0
  182. package/dist/nodes/registry.d.ts.map +1 -0
  183. package/dist/nodes/registry.js +58 -0
  184. package/dist/nodes/registry.js.map +1 -0
  185. package/dist/registry.d.ts +31 -0
  186. package/dist/registry.d.ts.map +1 -0
  187. package/dist/registry.js +44 -0
  188. package/dist/registry.js.map +1 -0
  189. package/dist/types.d.ts +63 -0
  190. package/dist/types.d.ts.map +1 -0
  191. package/dist/types.js +2 -0
  192. package/dist/types.js.map +1 -0
  193. package/dist/workflow.d.ts +26 -0
  194. package/dist/workflow.d.ts.map +1 -0
  195. package/dist/workflow.js +50 -0
  196. package/dist/workflow.js.map +1 -0
  197. package/package.json +52 -0
@@ -0,0 +1,42 @@
1
+ import type { OpenAIProvider } from "@ai-sdk/openai";
2
+ import type { AnthropicProvider } from "@ai-sdk/anthropic";
3
+ import type { LanguageModel } from "ai";
4
+ /**
5
+ * Union type for provider instances
6
+ */
7
+ export type Provider = OpenAIProvider | AnthropicProvider;
8
+ /**
9
+ * Result of createModelAndProvider
10
+ */
11
+ export interface ModelAndProvider {
12
+ model: LanguageModel;
13
+ provider: Provider;
14
+ providerType: ModelProvider;
15
+ }
16
+ /**
17
+ * Supported model providers
18
+ */
19
+ export type ModelProvider = "openai" | "anthropic";
20
+ /**
21
+ * Model configuration for agent execution
22
+ */
23
+ export interface ModelConfig {
24
+ provider: ModelProvider;
25
+ modelId: string;
26
+ apiKey?: string;
27
+ }
28
+ /**
29
+ * Default model configuration
30
+ * Uses PFLOW_MODEL_PROVIDER and PFLOW_MODEL_ID env vars
31
+ * Falls back to OpenAI GPT-4o
32
+ */
33
+ export declare function getDefaultModelConfig(): ModelConfig;
34
+ /**
35
+ * Create a Vercel AI SDK model and provider instance from config
36
+ */
37
+ export declare function createModelAndProvider(config: ModelConfig): ModelAndProvider;
38
+ /**
39
+ * Parse a model string in format "provider/model-id" or just "model-id"
40
+ */
41
+ export declare function parseModelString(modelString: string): Partial<ModelConfig>;
42
+ //# sourceMappingURL=model-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../../src/nodes/agent/model-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAKnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAyB5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAW1E"}
@@ -0,0 +1,58 @@
1
+ // packages/core/src/nodes/agent/model-config.ts
2
+ import { createOpenAI } from "@ai-sdk/openai";
3
+ import { createAnthropic } from "@ai-sdk/anthropic";
4
+ /**
5
+ * Default model configuration
6
+ * Uses PFLOW_MODEL_PROVIDER and PFLOW_MODEL_ID env vars
7
+ * Falls back to OpenAI GPT-4o
8
+ */
9
+ export function getDefaultModelConfig() {
10
+ const provider = (process.env.PFLOW_MODEL_PROVIDER ?? "openai");
11
+ const modelId = process.env.PFLOW_MODEL_ID ?? "gpt-4o";
12
+ return { provider, modelId };
13
+ }
14
+ /**
15
+ * Create a Vercel AI SDK model and provider instance from config
16
+ */
17
+ export function createModelAndProvider(config) {
18
+ switch (config.provider) {
19
+ case "openai": {
20
+ const provider = createOpenAI({
21
+ apiKey: config.apiKey ?? process.env.OPENAI_API_KEY,
22
+ });
23
+ return {
24
+ model: provider(config.modelId),
25
+ provider,
26
+ providerType: "openai",
27
+ };
28
+ }
29
+ case "anthropic": {
30
+ const provider = createAnthropic({
31
+ apiKey: config.apiKey ?? process.env.ANTHROPIC_API_KEY,
32
+ });
33
+ return {
34
+ model: provider(config.modelId),
35
+ provider,
36
+ providerType: "anthropic",
37
+ };
38
+ }
39
+ default:
40
+ throw new Error(`Unsupported model provider: ${config.provider}`);
41
+ }
42
+ }
43
+ /**
44
+ * Parse a model string in format "provider/model-id" or just "model-id"
45
+ */
46
+ export function parseModelString(modelString) {
47
+ const slashIndex = modelString.indexOf("/");
48
+ if (slashIndex !== -1) {
49
+ const provider = modelString.slice(0, slashIndex);
50
+ const modelId = modelString.slice(slashIndex + 1);
51
+ return {
52
+ provider: provider,
53
+ modelId,
54
+ };
55
+ }
56
+ return { modelId: modelString };
57
+ }
58
+ //# sourceMappingURL=model-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-config.js","sourceRoot":"","sources":["../../../src/nodes/agent/model-config.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAiCpD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,QAAQ,CAAkB,CAAC;IACjF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,QAAQ,CAAC;IAEvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmB;IACxD,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,QAAQ,GAAG,YAAY,CAAC;gBAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;aACpD,CAAC,CAAC;YACH,OAAO;gBACL,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC/B,QAAQ;gBACR,YAAY,EAAE,QAAQ;aACvB,CAAC;QACJ,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,QAAQ,GAAG,eAAe,CAAC;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;aACvD,CAAC,CAAC;YACH,OAAO;gBACL,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC/B,QAAQ;gBACR,YAAY,EAAE,WAAW;aAC1B,CAAC;QACJ,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAClD,OAAO;YACL,QAAQ,EAAE,QAAyB;YACnC,OAAO;SACR,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Parsed agent specification
3
+ */
4
+ export interface AgentSpec {
5
+ /** Agent name from frontmatter */
6
+ name: string;
7
+ /** System prompt (markdown body) */
8
+ systemPrompt: string;
9
+ /** Optional model override (e.g., "openai/gpt-4o", "anthropic/claude-3-opus") */
10
+ model?: string;
11
+ /** Optional max steps for agentic loop */
12
+ maxSteps?: number;
13
+ }
14
+ /**
15
+ * Parse an agent spec markdown file
16
+ */
17
+ export declare function parseAgentSpec(specPath: string): Promise<AgentSpec>;
18
+ /**
19
+ * Parse agent spec from content string (for testing)
20
+ */
21
+ export declare function parseAgentSpecContent(content: string, sourcePath?: string): AgentSpec;
22
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/nodes/agent/parser.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAGzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,UAAU,SAAY,GACrB,SAAS,CAuBX"}
@@ -0,0 +1,42 @@
1
+ // packages/core/src/nodes/agent/parser.ts
2
+ import { readFile } from "fs/promises";
3
+ import matter from "gray-matter";
4
+ import { z } from "zod";
5
+ /**
6
+ * Schema for agent spec frontmatter
7
+ */
8
+ const AgentFrontmatterSchema = z.object({
9
+ name: z.string(),
10
+ model: z.string().optional(),
11
+ maxSteps: z.number().optional(),
12
+ });
13
+ /**
14
+ * Parse an agent spec markdown file
15
+ */
16
+ export async function parseAgentSpec(specPath) {
17
+ const content = await readFile(specPath, "utf-8");
18
+ return parseAgentSpecContent(content, specPath);
19
+ }
20
+ /**
21
+ * Parse agent spec from content string (for testing)
22
+ */
23
+ export function parseAgentSpecContent(content, sourcePath = "unknown") {
24
+ const { data, content: body } = matter(content);
25
+ // Validate frontmatter
26
+ const frontmatter = AgentFrontmatterSchema.safeParse(data);
27
+ if (!frontmatter.success) {
28
+ throw new Error(`Invalid agent spec frontmatter in ${sourcePath}: ${frontmatter.error.message}`);
29
+ }
30
+ // Extract system prompt from body (trim whitespace)
31
+ const systemPrompt = body.trim();
32
+ if (!systemPrompt) {
33
+ throw new Error(`Agent spec ${sourcePath} has no system prompt (empty body)`);
34
+ }
35
+ return {
36
+ name: frontmatter.data.name,
37
+ systemPrompt,
38
+ model: frontmatter.data.model,
39
+ maxSteps: frontmatter.data.maxSteps,
40
+ };
41
+ }
42
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/nodes/agent/parser.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAgBH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,UAAU,GAAG,SAAS;IAEtB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhD,uBAAuB;IACvB,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,KAAK,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAChF,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,oCAAoC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO;QACL,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI;QAC3B,YAAY;QACZ,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK;QAC7B,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { webRead } from "./web.js";
2
+ import type { Executable } from "../../types.js";
3
+ type AnyExecutable = Executable<any, any>;
4
+ /**
5
+ * All built-in nodes indexed by name
6
+ */
7
+ export declare const builtinNodes: Record<string, AnyExecutable>;
8
+ export { webRead };
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nodes/builtin/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,KAAK,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAEtD,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ // packages/core/src/nodes/builtin/index.ts
2
+ import { webRead } from "./web.js";
3
+ /**
4
+ * All built-in nodes indexed by name
5
+ */
6
+ export const builtinNodes = {
7
+ "web_read": webRead,
8
+ };
9
+ export { webRead };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nodes/builtin/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAMnC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAkC;IACzD,UAAU,EAAE,OAAO;CACpB,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Web read node - fetches and extracts readable content from a URL
3
+ *
4
+ * Uses Mozilla's Readability to extract the main content from web pages,
5
+ * removing navigation, ads, and other non-content elements.
6
+ */
7
+ export declare const webRead: import("../../types.js").Executable<{
8
+ url: string;
9
+ headers?: Record<string, string> | undefined;
10
+ }, {
11
+ status: number;
12
+ title: any;
13
+ content: any;
14
+ byline: null;
15
+ siteName: null;
16
+ excerpt: null;
17
+ } | {
18
+ status: number;
19
+ title: string | null | undefined;
20
+ content: string | null | undefined;
21
+ byline: string | null | undefined;
22
+ siteName: string | null | undefined;
23
+ excerpt: string | null | undefined;
24
+ }>;
25
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../src/nodes/builtin/web.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;EA8ElB,CAAC"}
@@ -0,0 +1,86 @@
1
+ // packages/core/src/nodes/builtin/web.ts
2
+ import { z } from "zod";
3
+ import { Readability } from "@mozilla/readability";
4
+ import { parseHTML } from "linkedom";
5
+ import { Node } from "../../node.js";
6
+ /**
7
+ * Web read node - fetches and extracts readable content from a URL
8
+ *
9
+ * Uses Mozilla's Readability to extract the main content from web pages,
10
+ * removing navigation, ads, and other non-content elements.
11
+ */
12
+ export const webRead = Node.create({
13
+ name: "web_read",
14
+ description: "Fetch a URL and extract the main readable content using Mozilla Readability",
15
+ inputSchema: z.object({
16
+ url: z
17
+ .string()
18
+ .refine((val) => {
19
+ try {
20
+ new URL(val);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }, "Invalid URL")
27
+ .describe("The URL to fetch"),
28
+ headers: z
29
+ .record(z.string(), z.string())
30
+ .optional()
31
+ .describe("Optional HTTP headers to include"),
32
+ }),
33
+ outputSchema: z.object({
34
+ status: z.number().describe("HTTP status code"),
35
+ title: z.string().nullable().describe("Page title"),
36
+ content: z
37
+ .string()
38
+ .nullable()
39
+ .describe("Extracted text content (null if extraction failed)"),
40
+ byline: z.string().nullable().describe("Author/byline if found"),
41
+ siteName: z.string().nullable().describe("Site name if found"),
42
+ excerpt: z.string().nullable().describe("Article excerpt/description"),
43
+ }),
44
+ execute: async (_ctx, { url, headers }) => {
45
+ const response = await fetch(url, {
46
+ method: "GET",
47
+ headers: headers,
48
+ });
49
+ if (!response.ok) {
50
+ return {
51
+ status: response.status,
52
+ title: null,
53
+ content: null,
54
+ byline: null,
55
+ siteName: null,
56
+ excerpt: null,
57
+ };
58
+ }
59
+ const html = await response.text();
60
+ // Parse HTML and extract readable content
61
+ const { document } = parseHTML(html);
62
+ const reader = new Readability(document);
63
+ const article = reader.parse();
64
+ if (!article) {
65
+ // Readability couldn't extract content - return raw text as fallback
66
+ const textContent = document.body?.textContent?.trim() ?? null;
67
+ return {
68
+ status: response.status,
69
+ title: document.title || null,
70
+ content: textContent,
71
+ byline: null,
72
+ siteName: null,
73
+ excerpt: null,
74
+ };
75
+ }
76
+ return {
77
+ status: response.status,
78
+ title: article.title,
79
+ content: article.textContent,
80
+ byline: article.byline,
81
+ siteName: article.siteName,
82
+ excerpt: article.excerpt,
83
+ };
84
+ },
85
+ });
86
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/nodes/builtin/web.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,6EAA6E;IAC/E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBACb,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,EAAE,aAAa,CAAC;aAChB,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,OAAO,EAAE,CAAC;aACP,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;aAC9B,QAAQ,EAAE;aACV,QAAQ,CAAC,kCAAkC,CAAC;KAChD,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACnD,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;QACjE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC9D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACvE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,OAA6C;SACvD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,0CAA0C;QAC1C,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,qEAAqE;YACrE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;YAC/D,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;gBAC7B,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,WAAW;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { Executable } from "../types.js";
2
+ type AnyExecutable = Executable<any, any>;
3
+ export interface NodeRegistryConfig {
4
+ /** User-defined nodes keyed by name */
5
+ userNodes?: Record<string, AnyExecutable>;
6
+ }
7
+ /**
8
+ * Registry for resolving nodes by name (used by agents for tool calling)
9
+ */
10
+ export declare class NodeRegistry {
11
+ private nodes;
12
+ constructor(config?: NodeRegistryConfig);
13
+ /**
14
+ * Get a node by name
15
+ */
16
+ getNode(name: string): AnyExecutable | undefined;
17
+ /**
18
+ * Get multiple nodes by name
19
+ * @throws Error if any node is not found
20
+ */
21
+ getNodes(names: string[]): AnyExecutable[];
22
+ /**
23
+ * Check if a node exists
24
+ */
25
+ hasNode(name: string): boolean;
26
+ /**
27
+ * List all registered node names
28
+ */
29
+ listNodes(): string[];
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/nodes/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,KAAK,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA6B;gBAE9B,MAAM,GAAE,kBAAuB;IAc3C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIhD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE;IAoB1C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;CAGtB"}
@@ -0,0 +1,58 @@
1
+ import { builtinNodes } from "./builtin/index.js";
2
+ /**
3
+ * Registry for resolving nodes by name (used by agents for tool calling)
4
+ */
5
+ export class NodeRegistry {
6
+ nodes;
7
+ constructor(config = {}) {
8
+ this.nodes = new Map();
9
+ // Register built-in nodes first
10
+ for (const [name, node] of Object.entries(builtinNodes)) {
11
+ this.nodes.set(name, node);
12
+ }
13
+ // Register user nodes (can override built-ins if needed)
14
+ for (const [name, node] of Object.entries(config.userNodes ?? {})) {
15
+ this.nodes.set(name, node);
16
+ }
17
+ }
18
+ /**
19
+ * Get a node by name
20
+ */
21
+ getNode(name) {
22
+ return this.nodes.get(name);
23
+ }
24
+ /**
25
+ * Get multiple nodes by name
26
+ * @throws Error if any node is not found
27
+ */
28
+ getNodes(names) {
29
+ const nodes = [];
30
+ const missing = [];
31
+ for (const name of names) {
32
+ const node = this.nodes.get(name);
33
+ if (node) {
34
+ nodes.push(node);
35
+ }
36
+ else {
37
+ missing.push(name);
38
+ }
39
+ }
40
+ if (missing.length > 0) {
41
+ throw new Error(`Nodes not found: ${missing.join(", ")}`);
42
+ }
43
+ return nodes;
44
+ }
45
+ /**
46
+ * Check if a node exists
47
+ */
48
+ hasNode(name) {
49
+ return this.nodes.has(name);
50
+ }
51
+ /**
52
+ * List all registered node names
53
+ */
54
+ listNodes() {
55
+ return Array.from(this.nodes.keys());
56
+ }
57
+ }
58
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/nodes/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,KAAK,CAA6B;IAE1C,YAAY,SAA6B,EAAE;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAEvB,gCAAgC;QAChC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAA8B,EAAE,CAAC;YACrF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,yDAAyD;QACzD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAA8B,EAAE,CAAC;YAC/F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAe;QACtB,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,31 @@
1
+ import type { Executable } from "./types.js";
2
+ import type { WorkflowExecutable } from "./workflow.js";
3
+ type AnyExecutable = Executable<any, any>;
4
+ export interface RegistryConfig {
5
+ workflows?: Record<string, AnyExecutable>;
6
+ agents?: Record<string, AnyExecutable>;
7
+ nodes?: Record<string, AnyExecutable>;
8
+ }
9
+ /**
10
+ * Registry for managing executables (workflows, agents, nodes)
11
+ */
12
+ export declare class Registry {
13
+ private workflows;
14
+ private agents;
15
+ private nodes;
16
+ constructor(config: RegistryConfig);
17
+ /** Get a workflow by name */
18
+ getWorkflow(name: string): WorkflowExecutable | undefined;
19
+ /** List all workflow names */
20
+ listWorkflows(): string[];
21
+ /** Get any executable by name (searches all registries) */
22
+ getExecutable(name: string): AnyExecutable | undefined;
23
+ /** List all registered executable names */
24
+ listAll(): string[];
25
+ /** Get a node by name */
26
+ getNode(name: string): AnyExecutable | undefined;
27
+ /** List all node names */
28
+ listNodes(): string[];
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,KAAK,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAA6B;gBAE9B,MAAM,EAAE,cAAc;IAMlC,6BAA6B;IAC7B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIzD,8BAA8B;IAC9B,aAAa,IAAI,MAAM,EAAE;IAIzB,2DAA2D;IAC3D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQtD,2CAA2C;IAC3C,OAAO,IAAI,MAAM,EAAE;IAQnB,yBAAyB;IACzB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIhD,0BAA0B;IAC1B,SAAS,IAAI,MAAM,EAAE;CAGtB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Registry for managing executables (workflows, agents, nodes)
3
+ */
4
+ export class Registry {
5
+ workflows;
6
+ agents;
7
+ nodes;
8
+ constructor(config) {
9
+ this.workflows = new Map(Object.entries(config.workflows ?? {}));
10
+ this.agents = new Map(Object.entries(config.agents ?? {}));
11
+ this.nodes = new Map(Object.entries(config.nodes ?? {}));
12
+ }
13
+ /** Get a workflow by name */
14
+ getWorkflow(name) {
15
+ return this.workflows.get(name);
16
+ }
17
+ /** List all workflow names */
18
+ listWorkflows() {
19
+ return Array.from(this.workflows.keys());
20
+ }
21
+ /** Get any executable by name (searches all registries) */
22
+ getExecutable(name) {
23
+ return (this.workflows.get(name) ??
24
+ this.agents.get(name) ??
25
+ this.nodes.get(name));
26
+ }
27
+ /** List all registered executable names */
28
+ listAll() {
29
+ return [
30
+ ...this.workflows.keys(),
31
+ ...this.agents.keys(),
32
+ ...this.nodes.keys(),
33
+ ];
34
+ }
35
+ /** Get a node by name */
36
+ getNode(name) {
37
+ return this.nodes.get(name);
38
+ }
39
+ /** List all node names */
40
+ listNodes() {
41
+ return Array.from(this.nodes.keys());
42
+ }
43
+ }
44
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,MAAM,OAAO,QAAQ;IACX,SAAS,CAA6B;IACtC,MAAM,CAA6B;IACnC,KAAK,CAA6B;IAE1C,YAAY,MAAsB;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,6BAA6B;IAC7B,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAmC,CAAC;IACpE,CAAC;IAED,8BAA8B;IAC9B,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,2DAA2D;IAC3D,aAAa,CAAC,IAAY;QACxB,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CACrB,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,OAAO;QACL,OAAO;YACL,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACxB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACrB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;SACrB,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,0BAA0B;IAC1B,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ import type { ModelConfig } from "./nodes/agent/model-config.js";
3
+ /**
4
+ * Base interface for all executable types (Node, Agent, Workflow)
5
+ */
6
+ export interface Executable<TInput = unknown, TOutput = unknown> {
7
+ readonly name: string;
8
+ readonly type: "node" | "agent" | "workflow";
9
+ readonly description: string;
10
+ readonly version?: number;
11
+ readonly inputSchema: z.ZodType<TInput>;
12
+ readonly outputSchema?: z.ZodType<TOutput>;
13
+ readonly execute: (ctx: WorkflowContext, inputs: TInput) => Promise<TOutput>;
14
+ }
15
+ /**
16
+ * Context passed to workflow/node run functions
17
+ */
18
+ export interface WorkflowContext {
19
+ /** Run any executable (node, agent, workflow) as a durable step */
20
+ run: <TInput, TOutput>(executable: Executable<TInput, TOutput>, inputs: TInput) => Promise<TOutput>;
21
+ /** Structured logging */
22
+ log: (message: string, level?: LogLevel) => void;
23
+ }
24
+ export type LogLevel = "info" | "warn" | "error" | "debug";
25
+ type AnyExecutable = Executable<any, any>;
26
+ /**
27
+ * Configuration for create0pflow()
28
+ */
29
+ export interface PflowConfig {
30
+ /** Database connection URL for DBOS durability */
31
+ databaseUrl: string;
32
+ /** Application name (used for DBOS schema naming) */
33
+ appName?: string;
34
+ /** Registered workflows */
35
+ workflows?: Record<string, AnyExecutable>;
36
+ /** Registered agents */
37
+ agents?: Record<string, AnyExecutable>;
38
+ /** Registered function nodes (also available to agents as tools) */
39
+ nodes?: Record<string, AnyExecutable>;
40
+ /** Default model configuration for agents */
41
+ modelConfig?: ModelConfig;
42
+ }
43
+ /**
44
+ * The 0pflow instance returned by create0pflow()
45
+ */
46
+ export interface Pflow {
47
+ /** List all registered workflow names */
48
+ listWorkflows: () => string[];
49
+ /** Get a workflow by name */
50
+ getWorkflow: (name: string) => AnyExecutable | undefined;
51
+ /** Trigger a workflow by name (for webhooks/UI) */
52
+ triggerWorkflow: <T = unknown>(name: string, inputs: unknown) => Promise<T>;
53
+ /** List all registered node names */
54
+ listNodes: () => string[];
55
+ /** Get a node by name */
56
+ getNode: (name: string) => AnyExecutable | undefined;
57
+ /** Trigger a node by name (wrapped in workflow for durability) */
58
+ triggerNode: <T = unknown>(name: string, inputs: unknown) => Promise<T>;
59
+ /** Shutdown the 0pflow instance and DBOS */
60
+ shutdown: () => Promise<void>;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EACnB,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB,yBAAyB;IACzB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAG3D,KAAK,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,yCAAyC;IACzC,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;IAC9B,6BAA6B;IAC7B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IACzD,mDAAmD;IACnD,eAAe,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,qCAAqC;IACrC,SAAS,EAAE,MAAM,MAAM,EAAE,CAAC;IAC1B,yBAAyB;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IACrD,kEAAkE;IAClE,WAAW,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxE,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ import type { Executable, WorkflowContext } from "./types.js";
3
+ /**
4
+ * Definition for creating a workflow
5
+ */
6
+ export interface WorkflowDefinition<TInput, TOutput> {
7
+ name: string;
8
+ description: string;
9
+ version: number;
10
+ inputSchema: z.ZodType<TInput>;
11
+ outputSchema?: z.ZodType<TOutput>;
12
+ run: (ctx: WorkflowContext, inputs: TInput) => Promise<TOutput>;
13
+ }
14
+ /**
15
+ * Extended executable interface for workflows (includes version)
16
+ */
17
+ export interface WorkflowExecutable<TInput = unknown, TOutput = unknown> extends Executable<TInput, TOutput> {
18
+ readonly version: number;
19
+ }
20
+ /**
21
+ * Factory for creating workflow executables
22
+ */
23
+ export declare const Workflow: {
24
+ create<TInput, TOutput>(definition: WorkflowDefinition<TInput, TOutput>): WorkflowExecutable<TInput, TOutput>;
25
+ };
26
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,MAAM,EAAE,OAAO;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,CACrE,SAAQ,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAmCD;;GAEG;AACH,eAAO,MAAM,QAAQ;WACZ,MAAM,EAAE,OAAO,cACR,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9C,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;CAuBvC,CAAC"}