indusagi-coding-agent 0.1.42 → 0.1.43

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 (220) hide show
  1. package/CHANGELOG.md +13 -2
  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/login-handler.d.ts.map +1 -1
  6. package/dist/command-line/login-handler.js +7 -0
  7. package/dist/command-line/login-handler.js.map +1 -1
  8. package/dist/dev/observe-deep.d.ts +2 -0
  9. package/dist/dev/observe-deep.d.ts.map +1 -0
  10. package/dist/dev/observe-deep.js +333 -0
  11. package/dist/dev/observe-deep.js.map +1 -0
  12. package/dist/dev/observe-smoke.d.ts +2 -0
  13. package/dist/dev/observe-smoke.d.ts.map +1 -0
  14. package/dist/dev/observe-smoke.js +264 -0
  15. package/dist/dev/observe-smoke.js.map +1 -0
  16. package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts.map +1 -1
  17. package/dist/interfaces/terminal-ui/components/oauth-selector.js +1 -0
  18. package/dist/interfaces/terminal-ui/components/oauth-selector.js.map +1 -1
  19. package/dist/main.d.ts.map +1 -1
  20. package/dist/main.js +40 -18
  21. package/dist/main.js.map +1 -1
  22. package/dist/observe.d.ts +2 -0
  23. package/dist/observe.d.ts.map +1 -0
  24. package/dist/observe.js +2 -0
  25. package/dist/observe.js.map +1 -0
  26. package/dist/runtime/agent-session.d.ts +11 -0
  27. package/dist/runtime/agent-session.d.ts.map +1 -1
  28. package/dist/runtime/agent-session.js +391 -201
  29. package/dist/runtime/agent-session.js.map +1 -1
  30. package/dist/runtime/model-resolver.d.ts.map +1 -1
  31. package/dist/runtime/model-resolver.js +1 -0
  32. package/dist/runtime/model-resolver.js.map +1 -1
  33. package/dist/runtime/observe.d.ts +50 -0
  34. package/dist/runtime/observe.d.ts.map +1 -0
  35. package/dist/runtime/observe.js +233 -0
  36. package/dist/runtime/observe.js.map +1 -0
  37. package/dist/runtime/sdk.d.ts +2 -0
  38. package/dist/runtime/sdk.d.ts.map +1 -1
  39. package/dist/runtime/sdk.js +19 -6
  40. package/dist/runtime/sdk.js.map +1 -1
  41. package/dist/vendor/observe/adapters/agent-event-adapter.d.ts +28 -0
  42. package/dist/vendor/observe/adapters/agent-event-adapter.d.ts.map +1 -0
  43. package/dist/vendor/observe/adapters/agent-event-adapter.js +136 -0
  44. package/dist/vendor/observe/adapters/agent-event-adapter.js.map +1 -0
  45. package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts +24 -0
  46. package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts.map +1 -0
  47. package/dist/vendor/observe/adapters/ai-stream-adapter.js +118 -0
  48. package/dist/vendor/observe/adapters/ai-stream-adapter.js.map +1 -0
  49. package/dist/vendor/observe/artifacts/content-store.d.ts +12 -0
  50. package/dist/vendor/observe/artifacts/content-store.d.ts.map +1 -0
  51. package/dist/vendor/observe/artifacts/content-store.js +2 -0
  52. package/dist/vendor/observe/artifacts/content-store.js.map +1 -0
  53. package/dist/vendor/observe/artifacts/file-content-store.d.ts +16 -0
  54. package/dist/vendor/observe/artifacts/file-content-store.d.ts.map +1 -0
  55. package/dist/vendor/observe/artifacts/file-content-store.js +43 -0
  56. package/dist/vendor/observe/artifacts/file-content-store.js.map +1 -0
  57. package/dist/vendor/observe/batcher.d.ts +27 -0
  58. package/dist/vendor/observe/batcher.d.ts.map +1 -0
  59. package/dist/vendor/observe/batcher.js +66 -0
  60. package/dist/vendor/observe/batcher.js.map +1 -0
  61. package/dist/vendor/observe/client/artifacts-manager.d.ts +29 -0
  62. package/dist/vendor/observe/client/artifacts-manager.d.ts.map +1 -0
  63. package/dist/vendor/observe/client/artifacts-manager.js +120 -0
  64. package/dist/vendor/observe/client/artifacts-manager.js.map +1 -0
  65. package/dist/vendor/observe/client/datasets-manager.d.ts +16 -0
  66. package/dist/vendor/observe/client/datasets-manager.d.ts.map +1 -0
  67. package/dist/vendor/observe/client/datasets-manager.js +27 -0
  68. package/dist/vendor/observe/client/datasets-manager.js.map +1 -0
  69. package/dist/vendor/observe/client/experiments-manager.d.ts +61 -0
  70. package/dist/vendor/observe/client/experiments-manager.d.ts.map +1 -0
  71. package/dist/vendor/observe/client/experiments-manager.js +132 -0
  72. package/dist/vendor/observe/client/experiments-manager.js.map +1 -0
  73. package/dist/vendor/observe/client/index.d.ts +9 -0
  74. package/dist/vendor/observe/client/index.d.ts.map +1 -0
  75. package/dist/vendor/observe/client/index.js +9 -0
  76. package/dist/vendor/observe/client/index.js.map +1 -0
  77. package/dist/vendor/observe/client/observe-client.d.ts +30 -0
  78. package/dist/vendor/observe/client/observe-client.d.ts.map +1 -0
  79. package/dist/vendor/observe/client/observe-client.js +22 -0
  80. package/dist/vendor/observe/client/observe-client.js.map +1 -0
  81. package/dist/vendor/observe/client/prompts-manager.d.ts +17 -0
  82. package/dist/vendor/observe/client/prompts-manager.d.ts.map +1 -0
  83. package/dist/vendor/observe/client/prompts-manager.js +38 -0
  84. package/dist/vendor/observe/client/prompts-manager.js.map +1 -0
  85. package/dist/vendor/observe/client/scores-manager.d.ts +10 -0
  86. package/dist/vendor/observe/client/scores-manager.d.ts.map +1 -0
  87. package/dist/vendor/observe/client/scores-manager.js +15 -0
  88. package/dist/vendor/observe/client/scores-manager.js.map +1 -0
  89. package/dist/vendor/observe/client/sessions-manager.d.ts +15 -0
  90. package/dist/vendor/observe/client/sessions-manager.d.ts.map +1 -0
  91. package/dist/vendor/observe/client/sessions-manager.js +24 -0
  92. package/dist/vendor/observe/client/sessions-manager.js.map +1 -0
  93. package/dist/vendor/observe/client/traces-manager.d.ts +23 -0
  94. package/dist/vendor/observe/client/traces-manager.d.ts.map +1 -0
  95. package/dist/vendor/observe/client/traces-manager.js +39 -0
  96. package/dist/vendor/observe/client/traces-manager.js.map +1 -0
  97. package/dist/vendor/observe/console-exporter.d.ts +11 -0
  98. package/dist/vendor/observe/console-exporter.d.ts.map +1 -0
  99. package/dist/vendor/observe/console-exporter.js +18 -0
  100. package/dist/vendor/observe/console-exporter.js.map +1 -0
  101. package/dist/vendor/observe/context.d.ts +4 -0
  102. package/dist/vendor/observe/context.d.ts.map +1 -0
  103. package/dist/vendor/observe/context.js +9 -0
  104. package/dist/vendor/observe/context.js.map +1 -0
  105. package/dist/vendor/observe/entities/artifacts.d.ts +46 -0
  106. package/dist/vendor/observe/entities/artifacts.d.ts.map +1 -0
  107. package/dist/vendor/observe/entities/artifacts.js +2 -0
  108. package/dist/vendor/observe/entities/artifacts.js.map +1 -0
  109. package/dist/vendor/observe/entities/datasets.d.ts +37 -0
  110. package/dist/vendor/observe/entities/datasets.d.ts.map +1 -0
  111. package/dist/vendor/observe/entities/datasets.js +2 -0
  112. package/dist/vendor/observe/entities/datasets.js.map +1 -0
  113. package/dist/vendor/observe/entities/experiments.d.ts +66 -0
  114. package/dist/vendor/observe/entities/experiments.d.ts.map +1 -0
  115. package/dist/vendor/observe/entities/experiments.js +2 -0
  116. package/dist/vendor/observe/entities/experiments.js.map +1 -0
  117. package/dist/vendor/observe/entities/index.d.ts +9 -0
  118. package/dist/vendor/observe/entities/index.d.ts.map +1 -0
  119. package/dist/vendor/observe/entities/index.js +9 -0
  120. package/dist/vendor/observe/entities/index.js.map +1 -0
  121. package/dist/vendor/observe/entities/prompts.d.ts +25 -0
  122. package/dist/vendor/observe/entities/prompts.d.ts.map +1 -0
  123. package/dist/vendor/observe/entities/prompts.js +2 -0
  124. package/dist/vendor/observe/entities/prompts.js.map +1 -0
  125. package/dist/vendor/observe/entities/scores.d.ts +28 -0
  126. package/dist/vendor/observe/entities/scores.d.ts.map +1 -0
  127. package/dist/vendor/observe/entities/scores.js +2 -0
  128. package/dist/vendor/observe/entities/scores.js.map +1 -0
  129. package/dist/vendor/observe/entities/sessions.d.ts +36 -0
  130. package/dist/vendor/observe/entities/sessions.d.ts.map +1 -0
  131. package/dist/vendor/observe/entities/sessions.js +2 -0
  132. package/dist/vendor/observe/entities/sessions.js.map +1 -0
  133. package/dist/vendor/observe/entities/shared.d.ts +26 -0
  134. package/dist/vendor/observe/entities/shared.d.ts.map +1 -0
  135. package/dist/vendor/observe/entities/shared.js +2 -0
  136. package/dist/vendor/observe/entities/shared.js.map +1 -0
  137. package/dist/vendor/observe/entities/traces.d.ts +59 -0
  138. package/dist/vendor/observe/entities/traces.d.ts.map +1 -0
  139. package/dist/vendor/observe/entities/traces.js +2 -0
  140. package/dist/vendor/observe/entities/traces.js.map +1 -0
  141. package/dist/vendor/observe/exporter.d.ts +2 -0
  142. package/dist/vendor/observe/exporter.d.ts.map +1 -0
  143. package/dist/vendor/observe/exporter.js +2 -0
  144. package/dist/vendor/observe/exporter.js.map +1 -0
  145. package/dist/vendor/observe/file-exporter.d.ts +16 -0
  146. package/dist/vendor/observe/file-exporter.d.ts.map +1 -0
  147. package/dist/vendor/observe/file-exporter.js +39 -0
  148. package/dist/vendor/observe/file-exporter.js.map +1 -0
  149. package/dist/vendor/observe/global.d.ts +6 -0
  150. package/dist/vendor/observe/global.d.ts.map +1 -0
  151. package/dist/vendor/observe/global.js +17 -0
  152. package/dist/vendor/observe/global.js.map +1 -0
  153. package/dist/vendor/observe/index.d.ts +24 -0
  154. package/dist/vendor/observe/index.d.ts.map +1 -0
  155. package/dist/vendor/observe/index.js +24 -0
  156. package/dist/vendor/observe/index.js.map +1 -0
  157. package/dist/vendor/observe/noop.d.ts +17 -0
  158. package/dist/vendor/observe/noop.d.ts.map +1 -0
  159. package/dist/vendor/observe/noop.js +80 -0
  160. package/dist/vendor/observe/noop.js.map +1 -0
  161. package/dist/vendor/observe/privacy.d.ts +18 -0
  162. package/dist/vendor/observe/privacy.d.ts.map +1 -0
  163. package/dist/vendor/observe/privacy.js +160 -0
  164. package/dist/vendor/observe/privacy.js.map +1 -0
  165. package/dist/vendor/observe/query/simple-query-client.d.ts +11 -0
  166. package/dist/vendor/observe/query/simple-query-client.d.ts.map +1 -0
  167. package/dist/vendor/observe/query/simple-query-client.js +31 -0
  168. package/dist/vendor/observe/query/simple-query-client.js.map +1 -0
  169. package/dist/vendor/observe/replay/session-replay.d.ts +20 -0
  170. package/dist/vendor/observe/replay/session-replay.d.ts.map +1 -0
  171. package/dist/vendor/observe/replay/session-replay.js +180 -0
  172. package/dist/vendor/observe/replay/session-replay.js.map +1 -0
  173. package/dist/vendor/observe/runtime.d.ts +27 -0
  174. package/dist/vendor/observe/runtime.d.ts.map +1 -0
  175. package/dist/vendor/observe/runtime.js +177 -0
  176. package/dist/vendor/observe/runtime.js.map +1 -0
  177. package/dist/vendor/observe/server/dashboard-html.d.ts +6 -0
  178. package/dist/vendor/observe/server/dashboard-html.d.ts.map +1 -0
  179. package/dist/vendor/observe/server/dashboard-html.js +305 -0
  180. package/dist/vendor/observe/server/dashboard-html.js.map +1 -0
  181. package/dist/vendor/observe/server/http-observe-server.d.ts +62 -0
  182. package/dist/vendor/observe/server/http-observe-server.d.ts.map +1 -0
  183. package/dist/vendor/observe/server/http-observe-server.js +418 -0
  184. package/dist/vendor/observe/server/http-observe-server.js.map +1 -0
  185. package/dist/vendor/observe/server/in-memory-observe-server.d.ts +20 -0
  186. package/dist/vendor/observe/server/in-memory-observe-server.d.ts.map +1 -0
  187. package/dist/vendor/observe/server/in-memory-observe-server.js +76 -0
  188. package/dist/vendor/observe/server/in-memory-observe-server.js.map +1 -0
  189. package/dist/vendor/observe/span.d.ts +45 -0
  190. package/dist/vendor/observe/span.d.ts.map +1 -0
  191. package/dist/vendor/observe/span.js +110 -0
  192. package/dist/vendor/observe/span.js.map +1 -0
  193. package/dist/vendor/observe/store/contracts.d.ts +59 -0
  194. package/dist/vendor/observe/store/contracts.d.ts.map +1 -0
  195. package/dist/vendor/observe/store/contracts.js +2 -0
  196. package/dist/vendor/observe/store/contracts.js.map +1 -0
  197. package/dist/vendor/observe/store/file-control-plane-store.d.ts +33 -0
  198. package/dist/vendor/observe/store/file-control-plane-store.d.ts.map +1 -0
  199. package/dist/vendor/observe/store/file-control-plane-store.js +146 -0
  200. package/dist/vendor/observe/store/file-control-plane-store.js.map +1 -0
  201. package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts +84 -0
  202. package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts.map +1 -0
  203. package/dist/vendor/observe/store/in-memory-control-plane-store.js +447 -0
  204. package/dist/vendor/observe/store/in-memory-control-plane-store.js.map +1 -0
  205. package/dist/vendor/observe/store/index.d.ts +4 -0
  206. package/dist/vendor/observe/store/index.d.ts.map +1 -0
  207. package/dist/vendor/observe/store/index.js +4 -0
  208. package/dist/vendor/observe/store/index.js.map +1 -0
  209. package/dist/vendor/observe/types.d.ts +246 -0
  210. package/dist/vendor/observe/types.d.ts.map +1 -0
  211. package/dist/vendor/observe/types.js +152 -0
  212. package/dist/vendor/observe/types.js.map +1 -0
  213. package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts +25 -0
  214. package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts.map +1 -0
  215. package/dist/vendor/observe/worker/in-memory-observe-worker.js +82 -0
  216. package/dist/vendor/observe/worker/in-memory-observe-worker.js.map +1 -0
  217. package/guides/INDUSVX_OBSERVE_FULL_INTEGRATION_REPORT.md +543 -0
  218. package/guides/OBSERVE_DEEP_VALIDATION.md +252 -0
  219. package/guides/OBSERVE_LOCAL_TESTING.md +183 -0
  220. package/package.json +11 -4
@@ -0,0 +1,252 @@
1
+ # Observe deep validation
2
+
3
+ Date: 2026-03-30
4
+
5
+ This document records the larger end-to-end validation run for package-based Observe integration in `indusagi-screth` using local `../indusvx-screth` behind the `indusagi` package import path.
6
+
7
+ ## What was validated
8
+
9
+ The deeper validation used:
10
+
11
+ - local package dependency: `"indusagi": "file:../indusvx-screth"`
12
+ - app-level Observe bootstrap in `app/runtime/observe.ts`
13
+ - runtime wiring through:
14
+ - `app/main.ts`
15
+ - `app/runtime/sdk.ts`
16
+ - `app/runtime/agent-session.ts`
17
+ - a larger harness:
18
+ - `app/dev/observe-deep.ts`
19
+ - npm script:
20
+ - `npm run observe:deep`
21
+
22
+ ## Commands run
23
+
24
+ ### `indusvx-screth`
25
+
26
+ ```bash
27
+ npm run build
28
+ npm test
29
+ ```
30
+
31
+ ### `indusagi-screth`
32
+
33
+ ```bash
34
+ npm run build
35
+ npm test
36
+ npm run observe:deep
37
+ ```
38
+
39
+ ## Result summary
40
+
41
+ ### Build/test
42
+
43
+ - `indusvx-screth` build: ✅
44
+ - `indusvx-screth` tests: ✅ (`56` files, `92` tests)
45
+ - `indusagi-screth` build: ✅
46
+ - `indusagi-screth` tests: ✅ (`13` files, `781` tests)
47
+ - `indusagi-screth` deep Observe validation: ✅
48
+
49
+ ## Deep validation output
50
+
51
+ Output root:
52
+
53
+ - `.indusagi/observe-deep/2026-03-30T13-37-06-998Z/`
54
+
55
+ Key files:
56
+
57
+ - summary JSON:
58
+ - `.indusagi/observe-deep/2026-03-30T13-37-06-998Z/summary.json`
59
+ - harness report:
60
+ - `.indusagi/observe-deep/2026-03-30T13-37-06-998Z/report.md`
61
+ - control plane:
62
+ - `.indusagi/observe-deep/2026-03-30T13-37-06-998Z/agent/observe/control-plane.json`
63
+ - runtime records:
64
+ - `.indusagi/observe-deep/2026-03-30T13-37-06-998Z/agent/observe/runtime-records/*.ndjson`
65
+ - artifact payloads:
66
+ - `.indusagi/observe-deep/2026-03-30T13-37-06-998Z/agent/observe/artifacts/*`
67
+ - generated workspace:
68
+ - `.indusagi/observe-deep/2026-03-30T13-37-06-998Z/workspace/`
69
+
70
+ Dashboard URL during validation:
71
+
72
+ - `http://127.0.0.1:61184/api/observe/ui`
73
+
74
+ ## What the deep harness exercised
75
+
76
+ The deeper test covered all of the following in one run:
77
+
78
+ - package-based import resolution through `indusagi/...`
79
+ - Observe bootstrap from app runtime
80
+ - real `createAgentSession(...)` path
81
+ - agent prompt flow
82
+ - multi-turn tool-call execution
83
+ - read tool usage
84
+ - write tool usage
85
+ - edit tool usage
86
+ - explicit `session.executeBash(...)`
87
+ - session fork
88
+ - session switch
89
+ - session new-session flow
90
+ - trace mirroring into control plane
91
+ - artifact persistence
92
+ - dataset creation
93
+ - experiment creation
94
+ - score creation
95
+ - HTTP API validation
96
+ - privacy redaction validation
97
+
98
+ ## Observed stats
99
+
100
+ From the deep run summary:
101
+
102
+ - total records: `83`
103
+ - control-plane traces: `7`
104
+ - control-plane sessions: `3`
105
+ - control-plane artifacts: `1`
106
+ - control-plane experiments: `1`
107
+
108
+ By record type:
109
+
110
+ - `entry: 50`
111
+ - `span: 20`
112
+ - `trace: 7`
113
+ - `event: 6`
114
+
115
+ By kind:
116
+
117
+ - `session.entry: 7`
118
+ - `agent.event: 43`
119
+ - `tool_call: 4`
120
+ - `turn: 4`
121
+ - `agent_run: 4`
122
+ - `state: 2`
123
+ - `annotation: 3`
124
+ - `delta: 1`
125
+ - `model_generation: 1`
126
+ - `command_execution: 1`
127
+ - `custom: 10`
128
+ - `session_fork: 1`
129
+ - `session_switch: 2`
130
+
131
+ ## Concrete output checks
132
+
133
+ ### Workspace mutation checks
134
+
135
+ The deep test verified that tools really changed files.
136
+
137
+ Confirmed:
138
+
139
+ - `workspace/src/index.ts` was edited to:
140
+
141
+ ```ts
142
+ export const APP_NAME = "observe-deep-test-updated";
143
+ ```
144
+
145
+ - `workspace/reports/generated-report.md` was created and contained:
146
+
147
+ ```md
148
+ # Generated Report
149
+
150
+ This file was created by the deep Observe validation harness.
151
+ ```
152
+
153
+ ### Control-plane checks
154
+
155
+ Confirmed persisted entities in control plane:
156
+
157
+ - sessions
158
+ - traces
159
+ - artifacts
160
+ - prompts
161
+ - datasets
162
+ - dataset items
163
+ - experiments
164
+ - experiment runs
165
+ - scores
166
+
167
+ ### API checks
168
+
169
+ Confirmed these endpoints responded during the run:
170
+
171
+ - `/api/observe/health`
172
+ - `/api/observe/stats`
173
+ - `/api/observe/records`
174
+ - `/api/observe/control-plane/sessions`
175
+ - `/api/observe/control-plane/traces`
176
+ - `/api/observe/control-plane/artifacts`
177
+ - `/api/observe/control-plane/experiments`
178
+ - `/api/observe/ui`
179
+
180
+ ## Privacy validation
181
+
182
+ A privacy probe intentionally emitted secret-like values via Observe runtime data:
183
+
184
+ - `apiKey`
185
+ - `token`
186
+ - `password`
187
+ - `authorization`
188
+
189
+ The run verified that raw secrets did **not** appear in:
190
+
191
+ - runtime NDJSON exports
192
+ - Observe API responses
193
+ - control-plane JSON
194
+
195
+ Observed redaction example in runtime output:
196
+
197
+ ```json
198
+ {
199
+ "apiKey": "[REDACTED]",
200
+ "token": "[REDACTED]",
201
+ "password": "[REDACTED]",
202
+ "nested": {
203
+ "authorization": "[REDACTED]"
204
+ }
205
+ }
206
+ ```
207
+
208
+ ## What is working well now
209
+
210
+ The package-based local integration is working well enough to validate that:
211
+
212
+ - `indusagi-screth` can use local `indusvx-screth` through `indusagi/...` imports
213
+ - app-level Observe bootstrap is active
214
+ - runtime traces/spans/events are emitted
215
+ - tool-call spans are emitted
216
+ - model-generation spans are emitted
217
+ - command execution spans are emitted
218
+ - session fork/switch/new traces are emitted
219
+ - control-plane persistence works
220
+ - artifact storage works
221
+ - dashboard/API works
222
+ - privacy redaction works in exported/queryable telemetry
223
+
224
+ ## Remaining gaps / not yet covered by this deep harness
225
+
226
+ This run did **not** fully exercise:
227
+
228
+ - MCP connection/request/call flows
229
+ - TUI Observe panel/overlay integration
230
+ - subagent/task trace propagation
231
+ - real networked model providers
232
+ - memory package replacement parity beyond app-level instrumentation hooks
233
+
234
+ ## Important caveat found
235
+
236
+ One practical gap still visible in the deep validation output:
237
+
238
+ - session files were still being created under the default global session directory path rather than being fully isolated under the custom deep-test agent directory
239
+
240
+ So Observe itself worked well, but session persistence path ownership/isolation still deserves cleanup if fully self-contained deep-test environments are required.
241
+
242
+ ## Overall conclusion
243
+
244
+ This bigger test passed.
245
+
246
+ The current package-based approach is now validated as:
247
+
248
+ - stronger than the original smoke harness
249
+ - capable of producing rich Observe telemetry from the real app runtime path
250
+ - good for local product-level observability validation
251
+
252
+ It is **not yet complete full-product coverage** because MCP, TUI, and subagent paths still need dedicated deep tests.
@@ -0,0 +1,183 @@
1
+ # Observe local testing in `indusagi-screth`
2
+
3
+ This guide shows the most reliable way to test the new clean-room Observe stack from the sibling `indusvx-screth/` package **inside the `indusagi-screth` repo context**.
4
+
5
+ ## Why this path
6
+
7
+ A direct full package swap from published `indusagi` to local `indusvx-screth` is not the safest first step because `indusagi-screth` still imports extra surfaces like `indusagi/memory` that are not part of the current `indusvx-screth` exports.
8
+
9
+ So the working approach added here is:
10
+
11
+ 1. build the sibling `../indusvx-screth` package locally
12
+ 2. run a smoke harness from `indusagi-screth`
13
+ 3. dynamically load `../indusvx-screth/dist/{agent,ai,observe}.js`
14
+ 4. run a real local agent pass against the `indusagi-screth` repo
15
+ 5. persist and expose Observe runtime + control-plane outputs
16
+
17
+ This exercises:
18
+
19
+ - runtime traces/spans/events
20
+ - tool lifecycle spans
21
+ - model generation spans
22
+ - file exporter output
23
+ - file-backed control-plane persistence
24
+ - artifact blob persistence
25
+ - HTTP stats/query/dashboard
26
+ - prompt/dataset/experiment/score smoke objects
27
+ - privacy/redaction pipeline
28
+
29
+ ## Commands
30
+
31
+ From `indusagi-screth/`:
32
+
33
+ ```bash
34
+ npm run observe:smoke
35
+ ```
36
+
37
+ That runs a one-shot smoke test.
38
+
39
+ To keep the dashboard server running for manual inspection:
40
+
41
+ ```bash
42
+ npm run observe:smoke:serve
43
+ ```
44
+
45
+ ## What the smoke harness does
46
+
47
+ The harness lives at:
48
+
49
+ - `app/dev/observe-smoke.ts`
50
+
51
+ It:
52
+
53
+ 1. builds and loads local `../indusvx-screth`
54
+ 2. creates an Observe runtime with privacy controls enabled
55
+ 3. writes runtime records with `FileObserveExporter`
56
+ 4. mirrors trace records into a durable `FileObserveControlPlaneStore`
57
+ 5. stores artifact blobs with `FileObserveArtifactContentStore`
58
+ 6. starts `ObserveHttpServer`
59
+ 7. runs a local `Agent` using:
60
+ - mock model
61
+ - Observe runtime
62
+ - real local `read` and `ls` tools
63
+ 8. creates smoke prompt/dataset/experiment/score objects linked to the produced trace
64
+
65
+ ## Output locations
66
+
67
+ Each run writes into:
68
+
69
+ - `.indusagi/observe-smoke/<timestamp>/`
70
+
71
+ Inside that directory you will see:
72
+
73
+ - `runtime-records/` → exported runtime records
74
+ - `control-plane.json` → durable control-plane snapshot
75
+ - `artifacts/` → external artifact blob files
76
+
77
+ ## What to inspect
78
+
79
+ ### 1. Runtime records
80
+
81
+ Inspect the NDJSON output under:
82
+
83
+ - `.indusagi/observe-smoke/<timestamp>/runtime-records/`
84
+
85
+ Look for records like:
86
+
87
+ - `recordType: "trace"`
88
+ - `recordType: "span"`
89
+ - `kind: "agent_run"`
90
+ - `kind: "turn"`
91
+ - `kind: "tool_call"`
92
+ - `kind: "model_generation"`
93
+
94
+ ### 2. Control-plane snapshot
95
+
96
+ Open:
97
+
98
+ - `.indusagi/observe-smoke/<timestamp>/control-plane.json`
99
+
100
+ Look for:
101
+
102
+ - sessions
103
+ - traces
104
+ - prompts
105
+ - datasets
106
+ - experiments
107
+ - experimentRuns
108
+ - scores
109
+ - artifacts
110
+
111
+ ### 3. Dashboard
112
+
113
+ When the harness prints a URL like:
114
+
115
+ - `http://127.0.0.1:4319/api/observe/ui`
116
+
117
+ open it in your browser.
118
+
119
+ You should see:
120
+
121
+ - runtime stats
122
+ - latest traces
123
+ - artifacts
124
+ - API endpoint map
125
+
126
+ ### 4. Query endpoints
127
+
128
+ You can also query the server directly:
129
+
130
+ ```bash
131
+ curl http://127.0.0.1:4319/api/observe/health
132
+ curl http://127.0.0.1:4319/api/observe/stats
133
+ curl "http://127.0.0.1:4319/api/observe/records?limit=20"
134
+ curl http://127.0.0.1:4319/api/observe/control-plane/traces
135
+ curl http://127.0.0.1:4319/api/observe/control-plane/artifacts
136
+ ```
137
+
138
+ Adjust the port to whatever the smoke harness prints.
139
+
140
+ ## What counts as a pass
141
+
142
+ A good run should produce all of the following:
143
+
144
+ - at least one trace record
145
+ - at least one model generation span
146
+ - at least one tool call span
147
+ - a persisted control-plane trace
148
+ - at least one artifact
149
+ - a working dashboard URL
150
+ - no leaked fake secrets in exported payloads
151
+
152
+ ## Manual deep-checks
153
+
154
+ After `npm run observe:smoke:serve`, manually verify:
155
+
156
+ ### Tool path
157
+
158
+ The run should show tool activity for:
159
+
160
+ - `read package.json`
161
+ - `ls app`
162
+
163
+ ### Privacy path
164
+
165
+ Search the exported NDJSON for raw secrets. The harness enables privacy controls, so sensitive-looking values should be redacted or omitted before export.
166
+
167
+ ### Persistence path
168
+
169
+ Stop the process and confirm that:
170
+
171
+ - runtime files remain on disk
172
+ - `control-plane.json` remains readable
173
+ - artifact blob files remain in `artifacts/`
174
+
175
+ ## Current limitation
176
+
177
+ This harness tests observability **in the `indusagi-screth` repo context** using the local sibling `indusvx-screth` runtime surfaces, but it does **not** yet replace every `indusagi/*` import across the full `indusagi-screth` app.
178
+
179
+ That is intentional: it gives a working, low-risk validation path first.
180
+
181
+ ## Next integration step after smoke success
182
+
183
+ If the smoke harness looks good, the next deeper step is to wire Observe directly into `indusagi-screth/app/runtime/sdk.ts` so the main coding-agent runtime itself passes a real Observe runtime into the created `Agent` instance.
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.43",
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.23')\"",
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.23",
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
  },