opencode-flema-engram-sidebar 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +183 -33
  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/maintenance/cli.d.ts +21 -0
  16. package/dist/maintenance/cli.d.ts.map +1 -0
  17. package/dist/maintenance/cli.js +571 -0
  18. package/dist/maintenance/cli.js.map +1 -0
  19. package/dist/maintenance.d.ts +3 -0
  20. package/dist/maintenance.d.ts.map +1 -0
  21. package/dist/maintenance.js +4 -0
  22. package/dist/maintenance.js.map +1 -0
  23. package/dist/mcp/server.js +4 -4
  24. package/dist/mcp/server.js.map +1 -1
  25. package/dist/mcp/tools/get-project-state.d.ts +3 -0
  26. package/dist/mcp/tools/get-project-state.d.ts.map +1 -1
  27. package/dist/mcp/tools/get-project-state.js +11 -6
  28. package/dist/mcp/tools/get-project-state.js.map +1 -1
  29. package/dist/schemas/odd-state.d.ts +401 -0
  30. package/dist/schemas/odd-state.d.ts.map +1 -0
  31. package/dist/schemas/odd-state.js +41 -0
  32. package/dist/schemas/odd-state.js.map +1 -0
  33. package/dist/sidebar/components/odd-progress.d.ts +13 -0
  34. package/dist/sidebar/components/odd-progress.d.ts.map +1 -0
  35. package/dist/sidebar/components/odd-progress.js +26 -0
  36. package/dist/sidebar/components/odd-progress.js.map +1 -0
  37. package/dist/sidebar/hooks/use-engram.d.ts +7 -0
  38. package/dist/sidebar/hooks/use-engram.d.ts.map +1 -1
  39. package/dist/sidebar/hooks/use-engram.js +53 -15
  40. package/dist/sidebar/hooks/use-engram.js.map +1 -1
  41. package/dist/sidebar/plugin.d.ts +72 -3
  42. package/dist/sidebar/plugin.d.ts.map +1 -1
  43. package/dist/sidebar/plugin.js +168 -79
  44. package/dist/sidebar/plugin.js.map +1 -1
  45. package/dist/utils/odd-detector.d.ts +8 -0
  46. package/dist/utils/odd-detector.d.ts.map +1 -0
  47. package/dist/utils/odd-detector.js +137 -0
  48. package/dist/utils/odd-detector.js.map +1 -0
  49. package/dist/utils/timeout.d.ts +4 -0
  50. package/dist/utils/timeout.d.ts.map +1 -0
  51. package/dist/utils/timeout.js +31 -0
  52. package/dist/utils/timeout.js.map +1 -0
  53. package/package.json +6 -4
@@ -58,7 +58,7 @@ export class EngramMcpServer {
58
58
  this.mcp.registerTool(name, { description, inputSchema: schema.shape }, (args) => atBoundary(() => handler(args)));
59
59
  };
60
60
  tool("engram_get_observation", "Get one observation", GetObservationInput, (args) => getObservationHandler(this.adapter, args));
61
- tool("engram_get_project_state", "Get canonical project and SDD state", GetProjectStateInput, (args) => getProjectStateHandler(this.adapter, args));
61
+ tool("engram_get_project_state", "Get canonical bounded ODD project state from recent exact-project observations; includeLegacySdd defaults to false and adds legacy SDD changes only for this request, independently of sidebar session mode", GetProjectStateInput, (args) => getProjectStateHandler(this.adapter, args));
62
62
  tool("engram_get_session", "Get one session", GetSessionInput, (args) => getSessionHandler(this.adapter, args));
63
63
  tool("engram_list_observations", "List observations", ListObservationsInput, (args) => listObservationsHandler(this.adapter, args));
64
64
  tool("engram_list_projects", "List Engram projects", ListProjectsInput, (args) => listProjectsHandler(this.adapter, args));
@@ -79,7 +79,7 @@ export class EngramMcpServer {
79
79
  registerResources() {
80
80
  this.mcp.registerResource("engram-health", "engram://health", JSON_RESOURCE, () => atBoundary(() => healthResourceHandler(this.adapter)));
81
81
  this.mcp.registerResource("engram-projects", "engram://projects", JSON_RESOURCE, () => atBoundary(() => projectsResourceHandler(this.adapter)));
82
- this.mcp.registerResource("engram-changes", "engram://changes", JSON_RESOURCE, () => atBoundary(() => changesResourceHandler(this.adapter)));
82
+ this.mcp.registerResource("engram-changes", "engram://changes", { ...JSON_RESOURCE, description: "Explicit legacy SDD access from bounded recent observations, independent of sidebar session mode" }, () => atBoundary(() => changesResourceHandler(this.adapter)));
83
83
  this.mcp.registerResource("engram-project", listedResourceTemplate("engram-project", "engram://projects/{project}"), JSON_RESOURCE, (uri, { project }) => atBoundary(() => projectResourceHandler(this.adapter, uri, { project: String(project ?? "") })));
84
84
  this.mcp.registerResource("engram-observation", listedResourceTemplate("engram-observation", "engram://observations/{id}"), JSON_RESOURCE, (uri, { id }) => {
85
85
  const raw = String(id ?? "");
@@ -89,8 +89,8 @@ export class EngramMcpServer {
89
89
  return atBoundary(() => observationResourceHandler(this.adapter, uri, { id: Number(raw) }));
90
90
  });
91
91
  this.mcp.registerResource("engram-session", listedResourceTemplate("engram-session", "engram://sessions/{session_id}"), JSON_RESOURCE, (uri, { session_id }) => atBoundary(() => sessionResourceHandler(this.adapter, uri, { session_id: String(session_id ?? "") })));
92
- this.mcp.registerResource("engram-change-state", listedResourceTemplate("engram-change-state", "engram://changes/{change_name}/state"), JSON_RESOURCE, (uri, { change_name }) => atBoundary(() => changeStateResourceHandler(this.adapter, uri, { change_name: String(change_name ?? "") })));
93
- this.mcp.registerResource("engram-change-artifacts", listedResourceTemplate("engram-change-artifacts", "engram://changes/{change_name}/artifacts"), JSON_RESOURCE, (uri, { change_name }) => atBoundary(() => changeArtifactsResourceHandler(this.adapter, uri, { change_name: String(change_name ?? "") })));
92
+ this.mcp.registerResource("engram-change-state", listedResourceTemplate("engram-change-state", "engram://changes/{change_name}/state"), { ...JSON_RESOURCE, description: "Explicit legacy SDD change state from bounded recent observations, independent of sidebar session mode" }, (uri, { change_name }) => atBoundary(() => changeStateResourceHandler(this.adapter, uri, { change_name: String(change_name ?? "") })));
93
+ this.mcp.registerResource("engram-change-artifacts", listedResourceTemplate("engram-change-artifacts", "engram://changes/{change_name}/artifacts"), { ...JSON_RESOURCE, description: "Explicit legacy SDD artifacts from bounded recent observations, independent of sidebar session mode" }, (uri, { change_name }) => atBoundary(() => changeArtifactsResourceHandler(this.adapter, uri, { change_name: String(change_name ?? "") })));
94
94
  }
95
95
  get server() { return this.mcp; }
96
96
  async start() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,13 @@ import { z } from "zod";
2
2
  import type { EngramAdapter } from "../../adapters/types.js";
3
3
  export declare const GetProjectStateInput: z.ZodObject<{
4
4
  project: z.ZodString;
5
+ includeLegacySdd: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
5
6
  }, "strip", z.ZodTypeAny, {
6
7
  project: string;
8
+ includeLegacySdd: boolean;
7
9
  }, {
8
10
  project: string;
11
+ includeLegacySdd?: boolean | undefined;
9
12
  }>;
10
13
  export declare function getProjectStateHandler(adapter: EngramAdapter, args: z.infer<typeof GetProjectStateInput>): Promise<{
11
14
  content: {
@@ -1 +1 @@
1
- {"version":3,"file":"get-project-state.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-project-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC;;;;;GAmE3C"}
1
+ {"version":3,"file":"get-project-state.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-project-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC;;;;;GAsE3C"}
@@ -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"}