@intutic/cli 2.1.0 → 2.3.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 (368) hide show
  1. package/README.md +8 -8
  2. package/dist/cli.d.ts +0 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +492 -21
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/apiCommand.d.ts +40 -0
  7. package/dist/commands/apiCommand.d.ts.map +1 -0
  8. package/dist/commands/apiCommand.js +88 -0
  9. package/dist/commands/apiCommand.js.map +1 -0
  10. package/dist/commands/budget.d.ts +4 -0
  11. package/dist/commands/budget.d.ts.map +1 -1
  12. package/dist/commands/budget.js +8 -0
  13. package/dist/commands/budget.js.map +1 -1
  14. package/dist/commands/compliance.d.ts +122 -0
  15. package/dist/commands/compliance.d.ts.map +1 -0
  16. package/dist/commands/compliance.js +278 -0
  17. package/dist/commands/compliance.js.map +1 -0
  18. package/dist/commands/connect.d.ts +26 -1
  19. package/dist/commands/connect.d.ts.map +1 -1
  20. package/dist/commands/connect.js +222 -86
  21. package/dist/commands/connect.js.map +1 -1
  22. package/dist/commands/credentials.d.ts +1 -1
  23. package/dist/commands/credentials.js +1 -1
  24. package/dist/commands/decision.d.ts +4 -4
  25. package/dist/commands/decision.js +4 -4
  26. package/dist/commands/disconnect.d.ts +29 -0
  27. package/dist/commands/disconnect.d.ts.map +1 -0
  28. package/dist/commands/disconnect.js +266 -0
  29. package/dist/commands/disconnect.js.map +1 -0
  30. package/dist/commands/doctor.d.ts +0 -1
  31. package/dist/commands/doctor.d.ts.map +1 -1
  32. package/dist/commands/doctor.js +0 -1
  33. package/dist/commands/doctor.js.map +1 -1
  34. package/dist/commands/enforce.d.ts +1 -1
  35. package/dist/commands/enforce.js +1 -1
  36. package/dist/commands/enterprise.d.ts +3 -2
  37. package/dist/commands/enterprise.d.ts.map +1 -1
  38. package/dist/commands/enterprise.js +11 -3
  39. package/dist/commands/enterprise.js.map +1 -1
  40. package/dist/commands/env.d.ts +1 -1
  41. package/dist/commands/env.d.ts.map +1 -1
  42. package/dist/commands/env.js +3 -8
  43. package/dist/commands/env.js.map +1 -1
  44. package/dist/commands/exec.d.ts +2 -3
  45. package/dist/commands/exec.d.ts.map +1 -1
  46. package/dist/commands/exec.js +4 -5
  47. package/dist/commands/exec.js.map +1 -1
  48. package/dist/commands/gateLiveness.d.ts +15 -0
  49. package/dist/commands/gateLiveness.d.ts.map +1 -0
  50. package/dist/commands/gateLiveness.js +34 -0
  51. package/dist/commands/gateLiveness.js.map +1 -0
  52. package/dist/commands/gateway.d.ts +16 -4
  53. package/dist/commands/gateway.d.ts.map +1 -1
  54. package/dist/commands/gateway.js +47 -6
  55. package/dist/commands/gateway.js.map +1 -1
  56. package/dist/commands/github.d.ts +20 -0
  57. package/dist/commands/github.d.ts.map +1 -0
  58. package/dist/commands/github.js +41 -0
  59. package/dist/commands/github.js.map +1 -0
  60. package/dist/commands/guardrails.d.ts +28 -2
  61. package/dist/commands/guardrails.d.ts.map +1 -1
  62. package/dist/commands/guardrails.js +233 -24
  63. package/dist/commands/guardrails.js.map +1 -1
  64. package/dist/commands/init.d.ts +1 -2
  65. package/dist/commands/init.d.ts.map +1 -1
  66. package/dist/commands/init.js +3 -2
  67. package/dist/commands/init.js.map +1 -1
  68. package/dist/commands/install-daemon.d.ts +1 -1
  69. package/dist/commands/install-daemon.js +2 -2
  70. package/dist/commands/integrity.d.ts +10 -2
  71. package/dist/commands/integrity.d.ts.map +1 -1
  72. package/dist/commands/integrity.js +10 -3
  73. package/dist/commands/integrity.js.map +1 -1
  74. package/dist/commands/inventory.d.ts +60 -0
  75. package/dist/commands/inventory.d.ts.map +1 -0
  76. package/dist/commands/inventory.js +141 -0
  77. package/dist/commands/inventory.js.map +1 -0
  78. package/dist/commands/judge.d.ts +1 -1
  79. package/dist/commands/judge.js +2 -2
  80. package/dist/commands/judge.js.map +1 -1
  81. package/dist/commands/login.d.ts +0 -1
  82. package/dist/commands/login.d.ts.map +1 -1
  83. package/dist/commands/login.js +0 -1
  84. package/dist/commands/login.js.map +1 -1
  85. package/dist/commands/logout.d.ts +0 -1
  86. package/dist/commands/logout.d.ts.map +1 -1
  87. package/dist/commands/logout.js +0 -1
  88. package/dist/commands/logout.js.map +1 -1
  89. package/dist/commands/mcp.d.ts +31 -0
  90. package/dist/commands/mcp.d.ts.map +1 -0
  91. package/dist/commands/mcp.js +65 -0
  92. package/dist/commands/mcp.js.map +1 -0
  93. package/dist/commands/notifications.d.ts +54 -0
  94. package/dist/commands/notifications.d.ts.map +1 -0
  95. package/dist/commands/notifications.js +151 -0
  96. package/dist/commands/notifications.js.map +1 -0
  97. package/dist/commands/org.d.ts +3 -3
  98. package/dist/commands/org.js +3 -3
  99. package/dist/commands/policy.d.ts +6 -1
  100. package/dist/commands/policy.d.ts.map +1 -1
  101. package/dist/commands/policy.js +77 -37
  102. package/dist/commands/policy.js.map +1 -1
  103. package/dist/commands/predict-cost.d.ts +1 -2
  104. package/dist/commands/predict-cost.d.ts.map +1 -1
  105. package/dist/commands/predict-cost.js +1 -4
  106. package/dist/commands/predict-cost.js.map +1 -1
  107. package/dist/commands/rollback.d.ts.map +1 -1
  108. package/dist/commands/rollback.js +3 -1
  109. package/dist/commands/rollback.js.map +1 -1
  110. package/dist/commands/routing.d.ts +1 -1
  111. package/dist/commands/routing.js +1 -1
  112. package/dist/commands/rules.d.ts +74 -0
  113. package/dist/commands/rules.d.ts.map +1 -0
  114. package/dist/commands/rules.js +283 -0
  115. package/dist/commands/rules.js.map +1 -0
  116. package/dist/commands/settings.d.ts +43 -0
  117. package/dist/commands/settings.d.ts.map +1 -0
  118. package/dist/commands/settings.js +108 -0
  119. package/dist/commands/settings.js.map +1 -0
  120. package/dist/commands/setup.d.ts +1 -1
  121. package/dist/commands/setup.js +1 -1
  122. package/dist/commands/siem.d.ts +53 -0
  123. package/dist/commands/siem.d.ts.map +1 -0
  124. package/dist/commands/siem.js +132 -0
  125. package/dist/commands/siem.js.map +1 -0
  126. package/dist/commands/skill.d.ts +5 -5
  127. package/dist/commands/skill.js +7 -7
  128. package/dist/commands/skill.js.map +1 -1
  129. package/dist/commands/status.d.ts +0 -1
  130. package/dist/commands/status.d.ts.map +1 -1
  131. package/dist/commands/status.js +2 -3
  132. package/dist/commands/status.js.map +1 -1
  133. package/dist/commands/syncContext.d.ts +0 -1
  134. package/dist/commands/syncContext.d.ts.map +1 -1
  135. package/dist/commands/syncContext.js +0 -1
  136. package/dist/commands/syncContext.js.map +1 -1
  137. package/dist/commands/team.d.ts +2 -2
  138. package/dist/commands/team.js +2 -2
  139. package/dist/commands/traces.d.ts +0 -3
  140. package/dist/commands/traces.d.ts.map +1 -1
  141. package/dist/commands/traces.js +0 -3
  142. package/dist/commands/traces.js.map +1 -1
  143. package/dist/commands/usage.d.ts +41 -0
  144. package/dist/commands/usage.d.ts.map +1 -0
  145. package/dist/commands/usage.js +129 -0
  146. package/dist/commands/usage.js.map +1 -0
  147. package/dist/commands/whoami.d.ts +0 -1
  148. package/dist/commands/whoami.d.ts.map +1 -1
  149. package/dist/commands/whoami.js +0 -1
  150. package/dist/commands/whoami.js.map +1 -1
  151. package/dist/config/keychain.d.ts +0 -1
  152. package/dist/config/keychain.d.ts.map +1 -1
  153. package/dist/config/keychain.js +0 -1
  154. package/dist/config/keychain.js.map +1 -1
  155. package/dist/config/paths.d.ts +0 -1
  156. package/dist/config/paths.d.ts.map +1 -1
  157. package/dist/config/paths.js +0 -1
  158. package/dist/config/paths.js.map +1 -1
  159. package/dist/config/store.d.ts +0 -1
  160. package/dist/config/store.d.ts.map +1 -1
  161. package/dist/config/store.js +0 -1
  162. package/dist/config/store.js.map +1 -1
  163. package/dist/harness/ag2.d.ts +1 -1
  164. package/dist/harness/ag2.js +1 -1
  165. package/dist/harness/agentFramework.d.ts +1 -1
  166. package/dist/harness/agentFramework.js +1 -1
  167. package/dist/harness/agenticOrchestrator.d.ts +4 -6
  168. package/dist/harness/agenticOrchestrator.d.ts.map +1 -1
  169. package/dist/harness/agenticOrchestrator.js +5 -7
  170. package/dist/harness/agenticOrchestrator.js.map +1 -1
  171. package/dist/harness/agentsMd.d.ts +24 -0
  172. package/dist/harness/agentsMd.d.ts.map +1 -0
  173. package/dist/harness/agentsMd.js +28 -0
  174. package/dist/harness/agentsMd.js.map +1 -0
  175. package/dist/harness/aider.d.ts +3 -1
  176. package/dist/harness/aider.d.ts.map +1 -1
  177. package/dist/harness/aider.js +9 -7
  178. package/dist/harness/aider.js.map +1 -1
  179. package/dist/harness/antigravity.d.ts +23 -5
  180. package/dist/harness/antigravity.d.ts.map +1 -1
  181. package/dist/harness/antigravity.js +45 -54
  182. package/dist/harness/antigravity.js.map +1 -1
  183. package/dist/harness/autogen.d.ts +1 -1
  184. package/dist/harness/autogen.js +2 -2
  185. package/dist/harness/autogen.js.map +1 -1
  186. package/dist/harness/claudeCode.d.ts +22 -1
  187. package/dist/harness/claudeCode.d.ts.map +1 -1
  188. package/dist/harness/claudeCode.js +47 -3
  189. package/dist/harness/claudeCode.js.map +1 -1
  190. package/dist/harness/cline.d.ts.map +1 -1
  191. package/dist/harness/cline.js +16 -24
  192. package/dist/harness/cline.js.map +1 -1
  193. package/dist/harness/codex.d.ts +6 -1
  194. package/dist/harness/codex.d.ts.map +1 -1
  195. package/dist/harness/codex.js +26 -28
  196. package/dist/harness/codex.js.map +1 -1
  197. package/dist/harness/continue.d.ts +10 -4
  198. package/dist/harness/continue.d.ts.map +1 -1
  199. package/dist/harness/continue.js +22 -22
  200. package/dist/harness/continue.js.map +1 -1
  201. package/dist/harness/cursor.d.ts +5 -2
  202. package/dist/harness/cursor.d.ts.map +1 -1
  203. package/dist/harness/cursor.js +19 -27
  204. package/dist/harness/cursor.js.map +1 -1
  205. package/dist/harness/detector.d.ts +0 -1
  206. package/dist/harness/detector.d.ts.map +1 -1
  207. package/dist/harness/detector.js +0 -1
  208. package/dist/harness/detector.js.map +1 -1
  209. package/dist/harness/dsh.d.ts +5 -3
  210. package/dist/harness/dsh.d.ts.map +1 -1
  211. package/dist/harness/dsh.js +17 -29
  212. package/dist/harness/dsh.js.map +1 -1
  213. package/dist/harness/eve.d.ts +3 -4
  214. package/dist/harness/eve.d.ts.map +1 -1
  215. package/dist/harness/eve.js +3 -4
  216. package/dist/harness/eve.js.map +1 -1
  217. package/dist/harness/githubCopilot.d.ts +4 -1
  218. package/dist/harness/githubCopilot.d.ts.map +1 -1
  219. package/dist/harness/githubCopilot.js +13 -24
  220. package/dist/harness/githubCopilot.js.map +1 -1
  221. package/dist/harness/goose.d.ts +7 -3
  222. package/dist/harness/goose.d.ts.map +1 -1
  223. package/dist/harness/goose.js +18 -21
  224. package/dist/harness/goose.js.map +1 -1
  225. package/dist/harness/grok.d.ts +2 -2
  226. package/dist/harness/grok.d.ts.map +1 -1
  227. package/dist/harness/grok.js +15 -28
  228. package/dist/harness/grok.js.map +1 -1
  229. package/dist/harness/hermes.d.ts +6 -0
  230. package/dist/harness/hermes.d.ts.map +1 -1
  231. package/dist/harness/hermes.js +17 -16
  232. package/dist/harness/hermes.js.map +1 -1
  233. package/dist/harness/jsSdkGatedAdapter.d.ts.map +1 -1
  234. package/dist/harness/jsSdkGatedAdapter.js +4 -6
  235. package/dist/harness/jsSdkGatedAdapter.js.map +1 -1
  236. package/dist/harness/langgraph.d.ts.map +1 -1
  237. package/dist/harness/langgraph.js +4 -6
  238. package/dist/harness/langgraph.js.map +1 -1
  239. package/dist/harness/muse.d.ts +3 -7
  240. package/dist/harness/muse.d.ts.map +1 -1
  241. package/dist/harness/muse.js +17 -39
  242. package/dist/harness/muse.js.map +1 -1
  243. package/dist/harness/n8n.d.ts +13 -7
  244. package/dist/harness/n8n.d.ts.map +1 -1
  245. package/dist/harness/n8n.js +21 -127
  246. package/dist/harness/n8n.js.map +1 -1
  247. package/dist/harness/openWebUI.d.ts.map +1 -1
  248. package/dist/harness/openWebUI.js +5 -4
  249. package/dist/harness/openWebUI.js.map +1 -1
  250. package/dist/harness/openaiAgents.d.ts +1 -1
  251. package/dist/harness/openaiAgents.d.ts.map +1 -1
  252. package/dist/harness/openaiAgents.js +6 -3
  253. package/dist/harness/openaiAgents.js.map +1 -1
  254. package/dist/harness/openclaw.d.ts +8 -0
  255. package/dist/harness/openclaw.d.ts.map +1 -1
  256. package/dist/harness/openclaw.js +27 -12
  257. package/dist/harness/openclaw.js.map +1 -1
  258. package/dist/harness/opencode.d.ts +4 -5
  259. package/dist/harness/opencode.d.ts.map +1 -1
  260. package/dist/harness/opencode.js +17 -34
  261. package/dist/harness/opencode.js.map +1 -1
  262. package/dist/harness/openhands.d.ts +9 -3
  263. package/dist/harness/openhands.d.ts.map +1 -1
  264. package/dist/harness/openhands.js +43 -25
  265. package/dist/harness/openhands.js.map +1 -1
  266. package/dist/harness/pi.d.ts +7 -2
  267. package/dist/harness/pi.d.ts.map +1 -1
  268. package/dist/harness/pi.js +19 -18
  269. package/dist/harness/pi.js.map +1 -1
  270. package/dist/harness/rooCode.d.ts +12 -5
  271. package/dist/harness/rooCode.d.ts.map +1 -1
  272. package/dist/harness/rooCode.js +25 -43
  273. package/dist/harness/rooCode.js.map +1 -1
  274. package/dist/harness/rulesFiles.d.ts +53 -0
  275. package/dist/harness/rulesFiles.d.ts.map +1 -0
  276. package/dist/harness/rulesFiles.js +106 -0
  277. package/dist/harness/rulesFiles.js.map +1 -0
  278. package/dist/harness/sdkGatedAdapter.d.ts.map +1 -1
  279. package/dist/harness/sdkGatedAdapter.js +4 -6
  280. package/dist/harness/sdkGatedAdapter.js.map +1 -1
  281. package/dist/harness/smolagents.d.ts +2 -2
  282. package/dist/harness/smolagents.js +3 -3
  283. package/dist/harness/smolagents.js.map +1 -1
  284. package/dist/harness/types.d.ts +20 -6
  285. package/dist/harness/types.d.ts.map +1 -1
  286. package/dist/harness/types.js +1 -95
  287. package/dist/harness/types.js.map +1 -1
  288. package/dist/harness/windsurf.d.ts +7 -2
  289. package/dist/harness/windsurf.d.ts.map +1 -1
  290. package/dist/harness/windsurf.js +22 -29
  291. package/dist/harness/windsurf.js.map +1 -1
  292. package/dist/harness/xirp.d.ts +6 -9
  293. package/dist/harness/xirp.d.ts.map +1 -1
  294. package/dist/harness/xirp.js +7 -10
  295. package/dist/harness/xirp.js.map +1 -1
  296. package/dist/lib/api.d.ts +27 -1
  297. package/dist/lib/api.d.ts.map +1 -1
  298. package/dist/lib/api.js +55 -18
  299. package/dist/lib/api.js.map +1 -1
  300. package/dist/lib/ciscoScanner.d.ts +1 -1
  301. package/dist/lib/ciscoScanner.js +1 -1
  302. package/dist/lib/decisionsLogRefresh.d.ts.map +1 -1
  303. package/dist/lib/decisionsLogRefresh.js +6 -7
  304. package/dist/lib/decisionsLogRefresh.js.map +1 -1
  305. package/dist/lib/deviceReport.d.ts +15 -0
  306. package/dist/lib/deviceReport.d.ts.map +1 -1
  307. package/dist/lib/deviceReport.js +30 -0
  308. package/dist/lib/deviceReport.js.map +1 -1
  309. package/dist/lib/envInjector.d.ts +16 -6
  310. package/dist/lib/envInjector.d.ts.map +1 -1
  311. package/dist/lib/envInjector.js +99 -88
  312. package/dist/lib/envInjector.js.map +1 -1
  313. package/dist/lib/gitHooks.d.ts +0 -1
  314. package/dist/lib/gitHooks.d.ts.map +1 -1
  315. package/dist/lib/gitHooks.js +8 -9
  316. package/dist/lib/gitHooks.js.map +1 -1
  317. package/dist/lib/gracefulShutdown.d.ts +1 -1
  318. package/dist/lib/gracefulShutdown.js +1 -1
  319. package/dist/lib/hash.d.ts +0 -1
  320. package/dist/lib/hash.d.ts.map +1 -1
  321. package/dist/lib/hash.js +0 -1
  322. package/dist/lib/hash.js.map +1 -1
  323. package/dist/lib/inventory.d.ts +47 -0
  324. package/dist/lib/inventory.d.ts.map +1 -0
  325. package/dist/lib/inventory.js +106 -0
  326. package/dist/lib/inventory.js.map +1 -0
  327. package/dist/lib/logger.d.ts +0 -1
  328. package/dist/lib/logger.d.ts.map +1 -1
  329. package/dist/lib/logger.js +0 -1
  330. package/dist/lib/logger.js.map +1 -1
  331. package/dist/lib/mdmManifest.d.ts +30 -2
  332. package/dist/lib/mdmManifest.d.ts.map +1 -1
  333. package/dist/lib/mdmManifest.js +50 -2
  334. package/dist/lib/mdmManifest.js.map +1 -1
  335. package/dist/lib/onboarding.d.ts +0 -1
  336. package/dist/lib/onboarding.d.ts.map +1 -1
  337. package/dist/lib/onboarding.js +2 -3
  338. package/dist/lib/onboarding.js.map +1 -1
  339. package/dist/lib/otelPropagation.d.ts +1 -1
  340. package/dist/lib/otelPropagation.js +1 -1
  341. package/dist/lib/policySnapshot.d.ts +3 -1
  342. package/dist/lib/policySnapshot.d.ts.map +1 -1
  343. package/dist/lib/policySnapshot.js +15 -5
  344. package/dist/lib/policySnapshot.js.map +1 -1
  345. package/dist/lib/process.d.ts +5 -1
  346. package/dist/lib/process.d.ts.map +1 -1
  347. package/dist/lib/process.js +13 -4
  348. package/dist/lib/process.js.map +1 -1
  349. package/dist/lib/providerProbe.d.ts +2 -2
  350. package/dist/lib/providerProbe.js +2 -2
  351. package/dist/lib/sandbox/firecracker.d.ts +3 -3
  352. package/dist/lib/sandbox/firecracker.js +3 -3
  353. package/dist/lib/sandbox/index.d.ts +2 -2
  354. package/dist/lib/sandbox/index.js +2 -2
  355. package/dist/lib/sandbox/oci.d.ts +1 -1
  356. package/dist/lib/sandbox/oci.js +1 -1
  357. package/dist/lib/sandbox/types.d.ts +1 -1
  358. package/dist/lib/sandbox/types.js +1 -1
  359. package/dist/lib/sopFrontMatter.d.ts +1 -1
  360. package/dist/lib/sopFrontMatter.js +1 -1
  361. package/package.json +6 -5
  362. package/resources/sandbox/Dockerfile +1 -1
  363. package/resources/sandbox/entrypoint.sh +4 -4
  364. package/resources/sandbox/firecracker-launch.sh +1 -1
  365. package/dist/harness/base.d.ts +0 -20
  366. package/dist/harness/base.d.ts.map +0 -1
  367. package/dist/harness/base.js +0 -73
  368. package/dist/harness/base.js.map +0 -1
@@ -1,15 +1,15 @@
1
1
  /**
2
- * Environment Variable Injector (TD-041 graduation)
2
+ * Environment Variable Injector
3
3
  *
4
4
  * Injects ANTHROPIC_BASE_URL and OPENAI_BASE_URL as persistent
5
- * system-level environment variables that survive terminal restarts.
5
+ * environment variables that new terminals and applications pick up, and
6
+ * removes them again.
6
7
  *
7
8
  * Platform support:
8
- * macOS: launchctl setenv <KEY> <VALUE>
9
- * Linux: ~/.bashrc append (user-level; system /etc/environment requires sudo)
9
+ * macOS: launchctl setenv <KEY> <VALUE> (until logout)
10
+ * Linux: /etc/environment when writable (root), else ~/.bashrc
10
11
  * Windows: setx <KEY> <VALUE> (user-level, no /M)
11
12
  *
12
- * LLD #30: Multi-Region Preparation, WS-5MR (TD-041)
13
13
  * @module
14
14
  */
15
15
  import { execSync } from 'node:child_process';
@@ -19,80 +19,87 @@ import os from 'node:os';
19
19
  import { createLogger } from '@intutic/logger';
20
20
  const logger = createLogger('envInjector');
21
21
  const ENV_VARS = ['ANTHROPIC_BASE_URL', 'OPENAI_BASE_URL'];
22
+ function resolveTarget(t = {}) {
23
+ return {
24
+ platform: t.platform ?? os.platform(),
25
+ bashrc: t.bashrc ?? path.join(os.homedir(), '.bashrc'),
26
+ etcEnvironment: t.etcEnvironment ?? '/etc/environment',
27
+ exec: t.exec ?? ((command) => { execSync(command, { stdio: 'pipe' }); }),
28
+ };
29
+ }
22
30
  export class PlatformNotSupportedError extends Error {
23
31
  constructor(platform) {
24
32
  super(`Platform not supported for env injection: ${platform}`);
25
33
  this.name = 'PlatformNotSupportedError';
26
34
  }
27
35
  }
28
- export class ElevationRequiredError extends Error {
29
- constructor(path) {
30
- super(`System-level write requires root access to ${path}. Falling back to user-level.`);
31
- this.name = 'ElevationRequiredError';
32
- }
33
- }
34
36
  function sanitizeShellValue(val) {
35
37
  return val.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/`/g, '\\`').replace(/\$/g, '\\$');
36
38
  }
37
- function macosInject(key, value) {
38
- execSync(`launchctl setenv ${key} "${sanitizeShellValue(value)}"`, { stdio: 'pipe' });
39
+ function bashrcMarker(key) {
40
+ return `# intutic-env-${key}`;
41
+ }
42
+ /** `text` without the lines `drop` matches, and otherwise byte for byte. */
43
+ function withoutLines(text, drop) {
44
+ return text.split('\n').filter((l) => !drop(l)).join('\n');
39
45
  }
40
- function macosRemove(key) {
46
+ function isWritable(file) {
41
47
  try {
42
- execSync(`launchctl unsetenv ${key}`, { stdio: 'pipe' });
48
+ fs.accessSync(file, fs.constants.W_OK);
49
+ return true;
43
50
  }
44
51
  catch {
45
- // Removal is idempotent by contract: `launchctl unsetenv` exits non-zero when
46
- // the key was never set (or the user session has no launchd domain, e.g. over
47
- // ssh). Both mean "already absent", which is the state the caller asked for.
52
+ return false;
48
53
  }
49
54
  }
50
- function linuxInjectUser(key, value) {
51
- const rcFile = path.join(os.homedir(), '.bashrc');
52
- const marker = `# intutic-env-${key}`;
53
- const line = `export ${key}="${sanitizeShellValue(value)}" ${marker}`;
55
+ function linuxInjectUser(bashrc, value) {
54
56
  let content = '';
55
57
  try {
56
- content = fs.readFileSync(rcFile, 'utf8');
57
- }
58
- catch {
59
- // A missing ~/.bashrc is the normal first-run case: `content` stays '' and the
60
- // write below creates the file.
61
- // CAUTION: this also swallows non-ENOENT read failures (EACCES, EISDIR, a
62
- // symlink loop), and the write below then replaces the user's .bashrc with the
63
- // single export line. Narrowing this to ENOENT would be a behaviour change, so
64
- // it is deliberately left alone here rather than fixed as lint cleanup.
65
- }
66
- // Remove existing entry for this key
67
- const lines = content.split('\n').filter(l => !l.includes(marker));
68
- lines.push(line);
69
- fs.writeFileSync(rcFile, lines.join('\n') + '\n', { mode: 0o644 });
58
+ content = fs.readFileSync(bashrc, 'utf8');
59
+ }
60
+ catch (err) {
61
+ // A missing ~/.bashrc is the normal first-run case; the write below
62
+ // creates it. Any other read failure must not end in the file being
63
+ // replaced by our two lines.
64
+ if (err.code !== 'ENOENT')
65
+ throw err;
66
+ }
67
+ let next = withoutLines(content, (l) => ENV_VARS.some((key) => l.includes(bashrcMarker(key))));
68
+ if (next !== '' && !next.endsWith('\n'))
69
+ next += '\n';
70
+ for (const key of ENV_VARS)
71
+ next += `export ${key}="${sanitizeShellValue(value)}" ${bashrcMarker(key)}\n`;
72
+ fs.writeFileSync(bashrc, next, { mode: 0o644 });
70
73
  }
71
- function linuxRemoveUser(key) {
72
- const rcFile = path.join(os.homedir(), '.bashrc');
73
- const marker = `# intutic-env-${key}`;
74
+ /** Removes exactly the marked lines `linuxInjectUser` added. */
75
+ function linuxRemoveUser(bashrc) {
76
+ let content;
74
77
  try {
75
- const content = fs.readFileSync(rcFile, 'utf8');
76
- const filtered = content.split('\n').filter(l => !l.includes(marker)).join('\n');
77
- fs.writeFileSync(rcFile, filtered + '\n', { mode: 0o644 });
78
+ content = fs.readFileSync(bashrc, 'utf8');
78
79
  }
79
80
  catch {
80
- // Nothing to remove if ~/.bashrc does not exist, and an unwritable rc file must
81
- // not fail an uninstall: the marker line is inert shell state, so leaving it in
82
- // place is strictly better than aborting the rest of the removal sequence.
81
+ return; // Nothing to remove.
83
82
  }
83
+ const next = withoutLines(content, (l) => ENV_VARS.some((key) => l.includes(bashrcMarker(key))));
84
+ if (next !== content)
85
+ fs.writeFileSync(bashrc, next);
84
86
  }
85
- function windowsInject(key, value) {
86
- execSync(`setx ${key} "${sanitizeShellValue(value)}"`, { stdio: 'pipe' });
87
- }
88
- function windowsRemove(key) {
89
- try {
90
- execSync(`reg delete HKCU\\Environment /v ${key} /f`, { stdio: 'pipe' });
91
- }
92
- catch {
93
- // `reg delete` exits 1 with "unable to find the specified registry key or value"
94
- // when the value is already gone. Removal is idempotent, so absence is success.
87
+ /**
88
+ * pam_env reads /etc/environment and has no trailing comments, so these
89
+ * lines carry no marker: `KEY=` lines for the two variables are ours to
90
+ * replace and to remove, the same as on the way in.
91
+ */
92
+ function linuxSetSystem(etcEnvironment, value) {
93
+ const content = fs.readFileSync(etcEnvironment, 'utf8');
94
+ let next = withoutLines(content, (l) => ENV_VARS.some((key) => l.startsWith(`${key}=`)));
95
+ if (value !== null) {
96
+ if (next !== '' && !next.endsWith('\n'))
97
+ next += '\n';
98
+ for (const key of ENV_VARS)
99
+ next += `${key}="${sanitizeShellValue(value)}"\n`;
95
100
  }
101
+ if (next !== content)
102
+ fs.writeFileSync(etcEnvironment, next);
96
103
  }
97
104
  /**
98
105
  * Injects ANTHROPIC_BASE_URL and OPENAI_BASE_URL as persistent env vars.
@@ -100,66 +107,70 @@ function windowsRemove(key) {
100
107
  * @param proxyUrl - The Intutic proxy URL (e.g. https://proxy.acme.intutic.ai)
101
108
  * @returns InjectionResult describing what was done
102
109
  */
103
- export async function injectBaseUrlEnvVars(proxyUrl) {
104
- const platform = os.platform();
110
+ export async function injectBaseUrlEnvVars(proxyUrl, target) {
111
+ const t = resolveTarget(target);
112
+ const platform = t.platform;
105
113
  logger.info({ platform, proxyUrl }, 'envInjector.inject_start');
106
114
  if (platform === 'darwin') {
107
115
  for (const key of ENV_VARS)
108
- macosInject(key, proxyUrl);
116
+ t.exec(`launchctl setenv ${key} "${sanitizeShellValue(proxyUrl)}"`);
109
117
  logger.info({ platform, vars: ENV_VARS }, 'envInjector.macos_launchctl_set');
110
118
  return { platform, scope: 'system', vars: [...ENV_VARS], method: 'launchctl setenv' };
111
119
  }
112
120
  if (platform === 'linux') {
113
- // Attempt system-level first; fall back to user-level
114
- let scope = 'user';
115
- try {
116
- const etcEnv = '/etc/environment';
117
- // Only attempt if writable (i.e., running as root)
118
- fs.accessSync(etcEnv, fs.constants.W_OK);
119
- for (const key of ENV_VARS) {
120
- let content = fs.readFileSync(etcEnv, 'utf8');
121
- content = content.split('\n').filter(l => !l.startsWith(`${key}=`)).join('\n');
122
- content += `\n${key}="${sanitizeShellValue(proxyUrl)}"`;
123
- fs.writeFileSync(etcEnv, content.trim() + '\n', { mode: 0o644 });
124
- }
125
- scope = 'system';
121
+ if (isWritable(t.etcEnvironment)) {
122
+ linuxSetSystem(t.etcEnvironment, proxyUrl);
126
123
  logger.info({ platform, vars: ENV_VARS }, 'envInjector.linux_etc_environment_set');
124
+ return { platform, scope: 'system', vars: [...ENV_VARS], method: '/etc/environment' };
127
125
  }
128
- catch {
129
- // Not root \u2014 user-level fallback
130
- for (const key of ENV_VARS)
131
- linuxInjectUser(key, proxyUrl);
132
- logger.info({ platform, vars: ENV_VARS }, 'envInjector.linux_bashrc_set');
133
- }
134
- return { platform, scope, vars: [...ENV_VARS], method: scope === 'system' ? '/etc/environment' : '~/.bashrc' };
126
+ linuxInjectUser(t.bashrc, proxyUrl);
127
+ logger.info({ platform, vars: ENV_VARS }, 'envInjector.linux_bashrc_set');
128
+ return { platform, scope: 'user', vars: [...ENV_VARS], method: '~/.bashrc' };
135
129
  }
136
130
  if (platform === 'win32') {
137
131
  for (const key of ENV_VARS)
138
- windowsInject(key, proxyUrl);
132
+ t.exec(`setx ${key} "${sanitizeShellValue(proxyUrl)}"`);
139
133
  logger.info({ platform, vars: ENV_VARS }, 'envInjector.windows_setx_set');
140
134
  return { platform, scope: 'user', vars: [...ENV_VARS], method: 'setx' };
141
135
  }
142
136
  throw new PlatformNotSupportedError(platform);
143
137
  }
144
138
  /**
145
- * Removes the injected base URL env vars.
139
+ * Removes the injected base URL env vars: from wherever `injectBaseUrlEnvVars`
140
+ * can have put them, so a removal is idempotent and complete.
146
141
  */
147
- export async function removeBaseUrlEnvVars() {
148
- const platform = os.platform();
142
+ export async function removeBaseUrlEnvVars(target) {
143
+ const t = resolveTarget(target);
144
+ const platform = t.platform;
149
145
  logger.info({ platform }, 'envInjector.remove_start');
150
146
  if (platform === 'darwin') {
151
- for (const key of ENV_VARS)
152
- macosRemove(key);
147
+ for (const key of ENV_VARS) {
148
+ try {
149
+ t.exec(`launchctl unsetenv ${key}`);
150
+ }
151
+ catch {
152
+ // `launchctl unsetenv` exits non-zero when the key was never set (or the
153
+ // session has no launchd domain, e.g. over ssh): already absent.
154
+ }
155
+ }
153
156
  return;
154
157
  }
155
158
  if (platform === 'linux') {
156
- for (const key of ENV_VARS)
157
- linuxRemoveUser(key);
159
+ linuxRemoveUser(t.bashrc);
160
+ // Persist wrote here instead when it ran as root.
161
+ if (isWritable(t.etcEnvironment))
162
+ linuxSetSystem(t.etcEnvironment, null);
158
163
  return;
159
164
  }
160
165
  if (platform === 'win32') {
161
- for (const key of ENV_VARS)
162
- windowsRemove(key);
166
+ for (const key of ENV_VARS) {
167
+ try {
168
+ t.exec(`reg delete HKCU\\Environment /v ${key} /f`);
169
+ }
170
+ catch {
171
+ // `reg delete` exits 1 when the value is already gone: absence is success.
172
+ }
173
+ }
163
174
  return;
164
175
  }
165
176
  throw new PlatformNotSupportedError(platform);
@@ -1 +1 @@
1
- {"version":3,"file":"envInjector.js","sourceRoot":"","sources":["../../src/lib/envInjector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envInjector.js","sourceRoot":"","sources":["../../src/lib/envInjector.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@
4
4
  * Installs post-commit and post-checkout hooks into the workspace's
5
5
  * `.git/hooks/` directory to trigger real-time branch/commit tracking.
6
6
  *
7
- * LLD #14 — gitHooks.ts
8
7
  * HLD §3.14 — Real-Time State Mirroring (Git hooks context integration)
9
8
  *
10
9
  * @module
@@ -1 +1 @@
1
- {"version":3,"file":"gitHooks.d.ts","sourceRoot":"","sources":["../../src/lib/gitHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8IH;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkG7E"}
1
+ {"version":3,"file":"gitHooks.d.ts","sourceRoot":"","sources":["../../src/lib/gitHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA8IH;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkG7E"}
@@ -4,7 +4,6 @@
4
4
  * Installs post-commit and post-checkout hooks into the workspace's
5
5
  * `.git/hooks/` directory to trigger real-time branch/commit tracking.
6
6
  *
7
- * LLD #14 — gitHooks.ts
8
7
  * HLD §3.14 — Real-Time State Mirroring (Git hooks context integration)
9
8
  *
10
9
  * @module
@@ -20,8 +19,8 @@ const PRE_COMMIT_MARKER = '# Intutic Pre-Commit Secret Scan';
20
19
  /** Marker line identifying a post-merge hook as ours — same overwrite guard as pre-commit. */
21
20
  const POST_MERGE_MARKER = '# Intutic Post-Merge Decisions Log Refresh';
22
21
  /**
23
- * Git-context tracking hook content, shared by post-commit and post-checkout
24
- * (TD-351): both fire the same best-effort branch/commit sync, backgrounded
22
+ * Git-context tracking hook content, shared by post-commit and post-checkout:
23
+ * both fire the same best-effort branch/commit sync, backgrounded
25
24
  * and output-suppressed so it never adds latency to the Git command that
26
25
  * triggered it.
27
26
  */
@@ -36,8 +35,8 @@ fi
36
35
  }
37
36
  /**
38
37
  * Optional post-merge hook: refreshes the governed decisions log
39
- * (`.intutic/DECISIONS.md` + the bounded section in the `claude-code`
40
- * harness config) right after a merge, rather than leaving a developer
38
+ * (`.intutic/DECISIONS.md` and the recent entries in each governed
39
+ * harness's instructions file) right after a merge, rather than leaving a developer
41
40
  * waiting for the daemon's next ~30s poll. `decisions-log-refresh` itself
42
41
  * no-ops (and never errors the shell) when `decisionsLogEnabled` is off or
43
42
  * the developer isn't authenticated — see `decisionsLogRefresh.ts`.
@@ -88,7 +87,7 @@ if [ -n "$findings" ]; then
88
87
  exit 1
89
88
  fi
90
89
 
91
- # TD-358: warn-only skill-content scan of staged skill-surface additions
90
+ # Warn-only skill-content scan of staged skill-surface additions
92
91
  # (.agents/skills/**, .claude/skills/**). Advisory only — this NEVER
93
92
  # refuses the commit, unlike the secret scan above. See skillScan.ts's
94
93
  # module doc comment for why: the pattern table's false-positive rate
@@ -106,7 +105,7 @@ exit 0
106
105
  * Writes one hook file at `<hooksDir>/<name>` unless a foreign (non-Intutic)
107
106
  * hook already occupies that path — the shared never-clobber-a-foreign-hook,
108
107
  * marker-based-idempotent-rerun behavior every hook `installGitHooks` manages
109
- * now follows (TD-351; previously only pre-commit and post-merge had it).
108
+ * now follows (previously only pre-commit and post-merge had it).
110
109
  *
111
110
  * Reads the existing file first: absent, or already carrying `marker` (a
112
111
  * previous install of this same hook, safe to overwrite with the current
@@ -163,7 +162,7 @@ export async function installGitHooks(workspaceRoot) {
163
162
  try {
164
163
  await node_fs.mkdir(hooksDir, { recursive: true });
165
164
  // Git-context tracking hooks (post-commit, post-checkout). Marker-
166
- // disciplined the same way pre-commit and post-merge are below (TD-351):
165
+ // disciplined the same way pre-commit and post-merge are below:
167
166
  // never clobber a hook that isn't ours. Until this fix these two
168
167
  // overwrote whatever was already at their paths unconditionally — a
169
168
  // team's own post-commit/post-checkout script (a notification hook, a
@@ -188,7 +187,7 @@ export async function installGitHooks(workspaceRoot) {
188
187
  // Optional post-merge hook (governed decisions log refresh). Marker-
189
188
  // disciplined the same way pre-commit is above — never clobber a
190
189
  // post-merge hook that isn't ours. Post-commit/post-checkout above now
191
- // follow this exact same pattern too (TD-351 — previously they did not:
190
+ // follow this exact same pattern too (previously they did not:
192
191
  // they unconditionally overwrote whatever was already at those paths,
193
192
  // noted as a latent overreach rather than fixed alongside this hook's
194
193
  // original addition, since changing existing-install behavior needed its
@@ -1 +1 @@
1
- {"version":3,"file":"gitHooks.js","sourceRoot":"","sources":["../../src/lib/gitHooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gitHooks.js","sourceRoot":"","sources":["../../src/lib/gitHooks.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Shutdown that actually ends the process (TD-484).
2
+ * Shutdown that actually ends the process.
3
3
  *
4
4
  * `intutic connect` trapped SIGTERM, logged "Shutting down", aborted its poll
5
5
  * loop, and then stayed alive: a daemon asked to stop kept polling its control
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Shutdown that actually ends the process (TD-484).
2
+ * Shutdown that actually ends the process.
3
3
  *
4
4
  * `intutic connect` trapped SIGTERM, logged "Shutting down", aborted its poll
5
5
  * loop, and then stayed alive: a daemon asked to stop kept polling its control
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * SHA-256 hashing utilities.
3
3
  *
4
- * LLD #8 — Sync Daemon / CLI
5
4
  * @module
6
5
  */
7
6
  /** Compute SHA-256 hash of a file's contents. Returns hex string. */
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/lib/hash.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,qEAAqE;AACrE,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/lib/hash.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,qEAAqE;AACrE,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD"}
package/dist/lib/hash.js CHANGED
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * SHA-256 hashing utilities.
3
3
  *
4
- * LLD #8 — Sync Daemon / CLI
5
4
  * @module
6
5
  */
7
6
  import { createHash } from 'node:crypto';
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/lib/hash.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACpE,CAAC"}
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/lib/hash.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACpE,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The machine's AI inventory, as `intutic connect` reports it every few
3
+ * minutes: every harness the detection rules find (connected or not), plus
4
+ * what the sync daemon reads about each (`collectDeviceInventory`), sent with
5
+ * the same device fingerprint `intutic enforce` reports under.
6
+ *
7
+ * Detection lives here because the rules are the CLI's harness adapters
8
+ * (`../harness/detector.ts`); the daemon package does not depend on the CLI.
9
+ *
10
+ * @module
11
+ */
12
+ import type { InventoryDeviceIdentity } from '@intutic/shared-types';
13
+ import { type DetectedHarness } from '@intutic/sync-daemon';
14
+ /** At the default 30-second poll, every five minutes, starting with the first poll. */
15
+ export declare const INVENTORY_EVERY_N_POLLS = 10;
16
+ export declare function shouldReportInventoryThisIteration(pollIteration: number): boolean;
17
+ /** The newest installed version of each extension-based harness, from directory names alone. */
18
+ export declare function vscodeExtensionVersions(home?: string): Promise<Map<string, string>>;
19
+ /**
20
+ * Every harness whose detection rule matches this machine and workspace. A
21
+ * rule that throws counts as not detected: one broken probe must not hide
22
+ * the rest.
23
+ */
24
+ export declare function detectInstalledHarnesses(workspaceRoot: string, home?: string): Promise<DetectedHarness[]>;
25
+ /**
26
+ * This machine as `/api/v1/devices` knows it: the fingerprint in the local
27
+ * enforcement state when `intutic enforce` or `connect` has written one, so
28
+ * both views name the same device; otherwise the same fingerprint computed now.
29
+ */
30
+ export declare function inventoryDeviceIdentity(cliVersion: string): Promise<InventoryDeviceIdentity>;
31
+ /**
32
+ * Detects, collects and sends the inventory. Never throws: the sync loop must
33
+ * not stop over a report the next cycle repeats anyway.
34
+ */
35
+ export declare function reportMachineInventory(opts: {
36
+ controlPlaneUrl: string;
37
+ apiKey: string;
38
+ workspaceRoot: string;
39
+ configured: readonly string[];
40
+ /** Harnesses `intutic disconnect --harness` removed from this machine (config `disconnectedHarnesses`). */
41
+ disconnected?: readonly string[];
42
+ cliVersion: string;
43
+ }): Promise<{
44
+ reported: boolean;
45
+ reason?: string;
46
+ }>;
47
+ //# sourceMappingURL=inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../../src/lib/inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAiD,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI1G,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC,wBAAgB,kCAAkC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAEjF;AAaD,gGAAgG;AAChG,wBAAsB,uBAAuB,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiBpG;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAU1H;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAMlG;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,2GAA2G;IAC3G,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBlD"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * The machine's AI inventory, as `intutic connect` reports it every few
3
+ * minutes: every harness the detection rules find (connected or not), plus
4
+ * what the sync daemon reads about each (`collectDeviceInventory`), sent with
5
+ * the same device fingerprint `intutic enforce` reports under.
6
+ *
7
+ * Detection lives here because the rules are the CLI's harness adapters
8
+ * (`../harness/detector.ts`); the daemon package does not depend on the CLI.
9
+ *
10
+ * @module
11
+ */
12
+ import { readdir } from 'node:fs/promises';
13
+ import { homedir, hostname } from 'node:os';
14
+ import { join } from 'node:path';
15
+ import { collectDeviceInventory, reportDeviceInventory } from '@intutic/sync-daemon';
16
+ import { ALL_ADAPTERS } from '../harness/detector.js';
17
+ import { computeFingerprint, readEnforcementState } from './enforcementState.js';
18
+ /** At the default 30-second poll, every five minutes, starting with the first poll. */
19
+ export const INVENTORY_EVERY_N_POLLS = 10;
20
+ export function shouldReportInventoryThisIteration(pollIteration) {
21
+ return pollIteration % INVENTORY_EVERY_N_POLLS === 0;
22
+ }
23
+ /**
24
+ * VS Code extensions whose installed directory name carries the version
25
+ * (`<publisher>.<name>-<version>`), the one version source cheap enough to
26
+ * read on every inventory cycle.
27
+ */
28
+ const VSCODE_EXTENSION_PREFIX = {
29
+ 'cline': 'saoudrizwan.claude-dev-',
30
+ 'roo-code': 'rooveterinaryinc.roo-cline-',
31
+ 'continue': 'continue.continue-',
32
+ };
33
+ /** The newest installed version of each extension-based harness, from directory names alone. */
34
+ export async function vscodeExtensionVersions(home = homedir()) {
35
+ let entries;
36
+ try {
37
+ entries = await readdir(join(home, '.vscode', 'extensions'));
38
+ }
39
+ catch {
40
+ return new Map();
41
+ }
42
+ const out = new Map();
43
+ for (const [harness, prefix] of Object.entries(VSCODE_EXTENSION_PREFIX)) {
44
+ const versions = entries
45
+ .filter((e) => e.startsWith(prefix))
46
+ .map((e) => /^\d+\.\d+\.\d+/.exec(e.slice(prefix.length))?.[0])
47
+ .filter((v) => v !== undefined)
48
+ .sort((a, b) => b.localeCompare(a, undefined, { numeric: true }));
49
+ if (versions[0])
50
+ out.set(harness, versions[0]);
51
+ }
52
+ return out;
53
+ }
54
+ /**
55
+ * Every harness whose detection rule matches this machine and workspace. A
56
+ * rule that throws counts as not detected: one broken probe must not hide
57
+ * the rest.
58
+ */
59
+ export async function detectInstalledHarnesses(workspaceRoot, home = homedir()) {
60
+ const versions = await vscodeExtensionVersions(home);
61
+ const found = [];
62
+ for (const adapter of ALL_ADAPTERS) {
63
+ const detected = await adapter.detect(workspaceRoot).catch(() => false);
64
+ if (!detected)
65
+ continue;
66
+ const version = versions.get(adapter.type);
67
+ found.push(version ? { type: adapter.type, version } : { type: adapter.type });
68
+ }
69
+ return found;
70
+ }
71
+ /**
72
+ * This machine as `/api/v1/devices` knows it: the fingerprint in the local
73
+ * enforcement state when `intutic enforce` or `connect` has written one, so
74
+ * both views name the same device; otherwise the same fingerprint computed now.
75
+ */
76
+ export async function inventoryDeviceIdentity(cliVersion) {
77
+ const state = await readEnforcementState();
78
+ if (state) {
79
+ return { fingerprint: state.fingerprint, hostname: state.hostname, platform: state.platform, cliVersion };
80
+ }
81
+ return { fingerprint: await computeFingerprint(), hostname: hostname(), platform: process.platform, cliVersion };
82
+ }
83
+ /**
84
+ * Detects, collects and sends the inventory. Never throws: the sync loop must
85
+ * not stop over a report the next cycle repeats anyway.
86
+ */
87
+ export async function reportMachineInventory(opts) {
88
+ try {
89
+ const [detected, device] = await Promise.all([
90
+ detectInstalledHarnesses(opts.workspaceRoot),
91
+ inventoryDeviceIdentity(opts.cliVersion),
92
+ ]);
93
+ const inventory = await collectDeviceInventory({
94
+ workspaceRoot: opts.workspaceRoot,
95
+ detected,
96
+ configured: opts.configured,
97
+ disconnected: opts.disconnected,
98
+ });
99
+ const reported = await reportDeviceInventory(opts.controlPlaneUrl, opts.apiKey, device, inventory);
100
+ return reported ? { reported } : { reported, reason: 'the control plane did not accept it' };
101
+ }
102
+ catch (err) {
103
+ return { reported: false, reason: err instanceof Error ? err.message : String(err) };
104
+ }
105
+ }
106
+ //# sourceMappingURL=inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/lib/inventory.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Colorized console logger using picocolors.
3
3
  *
4
- * LLD #8 — Sync Daemon / CLI
5
4
  * @module
6
5
  */
7
6
  export declare const log: {
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,eAAO,MAAM,GAAG;cACJ,MAAM,GAAG,IAAI;iBAIV,MAAM,GAAG,IAAI;cAIhB,MAAM,GAAG,IAAI;eAIZ,MAAM,GAAG,IAAI;aAIf,MAAM,GAAG,IAAI;IAItB,sCAAsC;iBACzB,MAAM,SAAS,MAAM,GAAG,IAAI;IAIzC,8BAA8B;gBAClB,MAAM,GAAG,IAAI;CAG1B,CAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,GAAG;cACJ,MAAM,GAAG,IAAI;iBAIV,MAAM,GAAG,IAAI;cAIhB,MAAM,GAAG,IAAI;eAIZ,MAAM,GAAG,IAAI;aAIf,MAAM,GAAG,IAAI;IAItB,sCAAsC;iBACzB,MAAM,SAAS,MAAM,GAAG,IAAI;IAIzC,8BAA8B;gBAClB,MAAM,GAAG,IAAI;CAG1B,CAAA"}