opencode-flema-engram-sidebar 0.1.1 → 0.1.3
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.
- package/README.md +17 -15
- package/dist/adapters/cloud.d.ts +14 -6
- package/dist/adapters/cloud.d.ts.map +1 -1
- package/dist/adapters/cloud.js +224 -20
- package/dist/adapters/cloud.js.map +1 -1
- package/dist/adapters/composite.d.ts +2 -1
- package/dist/adapters/composite.d.ts.map +1 -1
- package/dist/adapters/composite.js +36 -1
- package/dist/adapters/composite.js.map +1 -1
- package/dist/adapters/factory.d.ts +17 -0
- package/dist/adapters/factory.d.ts.map +1 -0
- package/dist/adapters/factory.js +76 -0
- package/dist/adapters/factory.js.map +1 -0
- package/dist/adapters/local.d.ts +2 -1
- package/dist/adapters/local.d.ts.map +1 -1
- package/dist/adapters/local.js +5 -2
- package/dist/adapters/local.js.map +1 -1
- package/dist/adapters/types.d.ts +7 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas/health.d.ts +14 -0
- package/dist/schemas/health.d.ts.map +1 -1
- package/dist/schemas/health.js +5 -0
- package/dist/schemas/health.js.map +1 -1
- package/dist/sidebar/hooks/use-engram.d.ts +3 -1
- package/dist/sidebar/hooks/use-engram.d.ts.map +1 -1
- package/dist/sidebar/hooks/use-engram.js +5 -3
- package/dist/sidebar/hooks/use-engram.js.map +1 -1
- package/dist/sidebar/plugin.d.ts +9 -2
- package/dist/sidebar/plugin.d.ts.map +1 -1
- package/dist/sidebar/plugin.js +62 -16
- package/dist/sidebar/plugin.js.map +1 -1
- package/dist/stdio.js +0 -0
- package/dist/utils/project-resolver.d.ts +7 -1
- package/dist/utils/project-resolver.d.ts.map +1 -1
- package/dist/utils/project-resolver.js +38 -6
- package/dist/utils/project-resolver.js.map +1 -1
- package/package.json +74 -74
package/README.md
CHANGED
|
@@ -29,13 +29,7 @@ sobre la obra.
|
|
|
29
29
|
| Engram | Servicio HTTP local activo en `http://127.0.0.1:7437` |
|
|
30
30
|
| Proyecto | Alguna observación o sesión reciente que permita validar el nombre |
|
|
31
31
|
|
|
32
|
-
### 1.
|
|
33
|
-
|
|
34
|
-
```sh
|
|
35
|
-
npm install -g opencode-flema-engram-sidebar
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### 2. Registrá el sidebar en `tui.json`
|
|
32
|
+
### 1. Registrá el sidebar en `tui.json`
|
|
39
33
|
|
|
40
34
|
Configuración mínima:
|
|
41
35
|
|
|
@@ -46,10 +40,17 @@ Configuración mínima:
|
|
|
46
40
|
}
|
|
47
41
|
```
|
|
48
42
|
|
|
49
|
-
OpenCode
|
|
50
|
-
`dist/
|
|
43
|
+
OpenCode instala y cachea el paquete automáticamente; no hace falta instalarlo de
|
|
44
|
+
forma global con npm. El spec simple carga `dist/index.js`, cuyo export por defecto es
|
|
45
|
+
el plugin TUI. El subpath `/tui` sigue disponible para imports directos, pero no es
|
|
46
|
+
necesario en la configuración.
|
|
47
|
+
|
|
48
|
+
> **Importante:** `npm install -g opencode-flema-engram-sidebar` por sí solo instala el
|
|
49
|
+
> paquete en npm global, pero **no registra el plugin en OpenCode**. La entrada anterior
|
|
50
|
+
> en el `tui.json` global es el único paso de configuración necesario. Después, OpenCode
|
|
51
|
+
> resuelve, descarga y cachea la versión publicada automáticamente.
|
|
51
52
|
|
|
52
|
-
###
|
|
53
|
+
### 2. Iniciá Engram y abrí OpenCode en tu proyecto
|
|
53
54
|
|
|
54
55
|
El sidebar hace una carga inicial, vuelve a consultar cada 30 segundos de forma
|
|
55
56
|
predeterminada y permite refrescar manualmente con <kbd>Alt</kbd>+<kbd>R</kbd>.
|
|
@@ -69,7 +70,7 @@ avanzadas y puede ignorarse por completo al usar el plugin de OpenCode.
|
|
|
69
70
|
|
|
70
71
|
## Cómo funciona
|
|
71
72
|
|
|
72
|
-
1. OpenCode carga el export `opencode-flema-engram-sidebar
|
|
73
|
+
1. OpenCode carga el export raíz de `opencode-flema-engram-sidebar`.
|
|
73
74
|
2. El plugin resuelve un candidato de proyecto y lo valida contra los proyectos
|
|
74
75
|
derivados de observaciones y sesiones recientes de Engram.
|
|
75
76
|
3. Consulta en paralelo salud, proyectos y observaciones del proyecto.
|
|
@@ -331,13 +332,14 @@ Preservá el resto de tus plugins y opciones al fusionar la configuración.
|
|
|
331
332
|
|
|
332
333
|
### OpenCode no encuentra el export del paquete
|
|
333
334
|
|
|
334
|
-
- Confirmá que la versión instalada
|
|
335
|
+
- Confirmá que la versión instalada tiene un export raíz por defecto con `id` y `tui`.
|
|
335
336
|
- Ejecutá `npm view opencode-flema-engram-sidebar exports` para inspeccionar la
|
|
336
337
|
metadata publicada.
|
|
337
338
|
- Si trabajás sobre un tarball local, verificá que incluya
|
|
338
|
-
`dist/
|
|
339
|
-
-
|
|
340
|
-
|
|
339
|
+
`dist/index.js`, `dist/sidebar/plugin.js` y sus declaraciones.
|
|
340
|
+
- Usá `opencode-flema-engram-sidebar` en la configuración. El subpath `/tui` queda
|
|
341
|
+
disponible para imports directos, pero OpenCode 1.18.25 puede no cachear ese spec de
|
|
342
|
+
npm de forma confiable.
|
|
341
343
|
|
|
342
344
|
### Diagnóstico para contribuidores
|
|
343
345
|
|
package/dist/adapters/cloud.d.ts
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
|
-
import type { EngramAdapter, HealthStatus, Project, Observation, ListObservationsOpts, SearchOpts, Session, ListSessionsOpts } from "./types.js";
|
|
1
|
+
import type { EngramAdapter, EngramTargets, HealthStatus, Project, Observation, ListObservationsOpts, SearchOpts, Session, ListSessionsOpts } from "./types.js";
|
|
2
2
|
export interface CloudAdapterOptions {
|
|
3
3
|
baseUrl?: string;
|
|
4
4
|
token?: string;
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
allowInsecure?: boolean;
|
|
7
|
+
fetcher?: typeof fetch;
|
|
5
8
|
}
|
|
6
9
|
export declare class CloudEngramAdapter implements EngramAdapter {
|
|
7
10
|
private readonly baseUrl;
|
|
8
11
|
private readonly token;
|
|
12
|
+
private readonly timeoutMs;
|
|
13
|
+
private readonly allowInsecure;
|
|
14
|
+
private readonly fetcher?;
|
|
9
15
|
constructor(opts?: CloudAdapterOptions);
|
|
16
|
+
describeTargets(): EngramTargets;
|
|
10
17
|
health(): Promise<HealthStatus>;
|
|
11
18
|
listProjects(): Promise<Project[]>;
|
|
12
|
-
listObservations(
|
|
13
|
-
getObservation(
|
|
14
|
-
searchObservations(
|
|
15
|
-
listSessions(
|
|
16
|
-
getSession(
|
|
19
|
+
listObservations(opts?: ListObservationsOpts): Promise<Observation[]>;
|
|
20
|
+
getObservation(id: number): Promise<Observation | null>;
|
|
21
|
+
searchObservations(query: string, opts?: SearchOpts): Promise<Observation[]>;
|
|
22
|
+
listSessions(opts?: ListSessionsOpts): Promise<Session[]>;
|
|
23
|
+
getSession(sessionId: string): Promise<Session | null>;
|
|
24
|
+
private get;
|
|
17
25
|
}
|
|
18
26
|
//# sourceMappingURL=cloud.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/adapters/cloud.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/adapters/cloud.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,OAAO,EACP,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAUpB,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAe;gBAE5B,IAAI,CAAC,EAAE,mBAAmB;IAmBtC,eAAe,IAAI,aAAa;IAI1B,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAiB/B,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQlC,gBAAgB,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQrE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAWvD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAS5E,YAAY,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAW9C,GAAG;CAiFlB"}
|
package/dist/adapters/cloud.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import http from "node:http";
|
|
2
|
+
import https from "node:https";
|
|
3
|
+
import { EngramUnavailable, ValidationError } from "../utils/errors.js";
|
|
4
|
+
import { observationSchema } from "../schemas/observation.js";
|
|
5
|
+
import { cloudHealthResponseSchema } from "../schemas/health.js";
|
|
6
|
+
import { sessionSchema } from "../schemas/session.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const DEFAULT_TIMEOUT_MS = 5_000;
|
|
9
|
+
const DERIVATION_LIMIT = 100;
|
|
2
10
|
export class CloudEngramAdapter {
|
|
3
11
|
baseUrl;
|
|
4
12
|
token;
|
|
13
|
+
timeoutMs;
|
|
14
|
+
allowInsecure;
|
|
15
|
+
fetcher;
|
|
5
16
|
constructor(opts) {
|
|
6
17
|
if (opts?.baseUrl) {
|
|
7
18
|
try {
|
|
@@ -11,43 +22,236 @@ export class CloudEngramAdapter {
|
|
|
11
22
|
throw new Error(`Invalid cloud baseUrl: ${opts.baseUrl}`);
|
|
12
23
|
}
|
|
13
24
|
}
|
|
14
|
-
this.baseUrl = opts?.baseUrl;
|
|
25
|
+
this.baseUrl = opts?.baseUrl ? opts.baseUrl.replace(/\/+$/, "") : undefined;
|
|
15
26
|
this.token = opts?.token;
|
|
27
|
+
this.allowInsecure = opts?.allowInsecure ?? true;
|
|
28
|
+
this.fetcher = opts?.fetcher;
|
|
29
|
+
const t = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
30
|
+
if (typeof t !== "number" || !Number.isFinite(t) || t <= 0) {
|
|
31
|
+
throw new Error(`Invalid timeoutMs: ${t}`);
|
|
32
|
+
}
|
|
33
|
+
this.timeoutMs = t;
|
|
34
|
+
}
|
|
35
|
+
describeTargets() {
|
|
36
|
+
return { cloudUrl: this.baseUrl };
|
|
16
37
|
}
|
|
17
38
|
async health() {
|
|
18
39
|
if (!this.baseUrl) {
|
|
19
40
|
return { local: { available: false }, cloud: { available: false } };
|
|
20
41
|
}
|
|
21
42
|
try {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
43
|
+
const response = await this.get("/health", cloudHealthResponseSchema);
|
|
44
|
+
return {
|
|
45
|
+
local: { available: false },
|
|
46
|
+
cloud: {
|
|
47
|
+
available: response.status.toLowerCase() === "ok",
|
|
48
|
+
},
|
|
49
|
+
};
|
|
29
50
|
}
|
|
30
51
|
catch {
|
|
31
52
|
return { local: { available: false }, cloud: { available: false } };
|
|
32
53
|
}
|
|
33
54
|
}
|
|
34
55
|
async listProjects() {
|
|
35
|
-
|
|
56
|
+
const [observations, sessions] = await Promise.all([
|
|
57
|
+
this.listObservations({ limit: DERIVATION_LIMIT, all_projects: true }),
|
|
58
|
+
this.listSessions({ limit: DERIVATION_LIMIT, all_projects: true }),
|
|
59
|
+
]);
|
|
60
|
+
return deriveProjects(observations, sessions);
|
|
36
61
|
}
|
|
37
|
-
async listObservations(
|
|
38
|
-
|
|
62
|
+
async listObservations(opts) {
|
|
63
|
+
const qs = toQuery(opts);
|
|
64
|
+
const schema = opts?.project
|
|
65
|
+
? z.array(observationSchema).nullable().transform((records) => records ?? [])
|
|
66
|
+
: z.array(observationSchema);
|
|
67
|
+
return this.get(`/observations/recent${qs ? `?${qs}` : ""}`, schema);
|
|
39
68
|
}
|
|
40
|
-
async getObservation(
|
|
41
|
-
|
|
69
|
+
async getObservation(id) {
|
|
70
|
+
try {
|
|
71
|
+
return await this.get(`/observations/${id}`, observationSchema);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (err instanceof EngramUnavailable && err.statusCode === 404) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
42
79
|
}
|
|
43
|
-
async searchObservations(
|
|
44
|
-
|
|
80
|
+
async searchObservations(query, opts) {
|
|
81
|
+
const trimmed = query.trim();
|
|
82
|
+
if (!trimmed) {
|
|
83
|
+
throw new ValidationError("Search query must not be empty");
|
|
84
|
+
}
|
|
85
|
+
const qs = toQuery({ q: trimmed, ...opts });
|
|
86
|
+
return this.get(`/search?${qs}`, z.array(observationSchema));
|
|
45
87
|
}
|
|
46
|
-
async listSessions(
|
|
47
|
-
|
|
88
|
+
async listSessions(opts) {
|
|
89
|
+
const qs = toQuery(opts);
|
|
90
|
+
const schema = opts?.project
|
|
91
|
+
? z.array(sessionSchema).nullable().transform((records) => records ?? [])
|
|
92
|
+
: z.array(sessionSchema);
|
|
93
|
+
return this.get(`/sessions/recent${qs ? `?${qs}` : ""}`, schema);
|
|
48
94
|
}
|
|
49
|
-
async getSession(
|
|
50
|
-
|
|
95
|
+
async getSession(sessionId) {
|
|
96
|
+
try {
|
|
97
|
+
return await this.get(`/sessions/${encodeURIComponent(sessionId)}`, sessionSchema);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
if (err instanceof EngramUnavailable && err.statusCode === 404) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
51
105
|
}
|
|
106
|
+
async get(path, schema) {
|
|
107
|
+
if (!this.baseUrl) {
|
|
108
|
+
throw new EngramUnavailable("Cloud baseUrl is not configured", undefined, {
|
|
109
|
+
kind: "connection",
|
|
110
|
+
endpoint: path,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const url = `${this.baseUrl}${path}`;
|
|
114
|
+
const headers = {};
|
|
115
|
+
if (this.token) {
|
|
116
|
+
headers["Authorization"] = `Bearer ${this.token}`;
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
let status;
|
|
120
|
+
let json;
|
|
121
|
+
const fetchImpl = this.fetcher ?? (typeof globalThis.fetch === "function" ? globalThis.fetch : undefined);
|
|
122
|
+
if (fetchImpl && (this.fetcher || typeof fetchImpl.mock === "object")) {
|
|
123
|
+
const controller = new AbortController();
|
|
124
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
125
|
+
try {
|
|
126
|
+
const res = await fetchImpl(url, { signal: controller.signal, headers });
|
|
127
|
+
status = res.status ?? (res.ok ? 200 : 500);
|
|
128
|
+
if (status >= 200 && status < 300) {
|
|
129
|
+
json = await res.json();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
clearTimeout(timeoutId);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
const { status: httpStatus, body } = await httpRequest(url, {
|
|
138
|
+
headers,
|
|
139
|
+
timeoutMs: this.timeoutMs,
|
|
140
|
+
allowInsecure: this.allowInsecure,
|
|
141
|
+
});
|
|
142
|
+
status = httpStatus;
|
|
143
|
+
if (status >= 200 && status < 300) {
|
|
144
|
+
try {
|
|
145
|
+
json = JSON.parse(body);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
throw new EngramUnavailable("Engram cloud returned malformed JSON", err instanceof Error ? err : undefined, {
|
|
149
|
+
kind: "parse",
|
|
150
|
+
endpoint: path,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (status < 200 || status >= 300) {
|
|
156
|
+
if (status === 404) {
|
|
157
|
+
throw new EngramUnavailable("Engram entity was not found", undefined, {
|
|
158
|
+
kind: "http",
|
|
159
|
+
statusCode: 404,
|
|
160
|
+
endpoint: path,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
throw new EngramUnavailable(`Engram cloud request failed with HTTP ${status}`, undefined, {
|
|
164
|
+
kind: "http",
|
|
165
|
+
statusCode: status,
|
|
166
|
+
endpoint: path,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const parsed = schema.safeParse(json);
|
|
170
|
+
if (!parsed.success) {
|
|
171
|
+
throw new EngramUnavailable("Engram cloud returned an invalid response", undefined, {
|
|
172
|
+
kind: "validation",
|
|
173
|
+
endpoint: path,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return parsed.data;
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
if (err instanceof EngramUnavailable)
|
|
180
|
+
throw err;
|
|
181
|
+
const timedOut = err instanceof Error && err.message.includes("timed out");
|
|
182
|
+
throw new EngramUnavailable(timedOut ? "Engram cloud request timed out" : "Engram cloud is unavailable", err instanceof Error ? err : undefined, {
|
|
183
|
+
kind: timedOut ? "timeout" : "connection",
|
|
184
|
+
endpoint: path,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function httpRequest(urlStr, options) {
|
|
190
|
+
return new Promise((resolve, reject) => {
|
|
191
|
+
const parsedUrl = new URL(urlStr);
|
|
192
|
+
const isHttps = parsedUrl.protocol === "https:";
|
|
193
|
+
const transport = isHttps ? https : http;
|
|
194
|
+
const reqOptions = {
|
|
195
|
+
protocol: parsedUrl.protocol,
|
|
196
|
+
hostname: parsedUrl.hostname,
|
|
197
|
+
port: parsedUrl.port ? Number(parsedUrl.port) : isHttps ? 443 : 80,
|
|
198
|
+
path: `${parsedUrl.pathname}${parsedUrl.search}`,
|
|
199
|
+
method: "GET",
|
|
200
|
+
headers: options.headers ?? {},
|
|
201
|
+
timeout: options.timeoutMs ?? 5000,
|
|
202
|
+
};
|
|
203
|
+
if (isHttps && options.allowInsecure !== false) {
|
|
204
|
+
reqOptions.agent = new https.Agent({ rejectUnauthorized: false });
|
|
205
|
+
}
|
|
206
|
+
const req = transport.request(reqOptions, (res) => {
|
|
207
|
+
let data = "";
|
|
208
|
+
res.setEncoding("utf-8");
|
|
209
|
+
res.on("data", (chunk) => {
|
|
210
|
+
data += chunk;
|
|
211
|
+
});
|
|
212
|
+
res.on("end", () => {
|
|
213
|
+
resolve({ status: res.statusCode ?? 500, body: data });
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
req.on("timeout", () => {
|
|
217
|
+
req.destroy(new Error("Request timed out"));
|
|
218
|
+
});
|
|
219
|
+
req.on("error", (err) => {
|
|
220
|
+
reject(err);
|
|
221
|
+
});
|
|
222
|
+
req.end();
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
function toQuery(values) {
|
|
226
|
+
return Object.entries(values ?? {})
|
|
227
|
+
.filter(([, value]) => value !== undefined && value !== "")
|
|
228
|
+
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)
|
|
229
|
+
.join("&");
|
|
230
|
+
}
|
|
231
|
+
function deriveProjects(observations, sessions) {
|
|
232
|
+
const projects = new Map();
|
|
233
|
+
for (const observation of observations) {
|
|
234
|
+
const project = projects.get(observation.project) ?? { observationCount: 0, lastActiveAt: observation.updated_at, scopes: new Set() };
|
|
235
|
+
project.observationCount += 1;
|
|
236
|
+
project.lastActiveAt = maxTimestamp(project.lastActiveAt, observation.updated_at);
|
|
237
|
+
project.scopes.add(observation.scope);
|
|
238
|
+
projects.set(observation.project, project);
|
|
239
|
+
}
|
|
240
|
+
for (const session of sessions) {
|
|
241
|
+
const project = projects.get(session.project) ?? { observationCount: 0, lastActiveAt: session.updated_at, scopes: new Set() };
|
|
242
|
+
project.lastActiveAt = maxTimestamp(project.lastActiveAt, session.updated_at);
|
|
243
|
+
projects.set(session.project, project);
|
|
244
|
+
}
|
|
245
|
+
return [...projects.entries()]
|
|
246
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
247
|
+
.map(([name, project]) => ({
|
|
248
|
+
name,
|
|
249
|
+
observationCount: project.observationCount,
|
|
250
|
+
lastActiveAt: project.lastActiveAt,
|
|
251
|
+
scopes: [...project.scopes].sort(),
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
function maxTimestamp(left, right) {
|
|
255
|
+
return left >= right ? left : right;
|
|
52
256
|
}
|
|
53
257
|
//# sourceMappingURL=cloud.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/adapters/cloud.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOpD,MAAM,OAAO,kBAAkB;IACZ,OAAO,CAAqB;IAC5B,KAAK,CAAqB;IAE3C,YAAY,IAA0B;QACpC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;YACjI,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAA4B;QACjD,MAAM,IAAI,cAAc,CAAC,qCAAqC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW;QAC9B,MAAM,IAAI,cAAc,CAAC,mCAAmC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,MAAc,EAAE,KAAkB;QACzD,MAAM,IAAI,cAAc,CAAC,uCAAuC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAwB;QACzC,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,IAAI,cAAc,CAAC,+BAA+B,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/adapters/cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EngramAdapter, HealthStatus, Project, Observation, ListObservationsOpts, SearchOpts, Session, ListSessionsOpts } from "./types.js";
|
|
1
|
+
import type { EngramAdapter, EngramTargets, HealthStatus, Project, Observation, ListObservationsOpts, SearchOpts, Session, ListSessionsOpts } from "./types.js";
|
|
2
2
|
export declare class CompositeEngramAdapter implements EngramAdapter {
|
|
3
3
|
private readonly adapters;
|
|
4
4
|
private readonly cache;
|
|
@@ -6,6 +6,7 @@ export declare class CompositeEngramAdapter implements EngramAdapter {
|
|
|
6
6
|
constructor(adapters: EngramAdapter[], opts?: {
|
|
7
7
|
maxCacheSize?: number;
|
|
8
8
|
});
|
|
9
|
+
describeTargets(): EngramTargets;
|
|
9
10
|
health(): Promise<HealthStatus>;
|
|
10
11
|
listProjects(): Promise<Project[]>;
|
|
11
12
|
listObservations(opts?: ListObservationsOpts): Promise<Observation[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../src/adapters/composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,OAAO,EACP,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAWpB,qBAAa,sBAAuB,YAAW,aAAa;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,QAAQ,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../src/adapters/composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,OAAO,EACP,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAWpB,qBAAa,sBAAuB,YAAW,aAAa;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,QAAQ,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAavE,eAAe,IAAI,aAAa;IAY1B,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAoC/B,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMlC,gBAAgB,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAOrE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMvD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAO5E,YAAY,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAM9C,kBAAkB;IA4BhC,UAAU,IAAI,IAAI;YAIJ,MAAM;CAmBrB"}
|
|
@@ -17,8 +17,43 @@ export class CompositeEngramAdapter {
|
|
|
17
17
|
}
|
|
18
18
|
this.maxCacheSize = size;
|
|
19
19
|
}
|
|
20
|
+
describeTargets() {
|
|
21
|
+
const targets = {};
|
|
22
|
+
for (const adapter of this.adapters) {
|
|
23
|
+
if (typeof adapter.describeTargets === "function") {
|
|
24
|
+
const info = adapter.describeTargets();
|
|
25
|
+
if (info.localUrl && !targets.localUrl)
|
|
26
|
+
targets.localUrl = info.localUrl;
|
|
27
|
+
if (info.cloudUrl && !targets.cloudUrl)
|
|
28
|
+
targets.cloudUrl = info.cloudUrl;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return targets;
|
|
32
|
+
}
|
|
20
33
|
async health() {
|
|
21
|
-
|
|
34
|
+
const results = await Promise.allSettled(this.adapters.map((adapter) => adapter.health()));
|
|
35
|
+
const fulfilled = results.filter((r) => r.status === "fulfilled");
|
|
36
|
+
if (fulfilled.length === 0) {
|
|
37
|
+
const firstError = results.find((r) => r.status === "rejected")?.reason;
|
|
38
|
+
throw new EngramUnavailable("All adapters failed health check", firstError instanceof Error ? firstError : undefined);
|
|
39
|
+
}
|
|
40
|
+
let localAvailable = false;
|
|
41
|
+
let localVersion;
|
|
42
|
+
let cloudAvailable = false;
|
|
43
|
+
for (const res of fulfilled) {
|
|
44
|
+
if (res.value.local.available) {
|
|
45
|
+
localAvailable = true;
|
|
46
|
+
if (res.value.local.version)
|
|
47
|
+
localVersion = res.value.local.version;
|
|
48
|
+
}
|
|
49
|
+
if (res.value.cloud?.available) {
|
|
50
|
+
cloudAvailable = true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
local: { available: localAvailable, version: localVersion },
|
|
55
|
+
cloud: { available: cloudAvailable },
|
|
56
|
+
};
|
|
22
57
|
}
|
|
23
58
|
async listProjects() {
|
|
24
59
|
return this.cached("listProjects", () => this.invokeWithFallback((adapter) => adapter.listProjects()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/adapters/composite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/adapters/composite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { EngramAdapter } from "./types.js";
|
|
2
|
+
export interface ResolvedEngramConfig {
|
|
3
|
+
cloudUrl?: string;
|
|
4
|
+
localUrl?: string;
|
|
5
|
+
token?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface EngramTuiOptionsInput {
|
|
8
|
+
cloudUrl?: string;
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
token?: string;
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
project?: string;
|
|
13
|
+
pollInterval?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function loadEngramConfig(options?: EngramTuiOptionsInput): ResolvedEngramConfig;
|
|
16
|
+
export declare function createConfiguredAdapter(options?: EngramTuiOptionsInput): EngramAdapter;
|
|
17
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA2BD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,CAgCtF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAatF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { LocalEngramAdapter } from "./local.js";
|
|
5
|
+
import { CloudEngramAdapter } from "./cloud.js";
|
|
6
|
+
import { CompositeEngramAdapter } from "./composite.js";
|
|
7
|
+
function extractAttachHost(argv) {
|
|
8
|
+
for (let i = 0; i < argv.length; i++) {
|
|
9
|
+
const arg = argv[i] ?? "";
|
|
10
|
+
if (arg === "attach" || arg.endsWith("/attach")) {
|
|
11
|
+
const next = argv[i + 1]?.trim();
|
|
12
|
+
if (next) {
|
|
13
|
+
const match = next.match(/^(?:https?:?\/?)?([^:\/\s]+)(?::\d+)?$/i);
|
|
14
|
+
if (match && match[1]) {
|
|
15
|
+
const host = match[1];
|
|
16
|
+
if (host !== "localhost" && host !== "127.0.0.1" && host !== "0.0.0.0") {
|
|
17
|
+
const protocol = /^https/i.test(next) ? "https:" : "http:";
|
|
18
|
+
return `${protocol}//${host}:7437`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const ipMatch = arg.match(/(?:https?:?\/?)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/i);
|
|
24
|
+
if (ipMatch && ipMatch[1] && ipMatch[1] !== "127.0.0.1" && ipMatch[1] !== "0.0.0.0") {
|
|
25
|
+
const protocol = /^https/i.test(arg) ? "https:" : "http:";
|
|
26
|
+
return `${protocol}//${ipMatch[1]}:7437`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
export function loadEngramConfig(options) {
|
|
32
|
+
let cloudUrl = options?.cloudUrl ?? process.env.ENGRAM_CLOUD_URL;
|
|
33
|
+
let localUrl = options?.baseUrl ?? process.env.ENGRAM_URL ?? process.env.ENGRAM_BASE_URL;
|
|
34
|
+
let token = options?.token ?? process.env.ENGRAM_CLOUD_TOKEN ?? process.env.ENGRAM_TOKEN;
|
|
35
|
+
if (!localUrl) {
|
|
36
|
+
localUrl = extractAttachHost(process.argv);
|
|
37
|
+
}
|
|
38
|
+
if (!cloudUrl || !token) {
|
|
39
|
+
try {
|
|
40
|
+
const configPath = path.join(os.homedir(), ".engram", "cloud.json");
|
|
41
|
+
if (fs.existsSync(configPath)) {
|
|
42
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
43
|
+
const parsed = JSON.parse(raw);
|
|
44
|
+
if (typeof parsed.server_url === "string" && !cloudUrl) {
|
|
45
|
+
cloudUrl = parsed.server_url;
|
|
46
|
+
}
|
|
47
|
+
else if (typeof parsed.url === "string" && !cloudUrl) {
|
|
48
|
+
cloudUrl = parsed.url;
|
|
49
|
+
}
|
|
50
|
+
else if (typeof parsed.baseUrl === "string" && !cloudUrl) {
|
|
51
|
+
cloudUrl = parsed.baseUrl;
|
|
52
|
+
}
|
|
53
|
+
if (typeof parsed.token === "string" && !token) {
|
|
54
|
+
token = parsed.token;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Ignore file reading errors, fallback to local defaults
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { cloudUrl, localUrl, token };
|
|
63
|
+
}
|
|
64
|
+
export function createConfiguredAdapter(options) {
|
|
65
|
+
const config = loadEngramConfig(options);
|
|
66
|
+
const localAdapter = new LocalEngramAdapter({ baseUrl: config.localUrl });
|
|
67
|
+
if (config.cloudUrl) {
|
|
68
|
+
const cloudAdapter = new CloudEngramAdapter({
|
|
69
|
+
baseUrl: config.cloudUrl,
|
|
70
|
+
token: config.token,
|
|
71
|
+
});
|
|
72
|
+
return new CompositeEngramAdapter([localAdapter, cloudAdapter]);
|
|
73
|
+
}
|
|
74
|
+
return localAdapter;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/local.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { EngramAdapter, HealthStatus, Project, Observation, ListObservationsOpts, SearchOpts, Session, ListSessionsOpts, LocalAdapterOptions } from "./types.js";
|
|
1
|
+
import type { EngramAdapter, EngramTargets, HealthStatus, Project, Observation, ListObservationsOpts, SearchOpts, Session, ListSessionsOpts, LocalAdapterOptions } from "./types.js";
|
|
2
2
|
export declare class LocalEngramAdapter implements EngramAdapter {
|
|
3
3
|
private readonly baseUrl;
|
|
4
4
|
private readonly timeoutMs;
|
|
5
5
|
constructor(opts?: LocalAdapterOptions);
|
|
6
|
+
describeTargets(): EngramTargets;
|
|
6
7
|
health(): Promise<HealthStatus>;
|
|
7
8
|
listProjects(): Promise<Project[]>;
|
|
8
9
|
listObservations(opts?: ListObservationsOpts): Promise<Observation[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/adapters/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,OAAO,EACP,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAWpB,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,CAAC,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/adapters/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,OAAO,EACP,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAWpB,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,CAAC,EAAE,mBAAmB;IAmBtC,eAAe,IAAI,aAAa;IAI1B,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAU/B,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQlC,gBAAgB,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQrE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAWvD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAS5E,YAAY,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAW9C,GAAG;CAqDlB"}
|