@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,77 @@
1
+ import type { Stats } from "node:fs";
2
+ import type { DatabaseSync } from "node:sqlite";
3
+ /**
4
+ * Sizes and times of a database and its write-ahead log. A commit changes at
5
+ * least the log's time, so an unchanged signature means nothing new landed.
6
+ */
7
+ export declare function databaseSignature(path: string, main: Pick<Stats, "size" | "mtimeMs">): Promise<string>;
8
+ /**
9
+ * Databases a history import already read to the end, by signature. A batch
10
+ * that completes with nothing new marks its database; later batches skip it
11
+ * until a commit changes the signature. New work after that point is the
12
+ * live reader's, so this only spares re-reading finished history.
13
+ */
14
+ export type CompletedHistory = Map<string, string>;
15
+ /**
16
+ * The cursors an idle scan read, in order, with the values it found (or
17
+ * undefined). An idle scan selected no row, so it changed no cursor.
18
+ */
19
+ export type IdleCursors = ReadonlyArray<readonly [string, number | undefined]>;
20
+ /** What a live reader does with a database on this tick. */
21
+ export type SQLiteScan = Readonly<{
22
+ unchanged: true;
23
+ }> | Readonly<{
24
+ unchanged: false;
25
+ database: DatabaseSync;
26
+ /**
27
+ * Record a successful scan; `idle` when it selected no row. `recheckAt`
28
+ * is when a scan of the same data would find something new (a row it
29
+ * waits for has settled), so the idle state expires then.
30
+ */
31
+ finish(idle: IdleCursors | undefined, recheckAt?: number): void;
32
+ /** Drop the connection after a failed scan. */
33
+ fail(): void;
34
+ }>;
35
+ /**
36
+ * Decides, for a live reader, when a database has to be scanned, keyed by
37
+ * source root.
38
+ *
39
+ * While the database is active a read-only connection stays open, and
40
+ * `PRAGMA data_version` proves it unchanged: SQLite changes that value on
41
+ * the same connection whenever any other connection commits, even a WAL
42
+ * commit that leaves every file size and timestamp as they were.
43
+ *
44
+ * After `idleCloseMs` without a change the connection is closed, because
45
+ * an open SQLite file on Windows cannot be deleted or replaced by the user or
46
+ * the agent. While closed, each tick compares the main and -wal file sizes
47
+ * and modification times. A difference reopens the database for a full scan.
48
+ * Because a commit can leave them unchanged (after a WAL restart within one
49
+ * timestamp tick), a full scan also runs at least every `recheckMs`.
50
+ *
51
+ * A scan is skipped only when the last full scan selected no row and every
52
+ * cursor it read still holds the same value, so a full scan would again find
53
+ * nothing. A scan that waits for a row to settle sets when that happens, and
54
+ * its idle state expires then. Statements finish within a scan (node:sqlite resets each one), so
55
+ * no read transaction stays open between ticks to hold back checkpoints.
56
+ */
57
+ export declare class SQLiteConnections {
58
+ #private;
59
+ constructor(options?: Readonly<{
60
+ clock?: () => number;
61
+ idleCloseMs?: number;
62
+ recheckMs?: number;
63
+ }>);
64
+ /**
65
+ * Whether the database at `path` (resolved from `root`, with `metadata`
66
+ * from the same tick) must be scanned, and the connection to scan it with.
67
+ */
68
+ check(root: string, path: string, metadata: Stats, cursors: ReadonlyMap<string, number>, open: (path: string) => DatabaseSync): Promise<SQLiteScan>;
69
+ release(root: string): void;
70
+ /** Forget the databases of roots that are no longer configured. */
71
+ retain(roots: ReadonlySet<string>): void;
72
+ closeAll(): void;
73
+ /** How many connections are open now. */
74
+ get openConnections(): number;
75
+ }
76
+ export declare function dataVersion(database: DatabaseSync): number;
77
+ //# sourceMappingURL=sqlite-connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-connections.d.ts","sourceRoot":"","sources":["../../../src/activity/sqlite-connections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAS5G;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAE/E,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAClB,QAAQ,CAAC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC,GAC7B,QAAQ,CAAC;IACT,SAAS,EAAE,KAAK,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,+CAA+C;IAC/C,IAAI,IAAI,IAAI,CAAC;CACd,CAAC,CAAC;AAyBL;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAiB;;gBAO1B,OAAO,GAAE,QAAQ,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAM;IAOT;;;OAGG;IACG,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,KAAK,EACf,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,GACnC,OAAO,CAAC,UAAU,CAAC;IA8EtB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO3B,mEAAmE;IACnE,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IAMxC,QAAQ,IAAI,IAAI;IAIhB,yCAAyC;IACzC,IAAI,eAAe,IAAI,MAAM,CAM5B;CAQF;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAM1D"}
@@ -0,0 +1,220 @@
1
+ import { stat } from "node:fs/promises";
2
+ /**
3
+ * Sizes and times of a database and its write-ahead log. A commit changes at
4
+ * least the log's time, so an unchanged signature means nothing new landed.
5
+ */
6
+ export async function databaseSignature(path, main) {
7
+ let log = "-";
8
+ try {
9
+ const wal = await stat(`${path}-wal`);
10
+ log = `${wal.size}:${wal.mtimeMs}`;
11
+ }
12
+ catch {
13
+ // No write-ahead log: the main file's size and time cover every commit.
14
+ }
15
+ return `${main.size}:${main.mtimeMs}:${log}`;
16
+ }
17
+ const unchanged = Object.freeze({ unchanged: true });
18
+ /**
19
+ * Decides, for a live reader, when a database has to be scanned, keyed by
20
+ * source root.
21
+ *
22
+ * While the database is active a read-only connection stays open, and
23
+ * `PRAGMA data_version` proves it unchanged: SQLite changes that value on
24
+ * the same connection whenever any other connection commits, even a WAL
25
+ * commit that leaves every file size and timestamp as they were.
26
+ *
27
+ * After `idleCloseMs` without a change the connection is closed, because
28
+ * an open SQLite file on Windows cannot be deleted or replaced by the user or
29
+ * the agent. While closed, each tick compares the main and -wal file sizes
30
+ * and modification times. A difference reopens the database for a full scan.
31
+ * Because a commit can leave them unchanged (after a WAL restart within one
32
+ * timestamp tick), a full scan also runs at least every `recheckMs`.
33
+ *
34
+ * A scan is skipped only when the last full scan selected no row and every
35
+ * cursor it read still holds the same value, so a full scan would again find
36
+ * nothing. A scan that waits for a row to settle sets when that happens, and
37
+ * its idle state expires then. Statements finish within a scan (node:sqlite resets each one), so
38
+ * no read transaction stays open between ticks to hold back checkpoints.
39
+ */
40
+ export class SQLiteConnections {
41
+ #states = new Map();
42
+ #clock;
43
+ #idleCloseMs;
44
+ #recheckMs;
45
+ constructor(options = {}) {
46
+ this.#clock = options.clock ?? Date.now;
47
+ this.#idleCloseMs = options.idleCloseMs ?? 60_000;
48
+ this.#recheckMs = options.recheckMs ?? 60_000;
49
+ }
50
+ /**
51
+ * Whether the database at `path` (resolved from `root`, with `metadata`
52
+ * from the same tick) must be scanned, and the connection to scan it with.
53
+ */
54
+ async check(root, path, metadata, cursors, open) {
55
+ const identity = databaseIdentity(path, metadata);
56
+ // Read before data_version or any scan query, so whatever this tick
57
+ // cannot see changes the signature or version the next tick reads.
58
+ const signature = await fileSignature(path, metadata);
59
+ let state = this.#states.get(root);
60
+ if (state !== undefined && state.identity !== identity) {
61
+ this.release(root);
62
+ state = undefined;
63
+ }
64
+ const now = this.#clock();
65
+ if (state === undefined) {
66
+ state = {
67
+ identity,
68
+ connection: undefined,
69
+ version: undefined,
70
+ changedAt: now,
71
+ signature,
72
+ checkedAt: now,
73
+ idle: undefined,
74
+ };
75
+ this.#states.set(root, state);
76
+ }
77
+ if (state.connection === undefined) {
78
+ if (state.idle !== undefined &&
79
+ state.signature === signature &&
80
+ now - state.checkedAt < this.#recheckMs &&
81
+ unexpired(state.idle, now) &&
82
+ sameCursors(state.idle.cursors, cursors)) {
83
+ return unchanged;
84
+ }
85
+ // The files changed, the periodic full scan is due, or there is no
86
+ // idle scan to compare with. A new connection has its own versions.
87
+ if (state.signature !== signature)
88
+ state.changedAt = now;
89
+ state.idle = undefined;
90
+ state.version = undefined;
91
+ state.connection = open(path);
92
+ }
93
+ state.signature = signature;
94
+ const current = state;
95
+ const database = state.connection;
96
+ let version;
97
+ try {
98
+ version = dataVersion(database);
99
+ }
100
+ catch (error) {
101
+ this.release(root);
102
+ throw error;
103
+ }
104
+ if (current.version !== undefined && current.version !== version) {
105
+ current.changedAt = now;
106
+ }
107
+ current.version = version;
108
+ if (current.idle !== undefined &&
109
+ current.idle.version === version &&
110
+ unexpired(current.idle, now) &&
111
+ sameCursors(current.idle.cursors, cursors)) {
112
+ if (now - current.changedAt >= this.#idleCloseMs)
113
+ this.#close(current, now);
114
+ return unchanged;
115
+ }
116
+ current.idle = undefined;
117
+ return {
118
+ unchanged: false,
119
+ database,
120
+ finish: (idle, recheckAt) => {
121
+ if (this.#states.get(root) !== current)
122
+ return;
123
+ if (idle !== undefined)
124
+ current.idle = { version, cursors: idle, until: recheckAt };
125
+ if (now - current.changedAt >= this.#idleCloseMs)
126
+ this.#close(current, now);
127
+ },
128
+ fail: () => {
129
+ if (this.#states.get(root) === current)
130
+ this.release(root);
131
+ },
132
+ };
133
+ }
134
+ release(root) {
135
+ const state = this.#states.get(root);
136
+ if (state === undefined)
137
+ return;
138
+ this.#states.delete(root);
139
+ if (state.connection !== undefined)
140
+ closeQuietly(state.connection);
141
+ }
142
+ /** Forget the databases of roots that are no longer configured. */
143
+ retain(roots) {
144
+ for (const root of [...this.#states.keys()]) {
145
+ if (!roots.has(root))
146
+ this.release(root);
147
+ }
148
+ }
149
+ closeAll() {
150
+ for (const root of [...this.#states.keys()])
151
+ this.release(root);
152
+ }
153
+ /** How many connections are open now. */
154
+ get openConnections() {
155
+ let open = 0;
156
+ for (const state of this.#states.values()) {
157
+ if (state.connection !== undefined)
158
+ open++;
159
+ }
160
+ return open;
161
+ }
162
+ #close(state, now) {
163
+ if (state.connection !== undefined)
164
+ closeQuietly(state.connection);
165
+ state.connection = undefined;
166
+ state.version = undefined;
167
+ state.checkedAt = now;
168
+ }
169
+ }
170
+ export function dataVersion(database) {
171
+ const value = database.prepare("PRAGMA data_version").get()?.["data_version"];
172
+ if (typeof value !== "number" || !Number.isSafeInteger(value)) {
173
+ throw new Error("SQLite data version is unavailable.");
174
+ }
175
+ return value;
176
+ }
177
+ function databaseIdentity(path, metadata) {
178
+ return [path, metadata.dev, metadata.ino, metadata.birthtimeMs].join("\u0000");
179
+ }
180
+ let unreadableWal = 0;
181
+ async function fileSignature(path, main) {
182
+ let wal;
183
+ try {
184
+ const metadata = await stat(`${path}-wal`);
185
+ wal = [metadata.size, metadata.mtimeMs, metadata.ino].join(":");
186
+ }
187
+ catch (error) {
188
+ // No -wal file: a rollback-journal database, or WAL after the last
189
+ // writer closed. Any other failure counts as a change.
190
+ wal = error instanceof Error && "code" in error && error.code === "ENOENT"
191
+ ? "none"
192
+ : `unreadable:${++unreadableWal}`;
193
+ }
194
+ return `${main.size}:${main.mtimeMs}\u0000${wal}`;
195
+ }
196
+ /** True until the idle state's expiry, if it has one. */
197
+ function unexpired(idle, now) {
198
+ return idle.until === undefined || now < idle.until;
199
+ }
200
+ /**
201
+ * True when every cursor still holds the value the idle scan saw. They are
202
+ * read in the scan's order, so least-recently-used bookkeeping matches the
203
+ * scan this replaces.
204
+ */
205
+ function sameCursors(idle, cursors) {
206
+ for (const [key, value] of idle) {
207
+ if (cursors.get(key) !== value)
208
+ return false;
209
+ }
210
+ return true;
211
+ }
212
+ function closeQuietly(database) {
213
+ try {
214
+ database.close();
215
+ }
216
+ catch {
217
+ // Already closed.
218
+ }
219
+ }
220
+ //# sourceMappingURL=sqlite-connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-connections.js","sourceRoot":"","sources":["../../../src/activity/sqlite-connections.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,65 @@
1
+ import type { SourceRecord } from "./source-reader.js";
2
+ import { type CompletedHistory, type SQLiteConnections } from "./sqlite-connections.js";
3
+ type ScanOptions = Readonly<{
4
+ adapterId: string;
5
+ roots: readonly string[];
6
+ cursors: Map<string, number>;
7
+ initialScan: boolean;
8
+ replayOnFirstStart: boolean;
9
+ /** Newest threads replayed on a first live start. */
10
+ replaySessions: number;
11
+ maxReplayRecords: number;
12
+ maxRecords: number;
13
+ historical: boolean;
14
+ /** Connections a live reader keeps open between scans. */
15
+ connections?: SQLiteConnections;
16
+ /** History only: databases already read to the end. */
17
+ completedHistory?: CompletedHistory;
18
+ }>;
19
+ type ScanResult = Readonly<{
20
+ records: readonly SourceRecord[];
21
+ files: number;
22
+ malformed: number;
23
+ oversized: number;
24
+ complete: boolean;
25
+ }>;
26
+ /**
27
+ * One delivered unit of a Zed thread: a user prompt, one block of an agent
28
+ * reply (text, thinking or a tool call) or one tool result. `complete` is
29
+ * false for a tool call whose input was still streaming when Zed saved.
30
+ */
31
+ export type ZedThreadItem = Readonly<{
32
+ id: string;
33
+ complete: boolean;
34
+ value: Readonly<Record<string, unknown>>;
35
+ }>;
36
+ /**
37
+ * Zed's agent panel keeps every thread in one SQLite database,
38
+ * `<data dir>/threads/threads.db`: one `threads` row per thread whose `data`
39
+ * is the whole thread as JSON, zstd-compressed (`data_type` "zstd") or plain
40
+ * ("json"), rewritten on every save. Each thread is split into items (see
41
+ * zedThreadItems) and a per-thread cursor remembers how many were delivered
42
+ * and the last one's id, so only items added since are emitted. A thread
43
+ * whose `updated_at` and size are unchanged is not decompressed again.
44
+ * Messages carry no times of their own; items take the thread's save time.
45
+ */
46
+ export declare function scanZedSQLiteSources(options: ScanOptions): Promise<ScanResult>;
47
+ /**
48
+ * Splits a saved Zed thread into items, in order. Zed's own format
49
+ * (version 0.3.0) stores `messages` as tagged values: `{ User: { id,
50
+ * content } }`, `{ Agent: { content, tool_results } }`, `"Resume"` and
51
+ * `{ Compaction: ... }`. A user message becomes one item; each Text,
52
+ * Thinking or ToolUse block of an agent message becomes one, followed by
53
+ * one per tool result. Older threads from Zed's first agent store messages
54
+ * as `{ id, role, segments, tool_uses, tool_results }` and are read into the
55
+ * same items.
56
+ *
57
+ * Item ids are stable across saves: they hang off the id of the user
58
+ * message that started the turn, so a turn rewound and sent again gets new
59
+ * ids. Large payloads are left out: images, the full text of mentioned files
60
+ * and Zed's debugging copy of tool output. Returns undefined when the
61
+ * document holds no message list.
62
+ */
63
+ export declare function zedThreadItems(document: unknown): readonly ZedThreadItem[] | undefined;
64
+ export {};
65
+ //# sourceMappingURL=zed-sqlite-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zed-sqlite-source.d.ts","sourceRoot":"","sources":["../../../src/activity/zed-sqlite-source.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,gBAAgB,EAAuC,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAY7H,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC,CAAC;AAEH,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAIH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1C,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAuBrB;AA+ND;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,GAChB,SAAS,aAAa,EAAE,GAAG,SAAS,CA2CtC"}