@inharness-ai/claude4spec 1.0.16 → 1.0.18

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 (137) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/bin/c4s/commands/tagged-list-mixed.js +2 -0
  3. package/dist/bin/c4s/commands/tagged-list-mixed.js.map +1 -1
  4. package/dist/client/assets/{arc-DrA6qHTw.js → arc-BoIjQ4Rl.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-3BPJPVTR-TEnwTtVX.js → architectureDiagram-3BPJPVTR-BxBVRaEg.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-GPEHLZMM-txRnQm5w.js → blockDiagram-GPEHLZMM-CUZNbllz.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-AAUBKEIU-ad8X3Q8n.js → c4Diagram-AAUBKEIU-CvuTKwEz.js} +1 -1
  8. package/dist/client/assets/channel-Ba45UACg.js +1 -0
  9. package/dist/client/assets/{chunk-2J33WTMH-Cp08Xa7f.js → chunk-2J33WTMH-CEO4c2pf.js} +1 -1
  10. package/dist/client/assets/{chunk-4BX2VUAB-Dc_0On6j.js → chunk-4BX2VUAB-Bu8DCHu0.js} +1 -1
  11. package/dist/client/assets/{chunk-55IACEB6-8d1qQ5z6.js → chunk-55IACEB6-DIN8FXXB.js} +1 -1
  12. package/dist/client/assets/{chunk-727SXJPM-TZenviWx.js → chunk-727SXJPM-DArSpufF.js} +1 -1
  13. package/dist/client/assets/{chunk-AQP2D5EJ-DKRRWy-J.js → chunk-AQP2D5EJ-DvyQ3boK.js} +1 -1
  14. package/dist/client/assets/{chunk-FMBD7UC4-DLEErJWK.js → chunk-FMBD7UC4-DzYhHpnC.js} +1 -1
  15. package/dist/client/assets/{chunk-ND2GUHAM-pKGgwz_0.js → chunk-ND2GUHAM-DocECmh1.js} +1 -1
  16. package/dist/client/assets/{chunk-QZHKN3VN-DVcNz8ng.js → chunk-QZHKN3VN-cUsgOLYm.js} +1 -1
  17. package/dist/client/assets/classDiagram-4FO5ZUOK-DigWu50-.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DigWu50-.js +1 -0
  19. package/dist/client/assets/{cose-bilkent-S5V4N54A-DZejbxEG.js → cose-bilkent-S5V4N54A-BXlU_dXh.js} +1 -1
  20. package/dist/client/assets/{dagre-BM42HDAG-DrPrkFcW.js → dagre-BM42HDAG-CmrHrBPK.js} +1 -1
  21. package/dist/client/assets/{diagram-2AECGRRQ-Dpn8TJa2.js → diagram-2AECGRRQ-CV4Tc8wQ.js} +1 -1
  22. package/dist/client/assets/{diagram-5GNKFQAL-BxkzEc_t.js → diagram-5GNKFQAL-BiBsPCGc.js} +1 -1
  23. package/dist/client/assets/{diagram-KO2AKTUF-KG0o4LQ7.js → diagram-KO2AKTUF-DA09S_op.js} +1 -1
  24. package/dist/client/assets/{diagram-LMA3HP47-CJ-AjQPt.js → diagram-LMA3HP47-DBaod99I.js} +1 -1
  25. package/dist/client/assets/{diagram-OG6HWLK6-D_FG9cDJ.js → diagram-OG6HWLK6-ClJXH4o0.js} +1 -1
  26. package/dist/client/assets/{erDiagram-TEJ5UH35-DllhUlzY.js → erDiagram-TEJ5UH35-9ic-AAly.js} +1 -1
  27. package/dist/client/assets/{flowDiagram-I6XJVG4X-Bg3OotXu.js → flowDiagram-I6XJVG4X-8UWNEpWY.js} +1 -1
  28. package/dist/client/assets/{ganttDiagram-6RSMTGT7-BUpUL2Cj.js → ganttDiagram-6RSMTGT7-ZMUkzsKr.js} +1 -1
  29. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DMRhyWth.js → gitGraphDiagram-PVQCEYII-5MgsfBQ-.js} +1 -1
  30. package/dist/client/assets/{index-BB2RmhGR.js → index-B3XLrPs9.js} +1 -1
  31. package/dist/client/assets/{index-BXzOTCgN.css → index-BKuHIaMg.css} +1 -1
  32. package/dist/client/assets/index-BSPNo0Xa.js +795 -0
  33. package/dist/client/assets/{index-Daewu-VD.js → index-D7DH-SO5.js} +1 -1
  34. package/dist/client/assets/{infoDiagram-5YYISTIA-Bq9D64Ar.js → infoDiagram-5YYISTIA-DnoyGZzF.js} +1 -1
  35. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DIaKHHF-.js → ishikawaDiagram-YF4QCWOH-DXzuF94t.js} +1 -1
  36. package/dist/client/assets/{journeyDiagram-JHISSGLW-gQWGLTeZ.js → journeyDiagram-JHISSGLW-AEPglDXi.js} +1 -1
  37. package/dist/client/assets/{kanban-definition-UN3LZRKU-vRgZ5RjE.js → kanban-definition-UN3LZRKU-D0-kFv2f.js} +1 -1
  38. package/dist/client/assets/{linear-B4a11szP.js → linear-CZwFXsxu.js} +1 -1
  39. package/dist/client/assets/{mermaid.core-JhUbsJFB.js → mermaid.core-BikmxM36.js} +4 -4
  40. package/dist/client/assets/{mindmap-definition-RKZ34NQL-ZH-Oz_D-.js → mindmap-definition-RKZ34NQL-C95lTdDB.js} +1 -1
  41. package/dist/client/assets/{pieDiagram-4H26LBE5-6rpNrJR6.js → pieDiagram-4H26LBE5-CMeXZFX8.js} +1 -1
  42. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-DpTKtxEM.js → quadrantDiagram-W4KKPZXB-D1dG1F2s.js} +1 -1
  43. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DpDvZkrK.js → requirementDiagram-4Y6WPE33-RPNqJRNK.js} +1 -1
  44. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-KKjWCTYP.js → sankeyDiagram-5OEKKPKP-DQ4EB8Xb.js} +1 -1
  45. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BCmXos1U.js → sequenceDiagram-3UESZ5HK-Dn-VJOlP.js} +1 -1
  46. package/dist/client/assets/{stateDiagram-AJRCARHV-Xq7jqpMj.js → stateDiagram-AJRCARHV-CCpprZJO.js} +1 -1
  47. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DZMO7v7d.js +1 -0
  48. package/dist/client/assets/{timeline-definition-PNZ67QCA-CMmq8p5q.js → timeline-definition-PNZ67QCA-h0cUr7kp.js} +1 -1
  49. package/dist/client/assets/{vennDiagram-CIIHVFJN-DgK-w2Jv.js → vennDiagram-CIIHVFJN-BTZzKsPH.js} +1 -1
  50. package/dist/client/assets/{wardley-L42UT6IY-C5CwlFHh.js → wardley-L42UT6IY-D1eOaFAH.js} +1 -1
  51. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D47CtDSc.js → wardleyDiagram-YWT4CUSO-wsnKkjjR.js} +1 -1
  52. package/dist/client/assets/{xychartDiagram-2RQKCTM6-C1M_xTVv.js → xychartDiagram-2RQKCTM6-BCebuOGO.js} +1 -1
  53. package/dist/client/index.html +2 -2
  54. package/dist/server/config.js.map +1 -1
  55. package/dist/server/db/migrations/036_design_system.sql +16 -0
  56. package/dist/server/db/migrations/037_ui_view_design_system_slug.sql +7 -0
  57. package/dist/server/db/migrations/038_chat_queued_message.sql +18 -0
  58. package/dist/server/db/migrations/039_agent_credential.sql +17 -0
  59. package/dist/server/domain/raw-entity-reader.d.ts +1 -1
  60. package/dist/server/domain/raw-entity-reader.js +19 -3
  61. package/dist/server/domain/raw-entity-reader.js.map +1 -1
  62. package/dist/server/entities/design-system/mcp-server.d.ts +10 -0
  63. package/dist/server/entities/design-system/mcp-server.js +188 -0
  64. package/dist/server/entities/design-system/mcp-server.js.map +1 -0
  65. package/dist/server/entities/design-system/plugin.d.ts +3 -0
  66. package/dist/server/entities/design-system/plugin.js +34 -0
  67. package/dist/server/entities/design-system/plugin.js.map +1 -0
  68. package/dist/server/entities/design-system/routes.d.ts +5 -0
  69. package/dist/server/entities/design-system/routes.js +86 -0
  70. package/dist/server/entities/design-system/routes.js.map +1 -0
  71. package/dist/server/entities/design-system/serializer.d.ts +29 -0
  72. package/dist/server/entities/design-system/serializer.js +0 -0
  73. package/dist/server/entities/design-system/serializer.js.map +1 -0
  74. package/dist/server/entities/design-system/services.d.ts +49 -0
  75. package/dist/server/entities/design-system/services.js +225 -0
  76. package/dist/server/entities/design-system/services.js.map +1 -0
  77. package/dist/server/entities/design-system/system-prompt.d.ts +2 -0
  78. package/dist/server/entities/design-system/system-prompt.js +15 -0
  79. package/dist/server/entities/design-system/system-prompt.js.map +1 -0
  80. package/dist/server/entities/ui-view/mcp-server.js +14 -0
  81. package/dist/server/entities/ui-view/mcp-server.js.map +1 -1
  82. package/dist/server/entities/ui-view/serializer.d.ts +2 -0
  83. package/dist/server/entities/ui-view/serializer.js +25 -3
  84. package/dist/server/entities/ui-view/serializer.js.map +1 -1
  85. package/dist/server/entities/ui-view/services.js +22 -8
  86. package/dist/server/entities/ui-view/services.js.map +1 -1
  87. package/dist/server/mcp/c4s-reader.js +2 -0
  88. package/dist/server/mcp/c4s-reader.js.map +1 -1
  89. package/dist/server/routes/agent-credential.d.ts +9 -0
  90. package/dist/server/routes/agent-credential.js +43 -0
  91. package/dist/server/routes/agent-credential.js.map +1 -0
  92. package/dist/server/routes/agent-turn.d.ts +10 -0
  93. package/dist/server/routes/agent-turn.js +154 -85
  94. package/dist/server/routes/agent-turn.js.map +1 -1
  95. package/dist/server/routes/chat.js +99 -7
  96. package/dist/server/routes/chat.js.map +1 -1
  97. package/dist/server/routes/threads.js +12 -0
  98. package/dist/server/routes/threads.js.map +1 -1
  99. package/dist/server/serialization/registerAll.js +2 -0
  100. package/dist/server/serialization/registerAll.js.map +1 -1
  101. package/dist/server/serialization/writer.d.ts +2 -1
  102. package/dist/server/services/agent-credential-crypto.d.ts +4 -0
  103. package/dist/server/services/agent-credential-crypto.js +59 -0
  104. package/dist/server/services/agent-credential-crypto.js.map +1 -0
  105. package/dist/server/services/agent-credential.d.ts +32 -0
  106. package/dist/server/services/agent-credential.js +67 -0
  107. package/dist/server/services/agent-credential.js.map +1 -0
  108. package/dist/server/services/chat.d.ts +24 -1
  109. package/dist/server/services/chat.js +96 -0
  110. package/dist/server/services/chat.js.map +1 -1
  111. package/dist/server/services/entity-indexer.js +16 -2
  112. package/dist/server/services/entity-indexer.js.map +1 -1
  113. package/dist/server/services/entity-writer.d.ts +2 -0
  114. package/dist/server/services/entity-writer.js +12 -0
  115. package/dist/server/services/entity-writer.js.map +1 -1
  116. package/dist/server/services/references.js +20 -0
  117. package/dist/server/services/references.js.map +1 -1
  118. package/dist/server/services/slug.d.ts +1 -0
  119. package/dist/server/services/slug.js +6 -0
  120. package/dist/server/services/slug.js.map +1 -1
  121. package/dist/server/workspace/project-context.js +6 -0
  122. package/dist/server/workspace/project-context.js.map +1 -1
  123. package/dist/shared/agent-credential.d.ts +19 -0
  124. package/dist/shared/agent-credential.js +6 -0
  125. package/dist/shared/agent-credential.js.map +1 -0
  126. package/dist/shared/design-system.d.ts +20 -0
  127. package/dist/shared/design-system.js +222 -0
  128. package/dist/shared/design-system.js.map +1 -0
  129. package/dist/shared/entities.d.ts +127 -1
  130. package/dist/shared/entities.js +4 -0
  131. package/dist/shared/entities.js.map +1 -1
  132. package/package.json +3 -3
  133. package/dist/client/assets/channel-zmRfuI3H.js +0 -1
  134. package/dist/client/assets/classDiagram-4FO5ZUOK-B9RFgPu-.js +0 -1
  135. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B9RFgPu-.js +0 -1
  136. package/dist/client/assets/index-DRFbyGvK.js +0 -788
  137. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-C3mDHsxD.js +0 -1
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Pure, deterministic design-system token logic shared by the server (L2 service
3
+ * + L9 serializer) and the client (L5 live preview). No DB / no I/O — the single
4
+ * implementation of `resolve()` and `lintTokens()` referenced by the brief.
5
+ */
6
+ import { type DesignMode, type DesignSystem, type DesignSystemListItem, type ResolvedTokenValue, type TokenGroup } from './entities.js';
7
+ export declare function parseGroups(raw: string | unknown): TokenGroup[];
8
+ export declare function parseModes(raw: string | unknown): DesignMode[];
9
+ export declare function toListItem(ds: DesignSystem): DesignSystemListItem;
10
+ export declare function aliasTarget(value: string): string | null;
11
+ /**
12
+ * Resolve every token to its concrete value:
13
+ * 1. recursive `{token}` alias expansion with cycle detection → `unresolved`
14
+ * (never throws),
15
+ * 2. active-mode overrides applied over base (Base = no overrides); unknown
16
+ * override token ignored,
17
+ * 3. name → resolvedValue (object for composite tokens).
18
+ */
19
+ export declare function resolve(groups: TokenGroup[], modes: DesignMode[], activeMode?: string): Record<string, ResolvedTokenValue>;
20
+ export declare function lintTokens(groups: TokenGroup[], modes: DesignMode[]): string[];
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Pure, deterministic design-system token logic shared by the server (L2 service
3
+ * + L9 serializer) and the client (L5 live preview). No DB / no I/O — the single
4
+ * implementation of `resolve()` and `lintTokens()` referenced by the brief.
5
+ */
6
+ import { COMPOSITE_TOKEN_TYPES, UNRESOLVED_TOKEN, } from './entities.js';
7
+ // ─── parsing (tolerant of raw JSON strings or already-parsed arrays) ─────────
8
+ function coerceArray(raw) {
9
+ if (Array.isArray(raw))
10
+ return raw;
11
+ if (typeof raw === 'string') {
12
+ try {
13
+ const parsed = JSON.parse(raw);
14
+ return Array.isArray(parsed) ? parsed : [];
15
+ }
16
+ catch {
17
+ return [];
18
+ }
19
+ }
20
+ return [];
21
+ }
22
+ function parseValue(value) {
23
+ if (typeof value === 'string')
24
+ return value;
25
+ if (value && typeof value === 'object') {
26
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, String(v)]));
27
+ }
28
+ return '';
29
+ }
30
+ function parseToken(t) {
31
+ const o = (t ?? {});
32
+ const out = {
33
+ name: String(o.name ?? ''),
34
+ type: String(o.type ?? 'string'),
35
+ value: parseValue(o.value),
36
+ };
37
+ if (typeof o.description === 'string')
38
+ out.description = o.description;
39
+ return out;
40
+ }
41
+ export function parseGroups(raw) {
42
+ return coerceArray(raw)
43
+ .filter((g) => g !== null && typeof g === 'object')
44
+ .map((g) => ({
45
+ name: String(g.name ?? ''),
46
+ tier: g.tier === 'semantic' ? 'semantic' : 'primitive',
47
+ tokens: Array.isArray(g.tokens) ? g.tokens.map(parseToken) : [],
48
+ }));
49
+ }
50
+ export function parseModes(raw) {
51
+ return coerceArray(raw)
52
+ .filter((m) => m !== null && typeof m === 'object')
53
+ .map((m) => ({
54
+ name: String(m.name ?? ''),
55
+ overrides: Array.isArray(m.overrides)
56
+ ? m.overrides
57
+ .filter((o) => o !== null && typeof o === 'object')
58
+ .map((o) => ({ token: String(o.token ?? ''), value: parseValue(o.value) }))
59
+ : [],
60
+ }));
61
+ }
62
+ export function toListItem(ds) {
63
+ return {
64
+ slug: ds.slug,
65
+ name: ds.name,
66
+ description: ds.description,
67
+ groupCount: ds.groups.length,
68
+ tokenCount: ds.groups.reduce((acc, g) => acc + (g.tokens?.length ?? 0), 0),
69
+ modeCount: ds.modes.length,
70
+ tags: ds.tags,
71
+ };
72
+ }
73
+ // ─── resolve() ───────────────────────────────────────────────────────────────
74
+ const ALIAS_RE = /^\{([^}]+)\}$/;
75
+ export function aliasTarget(value) {
76
+ const m = ALIAS_RE.exec(value.trim());
77
+ return m ? m[1].trim() : null;
78
+ }
79
+ /**
80
+ * Resolve every token to its concrete value:
81
+ * 1. recursive `{token}` alias expansion with cycle detection → `unresolved`
82
+ * (never throws),
83
+ * 2. active-mode overrides applied over base (Base = no overrides); unknown
84
+ * override token ignored,
85
+ * 3. name → resolvedValue (object for composite tokens).
86
+ */
87
+ export function resolve(groups, modes, activeMode) {
88
+ const base = new Map();
89
+ for (const g of groups ?? []) {
90
+ for (const t of g.tokens ?? []) {
91
+ if (t && typeof t.name === 'string' && t.name)
92
+ base.set(t.name, t.value);
93
+ }
94
+ }
95
+ if (activeMode) {
96
+ const mode = (modes ?? []).find((m) => m.name === activeMode);
97
+ if (mode) {
98
+ for (const ov of mode.overrides ?? []) {
99
+ if (base.has(ov.token))
100
+ base.set(ov.token, ov.value);
101
+ }
102
+ }
103
+ }
104
+ const resolveValue = (value, seen) => {
105
+ if (typeof value === 'string') {
106
+ const target = aliasTarget(value);
107
+ if (target === null)
108
+ return value; // literal
109
+ if (seen.has(target) || !base.has(target))
110
+ return UNRESOLVED_TOKEN;
111
+ const next = new Set(seen);
112
+ next.add(target);
113
+ return resolveValue(base.get(target), next);
114
+ }
115
+ const out = {};
116
+ for (const [k, fieldVal] of Object.entries(value ?? {})) {
117
+ const r = resolveValue(typeof fieldVal === 'string' ? fieldVal : '', seen);
118
+ out[k] = typeof r === 'string' ? r : UNRESOLVED_TOKEN;
119
+ }
120
+ return out;
121
+ };
122
+ const result = {};
123
+ for (const [name, value] of base) {
124
+ result[name] = resolveValue(value, new Set([name]));
125
+ }
126
+ return result;
127
+ }
128
+ // ─── lintTokens() — warnings only; never blocks a write ──────────────────────
129
+ function isComposite(type) {
130
+ return COMPOSITE_TOKEN_TYPES.includes(type);
131
+ }
132
+ function aliasTargetOf(t) {
133
+ if (!t || typeof t.value !== 'string')
134
+ return null;
135
+ return aliasTarget(t.value);
136
+ }
137
+ function detectCycles(base) {
138
+ const out = [];
139
+ const reported = new Set();
140
+ for (const start of base.keys()) {
141
+ const seen = [];
142
+ const seenSet = new Set();
143
+ let cur = start;
144
+ while (cur && base.has(cur)) {
145
+ if (seenSet.has(cur)) {
146
+ const idx = seen.indexOf(cur);
147
+ const cycle = seen.slice(idx).concat(cur);
148
+ const key = [...new Set(cycle)].sort().join('|');
149
+ if (!reported.has(key)) {
150
+ reported.add(key);
151
+ out.push(`Alias cycle: ${cycle.join(' → ')}`);
152
+ }
153
+ break;
154
+ }
155
+ seenSet.add(cur);
156
+ seen.push(cur);
157
+ cur = aliasTargetOf(base.get(cur));
158
+ }
159
+ }
160
+ return out;
161
+ }
162
+ export function lintTokens(groups, modes) {
163
+ const warnings = [];
164
+ const base = new Map();
165
+ const seenNames = new Set();
166
+ for (const g of groups ?? []) {
167
+ for (const t of g.tokens ?? []) {
168
+ if (!t || typeof t.name !== 'string' || !t.name)
169
+ continue;
170
+ if (seenNames.has(t.name))
171
+ warnings.push(`Duplicate token name '${t.name}'`);
172
+ seenNames.add(t.name);
173
+ base.set(t.name, t);
174
+ }
175
+ }
176
+ for (const g of groups ?? []) {
177
+ for (const t of g.tokens ?? []) {
178
+ if (!t || typeof t.name !== 'string' || !t.name)
179
+ continue;
180
+ const composite = isComposite(t.type);
181
+ if (t.value !== null && typeof t.value === 'object' && !composite) {
182
+ warnings.push(`Token '${t.name}': object value requires a composite type (typography|shadow), got '${t.type}'`);
183
+ }
184
+ if (typeof t.value === 'string' && composite) {
185
+ warnings.push(`Token '${t.name}': type '${t.type}' expects a composite object value, got a string`);
186
+ }
187
+ const aliasRefs = [];
188
+ if (typeof t.value === 'string') {
189
+ const target = aliasTarget(t.value);
190
+ if (target)
191
+ aliasRefs.push(target);
192
+ else if (g.tier === 'semantic') {
193
+ warnings.push(`note: semantic token '${t.name}' uses a literal value instead of an alias`);
194
+ }
195
+ }
196
+ else if (t.value && typeof t.value === 'object') {
197
+ for (const fv of Object.values(t.value)) {
198
+ if (typeof fv === 'string') {
199
+ const target = aliasTarget(fv);
200
+ if (target)
201
+ aliasRefs.push(target);
202
+ }
203
+ }
204
+ }
205
+ for (const ref of aliasRefs) {
206
+ if (!base.has(ref)) {
207
+ warnings.push(`Token '${t.name}': alias '{${ref}}' points to a non-existent token`);
208
+ }
209
+ }
210
+ }
211
+ }
212
+ warnings.push(...detectCycles(base));
213
+ for (const m of modes ?? []) {
214
+ for (const ov of m.overrides ?? []) {
215
+ if (!base.has(ov.token)) {
216
+ warnings.push(`Mode '${m.name}': override targets non-existent token '${ov.token}'`);
217
+ }
218
+ }
219
+ }
220
+ return [...new Set(warnings)];
221
+ }
222
+ //# sourceMappingURL=design-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-system.js","sourceRoot":"","sources":["../../src/shared/design-system.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { TodoItem, UsageStats } from '@inharness-ai/agent-adapters';
2
2
  export type { TodoItem, UsageStats };
3
- export type EntityType = 'endpoint' | 'dto' | 'database-table' | 'ui-view' | 'ac' | 'section';
3
+ export type EntityType = 'endpoint' | 'dto' | 'database-table' | 'ui-view' | 'ac' | 'design-system' | 'section';
4
4
  export type ChangedBy = 'user' | 'agent';
5
5
  export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
6
6
  export type EndpointDtoRelation = 'request' | 'response' | 'error';
@@ -194,6 +194,8 @@ export interface UiView {
194
194
  url: string | null;
195
195
  description: string | null;
196
196
  params: UiViewParam[];
197
+ /** v0.1.59: structural (non-tag) relation to a design-system. NULL = none. Slug, no FK. */
198
+ designSystemSlug: string | null;
197
199
  tags: string[];
198
200
  createdAt: string;
199
201
  updatedAt: string;
@@ -203,6 +205,8 @@ export interface UiViewCreateInput {
203
205
  url?: string | null;
204
206
  description?: string;
205
207
  params?: UiViewParam[];
208
+ /** v0.1.59: slug of the referenced design-system (no FK). undefined/null = none. */
209
+ designSystemSlug?: string | null;
206
210
  slug?: string;
207
211
  tags?: string[];
208
212
  }
@@ -211,6 +215,8 @@ export interface UiViewUpdateInput {
211
215
  url?: string | null;
212
216
  description?: string | null;
213
217
  params?: UiViewParam[];
218
+ /** v0.1.59: undefined = unchanged; null = clear; string = set (dangling allowed). */
219
+ designSystemSlug?: string | null;
214
220
  tags?: string[];
215
221
  newSlug?: string;
216
222
  }
@@ -225,6 +231,92 @@ export interface UiViewDeleteResult {
225
231
  deleted: true;
226
232
  brokenReferences: BrokenReference[];
227
233
  }
234
+ export type TokenTier = 'primitive' | 'semantic';
235
+ /** Best-effort vocabulary — the linter warns but never hard-validates `type`. */
236
+ export type TokenType = 'color' | 'dimension' | 'fontFamily' | 'fontWeight' | 'fontSize' | 'lineHeight' | 'letterSpacing' | 'duration' | 'easing' | 'shadow' | 'opacity' | 'zIndex' | 'number' | 'string' | 'typography';
237
+ /** Token types whose `value` is a composite object (each field literal or `{alias}`). */
238
+ export declare const COMPOSITE_TOKEN_TYPES: readonly ["typography", "shadow"];
239
+ /** Literal/alias string, or a composite object (typography/shadow). */
240
+ export type TokenValue = string | Record<string, string>;
241
+ export interface DesignToken {
242
+ name: string;
243
+ /** TokenType vocabulary, but typed loosely — linter is best-effort. */
244
+ type: string;
245
+ value: TokenValue;
246
+ description?: string;
247
+ }
248
+ export interface TokenGroup {
249
+ name: string;
250
+ tier: TokenTier;
251
+ tokens: DesignToken[];
252
+ }
253
+ export interface DesignModeOverride {
254
+ token: string;
255
+ value: TokenValue;
256
+ }
257
+ export interface DesignMode {
258
+ name: string;
259
+ overrides: DesignModeOverride[];
260
+ }
261
+ export interface DesignSystem {
262
+ slug: string;
263
+ name: string;
264
+ description: string | null;
265
+ groups: TokenGroup[];
266
+ modes: DesignMode[];
267
+ tags: string[];
268
+ createdAt: string;
269
+ updatedAt: string;
270
+ }
271
+ export interface DesignSystemCreateInput {
272
+ name: string;
273
+ description?: string;
274
+ groups?: TokenGroup[];
275
+ modes?: DesignMode[];
276
+ /** Optional explicit slug — used by M17 restore to preserve identity. */
277
+ slug?: string;
278
+ tags?: string[];
279
+ }
280
+ export interface DesignSystemUpdateInput {
281
+ name?: string;
282
+ description?: string | null;
283
+ /** Full replace of the array (not per-token patch). */
284
+ groups?: TokenGroup[];
285
+ /** Full replace of the array (not per-mode patch). */
286
+ modes?: DesignMode[];
287
+ tags?: string[];
288
+ newSlug?: string;
289
+ }
290
+ export interface DesignSystemListQuery {
291
+ tags?: string[];
292
+ tagFilter?: 'and' | 'or';
293
+ search?: string;
294
+ limit?: number;
295
+ offset?: number;
296
+ }
297
+ /** Trimmed list row — counts computed server-side without the full token payload. */
298
+ export interface DesignSystemListItem {
299
+ slug: string;
300
+ name: string;
301
+ description: string | null;
302
+ groupCount: number;
303
+ tokenCount: number;
304
+ modeCount: number;
305
+ tags: string[];
306
+ }
307
+ export interface DesignSystemDanglingUiView {
308
+ slug: string;
309
+ }
310
+ export interface DesignSystemDeleteResult {
311
+ deleted: true;
312
+ brokenReferences: BrokenReference[];
313
+ /** UI views whose `designSystemSlug` pointed at the deleted record (now dangling). */
314
+ danglingUiViews: DesignSystemDanglingUiView[];
315
+ }
316
+ /** Resolved token value: literal string, resolved composite object, or the `unresolved` sentinel. */
317
+ export type ResolvedTokenValue = string | Record<string, string>;
318
+ /** Sentinel for an alias that cannot be resolved (cycle / missing target). Preview never crashes. */
319
+ export declare const UNRESOLVED_TOKEN = "unresolved";
228
320
  export interface Tag {
229
321
  slug: string;
230
322
  name: string;
@@ -467,6 +559,12 @@ export interface ChatThread {
467
559
  id: string;
468
560
  title: string | null;
469
561
  lastSessionId: string | null;
562
+ /** M05 0.1.61: turn-1 architecture snapshot (model + reasoning config). null until the
563
+ * thread has a session; controls hydrate from this when session-locked. */
564
+ initialArchitectureConfig: {
565
+ model: string;
566
+ architectureConfig: Record<string, unknown>;
567
+ } | null;
470
568
  currentTodoItems: TodoItem[] | null;
471
569
  planMode: boolean;
472
570
  usage: UsageStats | null;
@@ -519,6 +617,34 @@ export interface Annotation {
519
617
  to: number;
520
618
  };
521
619
  }
620
+ /**
621
+ * A message waiting in a thread's queue. **Frozen wire contract** — the field
622
+ * names must match `@inharness-ai/agent-chat`'s `QueuedMessage`, because the
623
+ * client hydrates queue chips from them. Derived from a `chat_queued_message`
624
+ * row: `id → String(id)`, `text = prompt`, `createdAt = created_at`.
625
+ */
626
+ export interface QueuedMessage {
627
+ /** `String(chat_queued_message.id)` — key for cancel/chip. */
628
+ id: string;
629
+ /** `chat_queued_message.prompt`; restored to the composer on abort/clear. */
630
+ text: string;
631
+ /** ISO timestamp of when the message was enqueued. */
632
+ createdAt: string;
633
+ }
634
+ /** Body of `POST /api/chat/queue/:threadId` — same context as `POST /api/chat`. */
635
+ export interface QueueMessageRequest {
636
+ prompt: string;
637
+ annotations?: Annotation[];
638
+ currentPage?: string | null;
639
+ }
640
+ /** Full queue snapshot after a mutation (enqueue/cancel) and carried by SSE `queue_updated`. */
641
+ export interface QueueSnapshotResponse {
642
+ queued: QueuedMessage[];
643
+ }
644
+ /** Returned by `DELETE /api/chat/queue/:threadId` and attached to abort responses. */
645
+ export interface ClearedQueueResponse {
646
+ clearedTexts: string[];
647
+ }
522
648
  export type PlanExecuteMode = 'new-session' | 'continue';
523
649
  export type PlanAction = 'replace' | 'append' | 'insert_after_section' | 'user_edit' | 'system_duplicate';
524
650
  export type PlanChangedBy = 'agent' | 'user' | 'system';
@@ -1,3 +1,7 @@
1
+ /** Token types whose `value` is a composite object (each field literal or `{alias}`). */
2
+ export const COMPOSITE_TOKEN_TYPES = ['typography', 'shadow'];
3
+ /** Sentinel for an alias that cannot be resolved (cycle / missing target). Preview never crashes. */
4
+ export const UNRESOLVED_TOKEN = 'unresolved';
1
5
  /** Reserved frontmatter keys agent cannot mutate via update_brief. */
2
6
  export const BRIEF_IMMUTABLE_FRONTMATTER_KEYS = [
3
7
  'type',
@@ -1 +1 @@
1
- {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/shared/entities.ts"],"names":[],"mappings":"AA4pBA,sEAAsE;AACtE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,MAAM;IACN,cAAc;IACd,YAAY;IACZ,cAAc;IACd,mBAAmB;CACX,CAAC;AAiFX;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,MAAM;IACN,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,YAAY;CACJ,CAAC"}
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/shared/entities.ts"],"names":[],"mappings":"AA8SA,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAU,CAAC;AA8FvE,qGAAqG;AACrG,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAwb7C,sEAAsE;AACtE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,MAAM;IACN,cAAc;IACd,YAAY;IACZ,cAAc;IACd,mBAAmB;CACX,CAAC;AAiFX;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,MAAM;IACN,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,YAAY;CACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inharness-ai/claude4spec",
3
- "version": "1.0.16",
3
+ "version": "1.0.18",
4
4
  "description": "Plan the whole system before your agent writes a line of code. Local-first planning layer with structured entities and typed relations.",
5
5
  "license": "MIT",
6
6
  "author": "Mike Tomala <mike@inharness.ai>",
@@ -57,8 +57,8 @@
57
57
  "dependencies": {
58
58
  "@anthropic-ai/claude-agent-sdk": "^0.2.109",
59
59
  "@google/gemini-cli-core": "^0.42.0",
60
- "@inharness-ai/agent-adapters": "^0.6.4",
61
- "@inharness-ai/agent-chat": "^0.3.0",
60
+ "@inharness-ai/agent-adapters": "^0.8.1",
61
+ "@inharness-ai/agent-chat": "^0.3.1",
62
62
  "@modelcontextprotocol/sdk": "^1.29.0",
63
63
  "@monaco-editor/react": "^4.7.0",
64
64
  "@openai/codex-sdk": "^0.130.0",
@@ -1 +0,0 @@
1
- import{ai as o,aj as n}from"./mermaid.core-JhUbsJFB.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-TZenviWx.js";import{_ as i}from"./mermaid.core-JhUbsJFB.js";import"./chunk-FMBD7UC4-DLEErJWK.js";import"./chunk-ND2GUHAM-pKGgwz_0.js";import"./chunk-55IACEB6-8d1qQ5z6.js";import"./chunk-2J33WTMH-Cp08Xa7f.js";import"./index-DRFbyGvK.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-TZenviWx.js";import{_ as i}from"./mermaid.core-JhUbsJFB.js";import"./chunk-FMBD7UC4-DLEErJWK.js";import"./chunk-ND2GUHAM-pKGgwz_0.js";import"./chunk-55IACEB6-8d1qQ5z6.js";import"./chunk-2J33WTMH-Cp08Xa7f.js";import"./index-DRFbyGvK.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};