@cleocode/contracts 2026.5.130 → 2026.5.132

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 (178) hide show
  1. package/dist/__tests__/atomic-tools-contract.test.d.ts +14 -0
  2. package/dist/__tests__/atomic-tools-contract.test.d.ts.map +1 -0
  3. package/dist/__tests__/atomic-tools-contract.test.js +55 -0
  4. package/dist/__tests__/atomic-tools-contract.test.js.map +1 -0
  5. package/dist/__tests__/gateway-contract.test.d.ts +18 -0
  6. package/dist/__tests__/gateway-contract.test.d.ts.map +1 -0
  7. package/dist/__tests__/gateway-contract.test.js +187 -0
  8. package/dist/__tests__/gateway-contract.test.js.map +1 -0
  9. package/dist/__tests__/mvi.test.d.ts +17 -0
  10. package/dist/__tests__/mvi.test.d.ts.map +1 -0
  11. package/dist/__tests__/mvi.test.js +147 -0
  12. package/dist/__tests__/mvi.test.js.map +1 -0
  13. package/dist/__tests__/operation-def.test.js +1 -1
  14. package/dist/__tests__/operation-def.test.js.map +1 -1
  15. package/dist/boundary.d.ts +26 -0
  16. package/dist/boundary.d.ts.map +1 -1
  17. package/dist/boundary.js +44 -6
  18. package/dist/boundary.js.map +1 -1
  19. package/dist/branch-lock.d.ts +35 -1
  20. package/dist/branch-lock.d.ts.map +1 -1
  21. package/dist/branch-lock.js +23 -2
  22. package/dist/branch-lock.js.map +1 -1
  23. package/dist/daemon/__tests__/health-roundtrip.test.d.ts +13 -0
  24. package/dist/daemon/__tests__/health-roundtrip.test.d.ts.map +1 -0
  25. package/dist/daemon/__tests__/health-roundtrip.test.js +69 -0
  26. package/dist/daemon/__tests__/health-roundtrip.test.js.map +1 -0
  27. package/dist/daemon/health.d.ts +108 -0
  28. package/dist/daemon/health.d.ts.map +1 -0
  29. package/dist/daemon/health.js +95 -0
  30. package/dist/daemon/health.js.map +1 -0
  31. package/dist/daemon/index.d.ts +24 -0
  32. package/dist/daemon/index.d.ts.map +1 -0
  33. package/dist/daemon/index.js +22 -0
  34. package/dist/daemon/index.js.map +1 -0
  35. package/dist/daemon/subsystem.d.ts +121 -0
  36. package/dist/daemon/subsystem.d.ts.map +1 -0
  37. package/dist/daemon/subsystem.js +28 -0
  38. package/dist/daemon/subsystem.js.map +1 -0
  39. package/dist/daemon-ipc/__tests__/daemon-ipc-freeze.test.d.ts +15 -0
  40. package/dist/daemon-ipc/__tests__/daemon-ipc-freeze.test.d.ts.map +1 -0
  41. package/dist/daemon-ipc/__tests__/daemon-ipc-freeze.test.js +40 -0
  42. package/dist/daemon-ipc/__tests__/daemon-ipc-freeze.test.js.map +1 -0
  43. package/dist/daemon-ipc/index.d.ts +44 -0
  44. package/dist/daemon-ipc/index.d.ts.map +1 -0
  45. package/dist/daemon-ipc/index.js +43 -0
  46. package/dist/daemon-ipc/index.js.map +1 -0
  47. package/dist/db-inventory.json +8 -8
  48. package/dist/dispatch/identity.d.ts +1 -1
  49. package/dist/dispatch/identity.d.ts.map +1 -1
  50. package/dist/dispatch/identity.js +3 -0
  51. package/dist/dispatch/identity.js.map +1 -1
  52. package/dist/dispatch/operation-def.d.ts +16 -0
  53. package/dist/dispatch/operation-def.d.ts.map +1 -1
  54. package/dist/dispatch/operations-registry.d.ts.map +1 -1
  55. package/dist/dispatch/operations-registry.js +133 -0
  56. package/dist/dispatch/operations-registry.js.map +1 -1
  57. package/dist/exit-codes.d.ts +1 -1
  58. package/dist/exit-codes.js +1 -1
  59. package/dist/gateway/rpc/__tests__/freeze.test.d.ts +20 -0
  60. package/dist/gateway/rpc/__tests__/freeze.test.d.ts.map +1 -0
  61. package/dist/gateway/rpc/__tests__/freeze.test.js +122 -0
  62. package/dist/gateway/rpc/__tests__/freeze.test.js.map +1 -0
  63. package/dist/gateway/rpc/index.d.ts +23 -0
  64. package/dist/gateway/rpc/index.d.ts.map +1 -0
  65. package/dist/gateway/rpc/index.js +22 -0
  66. package/dist/gateway/rpc/index.js.map +1 -0
  67. package/dist/gateway/rpc/messages.d.ts +263 -0
  68. package/dist/gateway/rpc/messages.d.ts.map +1 -0
  69. package/dist/gateway/rpc/messages.js +152 -0
  70. package/dist/gateway/rpc/messages.js.map +1 -0
  71. package/dist/gateway/rpc/version.d.ts +39 -0
  72. package/dist/gateway/rpc/version.d.ts.map +1 -0
  73. package/dist/gateway/rpc/version.js +39 -0
  74. package/dist/gateway/rpc/version.js.map +1 -0
  75. package/dist/gateway.d.ts +239 -0
  76. package/dist/gateway.d.ts.map +1 -0
  77. package/dist/gateway.js +171 -0
  78. package/dist/gateway.js.map +1 -0
  79. package/dist/goal.d.ts +314 -0
  80. package/dist/goal.d.ts.map +1 -0
  81. package/dist/goal.js +118 -0
  82. package/dist/goal.js.map +1 -0
  83. package/dist/index.d.ts +9 -0
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +10 -0
  86. package/dist/index.js.map +1 -1
  87. package/dist/mvi.d.ts +209 -0
  88. package/dist/mvi.d.ts.map +1 -0
  89. package/dist/mvi.js +99 -0
  90. package/dist/mvi.js.map +1 -0
  91. package/dist/operations/attention.d.ts +114 -0
  92. package/dist/operations/attention.d.ts.map +1 -0
  93. package/dist/operations/attention.js +22 -0
  94. package/dist/operations/attention.js.map +1 -0
  95. package/dist/operations/focus.d.ts +25 -0
  96. package/dist/operations/focus.d.ts.map +1 -1
  97. package/dist/operations/index.d.ts +1 -0
  98. package/dist/operations/index.d.ts.map +1 -1
  99. package/dist/operations/index.js +1 -0
  100. package/dist/operations/index.js.map +1 -1
  101. package/dist/operations/session.d.ts +11 -0
  102. package/dist/operations/session.d.ts.map +1 -1
  103. package/dist/release/evidence-atoms.d.ts +3 -2
  104. package/dist/release/evidence-atoms.d.ts.map +1 -1
  105. package/dist/release/evidence-atoms.js +3 -2
  106. package/dist/release/evidence-atoms.js.map +1 -1
  107. package/dist/sdk-tool.d.ts +1 -1
  108. package/dist/sdk-tool.js +1 -1
  109. package/dist/supervisor-ipc/__tests__/freeze.test.d.ts +15 -0
  110. package/dist/supervisor-ipc/__tests__/freeze.test.d.ts.map +1 -0
  111. package/dist/supervisor-ipc/__tests__/freeze.test.js +159 -0
  112. package/dist/supervisor-ipc/__tests__/freeze.test.js.map +1 -0
  113. package/dist/supervisor-ipc/index.d.ts +15 -0
  114. package/dist/supervisor-ipc/index.d.ts.map +1 -0
  115. package/dist/supervisor-ipc/index.js +14 -0
  116. package/dist/supervisor-ipc/index.js.map +1 -0
  117. package/dist/supervisor-ipc/messages.d.ts +457 -0
  118. package/dist/supervisor-ipc/messages.d.ts.map +1 -0
  119. package/dist/supervisor-ipc/messages.js +312 -0
  120. package/dist/supervisor-ipc/messages.js.map +1 -0
  121. package/dist/supervisor-ipc/version.d.ts +29 -0
  122. package/dist/supervisor-ipc/version.d.ts.map +1 -0
  123. package/dist/supervisor-ipc/version.js +29 -0
  124. package/dist/supervisor-ipc/version.js.map +1 -0
  125. package/dist/task.d.ts +5 -5
  126. package/dist/tools/__tests__/composite.test.d.ts +14 -0
  127. package/dist/tools/__tests__/composite.test.d.ts.map +1 -0
  128. package/dist/tools/__tests__/composite.test.js +75 -0
  129. package/dist/tools/__tests__/composite.test.js.map +1 -0
  130. package/dist/tools/atomic.d.ts +195 -0
  131. package/dist/tools/atomic.d.ts.map +1 -0
  132. package/dist/tools/atomic.js +82 -0
  133. package/dist/tools/atomic.js.map +1 -0
  134. package/dist/tools/composite.d.ts +128 -0
  135. package/dist/tools/composite.d.ts.map +1 -0
  136. package/dist/tools/composite.js +88 -0
  137. package/dist/tools/composite.js.map +1 -0
  138. package/package.json +34 -2
  139. package/src/__tests__/__snapshots__/operations-registry.test.ts.snap +1 -1
  140. package/src/__tests__/atomic-tools-contract.test.ts +67 -0
  141. package/src/__tests__/gateway-contract.test.ts +219 -0
  142. package/src/__tests__/mvi.test.ts +175 -0
  143. package/src/__tests__/operation-def.test.ts +2 -1
  144. package/src/boundary.ts +76 -6
  145. package/src/branch-lock.ts +49 -2
  146. package/src/daemon/__tests__/health-roundtrip.test.ts +84 -0
  147. package/src/daemon/health.ts +121 -0
  148. package/src/daemon/index.ts +35 -0
  149. package/src/daemon/subsystem.ts +126 -0
  150. package/src/daemon-ipc/__tests__/daemon-ipc-freeze.test.ts +53 -0
  151. package/src/daemon-ipc/index.ts +90 -0
  152. package/src/db-inventory.json +8 -8
  153. package/src/dispatch/identity.ts +3 -0
  154. package/src/dispatch/operation-def.ts +16 -0
  155. package/src/dispatch/operations-registry.ts +140 -0
  156. package/src/exit-codes.ts +1 -1
  157. package/src/gateway/rpc/__tests__/freeze.test.ts +139 -0
  158. package/src/gateway/rpc/index.ts +43 -0
  159. package/src/gateway/rpc/messages.ts +187 -0
  160. package/src/gateway/rpc/version.ts +40 -0
  161. package/src/gateway.ts +252 -0
  162. package/src/goal.ts +348 -0
  163. package/src/index.ts +109 -0
  164. package/src/mvi.ts +236 -0
  165. package/src/operations/attention.ts +117 -0
  166. package/src/operations/focus.ts +26 -0
  167. package/src/operations/index.ts +1 -0
  168. package/src/operations/session.ts +11 -0
  169. package/src/release/evidence-atoms.ts +3 -2
  170. package/src/sdk-tool.ts +1 -1
  171. package/src/supervisor-ipc/__tests__/freeze.test.ts +180 -0
  172. package/src/supervisor-ipc/index.ts +62 -0
  173. package/src/supervisor-ipc/messages.ts +396 -0
  174. package/src/supervisor-ipc/version.ts +30 -0
  175. package/src/task.ts +5 -5
  176. package/src/tools/__tests__/composite.test.ts +88 -0
  177. package/src/tools/atomic.ts +274 -0
  178. package/src/tools/composite.ts +173 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Contract tests for the atomic-tool primitive contracts
3
+ * (`@cleocode/contracts/tools/atomic`, E3 · T11403).
4
+ *
5
+ * Pins the canonical tool taxonomy + primitive registry so the CORE SDK
6
+ * implementations (T11405-T11407) and the MCP catalog (T11411) bind to a stable
7
+ * shape.
8
+ *
9
+ * @epic T11390
10
+ * @task T11403
11
+ * @saga T11387
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=atomic-tools-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-tools-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/atomic-tools-contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Contract tests for the atomic-tool primitive contracts
3
+ * (`@cleocode/contracts/tools/atomic`, E3 · T11403).
4
+ *
5
+ * Pins the canonical tool taxonomy + primitive registry so the CORE SDK
6
+ * implementations (T11405-T11407) and the MCP catalog (T11411) bind to a stable
7
+ * shape.
8
+ *
9
+ * @epic T11390
10
+ * @task T11403
11
+ * @saga T11387
12
+ */
13
+ import { describe, expect, it } from 'vitest';
14
+ import { ATOMIC_TOOL_PRIMITIVES, TOOL_CLASSES, } from '../tools/atomic.js';
15
+ describe('atomic-tool taxonomy', () => {
16
+ it('declares exactly the five canonical tool classes', () => {
17
+ expect([...TOOL_CLASSES]).toEqual(['fs', 'shell', 'search', 'net', 'notebook']);
18
+ });
19
+ });
20
+ describe('atomic-tool primitive registry', () => {
21
+ it('every primitive has a class in the taxonomy and is stateless', () => {
22
+ const classes = new Set(TOOL_CLASSES);
23
+ for (const p of ATOMIC_TOOL_PRIMITIVES) {
24
+ expect(classes.has(p.class)).toBe(true);
25
+ expect(p.stateless).toBe(true);
26
+ expect(p.name.length).toBeGreaterThan(0);
27
+ expect(p.responsibility.length).toBeGreaterThan(0);
28
+ }
29
+ });
30
+ it('primitive names are unique', () => {
31
+ const names = ATOMIC_TOOL_PRIMITIVES.map((p) => p.name);
32
+ expect(new Set(names).size).toBe(names.length);
33
+ });
34
+ it('covers each class with at least one primitive', () => {
35
+ const covered = new Set(ATOMIC_TOOL_PRIMITIVES.map((p) => p.class));
36
+ for (const c of TOOL_CLASSES) {
37
+ expect(covered.has(c)).toBe(true);
38
+ }
39
+ });
40
+ it('includes the canonical fs + shell primitives', () => {
41
+ const names = new Set(ATOMIC_TOOL_PRIMITIVES.map((p) => p.name));
42
+ for (const n of ['readFileText', 'writeFileAtomic', 'executeShell', 'runGit']) {
43
+ expect(names.has(n)).toBe(true);
44
+ }
45
+ });
46
+ });
47
+ describe('atomic-tool I/O contracts (type-level)', () => {
48
+ it('a ReadFile round-trip is well-typed', () => {
49
+ const input = { path: '/abs/file.ts' };
50
+ const result = { path: input.path, content: 'hello' };
51
+ expect(result.path).toBe('/abs/file.ts');
52
+ expect(result.content).toBe('hello');
53
+ });
54
+ });
55
+ //# sourceMappingURL=atomic-tools-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-tools-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/atomic-tools-contract.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Contract snapshot + validation tests for the promoted gateway contract
3
+ * (`@cleocode/contracts/gateway`).
4
+ *
5
+ * The gateway contract is the transport-agnostic CQRS dispatch shape that every
6
+ * adapter (CLI, MCP, RPC, HTTP) shares. These tests pin:
7
+ * - the frozen contract version + the four canonical transport sources,
8
+ * - the zod schemas' accepted/rejected inputs at the (untrusted) transport
9
+ * boundary (AC8 — the reason the contract is zod-typed),
10
+ * - the public field shape of each schema as a snapshot, so an accidental
11
+ * add/remove/rename of a request/response field fails loudly.
12
+ *
13
+ * @epic T4820
14
+ * @task T11446
15
+ * @saga T11243
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=gateway-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gateway-contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Contract snapshot + validation tests for the promoted gateway contract
3
+ * (`@cleocode/contracts/gateway`).
4
+ *
5
+ * The gateway contract is the transport-agnostic CQRS dispatch shape that every
6
+ * adapter (CLI, MCP, RPC, HTTP) shares. These tests pin:
7
+ * - the frozen contract version + the four canonical transport sources,
8
+ * - the zod schemas' accepted/rejected inputs at the (untrusted) transport
9
+ * boundary (AC8 — the reason the contract is zod-typed),
10
+ * - the public field shape of each schema as a snapshot, so an accidental
11
+ * add/remove/rename of a request/response field fails loudly.
12
+ *
13
+ * @epic T4820
14
+ * @task T11446
15
+ * @saga T11243
16
+ */
17
+ import { describe, expect, it } from 'vitest';
18
+ import { dispatchErrorSchema, dispatchRequestSchema, dispatchResponseMetaSchema, dispatchResponseSchema, GATEWAY_CONTRACT_VERSION, GATEWAY_SOURCES, gatewaySourceSchema, gatewayStreamEventSchema, } from '../gateway.js';
19
+ describe('gateway contract — version + sources', () => {
20
+ it('pins the frozen contract version', () => {
21
+ expect(GATEWAY_CONTRACT_VERSION).toBe('1.0.0');
22
+ });
23
+ it('declares exactly the four canonical transports', () => {
24
+ expect([...GATEWAY_SOURCES]).toEqual(['cli', 'mcp', 'rpc', 'http']);
25
+ });
26
+ it('accepts every canonical transport and rejects unknown ones', () => {
27
+ for (const s of GATEWAY_SOURCES) {
28
+ expect(gatewaySourceSchema.safeParse(s).success).toBe(true);
29
+ }
30
+ expect(gatewaySourceSchema.safeParse('telepathy').success).toBe(false);
31
+ expect(gatewaySourceSchema.safeParse('dispatch').success).toBe(false);
32
+ });
33
+ });
34
+ describe('gateway contract — request validation (transport boundary)', () => {
35
+ const minimal = {
36
+ gateway: 'query',
37
+ domain: 'tasks',
38
+ operation: 'list',
39
+ source: 'mcp',
40
+ requestId: 'req_1',
41
+ };
42
+ it('validates a minimal well-formed request', () => {
43
+ expect(dispatchRequestSchema.safeParse(minimal).success).toBe(true);
44
+ });
45
+ it('validates a fully-populated request', () => {
46
+ const full = {
47
+ ...minimal,
48
+ params: { parent: 'T1' },
49
+ sessionId: 'ses_1',
50
+ originSessionId: 'ses_0',
51
+ executionSessionId: 'exe_1',
52
+ _fields: ['/data/id'],
53
+ _mvi: 'standard',
54
+ };
55
+ expect(dispatchRequestSchema.safeParse(full).success).toBe(true);
56
+ });
57
+ it('rejects a request missing required fields', () => {
58
+ expect(dispatchRequestSchema.safeParse({ domain: 'tasks' }).success).toBe(false);
59
+ });
60
+ it('rejects an out-of-range _mvi level', () => {
61
+ expect(dispatchRequestSchema.safeParse({ ...minimal, _mvi: 'verbose' }).success).toBe(false);
62
+ });
63
+ it('rejects an unknown transport source', () => {
64
+ expect(dispatchRequestSchema.safeParse({ ...minimal, source: 'ftp' }).success).toBe(false);
65
+ });
66
+ });
67
+ describe('gateway contract — response + error + stream shapes', () => {
68
+ it('validates a success response (meta passthrough preserved)', () => {
69
+ const res = {
70
+ meta: {
71
+ gateway: 'query',
72
+ domain: 'tasks',
73
+ operation: 'list',
74
+ timestamp: '2026-05-30T00:00:00.000Z',
75
+ duration_ms: 1,
76
+ source: 'cli',
77
+ requestId: 'req_1',
78
+ // extensible metadata via catchall:
79
+ gateInfo: { passed: true },
80
+ },
81
+ success: true,
82
+ data: { tasks: [] },
83
+ };
84
+ expect(dispatchResponseSchema.safeParse(res).success).toBe(true);
85
+ });
86
+ it('validates a structured error', () => {
87
+ const err = {
88
+ code: 'E_NOT_FOUND',
89
+ message: 'no such task',
90
+ exitCode: 4,
91
+ alternatives: [{ action: 'search', command: 'cleo find' }],
92
+ };
93
+ expect(dispatchErrorSchema.safeParse(err).success).toBe(true);
94
+ });
95
+ it('validates a stream event', () => {
96
+ expect(gatewayStreamEventSchema.safeParse({ kind: 'data', seq: 0, data: {}, requestId: 'req_1' })
97
+ .success).toBe(true);
98
+ expect(gatewayStreamEventSchema.safeParse({ kind: 'flush', seq: 0, requestId: 'r' }).success).toBe(false);
99
+ });
100
+ });
101
+ describe('gateway contract — field-shape snapshot (drift guard)', () => {
102
+ it('request fields are stable', () => {
103
+ expect(Object.keys(dispatchRequestSchema.shape).sort()).toMatchInlineSnapshot(`
104
+ [
105
+ "_fields",
106
+ "_mvi",
107
+ "domain",
108
+ "executionSessionId",
109
+ "gateway",
110
+ "operation",
111
+ "originSessionId",
112
+ "params",
113
+ "requestId",
114
+ "sessionId",
115
+ "source",
116
+ ]
117
+ `);
118
+ });
119
+ it('response fields are stable', () => {
120
+ expect(Object.keys(dispatchResponseSchema.shape).sort()).toMatchInlineSnapshot(`
121
+ [
122
+ "data",
123
+ "error",
124
+ "meta",
125
+ "page",
126
+ "partial",
127
+ "success",
128
+ ]
129
+ `);
130
+ });
131
+ });
132
+ // ─── gateway-contract v1.0 FREEZE (R3-T8 · T11452) ──────────────────────────
133
+ // Locks the COMPLETE v1.0 contract surface (version + 4 transports + every
134
+ // frozen shape's field set). Any change here is a breaking contract change and
135
+ // REQUIRES a GATEWAY_CONTRACT_VERSION bump — mirrors the supervisor-ipc v1.0
136
+ // freeze. The spec doc (slug `gateway-contract-v1`) is the human-readable SoT.
137
+ describe('gateway-contract v1.0 FREEZE', () => {
138
+ it('version is pinned at 1.0.0', () => {
139
+ expect(GATEWAY_CONTRACT_VERSION).toBe('1.0.0');
140
+ });
141
+ it('the four transports are frozen', () => {
142
+ expect([...GATEWAY_SOURCES]).toEqual(['cli', 'mcp', 'rpc', 'http']);
143
+ });
144
+ it('error fields are frozen', () => {
145
+ expect(Object.keys(dispatchErrorSchema.shape).sort()).toMatchInlineSnapshot(`
146
+ [
147
+ "alternatives",
148
+ "code",
149
+ "details",
150
+ "exitCode",
151
+ "fix",
152
+ "message",
153
+ "problemDetails",
154
+ ]
155
+ `);
156
+ });
157
+ it('response meta fields are frozen (catchall preserves extensibility)', () => {
158
+ expect(Object.keys(dispatchResponseMetaSchema.shape).sort()).toMatchInlineSnapshot(`
159
+ [
160
+ "domain",
161
+ "duration_ms",
162
+ "executionSessionId",
163
+ "gateway",
164
+ "operation",
165
+ "originSessionId",
166
+ "rateLimit",
167
+ "requestId",
168
+ "sessionId",
169
+ "source",
170
+ "timestamp",
171
+ "version",
172
+ ]
173
+ `);
174
+ });
175
+ it('stream-event fields are frozen', () => {
176
+ expect(Object.keys(gatewayStreamEventSchema.shape).sort()).toMatchInlineSnapshot(`
177
+ [
178
+ "data",
179
+ "error",
180
+ "kind",
181
+ "requestId",
182
+ "seq",
183
+ ]
184
+ `);
185
+ });
186
+ });
187
+ //# sourceMappingURL=gateway-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/gateway-contract.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Type-shape + runtime contract test for the MVI progressive-disclosure
3
+ * primitive {@link MviDigest} (T11349 · Epic T11285 · Saga T11283).
4
+ *
5
+ * Asserts that the single `MviDigest<T>` shape unifies CLEO's three historical
6
+ * expansion-hint conventions (`_next`, `meta.suggestedNext`,
7
+ * `_nexus.suggestedNext`) and that each legacy producer can emit — and any
8
+ * consumer can read — a digest *without any `any` casts*. The `expectTypeOf`
9
+ * assertions are the tsd-style proof: if the discriminated union ever widens
10
+ * to `any`/`unknown` or loses a variant, these fail at type-check time.
11
+ *
12
+ * @epic T11285
13
+ * @task T11349
14
+ * @saga T11283
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=mvi.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mvi.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mvi.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Type-shape + runtime contract test for the MVI progressive-disclosure
3
+ * primitive {@link MviDigest} (T11349 · Epic T11285 · Saga T11283).
4
+ *
5
+ * Asserts that the single `MviDigest<T>` shape unifies CLEO's three historical
6
+ * expansion-hint conventions (`_next`, `meta.suggestedNext`,
7
+ * `_nexus.suggestedNext`) and that each legacy producer can emit — and any
8
+ * consumer can read — a digest *without any `any` casts*. The `expectTypeOf`
9
+ * assertions are the tsd-style proof: if the discriminated union ever widens
10
+ * to `any`/`unknown` or loses a variant, these fail at type-check time.
11
+ *
12
+ * @epic T11285
13
+ * @task T11349
14
+ * @saga T11283
15
+ */
16
+ import { describe, expect, expectTypeOf, it } from 'vitest';
17
+ import { expansionFromNextDirectives, expansionFromStructuredOps, expansionFromSuggestedCommands, isNextDirectivesHint, isStructuredOpsHint, isSuggestedCommandsHint, } from '../mvi.js';
18
+ describe('MviDigest<T> shape (T11349)', () => {
19
+ it('has the canonical {summary, count, preview?, expand} fields', () => {
20
+ const digest = {
21
+ summary: '12 child tasks (3 done, 9 pending)',
22
+ count: 12,
23
+ preview: [{ id: 'T1' }, { id: 'T2' }],
24
+ expand: { kind: 'next-directives', directives: { all: 'cleo list --parent T0' } },
25
+ };
26
+ expect(digest.count).toBe(12);
27
+ expect(digest.preview).toHaveLength(2);
28
+ expect(digest.summary).toContain('child tasks');
29
+ });
30
+ it('preview is optional — a digest can describe an unsampled collection', () => {
31
+ const digest = {
32
+ summary: '40 memory entries',
33
+ count: 40,
34
+ expand: { kind: 'suggested-commands', commands: ['cleo memory find "x"'] },
35
+ };
36
+ expect(digest.preview).toBeUndefined();
37
+ });
38
+ it('summary/count/expand are required; preview is the only optional field', () => {
39
+ expectTypeOf().toHaveProperty('summary');
40
+ expectTypeOf().toHaveProperty('count');
41
+ expectTypeOf().toHaveProperty('expand');
42
+ expectTypeOf().toEqualTypeOf();
43
+ expectTypeOf().toEqualTypeOf();
44
+ expectTypeOf().toEqualTypeOf();
45
+ });
46
+ });
47
+ describe('ExpansionHint unifies the 3 legacy conventions (T11349)', () => {
48
+ it('reconciles `_next` (NextDirectives — Record<string,string>) without a cast', () => {
49
+ // The exact shape produced by core/src/mvi-helpers.ts taskShowNext().
50
+ const legacyNext = {
51
+ full: 'cleo show T042 --mvi full',
52
+ children: 'cleo find --parent T042',
53
+ deps: 'cleo deps T042',
54
+ };
55
+ const hint = expansionFromNextDirectives(legacyNext);
56
+ expectTypeOf(hint).toEqualTypeOf();
57
+ expect(hint.kind).toBe('next-directives');
58
+ expect(hint.directives.full).toBe('cleo show T042 --mvi full');
59
+ });
60
+ it('reconciles `meta.suggestedNext` (ReadonlyArray<string>) without a cast', () => {
61
+ // The exact shape produced by core/src/dispatch/suggested-next.ts builders.
62
+ const legacySuggested = ['cleo show T1', 'cleo focus T1'];
63
+ const hint = expansionFromSuggestedCommands(legacySuggested);
64
+ expectTypeOf(hint).toEqualTypeOf();
65
+ expect(hint.kind).toBe('suggested-commands');
66
+ expect(hint.commands).toEqual(['cleo show T1', 'cleo focus T1']);
67
+ });
68
+ it('reconciles `_nexus.suggestedNext` (ReadonlyArray<SuggestedNextOp>) without a cast', () => {
69
+ // The exact shape from contracts/operations/nexus-scope.ts NexusScopeMeta.
70
+ const legacyNexus = [
71
+ {
72
+ op: 'nexus.context',
73
+ args: { name: 'validateUser' },
74
+ scope: 'project',
75
+ effect: 'read',
76
+ requiresConfirmation: false,
77
+ reason: 'inspect callers before editing',
78
+ },
79
+ ];
80
+ const hint = expansionFromStructuredOps(legacyNexus);
81
+ expectTypeOf(hint).toEqualTypeOf();
82
+ expect(hint.kind).toBe('structured-ops');
83
+ expect(hint.ops[0]?.op).toBe('nexus.context');
84
+ });
85
+ it('is a discriminated union — `kind` narrows to each variant', () => {
86
+ const hints = [
87
+ expansionFromNextDirectives({ all: 'cleo list' }),
88
+ expansionFromSuggestedCommands(['cleo next']),
89
+ expansionFromStructuredOps([]),
90
+ ];
91
+ for (const hint of hints) {
92
+ if (isNextDirectivesHint(hint)) {
93
+ expectTypeOf(hint).toEqualTypeOf();
94
+ expect(typeof hint.directives).toBe('object');
95
+ }
96
+ else if (isSuggestedCommandsHint(hint)) {
97
+ expectTypeOf(hint).toEqualTypeOf();
98
+ expect(Array.isArray(hint.commands)).toBe(true);
99
+ }
100
+ else if (isStructuredOpsHint(hint)) {
101
+ expectTypeOf(hint).toEqualTypeOf();
102
+ expect(Array.isArray(hint.ops)).toBe(true);
103
+ }
104
+ }
105
+ });
106
+ it('the union has exactly three variants and never widens to `any`', () => {
107
+ expectTypeOf().toEqualTypeOf();
108
+ expectTypeOf().toEqualTypeOf();
109
+ });
110
+ });
111
+ describe('MviDigest carries any legacy hint as its expand field (T11349)', () => {
112
+ it('a tasks-list digest expands via NextDirectives', () => {
113
+ const digest = {
114
+ summary: '3 ready tasks',
115
+ count: 3,
116
+ preview: [{ id: 'T1' }],
117
+ expand: expansionFromNextDirectives({ all: 'cleo orchestrate ready --epic T0' }),
118
+ };
119
+ expect(isNextDirectivesHint(digest.expand)).toBe(true);
120
+ });
121
+ it('a mutate-op digest expands via suggested commands', () => {
122
+ const digest = {
123
+ summary: 'task created',
124
+ count: 1,
125
+ expand: expansionFromSuggestedCommands(['cleo show T9', 'cleo focus T9']),
126
+ };
127
+ expect(isSuggestedCommandsHint(digest.expand)).toBe(true);
128
+ });
129
+ it('a nexus digest expands via structured ops', () => {
130
+ const digest = {
131
+ summary: '5 affected symbols',
132
+ count: 5,
133
+ expand: expansionFromStructuredOps([
134
+ {
135
+ op: 'nexus.impact',
136
+ args: { target: 'x' },
137
+ scope: 'project',
138
+ effect: 'read',
139
+ requiresConfirmation: false,
140
+ reason: 'assess blast radius',
141
+ },
142
+ ]),
143
+ };
144
+ expect(isStructuredOpsHint(digest.expand)).toBe(true);
145
+ });
146
+ });
147
+ //# sourceMappingURL=mvi.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mvi.test.js","sourceRoot":"","sources":["../../src/__tests__/mvi.test.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ describe('dispatch/operation-def contracts', () => {
32
32
  expect(CANONICAL_DOMAINS.length).toBeGreaterThan(0);
33
33
  // T9954 — snapshot the current count so accidental additions/removals
34
34
  // trip this test and force an explicit human review.
35
- expect(CANONICAL_DOMAINS.length).toBe(22);
35
+ expect(CANONICAL_DOMAINS.length).toBe(23);
36
36
  });
37
37
  it('CANONICAL_DOMAINS contains the four sentinel newly-promoted domains', () => {
38
38
  // Spot-check the canonical surface: T964 conduit, T1726 sentient/release,
@@ -1 +1 @@
1
- {"version":3,"file":"operation-def.test.js","sourceRoot":"","sources":["../../src/__tests__/operation-def.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operation-def.test.js","sourceRoot":"","sources":["../../src/__tests__/operation-def.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AA6D5D,uEAAuE;AAEvE,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,KAAK,GAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpD,sEAAsE;QACtE,qDAAqD;QACrD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,0EAA0E;QAC1E,uEAAuE;QACvE,2DAA2D;QAC3D,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,GAAG,GAAiB;YACxB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,CAAC,QAAQ,CAAC;SAC3B,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,GAAG,GAAiB;YACxB,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,KAAK;YACjB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,CAAC,OAAO,CAAC;YACzB,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,mBAAmB;iBACjC;aACF;SACF,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,GAAG,GAAiB;YACxB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,wBAAwB;YACrC,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,EAAE;SACnB,CAAC;QACF,MAAM,CAAC,GAAe;YACpB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,QAAQ;YACnB,GAAG;SACJ,CAAC;QACF,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,mEAAmE;IACnE,kCAAkC;IAClC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAMR,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -163,4 +163,30 @@ export interface BoundaryEntry {
163
163
  * @see ADR-078 — Boundary Registry as SSoT for Rust/TS layering
164
164
  */
165
165
  export declare const BOUNDARY_REGISTRY: readonly BoundaryEntry[];
166
+ /**
167
+ * The canonical home-and-consumption boundary for the CORE-SDK tool layer.
168
+ *
169
+ * Atomic **tool primitives** (the smallest stateless side-effect units — see
170
+ * `@cleocode/contracts/tools/atomic` + `core/src/tools/*`) and their contracts
171
+ * have exactly the two homes in {@link AtomicToolBoundary.primitiveHomes}.
172
+ * **Composite skills** (multi-step capabilities that COMPOSE primitives) live
173
+ * in {@link AtomicToolBoundary.skillsHome}. The harness/provider packages in
174
+ * {@link AtomicToolBoundary.consumersNoRedefine} CONSUME the primitives via
175
+ * import and MUST NOT redefine them.
176
+ *
177
+ * Enforced (baseline mode) by `scripts/lint-tools-vs-skills-boundary.mjs`.
178
+ *
179
+ * @see ADR-078 — Boundary Registry
180
+ * @task T11409
181
+ */
182
+ export interface AtomicToolBoundary {
183
+ /** The only packages that may DEFINE atomic-tool primitives + contracts. */
184
+ readonly primitiveHomes: readonly string[];
185
+ /** Composite, multi-step capabilities (compose primitives) live here. */
186
+ readonly skillsHome: string;
187
+ /** Consume primitives via import — MUST NOT redefine them. */
188
+ readonly consumersNoRedefine: readonly string[];
189
+ }
190
+ /** {@inheritDoc AtomicToolBoundary} */
191
+ export declare const ATOMIC_TOOL_BOUNDARY: AtomicToolBoundary;
166
192
  //# sourceMappingURL=boundary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,iBAAiB,GACjB,UAAU,GACV,2BAA2B,GAC3B,mBAAmB,GACnB,cAAc,CAAC;AAMnB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,uBAAuB,CAAC;IACrD;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,4BAA4B,CAAC;IACzD;;;;OAIG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAAC;IAChD;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClD;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,qBAAqB,GACrB,yBAAyB,GACzB,UAAU,GACV;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAMzB;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,MAAM,EAAE,cAAc,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,aAAa,EAAE,aAAa,CAAC;IAC7B,6DAA6D;IAC7D,UAAU,EAAE,UAAU,CAAC;IACvB,0DAA0D;IAC1D,YAAY,EAAE,YAAY,CAAC;IAC3B,gHAAgH;IAChH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kGAAkG;IAClG,SAAS,EAAE,MAAM,CAAC;IAClB,wGAAwG;IACxG,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAMD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,aAAa,EA0pB5C,CAAC"}
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,iBAAiB,GACjB,UAAU,GACV,2BAA2B,GAC3B,mBAAmB,GACnB,cAAc,CAAC;AAMnB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,uBAAuB,CAAC;IACrD;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,4BAA4B,CAAC;IACzD;;;;OAIG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAAC;IAChD;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClD;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,qBAAqB,GACrB,yBAAyB,GACzB,UAAU,GACV;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAMzB;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,MAAM,EAAE,cAAc,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,aAAa,EAAE,aAAa,CAAC;IAC7B,6DAA6D;IAC7D,UAAU,EAAE,UAAU,CAAC;IACvB,0DAA0D;IAC1D,YAAY,EAAE,YAAY,CAAC;IAC3B,gHAAgH;IAChH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kGAAkG;IAClG,SAAS,EAAE,MAAM,CAAC;IAClB,wGAAwG;IACxG,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAMD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,aAAa,EA4rB5C,CAAC;AAMX;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,uCAAuC;AACvC,eAAO,MAAM,oBAAoB,EAAE,kBAIlC,CAAC"}