opencode-flema-engram-sidebar 0.1.8 → 0.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../src/pi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQzD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAMrC,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC5D,SAAS,EAAE,CACT,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAC3B,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,aAAa,GAAG,aAAa,CAAA;KAAE,KACpD,IAAI,CAAC;IACV,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,KAAK,IAAI,CAAC;CACzE;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,aAAa,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,CACF,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,KAAK,OAAO,KAC9E,MAAM,IAAI,CAAC;IAChB,eAAe,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC;KACjE,KACE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,6BAA6B;IAC5C,aAAa,CAAC,EAAE,MAAM,aAAa,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtF;AAQD,wBAAgB,uBAAuB,CACrC,YAAY,GAAE,6BAAkC,GAC/C,CAAC,EAAE,EAAE,cAAc,KAAK,IAAI,CAoF9B;6BApFO,cAAc,KAAK,IAAI;AA8H/B,wBAAyC"}
package/dist/pi.js ADDED
@@ -0,0 +1,123 @@
1
+ import { createConfiguredAdapter } from "./adapters/factory.js";
2
+ import { createEngramReadController, } from "./viewer/core.js";
3
+ import { resolveProject as resolveValidatedProject, } from "./utils/project-resolver.js";
4
+ const UI_KEY = "flema-engram";
5
+ const REFRESH_COMMAND = "engram-refresh";
6
+ const MEMORY_SAVE_TOOLS = new Set(["mem_save", "save_memory"]);
7
+ export function createPiEngramExtension(dependencies = {}) {
8
+ const createAdapter = dependencies.createAdapter ?? (() => createConfiguredAdapter());
9
+ const resolveProject = dependencies.resolveProject
10
+ ?? ((adapter, cwd) => resolveValidatedProject(adapter, cwd));
11
+ return (pi) => {
12
+ let active;
13
+ let sessionToken;
14
+ const clearUi = (context) => {
15
+ if (!context.hasUI)
16
+ return;
17
+ context.ui.setStatus(UI_KEY, undefined);
18
+ context.ui.setWidget(UI_KEY, undefined);
19
+ };
20
+ const stopActive = () => {
21
+ if (!active)
22
+ return;
23
+ active.controller.dispose();
24
+ clearUi(active.context);
25
+ active = undefined;
26
+ };
27
+ const renderUnavailable = (context) => {
28
+ context.ui.setStatus(UI_KEY, "Engram unavailable");
29
+ context.ui.setWidget(UI_KEY, ["Engram unavailable"], { placement: "belowEditor" });
30
+ };
31
+ const refreshActive = async () => {
32
+ const current = active;
33
+ if (!current)
34
+ return undefined;
35
+ const outcome = await current.controller.refresh();
36
+ return active?.token === current.token ? outcome : undefined;
37
+ };
38
+ pi.on("session_start", async (_event, context) => {
39
+ stopActive();
40
+ const token = Symbol("pi-engram-session");
41
+ sessionToken = token;
42
+ if (!context.hasUI)
43
+ return;
44
+ try {
45
+ const adapter = createAdapter();
46
+ const controller = createEngramReadController(adapter, {
47
+ resolveProject: () => resolveProject(adapter, context.cwd),
48
+ onState: (state) => {
49
+ if (active?.token !== token)
50
+ return;
51
+ renderState(context, state);
52
+ },
53
+ });
54
+ active = { controller, context, token };
55
+ await refreshActive();
56
+ }
57
+ catch {
58
+ if (sessionToken !== token)
59
+ return;
60
+ stopActive();
61
+ renderUnavailable(context);
62
+ }
63
+ });
64
+ pi.on("tool_result", async (event, _context) => {
65
+ if (!isPiToolResultEvent(event) || event.isError || !MEMORY_SAVE_TOOLS.has(event.toolName))
66
+ return;
67
+ await refreshActive();
68
+ });
69
+ pi.on("session_shutdown", (_event, _context) => {
70
+ sessionToken = undefined;
71
+ stopActive();
72
+ });
73
+ pi.registerCommand(REFRESH_COMMAND, {
74
+ description: "Refresh the Flema Engram status and widget",
75
+ handler: async (_args, context) => {
76
+ if (!active) {
77
+ context.ui.notify("Engram viewer is not active", "warning");
78
+ return;
79
+ }
80
+ const outcome = await refreshActive();
81
+ if (outcome?.status === "success") {
82
+ context.ui.notify("Engram refreshed", "info");
83
+ }
84
+ else {
85
+ context.ui.notify("Engram refresh incomplete", "warning");
86
+ }
87
+ },
88
+ });
89
+ };
90
+ }
91
+ function isPiToolResultEvent(event) {
92
+ return typeof event.toolName === "string" && typeof event.isError === "boolean";
93
+ }
94
+ function renderState(context, state) {
95
+ const health = state.health.toUpperCase();
96
+ const project = state.projectName ?? "unresolved project";
97
+ const progress = aggregateOddProgress(state);
98
+ const blockerCount = state.blockers.length + progress.blocked;
99
+ const statusParts = [`Engram ${health}`, project];
100
+ if (progress.total > 0)
101
+ statusParts.push(`ODD ${progress.done}/${progress.total}`);
102
+ if (blockerCount > 0)
103
+ statusParts.push(`${blockerCount} blocked`);
104
+ context.ui.setStatus(UI_KEY, statusParts.join(" · "));
105
+ const lines = [`Engram · ${project} [${health}]`];
106
+ lines.push(progress.total > 0
107
+ ? `ODD ${progress.done}/${progress.total} done · ${progress.inProgress} active · ${blockerCount} blocked`
108
+ : "ODD no tracked feature");
109
+ const latest = state.recentActivity[0];
110
+ if (latest)
111
+ lines.push(`Latest: ${latest.title}`);
112
+ context.ui.setWidget(UI_KEY, lines, { placement: "belowEditor" });
113
+ }
114
+ function aggregateOddProgress(state) {
115
+ return (state.odd?.features ?? []).reduce((total, feature) => ({
116
+ total: total.total + feature.progress.total,
117
+ done: total.done + feature.progress.done,
118
+ inProgress: total.inProgress + feature.progress.in_progress,
119
+ blocked: total.blocked + feature.progress.blocked,
120
+ }), { total: 0, done: 0, inProgress: 0, blocked: 0 });
121
+ }
122
+ export default createPiEngramExtension();
123
+ //# sourceMappingURL=pi.js.map
package/dist/pi.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.js","sourceRoot":"","sources":["../src/pi.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,12 @@ export declare const localHealthResponseSchema: z.ZodObject<{
5
5
  version: z.ZodString;
6
6
  }, "strip", z.ZodTypeAny, {
7
7
  status: string;
8
- service: string;
9
8
  version: string;
9
+ service: string;
10
10
  }, {
11
11
  status: string;
12
- service: string;
13
12
  version: string;
13
+ service: string;
14
14
  }>;
15
15
  export type LocalHealthResponse = z.infer<typeof localHealthResponseSchema>;
16
16
  export declare const cloudHealthResponseSchema: z.ZodObject<{
@@ -19,12 +19,12 @@ export declare const cloudHealthResponseSchema: z.ZodObject<{
19
19
  version: z.ZodOptional<z.ZodString>;
20
20
  }, "strip", z.ZodTypeAny, {
21
21
  status: string;
22
- service?: string | undefined;
23
22
  version?: string | undefined;
23
+ service?: string | undefined;
24
24
  }, {
25
25
  status: string;
26
- service?: string | undefined;
27
26
  version?: string | undefined;
27
+ service?: string | undefined;
28
28
  }>;
29
29
  export type CloudHealthResponse = z.infer<typeof cloudHealthResponseSchema>;
30
30
  //# sourceMappingURL=health.d.ts.map
@@ -11,9 +11,9 @@ export declare const observationSchema: z.ZodObject<{
11
11
  created_at: z.ZodEffects<z.ZodString, string, unknown>;
12
12
  }, "strip", z.ZodTypeAny, {
13
13
  project: string;
14
- type: string;
15
14
  id: number;
16
15
  title: string;
16
+ type: string;
17
17
  topic_key: string;
18
18
  content: string;
19
19
  scope: "project" | "personal";
@@ -21,9 +21,9 @@ export declare const observationSchema: z.ZodObject<{
21
21
  created_at: string;
22
22
  }, {
23
23
  project: string;
24
- type: string;
25
24
  id: number;
26
25
  title: string;
26
+ type: string;
27
27
  content: string;
28
28
  scope: "project" | "personal";
29
29
  topic_key?: string | undefined;
@@ -5,13 +5,13 @@ export declare const oddTaskSchema: z.ZodObject<{
5
5
  title: z.ZodString;
6
6
  status: z.ZodEnum<["pending", "in_progress", "blocked", "done", "cancelled"]>;
7
7
  }, "strip", z.ZodTypeAny, {
8
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
9
8
  id: string;
10
9
  title: string;
10
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
11
11
  }, {
12
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
13
12
  id: string;
14
13
  title: string;
14
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
15
15
  }>;
16
16
  export declare const oddProvenanceSchema: z.ZodObject<{
17
17
  observationId: z.ZodNumber;
@@ -38,13 +38,13 @@ export declare const oddFeatureSchema: z.ZodObject<{
38
38
  title: z.ZodString;
39
39
  status: z.ZodEnum<["pending", "in_progress", "blocked", "done", "cancelled"]>;
40
40
  }, "strip", z.ZodTypeAny, {
41
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
42
41
  id: string;
43
42
  title: string;
43
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
44
44
  }, {
45
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
46
45
  id: string;
47
46
  title: string;
47
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
48
48
  }>, "many">;
49
49
  progress: z.ZodObject<{
50
50
  total: z.ZodNumber;
@@ -55,16 +55,16 @@ export declare const oddFeatureSchema: z.ZodObject<{
55
55
  cancelled: z.ZodNumber;
56
56
  }, "strip", z.ZodTypeAny, {
57
57
  pending: number;
58
+ done: number;
58
59
  in_progress: number;
59
60
  blocked: number;
60
- done: number;
61
61
  cancelled: number;
62
62
  total: number;
63
63
  }, {
64
64
  pending: number;
65
+ done: number;
65
66
  in_progress: number;
66
67
  blocked: number;
67
- done: number;
68
68
  cancelled: number;
69
69
  total: number;
70
70
  }>;
@@ -85,19 +85,19 @@ export declare const oddFeatureSchema: z.ZodObject<{
85
85
  updatedAt: string;
86
86
  }>;
87
87
  }, "strip", z.ZodTypeAny, {
88
- title: string;
89
- version: 1;
90
- featureId: string;
91
88
  tasks: {
92
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
93
89
  id: string;
94
90
  title: string;
91
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
95
92
  }[];
93
+ title: string;
94
+ version: 1;
95
+ featureId: string;
96
96
  progress: {
97
97
  pending: number;
98
+ done: number;
98
99
  in_progress: number;
99
100
  blocked: number;
100
- done: number;
101
101
  cancelled: number;
102
102
  total: number;
103
103
  };
@@ -108,19 +108,19 @@ export declare const oddFeatureSchema: z.ZodObject<{
108
108
  updatedAt: string;
109
109
  };
110
110
  }, {
111
- title: string;
112
- version: 1;
113
- featureId: string;
114
111
  tasks: {
115
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
116
112
  id: string;
117
113
  title: string;
114
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
118
115
  }[];
116
+ title: string;
117
+ version: 1;
118
+ featureId: string;
119
119
  progress: {
120
120
  pending: number;
121
+ done: number;
121
122
  in_progress: number;
122
123
  blocked: number;
123
- done: number;
124
124
  cancelled: number;
125
125
  total: number;
126
126
  };
@@ -183,13 +183,13 @@ export declare const oddStateSchema: z.ZodObject<{
183
183
  title: z.ZodString;
184
184
  status: z.ZodEnum<["pending", "in_progress", "blocked", "done", "cancelled"]>;
185
185
  }, "strip", z.ZodTypeAny, {
186
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
187
186
  id: string;
188
187
  title: string;
188
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
189
189
  }, {
190
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
191
190
  id: string;
192
191
  title: string;
192
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
193
193
  }>, "many">;
194
194
  progress: z.ZodObject<{
195
195
  total: z.ZodNumber;
@@ -200,16 +200,16 @@ export declare const oddStateSchema: z.ZodObject<{
200
200
  cancelled: z.ZodNumber;
201
201
  }, "strip", z.ZodTypeAny, {
202
202
  pending: number;
203
+ done: number;
203
204
  in_progress: number;
204
205
  blocked: number;
205
- done: number;
206
206
  cancelled: number;
207
207
  total: number;
208
208
  }, {
209
209
  pending: number;
210
+ done: number;
210
211
  in_progress: number;
211
212
  blocked: number;
212
- done: number;
213
213
  cancelled: number;
214
214
  total: number;
215
215
  }>;
@@ -230,19 +230,19 @@ export declare const oddStateSchema: z.ZodObject<{
230
230
  updatedAt: string;
231
231
  }>;
232
232
  }, "strip", z.ZodTypeAny, {
233
- title: string;
234
- version: 1;
235
- featureId: string;
236
233
  tasks: {
237
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
238
234
  id: string;
239
235
  title: string;
236
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
240
237
  }[];
238
+ title: string;
239
+ version: 1;
240
+ featureId: string;
241
241
  progress: {
242
242
  pending: number;
243
+ done: number;
243
244
  in_progress: number;
244
245
  blocked: number;
245
- done: number;
246
246
  cancelled: number;
247
247
  total: number;
248
248
  };
@@ -253,19 +253,19 @@ export declare const oddStateSchema: z.ZodObject<{
253
253
  updatedAt: string;
254
254
  };
255
255
  }, {
256
- title: string;
257
- version: 1;
258
- featureId: string;
259
256
  tasks: {
260
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
261
257
  id: string;
262
258
  title: string;
259
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
263
260
  }[];
261
+ title: string;
262
+ version: 1;
263
+ featureId: string;
264
264
  progress: {
265
265
  pending: number;
266
+ done: number;
266
267
  in_progress: number;
267
268
  blocked: number;
268
- done: number;
269
269
  cancelled: number;
270
270
  total: number;
271
271
  };
@@ -320,19 +320,19 @@ export declare const oddStateSchema: z.ZodObject<{
320
320
  }, "strip", z.ZodTypeAny, {
321
321
  bounded: true;
322
322
  features: {
323
- title: string;
324
- version: 1;
325
- featureId: string;
326
323
  tasks: {
327
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
328
324
  id: string;
329
325
  title: string;
326
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
330
327
  }[];
328
+ title: string;
329
+ version: 1;
330
+ featureId: string;
331
331
  progress: {
332
332
  pending: number;
333
+ done: number;
333
334
  in_progress: number;
334
335
  blocked: number;
335
- done: number;
336
336
  cancelled: number;
337
337
  total: number;
338
338
  };
@@ -357,19 +357,19 @@ export declare const oddStateSchema: z.ZodObject<{
357
357
  }, {
358
358
  bounded: true;
359
359
  features: {
360
- title: string;
361
- version: 1;
362
- featureId: string;
363
360
  tasks: {
364
- status: "pending" | "in_progress" | "blocked" | "done" | "cancelled";
365
361
  id: string;
366
362
  title: string;
363
+ status: "pending" | "done" | "in_progress" | "blocked" | "cancelled";
367
364
  }[];
365
+ title: string;
366
+ version: 1;
367
+ featureId: string;
368
368
  progress: {
369
369
  pending: number;
370
+ done: number;
370
371
  in_progress: number;
371
372
  blocked: number;
372
- done: number;
373
373
  cancelled: number;
374
374
  total: number;
375
375
  };
@@ -5,14 +5,14 @@ export declare const projectSchema: z.ZodObject<{
5
5
  lastActiveAt: z.ZodString;
6
6
  scopes: z.ZodArray<z.ZodEnum<["project", "personal"]>, "many">;
7
7
  }, "strip", z.ZodTypeAny, {
8
+ name: string;
8
9
  observationCount: number;
9
10
  lastActiveAt: string;
10
- name: string;
11
11
  scopes: ("project" | "personal")[];
12
12
  }, {
13
+ name: string;
13
14
  observationCount: number;
14
15
  lastActiveAt: string;
15
- name: string;
16
16
  scopes: ("project" | "personal")[];
17
17
  }>;
18
18
  export type ProjectSchema = z.infer<typeof projectSchema>;
@@ -45,9 +45,9 @@ export declare const sessionWithObservationsSchema: z.ZodEffects<z.ZodObject<{
45
45
  created_at: z.ZodEffects<z.ZodString, string, unknown>;
46
46
  }, "strip", z.ZodTypeAny, {
47
47
  project: string;
48
- type: string;
49
48
  id: number;
50
49
  title: string;
50
+ type: string;
51
51
  topic_key: string;
52
52
  content: string;
53
53
  scope: "project" | "personal";
@@ -55,9 +55,9 @@ export declare const sessionWithObservationsSchema: z.ZodEffects<z.ZodObject<{
55
55
  created_at: string;
56
56
  }, {
57
57
  project: string;
58
- type: string;
59
58
  id: number;
60
59
  title: string;
60
+ type: string;
61
61
  content: string;
62
62
  scope: "project" | "personal";
63
63
  topic_key?: string | undefined;
@@ -72,71 +72,71 @@ export declare const sessionWithObservationsSchema: z.ZodEffects<z.ZodObject<{
72
72
  }, "strip", z.ZodTypeAny, {
73
73
  project: string;
74
74
  id: string;
75
- started_at: string;
76
- observation_count: number;
77
75
  observations: {
78
76
  project: string;
79
- type: string;
80
77
  id: number;
81
78
  title: string;
79
+ type: string;
82
80
  topic_key: string;
83
81
  content: string;
84
82
  scope: "project" | "personal";
85
83
  updated_at: string;
86
84
  created_at: string;
87
85
  }[];
86
+ started_at: string;
87
+ observation_count: number;
88
88
  updated_at?: string | undefined;
89
89
  }, {
90
90
  project: string;
91
91
  id: string;
92
- observation_count: number;
93
92
  observations: {
94
93
  project: string;
95
- type: string;
96
94
  id: number;
97
95
  title: string;
96
+ type: string;
98
97
  content: string;
99
98
  scope: "project" | "personal";
100
99
  topic_key?: string | undefined;
101
100
  updated_at?: unknown;
102
101
  created_at?: unknown;
103
102
  }[];
103
+ observation_count: number;
104
104
  updated_at?: unknown;
105
105
  started_at?: unknown;
106
106
  }>, Omit<{
107
107
  project: string;
108
108
  id: string;
109
- started_at: string;
110
- observation_count: number;
111
109
  observations: {
112
110
  project: string;
113
- type: string;
114
111
  id: number;
115
112
  title: string;
113
+ type: string;
116
114
  topic_key: string;
117
115
  content: string;
118
116
  scope: "project" | "personal";
119
117
  updated_at: string;
120
118
  created_at: string;
121
119
  }[];
120
+ started_at: string;
121
+ observation_count: number;
122
122
  updated_at?: string | undefined;
123
123
  }, "updated_at"> & {
124
124
  updated_at: string;
125
125
  }, {
126
126
  project: string;
127
127
  id: string;
128
- observation_count: number;
129
128
  observations: {
130
129
  project: string;
131
- type: string;
132
130
  id: number;
133
131
  title: string;
132
+ type: string;
134
133
  content: string;
135
134
  scope: "project" | "personal";
136
135
  topic_key?: string | undefined;
137
136
  updated_at?: unknown;
138
137
  created_at?: unknown;
139
138
  }[];
139
+ observation_count: number;
140
140
  updated_at?: unknown;
141
141
  started_at?: unknown;
142
142
  }>;
@@ -1,89 +1,11 @@
1
1
  import { type Accessor } from "solid-js";
2
- import type { EngramAdapter, EngramTargets, HealthStatus, Observation, Project } from "../../adapters/types.js";
3
- import { type SDDChange } from "../../utils/sdd-detector.js";
4
- import type { ODDState } from "../../schemas/odd-state.js";
5
- import type { ProjectResolution } from "../../utils/project-resolver.js";
6
- export type SidebarHealth = "loading" | "ok" | "stale" | "error" | "offline";
7
- export type SidebarWorkflowMode = "odd" | "legacy-sdd";
8
- export interface SidebarViewModel {
9
- workflowMode?: SidebarWorkflowMode;
10
- projectName?: string;
11
- project?: Project;
12
- resolution?: ProjectResolution;
13
- changes: SDDChange[];
14
- odd?: ODDState;
15
- observations?: Observation[];
16
- blockers: Observation[];
17
- recentActivity: Observation[];
18
- health: SidebarHealth;
19
- loading: boolean;
20
- lastRefreshAt?: Date;
21
- error?: string;
22
- terminal?: SidebarTerminalState;
23
- targets?: EngramTargets;
24
- }
25
- export interface SidebarTerminalState {
26
- status: "loading" | SidebarRefreshOutcomeStatus;
27
- stage: SidebarOperationStage | "mounted" | "refresh";
28
- health: SidebarHealth;
29
- observationCount: number;
30
- }
31
- export interface UseEngramOptions {
32
- projectName?: string;
33
- resolution?: ProjectResolution;
34
- initialError?: string;
35
- pollInterval?: number;
36
- enabled?: boolean;
37
- autoRefresh?: boolean;
38
- resolveProject?: () => Promise<ProjectResolution>;
39
- now?: () => Date;
40
- stageTimeoutMs?: number;
41
- }
2
+ import type { EngramAdapter } from "../../adapters/types.js";
3
+ import { type SidebarRefreshOutcome, type SidebarViewModel, type SidebarWorkflowMode, type UseEngramOptions } from "../../viewer/core.js";
4
+ export * from "../../viewer/core.js";
42
5
  export interface UseEngramReturn {
43
6
  state: Accessor<SidebarViewModel>;
44
7
  refresh: () => Promise<SidebarRefreshOutcome>;
45
8
  setWorkflowMode: (mode: SidebarWorkflowMode) => void;
46
9
  }
47
- export interface SidebarRefreshInput {
48
- health?: HealthStatus;
49
- projects?: Project[];
50
- observations?: Observation[];
51
- projectName?: string;
52
- resolution?: ProjectResolution;
53
- errors?: unknown[];
54
- failures?: SidebarRefreshFailure[];
55
- warnings?: string[];
56
- stages?: SidebarStageTransition[];
57
- targets?: EngramTargets;
58
- now: Date;
59
- }
60
- export type SidebarRefreshStage = "project-resolution" | "health" | "projects" | "observations" | "refresh";
61
- export interface SidebarRefreshFailure {
62
- stage: SidebarRefreshStage;
63
- endpoint?: string;
64
- reason: unknown;
65
- }
66
- export type SidebarRefreshOutcomeStatus = "success" | "partial" | "failed";
67
- export type SidebarTransitionStatus = "started" | SidebarRefreshOutcomeStatus | "skipped";
68
- export type SidebarOperationStage = "project-resolution" | "health" | "projects" | "filtered-observations" | "fallback-observations" | "reducing" | "terminal";
69
- export interface SidebarStageTransition {
70
- stage: SidebarOperationStage;
71
- status: SidebarTransitionStatus;
72
- endpoint?: string;
73
- count?: number;
74
- message?: string;
75
- }
76
- export interface SidebarRefreshOutcome {
77
- status: SidebarRefreshOutcomeStatus;
78
- summary: string;
79
- failures: SidebarRefreshFailure[];
80
- warnings: string[];
81
- stages: SidebarStageTransition[];
82
- }
83
- export declare function reduceSidebarRefresh(current: SidebarViewModel, input: SidebarRefreshInput): SidebarViewModel;
84
- export declare function fetchSidebarRefresh(adapter: EngramAdapter, options?: Pick<UseEngramOptions, "projectName" | "resolution" | "resolveProject" | "now" | "stageTimeoutMs"> & {
85
- onTransition?: (transition: SidebarStageTransition) => void;
86
- }): Promise<SidebarRefreshInput>;
87
10
  export declare function useEngram(adapter: EngramAdapter, options?: UseEngramOptions): UseEngramReturn;
88
- export declare function outcomeFor(input: SidebarRefreshInput): SidebarRefreshOutcome;
89
11
  //# sourceMappingURL=use-engram.d.ts.map
@@ -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":"AAAA,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,sBAAsB,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC9C,eAAe,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACtD;AAID,wBAAgB,SAAS,CACvB,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CAuDjB"}