@intutic/shared-types 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 (188) hide show
  1. package/dist/anomaly.d.ts +6 -10
  2. package/dist/anomaly.d.ts.map +1 -1
  3. package/dist/anomaly.js +0 -2
  4. package/dist/anomaly.js.map +1 -1
  5. package/dist/api-contracts.d.ts +1 -1
  6. package/dist/api-contracts.js +1 -1
  7. package/dist/attenuation.d.ts +1 -1
  8. package/dist/attenuation.js +1 -1
  9. package/dist/auth.d.ts +10 -9
  10. package/dist/auth.d.ts.map +1 -1
  11. package/dist/auth.js +3 -4
  12. package/dist/auth.js.map +1 -1
  13. package/dist/billing.d.ts +1 -1
  14. package/dist/billing.js +1 -1
  15. package/dist/destructiveSql.d.ts +48 -0
  16. package/dist/destructiveSql.d.ts.map +1 -0
  17. package/dist/destructiveSql.js +43 -0
  18. package/dist/destructiveSql.js.map +1 -0
  19. package/dist/devInventory.d.ts +120 -0
  20. package/dist/devInventory.d.ts.map +1 -0
  21. package/dist/devInventory.js +80 -0
  22. package/dist/devInventory.js.map +1 -0
  23. package/dist/enums.d.ts +18 -21
  24. package/dist/enums.d.ts.map +1 -1
  25. package/dist/enums.js +24 -28
  26. package/dist/enums.js.map +1 -1
  27. package/dist/errors.js +3 -3
  28. package/dist/errors.js.map +1 -1
  29. package/dist/finops.d.ts +14 -2
  30. package/dist/finops.d.ts.map +1 -1
  31. package/dist/finops.js +15 -1
  32. package/dist/finops.js.map +1 -1
  33. package/dist/gateDecisions.d.ts +18 -0
  34. package/dist/gateDecisions.d.ts.map +1 -0
  35. package/dist/gateDecisions.js +20 -0
  36. package/dist/gateDecisions.js.map +1 -0
  37. package/dist/gateIdentity.d.ts +23 -0
  38. package/dist/gateIdentity.d.ts.map +1 -0
  39. package/dist/gateIdentity.js +32 -0
  40. package/dist/gateIdentity.js.map +1 -0
  41. package/dist/gateKind.d.ts +172 -0
  42. package/dist/gateKind.d.ts.map +1 -0
  43. package/dist/gateKind.js +160 -0
  44. package/dist/gateKind.js.map +1 -0
  45. package/dist/gateLimits.d.ts +170 -0
  46. package/dist/gateLimits.d.ts.map +1 -0
  47. package/dist/gateLimits.js +96 -0
  48. package/dist/gateLimits.js.map +1 -0
  49. package/dist/gitRemote.d.ts +17 -0
  50. package/dist/gitRemote.d.ts.map +1 -0
  51. package/dist/gitRemote.js +71 -0
  52. package/dist/gitRemote.js.map +1 -0
  53. package/dist/governanceCoverage.d.ts +3 -3
  54. package/dist/governanceCoverage.js +3 -3
  55. package/dist/guardrailIr.d.ts +3 -3
  56. package/dist/guardrailIr.d.ts.map +1 -1
  57. package/dist/guardrailIr.js +3 -3
  58. package/dist/guardrailIr.js.map +1 -1
  59. package/dist/guardrailRender.d.ts +1 -1
  60. package/dist/guardrailRender.js +1 -1
  61. package/dist/harnessRules.d.ts +74 -0
  62. package/dist/harnessRules.d.ts.map +1 -0
  63. package/dist/harnessRules.js +142 -0
  64. package/dist/harnessRules.js.map +1 -0
  65. package/dist/holdMessages.d.ts +25 -0
  66. package/dist/holdMessages.d.ts.map +1 -0
  67. package/dist/holdMessages.js +34 -0
  68. package/dist/holdMessages.js.map +1 -0
  69. package/dist/identity.d.ts +1 -1
  70. package/dist/identity.js +2 -2
  71. package/dist/identity.js.map +1 -1
  72. package/dist/index.d.ts +36 -6
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +141 -10
  75. package/dist/index.js.map +1 -1
  76. package/dist/intelligence.d.ts +1 -2
  77. package/dist/intelligence.d.ts.map +1 -1
  78. package/dist/intelligence.js.map +1 -1
  79. package/dist/mcpBudgets.d.ts +191 -0
  80. package/dist/mcpBudgets.d.ts.map +1 -0
  81. package/dist/mcpBudgets.js +144 -0
  82. package/dist/mcpBudgets.js.map +1 -0
  83. package/dist/mcpRegistryRecord.d.ts +143 -0
  84. package/dist/mcpRegistryRecord.d.ts.map +1 -0
  85. package/dist/mcpRegistryRecord.js +229 -0
  86. package/dist/mcpRegistryRecord.js.map +1 -0
  87. package/dist/mcpToolRisk.d.ts +82 -0
  88. package/dist/mcpToolRisk.d.ts.map +1 -0
  89. package/dist/mcpToolRisk.js +334 -0
  90. package/dist/mcpToolRisk.js.map +1 -0
  91. package/dist/modelCatalog.d.ts +2 -2
  92. package/dist/modelCatalog.generated.js +1 -1
  93. package/dist/modelCatalog.generated.js.map +1 -1
  94. package/dist/modelCatalog.js +2 -2
  95. package/dist/notifications.d.ts +20 -130
  96. package/dist/notifications.d.ts.map +1 -1
  97. package/dist/notifications.js +241 -1
  98. package/dist/notifications.js.map +1 -1
  99. package/dist/phrases.d.ts +87 -0
  100. package/dist/phrases.d.ts.map +1 -0
  101. package/dist/phrases.js +241 -0
  102. package/dist/phrases.js.map +1 -0
  103. package/dist/piiDetectors.d.ts +97 -0
  104. package/dist/piiDetectors.d.ts.map +1 -0
  105. package/dist/piiDetectors.js +96 -0
  106. package/dist/piiDetectors.js.map +1 -0
  107. package/dist/piiDetectors.json +71 -0
  108. package/dist/policy.d.ts +1 -1
  109. package/dist/policy.js +1 -1
  110. package/dist/policyGuardrails.d.ts +127 -10
  111. package/dist/policyGuardrails.d.ts.map +1 -1
  112. package/dist/policyGuardrails.js +59 -6
  113. package/dist/policyGuardrails.js.map +1 -1
  114. package/dist/posturePresets.js +1 -1
  115. package/dist/posturePresets.js.map +1 -1
  116. package/dist/providerVerification.d.ts +2 -2
  117. package/dist/providerVerification.js +2 -2
  118. package/dist/providers.d.ts +4 -4
  119. package/dist/providers.d.ts.map +1 -1
  120. package/dist/providers.js +11 -6
  121. package/dist/providers.js.map +1 -1
  122. package/dist/regoBuiltins.d.ts +42 -0
  123. package/dist/regoBuiltins.d.ts.map +1 -0
  124. package/dist/regoBuiltins.js +732 -0
  125. package/dist/regoBuiltins.js.map +1 -0
  126. package/dist/regoRules.d.ts +105 -0
  127. package/dist/regoRules.d.ts.map +1 -0
  128. package/dist/regoRules.js +407 -0
  129. package/dist/regoRules.js.map +1 -0
  130. package/dist/ruleLoadFailures.d.ts +15 -0
  131. package/dist/ruleLoadFailures.d.ts.map +1 -0
  132. package/dist/ruleLoadFailures.js +26 -0
  133. package/dist/ruleLoadFailures.js.map +1 -0
  134. package/dist/scriptScan.d.ts +5 -5
  135. package/dist/scriptScan.js +3 -3
  136. package/dist/sequence.d.ts +52 -0
  137. package/dist/sequence.d.ts.map +1 -0
  138. package/dist/sequence.js +127 -0
  139. package/dist/sequence.js.map +1 -0
  140. package/dist/session.d.ts +1 -1
  141. package/dist/session.js +1 -1
  142. package/dist/skillScan.d.ts +3 -3
  143. package/dist/skillScan.d.ts.map +1 -1
  144. package/dist/skillScan.js +26 -4
  145. package/dist/skillScan.js.map +1 -1
  146. package/dist/sop.d.ts +24 -11
  147. package/dist/sop.d.ts.map +1 -1
  148. package/dist/sop.js +10 -9
  149. package/dist/sop.js.map +1 -1
  150. package/dist/sourceProviders.d.ts +1 -8
  151. package/dist/sourceProviders.d.ts.map +1 -1
  152. package/dist/sourceProviders.js +2 -9
  153. package/dist/sourceProviders.js.map +1 -1
  154. package/dist/ssoGroupClearance.d.ts +119 -0
  155. package/dist/ssoGroupClearance.d.ts.map +1 -0
  156. package/dist/ssoGroupClearance.js +196 -0
  157. package/dist/ssoGroupClearance.js.map +1 -0
  158. package/dist/sync.d.ts +42 -14
  159. package/dist/sync.d.ts.map +1 -1
  160. package/dist/sync.js +3 -3
  161. package/dist/sync.js.map +1 -1
  162. package/dist/taskManagement.d.ts +0 -2
  163. package/dist/taskManagement.d.ts.map +1 -1
  164. package/dist/taskManagement.js +0 -2
  165. package/dist/taskManagement.js.map +1 -1
  166. package/dist/toolPoison.d.ts +33 -0
  167. package/dist/toolPoison.d.ts.map +1 -0
  168. package/dist/toolPoison.js +85 -0
  169. package/dist/toolPoison.js.map +1 -0
  170. package/dist/usage.d.ts +186 -0
  171. package/dist/usage.d.ts.map +1 -1
  172. package/dist/wasmBinary.d.ts +25 -0
  173. package/dist/wasmBinary.d.ts.map +1 -0
  174. package/dist/wasmBinary.js +111 -0
  175. package/dist/wasmBinary.js.map +1 -0
  176. package/dist/wasmFuel.d.ts +52 -0
  177. package/dist/wasmFuel.d.ts.map +1 -0
  178. package/dist/wasmFuel.js +320 -0
  179. package/dist/wasmFuel.js.map +1 -0
  180. package/dist/wasmMemoryCap.d.ts +21 -0
  181. package/dist/wasmMemoryCap.d.ts.map +1 -0
  182. package/dist/wasmMemoryCap.js +58 -0
  183. package/dist/wasmMemoryCap.js.map +1 -0
  184. package/dist/workspaceSettings.d.ts +126 -17
  185. package/dist/workspaceSettings.d.ts.map +1 -1
  186. package/dist/workspaceSettings.js +21 -2
  187. package/dist/workspaceSettings.js.map +1 -1
  188. package/package.json +2 -2
@@ -5,7 +5,7 @@
5
5
  * restated by hand in three places — the connector service, the sync cron and
6
6
  * the dashboard hook — and the dashboard's copy is what the operator sees in
7
7
  * the provider picker, so a provider added server-side was invisible until
8
- * someone remembered the third copy. `LLD #71` widens the list (Google Drive,
8
+ * someone remembered the third copy. Policy guardrails widened the list (Google Drive,
9
9
  * upload) and moves it here so every reader imports it.
10
10
  *
11
11
  * `MEMORY_PROVIDERS` is deliberately NOT here: memory providers share the
@@ -28,13 +28,6 @@ export type SourceProvider = (typeof SOURCE_PROVIDERS)[number];
28
28
  */
29
29
  export declare const DOCUMENT_PROVIDERS: readonly ["notion", "confluence", "github", "gdrive", "upload"];
30
30
  export type DocumentProvider = (typeof DOCUMENT_PROVIDERS)[number];
31
- /**
32
- * Source providers only a workspace OWNER or ADMIN may connect, reschedule,
33
- * sync or remove. A Google service-account key reads every document it has
34
- * been shared, so the member-level connector route must not create one — the
35
- * same reasoning that keeps VirusTotal off the generic provider enum.
36
- */
37
- export declare const PRIVILEGED_SOURCE_PROVIDERS: ReadonlySet<string>;
38
31
  /** Type guard for a string arriving off the wire or from a config row. */
39
32
  export declare function isSourceProvider(value: unknown): value is SourceProvider;
40
33
  export declare function isDocumentProvider(value: unknown): value is DocumentProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"sourceProviders.d.ts","sourceRoot":"","sources":["../src/sourceProviders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qGAAqG;AACrG,eAAO,MAAM,gBAAgB,uDAAwD,CAAA;AAErF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,iEAA2C,CAAA;AAE1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAElE;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,MAAM,CAAuB,CAAA;AAEnF,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E"}
1
+ {"version":3,"file":"sourceProviders.d.ts","sourceRoot":"","sources":["../src/sourceProviders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qGAAqG;AACrG,eAAO,MAAM,gBAAgB,uDAAwD,CAAA;AAErF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,iEAA2C,CAAA;AAE1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAElE,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E"}
@@ -6,7 +6,7 @@
6
6
  * restated by hand in three places — the connector service, the sync cron and
7
7
  * the dashboard hook — and the dashboard's copy is what the operator sees in
8
8
  * the provider picker, so a provider added server-side was invisible until
9
- * someone remembered the third copy. `LLD #71` widens the list (Google Drive,
9
+ * someone remembered the third copy. Policy guardrails widened the list (Google Drive,
10
10
  * upload) and moves it here so every reader imports it.
11
11
  *
12
12
  * `MEMORY_PROVIDERS` is deliberately NOT here: memory providers share the
@@ -17,7 +17,7 @@
17
17
  * @module
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.PRIVILEGED_SOURCE_PROVIDERS = exports.DOCUMENT_PROVIDERS = exports.SOURCE_PROVIDERS = void 0;
20
+ exports.DOCUMENT_PROVIDERS = exports.SOURCE_PROVIDERS = void 0;
21
21
  exports.isSourceProvider = isSourceProvider;
22
22
  exports.isDocumentProvider = isDocumentProvider;
23
23
  /** Providers that pull documents on a schedule (and, where the provider allows, write SOPs back). */
@@ -31,13 +31,6 @@ exports.SOURCE_PROVIDERS = ['notion', 'confluence', 'github', 'gdrive'];
31
31
  * offer "upload" as something to connect.
32
32
  */
33
33
  exports.DOCUMENT_PROVIDERS = [...exports.SOURCE_PROVIDERS, 'upload'];
34
- /**
35
- * Source providers only a workspace OWNER or ADMIN may connect, reschedule,
36
- * sync or remove. A Google service-account key reads every document it has
37
- * been shared, so the member-level connector route must not create one — the
38
- * same reasoning that keeps VirusTotal off the generic provider enum.
39
- */
40
- exports.PRIVILEGED_SOURCE_PROVIDERS = new Set(['gdrive']);
41
34
  /** Type guard for a string arriving off the wire or from a config row. */
42
35
  function isSourceProvider(value) {
43
36
  return typeof value === 'string' && exports.SOURCE_PROVIDERS.includes(value);
@@ -1 +1 @@
1
- {"version":3,"file":"sourceProviders.js","sourceRoot":"","sources":["../src/sourceProviders.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AA4BH,4CAEC;AAED,gDAEC;AAhCD,qGAAqG;AACxF,QAAA,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAA;AAIrF;;;;;;;GAOG;AACU,QAAA,kBAAkB,GAAG,CAAC,GAAG,wBAAgB,EAAE,QAAQ,CAAU,CAAA;AAI1E;;;;;GAKG;AACU,QAAA,2BAA2B,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEnF,0EAA0E;AAC1E,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,wBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7F,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,0BAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/F,CAAC"}
1
+ {"version":3,"file":"sourceProviders.js","sourceRoot":"","sources":["../src/sourceProviders.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAoBH,4CAEC;AAED,gDAEC;AAxBD,qGAAqG;AACxF,QAAA,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAA;AAIrF;;;;;;;GAOG;AACU,QAAA,kBAAkB,GAAG,CAAC,GAAG,wBAAgB,EAAE,QAAQ,CAAU,CAAA;AAI1E,0EAA0E;AAC1E,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,wBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7F,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,0BAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/F,CAAC"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * SSO-group tool clearance — the one evaluator.
3
+ *
4
+ * A workspace's `sso_group_policy` names high-risk tools, the IdP groups that
5
+ * clear them, and tools that only an on-behalf-of token may call. These places
6
+ * decide a tool call against it: the control plane's hook gate
7
+ * (`resolveSsoGroupPrivilege`), the MCP proxy, the Rust proxy's response gate,
8
+ * and — through the policy snapshot the sync daemon compiles with this
9
+ * function — every harness gate. `@intutic/gate`, `intutic-clawde` and the Rust
10
+ * proxy (`packages/proxy/src/sso_groups.rs`) cannot depend on this package, so
11
+ * they carry ports; `fixtures/sso-group-clearance-vectors.json` holds all of
12
+ * them to the same answers.
13
+ *
14
+ * The algorithm, in order:
15
+ * 1. no policy → GRANTED
16
+ * 2. tool on `requireOboFor` → REQUIRES_OBO (a gate has no OBO token,
17
+ * so every gate refuses it)
18
+ * 3. tool not on `highRiskTools` → GRANTED
19
+ * 4. member's groups unknown → DENIED (fail closed; never "granted")
20
+ * 5. member holds a `requiredGroups` → GRANTED
21
+ * 6. otherwise → DENIED
22
+ *
23
+ * Names and groups match exactly — no case folding, no patterns — because
24
+ * that is what the server has always done and a gate that matched more loosely
25
+ * would refuse calls the server allows. The one widening is MCP's two names
26
+ * for one tool ({@link ssoGroupToolMatches}): an entry naming the tool as its
27
+ * server declares it (`run_query`) also matches the name a harness hook sees
28
+ * (`mcp__postgres__run_query`), at every gate.
29
+ *
30
+ * @module
31
+ */
32
+ import { z } from 'zod';
33
+ import type { SsoGroupClearance, SsoGroupPolicy } from './attenuation.js';
34
+ export interface SsoGroupDecision {
35
+ clearance: SsoGroupClearance;
36
+ /** `sso_group.<require_obo|high_risk>.<tool>` when the call is refused, else null. */
37
+ ruleId: string | null;
38
+ /** Why the call is refused; empty when it is granted. */
39
+ reason: string;
40
+ }
41
+ /**
42
+ * The shape of `sso_group_policy` — the one definition. The settings PUT
43
+ * validates a write against it (and refuses anything else with a 400 naming
44
+ * the field), and {@link parseSsoGroupPolicy} reads a stored value through it.
45
+ * Each list is optional on write and defaults to empty.
46
+ */
47
+ export declare const SsoGroupPolicySchema: z.ZodObject<{
48
+ highRiskTools: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
49
+ requiredGroups: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
50
+ requireOboFor: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
51
+ }, "strict", z.ZodTypeAny, {
52
+ highRiskTools: string[];
53
+ requiredGroups: string[];
54
+ requireOboFor: string[];
55
+ }, {
56
+ highRiskTools?: string[] | undefined;
57
+ requiredGroups?: string[] | undefined;
58
+ requireOboFor?: string[] | undefined;
59
+ }>;
60
+ /**
61
+ * Reads a stored `sso_group_policy`. A value the settings route wrote passes
62
+ * {@link SsoGroupPolicySchema} as it is. One that reached the row some other
63
+ * way is still read rather than dropped: null only when there is no policy
64
+ * object at all; a wrong-typed list reads as empty and non-string entries are
65
+ * dropped, so a malformed `requiredGroups` leaves every high-risk tool denied
66
+ * rather than the whole policy silently gone.
67
+ */
68
+ export declare function parseSsoGroupPolicy(value: unknown): SsoGroupPolicy | null;
69
+ /** A rule id that survives `ruleIdFromReason` (`[A-Za-z0-9_.:-]`). */
70
+ export declare function ssoGroupRuleId(kind: 'require_obo' | 'high_risk', toolName: string): string;
71
+ /**
72
+ * Whether a call that goes by `name` is the tool a policy entry names.
73
+ *
74
+ * Exactly, or — for an entry that is an MCP tool's own name, not starting
75
+ * with `mcp__` — as the name a harness hook gives that tool on any server:
76
+ * `mcp__<server>__<entry>`, the server part non-empty. The MCP proxy sees
77
+ * `run_query` where Claude Code's hook sees `mcp__postgres__run_query`, so
78
+ * without this an entry written one way held at one gate and not the other.
79
+ * An entry that already names the harness form (`mcp__postgres__run_query`)
80
+ * matches only that server's tool.
81
+ */
82
+ export declare function ssoGroupToolMatches(entry: string, name: string): boolean;
83
+ /**
84
+ * Decides one tool call. `toolNames` is every name the call goes by — the MCP
85
+ * proxy sees `create_issue` where a harness hook sees
86
+ * `mcp__github__create_issue` — and a policy entry naming any of them applies
87
+ * ({@link ssoGroupToolMatches}). The rule id and reason name the entry.
88
+ * `memberGroups` null means the caller does not know the member's groups.
89
+ */
90
+ export declare function evaluateSsoGroupClearance(policy: SsoGroupPolicy | null, toolNames: string | readonly string[], memberGroups: readonly string[] | null): SsoGroupDecision;
91
+ /**
92
+ * What a policy snapshot carries about SSO groups: the workspace's policy and
93
+ * the member the snapshot was issued to, with their groups as the control
94
+ * plane resolved them at `issuedAt`. `member` is null when the control plane
95
+ * named no member for the key, and every gate then treats the groups as
96
+ * unknown.
97
+ */
98
+ export interface SsoGroupRecord {
99
+ policy: SsoGroupPolicy;
100
+ member: {
101
+ memberId: string;
102
+ ssoGroups: string[];
103
+ } | null;
104
+ issuedAt: string;
105
+ }
106
+ /**
107
+ * First column of the record's line in `policy-snapshot.rules`.
108
+ *
109
+ * The record is a data line, not a `#` header, on purpose: every gate's digest
110
+ * covers exactly the non-`#` lines, so the member's groups are inside the
111
+ * integrity check every deployed gate already performs, and an edited group
112
+ * list fails it. Two columns, so every rule parser (which needs six) skips it.
113
+ */
114
+ export declare const SSO_GROUP_RECORD_TAG = "@sso_groups";
115
+ /** The record as one `.rules` line: the tag, a tab, base64 of its JSON. */
116
+ export declare function encodeSsoGroupRecord(record: SsoGroupRecord): string;
117
+ /** Reads a record line back; null for any other line or a damaged one. */
118
+ export declare function decodeSsoGroupRecord(line: string): SsoGroupRecord | null;
119
+ //# sourceMappingURL=ssoGroupClearance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssoGroupClearance.d.ts","sourceRoot":"","sources":["../src/ssoGroupClearance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,iBAAiB,CAAA;IAC5B,sFAAsF;IACtF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;CACf;AAUD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAMtB,CAAA;AAEX;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAUzE;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxE;AAgBD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACrC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GACrC,gBAAgB,CA2BlB;AAID;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;IACxD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,gBAAgB,CAAA;AAYjD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEnE;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgBxE"}
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ /**
3
+ * SSO-group tool clearance — the one evaluator.
4
+ *
5
+ * A workspace's `sso_group_policy` names high-risk tools, the IdP groups that
6
+ * clear them, and tools that only an on-behalf-of token may call. These places
7
+ * decide a tool call against it: the control plane's hook gate
8
+ * (`resolveSsoGroupPrivilege`), the MCP proxy, the Rust proxy's response gate,
9
+ * and — through the policy snapshot the sync daemon compiles with this
10
+ * function — every harness gate. `@intutic/gate`, `intutic-clawde` and the Rust
11
+ * proxy (`packages/proxy/src/sso_groups.rs`) cannot depend on this package, so
12
+ * they carry ports; `fixtures/sso-group-clearance-vectors.json` holds all of
13
+ * them to the same answers.
14
+ *
15
+ * The algorithm, in order:
16
+ * 1. no policy → GRANTED
17
+ * 2. tool on `requireOboFor` → REQUIRES_OBO (a gate has no OBO token,
18
+ * so every gate refuses it)
19
+ * 3. tool not on `highRiskTools` → GRANTED
20
+ * 4. member's groups unknown → DENIED (fail closed; never "granted")
21
+ * 5. member holds a `requiredGroups` → GRANTED
22
+ * 6. otherwise → DENIED
23
+ *
24
+ * Names and groups match exactly — no case folding, no patterns — because
25
+ * that is what the server has always done and a gate that matched more loosely
26
+ * would refuse calls the server allows. The one widening is MCP's two names
27
+ * for one tool ({@link ssoGroupToolMatches}): an entry naming the tool as its
28
+ * server declares it (`run_query`) also matches the name a harness hook sees
29
+ * (`mcp__postgres__run_query`), at every gate.
30
+ *
31
+ * @module
32
+ */
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.SSO_GROUP_RECORD_TAG = exports.SsoGroupPolicySchema = void 0;
35
+ exports.parseSsoGroupPolicy = parseSsoGroupPolicy;
36
+ exports.ssoGroupRuleId = ssoGroupRuleId;
37
+ exports.ssoGroupToolMatches = ssoGroupToolMatches;
38
+ exports.evaluateSsoGroupClearance = evaluateSsoGroupClearance;
39
+ exports.encodeSsoGroupRecord = encodeSsoGroupRecord;
40
+ exports.decodeSsoGroupRecord = decodeSsoGroupRecord;
41
+ const zod_1 = require("zod");
42
+ function stringList(value) {
43
+ return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
44
+ }
45
+ /** One tool or group name: matched exactly, so no trimming happens anywhere. */
46
+ const SsoGroupNameSchema = zod_1.z.string().min(1).max(256);
47
+ const SsoGroupNameListSchema = zod_1.z.array(SsoGroupNameSchema).max(500).default([]);
48
+ /**
49
+ * The shape of `sso_group_policy` — the one definition. The settings PUT
50
+ * validates a write against it (and refuses anything else with a 400 naming
51
+ * the field), and {@link parseSsoGroupPolicy} reads a stored value through it.
52
+ * Each list is optional on write and defaults to empty.
53
+ */
54
+ exports.SsoGroupPolicySchema = zod_1.z
55
+ .object({
56
+ highRiskTools: SsoGroupNameListSchema,
57
+ requiredGroups: SsoGroupNameListSchema,
58
+ requireOboFor: SsoGroupNameListSchema,
59
+ })
60
+ .strict();
61
+ /**
62
+ * Reads a stored `sso_group_policy`. A value the settings route wrote passes
63
+ * {@link SsoGroupPolicySchema} as it is. One that reached the row some other
64
+ * way is still read rather than dropped: null only when there is no policy
65
+ * object at all; a wrong-typed list reads as empty and non-string entries are
66
+ * dropped, so a malformed `requiredGroups` leaves every high-risk tool denied
67
+ * rather than the whole policy silently gone.
68
+ */
69
+ function parseSsoGroupPolicy(value) {
70
+ const valid = exports.SsoGroupPolicySchema.safeParse(value);
71
+ if (valid.success)
72
+ return valid.data;
73
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
74
+ return null;
75
+ const p = value;
76
+ const policy = {};
77
+ for (const key of Object.keys(exports.SsoGroupPolicySchema.shape)) {
78
+ policy[key] = stringList(p[key]);
79
+ }
80
+ return policy;
81
+ }
82
+ /** A rule id that survives `ruleIdFromReason` (`[A-Za-z0-9_.:-]`). */
83
+ function ssoGroupRuleId(kind, toolName) {
84
+ return `sso_group.${kind}.${toolName.replace(/[^A-Za-z0-9_.:-]/g, '_')}`;
85
+ }
86
+ /**
87
+ * Whether a call that goes by `name` is the tool a policy entry names.
88
+ *
89
+ * Exactly, or — for an entry that is an MCP tool's own name, not starting
90
+ * with `mcp__` — as the name a harness hook gives that tool on any server:
91
+ * `mcp__<server>__<entry>`, the server part non-empty. The MCP proxy sees
92
+ * `run_query` where Claude Code's hook sees `mcp__postgres__run_query`, so
93
+ * without this an entry written one way held at one gate and not the other.
94
+ * An entry that already names the harness form (`mcp__postgres__run_query`)
95
+ * matches only that server's tool.
96
+ */
97
+ function ssoGroupToolMatches(entry, name) {
98
+ if (name === entry)
99
+ return true;
100
+ if (entry.startsWith('mcp__') || !name.startsWith('mcp__'))
101
+ return false;
102
+ const suffix = `__${entry}`;
103
+ return name.length > 'mcp__'.length + suffix.length && name.endsWith(suffix);
104
+ }
105
+ /**
106
+ * The first entry of `list` a call matches: an exact match on any of its
107
+ * names first, then an MCP tool's own name matching a harness name.
108
+ */
109
+ function matchingEntry(list, names) {
110
+ const exact = names.find((n) => list.includes(n));
111
+ if (exact !== undefined)
112
+ return exact;
113
+ for (const n of names) {
114
+ const entry = list.find((e) => ssoGroupToolMatches(e, n));
115
+ if (entry !== undefined)
116
+ return entry;
117
+ }
118
+ return undefined;
119
+ }
120
+ /**
121
+ * Decides one tool call. `toolNames` is every name the call goes by — the MCP
122
+ * proxy sees `create_issue` where a harness hook sees
123
+ * `mcp__github__create_issue` — and a policy entry naming any of them applies
124
+ * ({@link ssoGroupToolMatches}). The rule id and reason name the entry.
125
+ * `memberGroups` null means the caller does not know the member's groups.
126
+ */
127
+ function evaluateSsoGroupClearance(policy, toolNames, memberGroups) {
128
+ if (!policy)
129
+ return { clearance: 'GRANTED', ruleId: null, reason: '' };
130
+ const names = typeof toolNames === 'string' ? [toolNames] : toolNames;
131
+ const obo = matchingEntry(policy.requireOboFor, names);
132
+ if (obo !== undefined) {
133
+ return {
134
+ clearance: 'REQUIRES_OBO',
135
+ ruleId: ssoGroupRuleId('require_obo', obo),
136
+ reason: `SSO group policy: ${obo} is on-behalf-of only, and a tool-call gate has no OBO token to present`,
137
+ };
138
+ }
139
+ const risky = matchingEntry(policy.highRiskTools, names);
140
+ if (risky === undefined)
141
+ return { clearance: 'GRANTED', ruleId: null, reason: '' };
142
+ if (memberGroups && policy.requiredGroups.some((g) => memberGroups.includes(g))) {
143
+ return { clearance: 'GRANTED', ruleId: null, reason: '' };
144
+ }
145
+ const groups = policy.requiredGroups.length > 0 ? policy.requiredGroups.join(', ') : '(none configured)';
146
+ return {
147
+ clearance: 'DENIED',
148
+ ruleId: ssoGroupRuleId('high_risk', risky),
149
+ reason: memberGroups
150
+ ? `SSO group policy: ${risky} requires one of the SSO groups ${groups}, and this member holds none of them`
151
+ : `SSO group policy: ${risky} requires one of the SSO groups ${groups}, and this gate does not know the member's groups`,
152
+ };
153
+ }
154
+ /**
155
+ * First column of the record's line in `policy-snapshot.rules`.
156
+ *
157
+ * The record is a data line, not a `#` header, on purpose: every gate's digest
158
+ * covers exactly the non-`#` lines, so the member's groups are inside the
159
+ * integrity check every deployed gate already performs, and an edited group
160
+ * list fails it. Two columns, so every rule parser (which needs six) skips it.
161
+ */
162
+ exports.SSO_GROUP_RECORD_TAG = '@sso_groups';
163
+ function toBase64(text) {
164
+ let binary = '';
165
+ for (const byte of new TextEncoder().encode(text))
166
+ binary += String.fromCharCode(byte);
167
+ return btoa(binary);
168
+ }
169
+ function fromBase64(b64) {
170
+ return new TextDecoder('utf-8', { fatal: true }).decode(Uint8Array.from(atob(b64), (c) => c.charCodeAt(0)));
171
+ }
172
+ /** The record as one `.rules` line: the tag, a tab, base64 of its JSON. */
173
+ function encodeSsoGroupRecord(record) {
174
+ return `${exports.SSO_GROUP_RECORD_TAG}\t${toBase64(JSON.stringify(record))}`;
175
+ }
176
+ /** Reads a record line back; null for any other line or a damaged one. */
177
+ function decodeSsoGroupRecord(line) {
178
+ const [tag, b64, ...rest] = line.split('\t');
179
+ if (tag !== exports.SSO_GROUP_RECORD_TAG || !b64 || rest.length > 0)
180
+ return null;
181
+ try {
182
+ const raw = JSON.parse(fromBase64(b64));
183
+ const policy = parseSsoGroupPolicy(raw['policy']);
184
+ if (!policy || typeof raw['issuedAt'] !== 'string')
185
+ return null;
186
+ const m = raw['member'];
187
+ const member = m && typeof m === 'object' && typeof m['memberId'] === 'string'
188
+ ? { memberId: m['memberId'], ssoGroups: stringList(m['ssoGroups']) }
189
+ : null;
190
+ return { policy, member, issuedAt: raw['issuedAt'] };
191
+ }
192
+ catch {
193
+ return null;
194
+ }
195
+ }
196
+ //# sourceMappingURL=ssoGroupClearance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssoGroupClearance.js","sourceRoot":"","sources":["../src/ssoGroupClearance.ts"],"names":[],"mappings":"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"}
package/dist/sync.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Sync Daemon & CLI Types — Shared across control plane + CLI + daemon.
3
3
  *
4
- * LLD #8 — Sync Daemon / CLI
5
4
  * HLD §3.14 — Real-Time State Mirroring
6
5
  *
7
6
  * @module
@@ -144,6 +143,13 @@ export interface IntuticConfig {
144
143
  * restart without waiting for the first fetch.
145
144
  */
146
145
  settings?: WorkspaceSettings;
146
+ /**
147
+ * Harnesses `intutic disconnect --harness` took out. They are also removed
148
+ * from `harnesses`; this list is what keeps connect's MCP wrapping and
149
+ * tamper restore, which cover every installed harness, away from them.
150
+ * `intutic init` clears it.
151
+ */
152
+ disconnectedHarnesses?: HarnessType[];
147
153
  }
148
154
  /** Local integrity store at .intutic/integrity.json (per-workspace). */
149
155
  export interface IntegrityStore {
@@ -154,14 +160,23 @@ export interface IntegrityStore {
154
160
  /** Canonical hashes of synced files. */
155
161
  files: Record<string, string>;
156
162
  }
157
- /** A single harness config file captured by the daemon. */
163
+ /**
164
+ * A single harness config file captured by the daemon.
165
+ *
166
+ * `content` is present only when the workspace's `configBodyUpload` is on;
167
+ * without it the capture is metadata only. The hash is of the text after
168
+ * secret redaction, the text that is (or would be) uploaded, so the chain
169
+ * does not move when the setting is turned on or off.
170
+ */
158
171
  export interface CapturedConfigFile {
159
172
  /** Relative file path (e.g., `.cursorrules`, `CLAUDE.md`). */
160
173
  path: string;
161
- /** Full file content. */
162
- content: string;
163
- /** SHA-256 hash of content. */
174
+ /** File content with credential-shaped strings redacted, when uploaded. */
175
+ content?: string;
176
+ /** SHA-256 hex of the redacted content. */
164
177
  contentHash: string;
178
+ /** Size of the file on disk, in bytes. */
179
+ sizeBytes: number;
165
180
  }
166
181
  /** Payload sent by daemon to capture harness config snapshots (multi-file). */
167
182
  export interface BatchConfigCapturePayload {
@@ -172,7 +187,13 @@ export interface BatchConfigCapturePayload {
172
187
  /** Captured config files. */
173
188
  files: CapturedConfigFile[];
174
189
  }
175
- /** Structured diff between two config snapshots. */
190
+ /**
191
+ * Structured diff between a config snapshot and its predecessor.
192
+ *
193
+ * `contentUploaded` is false when either snapshot was captured without its
194
+ * content (`configBodyUpload` off): the history knows the file changed, not
195
+ * how, so the counts are zero and both contents null.
196
+ */
176
197
  export interface ConfigDiff {
177
198
  /** Lines added. */
178
199
  addedLines: number;
@@ -180,10 +201,12 @@ export interface ConfigDiff {
180
201
  removedLines: number;
181
202
  /** Summary of changes. */
182
203
  summary: string;
183
- /** Previous content (null if first snapshot). */
204
+ /** Previous content (null for the first snapshot, or when not uploaded). */
184
205
  previousContent: string | null;
185
- /** Current content. */
186
- currentContent: string;
206
+ /** Current content (null when not uploaded). */
207
+ currentContent: string | null;
208
+ /** Whether both snapshots carry content, so the diff is a real one. */
209
+ contentUploaded: boolean;
187
210
  }
188
211
  /** Zod schema for SOP hash report (daemon → control plane). */
189
212
  export declare const SopHashReportSchema: z.ZodObject<{
@@ -436,32 +459,37 @@ export declare const BatchConfigCapturePayloadSchema: z.ZodObject<{
436
459
  }>;
437
460
  files: z.ZodArray<z.ZodObject<{
438
461
  path: z.ZodString;
439
- content: z.ZodString;
462
+ content: z.ZodOptional<z.ZodString>;
440
463
  contentHash: z.ZodString;
464
+ sizeBytes: z.ZodNumber;
441
465
  }, "strip", z.ZodTypeAny, {
442
466
  path: string;
443
- content: string;
444
467
  contentHash: string;
468
+ sizeBytes: number;
469
+ content?: string | undefined;
445
470
  }, {
446
471
  path: string;
447
- content: string;
448
472
  contentHash: string;
473
+ sizeBytes: number;
474
+ content?: string | undefined;
449
475
  }>, "many">;
450
476
  }, "strip", z.ZodTypeAny, {
451
477
  workspaceId: string;
452
478
  harnessType: "cursor" | "claude-code" | "antigravity" | "n8n" | "codex" | "windsurf" | "aider" | "openhands" | "openclaw" | "hermes" | "pi" | "cline" | "roo-code" | "continue" | "claude-desktop" | "goose" | "open-webui" | "github-copilot" | "langgraph" | "muse-code" | "grok" | "opencode" | "dsh" | "xirp" | "agentic-orchestrator" | "langchain" | "crewai" | "autogen" | "ag2" | "google-adk" | "openai-agents" | "pydantic-ai" | "smolagents" | "strands" | "agent-framework" | "mastra" | "vercel-ai-sdk" | "eve" | "trueforge" | "ai-sdk-harness" | "ai-sdk-workflow" | "agentcore-runtime" | "trueforge-server";
453
479
  files: {
454
480
  path: string;
455
- content: string;
456
481
  contentHash: string;
482
+ sizeBytes: number;
483
+ content?: string | undefined;
457
484
  }[];
458
485
  }, {
459
486
  workspaceId: string;
460
487
  harnessType: "cursor" | "claude-code" | "antigravity" | "n8n" | "codex" | "windsurf" | "aider" | "openhands" | "openclaw" | "hermes" | "pi" | "cline" | "roo-code" | "continue" | "claude-desktop" | "goose" | "open-webui" | "github-copilot" | "langgraph" | "muse-code" | "grok" | "opencode" | "dsh" | "xirp" | "agentic-orchestrator" | "langchain" | "crewai" | "autogen" | "ag2" | "google-adk" | "openai-agents" | "pydantic-ai" | "smolagents" | "strands" | "agent-framework" | "mastra" | "vercel-ai-sdk" | "eve" | "trueforge" | "ai-sdk-harness" | "ai-sdk-workflow" | "agentcore-runtime" | "trueforge-server";
461
488
  files: {
462
489
  path: string;
463
- content: string;
464
490
  contentHash: string;
491
+ sizeBytes: number;
492
+ content?: string | undefined;
465
493
  }[];
466
494
  }>;
467
495
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
package/dist/sync.js CHANGED
@@ -2,7 +2,6 @@
2
2
  /**
3
3
  * Sync Daemon & CLI Types — Shared across control plane + CLI + daemon.
4
4
  *
5
- * LLD #8 — Sync Daemon / CLI
6
5
  * HLD §3.14 — Real-Time State Mirroring
7
6
  *
8
7
  * @module
@@ -49,8 +48,9 @@ exports.BatchConfigCapturePayloadSchema = zod_1.z.object({
49
48
  harnessType: zod_1.z.nativeEnum(enums_js_1.HarnessType),
50
49
  files: zod_1.z.array(zod_1.z.object({
51
50
  path: zod_1.z.string().min(1),
52
- content: zod_1.z.string(),
53
- contentHash: zod_1.z.string().length(64),
51
+ content: zod_1.z.string().optional(),
52
+ contentHash: zod_1.z.string().regex(/^[0-9a-f]{64}$/),
53
+ sizeBytes: zod_1.z.number().int().nonnegative(),
54
54
  })),
55
55
  });
56
56
  //# sourceMappingURL=sync.js.map
package/dist/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,6BAAuB;AACvB,yCAAwC;AAiNxC,wEAAwE;AAExE,+DAA+D;AAClD,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAC,CAAC,UAAU,CAAC,sBAAW,CAAC;IACtC,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAG,cAAc;QACjD,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE;KACrB,CAAC,CAAC;IACH,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAA;AAEF,gDAAgD;AACnC,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,OAAC,CAAC,UAAU,CAAC,sBAAW,CAAC;QAC/B,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;QACtB,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE;QACrB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KAC9C,CAAC,CAAC;IACH,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACnD,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;KAC3C,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF,4EAA4E;AAC/D,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAC,CAAC,UAAU,CAAC,sBAAW,CAAC;IACtC,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;QACnB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KACnC,CAAC,CAAC;CACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6BAAuB;AACvB,yCAAwC;AAyOxC,wEAAwE;AAExE,+DAA+D;AAClD,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAC,CAAC,UAAU,CAAC,sBAAW,CAAC;IACtC,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAG,cAAc;QACjD,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE;KACrB,CAAC,CAAC;IACH,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAA;AAEF,gDAAgD;AACnC,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,OAAC,CAAC,UAAU,CAAC,sBAAW,CAAC;QAC/B,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;QACtB,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE;QACrB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KAC9C,CAAC,CAAC;IACH,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACnD,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;KAC3C,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF,4EAA4E;AAC/D,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAC,CAAC,UAAU,CAAC,sBAAW,CAAC;IACtC,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;QACtB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC/C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KAC1C,CAAC,CAAC;CACJ,CAAC,CAAA"}
@@ -1,8 +1,6 @@
1
1
  /**
2
2
  * Task Management Adapter — Generic interface for external task/issue trackers.
3
3
  *
4
- * TD-022 item 3.9: TaskManagementAdapter interface
5
- *
6
4
  * Provides a unified abstraction over external task management tools
7
5
  * (Jira, Linear, GitHub Issues, etc.) so the control plane can
8
6
  * create/update tasks based on governance events.
@@ -1 +1 @@
1
- {"version":3,"file":"taskManagement.d.ts","sourceRoot":"","sources":["../src/taskManagement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taskManagement.d.ts","sourceRoot":"","sources":["../src/taskManagement.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,2CAA2C;AAC3C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAA;AAE/E,+CAA+C;AAC/C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEjE,iDAAiD;AACjD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEvE,gEAAgE;AAChE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,YAAY,CAAA;IACtB,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAA;IAClB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,QAAQ,EAAE,YAAY,CAAA;IACtB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,WAAW,CAAC,EAAE;QACZ,uDAAuD;QACvD,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,CAAA;QAC/D,kCAAkC;QAClC,OAAO,EAAE,MAAM,CAAA;QACf,uCAAuC;QACvC,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAA;IAChB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,UAAU,CAAA;IAClB,QAAQ,EAAE,YAAY,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAID;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;IAE/B;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAElC;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEjE;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEjE;;;;OAIG;IACH,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAE7D;;;;;OAKG;IACH,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC5E,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;CAC3B"}
@@ -2,8 +2,6 @@
2
2
  /**
3
3
  * Task Management Adapter — Generic interface for external task/issue trackers.
4
4
  *
5
- * TD-022 item 3.9: TaskManagementAdapter interface
6
- *
7
5
  * Provides a unified abstraction over external task management tools
8
6
  * (Jira, Linear, GitHub Issues, etc.) so the control plane can
9
7
  * create/update tasks based on governance events.
@@ -1 +1 @@
1
- {"version":3,"file":"taskManagement.js","sourceRoot":"","sources":["../src/taskManagement.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"taskManagement.js","sourceRoot":"","sources":["../src/taskManagement.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}