@intutic/sync-daemon 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/agentReporter.d.ts +5 -12
  2. package/dist/agentReporter.d.ts.map +1 -1
  3. package/dist/agentReporter.js +25 -4
  4. package/dist/agentReporter.js.map +1 -1
  5. package/dist/configReader.d.ts +44 -22
  6. package/dist/configReader.d.ts.map +1 -1
  7. package/dist/configReader.js +70 -44
  8. package/dist/configReader.js.map +1 -1
  9. package/dist/configWriter.d.ts +29 -41
  10. package/dist/configWriter.d.ts.map +1 -1
  11. package/dist/configWriter.js +28 -625
  12. package/dist/configWriter.js.map +1 -1
  13. package/dist/disconnect/harnesses.d.ts +31 -0
  14. package/dist/disconnect/harnesses.d.ts.map +1 -0
  15. package/dist/disconnect/harnesses.js +728 -0
  16. package/dist/disconnect/harnesses.js.map +1 -0
  17. package/dist/disconnect/index.d.ts +25 -0
  18. package/dist/disconnect/index.d.ts.map +1 -0
  19. package/dist/disconnect/index.js +82 -0
  20. package/dist/disconnect/index.js.map +1 -0
  21. package/dist/disconnect/mcp.d.ts +60 -0
  22. package/dist/disconnect/mcp.d.ts.map +1 -0
  23. package/dist/disconnect/mcp.js +283 -0
  24. package/dist/disconnect/mcp.js.map +1 -0
  25. package/dist/disconnect/originals.d.ts +88 -0
  26. package/dist/disconnect/originals.d.ts.map +1 -0
  27. package/dist/disconnect/originals.js +257 -0
  28. package/dist/disconnect/originals.js.map +1 -0
  29. package/dist/disconnect/plan.d.ts +175 -0
  30. package/dist/disconnect/plan.d.ts.map +1 -0
  31. package/dist/disconnect/plan.js +580 -0
  32. package/dist/disconnect/plan.js.map +1 -0
  33. package/dist/disconnect/recognise.d.ts +43 -0
  34. package/dist/disconnect/recognise.d.ts.map +1 -0
  35. package/dist/disconnect/recognise.js +98 -0
  36. package/dist/disconnect/recognise.js.map +1 -0
  37. package/dist/disconnect/tomlLines.d.ts +39 -0
  38. package/dist/disconnect/tomlLines.d.ts.map +1 -0
  39. package/dist/disconnect/tomlLines.js +105 -0
  40. package/dist/disconnect/tomlLines.js.map +1 -0
  41. package/dist/harness/aiderConfigMerger.d.ts +42 -5
  42. package/dist/harness/aiderConfigMerger.d.ts.map +1 -1
  43. package/dist/harness/aiderConfigMerger.js +113 -86
  44. package/dist/harness/aiderConfigMerger.js.map +1 -1
  45. package/dist/harness/antigravityHooks.d.ts +13 -8
  46. package/dist/harness/antigravityHooks.d.ts.map +1 -1
  47. package/dist/harness/antigravityHooks.js +53 -39
  48. package/dist/harness/antigravityHooks.js.map +1 -1
  49. package/dist/harness/claudeCodeHooks.d.ts +1 -2
  50. package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
  51. package/dist/harness/claudeCodeHooks.js +61 -34
  52. package/dist/harness/claudeCodeHooks.js.map +1 -1
  53. package/dist/harness/claudeDesktopHooks.d.ts +3 -0
  54. package/dist/harness/claudeDesktopHooks.d.ts.map +1 -1
  55. package/dist/harness/claudeDesktopHooks.js +3 -1
  56. package/dist/harness/claudeDesktopHooks.js.map +1 -1
  57. package/dist/harness/claudeProjectApproval.d.ts +53 -0
  58. package/dist/harness/claudeProjectApproval.d.ts.map +1 -0
  59. package/dist/harness/claudeProjectApproval.js +159 -0
  60. package/dist/harness/claudeProjectApproval.js.map +1 -0
  61. package/dist/harness/clineHooks.d.ts +39 -9
  62. package/dist/harness/clineHooks.d.ts.map +1 -1
  63. package/dist/harness/clineHooks.js +142 -60
  64. package/dist/harness/clineHooks.js.map +1 -1
  65. package/dist/harness/codexConfigMerger.d.ts +38 -0
  66. package/dist/harness/codexConfigMerger.d.ts.map +1 -0
  67. package/dist/harness/codexConfigMerger.js +105 -0
  68. package/dist/harness/codexConfigMerger.js.map +1 -0
  69. package/dist/harness/codexHooks.d.ts +4 -2
  70. package/dist/harness/codexHooks.d.ts.map +1 -1
  71. package/dist/harness/codexHooks.js +14 -11
  72. package/dist/harness/codexHooks.js.map +1 -1
  73. package/dist/harness/continueConfigMerger.d.ts +46 -0
  74. package/dist/harness/continueConfigMerger.d.ts.map +1 -0
  75. package/dist/harness/continueConfigMerger.js +94 -0
  76. package/dist/harness/continueConfigMerger.js.map +1 -0
  77. package/dist/harness/continueHooks.d.ts +15 -25
  78. package/dist/harness/continueHooks.d.ts.map +1 -1
  79. package/dist/harness/continueHooks.js +25 -119
  80. package/dist/harness/continueHooks.js.map +1 -1
  81. package/dist/harness/cursorHooks.d.ts +33 -16
  82. package/dist/harness/cursorHooks.d.ts.map +1 -1
  83. package/dist/harness/cursorHooks.js +69 -25
  84. package/dist/harness/cursorHooks.js.map +1 -1
  85. package/dist/harness/dshHooks.d.ts +59 -52
  86. package/dist/harness/dshHooks.d.ts.map +1 -1
  87. package/dist/harness/dshHooks.js +152 -147
  88. package/dist/harness/dshHooks.js.map +1 -1
  89. package/dist/harness/gateBody.d.ts +11 -2
  90. package/dist/harness/gateBody.d.ts.map +1 -1
  91. package/dist/harness/gateBody.js +33 -6
  92. package/dist/harness/gateBody.js.map +1 -1
  93. package/dist/harness/gateKind.d.ts.map +1 -1
  94. package/dist/harness/gateKind.js +1 -0
  95. package/dist/harness/gateKind.js.map +1 -1
  96. package/dist/harness/githubCopilotHooks.d.ts.map +1 -1
  97. package/dist/harness/githubCopilotHooks.js +5 -10
  98. package/dist/harness/githubCopilotHooks.js.map +1 -1
  99. package/dist/harness/gooseHooks.d.ts +15 -0
  100. package/dist/harness/gooseHooks.d.ts.map +1 -1
  101. package/dist/harness/gooseHooks.js +55 -43
  102. package/dist/harness/gooseHooks.js.map +1 -1
  103. package/dist/harness/grokHooks.d.ts.map +1 -1
  104. package/dist/harness/grokHooks.js +14 -12
  105. package/dist/harness/grokHooks.js.map +1 -1
  106. package/dist/harness/hermesHooks.d.ts +9 -0
  107. package/dist/harness/hermesHooks.d.ts.map +1 -1
  108. package/dist/harness/hermesHooks.js +39 -33
  109. package/dist/harness/hermesHooks.js.map +1 -1
  110. package/dist/harness/holdRedaction.d.ts +4 -1
  111. package/dist/harness/holdRedaction.d.ts.map +1 -1
  112. package/dist/harness/holdRedaction.js +32 -8
  113. package/dist/harness/holdRedaction.js.map +1 -1
  114. package/dist/harness/jetbrainsXmlConfig.d.ts +20 -0
  115. package/dist/harness/jetbrainsXmlConfig.d.ts.map +1 -1
  116. package/dist/harness/jetbrainsXmlConfig.js +39 -18
  117. package/dist/harness/jetbrainsXmlConfig.js.map +1 -1
  118. package/dist/harness/jsonMergeTarget.d.ts +23 -0
  119. package/dist/harness/jsonMergeTarget.d.ts.map +1 -0
  120. package/dist/harness/jsonMergeTarget.js +50 -0
  121. package/dist/harness/jsonMergeTarget.js.map +1 -0
  122. package/dist/harness/mcpAutoWrite.d.ts +64 -20
  123. package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
  124. package/dist/harness/mcpAutoWrite.js +429 -85
  125. package/dist/harness/mcpAutoWrite.js.map +1 -1
  126. package/dist/harness/museHooks.d.ts.map +1 -1
  127. package/dist/harness/museHooks.js +6 -2
  128. package/dist/harness/museHooks.js.map +1 -1
  129. package/dist/harness/n8nHooks.d.ts.map +1 -1
  130. package/dist/harness/n8nHooks.js +6 -7
  131. package/dist/harness/n8nHooks.js.map +1 -1
  132. package/dist/harness/openCodeHooks.d.ts +37 -6
  133. package/dist/harness/openCodeHooks.d.ts.map +1 -1
  134. package/dist/harness/openCodeHooks.js +103 -13
  135. package/dist/harness/openCodeHooks.js.map +1 -1
  136. package/dist/harness/openWebuiHooks.d.ts.map +1 -1
  137. package/dist/harness/openWebuiHooks.js +10 -5
  138. package/dist/harness/openWebuiHooks.js.map +1 -1
  139. package/dist/harness/openclawHooks.d.ts +5 -0
  140. package/dist/harness/openclawHooks.d.ts.map +1 -1
  141. package/dist/harness/openclawHooks.js +3 -1
  142. package/dist/harness/openclawHooks.js.map +1 -1
  143. package/dist/harness/openhandsHooks.d.ts +26 -1
  144. package/dist/harness/openhandsHooks.d.ts.map +1 -1
  145. package/dist/harness/openhandsHooks.js +160 -40
  146. package/dist/harness/openhandsHooks.js.map +1 -1
  147. package/dist/harness/piHooks.d.ts +17 -0
  148. package/dist/harness/piHooks.d.ts.map +1 -1
  149. package/dist/harness/piHooks.js +31 -29
  150. package/dist/harness/piHooks.js.map +1 -1
  151. package/dist/harness/protectedPaths.d.ts +64 -6
  152. package/dist/harness/protectedPaths.d.ts.map +1 -1
  153. package/dist/harness/protectedPaths.js +161 -11
  154. package/dist/harness/protectedPaths.js.map +1 -1
  155. package/dist/harness/rooCodeHooks.d.ts.map +1 -1
  156. package/dist/harness/rooCodeHooks.js +5 -10
  157. package/dist/harness/rooCodeHooks.js.map +1 -1
  158. package/dist/harness/windsurfHooks.d.ts +21 -3
  159. package/dist/harness/windsurfHooks.d.ts.map +1 -1
  160. package/dist/harness/windsurfHooks.js +96 -44
  161. package/dist/harness/windsurfHooks.js.map +1 -1
  162. package/dist/harness/windsurfJetBrainsProxy.d.ts +10 -7
  163. package/dist/harness/windsurfJetBrainsProxy.d.ts.map +1 -1
  164. package/dist/harness/windsurfJetBrainsProxy.js +22 -7
  165. package/dist/harness/windsurfJetBrainsProxy.js.map +1 -1
  166. package/dist/index.d.ts +12 -12
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +11 -10
  169. package/dist/index.js.map +1 -1
  170. package/dist/lib/decisionsDigest.d.ts +1 -1
  171. package/dist/lib/decisionsDigest.js +1 -1
  172. package/dist/lib/policySnapshot.d.ts +37 -0
  173. package/dist/lib/policySnapshot.d.ts.map +1 -1
  174. package/dist/lib/policySnapshot.js +170 -8
  175. package/dist/lib/policySnapshot.js.map +1 -1
  176. package/dist/sessionReporter.d.ts +2 -2
  177. package/dist/sessionReporter.js +2 -2
  178. package/dist/syncCycle.d.ts +142 -0
  179. package/dist/syncCycle.d.ts.map +1 -0
  180. package/dist/syncCycle.js +315 -0
  181. package/dist/syncCycle.js.map +1 -0
  182. package/dist/trajectoryMonitor.d.ts +1 -1
  183. package/dist/trajectoryMonitor.d.ts.map +1 -1
  184. package/dist/trajectoryMonitor.js +1 -1
  185. package/dist/trajectoryMonitor.js.map +1 -1
  186. package/dist/watcher/settingsGuard.d.ts +4 -1
  187. package/dist/watcher/settingsGuard.d.ts.map +1 -1
  188. package/dist/watcher/settingsGuard.js +42 -18
  189. package/dist/watcher/settingsGuard.js.map +1 -1
  190. package/package.json +6 -6
  191. package/dist/hashReporter.d.ts +0 -33
  192. package/dist/hashReporter.d.ts.map +0 -1
  193. package/dist/hashReporter.js +0 -69
  194. package/dist/hashReporter.js.map +0 -1
  195. package/dist/integrityStore.d.ts +0 -35
  196. package/dist/integrityStore.d.ts.map +0 -1
  197. package/dist/integrityStore.js +0 -71
  198. package/dist/integrityStore.js.map +0 -1
  199. package/dist/lib/gitWorktrees.d.ts +0 -140
  200. package/dist/lib/gitWorktrees.d.ts.map +0 -1
  201. package/dist/lib/gitWorktrees.js +0 -191
  202. package/dist/lib/gitWorktrees.js.map +0 -1
  203. package/dist/syncLoop.d.ts +0 -172
  204. package/dist/syncLoop.d.ts.map +0 -1
  205. package/dist/syncLoop.js +0 -878
  206. package/dist/syncLoop.js.map +0 -1
@@ -0,0 +1,315 @@
1
+ /**
2
+ * syncCycle.ts — the per-cycle work `intutic connect` runs against the
3
+ * control plane.
4
+ *
5
+ * `intutic connect` (tools/cli/src/commands/connect.ts) owns the loop: it
6
+ * polls the control plane, listens for pushed config over the WebSocket, and
7
+ * on each cycle calls the helpers below. They live here, not in the CLI, so
8
+ * they can be tested without starting a daemon and so the gate-side caches
9
+ * are refreshed by exactly one implementation.
10
+ *
11
+ * This module used to also hold a second, complete loop (`startSyncLoop`)
12
+ * that nothing started; the service has always run `connect`. The behaviours
13
+ * only that loop had and the docs promise (SkillOpt edits, skill findings,
14
+ * the decisions log, the bundled rule-author skill) are the helpers below and
15
+ * run from `connect` now, as does its config capture (configReader.ts), which
16
+ * uploads file content only when the workspace turned that on.
17
+ *
18
+ * @module
19
+ */
20
+ import * as crypto from 'node:crypto';
21
+ import * as path from 'node:path';
22
+ import * as fs from 'node:fs';
23
+ import * as os from 'node:os';
24
+ import { newIso } from '@intutic/id';
25
+ import { deriveEnforcementInputs } from '@intutic/shared-types';
26
+ import { applyConfigEdits, loadLocalSopEntries } from './configWriter.js';
27
+ import { parseSopConstraints } from './harness/claudeCodeHooks.js';
28
+ import { refreshPolicySnapshot } from './lib/policySnapshot.js';
29
+ import { refreshApprovedBypasses } from './lib/approvedBypasses.js';
30
+ import { refreshEgressPolicy } from './lib/egressPolicy.js';
31
+ import { collectAgentReport, reportAgent } from './agentReporter.js';
32
+ import { startHarnessSession } from './sessionReporter.js';
33
+ /** Narrow an unknown thrown value to a printable message. */
34
+ function errorMessage(err) {
35
+ return err instanceof Error ? err.message : String(err);
36
+ }
37
+ /**
38
+ * Turns a non-clean `scanSkillContent` result — already computed as part of
39
+ * `collectAgentReport`'s `facets.skills` — into a `skill_flagged` hook event.
40
+ *
41
+ * Deliberately reuses the report the daemon already built for this cycle
42
+ * rather than re-scanning: `agentReporter.ts`'s `collectSkills` runs
43
+ * `scanSkillContent` on every `.agents/skills/**\/SKILL.md` as part of
44
+ * building `facets.skills` already, so this only turns a result the daemon
45
+ * already has into a visible signal — it does not add a second scan pass.
46
+ *
47
+ * Appends directly to `.intutic/events/hook-events.jsonl`, the SAME file
48
+ * every emitted PreToolUse gate's `log_event`/`logEvent` writes to — not a
49
+ * new event pipeline. `drainHookEvents` (`claudeCodeHooks.ts`) picks this
50
+ * line up on its next pass exactly like a gate-written one, because it only
51
+ * ever reads the file; it does not care who appended a given line.
52
+ *
53
+ * Report-only, per `scanSkillContent`'s own doc comment on the unmeasured
54
+ * false-positive rate against real, benign skill markdown: this NEVER
55
+ * blocks, mutates, or removes a skill. `hookEvents.ts`'s
56
+ * `HookEventSchema.event` enum (control plane) counts `skill_flagged`
57
+ * exactly like `tool_flagged` — advisory telemetry, not an incident.
58
+ *
59
+ * A failure to append is caught and warned, never thrown: a governance
60
+ * telemetry write must not be able to abort the sync cycle it rides in on.
61
+ */
62
+ export function emitSkillFlaggedEvents(opts) {
63
+ const eventsLog = path.join(opts.workspaceRoot, '.intutic', 'events', 'hook-events.jsonl');
64
+ for (const skill of opts.skills) {
65
+ if (!skill.scanned || skill.clean)
66
+ continue;
67
+ const key = `${skill.source}:${skill.name}`;
68
+ if (opts.alreadyEmitted.has(key))
69
+ continue;
70
+ opts.alreadyEmitted.add(key);
71
+ try {
72
+ const ts = newIso();
73
+ const entry = JSON.stringify({
74
+ event: 'skill_flagged',
75
+ toolName: `skill:${skill.name}`,
76
+ reason: `scanSkillContent found ${skill.findingsCount} finding(s) in ` +
77
+ `${skill.source}/${skill.name}/SKILL.md — advisory only, see skillScan.ts`,
78
+ workspaceId: opts.workspaceId,
79
+ harnessType: opts.harnessType,
80
+ timestamp: ts,
81
+ incidentId: crypto
82
+ .createHash('sha1')
83
+ .update(ts + skill.name + opts.workspaceId)
84
+ .digest('hex')
85
+ .slice(0, 16),
86
+ filePath: `${skill.source}/${skill.name}/SKILL.md`,
87
+ }) + '\n';
88
+ fs.mkdirSync(path.dirname(eventsLog), { recursive: true });
89
+ fs.appendFileSync(eventsLog, entry, { flag: 'a' });
90
+ }
91
+ catch (err) {
92
+ console.warn('[sync-daemon] failed to write skill_flagged event (non-fatal):', err);
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * The `review_before:` tokens the snapshot compiles into hold rules: from the
98
+ * synced SOPs' front matter and JSON blocks, the workspace settings, and the
99
+ * local `.intutic/sops`. The same parse the Claude Code writer runs for its
100
+ * pattern blacklist, so the two cannot disagree about what is held.
101
+ */
102
+ export async function localHoldTokensFor(workspaceRoot, sops, settings, harnesses = []) {
103
+ const local = await loadLocalSopEntries(workspaceRoot, harnesses);
104
+ return parseSopConstraints([...sops, ...local], settings).reviewBefore;
105
+ }
106
+ /**
107
+ * Refresh the three gate-side caches every hook reads: the policy snapshot
108
+ * (`~/.intutic/hooks/policy-snapshot.rules`), the approved review-hold
109
+ * bypasses and the central egress policy. Called on EVERY sync cycle, never
110
+ * only when the config version moved: policy changes without the version
111
+ * changing, and before this helper existed `connect` refreshed once at
112
+ * startup and never again, so a guardrail promoted mid-session reached a
113
+ * connected machine only on restart. None of the three throw; the return
114
+ * says which of them landed.
115
+ */
116
+ export async function refreshGateCaches(opts) {
117
+ const snapshot = (await refreshPolicySnapshot(opts)) !== null;
118
+ const bypasses = (await refreshApprovedBypasses(opts)) !== null;
119
+ const egress = (await refreshEgressPolicy(opts)) !== null;
120
+ return { snapshot, bypasses, egress };
121
+ }
122
+ /** Where the ids of SkillOpt suggestions that fully landed are remembered. */
123
+ export const APPLIED_SUGGESTIONS_RELATIVE_PATH = path.join('.intutic', 'applied-suggestions.json');
124
+ /**
125
+ * Apply the SkillOpt config edits the control plane sent with this config,
126
+ * and ack each outcome back (`POST /api/v1/skillopt/:id/apply-result`). A
127
+ * suggestion queued for auto-apply reaches `applied` only through that ack.
128
+ *
129
+ * Only ids whose every operation landed are remembered in
130
+ * `.intutic/applied-suggestions.json`, so a failed edit (a fuzzy-match miss,
131
+ * a refused write) is retried next cycle rather than forgotten. With
132
+ * `reapplyAll` every edit is applied again regardless: the caller has just
133
+ * rewritten the harness config files from the SOPs, which drops every overlay
134
+ * an earlier cycle applied. ADD is idempotent, so re-applying an edit that is
135
+ * still present changes nothing.
136
+ *
137
+ * Never throws: a failed apply or ack must not abort the sync cycle. A
138
+ * dropped ack only means the suggestion is synced and acked again next cycle.
139
+ */
140
+ export async function applySkillOptEdits(opts) {
141
+ const appliedEdits = opts.appliedEdits ?? [];
142
+ if (appliedEdits.length === 0)
143
+ return [];
144
+ const appliedPath = path.join(opts.workspaceRoot, APPLIED_SUGGESTIONS_RELATIVE_PATH);
145
+ let localAppliedIds = [];
146
+ try {
147
+ const parsed = JSON.parse(fs.readFileSync(appliedPath, 'utf-8'));
148
+ if (Array.isArray(parsed))
149
+ localAppliedIds = parsed.filter((id) => typeof id === 'string');
150
+ }
151
+ catch {
152
+ // Missing or unreadable: nothing has landed yet, so everything is applied.
153
+ }
154
+ const toApply = opts.reapplyAll
155
+ ? appliedEdits
156
+ : appliedEdits.filter((edit) => !localAppliedIds.includes(edit.suggestionId));
157
+ if (toApply.length === 0)
158
+ return [];
159
+ let results;
160
+ try {
161
+ results = await applyConfigEdits(opts.workspaceRoot, toApply, opts.bypassEnforcementTier);
162
+ }
163
+ catch (err) {
164
+ console.warn('[sync-daemon] Failed to apply SkillOpt config edits:', errorMessage(err));
165
+ return [];
166
+ }
167
+ for (const result of results) {
168
+ await reportApplyResult(opts.controlPlaneUrl, opts.apiKey, result);
169
+ }
170
+ const landed = results.filter((r) => r.ok).map((r) => r.suggestionId);
171
+ try {
172
+ fs.mkdirSync(path.dirname(appliedPath), { recursive: true });
173
+ fs.writeFileSync(appliedPath, JSON.stringify([...new Set([...localAppliedIds, ...landed])], null, 2), 'utf-8');
174
+ }
175
+ catch (err) {
176
+ // Not fatal: the next cycle applies these again, and ADD is idempotent.
177
+ console.warn('[sync-daemon] Could not record applied SkillOpt suggestions:', errorMessage(err));
178
+ }
179
+ return results;
180
+ }
181
+ /** Ack one SkillOpt apply outcome back to the control plane. Never throws. */
182
+ async function reportApplyResult(controlPlaneUrl, apiKey, result) {
183
+ try {
184
+ const res = await fetch(`${controlPlaneUrl}/api/v1/skillopt/${result.suggestionId}/apply-result`, {
185
+ method: 'POST',
186
+ headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` },
187
+ body: JSON.stringify({ ok: result.ok, perOperation: result.perOperation }),
188
+ signal: AbortSignal.timeout(10_000),
189
+ });
190
+ if (!res.ok) {
191
+ const body = await res.text().catch(() => '');
192
+ console.warn(`[sync-daemon] reportApplyResult failed for ${result.suggestionId} (${res.status}): ${body}`);
193
+ }
194
+ }
195
+ catch (err) {
196
+ console.warn(`[sync-daemon] reportApplyResult request failed for ${result.suggestionId}:`, errorMessage(err));
197
+ }
198
+ }
199
+ /**
200
+ * Register each harness as an agent with its facets, report one session per
201
+ * harness, and turn this cycle's skill-scan findings into `skill_flagged`
202
+ * events. Returns each harness's governance-coverage inputs, derived from the
203
+ * same facets, for the config capture.
204
+ *
205
+ * One harness failing must not stop the others, so failures are collected
206
+ * and returned rather than thrown.
207
+ */
208
+ export async function reportHarnessAgents(opts) {
209
+ const governanceInputs = {};
210
+ const failures = [];
211
+ // A skill is not harness-specific, and the scan runs once per harness.
212
+ const skillFlaggedThisCycle = new Set();
213
+ for (const harness of opts.harnesses) {
214
+ try {
215
+ const report = await collectAgentReport({
216
+ workspaceRoot: opts.workspaceRoot,
217
+ harnessType: harness,
218
+ configSynced: true,
219
+ dlpEnabled: true,
220
+ policyEnforced: true,
221
+ allowLocalVaults: opts.allowLocalVaults,
222
+ });
223
+ await reportAgent(opts.controlPlaneUrl, opts.apiKey, opts.workspaceId, report);
224
+ governanceInputs[harness] = deriveEnforcementInputs(report.facets);
225
+ emitSkillFlaggedEvents({
226
+ workspaceRoot: opts.workspaceRoot,
227
+ workspaceId: opts.workspaceId,
228
+ harnessType: harness,
229
+ skills: report.facets.skills,
230
+ alreadyEmitted: skillFlaggedThisCycle,
231
+ });
232
+ await startHarnessSession({
233
+ controlPlaneUrl: opts.controlPlaneUrl,
234
+ apiKey: opts.apiKey,
235
+ workspaceId: opts.workspaceId,
236
+ harnessType: harness,
237
+ workspaceRoot: opts.workspaceRoot,
238
+ ...(opts.proxyInstanceId ? { proxyInstanceId: opts.proxyInstanceId } : {}),
239
+ });
240
+ }
241
+ catch (err) {
242
+ failures.push({ harness, error: errorMessage(err) });
243
+ }
244
+ }
245
+ return { governanceInputs, failures };
246
+ }
247
+ export async function syncOfflineTraces(controlPlaneUrl, apiKey) {
248
+ const logsDir = path.join(os.homedir(), '.intutic', 'logs');
249
+ if (!fs.existsSync(logsDir))
250
+ return;
251
+ try {
252
+ const files = fs.readdirSync(logsDir);
253
+ const traceFiles = files.filter(f => f.startsWith('traces-') && f.endsWith('.jsonl'));
254
+ if (traceFiles.length === 0)
255
+ return;
256
+ for (const file of traceFiles) {
257
+ const originalPath = path.join(logsDir, file);
258
+ const syncingPath = originalPath + '.syncing';
259
+ // Rename to avoid write race conditions with the Rust proxy
260
+ try {
261
+ fs.renameSync(originalPath, syncingPath);
262
+ }
263
+ catch (renameErr) {
264
+ console.error(`[sync-daemon] Failed to lock/rename file ${file}:`, errorMessage(renameErr));
265
+ continue;
266
+ }
267
+ try {
268
+ const raw = fs.readFileSync(syncingPath, 'utf-8');
269
+ const lines = raw.split('\n').map(l => l.trim()).filter(Boolean);
270
+ if (lines.length === 0) {
271
+ // Empty file, just clean it up
272
+ fs.unlinkSync(syncingPath);
273
+ continue;
274
+ }
275
+ const traces = lines.map(line => JSON.parse(line));
276
+ console.log(`[sync-daemon] Found ${traces.length} offline traces to sync back in ${file}.`);
277
+ // Batch in groups of 100
278
+ const batchSize = 100;
279
+ for (let i = 0; i < traces.length; i += batchSize) {
280
+ const batch = traces.slice(i, i + batchSize);
281
+ const res = await fetch(`${controlPlaneUrl}/api/v1/traces/sync-back`, {
282
+ method: 'POST',
283
+ headers: {
284
+ 'Content-Type': 'application/json',
285
+ Authorization: `Bearer ${apiKey}`,
286
+ },
287
+ body: JSON.stringify({ traces: batch }),
288
+ });
289
+ if (!res.ok) {
290
+ throw new Error(`Sync-back API returned status ${res.status}`);
291
+ }
292
+ }
293
+ // Successfully synced this sharded file, delete it
294
+ fs.unlinkSync(syncingPath);
295
+ console.log(`[sync-daemon] Successfully synced ${traces.length} offline traces back from ${file}.`);
296
+ }
297
+ catch (err) {
298
+ console.error(`[sync-daemon] Failed to sync offline traces back from ${file}:`, errorMessage(err));
299
+ // Revert rename on failure to allow retry on next cycle
300
+ try {
301
+ if (fs.existsSync(syncingPath)) {
302
+ fs.renameSync(syncingPath, originalPath);
303
+ }
304
+ }
305
+ catch (revertErr) {
306
+ console.error(`[sync-daemon] Failed to revert rename for ${file}:`, errorMessage(revertErr));
307
+ }
308
+ }
309
+ }
310
+ }
311
+ catch (err) {
312
+ console.error(`[sync-daemon] Failed to scan offline traces directory:`, errorMessage(err));
313
+ }
314
+ }
315
+ //# sourceMappingURL=syncCycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncCycle.js","sourceRoot":"","sources":["../src/syncCycle.ts"],"names":[],"mappings":"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"}
@@ -132,7 +132,7 @@ export declare class TrajectoryMonitor {
132
132
  private submitSummary;
133
133
  private saveOffline;
134
134
  private drainOfflineTrajectories;
135
- /** Bounded best-effort reachability probe, same shape as syncLoop.ts's. */
135
+ /** Bounded best-effort reachability probe of the control plane. */
136
136
  private controlPlaneIsReachable;
137
137
  /** Get the number of active session buffers. */
138
138
  get activeSessionCount(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"trajectoryMonitor.d.ts","sourceRoot":"","sources":["../src/trajectoryMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trajectoryMonitor.d.ts","sourceRoot":"","sources":["../src/trajectoryMonitor.ts"],"names":[],"mappings":"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"}
@@ -339,7 +339,7 @@ export class TrajectoryMonitor {
339
339
  log.error({ err }, 'Failed to drain offline trajectories');
340
340
  }
341
341
  }
342
- /** Bounded best-effort reachability probe, same shape as syncLoop.ts's. */
342
+ /** Bounded best-effort reachability probe of the control plane. */
343
343
  async controlPlaneIsReachable() {
344
344
  if (!this.config.controlPlaneUrl)
345
345
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"trajectoryMonitor.js","sourceRoot":"","sources":["../src/trajectoryMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trajectoryMonitor.js","sourceRoot":"","sources":["../src/trajectoryMonitor.ts"],"names":[],"mappings":"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"}
@@ -37,9 +37,12 @@ export declare function isDshProfilesRoot(changedPath: string): boolean;
37
37
  * @param sops - Current SOP list.
38
38
  * @param proxyUrl - Current proxy URL.
39
39
  * @param settings - Optional passthrough settings.
40
+ * @param skip - Harnesses `intutic disconnect --harness` took out:
41
+ * their files are no longer governed, so a change to
42
+ * one is not tampering and is not restored.
40
43
  * @returns true if tampering was detected.
41
44
  */
42
- export declare function guardSettingsFile(changedPath: string, workspaceRoot: string, sops: SyncSopEntry[], proxyUrl?: string, settings?: Record<string, unknown>): Promise<boolean>;
45
+ export declare function guardSettingsFile(changedPath: string, workspaceRoot: string, sops: SyncSopEntry[], proxyUrl?: string, settings?: Record<string, unknown>, skip?: ReadonlySet<string>): Promise<boolean>;
43
46
  /**
44
47
  * Side-effecting wrapper around `dshHooks.ts`'s pure `detectDshCoverageGap` —
45
48
  * logs TD-370's "silent no-profile window" as a `dsh_coverage_gap` warning
@@ -1 +1 @@
1
- {"version":3,"file":"settingsGuard.d.ts","sourceRoot":"","sources":["../../src/watcher/settingsGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAsBzD,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CA0DnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AA+BD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,YAAY,EAAE,EACpB,QAAQ,SAAK,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC,CAsJlB;AAwID;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAW7D"}
1
+ {"version":3,"file":"settingsGuard.d.ts","sourceRoot":"","sources":["../../src/watcher/settingsGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAsBzD,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAyDnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AA+BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,YAAY,EAAE,EACpB,QAAQ,SAAK,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,IAAI,GAAE,WAAW,CAAC,MAAM,CAAa,GACpC,OAAO,CAAC,OAAO,CAAC,CAkKlB;AAuID;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAW7D"}
@@ -25,7 +25,7 @@ import { writeClineHooks } from '../harness/clineHooks.js';
25
25
  import { writeCursorHooks } from '../harness/cursorHooks.js';
26
26
  import { writeOpenHandsHooks } from '../harness/openhandsHooks.js';
27
27
  import { writeGooseHooks } from '../harness/gooseHooks.js';
28
- import { writeWindsurfHooks } from '../harness/windsurfHooks.js';
28
+ import { writeWindsurfHooks, windsurfSettingsPath } from '../harness/windsurfHooks.js';
29
29
  import { writeMuseHooks } from '../harness/museHooks.js';
30
30
  import { writeOpenCodeHooks, OPENCODE_PLUGIN_DIR, OPENCODE_PLUGIN_FILE, OPENCODE_PLUGIN_V2_FILE } from '../harness/openCodeHooks.js';
31
31
  import { writeGrokHooks } from '../harness/grokHooks.js';
@@ -48,7 +48,7 @@ export function buildProtectedPaths(workspaceRoot) {
48
48
  path.join(workspaceRoot, '.cursor', 'hooks.json'),
49
49
  // ── Windsurf ─────────────────────────────────────────────────────
50
50
  path.join(home, '.codeium', 'windsurf', 'hooks.json'),
51
- path.join(home, '.codeium', 'windsurf', 'settings.json'),
51
+ windsurfSettingsPath(),
52
52
  // JetBrains plugin's separate user-level path (no `windsurf`
53
53
  // subdirectory) — see windsurfHooks.ts's module doc comment.
54
54
  path.join(home, '.codeium', 'hooks.json'),
@@ -93,7 +93,6 @@ export function buildProtectedPaths(workspaceRoot) {
93
93
  // watching the parent directory catches every profile's file without
94
94
  // needing to know their names in advance.
95
95
  path.join(resolveDshHome(), 'profiles'),
96
- path.join(resolveDshHome(), 'settings.yaml'),
97
96
  ];
98
97
  }
99
98
  /**
@@ -147,11 +146,16 @@ async function resolveWorkspaceId(workspaceRoot) {
147
146
  * @param sops - Current SOP list.
148
147
  * @param proxyUrl - Current proxy URL.
149
148
  * @param settings - Optional passthrough settings.
149
+ * @param skip - Harnesses `intutic disconnect --harness` took out:
150
+ * their files are no longer governed, so a change to
151
+ * one is not tampering and is not restored.
150
152
  * @returns true if tampering was detected.
151
153
  */
152
- export async function guardSettingsFile(changedPath, workspaceRoot, sops, proxyUrl = '', settings) {
154
+ export async function guardSettingsFile(changedPath, workspaceRoot, sops, proxyUrl = '', settings, skip = new Set()) {
153
155
  // ── Goose plugin: immutable file tamper → incident, not restore ───
154
156
  if (changedPath.includes('intutic-governance')) {
157
+ if (skip.has('goose'))
158
+ return false;
155
159
  if (await isImmutable(changedPath)) {
156
160
  log.error({ action: 'governance_override_attempt', path: changedPath }, 'SECURITY: Immutable Goose governance file was modified — OS immutable flag bypassed. Emitting incident.');
157
161
  const workspaceId = await resolveWorkspaceId(workspaceRoot);
@@ -188,28 +192,38 @@ export async function guardSettingsFile(changedPath, workspaceRoot, sops, proxyU
188
192
  }
189
193
  // ── Claude Code settings.json ─────────────────────────────────────
190
194
  if (changedPath.includes('.claude') && changedPath.endsWith('settings.json')) {
195
+ if (skip.has('claude-code'))
196
+ return false;
191
197
  return guardClaudeCodeSettings(changedPath, workspaceRoot, sops, settings);
192
198
  }
193
199
  // ── Cursor hooks.json ─────────────────────────────────────────────
194
200
  if (changedPath.includes('.cursor') && changedPath.endsWith('hooks.json')) {
201
+ if (skip.has('cursor'))
202
+ return false;
195
203
  return guardJsonHookFile(changedPath, 'cursor', async () => {
196
204
  await writeCursorHooks(workspaceRoot, proxyUrl, '', changedPath.startsWith('/etc'));
197
205
  });
198
206
  }
199
207
  // ── Windsurf hooks.json ───────────────────────────────────────────
200
208
  if ((changedPath.includes('.codeium') || changedPath.includes('.windsurf')) && changedPath.endsWith('hooks.json')) {
209
+ if (skip.has('windsurf'))
210
+ return false;
201
211
  return guardJsonHookFile(changedPath, 'windsurf', async () => {
202
212
  await writeWindsurfHooks(workspaceRoot, proxyUrl);
203
213
  });
204
214
  }
205
215
  // ── Cline hooks.json ──────────────────────────────────────────────
206
216
  if (changedPath.includes('.clinerules') && changedPath.endsWith('hooks.json')) {
217
+ if (skip.has('cline'))
218
+ return false;
207
219
  return guardJsonHookFile(changedPath, 'cline', async () => {
208
220
  await writeClineHooks(workspaceRoot, proxyUrl);
209
221
  });
210
222
  }
211
223
  // ── OpenHands hooks.json ──────────────────────────────────────────
212
224
  if (changedPath.includes('.openhands') && changedPath.endsWith('hooks.json')) {
225
+ if (skip.has('openhands'))
226
+ return false;
213
227
  return guardJsonHookFile(changedPath, 'openhands', async () => {
214
228
  await writeOpenHandsHooks(workspaceRoot, proxyUrl);
215
229
  });
@@ -220,6 +234,8 @@ export async function guardSettingsFile(changedPath, workspaceRoot, sops, proxyU
220
234
  if ((changedPath.includes(path.join('.muse', 'hooks.json'))) ||
221
235
  (changedPath.includes(path.join('.config', 'muse')) &&
222
236
  (changedPath.endsWith('settings.json') || changedPath.endsWith('intutic-managed-hooks.json')))) {
237
+ if (skip.has('muse-code'))
238
+ return false;
223
239
  return guardJsonHookFile(changedPath, 'muse-code', async () => {
224
240
  await writeMuseHooks(workspaceRoot, proxyUrl, await resolveWorkspaceId(workspaceRoot));
225
241
  });
@@ -231,6 +247,8 @@ export async function guardSettingsFile(changedPath, workspaceRoot, sops, proxyU
231
247
  // a tamper there falls through to the generic drift-log path below rather
232
248
  // than a targeted restore.
233
249
  if (changedPath.includes('.grok') && changedPath.endsWith('intutic-governance.json')) {
250
+ if (skip.has('grok'))
251
+ return false;
234
252
  return guardJsonHookFile(changedPath, 'grok', async () => {
235
253
  await writeGrokHooks(workspaceRoot, proxyUrl);
236
254
  });
@@ -243,27 +261,34 @@ export async function guardSettingsFile(changedPath, workspaceRoot, sops, proxyU
243
261
  // closes itself, rather than waiting for an unrelated file change or the
244
262
  // next poll cycle to notice.
245
263
  if (isDshProfilesRoot(changedPath)) {
264
+ if (skip.has('dsh'))
265
+ return false;
246
266
  await safeRestore('dsh', () => writeDshHooks(workspaceRoot, proxyUrl, ''));
247
267
  return true;
248
268
  }
249
- // ── dsh: any profile's cordis.patch.yml, or settings.yaml ─────────
269
+ // ── dsh: any profile's cordis.patch.yml ──────────────────────────
250
270
  // Re-running the writer re-merges into EVERY existing profile (not just
251
271
  // the one whose file changed) — cheap (write-if-changed per file) and
252
272
  // avoids threading "which profile" through this generic path-triggered
253
273
  // callback. YAML content, so `guardJsonHookFile`'s `JSON.parse` marker
254
- // check does not apply; a plain substring check for the plugin row id or
255
- // the llm-pi-ai route is enough to decide "does this look tampered".
274
+ // check does not apply; a plain substring check for the plugin row id and
275
+ // the proxy URL (the `llm-deepseek` egress row's `baseURL`, which lives in
276
+ // this same file since dsh 0.2) is enough to decide "does this look
277
+ // tampered". `$DSH_HOME/settings.yaml` is no longer watched: dsh 0.2
278
+ // renames it to `settings.yaml.imported` on boot, and this writer no
279
+ // longer writes it.
256
280
  if (changedPath.startsWith(path.join(resolveDshHome(), 'profiles') + path.sep) &&
257
281
  changedPath.endsWith('cordis.patch.yml')) {
258
- return guardDshFile(changedPath, 'intutic-governance', workspaceRoot, proxyUrl);
259
- }
260
- if (changedPath === path.join(resolveDshHome(), 'settings.yaml')) {
261
- return guardDshFile(changedPath, 'llm-pi-ai', workspaceRoot, proxyUrl);
282
+ if (skip.has('dsh'))
283
+ return false;
284
+ return guardDshFile(changedPath, ['intutic-governance', proxyUrl], workspaceRoot, proxyUrl);
262
285
  }
263
286
  // ── OpenCode plugin: marker-substring guard, same shape as dsh ────
264
287
  // The gate body stamps itself; a file without the stamp is not ours.
265
288
  if (changedPath === path.join(workspaceRoot, OPENCODE_PLUGIN_DIR, OPENCODE_PLUGIN_FILE) ||
266
289
  changedPath === path.join(workspaceRoot, OPENCODE_PLUGIN_DIR, OPENCODE_PLUGIN_V2_FILE)) {
290
+ if (skip.has('opencode'))
291
+ return false;
267
292
  return guardMarkedFile(changedPath, 'Intutic gate body', 'opencode', () => writeOpenCodeHooks(workspaceRoot, proxyUrl, ''));
268
293
  }
269
294
  // ── All other paths: file deleted or corrupted → log drift incident
@@ -349,11 +374,10 @@ async function guardJsonHookFile(filePath, harness, restore) {
349
374
  return false;
350
375
  }
351
376
  /**
352
- * dsh's YAML files, restored by re-running `writeDshHooks` (which
353
- * merge-writes into every existing profile plus settings.yaml — see
354
- * dshHooks.ts). `marker` is the literal substring that must survive in the
355
- * file for it to be considered intact — the plugin row id for a profile's
356
- * cordis.patch.yml, the llm-pi-ai section name for settings.yaml.
377
+ * dsh's profile YAML files, restored by re-running `writeDshHooks` (which
378
+ * merge-writes into every existing profile — see dshHooks.ts). Every one of
379
+ * `markers` is a literal substring that must survive in the file for it to
380
+ * be considered intact.
357
381
  */
358
382
  /**
359
383
  * Generic form of {@link guardDshFile}: a file whose only integrity check is
@@ -377,7 +401,7 @@ async function guardMarkedFile(filePath, marker, harness, restore) {
377
401
  }
378
402
  return false;
379
403
  }
380
- async function guardDshFile(filePath, marker, workspaceRoot, proxyUrl) {
404
+ async function guardDshFile(filePath, markers, workspaceRoot, proxyUrl) {
381
405
  let raw;
382
406
  try {
383
407
  raw = await fs.readFile(filePath, 'utf-8');
@@ -387,7 +411,7 @@ async function guardDshFile(filePath, marker, workspaceRoot, proxyUrl) {
387
411
  await safeRestore('dsh', () => writeDshHooks(workspaceRoot, proxyUrl, ''));
388
412
  return true;
389
413
  }
390
- if (!raw.includes(marker)) {
414
+ if (!markers.every((marker) => raw.includes(marker))) {
391
415
  log.warn({ action: 'dsh_marker_missing', path: filePath }, 'dsh governance file tampered — restoring');
392
416
  await safeRestore('dsh', () => writeDshHooks(workspaceRoot, proxyUrl, ''));
393
417
  return true;