@mandible-ai/mandible 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +391 -0
  3. package/dist/examples/code-pipeline/index.d.ts +3 -0
  4. package/dist/examples/code-pipeline/index.d.ts.map +1 -0
  5. package/dist/examples/code-pipeline/index.js +239 -0
  6. package/dist/examples/code-pipeline/index.js.map +1 -0
  7. package/dist/examples/code-pipeline/with-providers.d.ts +3 -0
  8. package/dist/examples/code-pipeline/with-providers.d.ts.map +1 -0
  9. package/dist/examples/code-pipeline/with-providers.js +246 -0
  10. package/dist/examples/code-pipeline/with-providers.js.map +1 -0
  11. package/dist/examples/docker-pipeline/index.d.ts +3 -0
  12. package/dist/examples/docker-pipeline/index.d.ts.map +1 -0
  13. package/dist/examples/docker-pipeline/index.js +235 -0
  14. package/dist/examples/docker-pipeline/index.js.map +1 -0
  15. package/dist/examples/github-colony/mandible.config.d.ts +11 -0
  16. package/dist/examples/github-colony/mandible.config.d.ts.map +1 -0
  17. package/dist/examples/github-colony/mandible.config.js +63 -0
  18. package/dist/examples/github-colony/mandible.config.js.map +1 -0
  19. package/dist/examples/remote-pipeline/index.d.ts +3 -0
  20. package/dist/examples/remote-pipeline/index.d.ts.map +1 -0
  21. package/dist/examples/remote-pipeline/index.js +154 -0
  22. package/dist/examples/remote-pipeline/index.js.map +1 -0
  23. package/dist/examples/repo-maintenance/fixer.d.ts +80 -0
  24. package/dist/examples/repo-maintenance/fixer.d.ts.map +1 -0
  25. package/dist/examples/repo-maintenance/fixer.js +217 -0
  26. package/dist/examples/repo-maintenance/fixer.js.map +1 -0
  27. package/dist/examples/repo-maintenance/mandible.config.d.ts +11 -0
  28. package/dist/examples/repo-maintenance/mandible.config.d.ts.map +1 -0
  29. package/dist/examples/repo-maintenance/mandible.config.js +34 -0
  30. package/dist/examples/repo-maintenance/mandible.config.js.map +1 -0
  31. package/dist/examples/repo-maintenance/scout.d.ts +39 -0
  32. package/dist/examples/repo-maintenance/scout.d.ts.map +1 -0
  33. package/dist/examples/repo-maintenance/scout.js +163 -0
  34. package/dist/examples/repo-maintenance/scout.js.map +1 -0
  35. package/dist/examples/repo-maintenance/seed.d.ts +3 -0
  36. package/dist/examples/repo-maintenance/seed.d.ts.map +1 -0
  37. package/dist/examples/repo-maintenance/seed.js +169 -0
  38. package/dist/examples/repo-maintenance/seed.js.map +1 -0
  39. package/dist/src/cli/index.d.ts +3 -0
  40. package/dist/src/cli/index.d.ts.map +1 -0
  41. package/dist/src/cli/index.js +116 -0
  42. package/dist/src/cli/index.js.map +1 -0
  43. package/dist/src/cli/server.d.ts +15 -0
  44. package/dist/src/cli/server.d.ts.map +1 -0
  45. package/dist/src/cli/server.js +204 -0
  46. package/dist/src/cli/server.js.map +1 -0
  47. package/dist/src/cloud/client.d.ts +30 -0
  48. package/dist/src/cloud/client.d.ts.map +1 -0
  49. package/dist/src/cloud/client.js +124 -0
  50. package/dist/src/cloud/client.js.map +1 -0
  51. package/dist/src/cloud/index.d.ts +5 -0
  52. package/dist/src/cloud/index.d.ts.map +1 -0
  53. package/dist/src/cloud/index.js +3 -0
  54. package/dist/src/cloud/index.js.map +1 -0
  55. package/dist/src/cloud/types.d.ts +104 -0
  56. package/dist/src/cloud/types.d.ts.map +1 -0
  57. package/dist/src/cloud/types.js +9 -0
  58. package/dist/src/cloud/types.js.map +1 -0
  59. package/dist/src/core/attestation.d.ts +63 -0
  60. package/dist/src/core/attestation.d.ts.map +1 -0
  61. package/dist/src/core/attestation.js +331 -0
  62. package/dist/src/core/attestation.js.map +1 -0
  63. package/dist/src/core/events.d.ts +22 -0
  64. package/dist/src/core/events.d.ts.map +1 -0
  65. package/dist/src/core/events.js +45 -0
  66. package/dist/src/core/events.js.map +1 -0
  67. package/dist/src/core/index.d.ts +8 -0
  68. package/dist/src/core/index.d.ts.map +1 -0
  69. package/dist/src/core/index.js +7 -0
  70. package/dist/src/core/index.js.map +1 -0
  71. package/dist/src/core/runtime.d.ts +57 -0
  72. package/dist/src/core/runtime.d.ts.map +1 -0
  73. package/dist/src/core/runtime.js +564 -0
  74. package/dist/src/core/runtime.js.map +1 -0
  75. package/dist/src/core/signal.d.ts +33 -0
  76. package/dist/src/core/signal.d.ts.map +1 -0
  77. package/dist/src/core/signal.js +127 -0
  78. package/dist/src/core/signal.js.map +1 -0
  79. package/dist/src/core/types.d.ts +395 -0
  80. package/dist/src/core/types.d.ts.map +1 -0
  81. package/dist/src/core/types.js +19 -0
  82. package/dist/src/core/types.js.map +1 -0
  83. package/dist/src/core/validation.d.ts +10 -0
  84. package/dist/src/core/validation.d.ts.map +1 -0
  85. package/dist/src/core/validation.js +40 -0
  86. package/dist/src/core/validation.js.map +1 -0
  87. package/dist/src/dsl/builder.d.ts +63 -0
  88. package/dist/src/dsl/builder.d.ts.map +1 -0
  89. package/dist/src/dsl/builder.js +159 -0
  90. package/dist/src/dsl/builder.js.map +1 -0
  91. package/dist/src/dsl/index.d.ts +2 -0
  92. package/dist/src/dsl/index.d.ts.map +1 -0
  93. package/dist/src/dsl/index.js +2 -0
  94. package/dist/src/dsl/index.js.map +1 -0
  95. package/dist/src/environments/dolt/adapter.d.ts +45 -0
  96. package/dist/src/environments/dolt/adapter.d.ts.map +1 -0
  97. package/dist/src/environments/dolt/adapter.js +128 -0
  98. package/dist/src/environments/dolt/adapter.js.map +1 -0
  99. package/dist/src/environments/dolt/index.d.ts +2 -0
  100. package/dist/src/environments/dolt/index.d.ts.map +1 -0
  101. package/dist/src/environments/dolt/index.js +2 -0
  102. package/dist/src/environments/dolt/index.js.map +1 -0
  103. package/dist/src/environments/filesystem/adapter.d.ts +33 -0
  104. package/dist/src/environments/filesystem/adapter.d.ts.map +1 -0
  105. package/dist/src/environments/filesystem/adapter.js +296 -0
  106. package/dist/src/environments/filesystem/adapter.js.map +1 -0
  107. package/dist/src/environments/filesystem/index.d.ts +2 -0
  108. package/dist/src/environments/filesystem/index.d.ts.map +1 -0
  109. package/dist/src/environments/filesystem/index.js +2 -0
  110. package/dist/src/environments/filesystem/index.js.map +1 -0
  111. package/dist/src/environments/github/adapter.d.ts +47 -0
  112. package/dist/src/environments/github/adapter.d.ts.map +1 -0
  113. package/dist/src/environments/github/adapter.js +324 -0
  114. package/dist/src/environments/github/adapter.js.map +1 -0
  115. package/dist/src/environments/github/client.d.ts +48 -0
  116. package/dist/src/environments/github/client.d.ts.map +1 -0
  117. package/dist/src/environments/github/client.js +151 -0
  118. package/dist/src/environments/github/client.js.map +1 -0
  119. package/dist/src/environments/github/index.d.ts +5 -0
  120. package/dist/src/environments/github/index.d.ts.map +1 -0
  121. package/dist/src/environments/github/index.js +5 -0
  122. package/dist/src/environments/github/index.js.map +1 -0
  123. package/dist/src/environments/github/mapper.d.ts +66 -0
  124. package/dist/src/environments/github/mapper.d.ts.map +1 -0
  125. package/dist/src/environments/github/mapper.js +240 -0
  126. package/dist/src/environments/github/mapper.js.map +1 -0
  127. package/dist/src/environments/github/types.d.ts +71 -0
  128. package/dist/src/environments/github/types.d.ts.map +1 -0
  129. package/dist/src/environments/github/types.js +4 -0
  130. package/dist/src/environments/github/types.js.map +1 -0
  131. package/dist/src/environments/remote/adapter.d.ts +61 -0
  132. package/dist/src/environments/remote/adapter.d.ts.map +1 -0
  133. package/dist/src/environments/remote/adapter.js +392 -0
  134. package/dist/src/environments/remote/adapter.js.map +1 -0
  135. package/dist/src/environments/remote/index.d.ts +5 -0
  136. package/dist/src/environments/remote/index.d.ts.map +1 -0
  137. package/dist/src/environments/remote/index.js +3 -0
  138. package/dist/src/environments/remote/index.js.map +1 -0
  139. package/dist/src/environments/remote/protocol.d.ts +124 -0
  140. package/dist/src/environments/remote/protocol.d.ts.map +1 -0
  141. package/dist/src/environments/remote/protocol.js +24 -0
  142. package/dist/src/environments/remote/protocol.js.map +1 -0
  143. package/dist/src/index.d.ts +25 -0
  144. package/dist/src/index.d.ts.map +1 -0
  145. package/dist/src/index.js +31 -0
  146. package/dist/src/index.js.map +1 -0
  147. package/dist/src/patterns/bridge.d.ts +32 -0
  148. package/dist/src/patterns/bridge.d.ts.map +1 -0
  149. package/dist/src/patterns/bridge.js +163 -0
  150. package/dist/src/patterns/bridge.js.map +1 -0
  151. package/dist/src/patterns/index.d.ts +5 -0
  152. package/dist/src/patterns/index.d.ts.map +1 -0
  153. package/dist/src/patterns/index.js +3 -0
  154. package/dist/src/patterns/index.js.map +1 -0
  155. package/dist/src/patterns/sentinel.d.ts +69 -0
  156. package/dist/src/patterns/sentinel.d.ts.map +1 -0
  157. package/dist/src/patterns/sentinel.js +184 -0
  158. package/dist/src/patterns/sentinel.js.map +1 -0
  159. package/dist/src/providers/agent.d.ts +23 -0
  160. package/dist/src/providers/agent.d.ts.map +1 -0
  161. package/dist/src/providers/agent.js +184 -0
  162. package/dist/src/providers/agent.js.map +1 -0
  163. package/dist/src/providers/bash.d.ts +13 -0
  164. package/dist/src/providers/bash.d.ts.map +1 -0
  165. package/dist/src/providers/bash.js +91 -0
  166. package/dist/src/providers/bash.js.map +1 -0
  167. package/dist/src/providers/claude-code.d.ts +23 -0
  168. package/dist/src/providers/claude-code.d.ts.map +1 -0
  169. package/dist/src/providers/claude-code.js +184 -0
  170. package/dist/src/providers/claude-code.js.map +1 -0
  171. package/dist/src/providers/context.d.ts +12 -0
  172. package/dist/src/providers/context.d.ts.map +1 -0
  173. package/dist/src/providers/context.js +160 -0
  174. package/dist/src/providers/context.js.map +1 -0
  175. package/dist/src/providers/index.d.ts +6 -0
  176. package/dist/src/providers/index.d.ts.map +1 -0
  177. package/dist/src/providers/index.js +7 -0
  178. package/dist/src/providers/index.js.map +1 -0
  179. package/dist/src/providers/structured-output.d.ts +7 -0
  180. package/dist/src/providers/structured-output.d.ts.map +1 -0
  181. package/dist/src/providers/structured-output.js +316 -0
  182. package/dist/src/providers/structured-output.js.map +1 -0
  183. package/dist/src/providers/types.d.ts +239 -0
  184. package/dist/src/providers/types.d.ts.map +1 -0
  185. package/dist/src/providers/types.js +19 -0
  186. package/dist/src/providers/types.js.map +1 -0
  187. package/package.json +129 -0
@@ -0,0 +1,160 @@
1
+ // ============================================================
2
+ // Context Assembly — Building rich prompts from signal lineage
3
+ // ============================================================
4
+ // Agents work better with context. Instead of just passing the
5
+ // raw signal payload to an LLM, context assembly walks the
6
+ // causal chain and pulls in related signals to build a richer
7
+ // prompt.
8
+ //
9
+ // For a Critic reviewing an artifact, this means automatically
10
+ // including:
11
+ // - The original task description (caused_by lineage)
12
+ // - Previous review feedback (sibling signals)
13
+ // - Related artifacts (signals with matching tags)
14
+ //
15
+ // This is what makes stigmergy-based agents smarter than
16
+ // simple reactive systems — they can see the full history
17
+ // of how a signal came to be, even though no agent explicitly
18
+ // passed that context.
19
+ //
20
+ // Usage:
21
+ // const prompt = await assembleContext(signal, env, {
22
+ // includeLineage: true,
23
+ // lineageDepth: 3,
24
+ // includeSiblings: true,
25
+ // includeRelated: ['review:*'],
26
+ // });
27
+ // ============================================================
28
+ /**
29
+ * Assemble rich context from the signal environment.
30
+ * Returns a formatted string suitable for appending to an LLM prompt.
31
+ */
32
+ export async function assembleContext(signal, env, config = {}) {
33
+ const sections = [];
34
+ // Current signal
35
+ sections.push(formatSignalSection('Current Signal', signal));
36
+ // Causal lineage — walk up the caused_by chain
37
+ if (config.includeLineage && signal.meta.caused_by?.length) {
38
+ const lineage = await walkLineage(signal, env, config.lineageDepth ?? 3);
39
+ if (lineage.length > 0) {
40
+ sections.push('## Causal Lineage\n' +
41
+ 'These signals led to the current one:\n\n' +
42
+ lineage.map((s, i) => `${' '.repeat(i)}→ [${s.type}] ${summarizePayload(s.payload)} ` +
43
+ `(by: ${s.meta.deposited_by}, age: ${formatAge(s.meta.deposited_at)})`).join('\n'));
44
+ }
45
+ }
46
+ // Sibling signals — other signals caused by the same parent
47
+ if (config.includeSiblings && signal.meta.caused_by?.length) {
48
+ const siblings = await findSiblings(signal, env);
49
+ if (siblings.length > 0) {
50
+ sections.push('## Related Signals (Same Origin)\n' +
51
+ siblings.map(s => `- [${s.type}] ${summarizePayload(s.payload)} ` +
52
+ `(by: ${s.meta.deposited_by}, conc: ${s.meta.concentration.toFixed(2)})`).join('\n'));
53
+ }
54
+ }
55
+ // Related signals by type pattern
56
+ if (config.includeRelated?.length) {
57
+ for (const pattern of config.includeRelated) {
58
+ const related = await env.observe({ type: pattern, limit: 10 });
59
+ if (related.length > 0) {
60
+ sections.push(`## Related: ${pattern}\n` +
61
+ related.map(s => `- [${s.type}] ${summarizePayload(s.payload)} ` +
62
+ `(by: ${s.meta.deposited_by})`).join('\n'));
63
+ }
64
+ }
65
+ }
66
+ // Custom context builder
67
+ if (config.custom) {
68
+ const custom = await config.custom(signal, env);
69
+ if (custom) {
70
+ sections.push(`## Additional Context\n${custom}`);
71
+ }
72
+ }
73
+ return sections.join('\n\n---\n\n');
74
+ }
75
+ /**
76
+ * Build a complete prompt by combining a base prompt with assembled context.
77
+ */
78
+ export function withContext(config) {
79
+ return async (basePrompt, signal, env) => {
80
+ const context = await assembleContext(signal, env, config);
81
+ return `${basePrompt}\n\n---\n\n# Context from Environment\n\n${context}`;
82
+ };
83
+ }
84
+ // ----------------------------------------------------------
85
+ // Lineage walking
86
+ // ----------------------------------------------------------
87
+ async function walkLineage(signal, env, maxDepth, depth = 0) {
88
+ if (depth >= maxDepth)
89
+ return [];
90
+ if (!signal.meta.caused_by?.length)
91
+ return [];
92
+ const lineage = [];
93
+ for (const parentId of signal.meta.caused_by) {
94
+ // Look in active signals first, then history
95
+ let parent = (await env.observe({ filter: s => s.id === parentId, limit: 1 }))[0];
96
+ if (!parent) {
97
+ parent = (await env.history({ filter: s => s.id === parentId, includeWithdrawn: true, limit: 1 }))[0];
98
+ }
99
+ if (parent) {
100
+ lineage.push(parent);
101
+ // Recurse up the chain
102
+ const ancestors = await walkLineage(parent, env, maxDepth, depth + 1);
103
+ lineage.push(...ancestors);
104
+ }
105
+ }
106
+ return lineage;
107
+ }
108
+ // ----------------------------------------------------------
109
+ // Sibling discovery
110
+ // ----------------------------------------------------------
111
+ async function findSiblings(signal, env) {
112
+ if (!signal.meta.caused_by?.length)
113
+ return [];
114
+ // Find all signals that share the same parent(s)
115
+ const allSignals = await env.observe({});
116
+ const allHistory = await env.history({ includeWithdrawn: true });
117
+ const all = [...allSignals, ...allHistory];
118
+ const parentIds = new Set(signal.meta.caused_by);
119
+ return all.filter(s => s.id !== signal.id &&
120
+ s.meta.caused_by?.some(id => parentIds.has(id)));
121
+ }
122
+ // ----------------------------------------------------------
123
+ // Formatting helpers
124
+ // ----------------------------------------------------------
125
+ function formatSignalSection(title, signal) {
126
+ return [
127
+ `## ${title}`,
128
+ `- **Type:** ${signal.type}`,
129
+ `- **ID:** ${signal.id}`,
130
+ `- **Deposited by:** ${signal.meta.deposited_by}`,
131
+ `- **Age:** ${formatAge(signal.meta.deposited_at)}`,
132
+ `- **Concentration:** ${signal.meta.concentration.toFixed(2)}`,
133
+ signal.meta.tags?.length ? `- **Tags:** ${signal.meta.tags.join(', ')}` : '',
134
+ `- **Payload:**\n\`\`\`json\n${JSON.stringify(signal.payload, null, 2)}\n\`\`\``,
135
+ ].filter(Boolean).join('\n');
136
+ }
137
+ function summarizePayload(payload) {
138
+ const keys = Object.keys(payload);
139
+ if (keys.length === 0)
140
+ return '{}';
141
+ // Show first meaningful value
142
+ for (const key of ['name', 'task', 'description', 'text', 'message', 'code']) {
143
+ if (payload[key] && typeof payload[key] === 'string') {
144
+ const val = payload[key];
145
+ return val.length > 60 ? val.slice(0, 60) + '...' : val;
146
+ }
147
+ }
148
+ return `{${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', ...' : ''}}`;
149
+ }
150
+ function formatAge(depositedAt) {
151
+ const seconds = Math.floor((Date.now() - depositedAt) / 1000);
152
+ if (seconds < 60)
153
+ return `${seconds}s ago`;
154
+ if (seconds < 3600)
155
+ return `${Math.floor(seconds / 60)}m ago`;
156
+ if (seconds < 86400)
157
+ return `${Math.floor(seconds / 3600)}h ago`;
158
+ return `${Math.floor(seconds / 86400)}d ago`;
159
+ }
160
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/providers/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { withClaudeCode, buildDefaultSystemPrompt } from './claude-code.js';
2
+ export { withStructuredOutput } from './structured-output.js';
3
+ export { withBash } from './bash.js';
4
+ export { assembleContext, withContext } from './context.js';
5
+ export type { ActionHandler, ClaudeCodeConfig, AgentResult, StructuredOutputConfig, BashProviderConfig, LLMCallFunction, SignalDeposit, OutputMapping, ContextAssemblyConfig, } from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG5D,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,aAAa,EACb,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ // Action providers
2
+ export { withClaudeCode, buildDefaultSystemPrompt } from './claude-code.js';
3
+ export { withStructuredOutput } from './structured-output.js';
4
+ export { withBash } from './bash.js';
5
+ // Context assembly
6
+ export { assembleContext, withContext } from './context.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { StructuredOutputConfig, ActionHandler } from './types.js';
2
+ /**
3
+ * Creates an action handler that calls an LLM for structured output
4
+ * and routes the result to appropriate signal types.
5
+ */
6
+ export declare function withStructuredOutput<T = Record<string, unknown>, R = Record<string, unknown>>(config: StructuredOutputConfig<T, R>): ActionHandler<T>;
7
+ //# sourceMappingURL=structured-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.d.ts","sourceRoot":"","sources":["../../../src/providers/structured-output.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EAId,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE3B,MAAM,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,GACnC,aAAa,CAAC,CAAC,CAAC,CAwElB"}
@@ -0,0 +1,316 @@
1
+ // ============================================================
2
+ // withStructuredOutput — Multi-provider structured output
3
+ // ============================================================
4
+ // Calls an LLM, validates the response against a schema, and
5
+ // routes the result to different signal types based on content.
6
+ //
7
+ // This is the medium-weight provider — use it for colonies that
8
+ // need LLM judgment but not full tool-use loops (Critics,
9
+ // Classifiers, Routers).
10
+ //
11
+ // Provider-agnostic: works with Anthropic, OpenAI, or any custom
12
+ // LLM function. Pass `provider` to select, or pass a function
13
+ // directly for custom providers.
14
+ //
15
+ // Usage:
16
+ // colony('critic')
17
+ // .do('review', withStructuredOutput({
18
+ // model: 'claude-sonnet-4-5-20250929',
19
+ // provider: 'anthropic',
20
+ // schema: z.object({
21
+ // approved: z.boolean(),
22
+ // feedback: z.string(),
23
+ // severity: z.enum(['minor', 'major', 'blocking']),
24
+ // }),
25
+ // prompt: (signal) => `Review this code:\n${signal.payload.code}`,
26
+ // route: (result) => result.approved
27
+ // ? { type: 'review:approved', payload: result }
28
+ // : { type: 'review:changes-needed', payload: result },
29
+ // }))
30
+ // .build();
31
+ // ============================================================
32
+ /**
33
+ * Creates an action handler that calls an LLM for structured output
34
+ * and routes the result to appropriate signal types.
35
+ */
36
+ export function withStructuredOutput(config) {
37
+ const { model, provider = 'anthropic', prompt, systemPrompt, schema, maxTokens = 4096, temperature = 0, route, autoWithdraw = true, bedrockConfig, } = config;
38
+ return async (signal, ctx) => {
39
+ // 1. Resolve the prompt
40
+ const resolvedPrompt = typeof prompt === 'function'
41
+ ? await prompt(signal)
42
+ : prompt;
43
+ // 2. Build the full prompt with schema instructions
44
+ const fullPrompt = schema
45
+ ? `${resolvedPrompt}\n\nRespond with valid JSON matching this schema:\n${schemaToString(schema)}`
46
+ : resolvedPrompt;
47
+ // 3. Call the LLM
48
+ let result;
49
+ if (typeof provider === 'function') {
50
+ // Custom provider function
51
+ result = await provider(fullPrompt, {
52
+ systemPrompt,
53
+ maxTokens,
54
+ temperature,
55
+ });
56
+ }
57
+ else {
58
+ result = await callProvider(provider, model, fullPrompt, {
59
+ systemPrompt,
60
+ maxTokens,
61
+ temperature,
62
+ schema,
63
+ bedrockConfig,
64
+ });
65
+ }
66
+ // 4. Validate against schema if provided
67
+ if (schema && typeof schema.parse === 'function') {
68
+ try {
69
+ result = schema.parse(result);
70
+ }
71
+ catch (err) {
72
+ ctx.log(`Schema validation failed: ${err.message}`, 'error');
73
+ throw new Error(`Structured output validation failed: ${err.message}`);
74
+ }
75
+ }
76
+ // 5. Route to signal deposits
77
+ const deposits = resolveRoute(route, result, signal);
78
+ for (const deposit of deposits) {
79
+ await ctx.deposit(deposit.type, deposit.payload ?? result, {
80
+ causedBy: [signal.id],
81
+ tags: deposit.tags,
82
+ ttl: deposit.ttl,
83
+ });
84
+ }
85
+ // 6. Withdraw
86
+ if (autoWithdraw) {
87
+ await ctx.withdraw(signal.id);
88
+ }
89
+ ctx.log(`Structured output completed. Deposited ${deposits.length} signal(s).`);
90
+ };
91
+ }
92
+ // ----------------------------------------------------------
93
+ // Provider implementations
94
+ // ----------------------------------------------------------
95
+ async function callProvider(provider, model, prompt, options) {
96
+ switch (provider) {
97
+ case 'anthropic':
98
+ return callAnthropic(model, prompt, options);
99
+ case 'bedrock':
100
+ return callBedrock(model, prompt, options);
101
+ case 'openai':
102
+ return callOpenAI(model, prompt, options);
103
+ case 'vercel-ai':
104
+ return callVercelAI(model, prompt, options);
105
+ default:
106
+ throw new Error(`Unknown provider: ${provider}. Use 'anthropic', 'bedrock', 'openai', 'vercel-ai', or pass a custom function.`);
107
+ }
108
+ }
109
+ async function callAnthropic(model, prompt, options) {
110
+ try {
111
+ const { default: Anthropic } = await import('@anthropic-ai/sdk');
112
+ const client = new Anthropic();
113
+ const response = await client.messages.create({
114
+ model,
115
+ max_tokens: options.maxTokens ?? 4096,
116
+ ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
117
+ ...(options.systemPrompt ? { system: options.systemPrompt } : {}),
118
+ messages: [{ role: 'user', content: prompt }],
119
+ });
120
+ // Extract text and parse as JSON
121
+ const text = response.content
122
+ .filter((block) => block.type === 'text')
123
+ .map((block) => block.text)
124
+ .join('');
125
+ return parseJsonResponse(text);
126
+ }
127
+ catch (err) {
128
+ if (err.code === 'MODULE_NOT_FOUND' || err.code === 'ERR_MODULE_NOT_FOUND') {
129
+ throw new Error('Anthropic provider requires @anthropic-ai/sdk. Install it:\n' +
130
+ ' npm install @anthropic-ai/sdk');
131
+ }
132
+ throw err;
133
+ }
134
+ }
135
+ async function callBedrock(model, prompt, options) {
136
+ if (!options.bedrockConfig) {
137
+ throw new Error("Bedrock provider requires bedrockConfig. Pass { provider: 'bedrock', bedrockConfig: { region: '...' } }.");
138
+ }
139
+ try {
140
+ // @ts-expect-error — optional peer dependency, may not be installed
141
+ const { default: AnthropicBedrock } = await import('@anthropic-ai/bedrock-sdk');
142
+ const clientOptions = {
143
+ awsRegion: options.bedrockConfig.region,
144
+ };
145
+ if (options.bedrockConfig.accessKeyId)
146
+ clientOptions.awsAccessKey = options.bedrockConfig.accessKeyId;
147
+ if (options.bedrockConfig.secretAccessKey)
148
+ clientOptions.awsSecretKey = options.bedrockConfig.secretAccessKey;
149
+ if (options.bedrockConfig.sessionToken)
150
+ clientOptions.awsSessionToken = options.bedrockConfig.sessionToken;
151
+ if (options.bedrockConfig.profile)
152
+ clientOptions.awsProfile = options.bedrockConfig.profile;
153
+ const client = new AnthropicBedrock(clientOptions);
154
+ const requestOptions = {
155
+ model: options.bedrockConfig.model ?? model,
156
+ max_tokens: options.maxTokens ?? 4096,
157
+ messages: [{ role: 'user', content: prompt }],
158
+ };
159
+ if (options.temperature !== undefined)
160
+ requestOptions.temperature = options.temperature;
161
+ if (options.systemPrompt)
162
+ requestOptions.system = options.systemPrompt;
163
+ const response = await client.messages.create(requestOptions);
164
+ const text = response.content
165
+ .filter((block) => block.type === 'text')
166
+ .map((block) => block.text)
167
+ .join('');
168
+ return parseJsonResponse(text);
169
+ }
170
+ catch (err) {
171
+ if (err.code === 'MODULE_NOT_FOUND' || err.code === 'ERR_MODULE_NOT_FOUND') {
172
+ throw new Error('Bedrock provider requires @anthropic-ai/bedrock-sdk. Install it:\n' +
173
+ ' npm install @anthropic-ai/bedrock-sdk');
174
+ }
175
+ throw err;
176
+ }
177
+ }
178
+ async function callOpenAI(model, prompt, options) {
179
+ try {
180
+ const { default: OpenAI } = await import('openai');
181
+ const client = new OpenAI();
182
+ const messages = [];
183
+ if (options.systemPrompt) {
184
+ messages.push({ role: 'system', content: options.systemPrompt });
185
+ }
186
+ messages.push({ role: 'user', content: prompt });
187
+ // Use structured output if schema is available and model supports it
188
+ const response = await client.chat.completions.create({
189
+ model,
190
+ messages,
191
+ max_tokens: options.maxTokens ?? 4096,
192
+ temperature: options.temperature ?? 0,
193
+ response_format: { type: 'json_object' },
194
+ });
195
+ const text = response.choices[0]?.message?.content ?? '{}';
196
+ return parseJsonResponse(text);
197
+ }
198
+ catch (err) {
199
+ if (err.code === 'MODULE_NOT_FOUND' || err.code === 'ERR_MODULE_NOT_FOUND') {
200
+ throw new Error('OpenAI provider requires openai. Install it:\n' +
201
+ ' npm install openai');
202
+ }
203
+ throw err;
204
+ }
205
+ }
206
+ async function callVercelAI(model, prompt, options) {
207
+ try {
208
+ const { generateObject, generateText } = await import('ai');
209
+ // If we have a Zod schema, use generateObject for validated structured output
210
+ if (options.schema) {
211
+ // Vercel AI SDK needs a model instance, not a string.
212
+ // The caller should configure the model provider externally.
213
+ // For now, try to auto-detect based on model name.
214
+ const modelInstance = await resolveVercelModel(model);
215
+ const { object } = await generateObject({
216
+ model: modelInstance,
217
+ schema: options.schema,
218
+ prompt,
219
+ ...(options.systemPrompt ? { system: options.systemPrompt } : {}),
220
+ ...(options.maxTokens ? { maxTokens: options.maxTokens } : {}),
221
+ ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
222
+ });
223
+ return object;
224
+ }
225
+ // Fallback to text generation + JSON parse
226
+ const modelInstance = await resolveVercelModel(model);
227
+ const { text } = await generateText({
228
+ model: modelInstance,
229
+ prompt,
230
+ ...(options.systemPrompt ? { system: options.systemPrompt } : {}),
231
+ ...(options.maxTokens ? { maxTokens: options.maxTokens } : {}),
232
+ ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
233
+ });
234
+ return parseJsonResponse(text);
235
+ }
236
+ catch (err) {
237
+ if (err.code === 'MODULE_NOT_FOUND' || err.code === 'ERR_MODULE_NOT_FOUND') {
238
+ throw new Error('Vercel AI provider requires ai and a model provider. Install them:\n' +
239
+ ' npm install ai @ai-sdk/anthropic\n' +
240
+ ' # or: npm install ai @ai-sdk/openai');
241
+ }
242
+ throw err;
243
+ }
244
+ }
245
+ /**
246
+ * Resolve a model string to a Vercel AI SDK model instance.
247
+ * Auto-detects provider based on model name prefix.
248
+ */
249
+ async function resolveVercelModel(model) {
250
+ if (model.startsWith('claude') || model.startsWith('anthropic/')) {
251
+ const { anthropic } = await import('@ai-sdk/anthropic');
252
+ return anthropic(model.replace('anthropic/', ''));
253
+ }
254
+ if (model.startsWith('gpt') || model.startsWith('openai/')) {
255
+ const { openai } = await import('@ai-sdk/openai');
256
+ return openai(model.replace('openai/', ''));
257
+ }
258
+ if (model.startsWith('gemini') || model.startsWith('google/')) {
259
+ const { google } = await import('@ai-sdk/google');
260
+ return google(model.replace('google/', ''));
261
+ }
262
+ // Default to Anthropic
263
+ const { anthropic } = await import('@ai-sdk/anthropic');
264
+ return anthropic(model);
265
+ }
266
+ // ----------------------------------------------------------
267
+ // Helpers
268
+ // ----------------------------------------------------------
269
+ function parseJsonResponse(text) {
270
+ // Try to extract JSON from the response (handles markdown code blocks)
271
+ const jsonMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/) ?? [null, text];
272
+ const jsonStr = (jsonMatch[1] ?? text).trim();
273
+ try {
274
+ return JSON.parse(jsonStr);
275
+ }
276
+ catch {
277
+ throw new Error(`Failed to parse LLM response as JSON.\nResponse:\n${text.slice(0, 500)}`);
278
+ }
279
+ }
280
+ function schemaToString(schema) {
281
+ // If it's a Zod schema, try to get its description
282
+ if (typeof schema.describe === 'function') {
283
+ return JSON.stringify(schema.describe(), null, 2);
284
+ }
285
+ // If it has a shape (Zod object), describe the shape
286
+ if (schema._def?.shape) {
287
+ const shape = {};
288
+ for (const [key, val] of Object.entries(schema._def.shape())) {
289
+ shape[key] = describeZodType(val);
290
+ }
291
+ return JSON.stringify(shape, null, 2);
292
+ }
293
+ return String(schema);
294
+ }
295
+ function describeZodType(zodType) {
296
+ const def = zodType?._def;
297
+ if (!def)
298
+ return 'unknown';
299
+ switch (def.typeName) {
300
+ case 'ZodString': return 'string';
301
+ case 'ZodNumber': return 'number';
302
+ case 'ZodBoolean': return 'boolean';
303
+ case 'ZodEnum': return `enum(${def.values.join(' | ')})`;
304
+ case 'ZodArray': return `array<${describeZodType(def.type)}>`;
305
+ case 'ZodOptional': return `${describeZodType(def.innerType)}?`;
306
+ default: return def.typeName ?? 'unknown';
307
+ }
308
+ }
309
+ function resolveRoute(route, result, signal) {
310
+ if (typeof route === 'string') {
311
+ return [{ type: route, payload: result }];
312
+ }
313
+ const mapped = route(result, signal);
314
+ return Array.isArray(mapped) ? mapped : [mapped];
315
+ }
316
+ //# sourceMappingURL=structured-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.js","sourceRoot":"","sources":["../../../src/providers/structured-output.ts"],"names":[],"mappings":"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"}