@phigon/observer 8.0.2 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +376 -303
  4. package/THIRD_PARTY_NOTICES.md +610 -0
  5. package/dist/bin/guardian-runner-darwin-amd64 +0 -0
  6. package/dist/bin/guardian-runner-darwin-arm64 +0 -0
  7. package/dist/bin/guardian-runner-linux-amd64 +0 -0
  8. package/dist/bin/guardian-runner-linux-arm64 +0 -0
  9. package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
  10. package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
  11. package/dist/src/action-policy.d.ts +0 -0
  12. package/dist/src/action-policy.d.ts.map +1 -1
  13. package/dist/src/action-policy.js +4 -2
  14. package/dist/src/action-policy.js.map +1 -1
  15. package/dist/src/activity/adapters/claude.d.ts +0 -0
  16. package/dist/src/activity/adapters/claude.d.ts.map +1 -1
  17. package/dist/src/activity/adapters/claude.js +19 -1
  18. package/dist/src/activity/adapters/claude.js.map +1 -1
  19. package/dist/src/activity/adapters/cline-task.d.ts +7 -0
  20. package/dist/src/activity/adapters/cline-task.d.ts.map +1 -0
  21. package/dist/src/activity/adapters/cline-task.js +197 -0
  22. package/dist/src/activity/adapters/cline-task.js.map +1 -0
  23. package/dist/src/activity/adapters/cline.d.ts +3 -0
  24. package/dist/src/activity/adapters/cline.d.ts.map +1 -0
  25. package/dist/src/activity/adapters/cline.js +102 -0
  26. package/dist/src/activity/adapters/cline.js.map +1 -0
  27. package/dist/src/activity/adapters/codex.d.ts +0 -0
  28. package/dist/src/activity/adapters/codex.d.ts.map +1 -1
  29. package/dist/src/activity/adapters/codex.js +76 -0
  30. package/dist/src/activity/adapters/codex.js.map +1 -1
  31. package/dist/src/activity/adapters/copilot-chat.d.ts +3 -0
  32. package/dist/src/activity/adapters/copilot-chat.d.ts.map +1 -0
  33. package/dist/src/activity/adapters/copilot-chat.js +176 -0
  34. package/dist/src/activity/adapters/copilot-chat.js.map +1 -0
  35. package/dist/src/activity/adapters/copilot.d.ts +2 -1
  36. package/dist/src/activity/adapters/copilot.d.ts.map +1 -1
  37. package/dist/src/activity/adapters/copilot.js +173 -2
  38. package/dist/src/activity/adapters/copilot.js.map +1 -1
  39. package/dist/src/activity/adapters/cursor.d.ts +3 -0
  40. package/dist/src/activity/adapters/cursor.d.ts.map +1 -0
  41. package/dist/src/activity/adapters/cursor.js +86 -0
  42. package/dist/src/activity/adapters/cursor.js.map +1 -0
  43. package/dist/src/activity/adapters/factory-droid.d.ts +3 -0
  44. package/dist/src/activity/adapters/factory-droid.d.ts.map +1 -0
  45. package/dist/src/activity/adapters/factory-droid.js +126 -0
  46. package/dist/src/activity/adapters/factory-droid.js.map +1 -0
  47. package/dist/src/activity/adapters/gemini.d.ts +3 -0
  48. package/dist/src/activity/adapters/gemini.d.ts.map +1 -0
  49. package/dist/src/activity/adapters/gemini.js +177 -0
  50. package/dist/src/activity/adapters/gemini.js.map +1 -0
  51. package/dist/src/activity/adapters/generic.d.ts +0 -0
  52. package/dist/src/activity/adapters/generic.d.ts.map +0 -0
  53. package/dist/src/activity/adapters/generic.js +0 -0
  54. package/dist/src/activity/adapters/generic.js.map +0 -0
  55. package/dist/src/activity/adapters/goose.d.ts +3 -0
  56. package/dist/src/activity/adapters/goose.d.ts.map +1 -0
  57. package/dist/src/activity/adapters/goose.js +116 -0
  58. package/dist/src/activity/adapters/goose.js.map +1 -0
  59. package/dist/src/activity/adapters/hermes.d.ts +0 -0
  60. package/dist/src/activity/adapters/hermes.d.ts.map +0 -0
  61. package/dist/src/activity/adapters/hermes.js +0 -0
  62. package/dist/src/activity/adapters/hermes.js.map +0 -0
  63. package/dist/src/activity/adapters/kiro.d.ts +3 -0
  64. package/dist/src/activity/adapters/kiro.d.ts.map +1 -0
  65. package/dist/src/activity/adapters/kiro.js +47 -0
  66. package/dist/src/activity/adapters/kiro.js.map +1 -0
  67. package/dist/src/activity/adapters/openai-compatible.d.ts +0 -0
  68. package/dist/src/activity/adapters/openai-compatible.d.ts.map +0 -0
  69. package/dist/src/activity/adapters/openai-compatible.js +0 -0
  70. package/dist/src/activity/adapters/openai-compatible.js.map +0 -0
  71. package/dist/src/activity/adapters/openclaw.d.ts +0 -0
  72. package/dist/src/activity/adapters/openclaw.d.ts.map +0 -0
  73. package/dist/src/activity/adapters/openclaw.js +0 -0
  74. package/dist/src/activity/adapters/openclaw.js.map +0 -0
  75. package/dist/src/activity/adapters/opencode.d.ts +0 -0
  76. package/dist/src/activity/adapters/opencode.d.ts.map +1 -1
  77. package/dist/src/activity/adapters/opencode.js +108 -1
  78. package/dist/src/activity/adapters/opencode.js.map +1 -1
  79. package/dist/src/activity/adapters/zed.d.ts +3 -0
  80. package/dist/src/activity/adapters/zed.d.ts.map +1 -0
  81. package/dist/src/activity/adapters/zed.js +134 -0
  82. package/dist/src/activity/adapters/zed.js.map +1 -0
  83. package/dist/src/activity/bridges.d.ts +0 -0
  84. package/dist/src/activity/bridges.d.ts.map +0 -0
  85. package/dist/src/activity/bridges.js +0 -0
  86. package/dist/src/activity/bridges.js.map +0 -0
  87. package/dist/src/activity/collector.d.ts +12 -0
  88. package/dist/src/activity/collector.d.ts.map +1 -1
  89. package/dist/src/activity/collector.js +156 -3
  90. package/dist/src/activity/collector.js.map +1 -1
  91. package/dist/src/activity/goose-sqlite-source.d.ts +33 -0
  92. package/dist/src/activity/goose-sqlite-source.d.ts.map +1 -0
  93. package/dist/src/activity/goose-sqlite-source.js +274 -0
  94. package/dist/src/activity/goose-sqlite-source.js.map +1 -0
  95. package/dist/src/activity/index.d.ts +3 -0
  96. package/dist/src/activity/index.d.ts.map +1 -1
  97. package/dist/src/activity/index.js +3 -0
  98. package/dist/src/activity/index.js.map +1 -1
  99. package/dist/src/activity/ingest.d.ts +0 -0
  100. package/dist/src/activity/ingest.d.ts.map +1 -1
  101. package/dist/src/activity/ingest.js +2 -1
  102. package/dist/src/activity/ingest.js.map +1 -1
  103. package/dist/src/activity/json-document-source.d.ts +136 -0
  104. package/dist/src/activity/json-document-source.d.ts.map +1 -0
  105. package/dist/src/activity/json-document-source.js +569 -0
  106. package/dist/src/activity/json-document-source.js.map +1 -0
  107. package/dist/src/activity/native-capabilities.d.ts +0 -0
  108. package/dist/src/activity/native-capabilities.d.ts.map +0 -0
  109. package/dist/src/activity/native-capabilities.js +0 -0
  110. package/dist/src/activity/native-capabilities.js.map +0 -0
  111. package/dist/src/activity/normalize.d.ts +0 -0
  112. package/dist/src/activity/normalize.d.ts.map +1 -1
  113. package/dist/src/activity/normalize.js +64 -6
  114. package/dist/src/activity/normalize.js.map +1 -1
  115. package/dist/src/activity/opencode-message-tables.d.ts +87 -0
  116. package/dist/src/activity/opencode-message-tables.d.ts.map +1 -0
  117. package/dist/src/activity/opencode-message-tables.js +546 -0
  118. package/dist/src/activity/opencode-message-tables.js.map +1 -0
  119. package/dist/src/activity/opencode-sqlite-source.d.ts +7 -0
  120. package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -1
  121. package/dist/src/activity/opencode-sqlite-source.js +153 -63
  122. package/dist/src/activity/opencode-sqlite-source.js.map +1 -1
  123. package/dist/src/activity/policy.d.ts +0 -0
  124. package/dist/src/activity/policy.d.ts.map +1 -1
  125. package/dist/src/activity/policy.js +2 -13
  126. package/dist/src/activity/policy.js.map +1 -1
  127. package/dist/src/activity/record.d.ts +0 -0
  128. package/dist/src/activity/record.d.ts.map +0 -0
  129. package/dist/src/activity/record.js +0 -0
  130. package/dist/src/activity/record.js.map +0 -0
  131. package/dist/src/activity/source-reader.d.ts +16 -1
  132. package/dist/src/activity/source-reader.d.ts.map +1 -1
  133. package/dist/src/activity/source-reader.js +308 -29
  134. package/dist/src/activity/source-reader.js.map +1 -1
  135. package/dist/src/activity/sqlite-connections.d.ts +77 -0
  136. package/dist/src/activity/sqlite-connections.d.ts.map +1 -0
  137. package/dist/src/activity/sqlite-connections.js +220 -0
  138. package/dist/src/activity/sqlite-connections.js.map +1 -0
  139. package/dist/src/activity/types.d.ts +0 -0
  140. package/dist/src/activity/types.d.ts.map +0 -0
  141. package/dist/src/activity/types.js +0 -0
  142. package/dist/src/activity/types.js.map +0 -0
  143. package/dist/src/activity/zed-sqlite-source.d.ts +65 -0
  144. package/dist/src/activity/zed-sqlite-source.d.ts.map +1 -0
  145. package/dist/src/activity/zed-sqlite-source.js +547 -0
  146. package/dist/src/activity/zed-sqlite-source.js.map +1 -0
  147. package/dist/src/agent-action-executor.d.ts +14 -1
  148. package/dist/src/agent-action-executor.d.ts.map +1 -1
  149. package/dist/src/agent-action-executor.js +114 -57
  150. package/dist/src/agent-action-executor.js.map +1 -1
  151. package/dist/src/agentic-guardian.d.ts +0 -0
  152. package/dist/src/agentic-guardian.d.ts.map +1 -1
  153. package/dist/src/agentic-guardian.js +6 -5
  154. package/dist/src/agentic-guardian.js.map +1 -1
  155. package/dist/src/atomic-replace.d.ts +0 -0
  156. package/dist/src/atomic-replace.d.ts.map +0 -0
  157. package/dist/src/atomic-replace.js +0 -0
  158. package/dist/src/atomic-replace.js.map +0 -0
  159. package/dist/src/cli.d.ts +0 -0
  160. package/dist/src/cli.d.ts.map +1 -1
  161. package/dist/src/cli.js +96 -13
  162. package/dist/src/cli.js.map +1 -1
  163. package/dist/src/config.d.ts +15 -0
  164. package/dist/src/config.d.ts.map +1 -1
  165. package/dist/src/config.js +105 -4
  166. package/dist/src/config.js.map +1 -1
  167. package/dist/src/connection-config.d.ts +3 -0
  168. package/dist/src/connection-config.d.ts.map +1 -0
  169. package/dist/src/connection-config.js +29 -0
  170. package/dist/src/connection-config.js.map +1 -0
  171. package/dist/src/content-redaction.d.ts +3 -0
  172. package/dist/src/content-redaction.d.ts.map +1 -0
  173. package/dist/src/content-redaction.js +19 -0
  174. package/dist/src/content-redaction.js.map +1 -0
  175. package/dist/src/credential-store.d.ts +1 -0
  176. package/dist/src/credential-store.d.ts.map +1 -1
  177. package/dist/src/credential-store.js +13 -2
  178. package/dist/src/credential-store.js.map +1 -1
  179. package/dist/src/custom-agent-registry.d.ts +0 -0
  180. package/dist/src/custom-agent-registry.d.ts.map +1 -1
  181. package/dist/src/custom-agent-registry.js +2 -1
  182. package/dist/src/custom-agent-registry.js.map +1 -1
  183. package/dist/src/discovery/adapters/claude.d.ts +0 -0
  184. package/dist/src/discovery/adapters/claude.d.ts.map +0 -0
  185. package/dist/src/discovery/adapters/claude.js +0 -0
  186. package/dist/src/discovery/adapters/claude.js.map +0 -0
  187. package/dist/src/discovery/adapters/codex.d.ts +0 -0
  188. package/dist/src/discovery/adapters/codex.d.ts.map +0 -0
  189. package/dist/src/discovery/adapters/codex.js +0 -0
  190. package/dist/src/discovery/adapters/codex.js.map +0 -0
  191. package/dist/src/discovery/adapters/custom.d.ts +0 -0
  192. package/dist/src/discovery/adapters/custom.d.ts.map +0 -0
  193. package/dist/src/discovery/adapters/custom.js +0 -0
  194. package/dist/src/discovery/adapters/custom.js.map +0 -0
  195. package/dist/src/discovery/adapters/generic.d.ts +0 -0
  196. package/dist/src/discovery/adapters/generic.d.ts.map +1 -1
  197. package/dist/src/discovery/adapters/generic.js +160 -2
  198. package/dist/src/discovery/adapters/generic.js.map +1 -1
  199. package/dist/src/discovery/adapters/hermes.d.ts +0 -0
  200. package/dist/src/discovery/adapters/hermes.d.ts.map +0 -0
  201. package/dist/src/discovery/adapters/hermes.js +0 -0
  202. package/dist/src/discovery/adapters/hermes.js.map +0 -0
  203. package/dist/src/discovery/adapters/openclaw.d.ts +0 -0
  204. package/dist/src/discovery/adapters/openclaw.d.ts.map +0 -0
  205. package/dist/src/discovery/adapters/openclaw.js +0 -0
  206. package/dist/src/discovery/adapters/openclaw.js.map +0 -0
  207. package/dist/src/discovery/engine.d.ts +7 -1
  208. package/dist/src/discovery/engine.d.ts.map +1 -1
  209. package/dist/src/discovery/engine.js +20 -5
  210. package/dist/src/discovery/engine.js.map +1 -1
  211. package/dist/src/discovery/evidence.d.ts +0 -0
  212. package/dist/src/discovery/evidence.d.ts.map +0 -0
  213. package/dist/src/discovery/evidence.js +0 -0
  214. package/dist/src/discovery/evidence.js.map +0 -0
  215. package/dist/src/discovery/index.d.ts +0 -0
  216. package/dist/src/discovery/index.d.ts.map +0 -0
  217. package/dist/src/discovery/index.js +0 -0
  218. package/dist/src/discovery/index.js.map +0 -0
  219. package/dist/src/discovery/known-agent.d.ts +7 -0
  220. package/dist/src/discovery/known-agent.d.ts.map +1 -1
  221. package/dist/src/discovery/known-agent.js +9 -4
  222. package/dist/src/discovery/known-agent.js.map +1 -1
  223. package/dist/src/discovery/process-identity.d.ts +0 -0
  224. package/dist/src/discovery/process-identity.d.ts.map +0 -0
  225. package/dist/src/discovery/process-identity.js +0 -0
  226. package/dist/src/discovery/process-identity.js.map +0 -0
  227. package/dist/src/discovery/system-evidence.d.ts +40 -1
  228. package/dist/src/discovery/system-evidence.d.ts.map +1 -1
  229. package/dist/src/discovery/system-evidence.js +189 -16
  230. package/dist/src/discovery/system-evidence.js.map +1 -1
  231. package/dist/src/discovery/types.d.ts +0 -0
  232. package/dist/src/discovery/types.d.ts.map +0 -0
  233. package/dist/src/discovery/types.js +0 -0
  234. package/dist/src/discovery/types.js.map +0 -0
  235. package/dist/src/event-queue.d.ts +0 -0
  236. package/dist/src/event-queue.d.ts.map +1 -1
  237. package/dist/src/event-queue.js +88 -38
  238. package/dist/src/event-queue.js.map +1 -1
  239. package/dist/src/event-spool.d.ts +0 -0
  240. package/dist/src/event-spool.d.ts.map +1 -1
  241. package/dist/src/event-spool.js +58 -10
  242. package/dist/src/event-spool.js.map +1 -1
  243. package/dist/src/generated/phigon/v1/action_pb.d.ts +0 -0
  244. package/dist/src/generated/phigon/v1/action_pb.d.ts.map +1 -1
  245. package/dist/src/generated/phigon/v1/action_pb.js +1 -1
  246. package/dist/src/generated/phigon/v1/action_pb.js.map +1 -1
  247. package/dist/src/generated/phigon/v1/common_pb.d.ts +0 -0
  248. package/dist/src/generated/phigon/v1/common_pb.d.ts.map +1 -1
  249. package/dist/src/generated/phigon/v1/common_pb.js +1 -1
  250. package/dist/src/generated/phigon/v1/common_pb.js.map +1 -1
  251. package/dist/src/generated/phigon/v1/history_sync_pb.d.ts +0 -0
  252. package/dist/src/generated/phigon/v1/history_sync_pb.d.ts.map +1 -1
  253. package/dist/src/generated/phigon/v1/history_sync_pb.js +1 -1
  254. package/dist/src/generated/phigon/v1/history_sync_pb.js.map +1 -1
  255. package/dist/src/generated/phigon/v1/identity_pb.d.ts +0 -0
  256. package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -1
  257. package/dist/src/generated/phigon/v1/identity_pb.js +1 -1
  258. package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -1
  259. package/dist/src/generated/phigon/v1/observer_service_pb.d.ts +0 -0
  260. package/dist/src/generated/phigon/v1/observer_service_pb.d.ts.map +1 -1
  261. package/dist/src/generated/phigon/v1/observer_service_pb.js +1 -1
  262. package/dist/src/generated/phigon/v1/observer_service_pb.js.map +1 -1
  263. package/dist/src/generated/phigon/v1/policy_pb.d.ts +0 -0
  264. package/dist/src/generated/phigon/v1/policy_pb.d.ts.map +1 -1
  265. package/dist/src/generated/phigon/v1/policy_pb.js +1 -1
  266. package/dist/src/generated/phigon/v1/policy_pb.js.map +1 -1
  267. package/dist/src/generated/phigon/v1/supervision_pb.d.ts +0 -0
  268. package/dist/src/generated/phigon/v1/supervision_pb.d.ts.map +1 -1
  269. package/dist/src/generated/phigon/v1/supervision_pb.js +1 -1
  270. package/dist/src/generated/phigon/v1/supervision_pb.js.map +1 -1
  271. package/dist/src/generated/phigon/v1/telemetry_pb.d.ts +0 -0
  272. package/dist/src/generated/phigon/v1/telemetry_pb.d.ts.map +1 -1
  273. package/dist/src/generated/phigon/v1/telemetry_pb.js +1 -1
  274. package/dist/src/generated/phigon/v1/telemetry_pb.js.map +1 -1
  275. package/dist/src/guardian-containment.d.ts +2 -6
  276. package/dist/src/guardian-containment.d.ts.map +1 -1
  277. package/dist/src/guardian-containment.js +12 -63
  278. package/dist/src/guardian-containment.js.map +1 -1
  279. package/dist/src/guardian-decision-journal.d.ts +0 -0
  280. package/dist/src/guardian-decision-journal.d.ts.map +1 -1
  281. package/dist/src/guardian-decision-journal.js +2 -1
  282. package/dist/src/guardian-decision-journal.js.map +1 -1
  283. package/dist/src/guardian-execution-manifest.d.ts +0 -0
  284. package/dist/src/guardian-execution-manifest.d.ts.map +0 -0
  285. package/dist/src/guardian-execution-manifest.js +0 -0
  286. package/dist/src/guardian-execution-manifest.js.map +0 -0
  287. package/dist/src/guardian-hosted-client.d.ts +0 -0
  288. package/dist/src/guardian-hosted-client.d.ts.map +0 -0
  289. package/dist/src/guardian-hosted-client.js +0 -0
  290. package/dist/src/guardian-hosted-client.js.map +0 -0
  291. package/dist/src/guardian-managed-exec.d.ts +0 -0
  292. package/dist/src/guardian-managed-exec.d.ts.map +1 -1
  293. package/dist/src/guardian-managed-exec.js +2 -1
  294. package/dist/src/guardian-managed-exec.js.map +1 -1
  295. package/dist/src/guardian-model-bridge.d.ts +0 -0
  296. package/dist/src/guardian-model-bridge.d.ts.map +1 -1
  297. package/dist/src/guardian-model-bridge.js +2 -1
  298. package/dist/src/guardian-model-bridge.js.map +1 -1
  299. package/dist/src/guardian-native.d.ts +0 -1
  300. package/dist/src/guardian-native.d.ts.map +1 -1
  301. package/dist/src/guardian-native.js +0 -6
  302. package/dist/src/guardian-native.js.map +1 -1
  303. package/dist/src/guardian-process-monitor.d.ts +6 -1
  304. package/dist/src/guardian-process-monitor.d.ts.map +1 -1
  305. package/dist/src/guardian-process-monitor.js +64 -8
  306. package/dist/src/guardian-process-monitor.js.map +1 -1
  307. package/dist/src/health.d.ts +0 -0
  308. package/dist/src/health.d.ts.map +0 -0
  309. package/dist/src/health.js +0 -0
  310. package/dist/src/health.js.map +0 -0
  311. package/dist/src/historical-identity-store.d.ts +0 -0
  312. package/dist/src/historical-identity-store.d.ts.map +1 -1
  313. package/dist/src/historical-identity-store.js +2 -1
  314. package/dist/src/historical-identity-store.js.map +1 -1
  315. package/dist/src/index.d.ts +0 -0
  316. package/dist/src/index.d.ts.map +0 -0
  317. package/dist/src/index.js +0 -0
  318. package/dist/src/index.js.map +0 -0
  319. package/dist/src/installation.d.ts +0 -0
  320. package/dist/src/installation.d.ts.map +1 -1
  321. package/dist/src/installation.js +3 -2
  322. package/dist/src/installation.js.map +1 -1
  323. package/dist/src/machine-command-executor.d.ts +26 -7
  324. package/dist/src/machine-command-executor.d.ts.map +1 -1
  325. package/dist/src/machine-command-executor.js +123 -21
  326. package/dist/src/machine-command-executor.js.map +1 -1
  327. package/dist/src/pair.d.ts +0 -0
  328. package/dist/src/pair.d.ts.map +1 -1
  329. package/dist/src/pair.js +13 -3
  330. package/dist/src/pair.js.map +1 -1
  331. package/dist/src/private-directory.d.ts +4 -0
  332. package/dist/src/private-directory.d.ts.map +1 -0
  333. package/dist/src/private-directory.js +35 -0
  334. package/dist/src/private-directory.js.map +1 -0
  335. package/dist/src/process-tree.d.ts +73 -0
  336. package/dist/src/process-tree.d.ts.map +1 -0
  337. package/dist/src/process-tree.js +256 -0
  338. package/dist/src/process-tree.js.map +1 -0
  339. package/dist/src/remove-machine.d.ts +0 -0
  340. package/dist/src/remove-machine.d.ts.map +0 -0
  341. package/dist/src/remove-machine.js +0 -0
  342. package/dist/src/remove-machine.js.map +0 -0
  343. package/dist/src/server-authority.d.ts +26 -0
  344. package/dist/src/server-authority.d.ts.map +1 -0
  345. package/dist/src/server-authority.js +102 -0
  346. package/dist/src/server-authority.js.map +1 -0
  347. package/dist/src/stream-client.d.ts +6 -2
  348. package/dist/src/stream-client.d.ts.map +1 -1
  349. package/dist/src/stream-client.js +95 -16
  350. package/dist/src/stream-client.js.map +1 -1
  351. package/dist/src/stream-state.d.ts +0 -0
  352. package/dist/src/stream-state.d.ts.map +1 -1
  353. package/dist/src/stream-state.js +2 -1
  354. package/dist/src/stream-state.js.map +1 -1
  355. package/dist/src/system-inspection.d.ts +78 -0
  356. package/dist/src/system-inspection.d.ts.map +1 -0
  357. package/dist/src/system-inspection.js +281 -0
  358. package/dist/src/system-inspection.js.map +1 -0
  359. package/dist/src/update.d.ts +15 -0
  360. package/dist/src/update.d.ts.map +1 -0
  361. package/dist/src/update.js +93 -0
  362. package/dist/src/update.js.map +1 -0
  363. package/dist/src/user-notices.d.ts +53 -0
  364. package/dist/src/user-notices.d.ts.map +1 -0
  365. package/dist/src/user-notices.js +117 -0
  366. package/dist/src/user-notices.js.map +1 -0
  367. package/package.json +83 -78
  368. package/scripts/install.mjs +306 -306
  369. package/scripts/managed-service.mjs +0 -0
  370. package/scripts/verify-guardian-release.mjs +0 -0
  371. package/scripts/windows-app-control.mjs +0 -0
  372. package/dist/src/windows-process.d.ts +0 -7
  373. package/dist/src/windows-process.d.ts.map +0 -1
  374. package/dist/src/windows-process.js +0 -18
  375. package/dist/src/windows-process.js.map +0 -1
@@ -0,0 +1,274 @@
1
+ import { createHash } from "node:crypto";
2
+ import { realpath, stat } from "node:fs/promises";
3
+ import { join, relative, resolve, sep } from "node:path";
4
+ import { DatabaseSync } from "node:sqlite";
5
+ import { databaseSignature } from "./sqlite-connections.js";
6
+ const databaseName = "sessions.db";
7
+ const maxRowsPerScan = 4_096;
8
+ const maxContentBytes = 4 << 20;
9
+ /**
10
+ * Goose (1.10+) stores every session in one SQLite database,
11
+ * `<data dir>/sessions/sessions.db`, with one `messages` row per message
12
+ * (`content_json` holds the message content blocks). Rows are delivered in
13
+ * insertion order; the cursor is the last delivered row id, so a scan reads
14
+ * only rows added since. Records keep Goose's own message id, so a
15
+ * conversation that Goose rewrites keeps stable source record identities.
16
+ */
17
+ export async function scanGooseSQLiteSources(options) {
18
+ const records = [];
19
+ let files = 0;
20
+ let malformed = 0;
21
+ let oversized = 0;
22
+ let complete = true;
23
+ for (const root of options.roots) {
24
+ try {
25
+ const result = await scanDatabase(root, {
26
+ ...options,
27
+ maxRecords: Math.max(0, options.maxRecords - records.length),
28
+ });
29
+ records.push(...result.records);
30
+ files += result.files;
31
+ malformed += result.malformed;
32
+ oversized += result.oversized;
33
+ complete = complete && result.complete;
34
+ }
35
+ catch (error) {
36
+ options.connections?.release(root);
37
+ if (!isUnavailableDatabase(error))
38
+ throw error;
39
+ }
40
+ }
41
+ return { records, files, malformed, oversized, complete };
42
+ }
43
+ async function scanDatabase(root, options) {
44
+ const empty = { records: [], files: 0, malformed: 0, oversized: 0, complete: true };
45
+ const rootReal = await realpath(root);
46
+ const databaseReal = await realpath(join(rootReal, databaseName));
47
+ const metadata = isWithin(rootReal, databaseReal)
48
+ ? await stat(databaseReal)
49
+ : undefined;
50
+ if (metadata?.isFile() !== true) {
51
+ options.connections?.release(root);
52
+ return empty;
53
+ }
54
+ // A history import skips a database it already read to the end.
55
+ const signature = options.historical && options.completedHistory !== undefined
56
+ ? await databaseSignature(databaseReal, metadata)
57
+ : undefined;
58
+ if (signature !== undefined && options.completedHistory?.get(databaseReal) === signature) {
59
+ return { ...empty, files: 1 };
60
+ }
61
+ // Only a live reader skips unchanged databases; see SQLiteConnections.
62
+ const scan = options.historical
63
+ ? undefined
64
+ : await options.connections?.check(root, databaseReal, metadata, options.cursors, openDatabase);
65
+ if (scan?.unchanged === true)
66
+ return { ...empty, files: 1 };
67
+ const database = scan?.database ?? openDatabase(databaseReal);
68
+ try {
69
+ const columns = supportedColumns(database);
70
+ if (columns === undefined) {
71
+ scan?.finish(undefined);
72
+ return { ...empty, files: 1, malformed: 1 };
73
+ }
74
+ const cursorKey = digest(`goose-sqlite-v1:${databaseReal}`);
75
+ const newest = maxRowID(database);
76
+ const saved = options.cursors.get(cursorKey);
77
+ let cursor = saved;
78
+ // AUTOINCREMENT never reuses ids; a smaller maximum means the database
79
+ // was recreated, so its rows are all new.
80
+ if (cursor !== undefined && newest < cursor)
81
+ cursor = 0;
82
+ let rows;
83
+ let replay = false;
84
+ let idle;
85
+ if (cursor === undefined && !options.historical && options.initialScan) {
86
+ replay = options.replayOnFirstStart;
87
+ rows = replay
88
+ ? latestRows(database, columns, Math.min(options.maxReplayRecords, options.maxRecords))
89
+ : [];
90
+ // Live collection starts at the current end of the database; only a
91
+ // bounded first-start replay reads saved messages. A database created
92
+ // after startup holds only new work and is read from its first row.
93
+ options.cursors.set(cursorKey, newest);
94
+ }
95
+ else {
96
+ const limit = Math.min(maxRowsPerScan, options.maxRecords);
97
+ const after = limit > 0
98
+ ? rowsAfter(database, columns, cursor ?? 0, limit)
99
+ : undefined;
100
+ rows = after?.rows ?? [];
101
+ const last = rows.at(-1);
102
+ if (last !== undefined)
103
+ options.cursors.set(cursorKey, last.id);
104
+ else if (cursor === undefined)
105
+ options.cursors.set(cursorKey, 0);
106
+ if (cursor !== undefined && cursor === saved && after?.selected === 0) {
107
+ // No row past the cursor, so the row limit did not matter: the same
108
+ // database and cursor give the same empty scan.
109
+ idle = [[cursorKey, cursor]];
110
+ }
111
+ }
112
+ const records = [];
113
+ let malformed = 0;
114
+ let oversized = 0;
115
+ for (const row of rows) {
116
+ if (Buffer.byteLength(row.content, "utf8") > maxContentBytes) {
117
+ oversized++;
118
+ continue;
119
+ }
120
+ let content;
121
+ try {
122
+ content = JSON.parse(row.content);
123
+ }
124
+ catch {
125
+ malformed++;
126
+ continue;
127
+ }
128
+ const created = createdAt(row.created, metadata.mtime);
129
+ records.push({
130
+ adapterId: options.adapterId,
131
+ sourceId: `ses_${digest(`${databaseReal}\u0000${row.sessionID}`).slice(0, 32)}`,
132
+ sourceRecordId: digest(`${databaseReal}\u0000${row.sessionID}\u0000${row.messageID || `row:${row.id}`}`),
133
+ observedAt: created,
134
+ initialReplay: replay || options.historical,
135
+ value: {
136
+ type: "goose_message",
137
+ role: row.role,
138
+ content,
139
+ created: row.created,
140
+ timestamp: created.toISOString(),
141
+ metadata: parseMetadata(row.metadata),
142
+ },
143
+ });
144
+ }
145
+ const delivered = options.cursors.get(cursorKey) ?? 0;
146
+ scan?.finish(idle);
147
+ if (signature !== undefined && options.historical && delivered >= newest && records.length === 0) {
148
+ options.completedHistory?.set(databaseReal, signature);
149
+ }
150
+ return {
151
+ records,
152
+ files: 1,
153
+ malformed,
154
+ oversized,
155
+ complete: !options.historical || delivered >= newest,
156
+ };
157
+ }
158
+ catch (error) {
159
+ scan?.fail();
160
+ throw error;
161
+ }
162
+ finally {
163
+ if (scan === undefined)
164
+ database.close();
165
+ }
166
+ }
167
+ function openDatabase(path) {
168
+ const database = new DatabaseSync(path, { readOnly: true });
169
+ try {
170
+ database.exec("PRAGMA query_only = ON; PRAGMA trusted_schema = OFF;");
171
+ }
172
+ catch (error) {
173
+ database.close();
174
+ throw error;
175
+ }
176
+ return database;
177
+ }
178
+ /** Valid rows after the cursor, and how many rows the query selected. */
179
+ function rowsAfter(database, columns, cursor, limit) {
180
+ const selected = database.prepare(`SELECT ${columns} FROM messages WHERE id > ? ORDER BY id ASC LIMIT ?`).all(cursor, limit);
181
+ return { rows: selected.flatMap(messageRow), selected: selected.length };
182
+ }
183
+ function latestRows(database, columns, limit) {
184
+ if (limit <= 0)
185
+ return [];
186
+ return database.prepare(`SELECT ${columns} FROM messages ORDER BY id DESC LIMIT ?`).all(limit).flatMap(messageRow).reverse();
187
+ }
188
+ function maxRowID(database) {
189
+ const value = database.prepare("SELECT MAX(id) AS id FROM messages").get();
190
+ const id = isRecord(value) ? value["id"] : undefined;
191
+ return typeof id === "number" && Number.isSafeInteger(id) ? id : 0;
192
+ }
193
+ function messageRow(value) {
194
+ if (!isRecord(value))
195
+ return [];
196
+ const id = value["id"];
197
+ const sessionID = value["session_id"];
198
+ const role = value["role"];
199
+ const content = value["content_json"];
200
+ const created = value["created_timestamp"];
201
+ if (typeof id !== "number" ||
202
+ !Number.isSafeInteger(id) ||
203
+ typeof sessionID !== "string" ||
204
+ sessionID.length === 0 ||
205
+ Buffer.byteLength(sessionID, "utf8") > 128 ||
206
+ typeof role !== "string" ||
207
+ typeof content !== "string") {
208
+ return [];
209
+ }
210
+ return [{
211
+ id,
212
+ messageID: typeof value["message_id"] === "string" ? value["message_id"] : "",
213
+ sessionID,
214
+ role,
215
+ content,
216
+ created: typeof created === "number" ? created : 0,
217
+ metadata: typeof value["metadata_json"] === "string" ? value["metadata_json"] : "",
218
+ }];
219
+ }
220
+ /** Goose stores epoch seconds; values above 1e10 are milliseconds. */
221
+ function createdAt(value, fallback) {
222
+ if (!Number.isFinite(value) || value <= 0)
223
+ return fallback;
224
+ const parsed = new Date(value > 1e10 ? value : value * 1_000);
225
+ return Number.isNaN(parsed.getTime()) ? fallback : parsed;
226
+ }
227
+ function parseMetadata(value) {
228
+ if (value === "")
229
+ return undefined;
230
+ try {
231
+ return JSON.parse(value);
232
+ }
233
+ catch {
234
+ return undefined;
235
+ }
236
+ }
237
+ /**
238
+ * The SELECT list for the messages table, or undefined when the required
239
+ * columns are missing. message_id and metadata_json were added by later
240
+ * schema migrations and are optional.
241
+ */
242
+ function supportedColumns(database) {
243
+ const columns = new Set(database.prepare("PRAGMA table_info(messages)").all().flatMap((value) => isRecord(value) && typeof value["name"] === "string" ? [value["name"]] : []));
244
+ const required = ["id", "session_id", "role", "content_json", "created_timestamp"];
245
+ if (!required.every((column) => columns.has(column)))
246
+ return undefined;
247
+ return [
248
+ ...required,
249
+ columns.has("message_id") ? "message_id" : "NULL AS message_id",
250
+ columns.has("metadata_json") ? "metadata_json" : "NULL AS metadata_json",
251
+ ].join(", ");
252
+ }
253
+ function digest(value) {
254
+ return createHash("sha256").update(value).digest("hex");
255
+ }
256
+ function isRecord(value) {
257
+ return typeof value === "object" && value !== null && !Array.isArray(value);
258
+ }
259
+ function isWithin(root, candidate) {
260
+ const path = relative(resolve(root), resolve(candidate));
261
+ return path === "" || (!path.startsWith(`..${sep}`) && path !== "..");
262
+ }
263
+ function isUnavailableDatabase(error) {
264
+ return error instanceof Error && ("code" in error && [
265
+ "ENOENT",
266
+ "EACCES",
267
+ "EPERM",
268
+ "ENOTDIR",
269
+ "EBUSY",
270
+ "ESTALE",
271
+ ].includes(String(error.code)) ||
272
+ /database is locked|unable to open database file/iu.test(error.message));
273
+ }
274
+ //# sourceMappingURL=goose-sqlite-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goose-sqlite-source.js","sourceRoot":"","sources":["../../../src/activity/goose-sqlite-source.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,11 @@ export * from "./policy.js";
6
6
  export * from "./source-reader.js";
7
7
  export * from "./types.js";
8
8
  export { claudeActivityAdapter } from "./adapters/claude.js";
9
+ export { clineActivityAdapter } from "./adapters/cline.js";
9
10
  export { codexActivityAdapter } from "./adapters/codex.js";
10
11
  export { copilotActivityAdapter } from "./adapters/copilot.js";
12
+ export { geminiActivityAdapter } from "./adapters/gemini.js";
13
+ export { gooseActivityAdapter } from "./adapters/goose.js";
11
14
  export { genericActivityAdapter } from "./adapters/generic.js";
12
15
  export { hermesActivityAdapter } from "./adapters/hermes.js";
13
16
  export { openClawActivityAdapter } from "./adapters/openclaw.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/activity/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/activity/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -6,8 +6,11 @@ export * from "./policy.js";
6
6
  export * from "./source-reader.js";
7
7
  export * from "./types.js";
8
8
  export { claudeActivityAdapter } from "./adapters/claude.js";
9
+ export { clineActivityAdapter } from "./adapters/cline.js";
9
10
  export { codexActivityAdapter } from "./adapters/codex.js";
10
11
  export { copilotActivityAdapter } from "./adapters/copilot.js";
12
+ export { geminiActivityAdapter } from "./adapters/gemini.js";
13
+ export { gooseActivityAdapter } from "./adapters/goose.js";
11
14
  export { genericActivityAdapter } from "./adapters/generic.js";
12
15
  export { hermesActivityAdapter } from "./adapters/hermes.js";
13
16
  export { openClawActivityAdapter } from "./adapters/openclaw.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/activity/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/activity/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../src/activity/ingest.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,QAAQ,CAAC;CACjB,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA8FjC"}
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../src/activity/ingest.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,QAAQ,CAAC;CACjB,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA8FjC"}
@@ -1,3 +1,4 @@
1
+ import { makeDirectoryPrivate } from "../private-directory.js";
1
2
  import { randomUUID } from "node:crypto";
2
3
  import { chmod, mkdir, open, unlink, } from "node:fs/promises";
3
4
  import { join } from "node:path";
@@ -19,7 +20,7 @@ export async function ingestActivityJSONL(options) {
19
20
  const bridgeRoot = join(options.dataDirectory, "bridges");
20
21
  const agentRoot = join(bridgeRoot, agent.id);
21
22
  await mkdir(agentRoot, { recursive: true, mode: 0o700 });
22
- await chmod(options.dataDirectory, 0o700);
23
+ await makeDirectoryPrivate(options.dataDirectory);
23
24
  await chmod(bridgeRoot, 0o700);
24
25
  await chmod(agentRoot, 0o700);
25
26
  const target = join(agentRoot, `${Date.now()}-${randomUUID()}.jsonl`);
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/activity/ingest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/activity/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,MAAM,GACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC;AAU7B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAKxC;IACA,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,eAAe,GAAG,cAAc,KAAK,QAAQ;QACjD,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC;QACvC,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,KAAK,GAAG,mBAAmB,CAC/B,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CACzD,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CACjB,SAAS,EACT,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,QAAQ,CACtC,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YACjC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;gBACnD,SAAS,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;oBAClC,IACE,OAAO,KAAK,KAAK,QAAQ;wBACzB,KAAK,KAAK,IAAI;wBACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,CAAC;wBACD,SAAS,EAAE,CAAC;wBACZ,SAAS;oBACX,CAAC;oBACD,MAAM,YAAY,GAAI,KAAiC,CACrD,mBAAmB,CACpB,CAAC;oBACF,IACE,YAAY,KAAK,SAAS;wBAC1B,YAAY,KAAK,eAAe,EAChC,CAAC;wBACD,SAAS,EAAE,CAAC;wBACZ,SAAS;oBACX,CAAC;oBACD,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC1B,GAAG,KAAK;wBACR,iBAAiB,EAAE,eAAe;qBACnC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;YACtC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,KAAK,CAAC,EAAE;QACf,GAAG,CAAC,eAAe,KAAK,SAAS;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;QACnC,OAAO;QACP,SAAS;QACT,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB;IACnD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG;QACrC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,136 @@
1
+ import type { SourceRecord } from "./source-reader.js";
2
+ export type JSONDocumentOptions = Readonly<{
3
+ /**
4
+ * `json` (default): one JSON document. `jsonl`: one message per line; a
5
+ * final line that is still being written is read once it is complete.
6
+ * `mutation-log`: a VS Code chat session log (an initial state followed
7
+ * by set, push and delete entries) replayed into its document.
8
+ */
9
+ documentFormat?: "json" | "jsonl" | "mutation-log";
10
+ /**
11
+ * Regular expression matched against each directory's `/`-separated
12
+ * relative path. Only matching directories are walked.
13
+ */
14
+ directoryPattern?: string;
15
+ /** Dotted path of a stable id inside each message. */
16
+ messageIdField?: string;
17
+ /**
18
+ * Dotted fields that mark a message as finished. The last message is held
19
+ * back while it has none of them set, so a reply that is still being
20
+ * written is delivered once, complete. An earlier message is final even
21
+ * without them: the agent has moved on from it.
22
+ */
23
+ completeFields?: readonly string[];
24
+ /**
25
+ * Field that is true while a message is still being written (for example
26
+ * Cline's `partial`). The last message is held back while it is true.
27
+ */
28
+ pendingField?: string;
29
+ /**
30
+ * When set, the document's first message is delivered with this field set
31
+ * to true. Some agents store the user's opening request like any other
32
+ * message, so only its position tells it apart.
33
+ */
34
+ firstMessageField?: string;
35
+ /**
36
+ * Top-level field that holds the agent's own session id. When present it
37
+ * names the session and its records, so two files holding the same
38
+ * session produce the same record identities.
39
+ */
40
+ sessionIdField?: string;
41
+ }>;
42
+ export type JSONDocumentSource = Readonly<{
43
+ adapterId: string;
44
+ roots: readonly string[];
45
+ /** Regular expression matched against the `/`-separated relative path. */
46
+ pathPattern: string;
47
+ /**
48
+ * Top-level array that holds the conversation messages, or "" when the
49
+ * document itself is the array.
50
+ */
51
+ messagesField: string;
52
+ }> & JSONDocumentOptions;
53
+ type ScanOptions = Readonly<{
54
+ cursors: Map<string, number>;
55
+ /** Reused folder listings; without one every scan lists every folder. */
56
+ listings?: DirectoryListingCache;
57
+ initialScan: boolean;
58
+ replayOnFirstStart: boolean;
59
+ replaySessions: number;
60
+ maxReplayRecords: number;
61
+ maxRecords: number;
62
+ historical: boolean;
63
+ }>;
64
+ /**
65
+ * Reads agents that keep each conversation as one JSON document rewritten
66
+ * in place (for example `{ messages: [...] }`). A document's cursor holds
67
+ * the number of messages already delivered and a fingerprint of the last
68
+ * one, so new messages are emitted once although the whole file is
69
+ * rewritten. A document whose delivered prefix changed (compaction or a
70
+ * rewind) resumes after the remembered message, or is re-baselined when
71
+ * that message is gone. Unchanged documents are not parsed again.
72
+ */
73
+ export declare function scanJSONDocumentSource(source: JSONDocumentSource, options: ScanOptions): Promise<Readonly<{
74
+ records: readonly SourceRecord[];
75
+ files: number;
76
+ malformed: number;
77
+ oversized: number;
78
+ complete: boolean;
79
+ }>>;
80
+ export declare function packCursor(messages: readonly unknown[], count: number, idField: string | undefined): number;
81
+ /**
82
+ * Index of the first undelivered message. The delivered prefix must still
83
+ * end with the remembered message; if it moved, resume after it; if it is
84
+ * gone the document was rewritten and everything present is treated as
85
+ * already delivered.
86
+ */
87
+ export declare function resumeIndex(messages: readonly unknown[], cursor: number, idField: string | undefined): number;
88
+ type DirectoryEntry = Readonly<{
89
+ name: string;
90
+ directory: boolean;
91
+ file: boolean;
92
+ }>;
93
+ type ListingFileSystem = Readonly<{
94
+ readdir: (directory: string) => Promise<readonly DirectoryEntry[]>;
95
+ modifiedMs: (directory: string) => Promise<number>;
96
+ metadata: (file: string) => Promise<Readonly<{
97
+ modifiedMs: number;
98
+ size: number;
99
+ }>>;
100
+ now: () => number;
101
+ }>;
102
+ /**
103
+ * Folder listings reused across scans. Adding, removing or renaming an entry
104
+ * changes its folder's modified time, so a folder is listed again only when
105
+ * that time moved. Checking a folder costs about half of listing it, and
106
+ * most folders under an agent's session store never change. A folder that
107
+ * changed within the last two seconds is listed again on the next scan,
108
+ * because coarse file-system clocks can hide a second change in the same
109
+ * tick, and every folder is listed afresh at least every 30 seconds.
110
+ *
111
+ * Folders and documents untouched for ten minutes are cold: they are checked
112
+ * every ten seconds instead of on every scan, so a conversation resumed in a
113
+ * quiet project is noticed within ten seconds while active ones stay live.
114
+ */
115
+ export declare class DirectoryListingCache {
116
+ #private;
117
+ static readonly relistAfterMs = 30000;
118
+ static readonly settleMs = 2000;
119
+ static readonly coldAfterMs: number;
120
+ static readonly coldCheckMs = 10000;
121
+ static readonly maxFolders = 8192;
122
+ constructor(fileSystem?: ListingFileSystem);
123
+ /**
124
+ * The folder's entries. `trustMs` skips even the folder check while the
125
+ * listing is younger than that; history imports use it, since live
126
+ * collection already follows new conversations.
127
+ */
128
+ list(directory: string, trustMs?: number): Promise<readonly DirectoryEntry[]>;
129
+ /** A document's time and size; a cold document is checked every ten seconds. */
130
+ metadata(file: string): Promise<Readonly<{
131
+ modifiedMs: number;
132
+ size: number;
133
+ }>>;
134
+ }
135
+ export {};
136
+ //# sourceMappingURL=json-document-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-document-source.d.ts","sourceRoot":"","sources":["../../../src/activity/json-document-source.ts"],"names":[],"mappings":"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"}