@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.
- package/dist/anomaly.d.ts +6 -10
- package/dist/anomaly.d.ts.map +1 -1
- package/dist/anomaly.js +0 -2
- package/dist/anomaly.js.map +1 -1
- package/dist/api-contracts.d.ts +1 -1
- package/dist/api-contracts.js +1 -1
- package/dist/attenuation.d.ts +1 -1
- package/dist/attenuation.js +1 -1
- package/dist/auth.d.ts +10 -9
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +3 -4
- package/dist/auth.js.map +1 -1
- package/dist/billing.d.ts +1 -1
- package/dist/billing.js +1 -1
- package/dist/destructiveSql.d.ts +48 -0
- package/dist/destructiveSql.d.ts.map +1 -0
- package/dist/destructiveSql.js +43 -0
- package/dist/destructiveSql.js.map +1 -0
- package/dist/devInventory.d.ts +120 -0
- package/dist/devInventory.d.ts.map +1 -0
- package/dist/devInventory.js +80 -0
- package/dist/devInventory.js.map +1 -0
- package/dist/enums.d.ts +18 -21
- package/dist/enums.d.ts.map +1 -1
- package/dist/enums.js +24 -28
- package/dist/enums.js.map +1 -1
- package/dist/errors.js +3 -3
- package/dist/errors.js.map +1 -1
- package/dist/finops.d.ts +14 -2
- package/dist/finops.d.ts.map +1 -1
- package/dist/finops.js +15 -1
- package/dist/finops.js.map +1 -1
- package/dist/gateDecisions.d.ts +18 -0
- package/dist/gateDecisions.d.ts.map +1 -0
- package/dist/gateDecisions.js +20 -0
- package/dist/gateDecisions.js.map +1 -0
- package/dist/gateIdentity.d.ts +23 -0
- package/dist/gateIdentity.d.ts.map +1 -0
- package/dist/gateIdentity.js +32 -0
- package/dist/gateIdentity.js.map +1 -0
- package/dist/gateKind.d.ts +172 -0
- package/dist/gateKind.d.ts.map +1 -0
- package/dist/gateKind.js +160 -0
- package/dist/gateKind.js.map +1 -0
- package/dist/gateLimits.d.ts +170 -0
- package/dist/gateLimits.d.ts.map +1 -0
- package/dist/gateLimits.js +96 -0
- package/dist/gateLimits.js.map +1 -0
- package/dist/gitRemote.d.ts +17 -0
- package/dist/gitRemote.d.ts.map +1 -0
- package/dist/gitRemote.js +71 -0
- package/dist/gitRemote.js.map +1 -0
- package/dist/governanceCoverage.d.ts +3 -3
- package/dist/governanceCoverage.js +3 -3
- package/dist/guardrailIr.d.ts +3 -3
- package/dist/guardrailIr.d.ts.map +1 -1
- package/dist/guardrailIr.js +3 -3
- package/dist/guardrailIr.js.map +1 -1
- package/dist/guardrailRender.d.ts +1 -1
- package/dist/guardrailRender.js +1 -1
- package/dist/harnessRules.d.ts +74 -0
- package/dist/harnessRules.d.ts.map +1 -0
- package/dist/harnessRules.js +142 -0
- package/dist/harnessRules.js.map +1 -0
- package/dist/holdMessages.d.ts +25 -0
- package/dist/holdMessages.d.ts.map +1 -0
- package/dist/holdMessages.js +34 -0
- package/dist/holdMessages.js.map +1 -0
- package/dist/identity.d.ts +1 -1
- package/dist/identity.js +2 -2
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +36 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +141 -10
- package/dist/index.js.map +1 -1
- package/dist/intelligence.d.ts +1 -2
- package/dist/intelligence.d.ts.map +1 -1
- package/dist/intelligence.js.map +1 -1
- package/dist/mcpBudgets.d.ts +191 -0
- package/dist/mcpBudgets.d.ts.map +1 -0
- package/dist/mcpBudgets.js +144 -0
- package/dist/mcpBudgets.js.map +1 -0
- package/dist/mcpRegistryRecord.d.ts +143 -0
- package/dist/mcpRegistryRecord.d.ts.map +1 -0
- package/dist/mcpRegistryRecord.js +229 -0
- package/dist/mcpRegistryRecord.js.map +1 -0
- package/dist/mcpToolRisk.d.ts +82 -0
- package/dist/mcpToolRisk.d.ts.map +1 -0
- package/dist/mcpToolRisk.js +334 -0
- package/dist/mcpToolRisk.js.map +1 -0
- package/dist/modelCatalog.d.ts +2 -2
- package/dist/modelCatalog.generated.js +1 -1
- package/dist/modelCatalog.generated.js.map +1 -1
- package/dist/modelCatalog.js +2 -2
- package/dist/notifications.d.ts +20 -130
- package/dist/notifications.d.ts.map +1 -1
- package/dist/notifications.js +241 -1
- package/dist/notifications.js.map +1 -1
- package/dist/phrases.d.ts +87 -0
- package/dist/phrases.d.ts.map +1 -0
- package/dist/phrases.js +241 -0
- package/dist/phrases.js.map +1 -0
- package/dist/piiDetectors.d.ts +97 -0
- package/dist/piiDetectors.d.ts.map +1 -0
- package/dist/piiDetectors.js +96 -0
- package/dist/piiDetectors.js.map +1 -0
- package/dist/piiDetectors.json +71 -0
- package/dist/policy.d.ts +1 -1
- package/dist/policy.js +1 -1
- package/dist/policyGuardrails.d.ts +127 -10
- package/dist/policyGuardrails.d.ts.map +1 -1
- package/dist/policyGuardrails.js +59 -6
- package/dist/policyGuardrails.js.map +1 -1
- package/dist/posturePresets.js +1 -1
- package/dist/posturePresets.js.map +1 -1
- package/dist/providerVerification.d.ts +2 -2
- package/dist/providerVerification.js +2 -2
- package/dist/providers.d.ts +4 -4
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +11 -6
- package/dist/providers.js.map +1 -1
- package/dist/regoBuiltins.d.ts +42 -0
- package/dist/regoBuiltins.d.ts.map +1 -0
- package/dist/regoBuiltins.js +732 -0
- package/dist/regoBuiltins.js.map +1 -0
- package/dist/regoRules.d.ts +105 -0
- package/dist/regoRules.d.ts.map +1 -0
- package/dist/regoRules.js +407 -0
- package/dist/regoRules.js.map +1 -0
- package/dist/ruleLoadFailures.d.ts +15 -0
- package/dist/ruleLoadFailures.d.ts.map +1 -0
- package/dist/ruleLoadFailures.js +26 -0
- package/dist/ruleLoadFailures.js.map +1 -0
- package/dist/scriptScan.d.ts +5 -5
- package/dist/scriptScan.js +3 -3
- package/dist/sequence.d.ts +52 -0
- package/dist/sequence.d.ts.map +1 -0
- package/dist/sequence.js +127 -0
- package/dist/sequence.js.map +1 -0
- package/dist/session.d.ts +1 -1
- package/dist/session.js +1 -1
- package/dist/skillScan.d.ts +3 -3
- package/dist/skillScan.d.ts.map +1 -1
- package/dist/skillScan.js +26 -4
- package/dist/skillScan.js.map +1 -1
- package/dist/sop.d.ts +24 -11
- package/dist/sop.d.ts.map +1 -1
- package/dist/sop.js +10 -9
- package/dist/sop.js.map +1 -1
- package/dist/sourceProviders.d.ts +1 -8
- package/dist/sourceProviders.d.ts.map +1 -1
- package/dist/sourceProviders.js +2 -9
- package/dist/sourceProviders.js.map +1 -1
- package/dist/ssoGroupClearance.d.ts +119 -0
- package/dist/ssoGroupClearance.d.ts.map +1 -0
- package/dist/ssoGroupClearance.js +196 -0
- package/dist/ssoGroupClearance.js.map +1 -0
- package/dist/sync.d.ts +42 -14
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +3 -3
- package/dist/sync.js.map +1 -1
- package/dist/taskManagement.d.ts +0 -2
- package/dist/taskManagement.d.ts.map +1 -1
- package/dist/taskManagement.js +0 -2
- package/dist/taskManagement.js.map +1 -1
- package/dist/toolPoison.d.ts +33 -0
- package/dist/toolPoison.d.ts.map +1 -0
- package/dist/toolPoison.js +85 -0
- package/dist/toolPoison.js.map +1 -0
- package/dist/usage.d.ts +186 -0
- package/dist/usage.d.ts.map +1 -1
- package/dist/wasmBinary.d.ts +25 -0
- package/dist/wasmBinary.d.ts.map +1 -0
- package/dist/wasmBinary.js +111 -0
- package/dist/wasmBinary.js.map +1 -0
- package/dist/wasmFuel.d.ts +52 -0
- package/dist/wasmFuel.d.ts.map +1 -0
- package/dist/wasmFuel.js +320 -0
- package/dist/wasmFuel.js.map +1 -0
- package/dist/wasmMemoryCap.d.ts +21 -0
- package/dist/wasmMemoryCap.d.ts.map +1 -0
- package/dist/wasmMemoryCap.js +58 -0
- package/dist/wasmMemoryCap.js.map +1 -0
- package/dist/workspaceSettings.d.ts +126 -17
- package/dist/workspaceSettings.d.ts.map +1 -1
- package/dist/workspaceSettings.js +21 -2
- package/dist/workspaceSettings.js.map +1 -1
- 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.
|
|
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
|
|
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"}
|
package/dist/sourceProviders.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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;;;
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
162
|
-
content
|
|
163
|
-
/** SHA-256
|
|
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
|
-
/**
|
|
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
|
|
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
|
package/dist/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA
|
|
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().
|
|
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
|
|
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"}
|
package/dist/taskManagement.d.ts
CHANGED
|
@@ -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":"AAAA
|
|
1
|
+
{"version":3,"file":"taskManagement.d.ts","sourceRoot":"","sources":["../src/taskManagement.ts"],"names":[],"mappings":"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"}
|
package/dist/taskManagement.js
CHANGED
|
@@ -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
|
|
1
|
+
{"version":3,"file":"taskManagement.js","sourceRoot":"","sources":["../src/taskManagement.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
|