@intutic/sync-daemon 2.9.1 → 3.0.1

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 (90) hide show
  1. package/dist/disconnect/harnesses.d.ts.map +1 -1
  2. package/dist/disconnect/harnesses.js +3 -2
  3. package/dist/disconnect/harnesses.js.map +1 -1
  4. package/dist/harness/antigravityCliHooks.js +3 -3
  5. package/dist/harness/antigravityCliHooks.js.map +1 -1
  6. package/dist/harness/antigravityHooks.d.ts +8 -0
  7. package/dist/harness/antigravityHooks.d.ts.map +1 -1
  8. package/dist/harness/antigravityHooks.js +27 -5
  9. package/dist/harness/antigravityHooks.js.map +1 -1
  10. package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
  11. package/dist/harness/claudeCodeHooks.js +58 -16
  12. package/dist/harness/claudeCodeHooks.js.map +1 -1
  13. package/dist/harness/clineHooks.d.ts.map +1 -1
  14. package/dist/harness/clineHooks.js +4 -2
  15. package/dist/harness/clineHooks.js.map +1 -1
  16. package/dist/harness/codexHooks.d.ts.map +1 -1
  17. package/dist/harness/codexHooks.js +4 -2
  18. package/dist/harness/codexHooks.js.map +1 -1
  19. package/dist/harness/cursorHooks.d.ts.map +1 -1
  20. package/dist/harness/cursorHooks.js +8 -3
  21. package/dist/harness/cursorHooks.js.map +1 -1
  22. package/dist/harness/gateBody.d.ts +177 -4
  23. package/dist/harness/gateBody.d.ts.map +1 -1
  24. package/dist/harness/gateBody.js +1658 -26
  25. package/dist/harness/gateBody.js.map +1 -1
  26. package/dist/harness/githubCopilotHooks.js +3 -3
  27. package/dist/harness/githubCopilotHooks.js.map +1 -1
  28. package/dist/harness/gooseHooks.d.ts.map +1 -1
  29. package/dist/harness/gooseHooks.js +8 -1
  30. package/dist/harness/gooseHooks.js.map +1 -1
  31. package/dist/harness/grokHooks.js +2 -2
  32. package/dist/harness/hermesHooks.js +1 -1
  33. package/dist/harness/hermesHooks.js.map +1 -1
  34. package/dist/harness/museHooks.d.ts.map +1 -1
  35. package/dist/harness/museHooks.js +4 -2
  36. package/dist/harness/museHooks.js.map +1 -1
  37. package/dist/harness/n8nHooks.js +1 -1
  38. package/dist/harness/openCodeHooks.d.ts.map +1 -1
  39. package/dist/harness/openCodeHooks.js +32 -8
  40. package/dist/harness/openCodeHooks.js.map +1 -1
  41. package/dist/harness/openclawHooks.d.ts.map +1 -1
  42. package/dist/harness/openclawHooks.js +19 -8
  43. package/dist/harness/openclawHooks.js.map +1 -1
  44. package/dist/harness/piHooks.js +7 -7
  45. package/dist/harness/windsurfHooks.js +2 -2
  46. package/dist/index.d.ts +9 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +8 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/lib/approvedBypasses.d.ts +17 -4
  51. package/dist/lib/approvedBypasses.d.ts.map +1 -1
  52. package/dist/lib/approvedBypasses.js +17 -4
  53. package/dist/lib/approvedBypasses.js.map +1 -1
  54. package/dist/lib/approvedPlans.d.ts +73 -0
  55. package/dist/lib/approvedPlans.d.ts.map +1 -0
  56. package/dist/lib/approvedPlans.js +124 -0
  57. package/dist/lib/approvedPlans.js.map +1 -0
  58. package/dist/lib/decideLogs.d.ts +46 -0
  59. package/dist/lib/decideLogs.d.ts.map +1 -0
  60. package/dist/lib/decideLogs.js +160 -0
  61. package/dist/lib/decideLogs.js.map +1 -0
  62. package/dist/lib/policySnapshot.d.ts +143 -3
  63. package/dist/lib/policySnapshot.d.ts.map +1 -1
  64. package/dist/lib/policySnapshot.js +480 -14
  65. package/dist/lib/policySnapshot.js.map +1 -1
  66. package/dist/lib/refusalDetailPy.d.ts +11 -0
  67. package/dist/lib/refusalDetailPy.d.ts.map +1 -0
  68. package/dist/lib/refusalDetailPy.js +109 -0
  69. package/dist/lib/refusalDetailPy.js.map +1 -0
  70. package/dist/lib/ruleRecordPy.d.ts +11 -0
  71. package/dist/lib/ruleRecordPy.d.ts.map +1 -0
  72. package/dist/lib/ruleRecordPy.js +277 -0
  73. package/dist/lib/ruleRecordPy.js.map +1 -0
  74. package/dist/lib/scopeMatchPy.d.ts +11 -0
  75. package/dist/lib/scopeMatchPy.d.ts.map +1 -0
  76. package/dist/lib/scopeMatchPy.js +278 -0
  77. package/dist/lib/scopeMatchPy.js.map +1 -0
  78. package/dist/lib/testOutcomePy.d.ts +11 -0
  79. package/dist/lib/testOutcomePy.d.ts.map +1 -0
  80. package/dist/lib/testOutcomePy.js +371 -0
  81. package/dist/lib/testOutcomePy.js.map +1 -0
  82. package/dist/skillWriter.d.ts +1 -1
  83. package/dist/skillWriter.d.ts.map +1 -1
  84. package/dist/skillWriter.js +7 -0
  85. package/dist/skillWriter.js.map +1 -1
  86. package/dist/syncCycle.d.ts +15 -2
  87. package/dist/syncCycle.d.ts.map +1 -1
  88. package/dist/syncCycle.js +15 -3
  89. package/dist/syncCycle.js.map +1 -1
  90. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @module
11
11
  */
12
- export { syncOfflineTraces, refreshGateCaches, localHoldTokensFor, applySkillOptEdits, reportHarnessAgents, emitSkillFlaggedEvents, APPLIED_SUGGESTIONS_RELATIVE_PATH, } from './syncCycle.js';
12
+ export { syncOfflineTraces, refreshGateCaches, localHoldTokensFor, localGateSopsFor, applySkillOptEdits, reportHarnessAgents, emitSkillFlaggedEvents, APPLIED_SUGGESTIONS_RELATIVE_PATH, } from './syncCycle.js';
13
13
  export { collectAgentReport, reportAgent, fetchLocalProxyInstanceId } from './agentReporter.js';
14
14
  export { collectDeviceInventory, reportDeviceInventory } from './inventory.js';
15
15
  export { startHarnessSession, endAllOpenSessions, readGitInfo } from './sessionReporter.js';
@@ -45,7 +45,13 @@ export { mergeCodexConfig } from './harness/codexConfigMerger.js';
45
45
  export { writeGithubCopilotHooks } from './harness/githubCopilotHooks.js';
46
46
  // WS-A & WS-F — runtime env writer and compliance probes
47
47
  export { writeRuntimeEnv } from './lib/runtimeEnv.js';
48
- export { refreshPolicySnapshot, writePolicySnapshot, writeLocalPolicySnapshot, localResolvedPolicy, offlineHoldReason, snapshotRulesVerify, fetchResolvedPolicy, buildSnapshotRules, validateRule, DEFAULT_SNAPSHOT_DIR, DESTRUCTIVE_TIER_SEVERITY, SNAPSHOT_JSON, SNAPSHOT_RULES, VERIFIED_SNAPSHOT_DIR, } from './lib/policySnapshot.js';
48
+ export { refreshPolicySnapshot, writePolicySnapshot, writeLocalPolicySnapshot, localResolvedPolicy, localDecideRules, DEFAULT_DECIDE_DIR, DECIDE_DISABLED_FILE, decideLocallyDisabled, offlineHoldReason, snapshotRulesVerify, fetchResolvedPolicy, buildSnapshotRules, validateRule, DEFAULT_SNAPSHOT_DIR, DESTRUCTIVE_TIER_SEVERITY, SNAPSHOT_JSON, SNAPSHOT_RULES, VERIFIED_SNAPSHOT_DIR, } from './lib/policySnapshot.js';
49
+ export { compileGateRecords, parseServedGateRecords } from './lib/policySnapshot.js';
50
+ // 3.0 — the approved-plans cache. The rule records, test outcomes, scope
51
+ // match and lanes are @intutic/shared-types' (gateRuleRecord.ts,
52
+ // testOutcome.ts, scopeMatch.ts, lanes.ts); import them from there.
53
+ export { refreshApprovedPlans, writeApprovedPlans, fetchApprovedPlans, APPROVED_PLANS_FILE, APPROVED_PLANS_TTL_INTERVALS, } from './lib/approvedPlans.js';
54
+ export { pruneDecideLogs, uploadDecideLogs, DECIDE_UPLOAD_CURSOR, DECIDE_UPLOAD_BATCH } from './lib/decideLogs.js';
49
55
  export { findGateFile, GATE_ARTIFACTS } from './harness/gateArtifacts.js';
50
56
  export { runComplianceProbes } from './lib/complianceProbes.js';
51
57
  export { getActiveAgentProcesses } from './lib/processPoller.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,iCAAiC,GAClC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE9E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAE3F,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEpG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGhF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAElG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAGlJ,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAExH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAExK,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,qDAAqD;AACrD,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AACjG,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7H,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAE5E,+DAA+D;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,kEAAkE;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,6DAA6D;AAC7D,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAEzE,yDAAyD;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,EACzB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAEpF,yEAAyE;AACzE,iEAAiE;AACjE,oEAAoE;AACpE,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAElH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA"}
@@ -27,10 +27,23 @@
27
27
  * valid bypasses" (fail closed toward the hold); it can never resurrect an
28
28
  * entry whose own TTL has passed.
29
29
  *
30
- * Only `review_before` gates read this today (claudeCodeHooks.ts's
31
- * `_intuticApprovedBypass`) — see that module's docstring for why the other
32
- * harness writers are not wired to it: none of them implement `review_before`
33
- * holds at all, so there is nothing for a bypass to apply to there yet.
30
+ * Every hook gate that can hold reads it. The hold and the
31
+ * bypass check live in the shared gate bodies since gate body v8:
32
+ * `intuticApprovedBypass` in the JS body (`gateBody.ts`), emitted into all
33
+ * twelve JS gates (claude-code, codex, cursor, github-copilot, grok,
34
+ * antigravity-cli, muse-code, windsurf, cline, and the in-process opencode,
35
+ * pi and openclaw gates), and `intutic_bypass`/`intutic_hold` in the bash body,
36
+ * emitted into the four bash gates (antigravity/Gemini CLI, goose, hermes,
37
+ * openhands). It covers every hold rule id the snapshot carries:
38
+ * `REQUIRE_APPROVAL:` SOP rules, `sop.local.review_before.*`, and since v23
39
+ * the lane holds `sop.lane.<class>.<token>` and revert holds
40
+ * `revert.<subject>`. The n8n workflow gate and the Open WebUI filter refuse
41
+ * a hold outright by design: neither has a developer to approve one or a
42
+ * tool call to retry. The SDK gates (`@intutic/gate`, dsh, intutic-clawde) and
43
+ * the MCP proxy do not read this file; they ask
44
+ * `GET /api/v1/decisions/approved-bypasses` themselves. Each family's key
45
+ * matches only its own holds, because the control plane copies the key from
46
+ * the gate's own hold record.
34
47
  *
35
48
  * @module
36
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"approvedBypasses.d.ts","sourceRoot":"","sources":["../../src/lib/approvedBypasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAYH,eAAO,MAAM,wBAAwB,QAA+C,CAAA;AACpF,eAAO,MAAM,sBAAsB,4BAA4B,CAAA;AAE/D,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAmBD;;gEAEgE;AAChE,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAmCvC;AAED;;kCAEkC;AAClC,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAiC,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C;AAED;;;sCAGsC;AACtC,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CASnD"}
1
+ {"version":3,"file":"approvedBypasses.d.ts","sourceRoot":"","sources":["../../src/lib/approvedBypasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAYH,eAAO,MAAM,wBAAwB,QAA+C,CAAA;AACpF,eAAO,MAAM,sBAAsB,4BAA4B,CAAA;AAE/D,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAmBD;;gEAEgE;AAChE,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAmCvC;AAED;;kCAEkC;AAClC,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAiC,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C;AAED;;;sCAGsC;AACtC,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CASnD"}
@@ -27,10 +27,23 @@
27
27
  * valid bypasses" (fail closed toward the hold); it can never resurrect an
28
28
  * entry whose own TTL has passed.
29
29
  *
30
- * Only `review_before` gates read this today (claudeCodeHooks.ts's
31
- * `_intuticApprovedBypass`) — see that module's docstring for why the other
32
- * harness writers are not wired to it: none of them implement `review_before`
33
- * holds at all, so there is nothing for a bypass to apply to there yet.
30
+ * Every hook gate that can hold reads it. The hold and the
31
+ * bypass check live in the shared gate bodies since gate body v8:
32
+ * `intuticApprovedBypass` in the JS body (`gateBody.ts`), emitted into all
33
+ * twelve JS gates (claude-code, codex, cursor, github-copilot, grok,
34
+ * antigravity-cli, muse-code, windsurf, cline, and the in-process opencode,
35
+ * pi and openclaw gates), and `intutic_bypass`/`intutic_hold` in the bash body,
36
+ * emitted into the four bash gates (antigravity/Gemini CLI, goose, hermes,
37
+ * openhands). It covers every hold rule id the snapshot carries:
38
+ * `REQUIRE_APPROVAL:` SOP rules, `sop.local.review_before.*`, and since v23
39
+ * the lane holds `sop.lane.<class>.<token>` and revert holds
40
+ * `revert.<subject>`. The n8n workflow gate and the Open WebUI filter refuse
41
+ * a hold outright by design: neither has a developer to approve one or a
42
+ * tool call to retry. The SDK gates (`@intutic/gate`, dsh, intutic-clawde) and
43
+ * the MCP proxy do not read this file; they ask
44
+ * `GET /api/v1/decisions/approved-bypasses` themselves. Each family's key
45
+ * matches only its own holds, because the control plane copies the key from
46
+ * the gate's own hold record.
34
47
  *
35
48
  * @module
36
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"approvedBypasses.js","sourceRoot":"","sources":["../../src/lib/approvedBypasses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approvedBypasses.js","sourceRoot":"","sources":["../../src/lib/approvedBypasses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * approvedPlans.ts — ships the workspace's approved plans *to* the machine,
3
+ * for `plan_approval:` at the hook gates, as
4
+ * `approvedBypasses.ts` ships approved bypasses.
5
+ *
6
+ * # The contract with the gate
7
+ *
8
+ * `~/.intutic/hooks/approved-plans.jsonl` — the directory every gate already
9
+ * refuses an agent's write to (`UNIVERSAL_PROTECTED_PATHS`). One JSON line
10
+ * per APPROVED or EXECUTING plan updated in the last seven days, as
11
+ * `GET /api/v1/plans/approved` returns it: `{sessionId, planId, state, tools,
12
+ * updatedAt}`, where `tools` is the plan's steps flattened to tool names by
13
+ * the control plane, so a gate compares names only. Header lines carry
14
+ * integrity exactly as the bypass cache does: `#digest` (sha256 of the body,
15
+ * first 32 hex chars) and `#workspace`. And `#expires`: three sync intervals
16
+ * after the write. A plan that was approved and then rejected must stop
17
+ * counting within a bounded time even if the daemon dies, so a gate reads a
18
+ * cache past `#expires` — or missing, or failing either check — as "no plan
19
+ * approved", which refuses. That is the opposite direction from the policy
20
+ * snapshot, whose staleness only alerts: there, stale rules still refuse;
21
+ * here, a stale cache could only allow.
22
+ *
23
+ * @module
24
+ */
25
+ import { APPROVED_PLANS_FILE } from '../harness/gateBody.js';
26
+ export declare const DEFAULT_PLAN_CACHE_DIR: string;
27
+ export { APPROVED_PLANS_FILE };
28
+ /** The daemon's default sync interval (`intutic connect --interval`). */
29
+ export declare const DEFAULT_SYNC_INTERVAL_MS = 30000;
30
+ /** How many sync intervals a written cache counts for. */
31
+ export declare const APPROVED_PLANS_TTL_INTERVALS = 3;
32
+ /** One approved plan, as `GET /api/v1/plans/approved` returns it. */
33
+ export interface ApprovedPlanEntry {
34
+ sessionId: string;
35
+ planId: string;
36
+ state: 'APPROVED' | 'EXECUTING';
37
+ tools: string[];
38
+ updatedAt: string;
39
+ }
40
+ export interface ApprovedPlanOptions {
41
+ controlPlaneUrl: string;
42
+ apiKey: string;
43
+ workspaceId: string;
44
+ /** Override the directory (tests). */
45
+ cacheDir?: string;
46
+ /** The sync interval the cache must outlive; `#expires` is three of them. */
47
+ syncIntervalMs?: number;
48
+ }
49
+ /**
50
+ * The workspace's approved plans, or null on any failure: the caller keeps
51
+ * the previous cache, which expires on its own.
52
+ */
53
+ export declare function fetchApprovedPlans(opts: ApprovedPlanOptions): Promise<ApprovedPlanEntry[] | null>;
54
+ /** Writes the cache atomically, read-only, with its digest, workspace and expiry headers. */
55
+ export declare function writeApprovedPlans(entries: ApprovedPlanEntry[], workspaceId: string, cacheDir?: string, opts?: {
56
+ now?: Date;
57
+ syncIntervalMs?: number;
58
+ }): Promise<{
59
+ digest: string;
60
+ count: number;
61
+ expiresAt: string;
62
+ }>;
63
+ /**
64
+ * Fetch and write in one call, on every sync cycle. Never throws; a failed
65
+ * poll leaves the previous cache, which a gate stops trusting at its
66
+ * `#expires`.
67
+ */
68
+ export declare function refreshApprovedPlans(opts: ApprovedPlanOptions): Promise<{
69
+ digest: string;
70
+ count: number;
71
+ expiresAt: string;
72
+ } | null>;
73
+ //# sourceMappingURL=approvedPlans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvedPlans.d.ts","sourceRoot":"","sources":["../../src/lib/approvedPlans.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAI5D,eAAO,MAAM,sBAAsB,QAA+C,CAAA;AAClF,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,QAAS,CAAA;AAE9C,0DAA0D;AAC1D,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAE7C,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,UAAU,GAAG,WAAW,CAAA;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAQD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CAqCvG;AAED,6FAA6F;AAC7F,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAA+B,EACzC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB/D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAWtE"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * approvedPlans.ts — ships the workspace's approved plans *to* the machine,
3
+ * for `plan_approval:` at the hook gates, as
4
+ * `approvedBypasses.ts` ships approved bypasses.
5
+ *
6
+ * # The contract with the gate
7
+ *
8
+ * `~/.intutic/hooks/approved-plans.jsonl` — the directory every gate already
9
+ * refuses an agent's write to (`UNIVERSAL_PROTECTED_PATHS`). One JSON line
10
+ * per APPROVED or EXECUTING plan updated in the last seven days, as
11
+ * `GET /api/v1/plans/approved` returns it: `{sessionId, planId, state, tools,
12
+ * updatedAt}`, where `tools` is the plan's steps flattened to tool names by
13
+ * the control plane, so a gate compares names only. Header lines carry
14
+ * integrity exactly as the bypass cache does: `#digest` (sha256 of the body,
15
+ * first 32 hex chars) and `#workspace`. And `#expires`: three sync intervals
16
+ * after the write. A plan that was approved and then rejected must stop
17
+ * counting within a bounded time even if the daemon dies, so a gate reads a
18
+ * cache past `#expires` — or missing, or failing either check — as "no plan
19
+ * approved", which refuses. That is the opposite direction from the policy
20
+ * snapshot, whose staleness only alerts: there, stale rules still refuse;
21
+ * here, a stale cache could only allow.
22
+ *
23
+ * @module
24
+ */
25
+ import * as fs from 'node:fs/promises';
26
+ import * as path from 'node:path';
27
+ import * as os from 'node:os';
28
+ import { createHash } from 'node:crypto';
29
+ import { createLogger } from '@intutic/logger';
30
+ import { writeFileAtomic } from './atomicWrite.js';
31
+ import { APPROVED_PLANS_FILE } from '../harness/gateBody.js';
32
+ const log = createLogger('sync-approved-plans');
33
+ export const DEFAULT_PLAN_CACHE_DIR = path.join(os.homedir(), '.intutic', 'hooks');
34
+ export { APPROVED_PLANS_FILE };
35
+ /** The daemon's default sync interval (`intutic connect --interval`). */
36
+ export const DEFAULT_SYNC_INTERVAL_MS = 30_000;
37
+ /** How many sync intervals a written cache counts for. */
38
+ export const APPROVED_PLANS_TTL_INTERVALS = 3;
39
+ function trimTrailingSlashes(s) {
40
+ let end = s.length;
41
+ while (end > 0 && s.charCodeAt(end - 1) === 47 /* '/' */)
42
+ end--;
43
+ return s.slice(0, end);
44
+ }
45
+ /**
46
+ * The workspace's approved plans, or null on any failure: the caller keeps
47
+ * the previous cache, which expires on its own.
48
+ */
49
+ export async function fetchApprovedPlans(opts) {
50
+ const url = `${trimTrailingSlashes(opts.controlPlaneUrl)}/api/v1/plans/approved?workspaceId=${encodeURIComponent(opts.workspaceId)}`;
51
+ try {
52
+ const res = await fetch(url, {
53
+ headers: { Authorization: `Bearer ${opts.apiKey}` },
54
+ signal: AbortSignal.timeout(10_000),
55
+ });
56
+ if (!res.ok) {
57
+ log.warn({ action: 'approved_plans_fetch_failed', status: res.status }, 'plans/approved returned non-OK');
58
+ return null;
59
+ }
60
+ const body = (await res.json());
61
+ if (typeof body !== 'object' || body === null)
62
+ return null;
63
+ const rows = body.plans;
64
+ if (!Array.isArray(rows))
65
+ return null;
66
+ return rows
67
+ .filter((r) => typeof r === 'object' && r !== null)
68
+ .filter((r) => typeof r.sessionId === 'string' &&
69
+ r.sessionId !== '' &&
70
+ typeof r.planId === 'string' &&
71
+ (r.state === 'APPROVED' || r.state === 'EXECUTING') &&
72
+ Array.isArray(r.tools) &&
73
+ typeof r.updatedAt === 'string')
74
+ .map((r) => ({
75
+ sessionId: r.sessionId,
76
+ planId: r.planId,
77
+ state: r.state,
78
+ tools: r.tools.filter((t) => typeof t === 'string'),
79
+ updatedAt: r.updatedAt,
80
+ }));
81
+ }
82
+ catch (err) {
83
+ log.warn({ action: 'approved_plans_fetch_failed', err }, 'plans/approved unreachable');
84
+ return null;
85
+ }
86
+ }
87
+ /** Writes the cache atomically, read-only, with its digest, workspace and expiry headers. */
88
+ export async function writeApprovedPlans(entries, workspaceId, cacheDir = DEFAULT_PLAN_CACHE_DIR, opts = {}) {
89
+ const now = opts.now ?? new Date();
90
+ const interval = opts.syncIntervalMs ?? DEFAULT_SYNC_INTERVAL_MS;
91
+ const expiresAt = new Date(now.getTime() + APPROVED_PLANS_TTL_INTERVALS * interval).toISOString();
92
+ const lines = entries.map((e) => JSON.stringify(e));
93
+ const digest = createHash('sha256').update(lines.join('\n')).digest('hex').slice(0, 32);
94
+ const text = `# Intutic approved plans (plan_approval:) — auto-generated. DO NOT EDIT.\n` +
95
+ `#digest ${digest}\n` +
96
+ `#workspace ${workspaceId}\n` +
97
+ `#generated ${now.toISOString()}\n` +
98
+ `#expires ${expiresAt}\n` +
99
+ (lines.length > 0 ? lines.join('\n') + '\n' : '');
100
+ await fs.mkdir(cacheDir, { recursive: true });
101
+ await writeFileAtomic(path.join(cacheDir, APPROVED_PLANS_FILE), text, { mode: 0o444 });
102
+ log.debug({ action: 'approved_plans_written', digest, count: entries.length, dir: cacheDir }, 'Approved-plans cache refreshed');
103
+ return { digest, count: entries.length, expiresAt };
104
+ }
105
+ /**
106
+ * Fetch and write in one call, on every sync cycle. Never throws; a failed
107
+ * poll leaves the previous cache, which a gate stops trusting at its
108
+ * `#expires`.
109
+ */
110
+ export async function refreshApprovedPlans(opts) {
111
+ const entries = await fetchApprovedPlans(opts);
112
+ if (entries === null)
113
+ return null;
114
+ try {
115
+ return await writeApprovedPlans(entries, opts.workspaceId, opts.cacheDir ?? DEFAULT_PLAN_CACHE_DIR, {
116
+ syncIntervalMs: opts.syncIntervalMs,
117
+ });
118
+ }
119
+ catch (err) {
120
+ log.warn({ action: 'approved_plans_write_failed', err }, 'Could not write the approved-plans cache');
121
+ return null;
122
+ }
123
+ }
124
+ //# sourceMappingURL=approvedPlans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvedPlans.js","sourceRoot":"","sources":["../../src/lib/approvedPlans.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Housekeeping for the decide log (`~/.intutic/logs/decide-YYYY-MM-DD.jsonl`).
3
+ *
4
+ * The gates append to it; this module only ages it out and, when the
5
+ * workspace asks, uploads it:
6
+ *
7
+ * - {@link pruneDecideLogs} deletes decide log files (and `--log-state`
8
+ * files) whose UTC date is more than {@link DECIDE_LOG_RETENTION_DAYS}
9
+ * days old. The drift alarm needs the history, which is why the log is not
10
+ * a trace file: the trace upload deletes what it sends (`syncOfflineTraces`
11
+ * matches `traces-*.jsonl` only).
12
+ * - {@link uploadDecideLogs} sends new lines to the control plane only when
13
+ * the workspace setting `decideLogUploadEnabled` is true, and the
14
+ * arguments excerpt only when `decideLogUploadArgs` is too. It reads from a
15
+ * cursor file and never deletes a log. With both settings off, nothing new
16
+ * leaves the machine.
17
+ *
18
+ * @module
19
+ */
20
+ /** The cursor the upload resumes from, beside the logs. */
21
+ export declare const DECIDE_UPLOAD_CURSOR = "decide-upload.cursor";
22
+ /** The most rows one upload request carries. */
23
+ export declare const DECIDE_UPLOAD_BATCH = 500;
24
+ /** Deletes decide log files older than the retention window. Returns the names deleted. Never throws. */
25
+ export declare function pruneDecideLogs(opts?: {
26
+ logsDir?: string;
27
+ nowMs?: number;
28
+ days?: number;
29
+ }): Promise<string[]>;
30
+ export interface DecideUploadOptions {
31
+ controlPlaneUrl: string;
32
+ apiKey: string;
33
+ /** The workspace settings the last sync carried. */
34
+ settings: Record<string, unknown> | undefined;
35
+ logsDir?: string;
36
+ fetchImpl?: typeof fetch;
37
+ }
38
+ /**
39
+ * Uploads the decide log lines written since the cursor, in batches of at
40
+ * most {@link DECIDE_UPLOAD_BATCH}, to `POST /api/v1/decide/events`. Returns
41
+ * the rows sent, or null when the workspace has not opted in. Stops at the
42
+ * first failed request, leaving the cursor after the last batch that landed.
43
+ * Never deletes a log; never throws.
44
+ */
45
+ export declare function uploadDecideLogs(opts: DecideUploadOptions): Promise<number | null>;
46
+ //# sourceMappingURL=decideLogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideLogs.d.ts","sourceRoot":"","sources":["../../src/lib/decideLogs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB,yBAAyB,CAAA;AAC1D,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAMtC,yGAAyG;AACzG,wBAAsB,eAAe,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBvH;AAgBD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoExF"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Housekeeping for the decide log (`~/.intutic/logs/decide-YYYY-MM-DD.jsonl`).
3
+ *
4
+ * The gates append to it; this module only ages it out and, when the
5
+ * workspace asks, uploads it:
6
+ *
7
+ * - {@link pruneDecideLogs} deletes decide log files (and `--log-state`
8
+ * files) whose UTC date is more than {@link DECIDE_LOG_RETENTION_DAYS}
9
+ * days old. The drift alarm needs the history, which is why the log is not
10
+ * a trace file: the trace upload deletes what it sends (`syncOfflineTraces`
11
+ * matches `traces-*.jsonl` only).
12
+ * - {@link uploadDecideLogs} sends new lines to the control plane only when
13
+ * the workspace setting `decideLogUploadEnabled` is true, and the
14
+ * arguments excerpt only when `decideLogUploadArgs` is too. It reads from a
15
+ * cursor file and never deletes a log. With both settings off, nothing new
16
+ * leaves the machine.
17
+ *
18
+ * @module
19
+ */
20
+ import * as fs from 'node:fs/promises';
21
+ import * as os from 'node:os';
22
+ import * as path from 'node:path';
23
+ import { createLogger } from '@intutic/logger';
24
+ import { DECIDE_LOG_RETENTION_DAYS, decideLogFileDate } from '@intutic/shared-types';
25
+ import { writeFileAtomic } from './atomicWrite.js';
26
+ const log = createLogger('sync-daemon:decide-logs');
27
+ /** The cursor the upload resumes from, beside the logs. */
28
+ export const DECIDE_UPLOAD_CURSOR = 'decide-upload.cursor';
29
+ /** The most rows one upload request carries. */
30
+ export const DECIDE_UPLOAD_BATCH = 500;
31
+ function defaultLogsDir() {
32
+ return path.join(os.homedir(), '.intutic', 'logs');
33
+ }
34
+ /** Deletes decide log files older than the retention window. Returns the names deleted. Never throws. */
35
+ export async function pruneDecideLogs(opts = {}) {
36
+ const dir = opts.logsDir ?? defaultLogsDir();
37
+ const cutoff = (opts.nowMs ?? Date.now()) - (opts.days ?? DECIDE_LOG_RETENTION_DAYS) * 86_400_000;
38
+ const names = await fs.readdir(dir).catch(() => []);
39
+ const removed = [];
40
+ for (const name of names) {
41
+ const day = decideLogFileDate(name);
42
+ // A file's day ends at the next midnight; it is old once that end is past the cutoff.
43
+ if (day === null || day + 86_400_000 > cutoff)
44
+ continue;
45
+ try {
46
+ await fs.unlink(path.join(dir, name));
47
+ removed.push(name);
48
+ }
49
+ catch (err) {
50
+ log.debug({ action: 'decide_log_prune_failed', file: name, err }, 'Could not delete an old decide log');
51
+ }
52
+ }
53
+ if (removed.length > 0)
54
+ log.debug({ action: 'decide_logs_pruned', files: removed }, 'Deleted decide logs past retention');
55
+ return removed;
56
+ }
57
+ async function readCursor(dir) {
58
+ try {
59
+ const c = JSON.parse(await fs.readFile(path.join(dir, DECIDE_UPLOAD_CURSOR), 'utf-8'));
60
+ return typeof c.file === 'string' && typeof c.offset === 'number' && c.offset >= 0 ? { file: c.file, offset: c.offset } : null;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Uploads the decide log lines written since the cursor, in batches of at
68
+ * most {@link DECIDE_UPLOAD_BATCH}, to `POST /api/v1/decide/events`. Returns
69
+ * the rows sent, or null when the workspace has not opted in. Stops at the
70
+ * first failed request, leaving the cursor after the last batch that landed.
71
+ * Never deletes a log; never throws.
72
+ */
73
+ export async function uploadDecideLogs(opts) {
74
+ if (opts.settings?.decideLogUploadEnabled !== true)
75
+ return null;
76
+ const withArgs = opts.settings.decideLogUploadArgs === true;
77
+ const dir = opts.logsDir ?? defaultLogsDir();
78
+ const doFetch = opts.fetchImpl ?? fetch;
79
+ const names = (await fs.readdir(dir).catch(() => []))
80
+ .filter((n) => /^decide-[0-9]{4}-[0-9]{2}-[0-9]{2}\.jsonl$/.test(n))
81
+ .sort();
82
+ const cursor = await readCursor(dir);
83
+ let sent = 0;
84
+ for (const name of names) {
85
+ if (cursor && name < cursor.file)
86
+ continue;
87
+ const start = cursor && name === cursor.file ? cursor.offset : 0;
88
+ let buf;
89
+ try {
90
+ buf = await fs.readFile(path.join(dir, name));
91
+ }
92
+ catch {
93
+ continue;
94
+ }
95
+ // Whole lines only: a line a gate is still writing waits for the next cycle.
96
+ const end = buf.lastIndexOf(0x0a) + 1;
97
+ if (end <= start)
98
+ continue;
99
+ const lines = buf.subarray(start, end).toString('utf-8').split('\n');
100
+ let offset = start;
101
+ let batch = [];
102
+ const flush = async () => {
103
+ if (batch.length === 0)
104
+ return true;
105
+ try {
106
+ const res = await doFetch(`${trimTrailingSlashes(opts.controlPlaneUrl)}/api/v1/decide/events`, {
107
+ method: 'POST',
108
+ headers: { 'content-type': 'application/json', authorization: `Bearer ${opts.apiKey}` },
109
+ body: JSON.stringify({ events: batch.map((b) => b.row) }),
110
+ signal: AbortSignal.timeout(10_000),
111
+ });
112
+ if (!res.ok) {
113
+ log.debug({ action: 'decide_upload_failed', status: res.status }, 'Decide log upload refused; will retry');
114
+ return false;
115
+ }
116
+ }
117
+ catch (err) {
118
+ log.debug({ action: 'decide_upload_failed', err }, 'Decide log upload failed; will retry');
119
+ return false;
120
+ }
121
+ sent += batch.length;
122
+ try {
123
+ await writeFileAtomic(path.join(dir, DECIDE_UPLOAD_CURSOR), JSON.stringify({ file: name, offset: batch[batch.length - 1].next }) + '\n', { mode: 0o600 });
124
+ }
125
+ catch (err) {
126
+ // The rows landed but the cursor did not move: the next cycle sends them again rather than skipping any.
127
+ log.debug({ action: 'decide_upload_cursor_failed', err }, 'Could not move the decide upload cursor');
128
+ return false;
129
+ }
130
+ batch = [];
131
+ return true;
132
+ };
133
+ for (const line of lines.slice(0, -1)) {
134
+ offset += Buffer.byteLength(line, 'utf-8') + 1;
135
+ let row;
136
+ try {
137
+ row = JSON.parse(line);
138
+ }
139
+ catch {
140
+ continue;
141
+ }
142
+ if (!withArgs)
143
+ delete row.argsExcerpt;
144
+ batch.push({ row, next: offset });
145
+ if (batch.length >= DECIDE_UPLOAD_BATCH && !(await flush()))
146
+ return sent;
147
+ }
148
+ if (!(await flush()))
149
+ return sent;
150
+ }
151
+ return sent;
152
+ }
153
+ /** Trailing slashes trimmed by a scan, not a `/+$` regex, which is quadratic on a run of slashes. */
154
+ function trimTrailingSlashes(url) {
155
+ let end = url.length;
156
+ while (end > 0 && url.charCodeAt(end - 1) === 0x2f)
157
+ end--;
158
+ return url.slice(0, end);
159
+ }
160
+ //# sourceMappingURL=decideLogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideLogs.js","sourceRoot":"","sources":["../../src/lib/decideLogs.ts"],"names":[],"mappings":"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"}