opencode-flema-engram-sidebar 0.1.7 → 0.1.8

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 (45) hide show
  1. package/README.md +89 -25
  2. package/dist/adapters/cloud.js +1 -1
  3. package/dist/adapters/cloud.js.map +1 -1
  4. package/dist/adapters/factory.d.ts +2 -0
  5. package/dist/adapters/factory.d.ts.map +1 -1
  6. package/dist/adapters/factory.js +14 -3
  7. package/dist/adapters/factory.js.map +1 -1
  8. package/dist/adapters/local.d.ts.map +1 -1
  9. package/dist/adapters/local.js +5 -4
  10. package/dist/adapters/local.js.map +1 -1
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/mcp/server.js +4 -4
  16. package/dist/mcp/server.js.map +1 -1
  17. package/dist/mcp/tools/get-project-state.d.ts +3 -0
  18. package/dist/mcp/tools/get-project-state.d.ts.map +1 -1
  19. package/dist/mcp/tools/get-project-state.js +11 -6
  20. package/dist/mcp/tools/get-project-state.js.map +1 -1
  21. package/dist/schemas/odd-state.d.ts +401 -0
  22. package/dist/schemas/odd-state.d.ts.map +1 -0
  23. package/dist/schemas/odd-state.js +41 -0
  24. package/dist/schemas/odd-state.js.map +1 -0
  25. package/dist/sidebar/components/odd-progress.d.ts +13 -0
  26. package/dist/sidebar/components/odd-progress.d.ts.map +1 -0
  27. package/dist/sidebar/components/odd-progress.js +26 -0
  28. package/dist/sidebar/components/odd-progress.js.map +1 -0
  29. package/dist/sidebar/hooks/use-engram.d.ts +6 -0
  30. package/dist/sidebar/hooks/use-engram.d.ts.map +1 -1
  31. package/dist/sidebar/hooks/use-engram.js +52 -14
  32. package/dist/sidebar/hooks/use-engram.js.map +1 -1
  33. package/dist/sidebar/plugin.d.ts +9 -1
  34. package/dist/sidebar/plugin.d.ts.map +1 -1
  35. package/dist/sidebar/plugin.js +56 -3
  36. package/dist/sidebar/plugin.js.map +1 -1
  37. package/dist/utils/odd-detector.d.ts +8 -0
  38. package/dist/utils/odd-detector.d.ts.map +1 -0
  39. package/dist/utils/odd-detector.js +137 -0
  40. package/dist/utils/odd-detector.js.map +1 -0
  41. package/dist/utils/timeout.d.ts +4 -0
  42. package/dist/utils/timeout.d.ts.map +1 -0
  43. package/dist/utils/timeout.js +31 -0
  44. package/dist/utils/timeout.js.map +1 -0
  45. package/package.json +5 -4
@@ -1,8 +1,10 @@
1
1
  import { z } from "zod";
2
2
  import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
3
- import { groupByChange } from "../../utils/sdd-detector.js";
3
+ import { collectBlockers, groupByChange } from "../../utils/sdd-detector.js";
4
+ import { deriveODDState } from "../../utils/odd-detector.js";
4
5
  export const GetProjectStateInput = z.object({
5
6
  project: z.string().min(1),
7
+ includeLegacySdd: z.boolean().optional().default(false),
6
8
  });
7
9
  export async function getProjectStateHandler(adapter, args) {
8
10
  const { project } = args;
@@ -13,7 +15,8 @@ export async function getProjectStateHandler(adapter, args) {
13
15
  throw new McpError(ErrorCode.InvalidParams, `Project not found: ${project}`);
14
16
  }
15
17
  // Get observations for this project
16
- const observations = await adapter.listObservations({ project });
18
+ const observations = (await adapter.listObservations({ project }))
19
+ .filter((observation) => observation.project === project);
17
20
  // Group by type
18
21
  const byType = {};
19
22
  for (const obs of observations) {
@@ -25,8 +28,9 @@ export async function getProjectStateHandler(adapter, args) {
25
28
  const prefix = obs.topic_key.split("/")[0] ?? obs.topic_key;
26
29
  byTopicKey[prefix] = (byTopicKey[prefix] ?? 0) + 1;
27
30
  }
28
- // Detect SDD changes
29
- const changes = groupByChange(observations);
31
+ // ODD is canonical; legacy derivation is an explicit per-request addition.
32
+ const odd = deriveODDState(observations);
33
+ const legacy = args.includeLegacySdd ? { changes: groupByChange(observations) } : {};
30
34
  const state = {
31
35
  project: projectInfo,
32
36
  counts: {
@@ -34,8 +38,9 @@ export async function getProjectStateHandler(adapter, args) {
34
38
  byType,
35
39
  byTopicKey,
36
40
  },
37
- changes,
38
- blockers: changes.flatMap((change) => change.blockers).map((obs) => ({
41
+ odd,
42
+ ...legacy,
43
+ blockers: collectBlockers(observations).map((obs) => ({
39
44
  id: obs.id,
40
45
  title: obs.title,
41
46
  type: obs.type,
@@ -1 +1 @@
1
- {"version":3,"file":"get-project-state.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-project-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-project-state.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-project-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,401 @@
1
+ import { z } from "zod";
2
+ export declare const oddTaskStatusSchema: z.ZodEnum<["pending", "in_progress", "blocked", "done", "cancelled"]>;
3
+ export declare const oddTaskSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ title: z.ZodString;
6
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "done", "cancelled"]>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
9
+ id: string;
10
+ title: string;
11
+ }, {
12
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
13
+ id: string;
14
+ title: string;
15
+ }>;
16
+ export declare const oddProvenanceSchema: z.ZodObject<{
17
+ observationId: z.ZodNumber;
18
+ topicKey: z.ZodString;
19
+ project: z.ZodString;
20
+ updatedAt: z.ZodString;
21
+ }, "strip", z.ZodTypeAny, {
22
+ project: string;
23
+ observationId: number;
24
+ topicKey: string;
25
+ updatedAt: string;
26
+ }, {
27
+ project: string;
28
+ observationId: number;
29
+ topicKey: string;
30
+ updatedAt: string;
31
+ }>;
32
+ export declare const oddFeatureSchema: z.ZodObject<{
33
+ version: z.ZodLiteral<1>;
34
+ featureId: z.ZodString;
35
+ title: z.ZodString;
36
+ tasks: z.ZodArray<z.ZodObject<{
37
+ id: z.ZodString;
38
+ title: z.ZodString;
39
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "done", "cancelled"]>;
40
+ }, "strip", z.ZodTypeAny, {
41
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
42
+ id: string;
43
+ title: string;
44
+ }, {
45
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
46
+ id: string;
47
+ title: string;
48
+ }>, "many">;
49
+ progress: z.ZodObject<{
50
+ total: z.ZodNumber;
51
+ pending: z.ZodNumber;
52
+ in_progress: z.ZodNumber;
53
+ blocked: z.ZodNumber;
54
+ done: z.ZodNumber;
55
+ cancelled: z.ZodNumber;
56
+ }, "strip", z.ZodTypeAny, {
57
+ pending: number;
58
+ in_progress: number;
59
+ blocked: number;
60
+ done: number;
61
+ cancelled: number;
62
+ total: number;
63
+ }, {
64
+ pending: number;
65
+ in_progress: number;
66
+ blocked: number;
67
+ done: number;
68
+ cancelled: number;
69
+ total: number;
70
+ }>;
71
+ provenance: z.ZodObject<{
72
+ observationId: z.ZodNumber;
73
+ topicKey: z.ZodString;
74
+ project: z.ZodString;
75
+ updatedAt: z.ZodString;
76
+ }, "strip", z.ZodTypeAny, {
77
+ project: string;
78
+ observationId: number;
79
+ topicKey: string;
80
+ updatedAt: string;
81
+ }, {
82
+ project: string;
83
+ observationId: number;
84
+ topicKey: string;
85
+ updatedAt: string;
86
+ }>;
87
+ }, "strip", z.ZodTypeAny, {
88
+ title: string;
89
+ version: 1;
90
+ featureId: string;
91
+ tasks: {
92
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
93
+ id: string;
94
+ title: string;
95
+ }[];
96
+ progress: {
97
+ pending: number;
98
+ in_progress: number;
99
+ blocked: number;
100
+ done: number;
101
+ cancelled: number;
102
+ total: number;
103
+ };
104
+ provenance: {
105
+ project: string;
106
+ observationId: number;
107
+ topicKey: string;
108
+ updatedAt: string;
109
+ };
110
+ }, {
111
+ title: string;
112
+ version: 1;
113
+ featureId: string;
114
+ tasks: {
115
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
116
+ id: string;
117
+ title: string;
118
+ }[];
119
+ progress: {
120
+ pending: number;
121
+ in_progress: number;
122
+ blocked: number;
123
+ done: number;
124
+ cancelled: number;
125
+ total: number;
126
+ };
127
+ provenance: {
128
+ project: string;
129
+ observationId: number;
130
+ topicKey: string;
131
+ updatedAt: string;
132
+ };
133
+ }>;
134
+ export declare const oddDiagnosticSchema: z.ZodObject<{
135
+ code: z.ZodEnum<["invalid_topic", "invalid_timestamp", "invalid_heading", "invalid_tasks_section", "empty_tasks", "invalid_task", "checkbox_status_mismatch", "duplicate_task_id", "unclosed_fence"]>;
136
+ message: z.ZodString;
137
+ line: z.ZodOptional<z.ZodNumber>;
138
+ provenance: z.ZodObject<{
139
+ observationId: z.ZodNumber;
140
+ topicKey: z.ZodString;
141
+ project: z.ZodString;
142
+ updatedAt: z.ZodString;
143
+ }, "strip", z.ZodTypeAny, {
144
+ project: string;
145
+ observationId: number;
146
+ topicKey: string;
147
+ updatedAt: string;
148
+ }, {
149
+ project: string;
150
+ observationId: number;
151
+ topicKey: string;
152
+ updatedAt: string;
153
+ }>;
154
+ }, "strip", z.ZodTypeAny, {
155
+ code: "invalid_topic" | "invalid_timestamp" | "invalid_heading" | "invalid_tasks_section" | "empty_tasks" | "invalid_task" | "checkbox_status_mismatch" | "duplicate_task_id" | "unclosed_fence";
156
+ message: string;
157
+ provenance: {
158
+ project: string;
159
+ observationId: number;
160
+ topicKey: string;
161
+ updatedAt: string;
162
+ };
163
+ line?: number | undefined;
164
+ }, {
165
+ code: "invalid_topic" | "invalid_timestamp" | "invalid_heading" | "invalid_tasks_section" | "empty_tasks" | "invalid_task" | "checkbox_status_mismatch" | "duplicate_task_id" | "unclosed_fence";
166
+ message: string;
167
+ provenance: {
168
+ project: string;
169
+ observationId: number;
170
+ topicKey: string;
171
+ updatedAt: string;
172
+ };
173
+ line?: number | undefined;
174
+ }>;
175
+ export declare const oddStateSchema: z.ZodObject<{
176
+ bounded: z.ZodLiteral<true>;
177
+ features: z.ZodArray<z.ZodObject<{
178
+ version: z.ZodLiteral<1>;
179
+ featureId: z.ZodString;
180
+ title: z.ZodString;
181
+ tasks: z.ZodArray<z.ZodObject<{
182
+ id: z.ZodString;
183
+ title: z.ZodString;
184
+ status: z.ZodEnum<["pending", "in_progress", "blocked", "done", "cancelled"]>;
185
+ }, "strip", z.ZodTypeAny, {
186
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
187
+ id: string;
188
+ title: string;
189
+ }, {
190
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
191
+ id: string;
192
+ title: string;
193
+ }>, "many">;
194
+ progress: z.ZodObject<{
195
+ total: z.ZodNumber;
196
+ pending: z.ZodNumber;
197
+ in_progress: z.ZodNumber;
198
+ blocked: z.ZodNumber;
199
+ done: z.ZodNumber;
200
+ cancelled: z.ZodNumber;
201
+ }, "strip", z.ZodTypeAny, {
202
+ pending: number;
203
+ in_progress: number;
204
+ blocked: number;
205
+ done: number;
206
+ cancelled: number;
207
+ total: number;
208
+ }, {
209
+ pending: number;
210
+ in_progress: number;
211
+ blocked: number;
212
+ done: number;
213
+ cancelled: number;
214
+ total: number;
215
+ }>;
216
+ provenance: z.ZodObject<{
217
+ observationId: z.ZodNumber;
218
+ topicKey: z.ZodString;
219
+ project: z.ZodString;
220
+ updatedAt: z.ZodString;
221
+ }, "strip", z.ZodTypeAny, {
222
+ project: string;
223
+ observationId: number;
224
+ topicKey: string;
225
+ updatedAt: string;
226
+ }, {
227
+ project: string;
228
+ observationId: number;
229
+ topicKey: string;
230
+ updatedAt: string;
231
+ }>;
232
+ }, "strip", z.ZodTypeAny, {
233
+ title: string;
234
+ version: 1;
235
+ featureId: string;
236
+ tasks: {
237
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
238
+ id: string;
239
+ title: string;
240
+ }[];
241
+ progress: {
242
+ pending: number;
243
+ in_progress: number;
244
+ blocked: number;
245
+ done: number;
246
+ cancelled: number;
247
+ total: number;
248
+ };
249
+ provenance: {
250
+ project: string;
251
+ observationId: number;
252
+ topicKey: string;
253
+ updatedAt: string;
254
+ };
255
+ }, {
256
+ title: string;
257
+ version: 1;
258
+ featureId: string;
259
+ tasks: {
260
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
261
+ id: string;
262
+ title: string;
263
+ }[];
264
+ progress: {
265
+ pending: number;
266
+ in_progress: number;
267
+ blocked: number;
268
+ done: number;
269
+ cancelled: number;
270
+ total: number;
271
+ };
272
+ provenance: {
273
+ project: string;
274
+ observationId: number;
275
+ topicKey: string;
276
+ updatedAt: string;
277
+ };
278
+ }>, "many">;
279
+ diagnostics: z.ZodArray<z.ZodObject<{
280
+ code: z.ZodEnum<["invalid_topic", "invalid_timestamp", "invalid_heading", "invalid_tasks_section", "empty_tasks", "invalid_task", "checkbox_status_mismatch", "duplicate_task_id", "unclosed_fence"]>;
281
+ message: z.ZodString;
282
+ line: z.ZodOptional<z.ZodNumber>;
283
+ provenance: z.ZodObject<{
284
+ observationId: z.ZodNumber;
285
+ topicKey: z.ZodString;
286
+ project: z.ZodString;
287
+ updatedAt: z.ZodString;
288
+ }, "strip", z.ZodTypeAny, {
289
+ project: string;
290
+ observationId: number;
291
+ topicKey: string;
292
+ updatedAt: string;
293
+ }, {
294
+ project: string;
295
+ observationId: number;
296
+ topicKey: string;
297
+ updatedAt: string;
298
+ }>;
299
+ }, "strip", z.ZodTypeAny, {
300
+ code: "invalid_topic" | "invalid_timestamp" | "invalid_heading" | "invalid_tasks_section" | "empty_tasks" | "invalid_task" | "checkbox_status_mismatch" | "duplicate_task_id" | "unclosed_fence";
301
+ message: string;
302
+ provenance: {
303
+ project: string;
304
+ observationId: number;
305
+ topicKey: string;
306
+ updatedAt: string;
307
+ };
308
+ line?: number | undefined;
309
+ }, {
310
+ code: "invalid_topic" | "invalid_timestamp" | "invalid_heading" | "invalid_tasks_section" | "empty_tasks" | "invalid_task" | "checkbox_status_mismatch" | "duplicate_task_id" | "unclosed_fence";
311
+ message: string;
312
+ provenance: {
313
+ project: string;
314
+ observationId: number;
315
+ topicKey: string;
316
+ updatedAt: string;
317
+ };
318
+ line?: number | undefined;
319
+ }>, "many">;
320
+ }, "strip", z.ZodTypeAny, {
321
+ bounded: true;
322
+ features: {
323
+ title: string;
324
+ version: 1;
325
+ featureId: string;
326
+ tasks: {
327
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
328
+ id: string;
329
+ title: string;
330
+ }[];
331
+ progress: {
332
+ pending: number;
333
+ in_progress: number;
334
+ blocked: number;
335
+ done: number;
336
+ cancelled: number;
337
+ total: number;
338
+ };
339
+ provenance: {
340
+ project: string;
341
+ observationId: number;
342
+ topicKey: string;
343
+ updatedAt: string;
344
+ };
345
+ }[];
346
+ diagnostics: {
347
+ code: "invalid_topic" | "invalid_timestamp" | "invalid_heading" | "invalid_tasks_section" | "empty_tasks" | "invalid_task" | "checkbox_status_mismatch" | "duplicate_task_id" | "unclosed_fence";
348
+ message: string;
349
+ provenance: {
350
+ project: string;
351
+ observationId: number;
352
+ topicKey: string;
353
+ updatedAt: string;
354
+ };
355
+ line?: number | undefined;
356
+ }[];
357
+ }, {
358
+ bounded: true;
359
+ features: {
360
+ title: string;
361
+ version: 1;
362
+ featureId: string;
363
+ tasks: {
364
+ status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
365
+ id: string;
366
+ title: string;
367
+ }[];
368
+ progress: {
369
+ pending: number;
370
+ in_progress: number;
371
+ blocked: number;
372
+ done: number;
373
+ cancelled: number;
374
+ total: number;
375
+ };
376
+ provenance: {
377
+ project: string;
378
+ observationId: number;
379
+ topicKey: string;
380
+ updatedAt: string;
381
+ };
382
+ }[];
383
+ diagnostics: {
384
+ code: "invalid_topic" | "invalid_timestamp" | "invalid_heading" | "invalid_tasks_section" | "empty_tasks" | "invalid_task" | "checkbox_status_mismatch" | "duplicate_task_id" | "unclosed_fence";
385
+ message: string;
386
+ provenance: {
387
+ project: string;
388
+ observationId: number;
389
+ topicKey: string;
390
+ updatedAt: string;
391
+ };
392
+ line?: number | undefined;
393
+ }[];
394
+ }>;
395
+ export type ODDTaskStatus = z.infer<typeof oddTaskStatusSchema>;
396
+ export type ODDTask = z.infer<typeof oddTaskSchema>;
397
+ export type ODDProvenance = z.infer<typeof oddProvenanceSchema>;
398
+ export type ODDFeature = z.infer<typeof oddFeatureSchema>;
399
+ export type ODDDiagnostic = z.infer<typeof oddDiagnosticSchema>;
400
+ export type ODDState = z.infer<typeof oddStateSchema>;
401
+ //# sourceMappingURL=odd-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odd-state.d.ts","sourceRoot":"","sources":["../../src/schemas/odd-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB,uEAAqE,CAAC;AACtG,eAAO,MAAM,aAAa;;;;;;;;;;;;EAIxB,CAAC;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAM9B,CAAC;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc3B,CAAC;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK9B,CAAC;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ export const oddTaskStatusSchema = z.enum(["pending", "in_progress", "blocked", "done", "cancelled"]);
3
+ export const oddTaskSchema = z.object({
4
+ id: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/),
5
+ title: z.string().min(1),
6
+ status: oddTaskStatusSchema,
7
+ });
8
+ export const oddProvenanceSchema = z.object({
9
+ observationId: z.number().int().positive(),
10
+ topicKey: z.string(),
11
+ project: z.string().min(1),
12
+ // Preserve the source spelling (including SQLite timestamps).
13
+ updatedAt: z.string(),
14
+ });
15
+ export const oddFeatureSchema = z.object({
16
+ version: z.literal(1),
17
+ featureId: z.string().min(1),
18
+ title: z.string().min(1),
19
+ tasks: z.array(oddTaskSchema).min(1),
20
+ progress: z.object({
21
+ total: z.number().int().nonnegative(),
22
+ pending: z.number().int().nonnegative(),
23
+ in_progress: z.number().int().nonnegative(),
24
+ blocked: z.number().int().nonnegative(),
25
+ done: z.number().int().nonnegative(),
26
+ cancelled: z.number().int().nonnegative(),
27
+ }),
28
+ provenance: oddProvenanceSchema,
29
+ });
30
+ export const oddDiagnosticSchema = z.object({
31
+ code: z.enum(["invalid_topic", "invalid_timestamp", "invalid_heading", "invalid_tasks_section", "empty_tasks", "invalid_task", "checkbox_status_mismatch", "duplicate_task_id", "unclosed_fence"]),
32
+ message: z.string(),
33
+ line: z.number().int().positive().optional(),
34
+ provenance: oddProvenanceSchema,
35
+ });
36
+ export const oddStateSchema = z.object({
37
+ bounded: z.literal(true),
38
+ features: z.array(oddFeatureSchema),
39
+ diagnostics: z.array(oddDiagnosticSchema),
40
+ });
41
+ //# sourceMappingURL=odd-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odd-state.js","sourceRoot":"","sources":["../../src/schemas/odd-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACtG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,8BAA8B,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,mBAAmB;CAC5B,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,8DAA8D;IAC9D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KAC1C,CAAC;IACF,UAAU,EAAE,mBAAmB;CAChC,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,aAAa,EAAE,cAAc,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IAClM,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,UAAU,EAAE,mBAAmB;CAChC,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;CAC1C,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** @jsxImportSource @opentui/solid */
2
+ import { type Accessor } from "solid-js";
3
+ import type { TuiSlotContext } from "@opencode-ai/plugin/tui";
4
+ import type { ODDState } from "../../schemas/odd-state.js";
5
+ import { type ReactiveValue } from "./reactive-value.js";
6
+ export interface ODDProgressProps {
7
+ odd: ReactiveValue<ODDState | undefined>;
8
+ theme?: TuiSlotContext["theme"];
9
+ }
10
+ export declare function oddProgressLines(value: ODDProgressProps["odd"]): string[];
11
+ export declare function createODDProgressView(value: ODDProgressProps["odd"]): Accessor<string[]>;
12
+ export declare function ODDProgress(props: ODDProgressProps): import("solid-js").JSX.Element;
13
+ //# sourceMappingURL=odd-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odd-progress.d.ts","sourceRoot":"","sources":["../../../src/sidebar/components/odd-progress.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,aAAa,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACjC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAgBzE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAExF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,kCAWlD"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
+ /** @jsxImportSource @opentui/solid */
3
+ import { For } from "solid-js";
4
+ import { readReactive } from "./reactive-value.js";
5
+ export function oddProgressLines(value) {
6
+ const odd = readReactive(value);
7
+ const features = odd?.features ?? [];
8
+ const diagnostics = odd?.diagnostics ?? [];
9
+ const invalidMirrors = new Set(diagnostics.map(({ provenance }) => `${provenance.project}/${provenance.observationId}`)).size;
10
+ return [
11
+ " 📊 ODD Progress",
12
+ " ℹ️ Bounded recent observations; not a complete project inventory.",
13
+ ...(features.length ? features.map(({ title, featureId, progress }) => ` • ${title} [${featureId}]: ${progress.done}/${progress.total} done; ${progress.cancelled} cancelled; ${progress.in_progress} in progress; ${progress.blocked} blocked; ${progress.pending} pending`) : [" ℹ️ No valid ODD features in this bounded window. Mirror feature documents to odd/<feature>/tasks."]),
14
+ ...(diagnostics.length ? [
15
+ ` ⚠️ Invalid ODD mirrors: ${invalidMirrors} observation(s), ${diagnostics.length} diagnostic(s). No SDD fallback.`,
16
+ ] : []),
17
+ ];
18
+ }
19
+ export function createODDProgressView(value) {
20
+ return () => oddProgressLines(value);
21
+ }
22
+ export function ODDProgress(props) {
23
+ const lines = createODDProgressView(props.odd);
24
+ return (_jsx("box", { flexDirection: "column", children: _jsx(For, { each: lines(), children: (line, index) => (_jsx("text", { fg: index() === 0 ? props.theme?.current.info : props.theme?.current.textMuted, children: line })) }) }));
25
+ }
26
+ //# sourceMappingURL=odd-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odd-progress.js","sourceRoot":"","sources":["../../../src/sidebar/components/odd-progress.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AAEtC,OAAO,EAAE,GAAG,EAAiB,MAAM,UAAU,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAOvE,MAAM,UAAU,gBAAgB,CAAC,KAA8B;IAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC;IAC3C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAChE,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,OAAO;QACL,mBAAmB;QACnB,uEAAuE;QACvE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CACpE,SAAS,KAAK,KAAK,SAAS,MAAM,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAS,eAAe,QAAQ,CAAC,WAAW,iBAAiB,QAAQ,CAAC,OAAO,aAAa,QAAQ,CAAC,OAAO,UAAU,CACzM,CAAC,CAAC,CAAC,CAAC,uGAAuG,CAAC,CAAC;QAC9G,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YACvB,+BAA+B,cAAc,oBAAoB,WAAW,CAAC,MAAM,kCAAkC;SACtH,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAA8B;IAClE,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,CACL,cAAK,aAAa,EAAC,QAAQ,YACzB,KAAC,GAAG,IAAC,IAAI,EAAE,KAAK,EAAE,YAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACpC,eAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,YACjF,IAAI,GACA,CACR,GAAO,GACJ,CACP,CAAC;AACJ,CAAC"}
@@ -1,13 +1,18 @@
1
1
  import { type Accessor } from "solid-js";
2
2
  import type { EngramAdapter, EngramTargets, HealthStatus, Observation, Project } from "../../adapters/types.js";
3
3
  import { type SDDChange } from "../../utils/sdd-detector.js";
4
+ import type { ODDState } from "../../schemas/odd-state.js";
4
5
  import type { ProjectResolution } from "../../utils/project-resolver.js";
5
6
  export type SidebarHealth = "loading" | "ok" | "stale" | "error" | "offline";
7
+ export type SidebarWorkflowMode = "odd" | "legacy-sdd";
6
8
  export interface SidebarViewModel {
9
+ workflowMode?: SidebarWorkflowMode;
7
10
  projectName?: string;
8
11
  project?: Project;
9
12
  resolution?: ProjectResolution;
10
13
  changes: SDDChange[];
14
+ odd?: ODDState;
15
+ observations?: Observation[];
11
16
  blockers: Observation[];
12
17
  recentActivity: Observation[];
13
18
  health: SidebarHealth;
@@ -37,6 +42,7 @@ export interface UseEngramOptions {
37
42
  export interface UseEngramReturn {
38
43
  state: Accessor<SidebarViewModel>;
39
44
  refresh: () => Promise<SidebarRefreshOutcome>;
45
+ setWorkflowMode: (mode: SidebarWorkflowMode) => void;
40
46
  }
41
47
  export interface SidebarRefreshInput {
42
48
  health?: HealthStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"use-engram.d.ts","sourceRoot":"","sources":["../../../src/sidebar/hooks/use-engram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-engram.d.ts","sourceRoot":"","sources":["../../../src/sidebar/hooks/use-engram.ts"],"names":[],"mappings":"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"}