indusagi-coding-agent 0.1.42 → 0.1.44

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 (288) hide show
  1. package/CHANGELOG.md +23 -3
  2. package/README.md +3 -0
  3. package/dist/command-line/args.js +1 -1
  4. package/dist/command-line/args.js.map +1 -1
  5. package/dist/command-line/list-models.js +1 -1
  6. package/dist/command-line/list-models.js.map +1 -1
  7. package/dist/command-line/login-handler.d.ts.map +1 -1
  8. package/dist/command-line/login-handler.js +39 -0
  9. package/dist/command-line/login-handler.js.map +1 -1
  10. package/dist/dev/observe-deep.d.ts +2 -0
  11. package/dist/dev/observe-deep.d.ts.map +1 -0
  12. package/dist/dev/observe-deep.js +333 -0
  13. package/dist/dev/observe-deep.js.map +1 -0
  14. package/dist/dev/observe-smoke.d.ts +2 -0
  15. package/dist/dev/observe-smoke.d.ts.map +1 -0
  16. package/dist/dev/observe-smoke.js +264 -0
  17. package/dist/dev/observe-smoke.js.map +1 -0
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/interfaces/induscode-ui-delegate.d.ts +3 -0
  23. package/dist/interfaces/induscode-ui-delegate.d.ts.map +1 -0
  24. package/dist/interfaces/induscode-ui-delegate.js +148 -0
  25. package/dist/interfaces/induscode-ui-delegate.js.map +1 -0
  26. package/dist/interfaces/terminal-ui/components/footer.d.ts.map +1 -1
  27. package/dist/interfaces/terminal-ui/components/footer.js +9 -15
  28. package/dist/interfaces/terminal-ui/components/footer.js.map +1 -1
  29. package/dist/interfaces/terminal-ui/components/model-selector.d.ts.map +1 -1
  30. package/dist/interfaces/terminal-ui/components/model-selector.js +1 -1
  31. package/dist/interfaces/terminal-ui/components/model-selector.js.map +1 -1
  32. package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts.map +1 -1
  33. package/dist/interfaces/terminal-ui/components/oauth-selector.js +1 -0
  34. package/dist/interfaces/terminal-ui/components/oauth-selector.js.map +1 -1
  35. package/dist/main.d.ts.map +1 -1
  36. package/dist/main.js +42 -18
  37. package/dist/main.js.map +1 -1
  38. package/dist/observe.d.ts +2 -0
  39. package/dist/observe.d.ts.map +1 -0
  40. package/dist/observe.js +2 -0
  41. package/dist/observe.js.map +1 -0
  42. package/dist/runtime/agent-session.d.ts +15 -0
  43. package/dist/runtime/agent-session.d.ts.map +1 -1
  44. package/dist/runtime/agent-session.js +444 -223
  45. package/dist/runtime/agent-session.js.map +1 -1
  46. package/dist/runtime/index.d.ts +5 -0
  47. package/dist/runtime/index.d.ts.map +1 -1
  48. package/dist/runtime/index.js +5 -0
  49. package/dist/runtime/index.js.map +1 -1
  50. package/dist/runtime/model-registry.d.ts +6 -0
  51. package/dist/runtime/model-registry.d.ts.map +1 -1
  52. package/dist/runtime/model-registry.js +71 -14
  53. package/dist/runtime/model-registry.js.map +1 -1
  54. package/dist/runtime/model-resolver.d.ts.map +1 -1
  55. package/dist/runtime/model-resolver.js +6 -3
  56. package/dist/runtime/model-resolver.js.map +1 -1
  57. package/dist/runtime/observe.d.ts +50 -0
  58. package/dist/runtime/observe.d.ts.map +1 -0
  59. package/dist/runtime/observe.js +233 -0
  60. package/dist/runtime/observe.js.map +1 -0
  61. package/dist/runtime/plugins/types.d.ts +3 -0
  62. package/dist/runtime/plugins/types.d.ts.map +1 -1
  63. package/dist/runtime/plugins/types.js.map +1 -1
  64. package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts +19 -0
  65. package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts.map +1 -0
  66. package/dist/runtime/providers/adapters/claude-cli-adapter.js +242 -0
  67. package/dist/runtime/providers/adapters/claude-cli-adapter.js.map +1 -0
  68. package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts +18 -0
  69. package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts.map +1 -0
  70. package/dist/runtime/providers/adapters/codex-cli-adapter.js +177 -0
  71. package/dist/runtime/providers/adapters/codex-cli-adapter.js.map +1 -0
  72. package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts +21 -0
  73. package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts.map +1 -0
  74. package/dist/runtime/providers/adapters/indusagi-cli-adapter.js +162 -0
  75. package/dist/runtime/providers/adapters/indusagi-cli-adapter.js.map +1 -0
  76. package/dist/runtime/providers/adapters/utils.d.ts +12 -0
  77. package/dist/runtime/providers/adapters/utils.d.ts.map +1 -0
  78. package/dist/runtime/providers/adapters/utils.js +122 -0
  79. package/dist/runtime/providers/adapters/utils.js.map +1 -0
  80. package/dist/runtime/providers/builtins.d.ts +3 -0
  81. package/dist/runtime/providers/builtins.d.ts.map +1 -0
  82. package/dist/runtime/providers/builtins.js +99 -0
  83. package/dist/runtime/providers/builtins.js.map +1 -0
  84. package/dist/runtime/providers/provider-adapter-registry.d.ts +11 -0
  85. package/dist/runtime/providers/provider-adapter-registry.d.ts.map +1 -0
  86. package/dist/runtime/providers/provider-adapter-registry.js +36 -0
  87. package/dist/runtime/providers/provider-adapter-registry.js.map +1 -0
  88. package/dist/runtime/providers/provider-adapter.d.ts +33 -0
  89. package/dist/runtime/providers/provider-adapter.d.ts.map +1 -0
  90. package/dist/runtime/providers/provider-adapter.js +2 -0
  91. package/dist/runtime/providers/provider-adapter.js.map +1 -0
  92. package/dist/runtime/providers/provider-service.d.ts +33 -0
  93. package/dist/runtime/providers/provider-service.d.ts.map +1 -0
  94. package/dist/runtime/providers/provider-service.js +157 -0
  95. package/dist/runtime/providers/provider-service.js.map +1 -0
  96. package/dist/runtime/providers/types.d.ts +29 -0
  97. package/dist/runtime/providers/types.d.ts.map +1 -0
  98. package/dist/runtime/providers/types.js +9 -0
  99. package/dist/runtime/providers/types.js.map +1 -0
  100. package/dist/runtime/sdk.d.ts +6 -0
  101. package/dist/runtime/sdk.d.ts.map +1 -1
  102. package/dist/runtime/sdk.js +55 -8
  103. package/dist/runtime/sdk.js.map +1 -1
  104. package/dist/telemetry/core/types.d.ts +1 -1
  105. package/dist/telemetry/core/types.js +1 -1
  106. package/dist/vendor/observe/adapters/agent-event-adapter.d.ts +28 -0
  107. package/dist/vendor/observe/adapters/agent-event-adapter.d.ts.map +1 -0
  108. package/dist/vendor/observe/adapters/agent-event-adapter.js +136 -0
  109. package/dist/vendor/observe/adapters/agent-event-adapter.js.map +1 -0
  110. package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts +24 -0
  111. package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts.map +1 -0
  112. package/dist/vendor/observe/adapters/ai-stream-adapter.js +118 -0
  113. package/dist/vendor/observe/adapters/ai-stream-adapter.js.map +1 -0
  114. package/dist/vendor/observe/artifacts/content-store.d.ts +12 -0
  115. package/dist/vendor/observe/artifacts/content-store.d.ts.map +1 -0
  116. package/dist/vendor/observe/artifacts/content-store.js +2 -0
  117. package/dist/vendor/observe/artifacts/content-store.js.map +1 -0
  118. package/dist/vendor/observe/artifacts/file-content-store.d.ts +16 -0
  119. package/dist/vendor/observe/artifacts/file-content-store.d.ts.map +1 -0
  120. package/dist/vendor/observe/artifacts/file-content-store.js +43 -0
  121. package/dist/vendor/observe/artifacts/file-content-store.js.map +1 -0
  122. package/dist/vendor/observe/batcher.d.ts +27 -0
  123. package/dist/vendor/observe/batcher.d.ts.map +1 -0
  124. package/dist/vendor/observe/batcher.js +66 -0
  125. package/dist/vendor/observe/batcher.js.map +1 -0
  126. package/dist/vendor/observe/client/artifacts-manager.d.ts +29 -0
  127. package/dist/vendor/observe/client/artifacts-manager.d.ts.map +1 -0
  128. package/dist/vendor/observe/client/artifacts-manager.js +120 -0
  129. package/dist/vendor/observe/client/artifacts-manager.js.map +1 -0
  130. package/dist/vendor/observe/client/datasets-manager.d.ts +16 -0
  131. package/dist/vendor/observe/client/datasets-manager.d.ts.map +1 -0
  132. package/dist/vendor/observe/client/datasets-manager.js +27 -0
  133. package/dist/vendor/observe/client/datasets-manager.js.map +1 -0
  134. package/dist/vendor/observe/client/experiments-manager.d.ts +61 -0
  135. package/dist/vendor/observe/client/experiments-manager.d.ts.map +1 -0
  136. package/dist/vendor/observe/client/experiments-manager.js +132 -0
  137. package/dist/vendor/observe/client/experiments-manager.js.map +1 -0
  138. package/dist/vendor/observe/client/index.d.ts +9 -0
  139. package/dist/vendor/observe/client/index.d.ts.map +1 -0
  140. package/dist/vendor/observe/client/index.js +9 -0
  141. package/dist/vendor/observe/client/index.js.map +1 -0
  142. package/dist/vendor/observe/client/observe-client.d.ts +30 -0
  143. package/dist/vendor/observe/client/observe-client.d.ts.map +1 -0
  144. package/dist/vendor/observe/client/observe-client.js +22 -0
  145. package/dist/vendor/observe/client/observe-client.js.map +1 -0
  146. package/dist/vendor/observe/client/prompts-manager.d.ts +17 -0
  147. package/dist/vendor/observe/client/prompts-manager.d.ts.map +1 -0
  148. package/dist/vendor/observe/client/prompts-manager.js +38 -0
  149. package/dist/vendor/observe/client/prompts-manager.js.map +1 -0
  150. package/dist/vendor/observe/client/scores-manager.d.ts +10 -0
  151. package/dist/vendor/observe/client/scores-manager.d.ts.map +1 -0
  152. package/dist/vendor/observe/client/scores-manager.js +15 -0
  153. package/dist/vendor/observe/client/scores-manager.js.map +1 -0
  154. package/dist/vendor/observe/client/sessions-manager.d.ts +15 -0
  155. package/dist/vendor/observe/client/sessions-manager.d.ts.map +1 -0
  156. package/dist/vendor/observe/client/sessions-manager.js +24 -0
  157. package/dist/vendor/observe/client/sessions-manager.js.map +1 -0
  158. package/dist/vendor/observe/client/traces-manager.d.ts +23 -0
  159. package/dist/vendor/observe/client/traces-manager.d.ts.map +1 -0
  160. package/dist/vendor/observe/client/traces-manager.js +39 -0
  161. package/dist/vendor/observe/client/traces-manager.js.map +1 -0
  162. package/dist/vendor/observe/console-exporter.d.ts +11 -0
  163. package/dist/vendor/observe/console-exporter.d.ts.map +1 -0
  164. package/dist/vendor/observe/console-exporter.js +18 -0
  165. package/dist/vendor/observe/console-exporter.js.map +1 -0
  166. package/dist/vendor/observe/context.d.ts +4 -0
  167. package/dist/vendor/observe/context.d.ts.map +1 -0
  168. package/dist/vendor/observe/context.js +9 -0
  169. package/dist/vendor/observe/context.js.map +1 -0
  170. package/dist/vendor/observe/entities/artifacts.d.ts +46 -0
  171. package/dist/vendor/observe/entities/artifacts.d.ts.map +1 -0
  172. package/dist/vendor/observe/entities/artifacts.js +2 -0
  173. package/dist/vendor/observe/entities/artifacts.js.map +1 -0
  174. package/dist/vendor/observe/entities/datasets.d.ts +37 -0
  175. package/dist/vendor/observe/entities/datasets.d.ts.map +1 -0
  176. package/dist/vendor/observe/entities/datasets.js +2 -0
  177. package/dist/vendor/observe/entities/datasets.js.map +1 -0
  178. package/dist/vendor/observe/entities/experiments.d.ts +66 -0
  179. package/dist/vendor/observe/entities/experiments.d.ts.map +1 -0
  180. package/dist/vendor/observe/entities/experiments.js +2 -0
  181. package/dist/vendor/observe/entities/experiments.js.map +1 -0
  182. package/dist/vendor/observe/entities/index.d.ts +9 -0
  183. package/dist/vendor/observe/entities/index.d.ts.map +1 -0
  184. package/dist/vendor/observe/entities/index.js +9 -0
  185. package/dist/vendor/observe/entities/index.js.map +1 -0
  186. package/dist/vendor/observe/entities/prompts.d.ts +25 -0
  187. package/dist/vendor/observe/entities/prompts.d.ts.map +1 -0
  188. package/dist/vendor/observe/entities/prompts.js +2 -0
  189. package/dist/vendor/observe/entities/prompts.js.map +1 -0
  190. package/dist/vendor/observe/entities/scores.d.ts +28 -0
  191. package/dist/vendor/observe/entities/scores.d.ts.map +1 -0
  192. package/dist/vendor/observe/entities/scores.js +2 -0
  193. package/dist/vendor/observe/entities/scores.js.map +1 -0
  194. package/dist/vendor/observe/entities/sessions.d.ts +36 -0
  195. package/dist/vendor/observe/entities/sessions.d.ts.map +1 -0
  196. package/dist/vendor/observe/entities/sessions.js +2 -0
  197. package/dist/vendor/observe/entities/sessions.js.map +1 -0
  198. package/dist/vendor/observe/entities/shared.d.ts +26 -0
  199. package/dist/vendor/observe/entities/shared.d.ts.map +1 -0
  200. package/dist/vendor/observe/entities/shared.js +2 -0
  201. package/dist/vendor/observe/entities/shared.js.map +1 -0
  202. package/dist/vendor/observe/entities/traces.d.ts +59 -0
  203. package/dist/vendor/observe/entities/traces.d.ts.map +1 -0
  204. package/dist/vendor/observe/entities/traces.js +2 -0
  205. package/dist/vendor/observe/entities/traces.js.map +1 -0
  206. package/dist/vendor/observe/exporter.d.ts +2 -0
  207. package/dist/vendor/observe/exporter.d.ts.map +1 -0
  208. package/dist/vendor/observe/exporter.js +2 -0
  209. package/dist/vendor/observe/exporter.js.map +1 -0
  210. package/dist/vendor/observe/file-exporter.d.ts +16 -0
  211. package/dist/vendor/observe/file-exporter.d.ts.map +1 -0
  212. package/dist/vendor/observe/file-exporter.js +39 -0
  213. package/dist/vendor/observe/file-exporter.js.map +1 -0
  214. package/dist/vendor/observe/global.d.ts +6 -0
  215. package/dist/vendor/observe/global.d.ts.map +1 -0
  216. package/dist/vendor/observe/global.js +17 -0
  217. package/dist/vendor/observe/global.js.map +1 -0
  218. package/dist/vendor/observe/index.d.ts +24 -0
  219. package/dist/vendor/observe/index.d.ts.map +1 -0
  220. package/dist/vendor/observe/index.js +24 -0
  221. package/dist/vendor/observe/index.js.map +1 -0
  222. package/dist/vendor/observe/noop.d.ts +17 -0
  223. package/dist/vendor/observe/noop.d.ts.map +1 -0
  224. package/dist/vendor/observe/noop.js +80 -0
  225. package/dist/vendor/observe/noop.js.map +1 -0
  226. package/dist/vendor/observe/privacy.d.ts +18 -0
  227. package/dist/vendor/observe/privacy.d.ts.map +1 -0
  228. package/dist/vendor/observe/privacy.js +160 -0
  229. package/dist/vendor/observe/privacy.js.map +1 -0
  230. package/dist/vendor/observe/query/simple-query-client.d.ts +11 -0
  231. package/dist/vendor/observe/query/simple-query-client.d.ts.map +1 -0
  232. package/dist/vendor/observe/query/simple-query-client.js +31 -0
  233. package/dist/vendor/observe/query/simple-query-client.js.map +1 -0
  234. package/dist/vendor/observe/replay/session-replay.d.ts +20 -0
  235. package/dist/vendor/observe/replay/session-replay.d.ts.map +1 -0
  236. package/dist/vendor/observe/replay/session-replay.js +180 -0
  237. package/dist/vendor/observe/replay/session-replay.js.map +1 -0
  238. package/dist/vendor/observe/runtime.d.ts +27 -0
  239. package/dist/vendor/observe/runtime.d.ts.map +1 -0
  240. package/dist/vendor/observe/runtime.js +177 -0
  241. package/dist/vendor/observe/runtime.js.map +1 -0
  242. package/dist/vendor/observe/server/dashboard-html.d.ts +6 -0
  243. package/dist/vendor/observe/server/dashboard-html.d.ts.map +1 -0
  244. package/dist/vendor/observe/server/dashboard-html.js +305 -0
  245. package/dist/vendor/observe/server/dashboard-html.js.map +1 -0
  246. package/dist/vendor/observe/server/http-observe-server.d.ts +62 -0
  247. package/dist/vendor/observe/server/http-observe-server.d.ts.map +1 -0
  248. package/dist/vendor/observe/server/http-observe-server.js +418 -0
  249. package/dist/vendor/observe/server/http-observe-server.js.map +1 -0
  250. package/dist/vendor/observe/server/in-memory-observe-server.d.ts +20 -0
  251. package/dist/vendor/observe/server/in-memory-observe-server.d.ts.map +1 -0
  252. package/dist/vendor/observe/server/in-memory-observe-server.js +76 -0
  253. package/dist/vendor/observe/server/in-memory-observe-server.js.map +1 -0
  254. package/dist/vendor/observe/span.d.ts +45 -0
  255. package/dist/vendor/observe/span.d.ts.map +1 -0
  256. package/dist/vendor/observe/span.js +110 -0
  257. package/dist/vendor/observe/span.js.map +1 -0
  258. package/dist/vendor/observe/store/contracts.d.ts +59 -0
  259. package/dist/vendor/observe/store/contracts.d.ts.map +1 -0
  260. package/dist/vendor/observe/store/contracts.js +2 -0
  261. package/dist/vendor/observe/store/contracts.js.map +1 -0
  262. package/dist/vendor/observe/store/file-control-plane-store.d.ts +33 -0
  263. package/dist/vendor/observe/store/file-control-plane-store.d.ts.map +1 -0
  264. package/dist/vendor/observe/store/file-control-plane-store.js +146 -0
  265. package/dist/vendor/observe/store/file-control-plane-store.js.map +1 -0
  266. package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts +84 -0
  267. package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts.map +1 -0
  268. package/dist/vendor/observe/store/in-memory-control-plane-store.js +447 -0
  269. package/dist/vendor/observe/store/in-memory-control-plane-store.js.map +1 -0
  270. package/dist/vendor/observe/store/index.d.ts +4 -0
  271. package/dist/vendor/observe/store/index.d.ts.map +1 -0
  272. package/dist/vendor/observe/store/index.js +4 -0
  273. package/dist/vendor/observe/store/index.js.map +1 -0
  274. package/dist/vendor/observe/types.d.ts +246 -0
  275. package/dist/vendor/observe/types.d.ts.map +1 -0
  276. package/dist/vendor/observe/types.js +152 -0
  277. package/dist/vendor/observe/types.js.map +1 -0
  278. package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts +25 -0
  279. package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts.map +1 -0
  280. package/dist/vendor/observe/worker/in-memory-observe-worker.js +82 -0
  281. package/dist/vendor/observe/worker/in-memory-observe-worker.js.map +1 -0
  282. package/guides/CLAUDE_CODEX_CLI_INTEGRATION_PLAN.md +321 -0
  283. package/guides/{PI_MONO_MIT_REMOVAL_GUIDE.md → INDUSAGI_MONO_MIT_REMOVAL_GUIDE.md} +29 -29
  284. package/guides/INDUSVX_OBSERVE_FULL_INTEGRATION_REPORT.md +543 -0
  285. package/guides/OBSERVE_DEEP_VALIDATION.md +252 -0
  286. package/guides/OBSERVE_LOCAL_TESTING.md +183 -0
  287. package/guides/OPTION3_PROVIDER_ADAPTER_RUNTIME_PLAN.md +370 -0
  288. package/package.json +11 -4
@@ -0,0 +1,370 @@
1
+ # Option 3 Plan: Full Provider Adapter Runtime (Claude CLI / Codex CLI / Indusagi CLI)
2
+
3
+ ## Objective
4
+
5
+ Implement a **production-grade provider runtime layer** in `indusagi-screth` so CLI-backed providers behave as first-class runtimes, not just `streamSimple` wrappers.
6
+
7
+ Target providers:
8
+
9
+ - `claude-cli`
10
+ - `codex-cli`
11
+ - `indusagi-cli`
12
+
13
+ ---
14
+
15
+ ## Success Criteria
16
+
17
+ 1. Selecting any of the 3 providers routes execution through a dedicated adapter runtime.
18
+ 2. Session lifecycle is explicit: start, send turn, interrupt, shutdown, recover.
19
+ 3. Provider events are normalized into the existing `AssistantMessageEventStream` path.
20
+ 4. Session state persists enough metadata to resume reliably.
21
+ 5. Existing API providers keep working unchanged.
22
+
23
+ ---
24
+
25
+ ## Current Constraints in Codebase
26
+
27
+ Relevant current flow:
28
+
29
+ - Provider registration and model list:
30
+ - `app/runtime/model-registry.ts`
31
+ - Stream execution path:
32
+ - `app/runtime/sdk.ts` (`createStreamWithHooks` -> `streamSimple(...)`)
33
+ - Session orchestration and persistence:
34
+ - `app/runtime/agent-session.ts`
35
+ - `app/runtime/session-manager.ts`
36
+ - Extension registration queue:
37
+ - `app/runtime/plugins/loader.ts`
38
+ - `app/runtime/plugins/runner.ts`
39
+ - `app/main.ts`
40
+ - Existing RPC client (useful for `indusagi-cli` adapter):
41
+ - `app/interfaces/service-api/rpc-client.ts`
42
+
43
+ Problem: current runtime assumes model API adapters. CLI runtimes require their own session/event lifecycle.
44
+
45
+ ---
46
+
47
+ ## Target Architecture
48
+
49
+ ## 1) New Provider Runtime Module
50
+
51
+ Create a new module tree:
52
+
53
+ - `app/runtime/providers/types.ts`
54
+ - `app/runtime/providers/provider-adapter.ts`
55
+ - `app/runtime/providers/provider-adapter-registry.ts`
56
+ - `app/runtime/providers/provider-service.ts`
57
+ - `app/runtime/providers/adapters/claude-cli-adapter.ts`
58
+ - `app/runtime/providers/adapters/codex-cli-adapter.ts`
59
+ - `app/runtime/providers/adapters/indusagi-cli-adapter.ts`
60
+
61
+ ## 2) Core Interfaces
62
+
63
+ ### `ProviderAdapter`
64
+
65
+ ```ts
66
+ export interface ProviderAdapter {
67
+ readonly id: string;
68
+ supports(provider: string): boolean;
69
+
70
+ startSession(input: {
71
+ provider: string;
72
+ modelId: string;
73
+ sessionId: string;
74
+ cwd: string;
75
+ }): Promise<ProviderSessionHandle>;
76
+
77
+ streamTurn(input: {
78
+ handle: ProviderSessionHandle;
79
+ model: Model<Api>;
80
+ context: Context;
81
+ options?: SimpleStreamOptions;
82
+ }): AssistantMessageEventStream;
83
+
84
+ interrupt(handle: ProviderSessionHandle): Promise<void>;
85
+ stopSession(handle: ProviderSessionHandle): Promise<void>;
86
+ healthCheck?(): Promise<{ ok: boolean; reason?: string }>;
87
+ }
88
+ ```
89
+
90
+ ### `ProviderSessionHandle`
91
+
92
+ Contains adapter-managed runtime identity and metadata:
93
+
94
+ - `adapterId`
95
+ - `provider`
96
+ - `modelId`
97
+ - `runtimeSessionId` (thread/conversation/process id)
98
+ - adapter-specific opaque payload
99
+
100
+ ## 3) `ProviderService`
101
+
102
+ Responsibilities:
103
+
104
+ - decide whether a model/provider should use adapter runtime
105
+ - get or create adapter session handle for current agent session
106
+ - stream one turn via adapter
107
+ - interrupt/cleanup active runtime
108
+ - persist runtime metadata for restore
109
+
110
+ Internal state map:
111
+
112
+ - `Map<agentSessionId, ProviderSessionHandle>`
113
+
114
+ ## 4) Adapter Registry
115
+
116
+ Responsibilities:
117
+
118
+ - register adapters
119
+ - resolve by provider id
120
+ - expose diagnostics for availability checks
121
+
122
+ ---
123
+
124
+ ## Integration Plan (File-Level)
125
+
126
+ ## Phase 0 — Scaffolding
127
+
128
+ ### Add new files
129
+
130
+ - `app/runtime/providers/types.ts`
131
+ - `app/runtime/providers/provider-adapter.ts`
132
+ - `app/runtime/providers/provider-adapter-registry.ts`
133
+ - `app/runtime/providers/provider-service.ts`
134
+
135
+ ### Add lightweight tests
136
+
137
+ - `tests/runtime/providers/provider-adapter-registry.test.ts`
138
+ - `tests/runtime/providers/provider-service.test.ts`
139
+
140
+ ---
141
+
142
+ ## Phase 1 — Runtime Routing in SDK
143
+
144
+ ### Modify `app/runtime/sdk.ts`
145
+
146
+ 1. Create `ProviderAdapterRegistry` during `createAgentSession()` bootstrap.
147
+ 2. Register built-in adapters (`claude-cli`, `codex-cli`, `indusagi-cli`).
148
+ 3. Create `ProviderService` and inject references:
149
+ - session id from `SessionManager`
150
+ - cwd
151
+ 4. Update `createStreamWithHooks(...)`:
152
+ - before `streamSimple(...)`, call provider service:
153
+ - if adapter exists for `model.provider`, use `providerService.streamTurn(...)`
154
+ - else fallback to existing `streamSimple(...)`
155
+
156
+ Result: model/API providers unaffected; only targeted CLI providers reroute.
157
+
158
+ ---
159
+
160
+ ## Phase 2 — Provider Metadata + Validation
161
+
162
+ ### Modify `app/runtime/model-registry.ts`
163
+
164
+ Add provider runtime metadata support in `ProviderConfigInput`:
165
+
166
+ ```ts
167
+ runtime?: {
168
+ adapter: "claude-cli" | "codex-cli" | "indusagi-cli" | string;
169
+ authMode?: "apiKey" | "oauth" | "external-cli" | "none";
170
+ }
171
+ ```
172
+
173
+ Changes:
174
+
175
+ 1. Persist runtime config per provider in registry map.
176
+ 2. Add `getProviderRuntime(provider: string)` accessor.
177
+ 3. Relax validation for `models` when runtime auth is external:
178
+ - if `runtime.authMode` is `external-cli` or `none`, do not require `apiKey/oauth`.
179
+ 4. Keep existing validation for normal HTTP API providers.
180
+
181
+ ### Modify extension type surface
182
+
183
+ - `app/runtime/plugins/types.ts`
184
+ - extend `ProviderConfig` with same `runtime` field.
185
+
186
+ ---
187
+
188
+ ## Phase 3 — Session Persistence for Adapter State
189
+
190
+ ### Modify `app/runtime/session-manager.ts`
191
+
192
+ Use existing custom entry mechanism:
193
+
194
+ - `appendCustomEntry("provider_runtime", data)`
195
+
196
+ Persist after adapter session creation/update:
197
+
198
+ ```json
199
+ {
200
+ "type": "custom",
201
+ "customType": "provider_runtime",
202
+ "data": {
203
+ "provider": "codex-cli",
204
+ "adapterId": "codex-cli",
205
+ "modelId": "gpt-5.4-1m",
206
+ "runtimeSessionId": "...",
207
+ "timestamp": "..."
208
+ }
209
+ }
210
+ ```
211
+
212
+ On startup, `ProviderService` should inspect latest relevant custom entry and attempt restore.
213
+
214
+ ---
215
+
216
+ ## Phase 4 — Adapter Implementations
217
+
218
+ ## 4.1 `IndusagiCliAdapter` (first, easiest)
219
+
220
+ File:
221
+
222
+ - `app/runtime/providers/adapters/indusagi-cli-adapter.ts`
223
+
224
+ Implementation:
225
+
226
+ - use existing `RpcClient` (`app/interfaces/service-api/rpc-client.ts`)
227
+ - start subprocess in `--mode rpc`
228
+ - set provider/model if needed
229
+ - map incoming RPC events to `AssistantMessageEventStream` events
230
+ - support interrupt/stop cleanly
231
+
232
+ Why first: strong existing API and event stream already available.
233
+
234
+ ## 4.2 `CodexCliAdapter`
235
+
236
+ File:
237
+
238
+ - `app/runtime/providers/adapters/codex-cli-adapter.ts`
239
+
240
+ Implementation approach:
241
+
242
+ - mimic t3code `codex app-server` management pattern
243
+ - manage process lifecycle per agent session
244
+ - translate codex events -> normalized assistant stream
245
+ - implement robust retry and “binary missing” errors
246
+
247
+ ## 4.3 `ClaudeCliAdapter`
248
+
249
+ File:
250
+
251
+ - `app/runtime/providers/adapters/claude-cli-adapter.ts`
252
+
253
+ Implementation approach:
254
+
255
+ - support preferred Claude CLI invocation/session mode available in your environment
256
+ - parse streaming/stdout events to text deltas
257
+ - add cancellation + process cleanup
258
+
259
+ ---
260
+
261
+ ## Phase 5 — Agent Session Hooks
262
+
263
+ ### Modify `app/runtime/agent-session.ts`
264
+
265
+ Add lifecycle hooks to call provider service:
266
+
267
+ 1. On model change to non-adapter provider:
268
+ - stop old adapter session handle (if exists).
269
+ 2. On user interrupt/steer path:
270
+ - call `providerService.interrupt(...)` when current provider is adapter-backed.
271
+ 3. On session shutdown:
272
+ - `providerService.stopSession(...)`.
273
+
274
+ Goal: no orphan subprocesses and predictable cancellation.
275
+
276
+ ---
277
+
278
+ ## Phase 6 — CLI UX and Login Surface
279
+
280
+ ### Modify `app/command-line/login-handler.ts`
281
+
282
+ - include adapter providers only if they actually support login.
283
+ - for `external-cli` auth mode, show clear message:
284
+ - “Authenticate using provider CLI command (e.g., `claude login`, `codex login`)”
285
+
286
+ ### Modify `app/command-line/list-models.ts` (optional enhancement)
287
+
288
+ - show runtime-backed providers even without API keys when `authMode=external-cli` and health check passes.
289
+
290
+ ---
291
+
292
+ ## Phase 7 — Tests
293
+
294
+ Add tests in:
295
+
296
+ - `tests/runtime/providers/*.test.ts`
297
+ - `tests/runtime/model-registry*.test.ts`
298
+ - `tests/runtime/sdk*.test.ts`
299
+
300
+ ### Required coverage
301
+
302
+ 1. Routing: adapter provider uses `ProviderService`, others use `streamSimple`.
303
+ 2. Validation: runtime external providers do not require apiKey/oauth.
304
+ 3. Persistence: provider runtime custom entry is written and restored.
305
+ 4. Interrupt/shutdown: child process cleanup runs.
306
+ 5. Error handling: binary missing, startup failure, malformed stream.
307
+
308
+ ---
309
+
310
+ ## Phase 8 — Rollout Strategy
311
+
312
+ 1. Ship behind env flag:
313
+ - `INDUSAGI_ENABLE_PROVIDER_ADAPTERS=1`
314
+ 2. Enable only `indusagi-cli` adapter first.
315
+ 3. Then enable `codex-cli` and `claude-cli` after integration tests pass.
316
+ 4. Remove flag when stable.
317
+
318
+ ---
319
+
320
+ ## Event Normalization Rules
321
+
322
+ All adapters must normalize to one contract:
323
+
324
+ 1. `pushStart(output)`
325
+ 2. `pushTextStart(index, output)` once
326
+ 3. `pushTextDelta(index, delta, output)` many times
327
+ 4. `pushTextEnd(index, finalText, output)` once
328
+ 5. `pushDone(stopReason, output)` once
329
+ 6. `pushError(...)` on failure path
330
+
331
+ Non-text native events (approvals/tool telemetry) should be mapped to session custom entries first, then surfaced in UI incrementally.
332
+
333
+ ---
334
+
335
+ ## Risks and Mitigations
336
+
337
+ 1. **Provider protocol drift** (CLI output formats change)
338
+ - Mitigation: adapter-level parsers with golden tests.
339
+
340
+ 2. **Process leaks**
341
+ - Mitigation: strict stop/timeout/SIGKILL policy in provider service.
342
+
343
+ 3. **Auth ambiguity for external CLI**
344
+ - Mitigation: explicit `authMode=external-cli` + health checks + clear UX copy.
345
+
346
+ 4. **Session mismatch on restore**
347
+ - Mitigation: store adapter/model/provider in custom entry and validate before restore.
348
+
349
+ ---
350
+
351
+ ## Definition of Done
352
+
353
+ - [ ] New provider runtime module exists with registry/service/adapters.
354
+ - [ ] `sdk.ts` routes adapter providers through provider service.
355
+ - [ ] `model-registry.ts` supports runtime metadata and external-cli auth mode.
356
+ - [ ] Adapter session metadata persisted and restorable.
357
+ - [ ] `indusagi-cli` adapter fully working via RPC.
358
+ - [ ] `codex-cli` and `claude-cli` adapters pass smoke tests.
359
+ - [ ] No regressions for existing API providers.
360
+
361
+ ---
362
+
363
+ ## Recommended Execution Order (Practical)
364
+
365
+ 1. Build shared runtime module + routing.
366
+ 2. Implement `indusagi-cli` adapter first (uses existing RPC client).
367
+ 3. Add persistence + interruption handling.
368
+ 4. Implement `codex-cli` adapter.
369
+ 5. Implement `claude-cli` adapter.
370
+ 6. Harden tests and remove feature flag.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "indusagi-coding-agent",
3
- "version": "0.1.42",
4
- "description": "Local TypeScript coding-agent workspace built around the sibling indusvx-screth_copy package.",
3
+ "version": "0.1.44",
4
+ "description": "Terminal-first TypeScript coding agent built on the published indusagi package.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -33,7 +33,11 @@
33
33
  "clean": "shx rm -rf dist",
34
34
  "sync:export-vendors": "node tasks/sync-export-vendors.mjs",
35
35
  "copy:export-assets": "node tasks/copy-export-assets.mjs",
36
- "build": "npm run sync:export-vendors && tsc -p tsconfig.build.json && npm run copy:export-assets && shx chmod +x dist/cli.js",
36
+ "build": "npm run build:observe-local && npm run sync:export-vendors && tsc -p tsconfig.build.json && npm run copy:export-assets && shx chmod +x dist/cli.js",
37
+ "build:observe-local": "node -e \"console.log('Using published indusagi@0.12.24')\"",
38
+ "observe:smoke": "npm run build && node dist/dev/observe-smoke.js",
39
+ "observe:smoke:serve": "npm run build && node dist/dev/observe-smoke.js --serve",
40
+ "observe:deep": "npm run build && node dist/dev/observe-deep.js",
37
41
  "test": "vitest --run",
38
42
  "verify": "npm run build && npm test"
39
43
  },
@@ -48,9 +52,12 @@
48
52
  "file-type": "^21.1.1",
49
53
  "glob": "^11.0.3",
50
54
  "highlight.js": "^11.11.1",
51
- "indusagi": "^0.12.22",
55
+ "i": "^0.3.7",
56
+ "indusagi": "^0.12.24",
57
+ "indusagi-coding-agent": "^0.1.42",
52
58
  "marked": "^17.0.5",
53
59
  "minimatch": "^10.0.3",
60
+ "npm": "^11.12.0",
54
61
  "strip-ansi": "^7.1.2",
55
62
  "uuid": "^11.1.0"
56
63
  },