@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.
Files changed (142) hide show
  1. package/LICENSE +201 -0
  2. package/dist/admin.d.ts +99 -0
  3. package/dist/admin.d.ts.map +1 -0
  4. package/dist/admin.js +59 -0
  5. package/dist/admin.js.map +1 -0
  6. package/dist/admin.test.d.ts +2 -0
  7. package/dist/admin.test.d.ts.map +1 -0
  8. package/dist/admin.test.js +42 -0
  9. package/dist/admin.test.js.map +1 -0
  10. package/dist/approvals.d.ts +58 -0
  11. package/dist/approvals.d.ts.map +1 -0
  12. package/dist/approvals.js +28 -0
  13. package/dist/approvals.js.map +1 -0
  14. package/dist/artifacts.d.ts +22 -0
  15. package/dist/artifacts.d.ts.map +1 -0
  16. package/dist/artifacts.js +9 -0
  17. package/dist/artifacts.js.map +1 -0
  18. package/dist/catalog.d.ts +626 -0
  19. package/dist/catalog.d.ts.map +1 -0
  20. package/dist/catalog.js +69 -0
  21. package/dist/catalog.js.map +1 -0
  22. package/dist/catalog.test.d.ts +2 -0
  23. package/dist/catalog.test.d.ts.map +1 -0
  24. package/dist/catalog.test.js +98 -0
  25. package/dist/catalog.test.js.map +1 -0
  26. package/dist/compliance.d.ts +428 -0
  27. package/dist/compliance.d.ts.map +1 -0
  28. package/dist/compliance.js +80 -0
  29. package/dist/compliance.js.map +1 -0
  30. package/dist/connectors.d.ts +161 -0
  31. package/dist/connectors.d.ts.map +1 -0
  32. package/dist/connectors.js +49 -0
  33. package/dist/connectors.js.map +1 -0
  34. package/dist/error-envelope.d.ts +16 -0
  35. package/dist/error-envelope.d.ts.map +1 -0
  36. package/dist/error-envelope.js +7 -0
  37. package/dist/error-envelope.js.map +1 -0
  38. package/dist/eval.d.ts +144 -0
  39. package/dist/eval.d.ts.map +1 -0
  40. package/dist/eval.js +36 -0
  41. package/dist/eval.js.map +1 -0
  42. package/dist/events.d.ts +359 -0
  43. package/dist/events.d.ts.map +1 -0
  44. package/dist/events.js +134 -0
  45. package/dist/events.js.map +1 -0
  46. package/dist/fleet.d.ts +147 -0
  47. package/dist/fleet.d.ts.map +1 -0
  48. package/dist/fleet.js +34 -0
  49. package/dist/fleet.js.map +1 -0
  50. package/dist/fs-policy.d.ts +101 -0
  51. package/dist/fs-policy.d.ts.map +1 -0
  52. package/dist/fs-policy.js +36 -0
  53. package/dist/fs-policy.js.map +1 -0
  54. package/dist/fs-policy.test.d.ts +2 -0
  55. package/dist/fs-policy.test.d.ts.map +1 -0
  56. package/dist/fs-policy.test.js +35 -0
  57. package/dist/fs-policy.test.js.map +1 -0
  58. package/dist/fs.d.ts +182 -0
  59. package/dist/fs.d.ts.map +1 -0
  60. package/dist/fs.js +59 -0
  61. package/dist/fs.js.map +1 -0
  62. package/dist/fs.test.d.ts +2 -0
  63. package/dist/fs.test.d.ts.map +1 -0
  64. package/dist/fs.test.js +35 -0
  65. package/dist/fs.test.js.map +1 -0
  66. package/dist/graphs.d.ts +951 -0
  67. package/dist/graphs.d.ts.map +1 -0
  68. package/dist/graphs.js +94 -0
  69. package/dist/graphs.js.map +1 -0
  70. package/dist/graphs.test.d.ts +2 -0
  71. package/dist/graphs.test.d.ts.map +1 -0
  72. package/dist/graphs.test.js +65 -0
  73. package/dist/graphs.test.js.map +1 -0
  74. package/dist/index.d.ts +25 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +25 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/index.test.d.ts +2 -0
  79. package/dist/index.test.d.ts.map +1 -0
  80. package/dist/index.test.js +9 -0
  81. package/dist/index.test.js.map +1 -0
  82. package/dist/knowledge.d.ts +315 -0
  83. package/dist/knowledge.d.ts.map +1 -0
  84. package/dist/knowledge.js +111 -0
  85. package/dist/knowledge.js.map +1 -0
  86. package/dist/knowledge.test.d.ts +2 -0
  87. package/dist/knowledge.test.d.ts.map +1 -0
  88. package/dist/knowledge.test.js +22 -0
  89. package/dist/knowledge.test.js.map +1 -0
  90. package/dist/node-metadata.d.ts +3096 -0
  91. package/dist/node-metadata.d.ts.map +1 -0
  92. package/dist/node-metadata.js +184 -0
  93. package/dist/node-metadata.js.map +1 -0
  94. package/dist/node-metadata.test.d.ts +2 -0
  95. package/dist/node-metadata.test.d.ts.map +1 -0
  96. package/dist/node-metadata.test.js +126 -0
  97. package/dist/node-metadata.test.js.map +1 -0
  98. package/dist/observability.d.ts +154 -0
  99. package/dist/observability.d.ts.map +1 -0
  100. package/dist/observability.js +34 -0
  101. package/dist/observability.js.map +1 -0
  102. package/dist/pii.d.ts +88 -0
  103. package/dist/pii.d.ts.map +1 -0
  104. package/dist/pii.js +42 -0
  105. package/dist/pii.js.map +1 -0
  106. package/dist/principal.d.ts +81 -0
  107. package/dist/principal.d.ts.map +1 -0
  108. package/dist/principal.js +48 -0
  109. package/dist/principal.js.map +1 -0
  110. package/dist/principal.test.d.ts +2 -0
  111. package/dist/principal.test.d.ts.map +1 -0
  112. package/dist/principal.test.js +44 -0
  113. package/dist/principal.test.js.map +1 -0
  114. package/dist/registries.d.ts +26 -0
  115. package/dist/registries.d.ts.map +1 -0
  116. package/dist/registries.js +11 -0
  117. package/dist/registries.js.map +1 -0
  118. package/dist/router.d.ts +48 -0
  119. package/dist/router.d.ts.map +1 -0
  120. package/dist/router.js +22 -0
  121. package/dist/router.js.map +1 -0
  122. package/dist/runs.d.ts +270 -0
  123. package/dist/runs.d.ts.map +1 -0
  124. package/dist/runs.js +108 -0
  125. package/dist/runs.js.map +1 -0
  126. package/dist/runs.test.d.ts +2 -0
  127. package/dist/runs.test.d.ts.map +1 -0
  128. package/dist/runs.test.js +79 -0
  129. package/dist/runs.test.js.map +1 -0
  130. package/dist/search.d.ts +88 -0
  131. package/dist/search.d.ts.map +1 -0
  132. package/dist/search.js +23 -0
  133. package/dist/search.js.map +1 -0
  134. package/dist/skills.d.ts +208 -0
  135. package/dist/skills.d.ts.map +1 -0
  136. package/dist/skills.js +63 -0
  137. package/dist/skills.js.map +1 -0
  138. package/dist/tenant.d.ts +204 -0
  139. package/dist/tenant.d.ts.map +1 -0
  140. package/dist/tenant.js +46 -0
  141. package/dist/tenant.js.map +1 -0
  142. package/package.json +33 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-metadata.d.ts","sourceRoot":"","sources":["../src/node-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ import { z } from "zod";
2
+ import { ModelTierDtoSchema } from "./catalog.js";
3
+ /**
4
+ * The SHARED CARRIER for catalog-backed graph nodes.
5
+ *
6
+ * A graph node that is a catalog COMPONENT carries `node.metadata.component =
7
+ * { kind, params }`; a catalog AGENT node carries `node.metadata.agent =
8
+ * { provider?, model?, tier?, system?, toolNames?, maxIterations?,
9
+ * suspendForApproval?, approvalToolNames?, outputChannel?, outputStyle?,
10
+ * contextBudget?, todosChannel?, enableFs?, resolvedMiddleware? }`.
11
+ *
12
+ * The graph editor EMITS these into `node.metadata`; the API run path READS
13
+ * `node.metadata` to assemble `EngineSpec.componentNodes` (kind + params) and
14
+ * `EngineSpec.agents` (the agent spec). Typing the carrier here keeps it
15
+ * end-to-end typed across the API ↔ Studio boundary even though the underlying
16
+ * `NodeDefinitionDto.metadata` stays an open `Record<string, unknown>`.
17
+ */
18
+ /** A catalog COMPONENT carrier: a `kind` plus its parameter bag. */
19
+ export const ComponentNodeMetadataSchema = z.object({
20
+ /** One of `ComponentRegistry::kinds()` (e.g. "promptBuilder") or an integration name. */
21
+ kind: z.string().min(1),
22
+ /** The component's parameter bag; validated by the native factory at assemble time. */
23
+ params: z.record(z.string(), z.unknown())
24
+ });
25
+ /** A catalog AGENT carrier: mirrors the engine `AgentSpec` (all fields optional in the editor). */
26
+ export const AgentNodeMetadataSchema = z.object({
27
+ provider: z.string().min(1).optional(),
28
+ model: z.string().min(1).optional(),
29
+ tier: ModelTierDtoSchema.optional(),
30
+ /** A custom OpenAI-compatible endpoint (`model.openaiCompatible`) and the env var naming its key. */
31
+ baseURL: z.string().min(1).optional(),
32
+ apiKeyEnv: z.string().min(1).optional(),
33
+ system: z.string().optional(),
34
+ toolNames: z.array(z.string().min(1)).optional(),
35
+ /** Each tool's description and input JSON Schema, as the LLM sees them. */
36
+ toolSpecs: z
37
+ .array(z.object({
38
+ name: z.string().min(1),
39
+ description: z.string().optional(),
40
+ jsonSchema: z.record(z.string(), z.unknown()).optional()
41
+ }))
42
+ .optional(),
43
+ maxIterations: z.number().int().min(1).optional(),
44
+ suspendForApproval: z.boolean().optional(),
45
+ approvalToolNames: z.array(z.string().min(1)).optional(),
46
+ outputChannel: z.string().min(1).optional(),
47
+ /** ADR 0014 — terse output directive on the system prompt. */
48
+ outputStyle: z.literal("terse").optional(),
49
+ /** ADR 0014 — cap (chars) on the agent's seed message (the injected `Input`/`State` dump). */
50
+ contextBudget: z.number().int().min(1).optional(),
51
+ /** ADR 0022/0023 — durable channel the agent's `writeTodos` list is persisted into. */
52
+ todosChannel: z.string().min(1).optional(),
53
+ /** ADR 0030 phase 9e — channel carrying the run's multimodal input blocks. */
54
+ inputBlocksChannel: z.string().min(1).optional(),
55
+ /** The only channels the agent is shown in its seed state (context isolation). */
56
+ visibleChannels: z.array(z.string().min(1)).optional(),
57
+ /** ADR 0026 phase 11 — governed long-term memory overlay (namespace tenant-scoped). */
58
+ memory: z
59
+ .object({
60
+ namespace: z.string().min(1),
61
+ topK: z.number().int().min(1).optional(),
62
+ recall: z.enum(["vector", "graph", "both"]).optional()
63
+ })
64
+ .optional(),
65
+ /** ADR 0035 phase 12 — governed skills overlay (progressive disclosure; namespace tenant-scoped). */
66
+ skills: z
67
+ .object({
68
+ namespace: z.string().min(1),
69
+ /** Explicit `name@version` pins — the must-apply playbooks. */
70
+ required: z.array(z.string().min(1)).optional(),
71
+ /** Cap on advisory (vector-selected) skills. */
72
+ advisoryK: z.number().int().min(0).optional()
73
+ })
74
+ .optional(),
75
+ /** ADR 0024 phase 2c/2d — opt this agent into the governed virtual filesystem tools. */
76
+ enableFs: z.boolean().optional(),
77
+ /**
78
+ * ADR 0075 (issue #566 G3) — attach an external MCP server's tools to this agent, mid-run. The
79
+ * value references a tenant-owned `connector_connections` row (`provider: "mcp"`), resolved and
80
+ * connected at run start; every discovered tool is unconditionally `requiresApproval` (an MCP
81
+ * server is code Ailu does not control and cannot statically vet). Distinct from `toolNames`/
82
+ * `approvalToolNames` above — those are re-derived at run start to include the tools this
83
+ * connection discovers, since the tool set isn't known until the server is actually queried.
84
+ */
85
+ mcpConnectionId: z.string().min(1).optional(),
86
+ /**
87
+ * Issue #566 G19 — attach one or more governed action-tool connectors to this agent, mid-run.
88
+ * Keyed by provider id (e.g. `"slack"`), value is a tenant-owned `connector_connections` row id.
89
+ * Same resolution shape as `mcpConnectionId` (control plane resolves the connection, discovers
90
+ * that provider's action tools, merges them into `toolNames`/`approvalToolNames` before the run
91
+ * reaches this carrier — the Rust engine never resolves a connection itself), generalized to a
92
+ * map so adding the NEXT provider (Linear, Salesforce, ...) never needs another engine field/
93
+ * release — only a new product-side adapter keyed into the same map.
94
+ */
95
+ actionConnections: z.record(z.string().min(1), z.string().min(1)).optional(),
96
+ /**
97
+ * ADR 0025 phase 3d — the resolved EFFICIENCY middleware list. A discriminated union of
98
+ * efficiency-only kinds (compress / terse / contextBudget): a GOVERNANCE kind (redact /
99
+ * approvalGate / fsPolicy) fails this schema BY CONSTRUCTION, so any consumer that runs it
100
+ * (e.g. `readAgentMetadata`) drops the malformed agent. This is a **type-level + validation
101
+ * guarantee** for callers that opt to validate; it is NOT auto-applied on the persisted
102
+ * catalog run path today (that path reads an unvalidated carrier — the RUNTIME enforcer
103
+ * there is the Rust bridge, whose match only honours efficiency kinds and ignores governance
104
+ * kinds). The SDK's `toRustAgentConfig` throw-gate covers the in-process builder path.
105
+ */
106
+ resolvedMiddleware: z
107
+ .array(z.discriminatedUnion("kind", [
108
+ z.object({ kind: z.literal("compress") }),
109
+ z.object({ kind: z.literal("terse") }),
110
+ z.object({
111
+ kind: z.literal("contextBudget"),
112
+ params: z.object({ chars: z.number().int().min(1) })
113
+ }),
114
+ z.object({
115
+ kind: z.literal("reflection"),
116
+ params: z.object({ threshold: z.number().min(0).max(1).optional() }).optional()
117
+ }),
118
+ // ADR 0029 phase 8 — structured output (efficiency kind; the schema rides in params).
119
+ z.object({
120
+ kind: z.literal("structuredOutput"),
121
+ params: z.object({
122
+ schema: z.record(z.unknown()),
123
+ name: z.string().optional(),
124
+ strict: z.boolean().optional(),
125
+ mode: z.enum(["required", "lenient"]).optional(),
126
+ retryCap: z.number().int().min(0).optional()
127
+ })
128
+ })
129
+ ]))
130
+ .optional()
131
+ });
132
+ /**
133
+ * A catalog MAP-AGENTS carrier (ADR 0027 phase 4b — dynamic fan-out): run `subAgent` once per item
134
+ * in the `overChannel` array and collect the per-item results (in input order) into `joinAt`. The
135
+ * sub-agent is itself an agent carrier (same shape as a plain agent node → deepagents parity: skills,
136
+ * memory, fs, planning all apply to each spawn). Mirrors the engine `MapAgentSpec`.
137
+ */
138
+ export const MapAgentNodeMetadataSchema = z.object({
139
+ /** Channel holding the array of items to fan the sub-agent out over. */
140
+ overChannel: z.string().min(1),
141
+ /** Channel the array of per-item results lands in (one entry per item, in input order). */
142
+ joinAt: z.string().min(1),
143
+ /** The sub-agent run per item — a full agent carrier. */
144
+ subAgent: AgentNodeMetadataSchema,
145
+ /** When true, a spawn that needs approval suspends the whole map (default false). */
146
+ suspendForApproval: z.boolean().optional()
147
+ });
148
+ /**
149
+ * The slice of `node.metadata` the catalog carrier owns. All keys are optional;
150
+ * a node carries at most one (a component OR an agent OR a mapAgents fan-out).
151
+ * Other metadata keys are untouched.
152
+ */
153
+ export const CatalogNodeMetadataSchema = z
154
+ .object({
155
+ component: ComponentNodeMetadataSchema.optional(),
156
+ agent: AgentNodeMetadataSchema.optional(),
157
+ mapAgents: MapAgentNodeMetadataSchema.optional()
158
+ })
159
+ .passthrough();
160
+ /** Narrow an open metadata bag to its component carrier, if present and valid. */
161
+ export const readComponentMetadata = (metadata) => {
162
+ if (metadata === undefined) {
163
+ return undefined;
164
+ }
165
+ const parsed = ComponentNodeMetadataSchema.safeParse(metadata.component);
166
+ return parsed.success ? parsed.data : undefined;
167
+ };
168
+ /** Narrow an open metadata bag to its agent carrier, if present and valid. */
169
+ export const readAgentMetadata = (metadata) => {
170
+ if (metadata === undefined) {
171
+ return undefined;
172
+ }
173
+ const parsed = AgentNodeMetadataSchema.safeParse(metadata.agent);
174
+ return parsed.success ? parsed.data : undefined;
175
+ };
176
+ /** Narrow an open metadata bag to its mapAgents (dynamic fan-out) carrier, if present and valid. */
177
+ export const readMapAgentMetadata = (metadata) => {
178
+ if (metadata === undefined) {
179
+ return undefined;
180
+ }
181
+ const parsed = MapAgentNodeMetadataSchema.safeParse(metadata.mapAgents);
182
+ return parsed.success ? parsed.data : undefined;
183
+ };
184
+ //# sourceMappingURL=node-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-metadata.js","sourceRoot":"","sources":["../src/node-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node-metadata.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-metadata.test.d.ts","sourceRoot":"","sources":["../src/node-metadata.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,126 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { AgentNodeMetadataSchema, MapAgentNodeMetadataSchema, readAgentMetadata, readMapAgentMetadata } from "./node-metadata.js";
3
+ /**
4
+ * The agent carrier is the API↔Studio boundary for a persisted agent node. The
5
+ * ADR 0014 (outputStyle/contextBudget) and ADR 0022/0023 (todosChannel) knobs must
6
+ * SURVIVE a parse round-trip — Zod strips unknown keys, so a field missing from the
7
+ * schema would be silently dropped on the catalog/Studio path (the bug this guards).
8
+ */
9
+ describe("@ailu-ai/contracts — AgentNodeMetadataSchema", () => {
10
+ it("keeps outputStyle, contextBudget, todosChannel and enableFs through a parse round-trip", () => {
11
+ const carrier = {
12
+ provider: "anthropic",
13
+ toolNames: ["writeTodos"],
14
+ outputChannel: "agentResult",
15
+ outputStyle: "terse",
16
+ contextBudget: 4000,
17
+ todosChannel: "__todos",
18
+ enableFs: true
19
+ };
20
+ const parsed = AgentNodeMetadataSchema.parse(carrier);
21
+ expect(parsed.outputStyle).toBe("terse");
22
+ expect(parsed.contextBudget).toBe(4000);
23
+ expect(parsed.todosChannel).toBe("__todos");
24
+ expect(parsed.enableFs).toBe(true);
25
+ });
26
+ it("reads the carrier off an open metadata bag without dropping the new fields", () => {
27
+ const meta = readAgentMetadata({ agent: { provider: "anthropic", todosChannel: "__todos" } });
28
+ expect(meta?.todosChannel).toBe("__todos");
29
+ });
30
+ it("rejects an outputStyle other than terse", () => {
31
+ expect(AgentNodeMetadataSchema.safeParse({ outputStyle: "verbose" }).success).toBe(false);
32
+ });
33
+ it("leaves the new fields undefined when omitted", () => {
34
+ const parsed = AgentNodeMetadataSchema.parse({ provider: "anthropic" });
35
+ expect(parsed.todosChannel).toBeUndefined();
36
+ expect(parsed.outputStyle).toBeUndefined();
37
+ expect(parsed.contextBudget).toBeUndefined();
38
+ expect(parsed.mcpConnectionId).toBeUndefined();
39
+ });
40
+ // ADR 0075 (issue #566 G3) — the MCP connection carrier.
41
+ it("keeps mcpConnectionId through a parse round-trip", () => {
42
+ const parsed = AgentNodeMetadataSchema.parse({ provider: "anthropic", mcpConnectionId: "conn-1" });
43
+ expect(parsed.mcpConnectionId).toBe("conn-1");
44
+ });
45
+ it("rejects an empty mcpConnectionId", () => {
46
+ expect(AgentNodeMetadataSchema.safeParse({ mcpConnectionId: "" }).success).toBe(false);
47
+ });
48
+ // Issue #566 G19 — governed action-tool connectors, generalized (keyed by provider id).
49
+ it("keeps actionConnections through a parse round-trip", () => {
50
+ const parsed = AgentNodeMetadataSchema.parse({
51
+ provider: "anthropic",
52
+ actionConnections: { slack: "conn-1" }
53
+ });
54
+ expect(parsed.actionConnections).toEqual({ slack: "conn-1" });
55
+ });
56
+ it("rejects an actionConnections entry with an empty value", () => {
57
+ expect(AgentNodeMetadataSchema.safeParse({ actionConnections: { slack: "" } }).success).toBe(false);
58
+ });
59
+ // ADR 0025 phase 3d — the persisted resolvedMiddleware gate.
60
+ it("keeps an efficiency-only resolvedMiddleware list through a parse round-trip", () => {
61
+ const parsed = AgentNodeMetadataSchema.parse({
62
+ provider: "anthropic",
63
+ resolvedMiddleware: [
64
+ { kind: "compress" },
65
+ { kind: "terse" },
66
+ { kind: "contextBudget", params: { chars: 4000 } }
67
+ ]
68
+ });
69
+ expect(parsed.resolvedMiddleware?.map((m) => m.kind)).toEqual([
70
+ "compress",
71
+ "terse",
72
+ "contextBudget"
73
+ ]);
74
+ });
75
+ it("rejects a GOVERNANCE kind in resolvedMiddleware by construction (the persisted reject gate)", () => {
76
+ // A governance kind is not in the efficiency-only discriminated union → safeParse fails →
77
+ // readAgentMetadata drops the whole malformed agent. An ungoverned stack is unrepresentable.
78
+ for (const kind of ["redact", "approvalGate", "fsPolicy"]) {
79
+ expect(AgentNodeMetadataSchema.safeParse({ resolvedMiddleware: [{ kind }] }).success).toBe(false);
80
+ expect(readAgentMetadata({ agent: { provider: "anthropic", resolvedMiddleware: [{ kind }] } })).toBeUndefined();
81
+ }
82
+ });
83
+ it("rejects a contextBudget entry missing its chars param", () => {
84
+ expect(AgentNodeMetadataSchema.safeParse({ resolvedMiddleware: [{ kind: "contextBudget" }] }).success).toBe(false);
85
+ });
86
+ // ADR 0025 phase 3e — reflection variant.
87
+ it("accepts a reflection entry (bare and with a threshold), rejects an out-of-range threshold", () => {
88
+ expect(AgentNodeMetadataSchema.safeParse({ resolvedMiddleware: [{ kind: "reflection" }] }).success).toBe(true);
89
+ expect(AgentNodeMetadataSchema.safeParse({
90
+ resolvedMiddleware: [{ kind: "reflection", params: { threshold: 0.9 } }]
91
+ }).success).toBe(true);
92
+ expect(AgentNodeMetadataSchema.safeParse({
93
+ resolvedMiddleware: [{ kind: "reflection", params: { threshold: 1.5 } }]
94
+ }).success).toBe(false);
95
+ });
96
+ });
97
+ // ADR 0027 phase 4b / ADR 0049 — the mapAgents (dynamic fan-out) carrier.
98
+ describe("@ailu-ai/contracts — MapAgentNodeMetadataSchema", () => {
99
+ it("keeps overChannel/joinAt/subAgent through a parse round-trip", () => {
100
+ const parsed = MapAgentNodeMetadataSchema.parse({
101
+ overChannel: "items",
102
+ joinAt: "results",
103
+ subAgent: { provider: "anthropic", system: "Summarize the item.", enableFs: true },
104
+ suspendForApproval: true
105
+ });
106
+ expect(parsed.overChannel).toBe("items");
107
+ expect(parsed.joinAt).toBe("results");
108
+ expect(parsed.subAgent.system).toBe("Summarize the item.");
109
+ expect(parsed.subAgent.enableFs).toBe(true);
110
+ expect(parsed.suspendForApproval).toBe(true);
111
+ });
112
+ it("requires overChannel, joinAt and subAgent", () => {
113
+ expect(MapAgentNodeMetadataSchema.safeParse({ joinAt: "r", subAgent: {} }).success).toBe(false);
114
+ expect(MapAgentNodeMetadataSchema.safeParse({ overChannel: "i", subAgent: {} }).success).toBe(false);
115
+ expect(MapAgentNodeMetadataSchema.safeParse({ overChannel: "i", joinAt: "r" }).success).toBe(false);
116
+ });
117
+ it("readMapAgentMetadata narrows the carrier off an open metadata bag", () => {
118
+ const meta = readMapAgentMetadata({
119
+ mapAgents: { overChannel: "items", joinAt: "results", subAgent: { provider: "anthropic" } }
120
+ });
121
+ expect(meta?.overChannel).toBe("items");
122
+ expect(readMapAgentMetadata({ agent: { provider: "anthropic" } })).toBeUndefined();
123
+ expect(readMapAgentMetadata(undefined)).toBeUndefined();
124
+ });
125
+ });
126
+ //# sourceMappingURL=node-metadata.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-metadata.test.js","sourceRoot":"","sources":["../src/node-metadata.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import { z } from "zod";
2
+ export declare const SpanDtoSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ traceId: z.ZodString;
5
+ parentSpanId: z.ZodOptional<z.ZodString>;
6
+ name: z.ZodString;
7
+ runId: z.ZodOptional<z.ZodString>;
8
+ nodeId: z.ZodOptional<z.ZodString>;
9
+ startedAt: z.ZodString;
10
+ endedAt: z.ZodOptional<z.ZodString>;
11
+ status: z.ZodEnum<["ok", "error"]>;
12
+ attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
13
+ error: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ status: "ok" | "error";
16
+ id: string;
17
+ name: string;
18
+ traceId: string;
19
+ startedAt: string;
20
+ attributes: Record<string, unknown>;
21
+ runId?: string | undefined;
22
+ nodeId?: string | undefined;
23
+ error?: string | undefined;
24
+ parentSpanId?: string | undefined;
25
+ endedAt?: string | undefined;
26
+ }, {
27
+ status: "ok" | "error";
28
+ id: string;
29
+ name: string;
30
+ traceId: string;
31
+ startedAt: string;
32
+ attributes: Record<string, unknown>;
33
+ runId?: string | undefined;
34
+ nodeId?: string | undefined;
35
+ error?: string | undefined;
36
+ parentSpanId?: string | undefined;
37
+ endedAt?: string | undefined;
38
+ }>;
39
+ export declare const TraceDtoSchema: z.ZodObject<{
40
+ traceId: z.ZodString;
41
+ spans: z.ZodArray<z.ZodObject<{
42
+ id: z.ZodString;
43
+ traceId: z.ZodString;
44
+ parentSpanId: z.ZodOptional<z.ZodString>;
45
+ name: z.ZodString;
46
+ runId: z.ZodOptional<z.ZodString>;
47
+ nodeId: z.ZodOptional<z.ZodString>;
48
+ startedAt: z.ZodString;
49
+ endedAt: z.ZodOptional<z.ZodString>;
50
+ status: z.ZodEnum<["ok", "error"]>;
51
+ attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
52
+ error: z.ZodOptional<z.ZodString>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ status: "ok" | "error";
55
+ id: string;
56
+ name: string;
57
+ traceId: string;
58
+ startedAt: string;
59
+ attributes: Record<string, unknown>;
60
+ runId?: string | undefined;
61
+ nodeId?: string | undefined;
62
+ error?: string | undefined;
63
+ parentSpanId?: string | undefined;
64
+ endedAt?: string | undefined;
65
+ }, {
66
+ status: "ok" | "error";
67
+ id: string;
68
+ name: string;
69
+ traceId: string;
70
+ startedAt: string;
71
+ attributes: Record<string, unknown>;
72
+ runId?: string | undefined;
73
+ nodeId?: string | undefined;
74
+ error?: string | undefined;
75
+ parentSpanId?: string | undefined;
76
+ endedAt?: string | undefined;
77
+ }>, "many">;
78
+ }, "strip", z.ZodTypeAny, {
79
+ traceId: string;
80
+ spans: {
81
+ status: "ok" | "error";
82
+ id: string;
83
+ name: string;
84
+ traceId: string;
85
+ startedAt: string;
86
+ attributes: Record<string, unknown>;
87
+ runId?: string | undefined;
88
+ nodeId?: string | undefined;
89
+ error?: string | undefined;
90
+ parentSpanId?: string | undefined;
91
+ endedAt?: string | undefined;
92
+ }[];
93
+ }, {
94
+ traceId: string;
95
+ spans: {
96
+ status: "ok" | "error";
97
+ id: string;
98
+ name: string;
99
+ traceId: string;
100
+ startedAt: string;
101
+ attributes: Record<string, unknown>;
102
+ runId?: string | undefined;
103
+ nodeId?: string | undefined;
104
+ error?: string | undefined;
105
+ parentSpanId?: string | undefined;
106
+ endedAt?: string | undefined;
107
+ }[];
108
+ }>;
109
+ export declare const MetricDtoSchema: z.ZodObject<{
110
+ name: z.ZodString;
111
+ value: z.ZodNumber;
112
+ unit: z.ZodString;
113
+ tags: z.ZodRecord<z.ZodString, z.ZodString>;
114
+ timestamp: z.ZodString;
115
+ }, "strip", z.ZodTypeAny, {
116
+ value: number;
117
+ name: string;
118
+ timestamp: string;
119
+ unit: string;
120
+ tags: Record<string, string>;
121
+ }, {
122
+ value: number;
123
+ name: string;
124
+ timestamp: string;
125
+ unit: string;
126
+ tags: Record<string, string>;
127
+ }>;
128
+ export declare const AlertRuleDtoSchema: z.ZodObject<{
129
+ id: z.ZodString;
130
+ name: z.ZodString;
131
+ metric: z.ZodString;
132
+ operator: z.ZodEnum<["gt", "gte", "lt", "lte", "eq"]>;
133
+ threshold: z.ZodNumber;
134
+ enabled: z.ZodBoolean;
135
+ }, "strip", z.ZodTypeAny, {
136
+ id: string;
137
+ name: string;
138
+ metric: string;
139
+ operator: "eq" | "gt" | "gte" | "lt" | "lte";
140
+ threshold: number;
141
+ enabled: boolean;
142
+ }, {
143
+ id: string;
144
+ name: string;
145
+ metric: string;
146
+ operator: "eq" | "gt" | "gte" | "lt" | "lte";
147
+ threshold: number;
148
+ enabled: boolean;
149
+ }>;
150
+ export type TraceDto = z.infer<typeof TraceDtoSchema>;
151
+ export type SpanDto = z.infer<typeof SpanDtoSchema>;
152
+ export type MetricDto = z.infer<typeof MetricDtoSchema>;
153
+ export type AlertRuleDto = z.infer<typeof AlertRuleDtoSchema>;
154
+ //# sourceMappingURL=observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYxB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGzB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAO7B,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ export const SpanDtoSchema = z.object({
3
+ id: z.string().min(1),
4
+ traceId: z.string().min(1),
5
+ parentSpanId: z.string().min(1).optional(),
6
+ name: z.string().min(1),
7
+ runId: z.string().min(1).optional(),
8
+ nodeId: z.string().min(1).optional(),
9
+ startedAt: z.string().datetime(),
10
+ endedAt: z.string().datetime().optional(),
11
+ status: z.enum(["ok", "error"]),
12
+ attributes: z.record(z.string(), z.unknown()),
13
+ error: z.string().optional()
14
+ });
15
+ export const TraceDtoSchema = z.object({
16
+ traceId: z.string().min(1),
17
+ spans: z.array(SpanDtoSchema)
18
+ });
19
+ export const MetricDtoSchema = z.object({
20
+ name: z.string().min(1),
21
+ value: z.number(),
22
+ unit: z.string().min(1),
23
+ tags: z.record(z.string(), z.string()),
24
+ timestamp: z.string().datetime()
25
+ });
26
+ export const AlertRuleDtoSchema = z.object({
27
+ id: z.string().min(1),
28
+ name: z.string().min(1),
29
+ metric: z.string().min(1),
30
+ operator: z.enum(["gt", "gte", "lt", "lte", "eq"]),
31
+ threshold: z.number(),
32
+ enabled: z.boolean()
33
+ });
34
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC"}
package/dist/pii.d.ts ADDED
@@ -0,0 +1,88 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * PII redaction DTOs (ADR 0008). A per-namespace policy decides whether personal data is
4
+ * detected, redacted before reaching a model, or blocks the operation. Mirrors the router
5
+ * policy shape.
6
+ */
7
+ export declare const PiiLevelSchema: z.ZodEnum<["off", "detect", "redact", "block"]>;
8
+ export type PiiLevel = z.infer<typeof PiiLevelSchema>;
9
+ /** Body for PUT /pii/namespace/:ns/policy (owner-only). */
10
+ export declare const SetPiiPolicyDtoSchema: z.ZodObject<{
11
+ level: z.ZodOptional<z.ZodEnum<["off", "detect", "redact", "block"]>>;
12
+ entities: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
13
+ threshold: z.ZodOptional<z.ZodNumber>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ threshold?: number | undefined;
16
+ level?: "off" | "detect" | "redact" | "block" | undefined;
17
+ entities?: string[] | undefined;
18
+ }, {
19
+ threshold?: number | undefined;
20
+ level?: "off" | "detect" | "redact" | "block" | undefined;
21
+ entities?: string[] | undefined;
22
+ }>;
23
+ export type SetPiiPolicyDto = z.infer<typeof SetPiiPolicyDtoSchema>;
24
+ /** The resolved policy for a namespace. */
25
+ export declare const PiiPolicyDtoSchema: z.ZodObject<{
26
+ namespace: z.ZodString;
27
+ level: z.ZodEnum<["off", "detect", "redact", "block"]>;
28
+ entities: z.ZodArray<z.ZodString, "many">;
29
+ threshold: z.ZodNumber;
30
+ canWrite: z.ZodBoolean;
31
+ }, "strip", z.ZodTypeAny, {
32
+ namespace: string;
33
+ canWrite: boolean;
34
+ threshold: number;
35
+ level: "off" | "detect" | "redact" | "block";
36
+ entities: string[];
37
+ }, {
38
+ namespace: string;
39
+ canWrite: boolean;
40
+ threshold: number;
41
+ level: "off" | "detect" | "redact" | "block";
42
+ entities: string[];
43
+ }>;
44
+ export type PiiPolicyDto = z.infer<typeof PiiPolicyDtoSchema>;
45
+ /** A single detection (entity type, confidence, span). */
46
+ export declare const PiiFindingDtoSchema: z.ZodObject<{
47
+ entity: z.ZodString;
48
+ score: z.ZodNumber;
49
+ start: z.ZodNumber;
50
+ end: z.ZodNumber;
51
+ }, "strip", z.ZodTypeAny, {
52
+ score: number;
53
+ entity: string;
54
+ start: number;
55
+ end: number;
56
+ }, {
57
+ score: number;
58
+ entity: string;
59
+ start: number;
60
+ end: number;
61
+ }>;
62
+ export type PiiFindingDto = z.infer<typeof PiiFindingDtoSchema>;
63
+ /**
64
+ * Wire contract for the native gateway seam (ADR 0008 phase 2). The Rust engine POSTs the
65
+ * outbound LLM texts (system + messages) to the control plane, which returns them redacted in
66
+ * the same order. Same length in, same length out.
67
+ */
68
+ export declare const PiiRedactBatchDtoSchema: z.ZodObject<{
69
+ texts: z.ZodArray<z.ZodString, "many">;
70
+ }, "strip", z.ZodTypeAny, {
71
+ texts: string[];
72
+ }, {
73
+ texts: string[];
74
+ }>;
75
+ export type PiiRedactBatchDto = z.infer<typeof PiiRedactBatchDtoSchema>;
76
+ /** `blocked` is true when a `block`-level policy matched — the engine then fails the call. */
77
+ export declare const PiiRedactBatchResultDtoSchema: z.ZodObject<{
78
+ texts: z.ZodArray<z.ZodString, "many">;
79
+ blocked: z.ZodBoolean;
80
+ }, "strip", z.ZodTypeAny, {
81
+ texts: string[];
82
+ blocked: boolean;
83
+ }, {
84
+ texts: string[];
85
+ blocked: boolean;
86
+ }>;
87
+ export type PiiRedactBatchResultDto = z.infer<typeof PiiRedactBatchResultDtoSchema>;
88
+ //# sourceMappingURL=pii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii.d.ts","sourceRoot":"","sources":["../src/pii.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,cAAc,iDAA+C,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,2CAA2C;AAC3C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B;;;;;;;;;EAGxC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC"}