@contractspec/lib.ai-agent 1.57.0 → 1.59.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 (232) hide show
  1. package/dist/agent/agent-factory.d.ts +67 -71
  2. package/dist/agent/agent-factory.d.ts.map +1 -1
  3. package/dist/agent/agent-factory.js +658 -100
  4. package/dist/agent/agent.test.d.ts +2 -0
  5. package/dist/agent/agent.test.d.ts.map +1 -0
  6. package/dist/agent/contract-spec-agent.d.ts +48 -52
  7. package/dist/agent/contract-spec-agent.d.ts.map +1 -1
  8. package/dist/agent/contract-spec-agent.js +605 -146
  9. package/dist/agent/index.d.ts +4 -4
  10. package/dist/agent/index.d.ts.map +1 -0
  11. package/dist/agent/index.js +2102 -4
  12. package/dist/agent/json-runner.d.ts +15 -19
  13. package/dist/agent/json-runner.d.ts.map +1 -1
  14. package/dist/agent/json-runner.js +672 -57
  15. package/dist/agent/json-runner.test.d.ts +2 -0
  16. package/dist/agent/json-runner.test.d.ts.map +1 -0
  17. package/dist/agent/unified-agent.d.ts +132 -109
  18. package/dist/agent/unified-agent.d.ts.map +1 -1
  19. package/dist/agent/unified-agent.js +2011 -293
  20. package/dist/approval/index.d.ts +3 -2
  21. package/dist/approval/index.d.ts.map +1 -0
  22. package/dist/approval/index.js +128 -2
  23. package/dist/approval/workflow.d.ts +106 -110
  24. package/dist/approval/workflow.d.ts.map +1 -1
  25. package/dist/approval/workflow.js +126 -157
  26. package/dist/exporters/claude-agent-exporter.d.ts +50 -48
  27. package/dist/exporters/claude-agent-exporter.d.ts.map +1 -1
  28. package/dist/exporters/claude-agent-exporter.js +258 -203
  29. package/dist/exporters/index.d.ts +28 -4
  30. package/dist/exporters/index.d.ts.map +1 -0
  31. package/dist/exporters/index.js +737 -3
  32. package/dist/exporters/opencode-exporter.d.ts +47 -45
  33. package/dist/exporters/opencode-exporter.d.ts.map +1 -1
  34. package/dist/exporters/opencode-exporter.js +507 -191
  35. package/dist/exporters/types.d.ts +171 -169
  36. package/dist/exporters/types.d.ts.map +1 -1
  37. package/dist/exporters/types.js +1 -0
  38. package/dist/index.d.ts +15 -39
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +3337 -32
  41. package/dist/interop/index.d.ts +48 -4
  42. package/dist/interop/index.d.ts.map +1 -0
  43. package/dist/interop/index.js +709 -3
  44. package/dist/interop/spec-consumer.d.ts +57 -53
  45. package/dist/interop/spec-consumer.d.ts.map +1 -1
  46. package/dist/interop/spec-consumer.js +302 -282
  47. package/dist/interop/tool-consumer.d.ts +57 -53
  48. package/dist/interop/tool-consumer.d.ts.map +1 -1
  49. package/dist/interop/tool-consumer.js +412 -213
  50. package/dist/interop/types.d.ts +173 -171
  51. package/dist/interop/types.d.ts.map +1 -1
  52. package/dist/interop/types.js +1 -0
  53. package/dist/knowledge/index.d.ts +2 -2
  54. package/dist/knowledge/index.d.ts.map +1 -0
  55. package/dist/knowledge/index.js +66 -2
  56. package/dist/knowledge/injector.d.ts +16 -20
  57. package/dist/knowledge/injector.d.ts.map +1 -1
  58. package/dist/knowledge/injector.js +56 -47
  59. package/dist/memory/in-memory.d.ts +15 -19
  60. package/dist/memory/in-memory.d.ts.map +1 -1
  61. package/dist/memory/in-memory.js +152 -46
  62. package/dist/memory/index.d.ts +3 -3
  63. package/dist/memory/index.d.ts.map +1 -0
  64. package/dist/memory/index.js +155 -3
  65. package/dist/memory/manager.d.ts +32 -36
  66. package/dist/memory/manager.d.ts.map +1 -1
  67. package/dist/memory/manager.js +96 -70
  68. package/dist/memory/memory.test.d.ts +2 -0
  69. package/dist/memory/memory.test.d.ts.map +1 -0
  70. package/dist/node/agent/agent-factory.js +661 -0
  71. package/dist/node/agent/contract-spec-agent.js +607 -0
  72. package/dist/node/agent/index.js +2103 -0
  73. package/dist/node/agent/json-runner.js +684 -0
  74. package/dist/node/agent/unified-agent.js +2019 -0
  75. package/dist/node/approval/index.js +129 -0
  76. package/dist/node/approval/workflow.js +129 -0
  77. package/dist/node/exporters/claude-agent-exporter.js +265 -0
  78. package/dist/node/exporters/index.js +738 -0
  79. package/dist/node/exporters/opencode-exporter.js +516 -0
  80. package/dist/node/exporters/types.js +0 -0
  81. package/dist/node/index.js +3337 -0
  82. package/dist/node/interop/index.js +710 -0
  83. package/dist/node/interop/spec-consumer.js +307 -0
  84. package/dist/node/interop/tool-consumer.js +419 -0
  85. package/dist/node/interop/types.js +0 -0
  86. package/dist/node/knowledge/index.js +67 -0
  87. package/dist/node/knowledge/injector.js +67 -0
  88. package/dist/node/memory/in-memory.js +154 -0
  89. package/dist/node/memory/index.js +156 -0
  90. package/dist/node/memory/manager.js +105 -0
  91. package/dist/node/providers/claude-agent-sdk/adapter.js +624 -0
  92. package/dist/node/providers/claude-agent-sdk/index.js +673 -0
  93. package/dist/node/providers/claude-agent-sdk/session-bridge.js +149 -0
  94. package/dist/node/providers/claude-agent-sdk/tool-bridge.js +118 -0
  95. package/dist/node/providers/index.js +1261 -0
  96. package/dist/node/providers/opencode-sdk/adapter.js +669 -0
  97. package/dist/node/providers/opencode-sdk/agent-bridge.js +299 -0
  98. package/dist/node/providers/opencode-sdk/index.js +703 -0
  99. package/dist/node/providers/opencode-sdk/tool-bridge.js +141 -0
  100. package/dist/node/providers/registry.js +89 -0
  101. package/dist/node/providers/types.js +56 -0
  102. package/dist/node/schema/index.js +195 -0
  103. package/dist/node/schema/json-schema-to-zod.js +152 -0
  104. package/dist/node/schema/schema-output.js +190 -0
  105. package/dist/node/session/index.js +90 -0
  106. package/dist/node/session/store.js +90 -0
  107. package/dist/node/spec/index.js +85 -0
  108. package/dist/node/spec/registry.js +56 -0
  109. package/dist/node/spec/spec.js +44 -0
  110. package/dist/node/telemetry/adapter.js +85 -0
  111. package/dist/node/telemetry/index.js +86 -0
  112. package/dist/node/tools/index.js +345 -0
  113. package/dist/node/tools/knowledge-tool.js +74 -0
  114. package/dist/node/tools/mcp-client.js +47 -0
  115. package/dist/node/tools/mcp-server.js +205 -0
  116. package/dist/node/tools/tool-adapter.js +197 -0
  117. package/dist/node/types.js +0 -0
  118. package/dist/providers/claude-agent-sdk/adapter.d.ts +60 -52
  119. package/dist/providers/claude-agent-sdk/adapter.d.ts.map +1 -1
  120. package/dist/providers/claude-agent-sdk/adapter.js +622 -304
  121. package/dist/providers/claude-agent-sdk/index.d.ts +22 -4
  122. package/dist/providers/claude-agent-sdk/index.d.ts.map +1 -0
  123. package/dist/providers/claude-agent-sdk/index.js +672 -4
  124. package/dist/providers/claude-agent-sdk/session-bridge.d.ts +43 -40
  125. package/dist/providers/claude-agent-sdk/session-bridge.d.ts.map +1 -1
  126. package/dist/providers/claude-agent-sdk/session-bridge.js +121 -130
  127. package/dist/providers/claude-agent-sdk/tool-bridge.d.ts +63 -60
  128. package/dist/providers/claude-agent-sdk/tool-bridge.d.ts.map +1 -1
  129. package/dist/providers/claude-agent-sdk/tool-bridge.js +104 -108
  130. package/dist/providers/index.d.ts +28 -7
  131. package/dist/providers/index.d.ts.map +1 -0
  132. package/dist/providers/index.js +1261 -8
  133. package/dist/providers/opencode-sdk/adapter.d.ts +56 -48
  134. package/dist/providers/opencode-sdk/adapter.d.ts.map +1 -1
  135. package/dist/providers/opencode-sdk/adapter.js +667 -274
  136. package/dist/providers/opencode-sdk/agent-bridge.d.ts +62 -57
  137. package/dist/providers/opencode-sdk/agent-bridge.d.ts.map +1 -1
  138. package/dist/providers/opencode-sdk/agent-bridge.js +289 -155
  139. package/dist/providers/opencode-sdk/index.d.ts +22 -4
  140. package/dist/providers/opencode-sdk/index.d.ts.map +1 -0
  141. package/dist/providers/opencode-sdk/index.js +702 -4
  142. package/dist/providers/opencode-sdk/tool-bridge.d.ts +41 -42
  143. package/dist/providers/opencode-sdk/tool-bridge.d.ts.map +1 -1
  144. package/dist/providers/opencode-sdk/tool-bridge.js +121 -107
  145. package/dist/providers/registry.d.ts +10 -11
  146. package/dist/providers/registry.d.ts.map +1 -1
  147. package/dist/providers/registry.js +86 -49
  148. package/dist/providers/types.d.ts +169 -166
  149. package/dist/providers/types.d.ts.map +1 -1
  150. package/dist/providers/types.js +54 -42
  151. package/dist/schema/index.d.ts +3 -3
  152. package/dist/schema/index.d.ts.map +1 -0
  153. package/dist/schema/index.js +194 -3
  154. package/dist/schema/json-schema-to-zod.d.ts +23 -26
  155. package/dist/schema/json-schema-to-zod.d.ts.map +1 -1
  156. package/dist/schema/json-schema-to-zod.js +138 -110
  157. package/dist/schema/schema-output.d.ts +29 -32
  158. package/dist/schema/schema-output.d.ts.map +1 -1
  159. package/dist/schema/schema-output.js +178 -53
  160. package/dist/session/index.d.ts +2 -2
  161. package/dist/session/index.d.ts.map +1 -0
  162. package/dist/session/index.js +89 -2
  163. package/dist/session/store.d.ts +51 -55
  164. package/dist/session/store.d.ts.map +1 -1
  165. package/dist/session/store.js +85 -74
  166. package/dist/spec/index.d.ts +3 -3
  167. package/dist/spec/index.d.ts.map +1 -0
  168. package/dist/spec/index.js +84 -3
  169. package/dist/spec/registry.d.ts +32 -36
  170. package/dist/spec/registry.d.ts.map +1 -1
  171. package/dist/spec/registry.js +51 -60
  172. package/dist/spec/spec.d.ts +80 -84
  173. package/dist/spec/spec.d.ts.map +1 -1
  174. package/dist/spec/spec.js +40 -26
  175. package/dist/telemetry/adapter.d.ts +33 -37
  176. package/dist/telemetry/adapter.d.ts.map +1 -1
  177. package/dist/telemetry/adapter.js +78 -96
  178. package/dist/telemetry/index.d.ts +2 -2
  179. package/dist/telemetry/index.d.ts.map +1 -0
  180. package/dist/telemetry/index.js +85 -2
  181. package/dist/tools/index.d.ts +5 -5
  182. package/dist/tools/index.d.ts.map +1 -0
  183. package/dist/tools/index.js +344 -5
  184. package/dist/tools/knowledge-tool.d.ts +4 -8
  185. package/dist/tools/knowledge-tool.d.ts.map +1 -1
  186. package/dist/tools/knowledge-tool.js +68 -48
  187. package/dist/tools/mcp-client.d.ts +17 -21
  188. package/dist/tools/mcp-client.d.ts.map +1 -1
  189. package/dist/tools/mcp-client.js +42 -53
  190. package/dist/tools/mcp-server.d.ts +14 -18
  191. package/dist/tools/mcp-server.d.ts.map +1 -1
  192. package/dist/tools/mcp-server.js +200 -64
  193. package/dist/tools/tool-adapter.d.ts +7 -11
  194. package/dist/tools/tool-adapter.d.ts.map +1 -1
  195. package/dist/tools/tool-adapter.js +187 -70
  196. package/dist/tools/tools.test.d.ts +2 -0
  197. package/dist/tools/tools.test.d.ts.map +1 -0
  198. package/dist/types.d.ts +108 -111
  199. package/dist/types.d.ts.map +1 -1
  200. package/dist/types.js +1 -0
  201. package/package.json +448 -90
  202. package/dist/_virtual/_rolldown/runtime.js +0 -8
  203. package/dist/agent/agent-factory.js.map +0 -1
  204. package/dist/agent/contract-spec-agent.js.map +0 -1
  205. package/dist/agent/json-runner.js.map +0 -1
  206. package/dist/agent/unified-agent.js.map +0 -1
  207. package/dist/approval/workflow.js.map +0 -1
  208. package/dist/exporters/claude-agent-exporter.js.map +0 -1
  209. package/dist/exporters/opencode-exporter.js.map +0 -1
  210. package/dist/interop/spec-consumer.js.map +0 -1
  211. package/dist/interop/tool-consumer.js.map +0 -1
  212. package/dist/knowledge/injector.js.map +0 -1
  213. package/dist/memory/in-memory.js.map +0 -1
  214. package/dist/memory/manager.js.map +0 -1
  215. package/dist/providers/claude-agent-sdk/adapter.js.map +0 -1
  216. package/dist/providers/claude-agent-sdk/session-bridge.js.map +0 -1
  217. package/dist/providers/claude-agent-sdk/tool-bridge.js.map +0 -1
  218. package/dist/providers/opencode-sdk/adapter.js.map +0 -1
  219. package/dist/providers/opencode-sdk/agent-bridge.js.map +0 -1
  220. package/dist/providers/opencode-sdk/tool-bridge.js.map +0 -1
  221. package/dist/providers/registry.js.map +0 -1
  222. package/dist/providers/types.js.map +0 -1
  223. package/dist/schema/json-schema-to-zod.js.map +0 -1
  224. package/dist/schema/schema-output.js.map +0 -1
  225. package/dist/session/store.js.map +0 -1
  226. package/dist/spec/registry.js.map +0 -1
  227. package/dist/spec/spec.js.map +0 -1
  228. package/dist/telemetry/adapter.js.map +0 -1
  229. package/dist/tools/knowledge-tool.js.map +0 -1
  230. package/dist/tools/mcp-client.js.map +0 -1
  231. package/dist/tools/mcp-server.js.map +0 -1
  232. package/dist/tools/tool-adapter.js.map +0 -1
@@ -1,56 +1,63 @@
1
- import { AgentSpec } from "../../spec/spec.js";
2
- import { OpenCodeAgentType } from "../types.js";
3
- import { OpenCodeTool } from "./tool-bridge.js";
4
-
5
- //#region src/providers/opencode-sdk/agent-bridge.d.ts
1
+ /**
2
+ * Agent bridge for mapping between ContractSpec AgentSpec and OpenCode agent configuration.
3
+ *
4
+ * OpenCode has four built-in agent types:
5
+ * - build: Primary agent with all tools enabled (default for code generation)
6
+ * - plan: Restricted agent for analysis/planning (file edits and bash in "ask" mode)
7
+ * - general: Subagent for complex questions and multi-step tasks
8
+ * - explore: Fast subagent for codebase exploration
9
+ */
10
+ import type { AgentSpec } from '../../spec/spec';
11
+ import type { OpenCodeAgentType } from '../types';
12
+ import { type OpenCodeTool } from './tool-bridge';
6
13
  /**
7
14
  * OpenCode agent configuration in JSON format.
8
15
  */
9
- interface OpenCodeAgentJSON {
10
- /** Agent name */
11
- name: string;
12
- /** Agent version */
13
- version?: string;
14
- /** Agent description */
15
- description?: string;
16
- /** System instructions */
17
- instructions?: string;
18
- /** Agent type */
19
- agent_type: OpenCodeAgentType;
20
- /** Available tools */
21
- tools?: OpenCodeTool[];
22
- /** Configuration options */
23
- config?: OpenCodeAgentConfig;
16
+ export interface OpenCodeAgentJSON {
17
+ /** Agent name */
18
+ name: string;
19
+ /** Agent version */
20
+ version?: string;
21
+ /** Agent description */
22
+ description?: string;
23
+ /** System instructions */
24
+ instructions?: string;
25
+ /** Agent type */
26
+ agent_type: OpenCodeAgentType;
27
+ /** Available tools */
28
+ tools?: OpenCodeTool[];
29
+ /** Configuration options */
30
+ config?: OpenCodeAgentConfig;
24
31
  }
25
32
  /**
26
33
  * OpenCode agent configuration options.
27
34
  */
28
- interface OpenCodeAgentConfig {
29
- /** Maximum agentic iterations */
30
- max_steps?: number;
31
- /** Temperature for generation */
32
- temperature?: number;
33
- /** Model to use */
34
- model?: string;
35
- /** Tool permissions */
36
- permissions?: Record<string, 'allow' | 'ask' | 'deny'>;
35
+ export interface OpenCodeAgentConfig {
36
+ /** Maximum agentic iterations */
37
+ max_steps?: number;
38
+ /** Temperature for generation */
39
+ temperature?: number;
40
+ /** Model to use */
41
+ model?: string;
42
+ /** Tool permissions */
43
+ permissions?: Record<string, 'allow' | 'ask' | 'deny'>;
37
44
  }
38
45
  /**
39
46
  * OpenCode agent markdown format (for .opencode/agent/*.md files).
40
47
  */
41
- interface OpenCodeAgentMarkdown {
42
- /** Frontmatter */
43
- frontmatter: {
44
- name: string;
45
- type: OpenCodeAgentType;
46
- version?: string;
47
- model?: string;
48
- temperature?: number;
49
- max_steps?: number;
50
- tools?: string[];
51
- };
52
- /** Body content */
53
- body: string;
48
+ export interface OpenCodeAgentMarkdown {
49
+ /** Frontmatter */
50
+ frontmatter: {
51
+ name: string;
52
+ type: OpenCodeAgentType;
53
+ version?: string;
54
+ model?: string;
55
+ temperature?: number;
56
+ max_steps?: number;
57
+ tools?: string[];
58
+ };
59
+ /** Body content */
60
+ body: string;
54
61
  }
55
62
  /**
56
63
  * Infer the appropriate OpenCode agent type from an AgentSpec.
@@ -60,34 +67,32 @@ interface OpenCodeAgentMarkdown {
60
67
  * - Instructions content (planning keywords → plan)
61
68
  * - Exploration keywords (search, find → explore)
62
69
  */
63
- declare function inferAgentType(spec: AgentSpec): OpenCodeAgentType;
70
+ export declare function inferAgentType(spec: AgentSpec): OpenCodeAgentType;
64
71
  /**
65
72
  * Convert an AgentSpec to OpenCode agent JSON configuration.
66
73
  */
67
- declare function specToOpenCodeConfig(spec: AgentSpec, options?: {
68
- agentType?: OpenCodeAgentType;
69
- model?: string;
70
- temperature?: number;
71
- maxSteps?: number;
74
+ export declare function specToOpenCodeConfig(spec: AgentSpec, options?: {
75
+ agentType?: OpenCodeAgentType;
76
+ model?: string;
77
+ temperature?: number;
78
+ maxSteps?: number;
72
79
  }): OpenCodeAgentJSON;
73
80
  /**
74
81
  * Convert an AgentSpec to OpenCode agent markdown format.
75
82
  */
76
- declare function specToOpenCodeMarkdown(spec: AgentSpec, options?: {
77
- agentType?: OpenCodeAgentType;
78
- model?: string;
79
- temperature?: number;
80
- maxSteps?: number;
83
+ export declare function specToOpenCodeMarkdown(spec: AgentSpec, options?: {
84
+ agentType?: OpenCodeAgentType;
85
+ model?: string;
86
+ temperature?: number;
87
+ maxSteps?: number;
81
88
  }): OpenCodeAgentMarkdown;
82
89
  /**
83
90
  * Serialize OpenCode agent markdown to string.
84
91
  */
85
- declare function serializeOpenCodeMarkdown(markdown: OpenCodeAgentMarkdown): string;
92
+ export declare function serializeOpenCodeMarkdown(markdown: OpenCodeAgentMarkdown): string;
86
93
  /**
87
94
  * Convert OpenCode agent configuration to partial AgentSpec.
88
95
  * Note: This is a partial conversion as OpenCode config may not have all spec fields.
89
96
  */
90
- declare function openCodeConfigToSpec(config: OpenCodeAgentJSON): Partial<AgentSpec>;
91
- //#endregion
92
- export { OpenCodeAgentConfig, OpenCodeAgentJSON, OpenCodeAgentMarkdown, inferAgentType, openCodeConfigToSpec, serializeOpenCodeMarkdown, specToOpenCodeConfig, specToOpenCodeMarkdown };
97
+ export declare function openCodeConfigToSpec(config: OpenCodeAgentJSON): Partial<AgentSpec>;
93
98
  //# sourceMappingURL=agent-bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-bridge.d.ts","names":[],"sources":["../../../src/providers/opencode-sdk/agent-bridge.ts"],"mappings":";;;;;;;;UAqBiB,iBAAA;EAQf;EANA,IAAA;EAQY;EANZ,OAAA;EAQQ;EANR,WAAA;EAQS;EANT,YAAA;EAM4B;EAJ5B,UAAA,EAAY,iBAAA;EAUsB;EARlC,KAAA,GAAQ,YAAA;EAgBY;EAdpB,MAAA,GAAS,mBAAA;AAAA;;;;UAMM,mBAAA;EAQK;EANpB,SAAA;EAYoC;EAVpC,WAAA;EAcyB;EAZzB,KAAA;EAWE;EATF,WAAA,GAAc,MAAA;AAAA;;;;UAMC,qBAAA;EASb;EAPF,WAAA;IACE,IAAA;IACA,IAAA,EAAM,iBAAA;IACN,OAAA;IACA,KAAA;IACA,WAAA;IACA,SAAA;IACA,KAAA;EAAA;EAkB6C;EAf/C,IAAA;AAAA;AAyEF;;;;;;;;AAAA,iBA1DgB,cAAA,CAAe,IAAA,EAAM,SAAA,GAAY,iBAAA;;;;iBA0DjC,oBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA;EACE,SAAA,GAAY,iBAAA;EACZ,KAAA;EACA,WAAA;EACA,QAAA;AAAA,IAED,iBAAA;;AA2CH;;iBAAgB,sBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA;EACE,SAAA,GAAY,iBAAA;EACZ,KAAA;EACA,WAAA;EACA,QAAA;AAAA,IAED,qBAAA;;;;iBAyEa,yBAAA,CACd,QAAA,EAAU,qBAAA;;;;;iBA+CI,oBAAA,CACd,MAAA,EAAQ,iBAAA,GACP,OAAA,CAAQ,SAAA"}
1
+ {"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode-sdk/agent-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAM5E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,sBAAsB;IACtB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kBAAkB;IAClB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,iBAAiB,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,iBAAiB,CAiDjE;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,iBAAiB,CAiBnB;AAuBD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,qBAAqB,CAevB;AAuDD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,CAoCR;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,SAAS,CAAC,CAuBpB"}
@@ -1,165 +1,299 @@
1
- import { specToolsToOpenCodeTools } from "./tool-bridge.js";
1
+ // @bun
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true,
8
+ configurable: true,
9
+ set: (newValue) => all[name] = () => newValue
10
+ });
11
+ };
12
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
13
+ var __require = import.meta.require;
2
14
 
3
- //#region src/providers/opencode-sdk/agent-bridge.ts
4
- /**
5
- * Infer the appropriate OpenCode agent type from an AgentSpec.
6
- *
7
- * The inference is based on:
8
- * - Tool capabilities (file editing, bash execution → build)
9
- * - Instructions content (planning keywords → plan)
10
- * - Exploration keywords (search, find → explore)
11
- */
15
+ // src/providers/opencode-sdk/tool-bridge.ts
16
+ function specToolToOpenCodeTool(tool) {
17
+ return {
18
+ name: tool.name,
19
+ description: tool.description ?? `Execute ${tool.name}`,
20
+ parameters: normalizeToOpenCodeParameters(tool.schema),
21
+ permission: getPermissionLevel(tool)
22
+ };
23
+ }
24
+ function specToolsToOpenCodeTools(tools) {
25
+ return tools.map(specToolToOpenCodeTool);
26
+ }
27
+ function getPermissionLevel(tool) {
28
+ if (tool.requiresApproval) {
29
+ return "ask";
30
+ }
31
+ if (tool.automationSafe === false) {
32
+ return "ask";
33
+ }
34
+ return "allow";
35
+ }
36
+ function openCodeToolToSpecTool(openCodeTool) {
37
+ return {
38
+ name: openCodeTool.name,
39
+ description: openCodeTool.description,
40
+ schema: openCodeTool.parameters,
41
+ requiresApproval: openCodeTool.permission === "ask",
42
+ automationSafe: openCodeTool.permission === "allow"
43
+ };
44
+ }
45
+ function openCodeToolsToSpecTools(openCodeTools) {
46
+ return openCodeTools.map(openCodeToolToSpecTool);
47
+ }
48
+ function specToolToExternalToolForOpenCode(tool, handler, context) {
49
+ return {
50
+ name: tool.name,
51
+ description: tool.description ?? `Execute ${tool.name}`,
52
+ inputSchema: tool.schema ?? { type: "object" },
53
+ requiresApproval: tool.requiresApproval ?? !tool.automationSafe,
54
+ execute: handler ? async (input) => {
55
+ const fullContext = {
56
+ agentId: context?.agentId ?? "unknown",
57
+ sessionId: context?.sessionId ?? "unknown",
58
+ tenantId: context?.tenantId,
59
+ actorId: context?.actorId,
60
+ metadata: context?.metadata,
61
+ signal: context?.signal
62
+ };
63
+ return handler(input, fullContext);
64
+ } : undefined
65
+ };
66
+ }
67
+ function normalizeToOpenCodeParameters(schema) {
68
+ if (!schema) {
69
+ return { type: "object" };
70
+ }
71
+ if (schema.type === "object") {
72
+ return {
73
+ type: "object",
74
+ properties: schema.properties,
75
+ required: schema.required
76
+ };
77
+ }
78
+ return {
79
+ type: "object",
80
+ properties: {
81
+ value: convertToOpenCodeParameter(schema)
82
+ },
83
+ required: ["value"]
84
+ };
85
+ }
86
+ function convertToOpenCodeParameter(schema) {
87
+ const param = {
88
+ type: schema.type ?? "string"
89
+ };
90
+ if (schema.description) {
91
+ param.description = schema.description;
92
+ }
93
+ if (schema.enum) {
94
+ param.enum = schema.enum;
95
+ }
96
+ if (schema.default !== undefined) {
97
+ param.default = schema.default;
98
+ }
99
+ return param;
100
+ }
101
+ function createToolHandlerMap(tools) {
102
+ const handlers = new Map;
103
+ for (const [name, tool] of Object.entries(tools)) {
104
+ if (tool.execute) {
105
+ handlers.set(name, tool.execute);
106
+ }
107
+ }
108
+ return handlers;
109
+ }
110
+ async function executeToolCall(toolCall, handlers) {
111
+ const handler = handlers.get(toolCall.name);
112
+ if (!handler) {
113
+ return {
114
+ tool_call_id: toolCall.id,
115
+ output: `Error: Tool '${toolCall.name}' not found`,
116
+ is_error: true
117
+ };
118
+ }
119
+ try {
120
+ const result = await handler(toolCall.arguments);
121
+ return {
122
+ tool_call_id: toolCall.id,
123
+ output: typeof result === "string" ? result : JSON.stringify(result)
124
+ };
125
+ } catch (error) {
126
+ return {
127
+ tool_call_id: toolCall.id,
128
+ output: `Error: ${error instanceof Error ? error.message : String(error)}`,
129
+ is_error: true
130
+ };
131
+ }
132
+ }
133
+
134
+ // src/providers/opencode-sdk/agent-bridge.ts
12
135
  function inferAgentType(spec) {
13
- const hasCodeTools = spec.tools.some((tool) => [
14
- "write_file",
15
- "edit_file",
16
- "create_file",
17
- "delete_file",
18
- "bash",
19
- "execute",
20
- "run_command",
21
- "terminal"
22
- ].includes(tool.name.toLowerCase()));
23
- const instructionsLower = spec.instructions.toLowerCase();
24
- const hasPlanningKeywords = /\b(plan|design|architect|strategy|analyze|review|assess|evaluate)\b/.test(instructionsLower);
25
- const hasExplorationKeywords = /\b(search|find|explore|discover|locate|grep|pattern)\b/.test(instructionsLower);
26
- const hasResearchKeywords = /\b(research|investigate|understand|learn|gather|collect)\b/.test(instructionsLower);
27
- if (hasCodeTools) return "build";
28
- if (hasPlanningKeywords && !hasCodeTools) return "plan";
29
- if (hasExplorationKeywords && !hasResearchKeywords) return "explore";
30
- return "general";
31
- }
32
- /**
33
- * Convert an AgentSpec to OpenCode agent JSON configuration.
34
- */
136
+ const hasCodeTools = spec.tools.some((tool) => [
137
+ "write_file",
138
+ "edit_file",
139
+ "create_file",
140
+ "delete_file",
141
+ "bash",
142
+ "execute",
143
+ "run_command",
144
+ "terminal"
145
+ ].includes(tool.name.toLowerCase()));
146
+ const instructionsLower = spec.instructions.toLowerCase();
147
+ const hasPlanningKeywords = /\b(plan|design|architect|strategy|analyze|review|assess|evaluate)\b/.test(instructionsLower);
148
+ const hasExplorationKeywords = /\b(search|find|explore|discover|locate|grep|pattern)\b/.test(instructionsLower);
149
+ const hasResearchKeywords = /\b(research|investigate|understand|learn|gather|collect)\b/.test(instructionsLower);
150
+ if (hasCodeTools) {
151
+ return "build";
152
+ }
153
+ if (hasPlanningKeywords && !hasCodeTools) {
154
+ return "plan";
155
+ }
156
+ if (hasExplorationKeywords && !hasResearchKeywords) {
157
+ return "explore";
158
+ }
159
+ return "general";
160
+ }
35
161
  function specToOpenCodeConfig(spec, options) {
36
- const agentType = options?.agentType ?? inferAgentType(spec);
37
- return {
38
- name: spec.meta.key,
39
- version: spec.meta.version,
40
- description: spec.description ?? spec.meta.description,
41
- instructions: spec.instructions,
42
- agent_type: agentType,
43
- tools: specToolsToOpenCodeTools(spec.tools),
44
- config: {
45
- max_steps: options?.maxSteps ?? spec.maxSteps ?? 10,
46
- temperature: options?.temperature ?? .7,
47
- model: options?.model,
48
- permissions: buildPermissions(spec)
49
- }
50
- };
51
- }
52
- /**
53
- * Build tool permissions from spec.
54
- */
162
+ const agentType = options?.agentType ?? inferAgentType(spec);
163
+ return {
164
+ name: spec.meta.key,
165
+ version: spec.meta.version,
166
+ description: spec.description ?? spec.meta.description,
167
+ instructions: spec.instructions,
168
+ agent_type: agentType,
169
+ tools: specToolsToOpenCodeTools(spec.tools),
170
+ config: {
171
+ max_steps: options?.maxSteps ?? spec.maxSteps ?? 10,
172
+ temperature: options?.temperature ?? 0.7,
173
+ model: options?.model,
174
+ permissions: buildPermissions(spec)
175
+ }
176
+ };
177
+ }
55
178
  function buildPermissions(spec) {
56
- const permissions = {};
57
- for (const tool of spec.tools) if (tool.requiresApproval) permissions[tool.name] = "ask";
58
- else if (tool.automationSafe === false) permissions[tool.name] = "ask";
59
- else permissions[tool.name] = "allow";
60
- return permissions;
61
- }
62
- /**
63
- * Convert an AgentSpec to OpenCode agent markdown format.
64
- */
179
+ const permissions = {};
180
+ for (const tool of spec.tools) {
181
+ if (tool.requiresApproval) {
182
+ permissions[tool.name] = "ask";
183
+ } else if (tool.automationSafe === false) {
184
+ permissions[tool.name] = "ask";
185
+ } else {
186
+ permissions[tool.name] = "allow";
187
+ }
188
+ }
189
+ return permissions;
190
+ }
65
191
  function specToOpenCodeMarkdown(spec, options) {
66
- const agentType = options?.agentType ?? inferAgentType(spec);
67
- return {
68
- frontmatter: {
69
- name: spec.meta.key,
70
- type: agentType,
71
- version: spec.meta.version,
72
- model: options?.model,
73
- temperature: options?.temperature ?? .7,
74
- max_steps: options?.maxSteps ?? spec.maxSteps ?? 10,
75
- tools: spec.tools.map((t) => t.name)
76
- },
77
- body: buildMarkdownBody(spec)
78
- };
79
- }
80
- /**
81
- * Build markdown body content from spec.
82
- */
192
+ const agentType = options?.agentType ?? inferAgentType(spec);
193
+ return {
194
+ frontmatter: {
195
+ name: spec.meta.key,
196
+ type: agentType,
197
+ version: spec.meta.version,
198
+ model: options?.model,
199
+ temperature: options?.temperature ?? 0.7,
200
+ max_steps: options?.maxSteps ?? spec.maxSteps ?? 10,
201
+ tools: spec.tools.map((t) => t.name)
202
+ },
203
+ body: buildMarkdownBody(spec)
204
+ };
205
+ }
83
206
  function buildMarkdownBody(spec) {
84
- const lines = [];
85
- lines.push(`# ${spec.meta.key}`);
86
- lines.push("");
87
- if (spec.description ?? spec.meta.description) {
88
- lines.push(spec.description ?? spec.meta.description ?? "");
89
- lines.push("");
90
- }
91
- lines.push("## Instructions");
92
- lines.push("");
93
- lines.push(spec.instructions);
94
- lines.push("");
95
- if (spec.tools.length > 0) {
96
- lines.push("## Tools");
97
- lines.push("");
98
- for (const tool of spec.tools) {
99
- const permission = tool.requiresApproval ? "(requires approval)" : tool.automationSafe === false ? "(ask mode)" : "";
100
- lines.push(`- **${tool.name}**: ${tool.description ?? "No description"} ${permission}`.trim());
101
- }
102
- lines.push("");
103
- }
104
- if (spec.knowledge && spec.knowledge.length > 0) {
105
- lines.push("## Knowledge Sources");
106
- lines.push("");
107
- for (const k of spec.knowledge) {
108
- const required = k.required ? "(required)" : "(optional)";
109
- lines.push(`- ${k.key} ${required}`);
110
- }
111
- lines.push("");
112
- }
113
- return lines.join("\n");
114
- }
115
- /**
116
- * Serialize OpenCode agent markdown to string.
117
- */
207
+ const lines = [];
208
+ lines.push(`# ${spec.meta.key}`);
209
+ lines.push("");
210
+ if (spec.description ?? spec.meta.description) {
211
+ lines.push(spec.description ?? spec.meta.description ?? "");
212
+ lines.push("");
213
+ }
214
+ lines.push("## Instructions");
215
+ lines.push("");
216
+ lines.push(spec.instructions);
217
+ lines.push("");
218
+ if (spec.tools.length > 0) {
219
+ lines.push("## Tools");
220
+ lines.push("");
221
+ for (const tool of spec.tools) {
222
+ const permission = tool.requiresApproval ? "(requires approval)" : tool.automationSafe === false ? "(ask mode)" : "";
223
+ lines.push(`- **${tool.name}**: ${tool.description ?? "No description"} ${permission}`.trim());
224
+ }
225
+ lines.push("");
226
+ }
227
+ if (spec.knowledge && spec.knowledge.length > 0) {
228
+ lines.push("## Knowledge Sources");
229
+ lines.push("");
230
+ for (const k of spec.knowledge) {
231
+ const required = k.required ? "(required)" : "(optional)";
232
+ lines.push(`- ${k.key} ${required}`);
233
+ }
234
+ lines.push("");
235
+ }
236
+ return lines.join(`
237
+ `);
238
+ }
118
239
  function serializeOpenCodeMarkdown(markdown) {
119
- const lines = [];
120
- lines.push("---");
121
- lines.push(`name: ${markdown.frontmatter.name}`);
122
- lines.push(`type: ${markdown.frontmatter.type}`);
123
- if (markdown.frontmatter.version) lines.push(`version: ${markdown.frontmatter.version}`);
124
- if (markdown.frontmatter.model) lines.push(`model: ${markdown.frontmatter.model}`);
125
- if (markdown.frontmatter.temperature !== void 0) lines.push(`temperature: ${markdown.frontmatter.temperature}`);
126
- if (markdown.frontmatter.max_steps !== void 0) lines.push(`max_steps: ${markdown.frontmatter.max_steps}`);
127
- if (markdown.frontmatter.tools && markdown.frontmatter.tools.length > 0) {
128
- lines.push(`tools:`);
129
- for (const tool of markdown.frontmatter.tools) lines.push(` - ${tool}`);
130
- }
131
- lines.push("---");
132
- lines.push("");
133
- lines.push(markdown.body);
134
- return lines.join("\n");
135
- }
136
- /**
137
- * Convert OpenCode agent configuration to partial AgentSpec.
138
- * Note: This is a partial conversion as OpenCode config may not have all spec fields.
139
- */
240
+ const lines = [];
241
+ lines.push("---");
242
+ lines.push(`name: ${markdown.frontmatter.name}`);
243
+ lines.push(`type: ${markdown.frontmatter.type}`);
244
+ if (markdown.frontmatter.version) {
245
+ lines.push(`version: ${markdown.frontmatter.version}`);
246
+ }
247
+ if (markdown.frontmatter.model) {
248
+ lines.push(`model: ${markdown.frontmatter.model}`);
249
+ }
250
+ if (markdown.frontmatter.temperature !== undefined) {
251
+ lines.push(`temperature: ${markdown.frontmatter.temperature}`);
252
+ }
253
+ if (markdown.frontmatter.max_steps !== undefined) {
254
+ lines.push(`max_steps: ${markdown.frontmatter.max_steps}`);
255
+ }
256
+ if (markdown.frontmatter.tools && markdown.frontmatter.tools.length > 0) {
257
+ lines.push(`tools:`);
258
+ for (const tool of markdown.frontmatter.tools) {
259
+ lines.push(` - ${tool}`);
260
+ }
261
+ }
262
+ lines.push("---");
263
+ lines.push("");
264
+ lines.push(markdown.body);
265
+ return lines.join(`
266
+ `);
267
+ }
140
268
  function openCodeConfigToSpec(config) {
141
- return {
142
- meta: {
143
- key: config.name,
144
- version: config.version ?? "1.0.0",
145
- description: config.description ?? "",
146
- stability: "experimental",
147
- owners: [],
148
- tags: []
149
- },
150
- description: config.description,
151
- instructions: config.instructions ?? "",
152
- tools: config.tools?.map((tool) => ({
153
- name: tool.name,
154
- description: tool.description,
155
- schema: tool.parameters,
156
- requiresApproval: tool.permission === "ask",
157
- automationSafe: tool.permission === "allow"
158
- })) ?? [],
159
- maxSteps: config.config?.max_steps ?? 10
160
- };
269
+ return {
270
+ meta: {
271
+ key: config.name,
272
+ version: config.version ?? "1.0.0",
273
+ description: config.description ?? "",
274
+ stability: "experimental",
275
+ owners: [],
276
+ tags: []
277
+ },
278
+ description: config.description,
279
+ instructions: config.instructions ?? "",
280
+ tools: config.tools?.map((tool) => ({
281
+ name: tool.name,
282
+ description: tool.description,
283
+ schema: tool.parameters,
284
+ requiresApproval: tool.permission === "ask",
285
+ automationSafe: tool.permission === "allow"
286
+ })) ?? [],
287
+ maxSteps: config.config?.max_steps ?? 10
288
+ };
161
289
  }
290
+ var init_agent_bridge = () => {};
291
+ init_agent_bridge();
162
292
 
163
- //#endregion
164
- export { inferAgentType, openCodeConfigToSpec, serializeOpenCodeMarkdown, specToOpenCodeConfig, specToOpenCodeMarkdown };
165
- //# sourceMappingURL=agent-bridge.js.map
293
+ export {
294
+ specToOpenCodeMarkdown,
295
+ specToOpenCodeConfig,
296
+ serializeOpenCodeMarkdown,
297
+ openCodeConfigToSpec,
298
+ inferAgentType
299
+ };
@@ -1,4 +1,22 @@
1
- import { OpenCodeSDKProvider } from "./adapter.js";
2
- import { OpenCodeParameter, OpenCodeTool, OpenCodeToolCall, OpenCodeToolResult, createToolHandlerMap, executeToolCall, openCodeToolToSpecTool, openCodeToolsToSpecTools, specToolToExternalToolForOpenCode, specToolToOpenCodeTool, specToolsToOpenCodeTools } from "./tool-bridge.js";
3
- import { OpenCodeAgentConfig, OpenCodeAgentJSON, OpenCodeAgentMarkdown, inferAgentType, openCodeConfigToSpec, serializeOpenCodeMarkdown, specToOpenCodeConfig, specToOpenCodeMarkdown } from "./agent-bridge.js";
4
- export { OpenCodeAgentConfig, OpenCodeAgentJSON, OpenCodeAgentMarkdown, OpenCodeParameter, OpenCodeSDKProvider, OpenCodeTool, OpenCodeToolCall, OpenCodeToolResult, createToolHandlerMap, executeToolCall, inferAgentType, openCodeConfigToSpec, openCodeToolToSpecTool, openCodeToolsToSpecTools, serializeOpenCodeMarkdown, specToOpenCodeConfig, specToOpenCodeMarkdown, specToolToExternalToolForOpenCode, specToolToOpenCodeTool, specToolsToOpenCodeTools };
1
+ /**
2
+ * OpenCode SDK provider for ContractSpec agents.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { OpenCodeSDKProvider } from '@contractspec/lib.ai-agent/providers/opencode-sdk';
7
+ *
8
+ * const provider = new OpenCodeSDKProvider({
9
+ * agentType: 'build',
10
+ * port: 4096,
11
+ * });
12
+ *
13
+ * if (provider.isAvailable()) {
14
+ * const context = await provider.createContext(agentSpec);
15
+ * const result = await provider.execute(context, { prompt: "..." });
16
+ * }
17
+ * ```
18
+ */
19
+ export { OpenCodeSDKProvider } from './adapter';
20
+ export * from './tool-bridge';
21
+ export * from './agent-bridge';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode-sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}