@tutti-os/agent-acp-kit 0.1.10

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 (252) hide show
  1. package/AGENTS.md +176 -0
  2. package/README.md +428 -0
  3. package/assets/agent-acp-kit-architecture.png +0 -0
  4. package/dist/core/capabilities.d.ts +23 -0
  5. package/dist/core/capabilities.d.ts.map +1 -0
  6. package/dist/core/capabilities.js +2 -0
  7. package/dist/core/capabilities.js.map +1 -0
  8. package/dist/core/detection.d.ts +8 -0
  9. package/dist/core/detection.d.ts.map +1 -0
  10. package/dist/core/detection.js +2 -0
  11. package/dist/core/detection.js.map +1 -0
  12. package/dist/core/errors.d.ts +6 -0
  13. package/dist/core/errors.d.ts.map +1 -0
  14. package/dist/core/errors.js +9 -0
  15. package/dist/core/errors.js.map +1 -0
  16. package/dist/core/events.d.ts +51 -0
  17. package/dist/core/events.d.ts.map +1 -0
  18. package/dist/core/events.js +2 -0
  19. package/dist/core/events.js.map +1 -0
  20. package/dist/core/index.d.ts +14 -0
  21. package/dist/core/index.d.ts.map +1 -0
  22. package/dist/core/index.js +4 -0
  23. package/dist/core/index.js.map +1 -0
  24. package/dist/core/launch-plan.d.ts +22 -0
  25. package/dist/core/launch-plan.d.ts.map +1 -0
  26. package/dist/core/launch-plan.js +2 -0
  27. package/dist/core/launch-plan.js.map +1 -0
  28. package/dist/core/mcp.d.ts +31 -0
  29. package/dist/core/mcp.d.ts.map +1 -0
  30. package/dist/core/mcp.js +37 -0
  31. package/dist/core/mcp.js.map +1 -0
  32. package/dist/core/provider-plugin.d.ts +84 -0
  33. package/dist/core/provider-plugin.d.ts.map +1 -0
  34. package/dist/core/provider-plugin.js +2 -0
  35. package/dist/core/provider-plugin.js.map +1 -0
  36. package/dist/core/redaction.d.ts +2 -0
  37. package/dist/core/redaction.d.ts.map +1 -0
  38. package/dist/core/redaction.js +9 -0
  39. package/dist/core/redaction.js.map +1 -0
  40. package/dist/core/registry.d.ts +4 -0
  41. package/dist/core/registry.d.ts.map +1 -0
  42. package/dist/core/registry.js +10 -0
  43. package/dist/core/registry.js.map +1 -0
  44. package/dist/core/run-input.d.ts +30 -0
  45. package/dist/core/run-input.d.ts.map +1 -0
  46. package/dist/core/run-input.js +2 -0
  47. package/dist/core/run-input.js.map +1 -0
  48. package/dist/core/skills.d.ts +13 -0
  49. package/dist/core/skills.d.ts.map +1 -0
  50. package/dist/core/skills.js +2 -0
  51. package/dist/core/skills.js.map +1 -0
  52. package/dist/core/transport.d.ts +17 -0
  53. package/dist/core/transport.d.ts.map +1 -0
  54. package/dist/core/transport.js +2 -0
  55. package/dist/core/transport.js.map +1 -0
  56. package/dist/index.d.ts +13 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +9 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/process/cancellation.d.ts +7 -0
  61. package/dist/process/cancellation.d.ts.map +1 -0
  62. package/dist/process/cancellation.js +36 -0
  63. package/dist/process/cancellation.js.map +1 -0
  64. package/dist/process/command-resolver.d.ts +13 -0
  65. package/dist/process/command-resolver.d.ts.map +1 -0
  66. package/dist/process/command-resolver.js +63 -0
  67. package/dist/process/command-resolver.js.map +1 -0
  68. package/dist/process/env.d.ts +2 -0
  69. package/dist/process/env.d.ts.map +1 -0
  70. package/dist/process/env.js +7 -0
  71. package/dist/process/env.js.map +1 -0
  72. package/dist/process/stderr-buffer.d.ts +11 -0
  73. package/dist/process/stderr-buffer.d.ts.map +1 -0
  74. package/dist/process/stderr-buffer.js +23 -0
  75. package/dist/process/stderr-buffer.js.map +1 -0
  76. package/dist/process/supervisor.d.ts +27 -0
  77. package/dist/process/supervisor.d.ts.map +1 -0
  78. package/dist/process/supervisor.js +76 -0
  79. package/dist/process/supervisor.js.map +1 -0
  80. package/dist/providers/acp-presets/index.d.ts +3 -0
  81. package/dist/providers/acp-presets/index.d.ts.map +1 -0
  82. package/dist/providers/acp-presets/index.js +2 -0
  83. package/dist/providers/acp-presets/index.js.map +1 -0
  84. package/dist/providers/acp-presets/provider.d.ts +114 -0
  85. package/dist/providers/acp-presets/provider.d.ts.map +1 -0
  86. package/dist/providers/acp-presets/provider.js +172 -0
  87. package/dist/providers/acp-presets/provider.js.map +1 -0
  88. package/dist/providers/claude/detect.d.ts +35 -0
  89. package/dist/providers/claude/detect.d.ts.map +1 -0
  90. package/dist/providers/claude/detect.js +159 -0
  91. package/dist/providers/claude/detect.js.map +1 -0
  92. package/dist/providers/claude/index.d.ts +4 -0
  93. package/dist/providers/claude/index.d.ts.map +1 -0
  94. package/dist/providers/claude/index.js +206 -0
  95. package/dist/providers/claude/index.js.map +1 -0
  96. package/dist/providers/claude/launch-plan.d.ts +5 -0
  97. package/dist/providers/claude/launch-plan.d.ts.map +1 -0
  98. package/dist/providers/claude/launch-plan.js +38 -0
  99. package/dist/providers/claude/launch-plan.js.map +1 -0
  100. package/dist/providers/claude/parser.d.ts +3 -0
  101. package/dist/providers/claude/parser.d.ts.map +1 -0
  102. package/dist/providers/claude/parser.js +41 -0
  103. package/dist/providers/claude/parser.js.map +1 -0
  104. package/dist/providers/codex/detect.d.ts +31 -0
  105. package/dist/providers/codex/detect.d.ts.map +1 -0
  106. package/dist/providers/codex/detect.js +280 -0
  107. package/dist/providers/codex/detect.js.map +1 -0
  108. package/dist/providers/codex/index.d.ts +4 -0
  109. package/dist/providers/codex/index.d.ts.map +1 -0
  110. package/dist/providers/codex/index.js +383 -0
  111. package/dist/providers/codex/index.js.map +1 -0
  112. package/dist/providers/codex/launch-plan.d.ts +3 -0
  113. package/dist/providers/codex/launch-plan.d.ts.map +1 -0
  114. package/dist/providers/codex/launch-plan.js +40 -0
  115. package/dist/providers/codex/launch-plan.js.map +1 -0
  116. package/dist/providers/codex/parser.d.ts +32 -0
  117. package/dist/providers/codex/parser.d.ts.map +1 -0
  118. package/dist/providers/codex/parser.js +187 -0
  119. package/dist/providers/codex/parser.js.map +1 -0
  120. package/dist/providers/codex/reasoning.d.ts +2 -0
  121. package/dist/providers/codex/reasoning.d.ts.map +1 -0
  122. package/dist/providers/codex/reasoning.js +12 -0
  123. package/dist/providers/codex/reasoning.js.map +1 -0
  124. package/dist/providers/fake/index.d.ts +2 -0
  125. package/dist/providers/fake/index.d.ts.map +1 -0
  126. package/dist/providers/fake/index.js +2 -0
  127. package/dist/providers/fake/index.js.map +1 -0
  128. package/dist/providers/fake/provider.d.ts +8 -0
  129. package/dist/providers/fake/provider.d.ts.map +1 -0
  130. package/dist/providers/fake/provider.js +73 -0
  131. package/dist/providers/fake/provider.js.map +1 -0
  132. package/dist/providers/generic-acp/index.d.ts +2 -0
  133. package/dist/providers/generic-acp/index.d.ts.map +1 -0
  134. package/dist/providers/generic-acp/index.js +2 -0
  135. package/dist/providers/generic-acp/index.js.map +1 -0
  136. package/dist/providers/generic-acp/provider.d.ts +8 -0
  137. package/dist/providers/generic-acp/provider.d.ts.map +1 -0
  138. package/dist/providers/generic-acp/provider.js +93 -0
  139. package/dist/providers/generic-acp/provider.js.map +1 -0
  140. package/dist/providers/hermes/index.d.ts +2 -0
  141. package/dist/providers/hermes/index.d.ts.map +1 -0
  142. package/dist/providers/hermes/index.js +2 -0
  143. package/dist/providers/hermes/index.js.map +1 -0
  144. package/dist/providers/hermes/provider.d.ts +2 -0
  145. package/dist/providers/hermes/provider.d.ts.map +1 -0
  146. package/dist/providers/hermes/provider.js +2 -0
  147. package/dist/providers/hermes/provider.js.map +1 -0
  148. package/dist/providers/install.d.ts +87 -0
  149. package/dist/providers/install.d.ts.map +1 -0
  150. package/dist/providers/install.js +289 -0
  151. package/dist/providers/install.js.map +1 -0
  152. package/dist/providers/kimi/index.d.ts +2 -0
  153. package/dist/providers/kimi/index.d.ts.map +1 -0
  154. package/dist/providers/kimi/index.js +2 -0
  155. package/dist/providers/kimi/index.js.map +1 -0
  156. package/dist/providers/kimi/provider.d.ts +2 -0
  157. package/dist/providers/kimi/provider.d.ts.map +1 -0
  158. package/dist/providers/kimi/provider.js +2 -0
  159. package/dist/providers/kimi/provider.js.map +1 -0
  160. package/dist/providers/kiro/index.d.ts +2 -0
  161. package/dist/providers/kiro/index.d.ts.map +1 -0
  162. package/dist/providers/kiro/index.js +2 -0
  163. package/dist/providers/kiro/index.js.map +1 -0
  164. package/dist/providers/kiro/provider.d.ts +2 -0
  165. package/dist/providers/kiro/provider.d.ts.map +1 -0
  166. package/dist/providers/kiro/provider.js +2 -0
  167. package/dist/providers/kiro/provider.js.map +1 -0
  168. package/dist/runtime/control-plane.d.ts +4 -0
  169. package/dist/runtime/control-plane.d.ts.map +1 -0
  170. package/dist/runtime/control-plane.js +2 -0
  171. package/dist/runtime/control-plane.js.map +1 -0
  172. package/dist/runtime/create-runtime.d.ts +44 -0
  173. package/dist/runtime/create-runtime.d.ts.map +1 -0
  174. package/dist/runtime/create-runtime.js +445 -0
  175. package/dist/runtime/create-runtime.js.map +1 -0
  176. package/dist/runtime/detection-cache.d.ts +6 -0
  177. package/dist/runtime/detection-cache.d.ts.map +1 -0
  178. package/dist/runtime/detection-cache.js +15 -0
  179. package/dist/runtime/detection-cache.js.map +1 -0
  180. package/dist/runtime/provider-registry.d.ts +7 -0
  181. package/dist/runtime/provider-registry.d.ts.map +1 -0
  182. package/dist/runtime/provider-registry.js +19 -0
  183. package/dist/runtime/provider-registry.js.map +1 -0
  184. package/dist/skills/cleanup.d.ts +2 -0
  185. package/dist/skills/cleanup.d.ts.map +1 -0
  186. package/dist/skills/cleanup.js +5 -0
  187. package/dist/skills/cleanup.js.map +1 -0
  188. package/dist/skills/materialize.d.ts +3 -0
  189. package/dist/skills/materialize.d.ts.map +1 -0
  190. package/dist/skills/materialize.js +38 -0
  191. package/dist/skills/materialize.js.map +1 -0
  192. package/dist/skills/prompt-injection.d.ts +13 -0
  193. package/dist/skills/prompt-injection.d.ts.map +1 -0
  194. package/dist/skills/prompt-injection.js +34 -0
  195. package/dist/skills/prompt-injection.js.map +1 -0
  196. package/dist/testing/conformance.d.ts +12 -0
  197. package/dist/testing/conformance.d.ts.map +1 -0
  198. package/dist/testing/conformance.js +55 -0
  199. package/dist/testing/conformance.js.map +1 -0
  200. package/dist/testing/fake-acp-peer.d.ts +13 -0
  201. package/dist/testing/fake-acp-peer.d.ts.map +1 -0
  202. package/dist/testing/fake-acp-peer.js +72 -0
  203. package/dist/testing/fake-acp-peer.js.map +1 -0
  204. package/dist/testing/fake-provider.d.ts +8 -0
  205. package/dist/testing/fake-provider.d.ts.map +1 -0
  206. package/dist/testing/fake-provider.js +12 -0
  207. package/dist/testing/fake-provider.js.map +1 -0
  208. package/dist/testing/fixtures.d.ts +3 -0
  209. package/dist/testing/fixtures.d.ts.map +1 -0
  210. package/dist/testing/fixtures.js +6 -0
  211. package/dist/testing/fixtures.js.map +1 -0
  212. package/dist/testing/index.d.ts +6 -0
  213. package/dist/testing/index.d.ts.map +1 -0
  214. package/dist/testing/index.js +5 -0
  215. package/dist/testing/index.js.map +1 -0
  216. package/dist/transports/acp/acp-client.d.ts +4 -0
  217. package/dist/transports/acp/acp-client.d.ts.map +1 -0
  218. package/dist/transports/acp/acp-client.js +283 -0
  219. package/dist/transports/acp/acp-client.js.map +1 -0
  220. package/dist/transports/acp/acp-jsonrpc.d.ts +7 -0
  221. package/dist/transports/acp/acp-jsonrpc.d.ts.map +1 -0
  222. package/dist/transports/acp/acp-jsonrpc.js +27 -0
  223. package/dist/transports/acp/acp-jsonrpc.js.map +1 -0
  224. package/dist/transports/acp/acp-models.d.ts +11 -0
  225. package/dist/transports/acp/acp-models.d.ts.map +1 -0
  226. package/dist/transports/acp/acp-models.js +95 -0
  227. package/dist/transports/acp/acp-models.js.map +1 -0
  228. package/dist/transports/acp/acp-permissions.d.ts +5 -0
  229. package/dist/transports/acp/acp-permissions.d.ts.map +1 -0
  230. package/dist/transports/acp/acp-permissions.js +7 -0
  231. package/dist/transports/acp/acp-permissions.js.map +1 -0
  232. package/dist/transports/acp/acp-session.d.ts +7 -0
  233. package/dist/transports/acp/acp-session.d.ts.map +1 -0
  234. package/dist/transports/acp/acp-session.js +27 -0
  235. package/dist/transports/acp/acp-session.js.map +1 -0
  236. package/dist/transports/acp/acp-types.d.ts +28 -0
  237. package/dist/transports/acp/acp-types.d.ts.map +1 -0
  238. package/dist/transports/acp/acp-types.js +2 -0
  239. package/dist/transports/acp/acp-types.js.map +1 -0
  240. package/dist/transports/jsonl/jsonl-parser.d.ts +5 -0
  241. package/dist/transports/jsonl/jsonl-parser.d.ts.map +1 -0
  242. package/dist/transports/jsonl/jsonl-parser.js +27 -0
  243. package/dist/transports/jsonl/jsonl-parser.js.map +1 -0
  244. package/dist/transports/jsonl/jsonl-transport.d.ts +4 -0
  245. package/dist/transports/jsonl/jsonl-transport.d.ts.map +1 -0
  246. package/dist/transports/jsonl/jsonl-transport.js +81 -0
  247. package/dist/transports/jsonl/jsonl-transport.js.map +1 -0
  248. package/dist/transports/plain/plain-transport.d.ts +4 -0
  249. package/dist/transports/plain/plain-transport.d.ts.map +1 -0
  250. package/dist/transports/plain/plain-transport.js +52 -0
  251. package/dist/transports/plain/plain-transport.js.map +1 -0
  252. package/package.json +47 -0
package/AGENTS.md ADDED
@@ -0,0 +1,176 @@
1
+ # @tutti-os/agent-acp-kit Agent Guide
2
+
3
+ This package is intended to become an independently published ACP-oriented local agent SDK. Treat it as reusable infrastructure, not as an AI Media Canvas feature folder.
4
+
5
+ ## How To Use This Package
6
+
7
+ Use `README.md` as the public package guide for humans and external adopters. Use this `AGENTS.md` as the coding-agent guide for future implementation, refactor, and integration work.
8
+
9
+ The normal host integration should look like this:
10
+
11
+ ```ts
12
+ import {
13
+ createClaudeProvider,
14
+ createCodexProvider,
15
+ createLocalAgentRuntime,
16
+ } from "@tutti-os/agent-acp-kit";
17
+
18
+ const runtime = createLocalAgentRuntime({
19
+ providers: [createCodexProvider(), createClaudeProvider()],
20
+ });
21
+
22
+ for await (const event of runtime.run({
23
+ runId,
24
+ provider,
25
+ cwd,
26
+ prompt,
27
+ model,
28
+ mcpServers,
29
+ skillManifest,
30
+ resume,
31
+ })) {
32
+ if (event.type === "tool_call") {
33
+ // Project package AgentEvent into the host stream/replay protocol.
34
+ }
35
+ }
36
+ ```
37
+
38
+ Important usage rules for agents:
39
+
40
+ - Do not add host-specific branches above this package for Codex versus Claude launch behavior. Put provider differences in provider plugins.
41
+ - Do not define application tools here. Pass host-owned tools through `mcpServers`.
42
+ - Do not introduce runtime event enums unless the public contract needs runtime reflection. `AgentEvent` is a TypeScript discriminated union; string narrowing is intentional.
43
+ - Do not make this package create messages, assistant anchors, canvas elements, media jobs, or billing records.
44
+ - Do not assume Claude Code has dynamic model discovery. Follow provider reality: Codex can discover models, Claude uses fallback hints plus custom model pass-through.
45
+ - Do not pass broad product secrets into provider env. Use host-created, run-scoped tool tokens.
46
+ - Treat provider detection as an installation/capability probe. Missing CLIs should return `supported: false` and `authState: "missing"` rather than throwing from provider-specific `detect()` functions.
47
+
48
+ ## Package Responsibility
49
+
50
+ Own these concerns here:
51
+
52
+ - Provider detection, capabilities, model hints, and auth/config location reporting.
53
+ - Provider-specific launch plans, args, env, MCP delivery, and model normalization.
54
+ - Process supervision, stdin prompt delivery, timeout, cancel, stderr tail, and redaction.
55
+ - JSONL, plain stdout, and ACP JSON-RPC transports.
56
+ - Provider output parsing into `AgentEvent`.
57
+ - Skill materialization, prompt injection, and cleanup.
58
+ - Public testing helpers and provider conformance checks.
59
+
60
+ Do not own these concerns here:
61
+
62
+ - Host sessions, canvases, jobs, billing, media storage, or message persistence.
63
+ - UI event shapes, websocket protocol, replay protocol, or assistant message anchors.
64
+ - Product tool implementations.
65
+ - Product-specific MCP server paths or tokens.
66
+ - Cross-provider handoff policy beyond accepting a normalized `resume` input.
67
+
68
+ ## Design Rules
69
+
70
+ - Keep the host adapter thin. If a change requires host business objects inside this package, move that logic back to the host.
71
+ - Keep provider differences inside provider plugins. The host should not branch on Codex versus Claude for launch args, MCP config, model normalization, or parser details.
72
+ - Keep transport behavior reusable. ACP fixes belong in `src/transports/acp`, not inside Hermes/Kimi/Kiro provider wrappers unless the provider truly differs.
73
+ - Keep events normalized. Every provider should emit terminal `done` and failed tool results with a clear status.
74
+ - Keep security explicit. Do not add broad token passthrough, global secrets, or silent sandbox bypass behavior without documenting the trusted-local-mode requirement.
75
+ - Prefer small contracts over framework abstractions. This package should remain usable from any Node host.
76
+
77
+ ## Public API Discipline
78
+
79
+ Root exports should stay focused on:
80
+
81
+ - `createLocalAgentRuntime`
82
+ - Official provider factories
83
+ - Core input/event/capability/MCP/skill types
84
+ - Safe utility functions needed by hosts
85
+
86
+ Use subpath exports for specialized surfaces:
87
+
88
+ - `./runtime-control-plane` for runtime selection/control-plane helpers.
89
+ - `./testing` for fake providers, fake ACP peers, fixtures, and conformance helpers.
90
+
91
+ Avoid exporting provider internals, launch-plan helpers, parser internals, or application-specific glue from the root.
92
+
93
+ ## Provider Implementation Checklist
94
+
95
+ When adding or changing a provider:
96
+
97
+ - Add detection with executable path, version, auth state, supported flag, config dir, skills dir, and model hints where possible.
98
+ - Add launch-plan tests for command, args, cwd, env, model, prompt input, MCP config, resume, and extra allowed dirs.
99
+ - Add parser tests for text, tool start, tool result success/failure, stderr/error, and terminal done.
100
+ - Add cancellation behavior when the provider process or transport supports it.
101
+ - Add model behavior that matches the actual provider. Do not invent discovery if the CLI does not expose it.
102
+ - Add conformance coverage through `assertProviderConformance` where practical.
103
+
104
+ ## MCP And Tool Rules
105
+
106
+ - This package accepts MCP server configs; it does not implement product tools.
107
+ - Normalize stdio/http MCP config in `src/core/mcp.ts`.
108
+ - Convert normalized MCP config inside provider code because each provider expects a different delivery format.
109
+ - Keep tool tokens run-scoped and host-generated. Never create or persist product tokens here.
110
+ - Redact MCP env values and headers from process output.
111
+
112
+ ## Skills Rules
113
+
114
+ - The host chooses which skills apply to a run.
115
+ - This package only delivers selected skills.
116
+ - Materialized skill paths must be per-run and cleaned up.
117
+ - Prompt-injected skills must not mutate global user skill directories.
118
+ - Do not silently include all user/global skills in a run.
119
+
120
+ ## Resume And Cancellation Rules
121
+
122
+ - Same-provider resume can use provider session ids or resume tokens when supported.
123
+ - If resume metadata is missing, degrade to `fresh`.
124
+ - Cross-provider resume is host-level handoff, not package-level magic.
125
+ - Cancellation must produce or preserve one terminal status. Late process output must not overwrite a durable terminal event in the host.
126
+ - Codex same-provider resume is a different argv shape: use `codex exec resume --json <session-id> -`, not `codex exec --resume`.
127
+ - Claude Code same-provider resume is a flag on the print invocation: use `claude -p --output-format stream-json --resume <session-id>`.
128
+ - Gemini is not currently a built-in provider. If it is added later, choose one transport shape first: `gemini --acp` through ACP JSON-RPC, or `gemini -p ... --output-format stream-json --resume <session-id>` through JSONL. Do not mix ACP flags with stream-json parsing.
129
+ - Hosts should pass durable `history` on every run and treat native provider resume as an optimization. Store `done.sessionId` and `done.resumeToken` when providers emit them.
130
+
131
+ ## Testing Expectations
132
+
133
+ Before claiming package work is complete, run:
134
+
135
+ ```bash
136
+ pnpm typecheck
137
+ pnpm test
138
+ pnpm build
139
+ ```
140
+
141
+ For changes that affect a host integration, also run the host tests that consume `@tutti-os/agent-acp-kit`.
142
+
143
+ For release readiness, run:
144
+
145
+ ```bash
146
+ pnpm pack:check
147
+ ```
148
+
149
+ and verify the tarball includes `dist`, `README.md`, `AGENTS.md`, and `package.json`.
150
+
151
+ ## Release Workflow
152
+
153
+ Normal package releases should use `.github/workflows/npm-package-release.yml`.
154
+
155
+ Release requirements:
156
+
157
+ - Run from the `main` branch.
158
+ - Choose `version_bump`: `patch`, `minor`, `major`, or `custom`.
159
+ - Use `custom_version` only when `version_bump=custom`.
160
+ - Keep the repository secret `NPM_TOKEN` configured with npm publish permission.
161
+ - Use `dry_run: true` first when changing release behavior.
162
+ - Let the workflow publish, commit the version bump, and push tag `v<version>`.
163
+
164
+ Do not publish ad hoc from a local machine unless GitHub Actions is unavailable. If local publishing is necessary, run typecheck, tests, build, and `pnpm pack:check` before `npm publish`.
165
+
166
+ ## Documentation Expectations
167
+
168
+ Update `README.md` when any of these change:
169
+
170
+ - Public exports.
171
+ - `AgentRunInput` or `AgentEvent` semantics.
172
+ - Provider support or provider model behavior.
173
+ - MCP delivery behavior.
174
+ - Skill delivery behavior.
175
+ - Security assumptions.
176
+ - Testing or publishing workflow.
package/README.md ADDED
@@ -0,0 +1,428 @@
1
+ # @tutti-os/agent-acp-kit
2
+
3
+ <p align="center">
4
+ <strong>A TypeScript toolkit for running local coding agents through one ACP-oriented host API.</strong>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="https://www.npmjs.com/package/@tutti-os/agent-acp-kit"><img src="https://img.shields.io/npm/v/@tutti-os/agent-acp-kit.svg" alt="npm version"></a>
9
+ <a href="https://github.com/tutti-os/agent-acp-kit/actions/workflows/npm-package-release.yml"><img src="https://github.com/tutti-os/agent-acp-kit/actions/workflows/npm-package-release.yml/badge.svg" alt="release workflow"></a>
10
+ <img src="https://img.shields.io/badge/node-%3E%3D22-339933" alt="Node.js >= 22">
11
+ <img src="https://img.shields.io/badge/TypeScript-ready-3178c6" alt="TypeScript ready">
12
+ <img src="https://img.shields.io/badge/ACP-oriented-111827" alt="ACP oriented">
13
+ </p>
14
+
15
+ <p align="center">
16
+ <img src="./assets/agent-acp-kit-architecture.png" alt="Architecture diagram for @tutti-os/agent-acp-kit">
17
+ </p>
18
+
19
+ `@tutti-os/agent-acp-kit` lets a host application detect, launch, stream, cancel, and resume local coding agents through a stable TypeScript facade.
20
+
21
+ It is built for apps that want to support Codex, Claude Code, and ACP-compatible agents such as Gemini CLI, Cursor Agent, GitHub Copilot CLI, Factory Droid, fast-agent, OpenCode, Qwen Code, Kimi CLI, Kilo, Mistral Vibe, and Trae CLI without scattering provider-specific process, transport, MCP, skill, model, and event parsing logic throughout the app.
22
+
23
+ This is an embeddable host SDK. It is not a replacement for ACP clients such as [`acpx`](https://github.com/openclaw/acpx), and it is not a single-provider ACP adapter binary such as `codex-acp`.
24
+
25
+ ## Why This Exists
26
+
27
+ Local coding agents do not all expose the same interface:
28
+
29
+ - Codex is CLI-first and can stream JSONL from `codex exec --json`.
30
+ - Claude Code is CLI-first and streams `stream-json` output.
31
+ - ACP-compatible agents speak JSON-RPC session protocols and can be discovered through the ACP Registry.
32
+ - Host apps still need their own messages, sessions, tool permissions, replay, canvas state, billing, and product semantics.
33
+
34
+ This package sits in the middle. It owns local agent execution. Your application owns product behavior.
35
+
36
+ ## ACP-compatible Agents
37
+
38
+ ACP-compatible agents in the wider ecosystem include:
39
+
40
+ | Agent | Typical ACP command |
41
+ | --- | --- |
42
+ | Gemini CLI | `gemini --acp` |
43
+ | Cursor Agent | `cursor-agent acp` |
44
+ | GitHub Copilot CLI | `copilot --acp --stdio` |
45
+ | Factory Droid | `droid exec --output-format acp` |
46
+ | fast-agent | `uvx fast-agent-mcp acp` |
47
+ | OpenCode | `opencode acp` |
48
+ | Qwen Code | `qwen --acp --experimental-skills` |
49
+ | Kimi CLI | `kimi acp` |
50
+ | Kilo | `kilo acp` |
51
+ | Mistral Vibe | `vibe-acp` |
52
+ | Trae CLI | `traecli acp serve` |
53
+
54
+ This table is for ecosystem orientation. Commands can vary by agent version, so use the registry as the source of truth. Built-in provider support in this package is listed below, and hosts can use `createGenericAcpProvider()` or a custom provider plugin when they already have an ACP command to launch.
55
+
56
+ For the latest installable agent list, see:
57
+
58
+ - [ACP Registry guide](https://agentclientprotocol.com/get-started/registry)
59
+ - [agentclientprotocol/registry](https://github.com/agentclientprotocol/registry)
60
+ - [latest registry JSON](https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json)
61
+
62
+ ## Install
63
+
64
+ ```bash
65
+ npm install @tutti-os/agent-acp-kit
66
+ ```
67
+
68
+ Other package managers work too:
69
+
70
+ ```bash
71
+ pnpm add @tutti-os/agent-acp-kit
72
+ yarn add @tutti-os/agent-acp-kit
73
+ bun add @tutti-os/agent-acp-kit
74
+ ```
75
+
76
+ Requirements:
77
+
78
+ - Node.js 22 or newer.
79
+ - ESM runtime.
80
+ - Installed provider CLIs for the providers you want to use.
81
+
82
+ ## Quick Start
83
+
84
+ ```ts
85
+ import {
86
+ createClaudeProvider,
87
+ createCodexProvider,
88
+ createLocalAgentRuntime,
89
+ } from "@tutti-os/agent-acp-kit";
90
+
91
+ const runtime = createLocalAgentRuntime({
92
+ providers: [
93
+ createCodexProvider(),
94
+ createClaudeProvider(),
95
+ ],
96
+ });
97
+
98
+ const detections = await runtime.detect();
99
+ console.log(detections.map((item) => ({
100
+ provider: item.provider,
101
+ supported: item.result?.supported !== false,
102
+ models: item.result?.models,
103
+ reason: item.result?.unsupportedReason,
104
+ })));
105
+
106
+ for await (const event of runtime.run({
107
+ runId: crypto.randomUUID(),
108
+ provider: "codex",
109
+ cwd: "/path/to/workspace",
110
+ prompt: "Inspect this project and summarize the architecture.",
111
+ model: "codex:gpt-5.4",
112
+ })) {
113
+ if (event.type === "text_delta") {
114
+ process.stdout.write(event.text);
115
+ }
116
+
117
+ if (event.type === "tool_call") {
118
+ console.log("tool started", event.name, event.input);
119
+ }
120
+
121
+ if (event.type === "done") {
122
+ console.log("run finished", event.status);
123
+ }
124
+ }
125
+ ```
126
+
127
+ ## What You Get
128
+
129
+ | Area | Included |
130
+ | --- | --- |
131
+ | Runtime facade | `detect()`, `run()`, `cancel()`, `listProviders()` |
132
+ | Providers | Codex, Claude Code, ACP presets, generic ACP, fake test provider |
133
+ | Process runtime | command resolution, stdin prompt delivery, timeout, cancel, stderr tail, redaction |
134
+ | Transports | JSONL, plain stdout, ACP JSON-RPC |
135
+ | MCP delivery | normalized stdio/http MCP server config passed into provider launch plans |
136
+ | Skills | materialized files, prompt injection, project-instruction style delivery, cleanup |
137
+ | Events | normalized `AgentEvent` discriminated union |
138
+ | Testing | fake provider, fake ACP peer, fixtures, conformance helpers |
139
+
140
+ ## Provider Support
141
+
142
+ | Provider | Status | Transport | Notes |
143
+ | --- | --- | --- | --- |
144
+ | Codex | Supported | `codex exec --json` JSONL | Dynamic model discovery via `codex debug models`; per-run `CODEX_HOME` with copied auth and sanitized config; same-provider resume via `codex exec resume --json <session> -` |
145
+ | Claude Code | Supported | `claude -p --output-format stream-json` | Uses fallback model hints, custom model pass-through, and same-provider resume via `--resume <session>` |
146
+ | Devin for Terminal | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `DEVIN_ACP_BIN` |
147
+ | Hermes | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `HERMES_ACP_BIN` |
148
+ | Kimi | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `KIMI_ACP_BIN` |
149
+ | Kiro | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `KIRO_ACP_BIN` |
150
+ | Kilo | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `KILO_ACP_BIN` |
151
+ | Mistral Vibe | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `VIBE_ACP_BIN` |
152
+ | Cursor Agent | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `CURSOR_ACP_BIN` |
153
+ | Gemini CLI | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `GEMINI_ACP_BIN` |
154
+ | OpenCode | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `OPENCODE_ACP_BIN` |
155
+ | Qoder CLI | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `QODER_ACP_BIN` |
156
+ | Qwen Code | Experimental | ACP JSON-RPC | Shared generic ACP transport; command override `QWEN_ACP_BIN` |
157
+ | Generic ACP | Experimental | ACP JSON-RPC | Bring your own ACP agent command |
158
+ | Fake | Test helper | In-memory async events | For host tests and conformance checks |
159
+
160
+ Built-in real local providers do not impose a provider-level concurrency cap. Hosts can still enforce stricter queueing, cancellation, or watchdog policies around `runtime.run()` when a product surface needs serialized execution.
161
+
162
+ Codex runs always use a run-scoped temporary `CODEX_HOME`. The provider copies
163
+ `auth.json` from the requested `CODEX_HOME` or the user's default
164
+ `~/.codex`, preserves compatible `config.toml` settings such as custom model
165
+ providers and `base_url`, removes Codex config values known to break current
166
+ CLI parsing, and overlays any run-scoped MCP server config.
167
+
168
+ ## Host Integration Pattern
169
+
170
+ Treat this package as the local-agent execution layer, not as your application orchestrator.
171
+
172
+ Your host should own:
173
+
174
+ - User, session, run, and message persistence.
175
+ - Assistant message anchor creation.
176
+ - Runtime policy, such as trusted local mode, default provider, default model, and tool allowlists.
177
+ - Domain tools and MCP server creation.
178
+ - Mapping `AgentEvent` into your app stream, websocket, or replay protocol.
179
+ - Billing, job queues, media storage, canvas writes, and product state.
180
+ - Cross-provider resume or handoff semantics.
181
+
182
+ This package should own:
183
+
184
+ - Provider detection and capability reporting.
185
+ - Provider-specific command args, env, MCP config delivery, and model normalization.
186
+ - Process supervision and transport handling.
187
+ - Provider output parsing into `AgentEvent`.
188
+ - Cleanup of per-run temporary files it creates.
189
+
190
+ Keep the host adapter thin:
191
+
192
+ ```ts
193
+ const mcpServers = [{
194
+ name: "app-tools",
195
+ type: "stdio" as const,
196
+ command: process.execPath,
197
+ args: ["/absolute/path/to/app-tools-mcp.js"],
198
+ env: {
199
+ APP_TOOL_TOKEN: runScopedToken,
200
+ APP_DAEMON_URL: "http://127.0.0.1:3001",
201
+ },
202
+ }];
203
+
204
+ for await (const event of runtime.run({
205
+ runId,
206
+ provider: selectedProvider,
207
+ cwd: workspaceDir,
208
+ prompt: userPrompt,
209
+ systemPrompt,
210
+ history,
211
+ model,
212
+ mcpServers,
213
+ skillManifest,
214
+ extraAllowedDirs: [workspaceDir],
215
+ env: providerEnv,
216
+ resume: resumeContext,
217
+ })) {
218
+ await projectAgentEventToHostStream(event);
219
+ }
220
+ ```
221
+
222
+ ## Events
223
+
224
+ `AgentEvent` is a TypeScript discriminated union. Narrow on `event.type` and TypeScript will expose the fields for that event variant.
225
+
226
+ ```ts
227
+ if (event.type === "tool_result" && event.status === "failed") {
228
+ console.error(event.error);
229
+ }
230
+ ```
231
+
232
+ Common event types:
233
+
234
+ | Event | Meaning |
235
+ | --- | --- |
236
+ | `status` | Lifecycle progress such as detecting, spawning, running, warning |
237
+ | `thinking_delta` | Incremental reasoning or thinking text when a provider exposes it |
238
+ | `text_delta` | Assistant text |
239
+ | `tool_call` | Normalized tool start |
240
+ | `tool_result` | Normalized tool completion or failure |
241
+ | `stderr` | Redacted stderr text |
242
+ | `error` | Runtime or provider error |
243
+ | `done` | Terminal event with `completed`, `failed`, or `canceled` |
244
+
245
+ Hosts should persist enough event data for replay and should treat `done` as the terminal source of truth for a run.
246
+
247
+ ## Models
248
+
249
+ Use `runtime.detect()` to get provider installation status, support status, and model hints.
250
+
251
+ ```ts
252
+ const modelOptions = await runtime.detect();
253
+ ```
254
+
255
+ Provider behavior differs:
256
+
257
+ - Codex: attempts dynamic discovery with `codex debug models`, then falls back to bundled or package model hints.
258
+ - Claude Code: returns fallback hints such as `sonnet`, `opus`, `haiku`, and known full ids, then adds configured custom ids from the Claude settings file when present. Custom model ids can be passed through.
259
+ - ACP providers: attempt model discovery through ACP session lifecycle when the peer supports it.
260
+
261
+ Hosts should not hardcode Codex or Claude model lists above this package. If a UI needs additional custom models, keep that UI behavior in the host and pass the chosen id into `AgentRunInput.model`.
262
+
263
+ ## Installing Local Providers
264
+
265
+ Hosts can expose an install action for supported local providers through one
266
+ public function:
267
+
268
+ ```ts
269
+ import { installAgentProvider } from "@tutti-os/agent-acp-kit";
270
+
271
+ const result = await installAgentProvider("codex");
272
+ ```
273
+
274
+ Supported install targets are `codex` and `claude`. The function probes the
275
+ provider CLI and ACP adapter first, then chooses the right npm command:
276
+
277
+ - Codex full install: `npm install -g @openai/codex @zed-industries/codex-acp`
278
+ - Codex adapter-only install: `npm install -g @zed-industries/codex-acp`
279
+ - Claude Code full install: `npm install -g @anthropic-ai/claude-code @agentclientprotocol/claude-agent-acp`
280
+ - Claude Code adapter-only install: `npm install -g @agentclientprotocol/claude-agent-acp`
281
+
282
+ The result is structured instead of throwing raw shell output. Failed installs
283
+ include a `failureReason` such as `install_command_failed`,
284
+ `install_timed_out`, or `post_install_probe_failed`. A successful install can
285
+ still return `auth_required` in `after.availability`; hosts should then prompt
286
+ the user to log in with the provider CLI.
287
+
288
+ ## MCP Tools
289
+
290
+ This package does not define product tools. It accepts `mcpServers` and converts them into the provider's expected format.
291
+
292
+ ```ts
293
+ const mcpServers = [{
294
+ name: "app-tools",
295
+ type: "stdio" as const,
296
+ command: "node",
297
+ args: ["/absolute/path/to/app-tools-mcp.js"],
298
+ env: { APP_TOOL_TOKEN: runScopedToken },
299
+ }];
300
+ ```
301
+
302
+ Keep tool tokens run-scoped and short-lived. Do not pass broad application secrets or database credentials directly to agent processes.
303
+
304
+ ## Skills
305
+
306
+ `skillManifest` supports three delivery modes:
307
+
308
+ - `materialized-files`: writes skill files into the run workspace and references them in the prompt.
309
+ - `prompt-injection`: injects skill content into the provider prompt.
310
+ - `project-instructions`: injects instruction-style skill content.
311
+
312
+ The package handles delivery and cleanup. The host remains the source of truth for skill selection, permission, and storage.
313
+
314
+ ## Cancellation And Resume
315
+
316
+ Use `runtime.cancel(runId)` or abort the `signal` passed into `runtime.run()`.
317
+
318
+ ```ts
319
+ const controller = new AbortController();
320
+ const stream = runtime.run({ ...input, signal: controller.signal });
321
+
322
+ controller.abort();
323
+ await runtime.cancel(input.runId);
324
+ ```
325
+
326
+ Resume is conservative by design:
327
+
328
+ - Same-provider resume may pass `providerSessionId` or `resumeToken` when the provider supports it.
329
+ - If no provider resume metadata exists, pass `resume: { mode: "fresh" }`.
330
+ - Cross-provider resume should be host-level handoff: rebuild prompt, history, and context, then start a fresh provider run.
331
+
332
+ Hosts should still pass durable `history` on every run. Native resume is an optimization for the same provider, not the only source of continuity:
333
+
334
+ ```ts
335
+ const sameProvider = previousRun?.provider === selectedProvider;
336
+ const providerResumeId = previousRun?.providerSessionId ?? previousRun?.resumeToken;
337
+ const resume = sameProvider && providerResumeId
338
+ ? {
339
+ mode: "provider" as const,
340
+ providerSessionId: previousRun?.providerSessionId,
341
+ resumeToken: previousRun?.resumeToken,
342
+ }
343
+ : { mode: "fresh" as const };
344
+
345
+ for await (const event of runtime.run({
346
+ runId,
347
+ provider: selectedProvider,
348
+ cwd,
349
+ prompt,
350
+ history: durableMessages,
351
+ resume,
352
+ })) {
353
+ if (event.type === "done") {
354
+ await saveRunResumeMetadata(runId, {
355
+ providerSessionId: event.sessionId,
356
+ resumeToken: event.resumeToken,
357
+ });
358
+ }
359
+ }
360
+ ```
361
+
362
+ ## Public API
363
+
364
+ Main export:
365
+
366
+ ```ts
367
+ import {
368
+ createLocalAgentRuntime,
369
+ createCodexProvider,
370
+ createClaudeProvider,
371
+ createDefaultLocalAgentProviderPlugins,
372
+ createGenericAcpProvider,
373
+ installAgentProvider,
374
+ type AgentEvent,
375
+ type AgentRunInput,
376
+ } from "@tutti-os/agent-acp-kit";
377
+ ```
378
+
379
+ Runtime control plane export:
380
+
381
+ ```ts
382
+ import {
383
+ createRuntimeControlPlane,
384
+ inferRuntimeKind,
385
+ } from "@tutti-os/agent-acp-kit/runtime-control-plane";
386
+ ```
387
+
388
+ Testing export:
389
+
390
+ ```ts
391
+ import {
392
+ assertProviderConformance,
393
+ createFakeAcpPeer,
394
+ createFakeProvider,
395
+ } from "@tutti-os/agent-acp-kit/testing";
396
+ ```
397
+
398
+ ## Development
399
+
400
+ ```bash
401
+ pnpm install
402
+ pnpm typecheck
403
+ pnpm test
404
+ pnpm build
405
+ pnpm pack:check
406
+ ```
407
+
408
+ ## Security
409
+
410
+ Local agents execute user-trusted CLIs on the local machine. Only enable this package in trusted local mode.
411
+
412
+ Recommended host policy:
413
+
414
+ - Use run-scoped tool tokens with TTL and explicit revoke.
415
+ - Do not pass Supabase, database, or cloud provider tokens directly to agents.
416
+ - Redact stdout and stderr before persistence.
417
+ - Clean per-run temporary directories.
418
+ - Limit MCP tool allowlists per run.
419
+ - Gate dangerous provider flags behind trusted local mode.
420
+ - Persist terminal events durably so cancellation or failure cannot be overwritten by late process output.
421
+
422
+ ## Roadmap
423
+
424
+ - Stabilize the public `AgentRunInput` and `AgentEvent` contracts.
425
+ - Expand provider conformance tests for ACP lifecycle edge cases.
426
+ - Add more provider-specific adapters where shared ACP behavior is not enough.
427
+ - Add first-class examples for desktop apps and local web apps.
428
+ - Add repository-level `LICENSE`, `CONTRIBUTING.md`, and `SECURITY.md` before broader external contribution.
@@ -0,0 +1,23 @@
1
+ export type AgentRuntimeMode = "server" | "local";
2
+ export type AgentRuntimeStatus = "online" | "offline" | "degraded";
3
+ export type AgentRuntimeCapabilities = {
4
+ cancel: boolean;
5
+ nativeResume: boolean;
6
+ streaming: boolean;
7
+ toolGateway: boolean;
8
+ maxConcurrentRuns: number;
9
+ };
10
+ export type AgentRuntimeRecord<TKind extends string = string, TProvider extends string = string> = {
11
+ id: string;
12
+ kind: TKind;
13
+ provider?: TProvider;
14
+ mode: AgentRuntimeMode;
15
+ status: AgentRuntimeStatus;
16
+ capabilities: AgentRuntimeCapabilities;
17
+ lastSeenAt?: string;
18
+ };
19
+ export type RuntimeTarget<TKind extends string = string, TProvider extends string = string> = {
20
+ kind: TKind;
21
+ provider?: TProvider;
22
+ };
23
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/core/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAC5B,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,SAAS,SAAS,MAAM,GAAG,MAAM,IAC/B;IACF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,wBAAwB,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,SAAS,SAAS,MAAM,GAAG,MAAM,IAC/B;IACF,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/core/capabilities.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { AgentDetection } from "./provider-plugin.js";
2
+ export type DetectContext = {
3
+ cwd?: string;
4
+ env?: Record<string, string | undefined>;
5
+ now?: () => number;
6
+ };
7
+ export type DetectionResult = AgentDetection;
8
+ //# sourceMappingURL=detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/core/detection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/core/detection.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export type LocalAgentRuntimeErrorCode = "runtime_offline" | "runtime_capacity_exceeded" | "runtime_not_registered" | "provider_protocol_error";
2
+ export declare class LocalAgentRuntimeError extends Error {
3
+ readonly code: LocalAgentRuntimeErrorCode;
4
+ constructor(code: LocalAgentRuntimeErrorCode, message: string);
5
+ }
6
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAClC,iBAAiB,GACjB,2BAA2B,GAC3B,wBAAwB,GACxB,yBAAyB,CAAC;AAE9B,qBAAa,sBAAuB,SAAQ,KAAK;IAE7C,QAAQ,CAAC,IAAI,EAAE,0BAA0B;gBAAhC,IAAI,EAAE,0BAA0B,EACzC,OAAO,EAAE,MAAM;CAKlB"}
@@ -0,0 +1,9 @@
1
+ export class LocalAgentRuntimeError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.code = code;
6
+ this.name = "LocalAgentRuntimeError";
7
+ }
8
+ }
9
+ //# sourceMappingURL=errors.js.map