@intutic/sync-daemon 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 (288) hide show
  1. package/README.md +1 -1
  2. package/dist/agentReporter.d.ts +24 -11
  3. package/dist/agentReporter.d.ts.map +1 -1
  4. package/dist/agentReporter.js +20 -13
  5. package/dist/agentReporter.js.map +1 -1
  6. package/dist/configReader.d.ts +45 -25
  7. package/dist/configReader.d.ts.map +1 -1
  8. package/dist/configReader.js +70 -46
  9. package/dist/configReader.js.map +1 -1
  10. package/dist/configWriter.d.ts +32 -45
  11. package/dist/configWriter.d.ts.map +1 -1
  12. package/dist/configWriter.js +52 -686
  13. package/dist/configWriter.js.map +1 -1
  14. package/dist/disconnect/harnesses.d.ts +29 -0
  15. package/dist/disconnect/harnesses.d.ts.map +1 -0
  16. package/dist/disconnect/harnesses.js +805 -0
  17. package/dist/disconnect/harnesses.js.map +1 -0
  18. package/dist/disconnect/index.d.ts +25 -0
  19. package/dist/disconnect/index.d.ts.map +1 -0
  20. package/dist/disconnect/index.js +92 -0
  21. package/dist/disconnect/index.js.map +1 -0
  22. package/dist/disconnect/mcp.d.ts +81 -0
  23. package/dist/disconnect/mcp.d.ts.map +1 -0
  24. package/dist/disconnect/mcp.js +354 -0
  25. package/dist/disconnect/mcp.js.map +1 -0
  26. package/dist/disconnect/originals.d.ts +88 -0
  27. package/dist/disconnect/originals.d.ts.map +1 -0
  28. package/dist/disconnect/originals.js +257 -0
  29. package/dist/disconnect/originals.js.map +1 -0
  30. package/dist/disconnect/plan.d.ts +175 -0
  31. package/dist/disconnect/plan.d.ts.map +1 -0
  32. package/dist/disconnect/plan.js +580 -0
  33. package/dist/disconnect/plan.js.map +1 -0
  34. package/dist/disconnect/recognise.d.ts +43 -0
  35. package/dist/disconnect/recognise.d.ts.map +1 -0
  36. package/dist/disconnect/recognise.js +108 -0
  37. package/dist/disconnect/recognise.js.map +1 -0
  38. package/dist/disconnect/tomlLines.d.ts +39 -0
  39. package/dist/disconnect/tomlLines.d.ts.map +1 -0
  40. package/dist/disconnect/tomlLines.js +105 -0
  41. package/dist/disconnect/tomlLines.js.map +1 -0
  42. package/dist/harness/aiderConfigMerger.d.ts +29 -8
  43. package/dist/harness/aiderConfigMerger.d.ts.map +1 -1
  44. package/dist/harness/aiderConfigMerger.js +63 -12
  45. package/dist/harness/aiderConfigMerger.js.map +1 -1
  46. package/dist/harness/antigravityCliHooks.d.ts +61 -0
  47. package/dist/harness/antigravityCliHooks.d.ts.map +1 -0
  48. package/dist/harness/antigravityCliHooks.js +207 -0
  49. package/dist/harness/antigravityCliHooks.js.map +1 -0
  50. package/dist/harness/antigravityHooks.d.ts +12 -2
  51. package/dist/harness/antigravityHooks.d.ts.map +1 -1
  52. package/dist/harness/antigravityHooks.js +38 -16
  53. package/dist/harness/antigravityHooks.js.map +1 -1
  54. package/dist/harness/antigravityProducts.d.ts +40 -0
  55. package/dist/harness/antigravityProducts.d.ts.map +1 -0
  56. package/dist/harness/antigravityProducts.js +109 -0
  57. package/dist/harness/antigravityProducts.js.map +1 -0
  58. package/dist/harness/claudeAgentsMd.d.ts +29 -0
  59. package/dist/harness/claudeAgentsMd.d.ts.map +1 -0
  60. package/dist/harness/claudeAgentsMd.js +80 -0
  61. package/dist/harness/claudeAgentsMd.js.map +1 -0
  62. package/dist/harness/claudeCodeHooks.d.ts +6 -6
  63. package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
  64. package/dist/harness/claudeCodeHooks.js +115 -28
  65. package/dist/harness/claudeCodeHooks.js.map +1 -1
  66. package/dist/harness/claudeProjectApproval.d.ts +53 -0
  67. package/dist/harness/claudeProjectApproval.d.ts.map +1 -0
  68. package/dist/harness/claudeProjectApproval.js +159 -0
  69. package/dist/harness/claudeProjectApproval.js.map +1 -0
  70. package/dist/harness/clineHooks.d.ts +0 -1
  71. package/dist/harness/clineHooks.d.ts.map +1 -1
  72. package/dist/harness/clineHooks.js +13 -4
  73. package/dist/harness/clineHooks.js.map +1 -1
  74. package/dist/harness/codexConfigMerger.d.ts.map +1 -1
  75. package/dist/harness/codexConfigMerger.js +4 -0
  76. package/dist/harness/codexConfigMerger.js.map +1 -1
  77. package/dist/harness/codexHooks.d.ts +2 -0
  78. package/dist/harness/codexHooks.d.ts.map +1 -1
  79. package/dist/harness/codexHooks.js +15 -4
  80. package/dist/harness/codexHooks.js.map +1 -1
  81. package/dist/harness/continueConfigMerger.d.ts.map +1 -1
  82. package/dist/harness/continueConfigMerger.js +4 -0
  83. package/dist/harness/continueConfigMerger.js.map +1 -1
  84. package/dist/harness/cursorHooks.d.ts +5 -2
  85. package/dist/harness/cursorHooks.d.ts.map +1 -1
  86. package/dist/harness/cursorHooks.js +12 -3
  87. package/dist/harness/cursorHooks.js.map +1 -1
  88. package/dist/harness/dshHooks.d.ts +5 -5
  89. package/dist/harness/dshHooks.d.ts.map +1 -1
  90. package/dist/harness/dshHooks.js +12 -5
  91. package/dist/harness/dshHooks.js.map +1 -1
  92. package/dist/harness/gateArtifacts.d.ts +35 -0
  93. package/dist/harness/gateArtifacts.d.ts.map +1 -0
  94. package/dist/harness/gateArtifacts.js +88 -0
  95. package/dist/harness/gateArtifacts.js.map +1 -0
  96. package/dist/harness/gateBody.d.ts +195 -69
  97. package/dist/harness/gateBody.d.ts.map +1 -1
  98. package/dist/harness/gateBody.js +847 -182
  99. package/dist/harness/gateBody.js.map +1 -1
  100. package/dist/harness/gateSightings.d.ts +47 -0
  101. package/dist/harness/gateSightings.d.ts.map +1 -0
  102. package/dist/harness/gateSightings.js +159 -0
  103. package/dist/harness/gateSightings.js.map +1 -0
  104. package/dist/harness/githubCopilotHooks.d.ts.map +1 -1
  105. package/dist/harness/githubCopilotHooks.js +11 -10
  106. package/dist/harness/githubCopilotHooks.js.map +1 -1
  107. package/dist/harness/gooseHardener.d.ts +0 -1
  108. package/dist/harness/gooseHardener.d.ts.map +1 -1
  109. package/dist/harness/gooseHardener.js +1 -1
  110. package/dist/harness/gooseHardener.js.map +1 -1
  111. package/dist/harness/gooseHooks.d.ts +29 -1
  112. package/dist/harness/gooseHooks.d.ts.map +1 -1
  113. package/dist/harness/gooseHooks.js +107 -69
  114. package/dist/harness/gooseHooks.js.map +1 -1
  115. package/dist/harness/grokHooks.d.ts +2 -2
  116. package/dist/harness/grokHooks.d.ts.map +1 -1
  117. package/dist/harness/grokHooks.js +20 -18
  118. package/dist/harness/grokHooks.js.map +1 -1
  119. package/dist/harness/hermesHooks.d.ts +18 -8
  120. package/dist/harness/hermesHooks.d.ts.map +1 -1
  121. package/dist/harness/hermesHooks.js +55 -19
  122. package/dist/harness/hermesHooks.js.map +1 -1
  123. package/dist/harness/holdRedaction.d.ts +4 -1
  124. package/dist/harness/holdRedaction.d.ts.map +1 -1
  125. package/dist/harness/holdRedaction.js +32 -8
  126. package/dist/harness/holdRedaction.js.map +1 -1
  127. package/dist/harness/jetbrainsXmlConfig.d.ts +20 -0
  128. package/dist/harness/jetbrainsXmlConfig.d.ts.map +1 -1
  129. package/dist/harness/jetbrainsXmlConfig.js +39 -18
  130. package/dist/harness/jetbrainsXmlConfig.js.map +1 -1
  131. package/dist/harness/mcpAutoWrite.d.ts +62 -25
  132. package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
  133. package/dist/harness/mcpAutoWrite.js +406 -95
  134. package/dist/harness/mcpAutoWrite.js.map +1 -1
  135. package/dist/harness/museHooks.d.ts +3 -3
  136. package/dist/harness/museHooks.d.ts.map +1 -1
  137. package/dist/harness/museHooks.js +15 -7
  138. package/dist/harness/museHooks.js.map +1 -1
  139. package/dist/harness/n8nHooks.d.ts +0 -1
  140. package/dist/harness/n8nHooks.d.ts.map +1 -1
  141. package/dist/harness/n8nHooks.js +4 -1
  142. package/dist/harness/n8nHooks.js.map +1 -1
  143. package/dist/harness/openCodeHooks.d.ts +2 -2
  144. package/dist/harness/openCodeHooks.d.ts.map +1 -1
  145. package/dist/harness/openCodeHooks.js +9 -8
  146. package/dist/harness/openCodeHooks.js.map +1 -1
  147. package/dist/harness/openWebuiHooks.d.ts +0 -1
  148. package/dist/harness/openWebuiHooks.d.ts.map +1 -1
  149. package/dist/harness/openWebuiHooks.js +11 -3
  150. package/dist/harness/openWebuiHooks.js.map +1 -1
  151. package/dist/harness/openclawHooks.d.ts +75 -18
  152. package/dist/harness/openclawHooks.d.ts.map +1 -1
  153. package/dist/harness/openclawHooks.js +214 -160
  154. package/dist/harness/openclawHooks.js.map +1 -1
  155. package/dist/harness/openhandsHooks.d.ts +37 -11
  156. package/dist/harness/openhandsHooks.d.ts.map +1 -1
  157. package/dist/harness/openhandsHooks.js +148 -97
  158. package/dist/harness/openhandsHooks.js.map +1 -1
  159. package/dist/harness/piHooks.d.ts +52 -17
  160. package/dist/harness/piHooks.d.ts.map +1 -1
  161. package/dist/harness/piHooks.js +177 -163
  162. package/dist/harness/piHooks.js.map +1 -1
  163. package/dist/harness/protectedPaths.d.ts +107 -25
  164. package/dist/harness/protectedPaths.d.ts.map +1 -1
  165. package/dist/harness/protectedPaths.js +342 -48
  166. package/dist/harness/protectedPaths.js.map +1 -1
  167. package/dist/harness/rulesSection.d.ts +62 -0
  168. package/dist/harness/rulesSection.d.ts.map +1 -0
  169. package/dist/harness/rulesSection.js +145 -0
  170. package/dist/harness/rulesSection.js.map +1 -0
  171. package/dist/harness/windsurfHooks.d.ts +18 -3
  172. package/dist/harness/windsurfHooks.d.ts.map +1 -1
  173. package/dist/harness/windsurfHooks.js +41 -8
  174. package/dist/harness/windsurfHooks.js.map +1 -1
  175. package/dist/harness/windsurfJetBrainsProxy.d.ts +1 -1
  176. package/dist/harness/windsurfJetBrainsProxy.d.ts.map +1 -1
  177. package/dist/harness/windsurfJetBrainsProxy.js +5 -1
  178. package/dist/harness/windsurfJetBrainsProxy.js.map +1 -1
  179. package/dist/index.d.ts +21 -20
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +19 -19
  182. package/dist/index.js.map +1 -1
  183. package/dist/inventory.d.ts +53 -0
  184. package/dist/inventory.d.ts.map +1 -0
  185. package/dist/inventory.js +133 -0
  186. package/dist/inventory.js.map +1 -0
  187. package/dist/lib/complianceProbes.d.ts +2 -1
  188. package/dist/lib/complianceProbes.d.ts.map +1 -1
  189. package/dist/lib/complianceProbes.js +1 -1
  190. package/dist/lib/complianceProbes.js.map +1 -1
  191. package/dist/lib/decisionsDigest.d.ts +35 -17
  192. package/dist/lib/decisionsDigest.d.ts.map +1 -1
  193. package/dist/lib/decisionsDigest.js +106 -47
  194. package/dist/lib/decisionsDigest.js.map +1 -1
  195. package/dist/lib/egressPolicy.d.ts +2 -2
  196. package/dist/lib/egressPolicy.js +2 -2
  197. package/dist/lib/mcpRegistryPy.d.ts +11 -0
  198. package/dist/lib/mcpRegistryPy.d.ts.map +1 -0
  199. package/dist/lib/mcpRegistryPy.js +173 -0
  200. package/dist/lib/mcpRegistryPy.js.map +1 -0
  201. package/dist/lib/phrasesPy.d.ts +11 -0
  202. package/dist/lib/phrasesPy.d.ts.map +1 -0
  203. package/dist/lib/phrasesPy.js +351 -0
  204. package/dist/lib/phrasesPy.js.map +1 -0
  205. package/dist/lib/policySnapshot.d.ts +63 -9
  206. package/dist/lib/policySnapshot.d.ts.map +1 -1
  207. package/dist/lib/policySnapshot.js +269 -45
  208. package/dist/lib/policySnapshot.js.map +1 -1
  209. package/dist/lib/processPoller.d.ts.map +1 -1
  210. package/dist/lib/processPoller.js +9 -2
  211. package/dist/lib/processPoller.js.map +1 -1
  212. package/dist/lib/regexLinearity.d.ts +43 -0
  213. package/dist/lib/regexLinearity.d.ts.map +1 -0
  214. package/dist/lib/regexLinearity.js +275 -0
  215. package/dist/lib/regexLinearity.js.map +1 -0
  216. package/dist/lib/runtimeEnv.d.ts +1 -3
  217. package/dist/lib/runtimeEnv.d.ts.map +1 -1
  218. package/dist/lib/runtimeEnv.js +0 -2
  219. package/dist/lib/runtimeEnv.js.map +1 -1
  220. package/dist/lib/sequencePy.d.ts +10 -0
  221. package/dist/lib/sequencePy.d.ts.map +1 -0
  222. package/dist/lib/sequencePy.js +102 -0
  223. package/dist/lib/sequencePy.js.map +1 -0
  224. package/dist/sessionReporter.d.ts +18 -12
  225. package/dist/sessionReporter.d.ts.map +1 -1
  226. package/dist/sessionReporter.js +37 -24
  227. package/dist/sessionReporter.js.map +1 -1
  228. package/dist/skillWriter.d.ts +23 -5
  229. package/dist/skillWriter.d.ts.map +1 -1
  230. package/dist/skillWriter.js +159 -16
  231. package/dist/skillWriter.js.map +1 -1
  232. package/dist/syncCycle.d.ts +142 -0
  233. package/dist/syncCycle.d.ts.map +1 -0
  234. package/dist/syncCycle.js +327 -0
  235. package/dist/syncCycle.js.map +1 -0
  236. package/dist/trajectoryMonitor.d.ts +2 -4
  237. package/dist/trajectoryMonitor.d.ts.map +1 -1
  238. package/dist/trajectoryMonitor.js +2 -5
  239. package/dist/trajectoryMonitor.js.map +1 -1
  240. package/dist/watcher/driftWatcher.d.ts +0 -1
  241. package/dist/watcher/driftWatcher.d.ts.map +1 -1
  242. package/dist/watcher/driftWatcher.js +1 -2
  243. package/dist/watcher/driftWatcher.js.map +1 -1
  244. package/dist/watcher/settingsGuard.d.ts +36 -7
  245. package/dist/watcher/settingsGuard.d.ts.map +1 -1
  246. package/dist/watcher/settingsGuard.js +397 -60
  247. package/dist/watcher/settingsGuard.js.map +1 -1
  248. package/dist/watcher/vscodeHookSettings.d.ts +30 -0
  249. package/dist/watcher/vscodeHookSettings.d.ts.map +1 -0
  250. package/dist/watcher/vscodeHookSettings.js +170 -0
  251. package/dist/watcher/vscodeHookSettings.js.map +1 -0
  252. package/dist/wsClient.d.ts +0 -1
  253. package/dist/wsClient.d.ts.map +1 -1
  254. package/dist/wsClient.js +0 -1
  255. package/dist/wsClient.js.map +1 -1
  256. package/package.json +5 -5
  257. package/dist/harness/claudeDesktopHooks.d.ts +0 -30
  258. package/dist/harness/claudeDesktopHooks.d.ts.map +0 -1
  259. package/dist/harness/claudeDesktopHooks.js +0 -254
  260. package/dist/harness/claudeDesktopHooks.js.map +0 -1
  261. package/dist/harness/continueHooks.d.ts +0 -63
  262. package/dist/harness/continueHooks.d.ts.map +0 -1
  263. package/dist/harness/continueHooks.js +0 -247
  264. package/dist/harness/continueHooks.js.map +0 -1
  265. package/dist/harness/gateKind.d.ts +0 -164
  266. package/dist/harness/gateKind.d.ts.map +0 -1
  267. package/dist/harness/gateKind.js +0 -144
  268. package/dist/harness/gateKind.js.map +0 -1
  269. package/dist/harness/rooCodeHooks.d.ts +0 -31
  270. package/dist/harness/rooCodeHooks.d.ts.map +0 -1
  271. package/dist/harness/rooCodeHooks.js +0 -286
  272. package/dist/harness/rooCodeHooks.js.map +0 -1
  273. package/dist/hashReporter.d.ts +0 -33
  274. package/dist/hashReporter.d.ts.map +0 -1
  275. package/dist/hashReporter.js +0 -69
  276. package/dist/hashReporter.js.map +0 -1
  277. package/dist/integrityStore.d.ts +0 -35
  278. package/dist/integrityStore.d.ts.map +0 -1
  279. package/dist/integrityStore.js +0 -71
  280. package/dist/integrityStore.js.map +0 -1
  281. package/dist/lib/gitWorktrees.d.ts +0 -140
  282. package/dist/lib/gitWorktrees.d.ts.map +0 -1
  283. package/dist/lib/gitWorktrees.js +0 -191
  284. package/dist/lib/gitWorktrees.js.map +0 -1
  285. package/dist/syncLoop.d.ts +0 -172
  286. package/dist/syncLoop.d.ts.map +0 -1
  287. package/dist/syncLoop.js +0 -878
  288. package/dist/syncLoop.js.map +0 -1
@@ -1,54 +1,5 @@
1
- /**
2
- * The gate evaluator, emitted once per language instead of written thirteen
3
- * times.
4
- *
5
- * # Why this file exists
6
- *
7
- * Every harness writer used to hand-author its own copy of the decision logic
8
- * inside a TypeScript template literal. Four production defects came directly
9
- * out of that arrangement, and each one silently removed enforcement while every
10
- * test stayed green:
11
- *
12
- * - `claudeCodeHooks` emitted `...UNIVERSAL_PROTECTED_PATHS,` as *literal source
13
- * text* into a script that never imported it. Node threw `ReferenceError`
14
- * before the gate decided anything — and a Claude Code PreToolUse hook exiting
15
- * 1 is a hook *error*, not a block, so the call proceeded.
16
- * - `INTUITIC_` for `INTUTIC_`: the gate died on an unbound variable under
17
- * `set -u`, exiting 1 rather than 2 — again, not a block.
18
- * - Five bash writers wrote `\"` where `\\"` was needed. Bash ate the quotes,
19
- * the audit line stopped being parseable JSON, and `drainHookEvents` drops
20
- * malformed lines and then *wipes the log* on a successful drain. The record
21
- * of a block was destroyed rather than delayed.
22
- * - `gooseHooks`/`openhandsHooks` never extracted a command at all, so neither
23
- * had a shell-bypass guard — for their entire life.
24
- *
25
- * The common cause is not carelessness. It is that shell and JavaScript embedded
26
- * in a template literal have three levels of escaping and no compiler checking
27
- * any of them. Emitting from one place does not make the escaping easier; it
28
- * makes there be one of it, with one set of tests.
29
- *
30
- * # The contract with a writer
31
- *
32
- * # One editing hazard, since it bit four times
33
- *
34
- * A backtick inside a comment in an emitted body ends the TypeScript template
35
- * literal it lives in, and the rest of the gate becomes TypeScript. `tsc` does
36
- * catch it — but as a syntax error dozens of lines away, which reads as
37
- * unrelated damage. Use plain quotes in comments inside the emitted strings.
38
- *
39
- * A lint for this was tried and removed: a line-based scan cannot cheaply tell
40
- * a comment inside a template literal from one outside it, and it produced 26
41
- * false positives on this file's own prose. The compiler is the right detector;
42
- * this note is the right documentation.
43
- *
44
- * A writer supplies the harness-specific parts — how to read the tool call, how
45
- * to record an event, how to refuse — and interpolates the bodies below. See
46
- * {@link ShellGateOptions} and {@link JsGateOptions} for exactly what must be in
47
- * scope.
48
- *
49
- * @module
50
- */
51
1
  import { DESTRUCTIVE_COMMAND_PATTERNS, type GuardPattern } from './protectedPaths.js';
2
+ import { type HookGateHarness } from '@intutic/shared-types';
52
3
  /**
53
4
  * Bumped when the emitted evaluator changes shape.
54
5
  *
@@ -69,7 +20,7 @@ import { DESTRUCTIVE_COMMAND_PATTERNS, type GuardPattern } from './protectedPath
69
20
  *
70
21
  * v5: the residual fail-open edges were closed. Every bash gate now converts
71
22
  * an accidental crash (exit != 0 and != 2 under `set -euo pipefail`) into
72
- * exit 2 via {@link SHELL_FAIL_CLOSED}; every bash gate refuses a stdin
23
+ * exit 2 via {@link emitShellFailClosed}; every bash gate refuses a stdin
73
24
  * payload from which neither a tool name nor a tool_input could be extracted
74
25
  * (the envelope posture githubCopilotHooks established, now uniform); every
75
26
  * JS gate installs `uncaughtException`/`unhandledRejection` handlers as its
@@ -98,7 +49,7 @@ import { DESTRUCTIVE_COMMAND_PATTERNS, type GuardPattern } from './protectedPath
98
49
  * picks the fail-open reading of that ambiguity rather than blocking every
99
50
  * MCP call the first time a v6 gate meets an old snapshot).
100
51
  *
101
- * v8 (TD-474 item 4): the `hold` severity and the `action` subject. A hold
52
+ * v8: the `hold` severity and the `action` subject. A hold
102
53
  * rule — a `require_approval` SOP rule the control plane resolves, or a local
103
54
  * `review_before:` token the daemon compiles as `sop.local.review_before.*` —
104
55
  * refuses the call through the harness's own contract, appends the v1 hold
@@ -113,12 +64,142 @@ import { DESTRUCTIVE_COMMAND_PATTERNS, type GuardPattern } from './protectedPath
113
64
  * unrecognised severity to `flags`, i.e. ALLOWED, which is why the v8 filter
114
65
  * maps unknown to block and why the daemon regenerates every gate each cycle —
115
66
  * the skew window is one sync interval.
67
+ *
68
+ * v9: SSO-group refusals. The snapshot carries the workspace's
69
+ * `sso_group_policy` and the member it was issued to as an `@sso_groups` data
70
+ * line (two columns, so every rule parser skips it; inside the digest, so an
71
+ * edited group list fails the check), and the policy decided for that member
72
+ * as ordinary `sso_group.*` block rules on the tool subject. The one gate-side
73
+ * change: an invalid snapshot keeps its `sso_group.*` block rules instead of
74
+ * dropping them with the rest of the dynamic tier. A v8 gate reading a v9
75
+ * snapshot enforces the same rules and drops them on an invalid one.
76
+ *
77
+ * v10: the hold classifier matches each action needle's words with a gap
78
+ * regex (`SQL_GAP_ERE`, replaced in v12) between them, over the normalised command, instead of
79
+ * as a plain substring of the raw one. `DROP/**\/TABLE`, `DROP -- why` +
80
+ * newline + `TABLE`, an escaped `\n`, a line continuation and (in the JS
81
+ * gates, which read the raw command) a tab or a doubled space all dodged a
82
+ * `review_before: action:db_write` or `action:deploy` hold. Only the emitted
83
+ * classifier changed; the `.rules` format did not, so v9 and v10 gates read
84
+ * each other's snapshots — a v9 gate just holds fewer spellings.
85
+ *
86
+ * v11: the classifier reads every harness's shell tool ({@link
87
+ * ACTION_TOOL_NAMES}, now the proxy's `SHELL_TOOLS`, Gemini CLI's
88
+ * `run_shell_command` included) with the v10 matching. A v10 gate does not
89
+ * classify a command run through those extra tool names. The `.rules` format
90
+ * is unchanged.
91
+ *
92
+ * v12: no regex runs on a command to find words that may be split apart. The
93
+ * hold classifier and `phrase`-subject rules (`destructive.sql_drop`) use the
94
+ * linear phrase matcher (`@intutic/shared-types` phrases.ts, emitted as
95
+ * JavaScript; `phrases.py`, emitted as Python and run by the bash gates'
96
+ * extractor), over the raw command. The v10 regex took seconds on a few
97
+ * hundred kilobytes of `git -- git -- …` in the JS gates, and bash's pattern
98
+ * substitution a minute on a long run of backslashes. A v11 gate reading a v12
99
+ * snapshot reads a `phrase` rule's source — the phrases joined by `|` — as a
100
+ * regex over the command, which still matches their plain spellings.
101
+ *
102
+ * v13: no gate rule runs a backtracking regex on a call, and no gate runs
103
+ * past its own deadline. Rules shaped `A.*B` carry the `s` flag in the
104
+ * `.rules` flags column (`is` with `i`) and run as sequences of steps
105
+ * (`@intutic/shared-types` sequence.ts, `sequence.py`); `grep -E` still runs
106
+ * them as written. A call whose command is over `COMMAND_SIZE_LIMIT` bytes or
107
+ * whose arguments are over `ARGUMENTS_SIZE_LIMIT` is refused as
108
+ * `COMMAND_TOO_LARGE`, and a gate still deciding at its deadline refuses
109
+ * with `GATE_DEADLINE`, ahead of the harnesses that read a
110
+ * hook timeout as an allow. A v12 gate compares the flags column with `i`, so
111
+ * it runs a sequence rule as the regex it also is, case-sensitively.
112
+ *
113
+ * v14: the MCP server registry and refusal codes. The snapshot carries the
114
+ * workspace's registry decisions as an `@mcp_registry` data line (two
115
+ * columns, inside the digest), and the JS and bash gates refuse an
116
+ * `mcp__<server>__<tool>` call to a blocked or held server, to a server the
117
+ * workspace has not approved under `mcpDefaultPolicy: deny`, or to a disabled
118
+ * tool, with the MCP proxy's codes, rule ids and reasons
119
+ * (`evaluateMcpRegistry` in `@intutic/shared-types`). An invalid snapshot
120
+ * keeps the record but not its approvals, as it keeps the SSO-group refusals
121
+ * but not the member's groups. A JSON decision (Cline, Grok Build,
122
+ * Antigravity) now carries `code` and `ruleId` ({@link HOOK_REFUSAL_CODES}).
123
+ * The `.rules` rule format is unchanged; a v13 gate skips the record line as
124
+ * it skips `@sso_groups`, and enforces no registry.
125
+ *
126
+ * v15: the in-process gates (the `'throw'` contract: OpenCode's plugin, Pi's
127
+ * extension, OpenClaw's plugin) run their rules under the same deadline,
128
+ * measured from the start of the call rather than of the process, which
129
+ * started long before. Pi and OpenCode await a tool-call handler with no time
130
+ * limit, and OpenClaw's own hook timeout cannot interrupt synchronous code,
131
+ * so a v14 in-process gate on a slow ` WHERE ` pattern held the agent.
132
+ *
133
+ * v16: the MCP server allowlist moved inside the digest. It was a
134
+ * `#mcpservers` header, which the digest does not cover, so adding a server
135
+ * to it by hand widened the allowlist and left the snapshot valid. It is now
136
+ * an `@mcp_allowlist` data line (tag, severity, comma-joined servers; three
137
+ * columns, so every rule parser skips it), and a snapshot that fails its
138
+ * digest keeps the allowlist but admits no server and refuses at `block`,
139
+ * as it keeps the registry's refusals but not its approvals. The bash gates'
140
+ * registry decision is `intutic_clawde/gate/mcp_registry.py`, emitted
141
+ * verbatim. A v15 gate reading a v16 snapshot enforces no allowlist; the
142
+ * daemon regenerates every gate each sync cycle.
143
+ *
144
+ * v17: an unverified snapshot admits no MCP server. A snapshot whose digest
145
+ * is broken or missing, or that names another workspace, used to keep the
146
+ * registry's refusals and an allowlist that admitted nothing; but a deleted
147
+ * record looks exactly like one never set, and an edit to the registry's
148
+ * blocked list or default policy still widened it. Every gate now refuses
149
+ * every MCP call on such a snapshot as `POLICY_SNAPSHOT_UNVERIFIED`
150
+ * (`mcpSnapshotUnverifiedRefusal` in `@intutic/shared-types`), at `block`
151
+ * in an observe-only workspace too, and the sync daemon restores the last
152
+ * snapshot it verified. The JS and Python readers also read a snapshot with
153
+ * no `#digest` line as unverified, as the bash gates already did. And the
154
+ * compiled floor refuses an edit to a VS Code settings file that sets
155
+ * `chat.useHooks` or `chat.hookFilesLocations` (`HOOK_SETTING_PATTERNS`),
156
+ * which can switch off the GitHub Copilot gate. The `.rules` format is
157
+ * unchanged.
158
+ *
159
+ * v18: each gate's deadline is its own harness's: a second under the hook
160
+ * timeout that harness applies (`HOOK_GATE_TIMEOUTS` and `gateDeadlineMs` in
161
+ * `@intutic/shared-types`), at most 9 s. One 4 s deadline for every gate,
162
+ * sized for Grok Build's 5 s default (connect now writes 10 s), refused legitimate calls on a busy machine in
163
+ * harnesses that wait 10 s or more. The bash gates also screen each subject
164
+ * with one `grep` holding every rule's pattern before testing rule by rule,
165
+ * and take the whitespace-collapsed fields from the extractor as they are:
166
+ * a call at the size limit had forked a hundred `grep`s and spent seconds of
167
+ * a loaded machine before any rule could match. The `.rules` format is
168
+ * unchanged.
116
169
  */
117
- export declare const GATE_VERSION = 8;
170
+ export declare const GATE_VERSION = 18;
171
+ /**
172
+ * The refusal codes a hook gate's JSON decision carries, as `code` beside the
173
+ * deciding `ruleId` (null when no rule decided), for the harnesses that read
174
+ * a decision from stdout rather than an exit code: Cline (`cancel`), Grok
175
+ * Build and Antigravity (`decision: deny`). The exit-code harnesses read the
176
+ * same refusal as text on stderr, the rule id in brackets. Held to
177
+ * `packages/shared-types/fixtures/refusal-codes.json` (`hook`) by a test.
178
+ *
179
+ * - `BUILT_IN_RULE`: a rule compiled into the gate (a governance bypass, a
180
+ * write to a protected path or a skill directory, a secret in content);
181
+ * - `SNAPSHOT`: a block rule from the policy snapshot (an SOP, the
182
+ * destructive-command tier, a skill-content rule);
183
+ * - `SSO_GROUP`: an `sso_group.*` rule, compiled from the workspace's SSO
184
+ * group policy for this member;
185
+ * - `HELD`: a hold rule, with `holdId`;
186
+ * - `SERVER_BLOCKED`, `SERVER_HELD`, `SERVER_NOT_APPROVED`, `TOOL_DISABLED`:
187
+ * the MCP server registry;
188
+ * - `SERVER_NOT_ALLOWED`: the workspace's `mcpAllowedServers` list;
189
+ * - `POLICY_SNAPSHOT_UNVERIFIED`: an MCP call on a snapshot that failed its
190
+ * integrity check, which admits no MCP server;
191
+ * - `COMMAND_TOO_LARGE`: the call is over the size a gate evaluates;
192
+ * - `GATE_DEADLINE`: the gate did not decide within its harness's deadline
193
+ * (`gateDeadlineMs` in `@intutic/shared-types`);
194
+ * - `UNREADABLE_CALL`: the payload held no tool call the gate could read;
195
+ * - `GATE_CRASHED`: the gate failed while deciding.
196
+ */
197
+ export declare const HOOK_REFUSAL_CODES: readonly ["BUILT_IN_RULE", "SNAPSHOT", "SSO_GROUP", "HELD", "SERVER_BLOCKED", "SERVER_HELD", "SERVER_NOT_APPROVED", "TOOL_DISABLED", "SERVER_NOT_ALLOWED", "POLICY_SNAPSHOT_UNVERIFIED", "COMMAND_TOO_LARGE", "GATE_DEADLINE", "UNREADABLE_CALL", "GATE_CRASHED"];
118
198
  /**
119
199
  * The coarse command → action-token classification the hold tier keys on:
120
- * `review_before: action:deploy` holds a shell command that contains any of
121
- * the deploy needles. Deliberately minimal — a gate that tries to be clever
200
+ * `review_before: action:deploy` holds a shell command that contains one of
201
+ * the deploy needles, whatever separates its words (the phrase matcher,
202
+ * `@intutic/shared-types` phrases.ts). Deliberately minimal — a gate that tries to be clever
122
203
  * about shell commands is a gate that blocks real work — and it mirrors the
123
204
  * proxy's `actions.rs` in both directions: `hookActionParity.test.ts` reads
124
205
  * THIS file as text and fails if either side knows a needle the other does
@@ -126,8 +207,15 @@ export declare const GATE_VERSION = 8;
126
207
  * that is what the test's regex finds.
127
208
  */
128
209
  export declare const ACTION_NEEDLES: ReadonlyArray<readonly [string, readonly string[]]>;
129
- /** The (lower-cased) tool names whose `command` the classifier reads. */
130
- export declare const ACTION_TOOL_NAMES: readonly ["bash", "shell", "run_command", "terminal", "execute"];
210
+ /**
211
+ * The (lower-cased) tool names whose `command` the classifier reads: every
212
+ * harness's shell tool. The same list as the proxy's `SHELL_TOOLS` in
213
+ * `actions.rs` (`hookActionParity.test.ts` holds them equal), so a hold the
214
+ * proxy would classify is one the gate can hold before the call runs.
215
+ * `run_shell_command` is Gemini CLI's, `run_command` Antigravity's and
216
+ * `execute_command` Cline's.
217
+ */
218
+ export declare const ACTION_TOOL_NAMES: readonly ["bash", "shell", "run_command", "runcommand", "execute_command", "run_shell_command", "terminal", "execute", "exec"];
131
219
  /** Where a gate appends a hold, relative to the workspace root; the daemon's
132
220
  * `drainReviewRequests` reads the same file. */
133
221
  export declare const REVIEW_REQUESTS_BASENAME = "review-requests.jsonl";
@@ -135,6 +223,26 @@ export declare const REVIEW_REQUESTS_LOG = ".intutic/events/review-requests.json
135
223
  /** Bumped when a hold record's shape changes; the control plane drops any
136
224
  * other version at ingest. */
137
225
  export declare const REVIEW_REQUEST_VERSION = 1;
226
+ /**
227
+ * The Python the bash gates run, defined once per gate script: the phrase
228
+ * matcher ({@link PHRASES_PY_SOURCE}), the MCP registry decision
229
+ * ({@link MCP_REGISTRY_PY_SOURCE}) and four entry points over them.
230
+ *
231
+ * - `intutic_actions(tool, command)` — the hold classifier, called by
232
+ * {@link SHELL_EXTRACT}'s Python, which already reads the raw tool input:
233
+ * space-padded action tokens (" action:deploy ") or " ".
234
+ * - `intutic_phrase_rule(source, command)` — a `phrase`-subject rule: its
235
+ * source is `|`-separated phrases, each matched as words with boundaries.
236
+ * - `intutic_mcp_registry(record_b64, tool)` — the `@mcp_registry` record's
237
+ * decision on an MCP call.
238
+ * - `intutic_mcp_unverified(tool)` — the refusal of an MCP call on a
239
+ * snapshot that failed its integrity check.
240
+ *
241
+ * The classifier used to be `grep -E` with a gap regex over the normalised
242
+ * command, and bash's own pattern substitution on it took a minute on a long
243
+ * run of backslashes. Python is already required by every bash gate.
244
+ */
245
+ export declare const GATE_PY_LIB: string;
138
246
  /**
139
247
  * How old a snapshot may be before a gate reports it as stale.
140
248
  *
@@ -149,21 +257,23 @@ export declare const SNAPSHOT_STALE_AFTER_DAYS = 7;
149
257
  *
150
258
  * The three values are not stylistic. Claude Code, Cursor and the bash
151
259
  * harnesses read the **exit code** (2 = deny; 1 is an error and lets the call
152
- * through). Cline and Roo Code ignore the exit code and read a `{"cancel":
153
- * true}` object on stdout. Grok Build ALSO ignores the exit code, but its
260
+ * through). Cline ignores the exit code and reads a `{"cancel": true}`
261
+ * object on stdout. Grok Build ALSO ignores the exit code, but its
154
262
  * confirmed verdict shape is a *different* stdout object —
155
263
  * `{"decision":"deny","reason":"..."}` — not `{"cancel":true}`. The two
156
264
  * stdout contracts are kept as distinct union members rather than folded into
157
265
  * one "stdout-cancel" bucket precisely because a gate that emits the wrong
158
266
  * field name looks identical in a code review and enforces nothing: Grok
159
- * Build does not recognise `cancel`, and Cline/Roo Code do not recognise
267
+ * Build does not recognise `cancel`, and Cline does not recognise
160
268
  * `decision`. A gate that uses the wrong one is silently inert.
161
269
  */
162
270
  /**
163
271
  * `'throw'` is for a gate that runs INSIDE the harness process (OpenCode's
164
- * plugin hook): the refusal is a thrown Error carrying the BLOCKED message,
165
- * which the host turns into the tool-error the model reads. No exit code, no
166
- * stdout — the same in-process posture the n8n workflow gate takes.
272
+ * plugin hook, Pi's extension, OpenClaw's plugin): the refusal is a thrown
273
+ * Error carrying the BLOCKED message. OpenCode turns it into the tool-error
274
+ * the model reads; the Pi and OpenClaw handlers catch it and return their
275
+ * host's block result. No exit code, no stdout — the same in-process posture
276
+ * the n8n workflow gate takes.
167
277
  */
168
278
  export type BlockContract = 'exit2' | 'stdout-cancel' | 'stdout-decision-deny' | 'throw';
169
279
  /**
@@ -240,11 +350,14 @@ export declare function toRulesLine(p: GuardPattern): string;
240
350
  * defined by the writer AFTER this prelude, so the trap probes for it before
241
351
  * calling: a crash earlier than the definition still blocks, just without an
242
352
  * audit line (stderr carries the reason either way).
353
+ *
354
+ * It also starts the gate's deadline, which is the harness's own
355
+ * ({@link gateDeadlineMs}).
243
356
  */
244
- export declare const SHELL_FAIL_CLOSED = "\n# \u2500\u2500 Intutic fail-closed prelude v8 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n# Any exit status other than the two deliberate verdicts (0 = allow, 2 = block)\n# means this gate crashed rather than decided. The harness would read exit 1 as\n# \"hook errored\" and run the tool anyway, so a crash is converted into a block.\n# EXIT rather than ERR: ERR is unreliable across shells for set -u deaths, and\n# it fires on benign non-zero intermediates; the final status cannot lie.\nintutic_fail_closed() {\n _intutic_exit_rc=$?\n # The trap must not itself die on an unset variable or a failed command \u2014\n # that would replace the exit status it exists to correct.\n set +eu\n trap - EXIT\n if [ \"$_intutic_exit_rc\" = \"0\" ] || [ \"$_intutic_exit_rc\" = \"2\" ]; then\n exit \"$_intutic_exit_rc\"\n fi\n echo \"[Intutic Governance] BLOCKED: gate crashed (exit ${_intutic_exit_rc}) \u2014 failing closed rather than allowing an unevaluated call.\" >&2\n if command -v log_event >/dev/null 2>&1; then\n log_event \"tool_blocked\" \"${TOOL:-unknown}\" \"gate crashed (exit ${_intutic_exit_rc}) \u2014 failing closed\" || true\n fi\n exit 2\n}\ntrap intutic_fail_closed EXIT\n";
357
+ export declare function emitShellFailClosed(harness: HookGateHarness): string;
245
358
  export interface ShellGateOptions {
246
359
  /** Harness id, as it appears in audit lines. */
247
- harness: string;
360
+ harness: HookGateHarness;
248
361
  /**
249
362
  * Name of the shell function the writer defined to record an event.
250
363
  * Called as `<fn> <verdict> <tool> <reason>`.
@@ -258,11 +371,24 @@ export interface ShellGateOptions {
258
371
  */
259
372
  reviewRequestFile?: string;
260
373
  }
374
+ /**
375
+ * The JS classifier, `intuticActions(toolName, command)`. Needs
376
+ * `intuticNormalise` in scope. Exported for the classifier's tests.
377
+ */
378
+ export declare function emitJsActionClassifier(): string;
261
379
  export declare function emitShellGate(opts: ShellGateOptions): string;
262
380
  export interface JsGateOptions {
263
- harness: string;
381
+ /** Harness id, as it appears in audit lines; it also picks the gate's deadline. */
382
+ harness: HookGateHarness;
264
383
  /** How this harness refuses. */
265
384
  contract: BlockContract;
385
+ /**
386
+ * The harness's decision object may carry only the fields it documents
387
+ * (Google Antigravity), so a refusal names its code in the reason text,
388
+ * `(refusal code SERVER_BLOCKED)`, rather than in `code` and `ruleId`
389
+ * fields. The rule id is already in the reason, in brackets.
390
+ */
391
+ documentedFieldsOnly?: boolean;
266
392
  /** See {@link ShellGateOptions.reviewRequestFile}. Writers whose artifact
267
393
  * does not live in `.intutic/hooks/` (cline, opencode) pass it. */
268
394
  reviewRequestFile?: string;
@@ -277,7 +403,7 @@ export interface JsGateOptions {
277
403
  */
278
404
  export declare function emitJsGate(opts: JsGateOptions): string;
279
405
  /**
280
- * Pre-image capture — the storage half of the rollback enforcement rung (TD-328).
406
+ * Pre-image capture — the storage half of the rollback enforcement rung.
281
407
  *
282
408
  * ## Why this exists and why it is here
283
409
  *
@@ -337,7 +463,7 @@ export declare function emitPreImageCapture(): string;
337
463
  * every emitted gate for real.
338
464
  *
339
465
  * Refuses through the harness's contract, like everything else: exit 2 means
340
- * nothing to cline or roo-code, whose harnesses only read stdout — a crashed
466
+ * nothing to cline, which only reads stdout — a crashed
341
467
  * stdout-cancel gate must still print its cancel object.
342
468
  */
343
469
  export declare function emitJsFailClosedPrelude(opts: JsGateOptions): string;
@@ -355,7 +481,7 @@ export declare function emitJsFailClosedPrelude(opts: JsGateOptions): string;
355
481
  * allow — was a silent hole. The message names the fix, because a developer who
356
482
  * hits this needs to act on it rather than file a bug.
357
483
  */
358
- export declare const SHELL_EXTRACT = "\nif ! command -v python3 >/dev/null 2>&1; then\n echo \"[Intutic Governance] BLOCKED: python3 is required to evaluate tool calls and was not found on PATH.\" >&2\n echo \"[Intutic Governance] Install python3, or unset the Intutic hooks to run ungoverned.\" >&2\n exit 2\nfi\n\nINTUTIC_FIELDS=\"$(printf '%s' \"$INPUT\" | python3 -c '\nimport sys, json\ndef clean(v):\n return \" \".join(str(v).split()) if isinstance(v, str) else \"\"\nstate = \"ok\"\ntry:\n d = json.load(sys.stdin)\nexcept Exception:\n d = {}\n state = \"malformed\"\nif not isinstance(d, dict):\n d = {}\n state = \"malformed\"\n# The envelope check githubCopilotHooks established, applied to the bash\n# family: a payload carrying none of the tool fields in any known spelling is\n# one the gate cannot evaluate, and extracting empty fields from it would\n# match no rule \u2014 an allow. Reported as a STATE and decided in the gate body,\n# because log_event is not defined yet at extraction time.\nif state == \"ok\" and not any(\n k in d for k in (\"tool_name\", \"toolName\", \"tool_input\", \"toolInput\")\n):\n state = \"malformed\"\ni = d.get(\"tool_input\") or {}\nif not isinstance(i, dict):\n i = {}\ndef first(*keys):\n for k in keys:\n v = i.get(k)\n if isinstance(v, str) and v:\n return clean(v)\n return \"\"\n# The state line comes FIRST: the lines after it may legitimately be empty,\n# and command substitution strips trailing newlines, so the last line is the\n# only position an empty value cannot survive in.\nprint(state)\nprint(clean(d.get(\"tool_name\", \"\")))\nprint(first(\"path\", \"file_path\", \"notebook_path\", \"filePath\"))\nprint(first(\"command\", \"cmd\", \"script\", \"shell_command\"))\nprint(clean(d.get(\"session_id\", d.get(\"sessionId\", \"\"))))\n# The FULL tool_input, serialized to the exact shape argPattern rules are\n# matched against everywhere: JSON.stringify(tool_input) \u2014 compact separators,\n# insertion order, non-ASCII intact. The selected fields above are whitespace-\n# collapsed for token matching; this one must NOT be, or a WHERE clause that\n# spans a key/value boundary matches here and not in the JS gates. json.dumps\n# escapes every newline, so it is still exactly one line to read back.\nprint(json.dumps(i, separators=(\",\", \":\"), ensure_ascii=False))\n' 2>/dev/null || printf '\\n\\n\\n\\n\\n\\n')\"\n\n# Each read is `|| true` because command substitution strips trailing newlines:\n# a tool call with no command argument yields fewer lines than reads, so a late\n# read hits EOF and returns non-zero. Under `set -e` that killed the gate with\n# **exit 1** \u2014 which every harness reads as a hook error and lets the call\n# through. A guard that fails open on the most ordinary input there is (a Write\n# with no shell command) is worse than no guard, because it looks present.\n{ IFS= read -r INTUTIC_EXTRACT_STATE || true; IFS= read -r TOOL || true; IFS= read -r TARGET || true; IFS= read -r COMMAND || true; IFS= read -r SESSION_ID || true; IFS= read -r TOOL_INPUT_JSON || true; } <<EOF_INTUTIC_FIELDS\n$INTUTIC_FIELDS\nEOF_INTUTIC_FIELDS\nTOOL=\"${TOOL:-}\"; TARGET=\"${TARGET:-}\"; COMMAND=\"${COMMAND:-}\"; SESSION_ID=\"${SESSION_ID:-}\"\n# Empty means the extractor itself died (the fallback printf above): treat it\n# exactly like a payload the parser rejected. The gate body refuses on any\n# value other than \"ok\" \u2014 see the envelope refusal in emitShellGate.\nINTUTIC_EXTRACT_STATE=\"${INTUTIC_EXTRACT_STATE:-}\"\n[ -n \"$INTUTIC_EXTRACT_STATE\" ] || INTUTIC_EXTRACT_STATE=\"malformed\"\n# Empty only when the extractor failed wholesale (malformed stdin). Defaulting\n# to the empty OBJECT rather than the empty string keeps the argPattern match\n# well-defined either way.\nTOOL_INPUT_JSON=\"${TOOL_INPUT_JSON:-}\"\n[ -n \"$TOOL_INPUT_JSON\" ] || TOOL_INPUT_JSON=\"{}\"\n# Aliases for the names the older writers used. Kept so this extractor is a\n# drop-in for every bash gate; the canonical names are the unsuffixed ones.\nTOOL_NAME=\"$TOOL\"; TARGET_PATH=\"$TARGET\"\n";
484
+ export declare const SHELL_EXTRACT: string;
359
485
  /**
360
486
  * The Python gate, for Open WebUI.
361
487
  *
@@ -1 +1 @@
1
- {"version":3,"file":"gateBody.d.ts","sourceRoot":"","sources":["../../src/harness/gateBody.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,EACL,4BAA4B,EAG5B,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAA;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAK9E,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,kEAAmE,CAAA;AAEjG;iDACiD;AACjD,eAAO,MAAM,wBAAwB,0BAA0B,CAAA;AAC/D,eAAO,MAAM,mBAAmB,0CAAgD,CAAA;AAChF;+BAC+B;AAC/B,eAAO,MAAM,sBAAsB,IAAI,CAAA;AAkBvC;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C;;;;;;;;;;;;;;GAcG;AACH;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,eAAe,GAAG,sBAAsB,GAAG,OAAO,CAAA;AAmCxF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,aAAa,sFAAuF,CAAA;AAEjH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAMnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,iBAAiB,g0CAuB7B,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AA6ID,wBAAgB,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CA6Y5D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,gCAAgC;IAChC,QAAQ,EAAE,aAAa,CAAA;IACvB;wEACoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAiGD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAmPtD;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CA8H5C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAgCnE;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,4gIA8EzB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAyHvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAuJ5C;AAED;mEACmE;AACnE,OAAO,EAAE,4BAA4B,EAAE,CAAA"}
1
+ {"version":3,"file":"gateBody.d.ts","sourceRoot":"","sources":["../../src/harness/gateBody.ts"],"names":[],"mappings":"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"}