@ailu-ai/contracts 2.0.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/LICENSE +201 -0
- package/dist/admin.d.ts +99 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +59 -0
- package/dist/admin.js.map +1 -0
- package/dist/admin.test.d.ts +2 -0
- package/dist/admin.test.d.ts.map +1 -0
- package/dist/admin.test.js +42 -0
- package/dist/admin.test.js.map +1 -0
- package/dist/approvals.d.ts +58 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +28 -0
- package/dist/approvals.js.map +1 -0
- package/dist/artifacts.d.ts +22 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +9 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/catalog.d.ts +626 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +69 -0
- package/dist/catalog.js.map +1 -0
- package/dist/catalog.test.d.ts +2 -0
- package/dist/catalog.test.d.ts.map +1 -0
- package/dist/catalog.test.js +98 -0
- package/dist/catalog.test.js.map +1 -0
- package/dist/compliance.d.ts +428 -0
- package/dist/compliance.d.ts.map +1 -0
- package/dist/compliance.js +80 -0
- package/dist/compliance.js.map +1 -0
- package/dist/connectors.d.ts +161 -0
- package/dist/connectors.d.ts.map +1 -0
- package/dist/connectors.js +49 -0
- package/dist/connectors.js.map +1 -0
- package/dist/error-envelope.d.ts +16 -0
- package/dist/error-envelope.d.ts.map +1 -0
- package/dist/error-envelope.js +7 -0
- package/dist/error-envelope.js.map +1 -0
- package/dist/eval.d.ts +144 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/eval.js +36 -0
- package/dist/eval.js.map +1 -0
- package/dist/events.d.ts +359 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +134 -0
- package/dist/events.js.map +1 -0
- package/dist/fleet.d.ts +147 -0
- package/dist/fleet.d.ts.map +1 -0
- package/dist/fleet.js +34 -0
- package/dist/fleet.js.map +1 -0
- package/dist/fs-policy.d.ts +101 -0
- package/dist/fs-policy.d.ts.map +1 -0
- package/dist/fs-policy.js +36 -0
- package/dist/fs-policy.js.map +1 -0
- package/dist/fs-policy.test.d.ts +2 -0
- package/dist/fs-policy.test.d.ts.map +1 -0
- package/dist/fs-policy.test.js +35 -0
- package/dist/fs-policy.test.js.map +1 -0
- package/dist/fs.d.ts +182 -0
- package/dist/fs.d.ts.map +1 -0
- package/dist/fs.js +59 -0
- package/dist/fs.js.map +1 -0
- package/dist/fs.test.d.ts +2 -0
- package/dist/fs.test.d.ts.map +1 -0
- package/dist/fs.test.js +35 -0
- package/dist/fs.test.js.map +1 -0
- package/dist/graphs.d.ts +951 -0
- package/dist/graphs.d.ts.map +1 -0
- package/dist/graphs.js +94 -0
- package/dist/graphs.js.map +1 -0
- package/dist/graphs.test.d.ts +2 -0
- package/dist/graphs.test.d.ts.map +1 -0
- package/dist/graphs.test.js +65 -0
- package/dist/graphs.test.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +9 -0
- package/dist/index.test.js.map +1 -0
- package/dist/knowledge.d.ts +315 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +111 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/knowledge.test.d.ts +2 -0
- package/dist/knowledge.test.d.ts.map +1 -0
- package/dist/knowledge.test.js +22 -0
- package/dist/knowledge.test.js.map +1 -0
- package/dist/node-metadata.d.ts +3096 -0
- package/dist/node-metadata.d.ts.map +1 -0
- package/dist/node-metadata.js +184 -0
- package/dist/node-metadata.js.map +1 -0
- package/dist/node-metadata.test.d.ts +2 -0
- package/dist/node-metadata.test.d.ts.map +1 -0
- package/dist/node-metadata.test.js +126 -0
- package/dist/node-metadata.test.js.map +1 -0
- package/dist/observability.d.ts +154 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +34 -0
- package/dist/observability.js.map +1 -0
- package/dist/pii.d.ts +88 -0
- package/dist/pii.d.ts.map +1 -0
- package/dist/pii.js +42 -0
- package/dist/pii.js.map +1 -0
- package/dist/principal.d.ts +81 -0
- package/dist/principal.d.ts.map +1 -0
- package/dist/principal.js +48 -0
- package/dist/principal.js.map +1 -0
- package/dist/principal.test.d.ts +2 -0
- package/dist/principal.test.d.ts.map +1 -0
- package/dist/principal.test.js +44 -0
- package/dist/principal.test.js.map +1 -0
- package/dist/registries.d.ts +26 -0
- package/dist/registries.d.ts.map +1 -0
- package/dist/registries.js +11 -0
- package/dist/registries.js.map +1 -0
- package/dist/router.d.ts +48 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +22 -0
- package/dist/router.js.map +1 -0
- package/dist/runs.d.ts +270 -0
- package/dist/runs.d.ts.map +1 -0
- package/dist/runs.js +108 -0
- package/dist/runs.js.map +1 -0
- package/dist/runs.test.d.ts +2 -0
- package/dist/runs.test.d.ts.map +1 -0
- package/dist/runs.test.js +79 -0
- package/dist/runs.test.js.map +1 -0
- package/dist/search.d.ts +88 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +23 -0
- package/dist/search.js.map +1 -0
- package/dist/skills.d.ts +208 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +63 -0
- package/dist/skills.js.map +1 -0
- package/dist/tenant.d.ts +204 -0
- package/dist/tenant.d.ts.map +1 -0
- package/dist/tenant.js +46 -0
- package/dist/tenant.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet.js","sourceRoot":"","sources":["../src/fleet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,kBAAkB;IAC1B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACpC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAC;AAOH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,kBAAkB;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,EAAE,kBAAkB;CAC3B,CAAC,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The governed virtual filesystem per-path permission policy (ADR 0024 phase 2d) —
|
|
4
|
+
* the API↔Studio boundary for managing fs access, modeled on the per-namespace PII
|
|
5
|
+
* policy (see `pii.ts`). Rules are owner-only; the control plane compiles a run's rules
|
|
6
|
+
* into the engine's `EngineSpec.fsPolicy` (fail-closed: an unmatched path → `read`).
|
|
7
|
+
*/
|
|
8
|
+
/** A filesystem permission verb: `deny` < `read` < `gate` < `write`. */
|
|
9
|
+
export declare const FsPermVerbSchema: z.ZodEnum<["deny", "read", "write", "gate"]>;
|
|
10
|
+
export type FsPermVerb = z.infer<typeof FsPermVerbSchema>;
|
|
11
|
+
/** One per-path rule: a glob (`*` within a segment, `**` across) mapped to a verb. */
|
|
12
|
+
export declare const FsPathRuleSchema: z.ZodObject<{
|
|
13
|
+
glob: z.ZodString;
|
|
14
|
+
verb: z.ZodEnum<["deny", "read", "write", "gate"]>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
glob: string;
|
|
17
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
18
|
+
}, {
|
|
19
|
+
glob: string;
|
|
20
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
21
|
+
}>;
|
|
22
|
+
export type FsPathRule = z.infer<typeof FsPathRuleSchema>;
|
|
23
|
+
/** Owner-only PUT body: replace a namespace's fs path rules. */
|
|
24
|
+
export declare const SetFsPolicyDtoSchema: z.ZodObject<{
|
|
25
|
+
rules: z.ZodArray<z.ZodObject<{
|
|
26
|
+
glob: z.ZodString;
|
|
27
|
+
verb: z.ZodEnum<["deny", "read", "write", "gate"]>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
glob: string;
|
|
30
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
31
|
+
}, {
|
|
32
|
+
glob: string;
|
|
33
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
34
|
+
}>, "many">;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
rules: {
|
|
37
|
+
glob: string;
|
|
38
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
39
|
+
}[];
|
|
40
|
+
}, {
|
|
41
|
+
rules: {
|
|
42
|
+
glob: string;
|
|
43
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
44
|
+
}[];
|
|
45
|
+
}>;
|
|
46
|
+
export type SetFsPolicyDto = z.infer<typeof SetFsPolicyDtoSchema>;
|
|
47
|
+
/** The resolved policy for a namespace, with server-computed capability flags. */
|
|
48
|
+
export declare const FsPolicyDtoSchema: z.ZodObject<{
|
|
49
|
+
namespace: z.ZodString;
|
|
50
|
+
rules: z.ZodArray<z.ZodObject<{
|
|
51
|
+
glob: z.ZodString;
|
|
52
|
+
verb: z.ZodEnum<["deny", "read", "write", "gate"]>;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
glob: string;
|
|
55
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
56
|
+
}, {
|
|
57
|
+
glob: string;
|
|
58
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
59
|
+
}>, "many">;
|
|
60
|
+
/** `true` when the caller's tenant role may edit this policy (owner-only). */
|
|
61
|
+
canEditPolicy: z.ZodBoolean;
|
|
62
|
+
}, "strip", z.ZodTypeAny, {
|
|
63
|
+
namespace: string;
|
|
64
|
+
rules: {
|
|
65
|
+
glob: string;
|
|
66
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
67
|
+
}[];
|
|
68
|
+
canEditPolicy: boolean;
|
|
69
|
+
}, {
|
|
70
|
+
namespace: string;
|
|
71
|
+
rules: {
|
|
72
|
+
glob: string;
|
|
73
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
74
|
+
}[];
|
|
75
|
+
canEditPolicy: boolean;
|
|
76
|
+
}>;
|
|
77
|
+
export type FsPolicyDto = z.infer<typeof FsPolicyDtoSchema>;
|
|
78
|
+
/** Resolve a single path against a namespace's policy (for the editor / a preview). */
|
|
79
|
+
export declare const FsResolvedPolicyDtoSchema: z.ZodObject<{
|
|
80
|
+
path: z.ZodString;
|
|
81
|
+
verb: z.ZodEnum<["deny", "read", "write", "gate"]>;
|
|
82
|
+
canRead: z.ZodBoolean;
|
|
83
|
+
/** `true` when `verb` is `write` or `gate`. */
|
|
84
|
+
canWrite: z.ZodBoolean;
|
|
85
|
+
/** `true` when `verb` is `gate` (a write routes through an approval). */
|
|
86
|
+
requiresGate: z.ZodBoolean;
|
|
87
|
+
}, "strip", z.ZodTypeAny, {
|
|
88
|
+
path: string;
|
|
89
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
90
|
+
canRead: boolean;
|
|
91
|
+
canWrite: boolean;
|
|
92
|
+
requiresGate: boolean;
|
|
93
|
+
}, {
|
|
94
|
+
path: string;
|
|
95
|
+
verb: "write" | "deny" | "read" | "gate";
|
|
96
|
+
canRead: boolean;
|
|
97
|
+
canWrite: boolean;
|
|
98
|
+
requiresGate: boolean;
|
|
99
|
+
}>;
|
|
100
|
+
export type FsResolvedPolicyDto = z.infer<typeof FsResolvedPolicyDtoSchema>;
|
|
101
|
+
//# sourceMappingURL=fs-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-policy.d.ts","sourceRoot":"","sources":["../src/fs-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AAEH,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,8CAA4C,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,sFAAsF;AACtF,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,gEAAgE;AAChE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAE/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,kFAAkF;AAClF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;IAG5B,8EAA8E;;;;;;;;;;;;;;;;EAE9E,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,uFAAuF;AACvF,eAAO,MAAM,yBAAyB;;;;IAIpC,+CAA+C;;IAE/C,yEAAyE;;;;;;;;;;;;;;EAEzE,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The governed virtual filesystem per-path permission policy (ADR 0024 phase 2d) —
|
|
4
|
+
* the API↔Studio boundary for managing fs access, modeled on the per-namespace PII
|
|
5
|
+
* policy (see `pii.ts`). Rules are owner-only; the control plane compiles a run's rules
|
|
6
|
+
* into the engine's `EngineSpec.fsPolicy` (fail-closed: an unmatched path → `read`).
|
|
7
|
+
*/
|
|
8
|
+
/** A filesystem permission verb: `deny` < `read` < `gate` < `write`. */
|
|
9
|
+
export const FsPermVerbSchema = z.enum(["deny", "read", "write", "gate"]);
|
|
10
|
+
/** One per-path rule: a glob (`*` within a segment, `**` across) mapped to a verb. */
|
|
11
|
+
export const FsPathRuleSchema = z.object({
|
|
12
|
+
glob: z.string().min(1),
|
|
13
|
+
verb: FsPermVerbSchema
|
|
14
|
+
});
|
|
15
|
+
/** Owner-only PUT body: replace a namespace's fs path rules. */
|
|
16
|
+
export const SetFsPolicyDtoSchema = z.object({
|
|
17
|
+
rules: z.array(FsPathRuleSchema)
|
|
18
|
+
});
|
|
19
|
+
/** The resolved policy for a namespace, with server-computed capability flags. */
|
|
20
|
+
export const FsPolicyDtoSchema = z.object({
|
|
21
|
+
namespace: z.string(),
|
|
22
|
+
rules: z.array(FsPathRuleSchema),
|
|
23
|
+
/** `true` when the caller's tenant role may edit this policy (owner-only). */
|
|
24
|
+
canEditPolicy: z.boolean()
|
|
25
|
+
});
|
|
26
|
+
/** Resolve a single path against a namespace's policy (for the editor / a preview). */
|
|
27
|
+
export const FsResolvedPolicyDtoSchema = z.object({
|
|
28
|
+
path: z.string(),
|
|
29
|
+
verb: FsPermVerbSchema,
|
|
30
|
+
canRead: z.boolean(),
|
|
31
|
+
/** `true` when `verb` is `write` or `gate`. */
|
|
32
|
+
canWrite: z.boolean(),
|
|
33
|
+
/** `true` when `verb` is `gate` (a write routes through an approval). */
|
|
34
|
+
requiresGate: z.boolean()
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=fs-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-policy.js","sourceRoot":"","sources":["../src/fs-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAG1E,sFAAsF;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAC;AAGH,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;CACjC,CAAC,CAAC;AAGH,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;IAChC,8EAA8E;IAC9E,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;CAC3B,CAAC,CAAC;AAGH,uFAAuF;AACvF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,yEAAyE;IACzE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE;CAC1B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-policy.test.d.ts","sourceRoot":"","sources":["../src/fs-policy.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { FsResolvedPolicyDtoSchema, SetFsPolicyDtoSchema, FsPathRuleSchema } from "./fs-policy.js";
|
|
3
|
+
/**
|
|
4
|
+
* The fs policy contract is the API↔Studio boundary for the owner-only per-path
|
|
5
|
+
* permission rules (ADR 0024 phase 2d). Verbs are a closed set; a resolved policy
|
|
6
|
+
* carries server-computed capability flags.
|
|
7
|
+
*/
|
|
8
|
+
describe("@ailu-ai/contracts — fs-policy", () => {
|
|
9
|
+
it("parses a set-policy body with valid rules", () => {
|
|
10
|
+
const body = SetFsPolicyDtoSchema.parse({
|
|
11
|
+
rules: [
|
|
12
|
+
{ glob: "scratch/**", verb: "write" },
|
|
13
|
+
{ glob: "review/**", verb: "gate" },
|
|
14
|
+
{ glob: "secret/**", verb: "deny" }
|
|
15
|
+
]
|
|
16
|
+
});
|
|
17
|
+
expect(body.rules).toHaveLength(3);
|
|
18
|
+
expect(body.rules[1]?.verb).toBe("gate");
|
|
19
|
+
});
|
|
20
|
+
it("rejects an unknown verb", () => {
|
|
21
|
+
expect(FsPathRuleSchema.safeParse({ glob: "x/**", verb: "execute" }).success).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
it("parses a resolved policy with capability flags", () => {
|
|
24
|
+
const resolved = FsResolvedPolicyDtoSchema.parse({
|
|
25
|
+
path: "review/doc.md",
|
|
26
|
+
verb: "gate",
|
|
27
|
+
canRead: true,
|
|
28
|
+
canWrite: true,
|
|
29
|
+
requiresGate: true
|
|
30
|
+
});
|
|
31
|
+
expect(resolved.requiresGate).toBe(true);
|
|
32
|
+
expect(resolved.canWrite).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=fs-policy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-policy.test.js","sourceRoot":"","sources":["../src/fs-policy.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAExB;;;;GAIG;AACH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACtC,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE;gBACrC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;gBACnC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;aACpC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC;YAC/C,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/fs.d.ts
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The wire contract for the external durable filesystem backend (ADR 0024 phase 2e).
|
|
4
|
+
* When `AILU_FS_BACKEND_URL` is set, the Rust engine POSTs `{ op, runId, ... }` to the
|
|
5
|
+
* service and expects either the op's result or `{ error: FsError }`. These schemas type
|
|
6
|
+
* that boundary (for a service implementer and for Studio rendering of fs content/diffs);
|
|
7
|
+
* they mirror the Rust `ailu-fs-backend` types 1:1 (camelCase).
|
|
8
|
+
*/
|
|
9
|
+
export declare const ARTIFACT_MEDIA_TYPES: readonly ["application/json", "text/plain", "text/markdown", "application/octet-stream"];
|
|
10
|
+
export declare const ArtifactMediaTypeSchema: z.ZodEnum<["application/json", "text/plain", "text/markdown", "application/octet-stream"]>;
|
|
11
|
+
/** A file's content (read result). `content` is UTF-8 text, JSON text, or base64 by mediaType. */
|
|
12
|
+
export declare const FileContentDtoSchema: z.ZodObject<{
|
|
13
|
+
path: z.ZodString;
|
|
14
|
+
content: z.ZodString;
|
|
15
|
+
mediaType: z.ZodEnum<["application/json", "text/plain", "text/markdown", "application/octet-stream"]>;
|
|
16
|
+
version: z.ZodNumber;
|
|
17
|
+
createdAt: z.ZodString;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
path: string;
|
|
20
|
+
content: string;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
version: number;
|
|
23
|
+
mediaType: "application/json" | "text/plain" | "text/markdown" | "application/octet-stream";
|
|
24
|
+
}, {
|
|
25
|
+
path: string;
|
|
26
|
+
content: string;
|
|
27
|
+
createdAt: string;
|
|
28
|
+
version: number;
|
|
29
|
+
mediaType: "application/json" | "text/plain" | "text/markdown" | "application/octet-stream";
|
|
30
|
+
}>;
|
|
31
|
+
export type FileContentDto = z.infer<typeof FileContentDtoSchema>;
|
|
32
|
+
/** One `ls` entry; `isDir: true` is a synthetic directory over the flat keyspace. */
|
|
33
|
+
export declare const FileEntryDtoSchema: z.ZodObject<{
|
|
34
|
+
path: z.ZodString;
|
|
35
|
+
isDir: z.ZodBoolean;
|
|
36
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
path: string;
|
|
39
|
+
isDir: boolean;
|
|
40
|
+
version?: number | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
path: string;
|
|
43
|
+
isDir: boolean;
|
|
44
|
+
version?: number | undefined;
|
|
45
|
+
}>;
|
|
46
|
+
export type FileEntryDto = z.infer<typeof FileEntryDtoSchema>;
|
|
47
|
+
/** A line-based edit op (1-indexed inclusive), tagged by `op`. */
|
|
48
|
+
export declare const EditOpDtoSchema: z.ZodDiscriminatedUnion<"op", [z.ZodObject<{
|
|
49
|
+
op: z.ZodLiteral<"replace">;
|
|
50
|
+
startLine: z.ZodNumber;
|
|
51
|
+
endLine: z.ZodNumber;
|
|
52
|
+
text: z.ZodString;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
text: string;
|
|
55
|
+
op: "replace";
|
|
56
|
+
startLine: number;
|
|
57
|
+
endLine: number;
|
|
58
|
+
}, {
|
|
59
|
+
text: string;
|
|
60
|
+
op: "replace";
|
|
61
|
+
startLine: number;
|
|
62
|
+
endLine: number;
|
|
63
|
+
}>, z.ZodObject<{
|
|
64
|
+
op: z.ZodLiteral<"insert">;
|
|
65
|
+
afterLine: z.ZodNumber;
|
|
66
|
+
text: z.ZodString;
|
|
67
|
+
}, "strip", z.ZodTypeAny, {
|
|
68
|
+
text: string;
|
|
69
|
+
op: "insert";
|
|
70
|
+
afterLine: number;
|
|
71
|
+
}, {
|
|
72
|
+
text: string;
|
|
73
|
+
op: "insert";
|
|
74
|
+
afterLine: number;
|
|
75
|
+
}>, z.ZodObject<{
|
|
76
|
+
op: z.ZodLiteral<"delete">;
|
|
77
|
+
startLine: z.ZodNumber;
|
|
78
|
+
endLine: z.ZodNumber;
|
|
79
|
+
}, "strip", z.ZodTypeAny, {
|
|
80
|
+
op: "delete";
|
|
81
|
+
startLine: number;
|
|
82
|
+
endLine: number;
|
|
83
|
+
}, {
|
|
84
|
+
op: "delete";
|
|
85
|
+
startLine: number;
|
|
86
|
+
endLine: number;
|
|
87
|
+
}>]>;
|
|
88
|
+
export type EditOpDto = z.infer<typeof EditOpDtoSchema>;
|
|
89
|
+
/** A `grep` hit. */
|
|
90
|
+
export declare const GrepMatchDtoSchema: z.ZodObject<{
|
|
91
|
+
path: z.ZodString;
|
|
92
|
+
lineNumber: z.ZodNumber;
|
|
93
|
+
lineText: z.ZodString;
|
|
94
|
+
}, "strip", z.ZodTypeAny, {
|
|
95
|
+
path: string;
|
|
96
|
+
lineNumber: number;
|
|
97
|
+
lineText: string;
|
|
98
|
+
}, {
|
|
99
|
+
path: string;
|
|
100
|
+
lineNumber: number;
|
|
101
|
+
lineText: string;
|
|
102
|
+
}>;
|
|
103
|
+
export type GrepMatchDto = z.infer<typeof GrepMatchDtoSchema>;
|
|
104
|
+
/** A filesystem error, tagged by `kind` (mirrors the Rust `FsError`). */
|
|
105
|
+
export declare const FsErrorDtoSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
|
|
106
|
+
kind: z.ZodLiteral<"notFound">;
|
|
107
|
+
path: z.ZodString;
|
|
108
|
+
}, "strip", z.ZodTypeAny, {
|
|
109
|
+
path: string;
|
|
110
|
+
kind: "notFound";
|
|
111
|
+
}, {
|
|
112
|
+
path: string;
|
|
113
|
+
kind: "notFound";
|
|
114
|
+
}>, z.ZodObject<{
|
|
115
|
+
kind: z.ZodLiteral<"permissionDenied">;
|
|
116
|
+
action: z.ZodString;
|
|
117
|
+
path: z.ZodString;
|
|
118
|
+
}, "strip", z.ZodTypeAny, {
|
|
119
|
+
path: string;
|
|
120
|
+
action: string;
|
|
121
|
+
kind: "permissionDenied";
|
|
122
|
+
}, {
|
|
123
|
+
path: string;
|
|
124
|
+
action: string;
|
|
125
|
+
kind: "permissionDenied";
|
|
126
|
+
}>, z.ZodObject<{
|
|
127
|
+
kind: z.ZodLiteral<"invalidPath">;
|
|
128
|
+
reason: z.ZodString;
|
|
129
|
+
}, "strip", z.ZodTypeAny, {
|
|
130
|
+
reason: string;
|
|
131
|
+
kind: "invalidPath";
|
|
132
|
+
}, {
|
|
133
|
+
reason: string;
|
|
134
|
+
kind: "invalidPath";
|
|
135
|
+
}>, z.ZodObject<{
|
|
136
|
+
kind: z.ZodLiteral<"invalidEdit">;
|
|
137
|
+
reason: z.ZodString;
|
|
138
|
+
}, "strip", z.ZodTypeAny, {
|
|
139
|
+
reason: string;
|
|
140
|
+
kind: "invalidEdit";
|
|
141
|
+
}, {
|
|
142
|
+
reason: string;
|
|
143
|
+
kind: "invalidEdit";
|
|
144
|
+
}>, z.ZodObject<{
|
|
145
|
+
kind: z.ZodLiteral<"notSupported">;
|
|
146
|
+
}, "strip", z.ZodTypeAny, {
|
|
147
|
+
kind: "notSupported";
|
|
148
|
+
}, {
|
|
149
|
+
kind: "notSupported";
|
|
150
|
+
}>, z.ZodObject<{
|
|
151
|
+
kind: z.ZodLiteral<"serviceUnavailable">;
|
|
152
|
+
reason: z.ZodString;
|
|
153
|
+
}, "strip", z.ZodTypeAny, {
|
|
154
|
+
reason: string;
|
|
155
|
+
kind: "serviceUnavailable";
|
|
156
|
+
}, {
|
|
157
|
+
reason: string;
|
|
158
|
+
kind: "serviceUnavailable";
|
|
159
|
+
}>, z.ZodObject<{
|
|
160
|
+
kind: z.ZodLiteral<"backend">;
|
|
161
|
+
reason: z.ZodString;
|
|
162
|
+
}, "strip", z.ZodTypeAny, {
|
|
163
|
+
reason: string;
|
|
164
|
+
kind: "backend";
|
|
165
|
+
}, {
|
|
166
|
+
reason: string;
|
|
167
|
+
kind: "backend";
|
|
168
|
+
}>]>;
|
|
169
|
+
export type FsErrorDto = z.infer<typeof FsErrorDtoSchema>;
|
|
170
|
+
/** The request envelope POSTed to the external backend: `{ op, runId, ...args }`. */
|
|
171
|
+
export declare const FsBackendRequestDtoSchema: z.ZodObject<{
|
|
172
|
+
op: z.ZodEnum<["read", "write", "edit", "delete", "rename", "ls", "glob", "grep"]>;
|
|
173
|
+
runId: z.ZodString;
|
|
174
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
175
|
+
op: z.ZodEnum<["read", "write", "edit", "delete", "rename", "ls", "glob", "grep"]>;
|
|
176
|
+
runId: z.ZodString;
|
|
177
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
178
|
+
op: z.ZodEnum<["read", "write", "edit", "delete", "rename", "ls", "glob", "grep"]>;
|
|
179
|
+
runId: z.ZodString;
|
|
180
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
181
|
+
export type FsBackendRequestDto = z.infer<typeof FsBackendRequestDtoSchema>;
|
|
182
|
+
//# sourceMappingURL=fs.d.ts.map
|
package/dist/fs.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AAEH,eAAO,MAAM,oBAAoB,0FAKvB,CAAC;AACX,eAAO,MAAM,uBAAuB,4FAA+B,CAAC;AAEpE,kGAAkG;AAClG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,qFAAqF;AACrF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,kEAAkE;AAClE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAI1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,oBAAoB;AACpB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,yEAAyE;AACzE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQ3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,qFAAqF;AACrF,eAAO,MAAM,yBAAyB;;;;;;;;;gCAKtB,CAAC;AACjB,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
package/dist/fs.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The wire contract for the external durable filesystem backend (ADR 0024 phase 2e).
|
|
4
|
+
* When `AILU_FS_BACKEND_URL` is set, the Rust engine POSTs `{ op, runId, ... }` to the
|
|
5
|
+
* service and expects either the op's result or `{ error: FsError }`. These schemas type
|
|
6
|
+
* that boundary (for a service implementer and for Studio rendering of fs content/diffs);
|
|
7
|
+
* they mirror the Rust `ailu-fs-backend` types 1:1 (camelCase).
|
|
8
|
+
*/
|
|
9
|
+
export const ARTIFACT_MEDIA_TYPES = [
|
|
10
|
+
"application/json",
|
|
11
|
+
"text/plain",
|
|
12
|
+
"text/markdown",
|
|
13
|
+
"application/octet-stream"
|
|
14
|
+
];
|
|
15
|
+
export const ArtifactMediaTypeSchema = z.enum(ARTIFACT_MEDIA_TYPES);
|
|
16
|
+
/** A file's content (read result). `content` is UTF-8 text, JSON text, or base64 by mediaType. */
|
|
17
|
+
export const FileContentDtoSchema = z.object({
|
|
18
|
+
path: z.string(),
|
|
19
|
+
content: z.string(),
|
|
20
|
+
mediaType: ArtifactMediaTypeSchema,
|
|
21
|
+
version: z.number().int(),
|
|
22
|
+
createdAt: z.string()
|
|
23
|
+
});
|
|
24
|
+
/** One `ls` entry; `isDir: true` is a synthetic directory over the flat keyspace. */
|
|
25
|
+
export const FileEntryDtoSchema = z.object({
|
|
26
|
+
path: z.string(),
|
|
27
|
+
isDir: z.boolean(),
|
|
28
|
+
version: z.number().int().optional()
|
|
29
|
+
});
|
|
30
|
+
/** A line-based edit op (1-indexed inclusive), tagged by `op`. */
|
|
31
|
+
export const EditOpDtoSchema = z.discriminatedUnion("op", [
|
|
32
|
+
z.object({ op: z.literal("replace"), startLine: z.number().int(), endLine: z.number().int(), text: z.string() }),
|
|
33
|
+
z.object({ op: z.literal("insert"), afterLine: z.number().int(), text: z.string() }),
|
|
34
|
+
z.object({ op: z.literal("delete"), startLine: z.number().int(), endLine: z.number().int() })
|
|
35
|
+
]);
|
|
36
|
+
/** A `grep` hit. */
|
|
37
|
+
export const GrepMatchDtoSchema = z.object({
|
|
38
|
+
path: z.string(),
|
|
39
|
+
lineNumber: z.number().int(),
|
|
40
|
+
lineText: z.string()
|
|
41
|
+
});
|
|
42
|
+
/** A filesystem error, tagged by `kind` (mirrors the Rust `FsError`). */
|
|
43
|
+
export const FsErrorDtoSchema = z.discriminatedUnion("kind", [
|
|
44
|
+
z.object({ kind: z.literal("notFound"), path: z.string() }),
|
|
45
|
+
z.object({ kind: z.literal("permissionDenied"), action: z.string(), path: z.string() }),
|
|
46
|
+
z.object({ kind: z.literal("invalidPath"), reason: z.string() }),
|
|
47
|
+
z.object({ kind: z.literal("invalidEdit"), reason: z.string() }),
|
|
48
|
+
z.object({ kind: z.literal("notSupported") }),
|
|
49
|
+
z.object({ kind: z.literal("serviceUnavailable"), reason: z.string() }),
|
|
50
|
+
z.object({ kind: z.literal("backend"), reason: z.string() })
|
|
51
|
+
]);
|
|
52
|
+
/** The request envelope POSTed to the external backend: `{ op, runId, ...args }`. */
|
|
53
|
+
export const FsBackendRequestDtoSchema = z
|
|
54
|
+
.object({
|
|
55
|
+
op: z.enum(["read", "write", "edit", "delete", "rename", "ls", "glob", "grep"]),
|
|
56
|
+
runId: z.string()
|
|
57
|
+
})
|
|
58
|
+
.passthrough();
|
|
59
|
+
//# sourceMappingURL=fs.js.map
|
package/dist/fs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.test.d.ts","sourceRoot":"","sources":["../src/fs.test.ts"],"names":[],"mappings":""}
|
package/dist/fs.test.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { EditOpDtoSchema, FileContentDtoSchema, FsBackendRequestDtoSchema, FsErrorDtoSchema } from "./fs.js";
|
|
3
|
+
/**
|
|
4
|
+
* The external fs backend wire contract (ADR 0024 phase 2e). These schemas mirror the
|
|
5
|
+
* Rust `ailu-fs-backend` types 1:1 — a round-trip here guards the engine↔service
|
|
6
|
+
* boundary (and Studio's rendering of fs content / diffs).
|
|
7
|
+
*/
|
|
8
|
+
describe("@ailu-ai/contracts — fs (external backend wire)", () => {
|
|
9
|
+
it("parses a FileContent read result", () => {
|
|
10
|
+
const file = FileContentDtoSchema.parse({
|
|
11
|
+
path: "notes.md",
|
|
12
|
+
content: "hi",
|
|
13
|
+
mediaType: "text/markdown",
|
|
14
|
+
version: 2,
|
|
15
|
+
createdAt: "t"
|
|
16
|
+
});
|
|
17
|
+
expect(file.version).toBe(2);
|
|
18
|
+
});
|
|
19
|
+
it("parses the edit-op discriminated union and rejects an unknown op", () => {
|
|
20
|
+
expect(EditOpDtoSchema.parse({ op: "replace", startLine: 1, endLine: 1, text: "x" }).op).toBe("replace");
|
|
21
|
+
expect(EditOpDtoSchema.parse({ op: "insert", afterLine: 0, text: "x" }).op).toBe("insert");
|
|
22
|
+
expect(EditOpDtoSchema.safeParse({ op: "truncate", startLine: 1, endLine: 1 }).success).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
it("parses a tagged FsError", () => {
|
|
25
|
+
const err = FsErrorDtoSchema.parse({ kind: "notFound", path: "a/b" });
|
|
26
|
+
expect(err.kind).toBe("notFound");
|
|
27
|
+
expect(FsErrorDtoSchema.safeParse({ kind: "bogus" }).success).toBe(false);
|
|
28
|
+
});
|
|
29
|
+
it("accepts a backend request envelope with op-specific args", () => {
|
|
30
|
+
const req = FsBackendRequestDtoSchema.parse({ op: "write", runId: "run-1", path: "scratch/a", content: "x" });
|
|
31
|
+
expect(req.op).toBe("write");
|
|
32
|
+
expect(FsBackendRequestDtoSchema.safeParse({ op: "exec", runId: "r" }).success).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=fs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.test.js","sourceRoot":"","sources":["../src/fs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,eAAe;YAC1B,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3F,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,GAAG,GAAG,yBAAyB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9G,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|