@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,10 +1,28 @@
1
1
  /**
2
- * Antigravity adapter — .gemini/settings.json
2
+ * Antigravity adapter — Google Antigravity and Gemini CLI.
3
3
  *
4
- * Merges SOP content into the customInstructions field of the workspace's
5
- * Gemini settings JSON file, and installs the Gemini CLI `BeforeTool` gate in
6
- * `~/.gemini/settings.json` (see antigravityHooks.ts). A settings file that is
7
- * not a plain JSON object is left alone and reported.
4
+ * Google's terminal agent was Gemini CLI until Antigravity CLI replaced it
5
+ * for individual users in 2026; enterprise and API-key users keep Gemini
6
+ * CLI. Both live under `~/.gemini`, and this one harness governs both:
7
+ *
8
+ * - the Antigravity gate (app, IDE and CLI): a `PreToolUse` hook in
9
+ * `~/.gemini/config/hooks.json` (see antigravityCliHooks.ts);
10
+ * - the Gemini CLI gate: a `BeforeTool` hook in `~/.gemini/settings.json`
11
+ * (see antigravityHooks.ts);
12
+ * - rules: a marked section of the workspace's `GEMINI.md`, the context file
13
+ * both products load as persistent instructions (see rulesSection.ts).
14
+ * Gemini CLI reads `GEMINI.md` from the workspace up to the git root (its
15
+ * `context.fileName` setting can rename it); Antigravity reads `GEMINI.md`
16
+ * and `AGENTS.md` in every directory from the file it works on up to the
17
+ * workspace root. Neither reads a `customInstructions` key in
18
+ * `.gemini/settings.json`, where earlier versions put the rules;
19
+ * `intutic disconnect` removes that key.
20
+ *
21
+ * A hooks file that is not a plain JSON object is left alone and reported.
22
+ *
23
+ * The two gates report under their own gate ids, `antigravity` and
24
+ * `gemini-cli` (gateIdentity.ts in @intutic/shared-types), so the control
25
+ * plane can tell the products apart; the harness stays one.
8
26
  *
9
27
  * HLD §3.14 — Harness Onboarding Matrix
10
28
  * @module
@@ -1 +1 @@
1
- {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../src/harness/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQjD,eAAO,MAAM,kBAAkB,EAAE,eAqDhC,CAAA"}
1
+ {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../src/harness/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAOjD,eAAO,MAAM,kBAAkB,EAAE,eA8BhC,CAAA"}
@@ -1,71 +1,62 @@
1
1
  /**
2
- * Antigravity adapter — .gemini/settings.json
2
+ * Antigravity adapter — Google Antigravity and Gemini CLI.
3
3
  *
4
- * Merges SOP content into the customInstructions field of the workspace's
5
- * Gemini settings JSON file, and installs the Gemini CLI `BeforeTool` gate in
6
- * `~/.gemini/settings.json` (see antigravityHooks.ts). A settings file that is
7
- * not a plain JSON object is left alone and reported.
4
+ * Google's terminal agent was Gemini CLI until Antigravity CLI replaced it
5
+ * for individual users in 2026; enterprise and API-key users keep Gemini
6
+ * CLI. Both live under `~/.gemini`, and this one harness governs both:
7
+ *
8
+ * - the Antigravity gate (app, IDE and CLI): a `PreToolUse` hook in
9
+ * `~/.gemini/config/hooks.json` (see antigravityCliHooks.ts);
10
+ * - the Gemini CLI gate: a `BeforeTool` hook in `~/.gemini/settings.json`
11
+ * (see antigravityHooks.ts);
12
+ * - rules: a marked section of the workspace's `GEMINI.md`, the context file
13
+ * both products load as persistent instructions (see rulesSection.ts).
14
+ * Gemini CLI reads `GEMINI.md` from the workspace up to the git root (its
15
+ * `context.fileName` setting can rename it); Antigravity reads `GEMINI.md`
16
+ * and `AGENTS.md` in every directory from the file it works on up to the
17
+ * workspace root. Neither reads a `customInstructions` key in
18
+ * `.gemini/settings.json`, where earlier versions put the rules;
19
+ * `intutic disconnect` removes that key.
20
+ *
21
+ * A hooks file that is not a plain JSON object is left alone and reported.
22
+ *
23
+ * The two gates report under their own gate ids, `antigravity` and
24
+ * `gemini-cli` (gateIdentity.ts in @intutic/shared-types), so the control
25
+ * plane can tell the products apart; the harness stays one.
8
26
  *
9
27
  * HLD §3.14 — Harness Onboarding Matrix
10
28
  * @module
11
29
  */
12
- import { join } from 'node:path';
13
- import { access, writeFile, rename, mkdir } from 'node:fs/promises';
14
- import { dirname } from 'node:path';
15
30
  import { HarnessType } from '@intutic/shared-types';
16
- import { hashFile } from '../lib/hash.js';
17
- import { newIso } from '@intutic/id';
18
31
  import { loadCredentials } from '../config/store.js';
19
- import { readJsonObjectForMerge, writeAntigravityHooks } from '@intutic/sync-daemon';
20
- const CONFIG_FILE = '.gemini/settings.json';
32
+ import { antigravityGateIdentities, writeAntigravityCliHooks, writeAntigravityHooks } from '@intutic/sync-daemon';
33
+ import { rulesSectionHash, writeRulesSectionFile } from './rulesFiles.js';
34
+ const CONFIG_FILE = 'GEMINI.md';
21
35
  export const antigravityAdapter = {
22
36
  type: HarnessType.ANTIGRAVITY,
23
37
  configFileName: CONFIG_FILE,
38
+ /**
39
+ * Either product, found the way the sync daemon finds it for the agent
40
+ * report and the AI inventory (antigravityProducts.ts): Antigravity's
41
+ * app-data directories or a project `.agents/hooks.json`; Gemini CLI's
42
+ * `gemini` on PATH, a project `.gemini` directory or its own
43
+ * `~/.gemini/settings.json`. A plain Gemini CLI install with no `.gemini`
44
+ * in the workspace is found by the binary and the settings file.
45
+ */
24
46
  async detect(workspaceRoot) {
25
- try {
26
- await access(join(workspaceRoot, '.gemini'));
27
- return true;
28
- }
29
- catch {
30
- return false;
31
- }
47
+ return (await antigravityGateIdentities(workspaceRoot)).length > 0;
48
+ },
49
+ async installGate(workspaceRoot, proxyUrl) {
50
+ const workspaceId = (await loadCredentials())?.workspaceId || 'local';
51
+ await writeAntigravityCliHooks(workspaceRoot, proxyUrl, workspaceId);
52
+ await writeAntigravityHooks(workspaceRoot, proxyUrl, workspaceId);
32
53
  },
33
- async writeConfig(workspaceRoot, sops, proxyUrl) {
34
- // The gate is installed even with zero SOPs: it is what refuses tool
35
- // calls, and the built-in protections apply without any SOP.
36
- const creds = await loadCredentials();
37
- await writeAntigravityHooks(workspaceRoot, proxyUrl, creds?.workspaceId || 'local');
38
- if (sops.length === 0)
39
- return null;
40
- const filePath = join(workspaceRoot, CONFIG_FILE);
41
- const tmpPath = filePath + '.intutic-tmp';
42
- const settings = await readJsonObjectForMerge(filePath);
43
- if (settings === null)
44
- return null;
45
- // Merge governance instructions
46
- const instructions = sops
47
- .map((sop) => `## ${sop.title}\n\n${sop.content}`)
48
- .join('\n\n---\n\n');
49
- settings.customInstructions = [
50
- '# Intutic Governance Rules (auto-generated)',
51
- `# DO NOT EDIT — managed by intutic sync daemon`,
52
- `# Last sync: ${newIso()}`,
53
- `# Proxy URL: ${proxyUrl}`,
54
- '',
55
- instructions,
56
- ].join('\n');
57
- await mkdir(dirname(filePath), { recursive: true });
58
- await writeFile(tmpPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
59
- await rename(tmpPath, filePath);
60
- return filePath;
54
+ writeConfig(workspaceRoot, sops, proxyUrl) {
55
+ return writeRulesSectionFile(workspaceRoot, CONFIG_FILE, sops, proxyUrl);
61
56
  },
62
- async readCurrentHash(workspaceRoot) {
63
- try {
64
- return await hashFile(join(workspaceRoot, CONFIG_FILE));
65
- }
66
- catch {
67
- return null;
68
- }
57
+ /** The section only: the user's own edits elsewhere in `GEMINI.md` are not drift. */
58
+ readCurrentHash(workspaceRoot) {
59
+ return rulesSectionHash(workspaceRoot, CONFIG_FILE);
69
60
  },
70
61
  };
71
62
  //# sourceMappingURL=antigravity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/harness/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEpF,MAAM,WAAW,GAAG,uBAAuB,CAAA;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,IAAI,EAAE,WAAW,CAAC,WAAW;IAC7B,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;QACrC,MAAM,qBAAqB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,IAAI,OAAO,CAAC,CAAA;QAEnF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAA;QAEzC,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAA;QACvD,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAElC,gCAAgC;QAChC,MAAM,YAAY,GAAG,IAAI;aACtB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;aACjD,IAAI,CAAC,aAAa,CAAC,CAAA;QAEtB,QAAQ,CAAC,kBAAkB,GAAG;YAC5B,6CAA6C;YAC7C,gDAAgD;YAChD,gBAAgB,MAAM,EAAE,EAAE;YAC1B,gBAAgB,QAAQ,EAAE;YAC1B,EAAE;YACF,YAAY;SACb,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3E,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC/B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/harness/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjH,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAEzE,MAAM,WAAW,GAAG,WAAW,CAAA;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,IAAI,EAAE,WAAW,CAAC,WAAW;IAC7B,cAAc,EAAE,WAAW;IAE3B;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,OAAO,CAAC,MAAM,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACpE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,QAAgB;QACvD,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,WAAW,IAAI,OAAO,CAAA;QACrE,MAAM,wBAAwB,CAAC,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;QACpE,MAAM,qBAAqB,CAAC,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;IACnE,CAAC;IAED,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QACvE,OAAO,qBAAqB,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC1E,CAAC;IAED,qFAAqF;IACrF,eAAe,CAAC,aAAqB;QACnC,OAAO,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;IACrD,CAAC;CACF,CAAA"}
@@ -15,7 +15,7 @@
15
15
  * calls never go through the runtime at all, so for `AssistantAgent`-based
16
16
  * code the framework-agnostic `@guard`/`guard_tools` helpers (governing the
17
17
  * tool objects directly) remain the applicable coverage, same as before this
18
- * adapter existed (see TD-374).
18
+ * adapter existed.
19
19
  *
20
20
  * HLD §3.14 — Harness Onboarding Matrix
21
21
  * @module
@@ -15,7 +15,7 @@
15
15
  * calls never go through the runtime at all, so for `AssistantAgent`-based
16
16
  * code the framework-agnostic `@guard`/`guard_tools` helpers (governing the
17
17
  * tool objects directly) remain the applicable coverage, same as before this
18
- * adapter existed (see TD-374).
18
+ * adapter existed.
19
19
  *
20
20
  * HLD §3.14 — Harness Onboarding Matrix
21
21
  * @module
@@ -28,7 +28,7 @@ export const autogenAdapter = makeSdkGatedAdapter({
28
28
  keywords: ['autogen-agentchat', 'autogen-core', 'autogen-ext'],
29
29
  pipInstall: 'intutic-clawde[autogen]',
30
30
  importLine: 'from intutic_clawde.gate.adapters.autogen import IntuticInterventionHandler',
31
- usageSummary: 'IntuticInterventionHandler vetoes a runtime-routed FunctionCall via on_send (see TD-374: ' +
31
+ usageSummary: 'IntuticInterventionHandler vetoes a runtime-routed FunctionCall via on_send (' +
32
32
  'invisible to AssistantAgent\'s own tool calls — wrap those tools with @guard/guard_tools ' +
33
33
  'instead).',
34
34
  docsSlug: 'autogen',
@@ -1 +1 @@
1
- {"version":3,"file":"autogen.js","sourceRoot":"","sources":["../../src/harness/autogen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;IAChD,IAAI,EAAE,WAAW,CAAC,OAAO;IACzB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,cAAc,EAAE,aAAa,CAAC;IAC9D,UAAU,EAAE,yBAAyB;IACrC,UAAU,EAAE,6EAA6E;IACzF,YAAY,EACV,2FAA2F;QAC3F,2FAA2F;QAC3F,WAAW;IACb,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAA"}
1
+ {"version":3,"file":"autogen.js","sourceRoot":"","sources":["../../src/harness/autogen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;IAChD,IAAI,EAAE,WAAW,CAAC,OAAO;IACzB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,cAAc,EAAE,aAAa,CAAC;IAC9D,UAAU,EAAE,yBAAyB;IACrC,UAAU,EAAE,6EAA6E;IACzF,YAAY,EACV,+EAA+E;QAC/E,2FAA2F;QAC3F,WAAW;IACb,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAA"}
@@ -1,2 +1,23 @@
1
- export declare const claudeCodeAdapter: import("./types.js").IHarnessAdapter;
1
+ /**
2
+ * Claude Code adapter — rule sets in `.claude/rules/intutic-governance.md`.
3
+ *
4
+ * Claude Code loads every `.claude/rules/*.md` without `paths:` front matter
5
+ * at launch, with the priority of `.claude/CLAUDE.md`
6
+ * (https://code.claude.com/docs/en/memory). Not `CLAUDE.md` itself, which is
7
+ * usually the team's own: and under Claude Code's default setting a project
8
+ * `CLAUDE.md` stops it reading `AGENTS.md`, so creating one would hide a
9
+ * team's `AGENTS.md` from it. Earlier versions overwrote `CLAUDE.md`; the
10
+ * user's own copy comes back. The decisions log goes next to it, in
11
+ * `.claude/rules/intutic-decisions.md` (decisionsDigest.ts). A rule set that
12
+ * also reaches Claude Code through `AGENTS.md` is left out of its own file
13
+ * (`writeHarnessConfigs`), so Claude Code does not load it twice.
14
+ *
15
+ * The gate is installed by `intutic connect`'s own step, with the synced
16
+ * settings its deny rules need.
17
+ *
18
+ * HLD §3.14 — Harness Onboarding Matrix
19
+ * @module
20
+ */
21
+ import type { IHarnessAdapter } from './types.js';
22
+ export declare const claudeCodeAdapter: IHarnessAdapter;
2
23
  //# sourceMappingURL=claudeCode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCode.d.ts","sourceRoot":"","sources":["../../src/harness/claudeCode.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,iBAAiB,sCAA8D,CAAA"}
1
+ {"version":3,"file":"claudeCode.d.ts","sourceRoot":"","sources":["../../src/harness/claudeCode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAMjD,eAAO,MAAM,iBAAiB,EAAE,eA2B/B,CAAA"}
@@ -1,9 +1,53 @@
1
1
  /**
2
- * Claude Code adapter — CLAUDE.md
2
+ * Claude Code adapter — rule sets in `.claude/rules/intutic-governance.md`.
3
+ *
4
+ * Claude Code loads every `.claude/rules/*.md` without `paths:` front matter
5
+ * at launch, with the priority of `.claude/CLAUDE.md`
6
+ * (https://code.claude.com/docs/en/memory). Not `CLAUDE.md` itself, which is
7
+ * usually the team's own: and under Claude Code's default setting a project
8
+ * `CLAUDE.md` stops it reading `AGENTS.md`, so creating one would hide a
9
+ * team's `AGENTS.md` from it. Earlier versions overwrote `CLAUDE.md`; the
10
+ * user's own copy comes back. The decisions log goes next to it, in
11
+ * `.claude/rules/intutic-decisions.md` (decisionsDigest.ts). A rule set that
12
+ * also reaches Claude Code through `AGENTS.md` is left out of its own file
13
+ * (`writeHarnessConfigs`), so Claude Code does not load it twice.
14
+ *
15
+ * The gate is installed by `intutic connect`'s own step, with the synced
16
+ * settings its deny rules need.
17
+ *
3
18
  * HLD §3.14 — Harness Onboarding Matrix
4
19
  * @module
5
20
  */
21
+ import { access } from 'node:fs/promises';
22
+ import { join } from 'node:path';
6
23
  import { HarnessType } from '@intutic/shared-types';
7
- import { createMarkdownAdapter } from './base.js';
8
- export const claudeCodeAdapter = createMarkdownAdapter(HarnessType.CLAUDE_CODE, 'CLAUDE.md');
24
+ import { ownRulesFileHash, retireLegacyRulesFile, writeOwnRulesFile } from './rulesFiles.js';
25
+ const RULES_FILE = '.claude/rules/intutic-governance.md';
26
+ const LEGACY_FILE = 'CLAUDE.md';
27
+ export const claudeCodeAdapter = {
28
+ type: HarnessType.CLAUDE_CODE,
29
+ configFileName: RULES_FILE,
30
+ async detect(workspaceRoot) {
31
+ try {
32
+ await access(join(workspaceRoot, LEGACY_FILE));
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ },
39
+ /** With no rule set left for it (they all reach it through `AGENTS.md`;
40
+ * see `writeHarnessConfigs`), its own file goes rather than repeat them. */
41
+ async writeConfig(workspaceRoot, sops, proxyUrl) {
42
+ await retireLegacyRulesFile(workspaceRoot, LEGACY_FILE);
43
+ if (sops.length === 0) {
44
+ await retireLegacyRulesFile(workspaceRoot, RULES_FILE);
45
+ return null;
46
+ }
47
+ return writeOwnRulesFile(workspaceRoot, RULES_FILE, sops, proxyUrl);
48
+ },
49
+ readCurrentHash(workspaceRoot) {
50
+ return ownRulesFileHash(workspaceRoot, RULES_FILE);
51
+ },
52
+ };
9
53
  //# sourceMappingURL=claudeCode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCode.js","sourceRoot":"","sources":["../../src/harness/claudeCode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"claudeCode.js","sourceRoot":"","sources":["../../src/harness/claudeCode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE5F,MAAM,UAAU,GAAG,qCAAqC,CAAA;AACxD,MAAM,WAAW,GAAG,WAAW,CAAA;AAE/B,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,IAAI,EAAE,WAAW,CAAC,WAAW;IAC7B,cAAc,EAAE,UAAU;IAE1B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED;iFAC6E;IAC7E,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,MAAM,qBAAqB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,qBAAqB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;YACtD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,iBAAiB,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACrE,CAAC;IAED,eAAe,CAAC,aAAqB;QACnC,OAAO,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IACpD,CAAC;CACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"cline.d.ts","sourceRoot":"","sources":["../../src/harness/cline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQjD,eAAO,MAAM,YAAY,EAAE,eA4D1B,CAAA"}
1
+ {"version":3,"file":"cline.d.ts","sourceRoot":"","sources":["../../src/harness/cline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AASjD,eAAO,MAAM,YAAY,EAAE,eA8C1B,CAAA"}
@@ -14,14 +14,15 @@
14
14
  * HLD §3.14 — Harness Onboarding Matrix
15
15
  * @module
16
16
  */
17
- import { access, readdir, writeFile, rename } from 'node:fs/promises';
17
+ import { access, readdir } from 'node:fs/promises';
18
18
  import { join } from 'node:path';
19
19
  import { homedir } from 'node:os';
20
20
  import { HarnessType } from '@intutic/shared-types';
21
21
  import { hashFile } from '../lib/hash.js';
22
22
  import { loadCredentials } from '../config/store.js';
23
- import { newIso } from '@intutic/id';
24
23
  import { writeClineHooks, ensureClinerulesDirectory } from '@intutic/sync-daemon/harness/clineHooks';
24
+ import { keepOriginal } from '@intutic/sync-daemon';
25
+ import { writeOwnRulesFile } from './rulesFiles.js';
25
26
  const CONFIG_FILE = '.clinerules/intutic-governance.md';
26
27
  export const clineAdapter = {
27
28
  type: HarnessType.CLINE,
@@ -45,30 +46,21 @@ export const clineAdapter = {
45
46
  return false;
46
47
  }
47
48
  },
48
- async writeConfig(workspaceRoot, sops, proxyUrl) {
49
- // 1. Rules, as one file in the .clinerules directory Cline reads.
50
- let filePath = null;
51
- if (await ensureClinerulesDirectory(workspaceRoot)) {
52
- filePath = join(workspaceRoot, CONFIG_FILE);
53
- const instructions = sops.length > 0
54
- ? sops.map((sop) => `## ${sop.title}\n\n${sop.content}`).join('\n\n---\n\n')
55
- : '# Intutic governance active — no SOP rules configured yet.';
56
- const content = [
57
- '# Intutic Governance Rules (auto-generated)',
58
- '# DO NOT EDIT — managed by intutic sync daemon',
59
- `# Last sync: ${newIso()}`,
60
- '',
61
- instructions,
62
- '',
63
- ].join('\n');
64
- const tmp = filePath + '.intutic-tmp';
65
- await writeFile(tmp, content, 'utf-8');
66
- await rename(tmp, filePath);
67
- }
68
- // 2. The PreToolUse gate in .clinerules/hooks/.
49
+ /** The PreToolUse gate in .clinerules/hooks/. */
50
+ async installGate(workspaceRoot, proxyUrl) {
69
51
  const creds = await loadCredentials();
70
52
  await writeClineHooks(workspaceRoot, proxyUrl, creds?.workspaceId || 'local');
71
- return filePath;
53
+ },
54
+ /** Rules, as one file in the .clinerules directory Cline reads; every
55
+ * file there is applied (https://docs.cline.bot/features/cline-rules). */
56
+ async writeConfig(workspaceRoot, sops, proxyUrl) {
57
+ if (sops.length === 0)
58
+ return null;
59
+ // Kept before `.clinerules` is created, so disconnect knows it made the directory.
60
+ await keepOriginal(join(workspaceRoot, CONFIG_FILE), workspaceRoot);
61
+ if (!(await ensureClinerulesDirectory(workspaceRoot)))
62
+ return null;
63
+ return writeOwnRulesFile(workspaceRoot, CONFIG_FILE, sops, proxyUrl);
72
64
  },
73
65
  async readCurrentHash(workspaceRoot) {
74
66
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"cline.js","sourceRoot":"","sources":["../../src/harness/cline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cline.js","sourceRoot":"","sources":["../../src/harness/cline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD,MAAM,WAAW,GAAG,mCAAmC,CAAA;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,IAAI,EAAE,WAAW,CAAC,KAAK;IACvB,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,yDAAyD;QACzD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;YAChD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;YAC9D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;YAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAA;QAC7E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,QAAgB;QACvD,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;QACrC,MAAM,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,IAAI,OAAO,CAAC,CAAA;IAC/E,CAAC;IAED;+EAC2E;IAC3E,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAClC,mFAAmF;QACnF,MAAM,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC,MAAM,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAClE,OAAO,iBAAiB,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -1,7 +1,12 @@
1
1
  /**
2
2
  * codex.ts — Codex adapter.
3
3
  *
4
- * Writes three things:
4
+ * Writes four things:
5
+ * - the rule sets, as the marked section of the workspace's `AGENTS.md`,
6
+ * which Codex reads before any work, merged from `~/.codex` and every
7
+ * directory from the project root down to where it runs
8
+ * (https://developers.openai.com/codex/guides/agents-md), through the
9
+ * shared writer (agentsMd.ts);
5
10
  * - `.env.intutic` in the workspace, with the proxy base URLs for shells and
6
11
  * scripts that source it;
7
12
  * - `openai_base_url` in Codex's user config (`$CODEX_HOME/config.toml`,
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/harness/codex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAcjD,eAAO,MAAM,YAAY,EAAE,eAwD1B,CAAA"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/harness/codex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAcjD,eAAO,MAAM,YAAY,EAAE,eAkD1B,CAAA"}
@@ -1,7 +1,12 @@
1
1
  /**
2
2
  * codex.ts — Codex adapter.
3
3
  *
4
- * Writes three things:
4
+ * Writes four things:
5
+ * - the rule sets, as the marked section of the workspace's `AGENTS.md`,
6
+ * which Codex reads before any work, merged from `~/.codex` and every
7
+ * directory from the project root down to where it runs
8
+ * (https://developers.openai.com/codex/guides/agents-md), through the
9
+ * shared writer (agentsMd.ts);
5
10
  * - `.env.intutic` in the workspace, with the proxy base URLs for shells and
6
11
  * scripts that source it;
7
12
  * - `openai_base_url` in Codex's user config (`$CODEX_HOME/config.toml`,
@@ -14,15 +19,14 @@
14
19
  * HLD §3.14 — Harness Onboarding Matrix
15
20
  * @module
16
21
  */
17
- import { join, dirname } from 'node:path';
18
- import { writeFile, rename, mkdir } from 'node:fs/promises';
22
+ import { join } from 'node:path';
19
23
  import { homedir } from 'node:os';
20
24
  import { HarnessType, anthropicBaseUrl, openaiBaseUrl, proxyHost } from '@intutic/shared-types';
21
- import { hashFile } from '../lib/hash.js';
22
25
  import { loadCredentials } from '../config/store.js';
23
26
  import { newIso } from '@intutic/id';
24
- import { writeCodexHooks, mergeCodexConfig } from '@intutic/sync-daemon';
25
- const CONFIG_FILE = '.env.intutic';
27
+ import { writeCodexHooks, mergeCodexConfig, writeOwnedFile } from '@intutic/sync-daemon';
28
+ import { AGENTS_MD, agentsMdHash, writeAgentsMd } from './agentsMd.js';
29
+ const ENV_FILE = '.env.intutic';
26
30
  /** Codex's user config directory, resolved at call time so CODEX_HOME and
27
31
  * HOME changes (and tests that move them) are honoured. */
28
32
  function codexHome() {
@@ -30,7 +34,7 @@ function codexHome() {
30
34
  }
31
35
  export const codexAdapter = {
32
36
  type: HarnessType.CODEX,
33
- configFileName: CONFIG_FILE,
37
+ configFileName: AGENTS_MD,
34
38
  async detect(_workspaceRoot) {
35
39
  if (process.env.CODEX_HOME)
36
40
  return true;
@@ -48,9 +52,18 @@ export const codexAdapter = {
48
52
  catch { /* ignore */ }
49
53
  return false;
50
54
  },
55
+ async installGate(workspaceRoot, proxyUrl) {
56
+ // Codex user config — persists proxy routing across sessions without env
57
+ // sourcing. Merged; a config.toml that does not parse is left alone.
58
+ await mergeCodexConfig(join(codexHome(), 'config.toml'), openaiBaseUrl(proxyUrl));
59
+ // The PreToolUse gate. The routing above governs LLM egress only; the
60
+ // gate is what refuses tool calls.
61
+ const creds = await loadCredentials();
62
+ await writeCodexHooks(workspaceRoot, proxyUrl, creds?.workspaceId || 'local');
63
+ },
64
+ /** The `AGENTS.md` section, and the workspace `.env.intutic`. */
51
65
  async writeConfig(workspaceRoot, sops, proxyUrl) {
52
- // 1. Workspace .env.intutic
53
- const filePath = join(workspaceRoot, CONFIG_FILE);
66
+ const filePath = join(workspaceRoot, ENV_FILE);
54
67
  const envContent = [
55
68
  '# Intutic Governance Rules (auto-generated)',
56
69
  '# DO NOT EDIT — managed by intutic sync daemon',
@@ -63,26 +76,11 @@ export const codexAdapter = {
63
76
  `export INTUTIC_SOP_COUNT=${sops.length}`,
64
77
  '',
65
78
  ].join('\n');
66
- await mkdir(dirname(filePath), { recursive: true });
67
- const tmpEnv = filePath + '.intutic-tmp';
68
- await writeFile(tmpEnv, envContent, 'utf-8');
69
- await rename(tmpEnv, filePath);
70
- // 2. Codex user config — persists proxy routing across sessions without
71
- // env sourcing. Merged; a config.toml that does not parse is left alone.
72
- await mergeCodexConfig(join(codexHome(), 'config.toml'), openaiBaseUrl(proxyUrl));
73
- // 3. The PreToolUse gate. The routing above governs LLM egress only; the
74
- // gate is what refuses tool calls.
75
- const creds = await loadCredentials();
76
- await writeCodexHooks(workspaceRoot, proxyUrl, creds?.workspaceId || 'local');
77
- return filePath;
79
+ await writeOwnedFile(filePath, workspaceRoot, envContent);
80
+ return (await writeAgentsMd(workspaceRoot, sops, proxyUrl)) ?? filePath;
78
81
  },
79
- async readCurrentHash(workspaceRoot) {
80
- try {
81
- return await hashFile(join(workspaceRoot, CONFIG_FILE));
82
- }
83
- catch {
84
- return null;
85
- }
82
+ readCurrentHash(workspaceRoot) {
83
+ return agentsMdHash(workspaceRoot);
86
84
  },
87
85
  };
88
86
  //# sourceMappingURL=codex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/harness/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/harness/codex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAG/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAEtE,MAAM,QAAQ,GAAG,cAAc,CAAA;AAE/B;4DAC4D;AAC5D,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,IAAI,EAAE,WAAW,CAAC,KAAK;IACvB,cAAc,EAAE,SAAS;IAEzB,KAAK,CAAC,MAAM,CAAC,cAAsB;QACjC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QACvC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACzF,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;YAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;oBAAC,OAAO,IAAI,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,QAAgB;QACvD,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;QAEjF,sEAAsE;QACtE,mCAAmC;QACnC,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;QACrC,MAAM,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,IAAI,OAAO,CAAC,CAAA;IAC/E,CAAC;IAED,iEAAiE;IACjE,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAC9C,MAAM,UAAU,GAAG;YACjB,6CAA6C;YAC7C,gDAAgD;YAChD,gBAAgB,MAAM,EAAE,EAAE;YAC1B,yCAAyC;YACzC,EAAE;YACF,8BAA8B,gBAAgB,CAAC,QAAQ,CAAC,GAAG;YAC3D,2BAA2B,aAAa,CAAC,QAAQ,CAAC,GAAG;YACrD,6BAA6B,SAAS,CAAC,QAAQ,CAAC,GAAG;YACnD,4BAA4B,IAAI,CAAC,MAAM,EAAE;YACzC,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAA;QACzD,OAAO,CAAC,MAAM,aAAa,CAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAA;IACzE,CAAC;IAED,eAAe,CAAC,aAAqB;QACnC,OAAO,YAAY,CAAC,aAAa,CAAC,CAAA;IACpC,CAAC;CACF,CAAA"}
@@ -4,10 +4,16 @@
4
4
  * Detects the Continue AI coding assistant and:
5
5
  * - sets `apiBase` on each OpenAI/Anthropic model in `~/.continue/config.yaml`
6
6
  * so its LLM calls reach the proxy (merged; see continueConfigMerger.ts);
7
- * - installs the Continue CLI (`cn`) PreToolUse gate in
8
- * `~/.continue/settings.json` and `<repo>/.continue/settings.json` (see
9
- * continueHooks.ts). The IDE extension has no hook system, so for it proxy
10
- * routing is the only mechanism.
7
+ * - installs no tool-call gate: the CLI (`cn`) loads PreToolUse hooks from
8
+ * its settings but never fires them (`firePreToolUse` has no caller at
9
+ * continuedev/continue main 5522c6f), and the IDE extension has no hook
10
+ * system. The proxy and the rules below are what govern it;
11
+ * - writes the rule sets to `.continue/rules/intutic-governance.md` with
12
+ * `alwaysApply: true`. The IDE extension reads the workspace root's
13
+ * `.continue/rules/`, and the CLI the one in the directory it runs in,
14
+ * which keeps only always-apply rules
15
+ * (https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/core/config/markdown/loadMarkdownRules.ts,
16
+ * https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/extensions/cli/src/systemMessage.ts).
11
17
  *
12
18
  * HLD §3.14 — Harness Onboarding Matrix
13
19
  * @module
@@ -1 +1 @@
1
- {"version":3,"file":"continue.d.ts","sourceRoot":"","sources":["../../src/harness/continue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAWjD,eAAO,MAAM,eAAe,EAAE,eA6B7B,CAAA"}
1
+ {"version":3,"file":"continue.d.ts","sourceRoot":"","sources":["../../src/harness/continue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAYjD,eAAO,MAAM,eAAe,EAAE,eA2B7B,CAAA"}
@@ -4,10 +4,16 @@
4
4
  * Detects the Continue AI coding assistant and:
5
5
  * - sets `apiBase` on each OpenAI/Anthropic model in `~/.continue/config.yaml`
6
6
  * so its LLM calls reach the proxy (merged; see continueConfigMerger.ts);
7
- * - installs the Continue CLI (`cn`) PreToolUse gate in
8
- * `~/.continue/settings.json` and `<repo>/.continue/settings.json` (see
9
- * continueHooks.ts). The IDE extension has no hook system, so for it proxy
10
- * routing is the only mechanism.
7
+ * - installs no tool-call gate: the CLI (`cn`) loads PreToolUse hooks from
8
+ * its settings but never fires them (`firePreToolUse` has no caller at
9
+ * continuedev/continue main 5522c6f), and the IDE extension has no hook
10
+ * system. The proxy and the rules below are what govern it;
11
+ * - writes the rule sets to `.continue/rules/intutic-governance.md` with
12
+ * `alwaysApply: true`. The IDE extension reads the workspace root's
13
+ * `.continue/rules/`, and the CLI the one in the directory it runs in,
14
+ * which keeps only always-apply rules
15
+ * (https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/core/config/markdown/loadMarkdownRules.ts,
16
+ * https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/extensions/cli/src/systemMessage.ts).
11
17
  *
12
18
  * HLD §3.14 — Harness Onboarding Matrix
13
19
  * @module
@@ -15,10 +21,10 @@
15
21
  import { access, readdir } from 'node:fs/promises';
16
22
  import { join } from 'node:path';
17
23
  import { homedir } from 'node:os';
18
- import { HarnessType, openaiBaseUrl } from '@intutic/shared-types';
19
- import { hashFile } from '../lib/hash.js';
20
- import { loadCredentials } from '../config/store.js';
21
- import { mergeContinueConfig, writeContinueHooks } from '@intutic/sync-daemon';
24
+ import { HarnessType, rulesFrontMatterOf, openaiBaseUrl } from '@intutic/shared-types';
25
+ import { mergeContinueConfig } from '@intutic/sync-daemon';
26
+ import { ownRulesFileHash, writeOwnRulesFile } from './rulesFiles.js';
27
+ const RULES_FILE = '.continue/rules/intutic-governance.md';
22
28
  /** `~/.continue/<name>`, resolved at call time so HOME changes (and tests
23
29
  * that move HOME) are honoured. */
24
30
  function continuePath(name) {
@@ -26,7 +32,7 @@ function continuePath(name) {
26
32
  }
27
33
  export const continueAdapter = {
28
34
  type: HarnessType.CONTINUE,
29
- configFileName: continuePath('config.yaml'),
35
+ configFileName: RULES_FILE,
30
36
  async detect(_workspaceRoot) {
31
37
  for (const p of [continuePath('config.yaml'), continuePath('config.json')]) {
32
38
  try {
@@ -43,20 +49,14 @@ export const continueAdapter = {
43
49
  return false;
44
50
  }
45
51
  },
46
- async writeConfig(workspaceRoot, _sops, proxyUrl) {
47
- const configYaml = continuePath('config.yaml');
48
- const routed = await mergeContinueConfig(configYaml, openaiBaseUrl(proxyUrl));
49
- const creds = await loadCredentials();
50
- await writeContinueHooks(workspaceRoot, proxyUrl, creds?.workspaceId || 'local');
51
- return routed > 0 ? configYaml : null;
52
+ async installGate(workspaceRoot, proxyUrl) {
53
+ await mergeContinueConfig(continuePath('config.yaml'), openaiBaseUrl(proxyUrl));
52
54
  },
53
- async readCurrentHash(_workspaceRoot) {
54
- try {
55
- return await hashFile(continuePath('config.yaml'));
56
- }
57
- catch {
58
- return null;
59
- }
55
+ writeConfig(workspaceRoot, sops, proxyUrl) {
56
+ return writeOwnRulesFile(workspaceRoot, RULES_FILE, sops, proxyUrl, rulesFrontMatterOf(HarnessType.CONTINUE, 'Intutic governance rules'));
57
+ },
58
+ readCurrentHash(workspaceRoot) {
59
+ return ownRulesFileHash(workspaceRoot, RULES_FILE);
60
60
  },
61
61
  };
62
62
  //# sourceMappingURL=continue.js.map