@aria_asi/cli 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.
- package/bin/aria.js +168 -0
- package/dist/aria-connector/src/auth-commands.d.ts +28 -0
- package/dist/aria-connector/src/auth-commands.d.ts.map +1 -0
- package/dist/aria-connector/src/auth-commands.js +129 -0
- package/dist/aria-connector/src/auth-commands.js.map +1 -0
- package/dist/aria-connector/src/auth.d.ts +12 -0
- package/dist/aria-connector/src/auth.d.ts.map +1 -0
- package/dist/aria-connector/src/auth.js +31 -0
- package/dist/aria-connector/src/auth.js.map +1 -0
- package/dist/aria-connector/src/auto-mcp.d.ts +23 -0
- package/dist/aria-connector/src/auto-mcp.d.ts.map +1 -0
- package/dist/aria-connector/src/auto-mcp.js +994 -0
- package/dist/aria-connector/src/auto-mcp.js.map +1 -0
- package/dist/aria-connector/src/chat.d.ts +21 -0
- package/dist/aria-connector/src/chat.d.ts.map +1 -0
- package/dist/aria-connector/src/chat.js +332 -0
- package/dist/aria-connector/src/chat.js.map +1 -0
- package/dist/aria-connector/src/codebase-scanner.d.ts +7 -0
- package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -0
- package/dist/aria-connector/src/codebase-scanner.js +6 -0
- package/dist/aria-connector/src/codebase-scanner.js.map +1 -0
- package/dist/aria-connector/src/cognition-log.d.ts +17 -0
- package/dist/aria-connector/src/cognition-log.d.ts.map +1 -0
- package/dist/aria-connector/src/cognition-log.js +19 -0
- package/dist/aria-connector/src/cognition-log.js.map +1 -0
- package/dist/aria-connector/src/config.d.ts +41 -0
- package/dist/aria-connector/src/config.d.ts.map +1 -0
- package/dist/aria-connector/src/config.js +50 -0
- package/dist/aria-connector/src/config.js.map +1 -0
- package/dist/aria-connector/src/connectors/claude-code.d.ts +4 -0
- package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/claude-code.js +204 -0
- package/dist/aria-connector/src/connectors/claude-code.js.map +1 -0
- package/dist/aria-connector/src/connectors/cursor.d.ts +4 -0
- package/dist/aria-connector/src/connectors/cursor.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/cursor.js +63 -0
- package/dist/aria-connector/src/connectors/cursor.js.map +1 -0
- package/dist/aria-connector/src/connectors/opencode.d.ts +4 -0
- package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/opencode.js +102 -0
- package/dist/aria-connector/src/connectors/opencode.js.map +1 -0
- package/dist/aria-connector/src/connectors/shell.d.ts +4 -0
- package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/shell.js +58 -0
- package/dist/aria-connector/src/connectors/shell.js.map +1 -0
- package/dist/aria-connector/src/garden-client.d.ts +19 -0
- package/dist/aria-connector/src/garden-client.d.ts.map +1 -0
- package/dist/aria-connector/src/garden-client.js +85 -0
- package/dist/aria-connector/src/garden-client.js.map +1 -0
- package/dist/aria-connector/src/garden-control-plane.d.ts +22 -0
- package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -0
- package/dist/aria-connector/src/garden-control-plane.js +43 -0
- package/dist/aria-connector/src/garden-control-plane.js.map +1 -0
- package/dist/aria-connector/src/harness-client.d.ts +166 -0
- package/dist/aria-connector/src/harness-client.d.ts.map +1 -0
- package/dist/aria-connector/src/harness-client.js +344 -0
- package/dist/aria-connector/src/harness-client.js.map +1 -0
- package/dist/aria-connector/src/hive-client.d.ts +32 -0
- package/dist/aria-connector/src/hive-client.d.ts.map +1 -0
- package/dist/aria-connector/src/hive-client.js +69 -0
- package/dist/aria-connector/src/hive-client.js.map +1 -0
- package/dist/aria-connector/src/index.d.ts +19 -0
- package/dist/aria-connector/src/index.d.ts.map +1 -0
- package/dist/aria-connector/src/index.js +13 -0
- package/dist/aria-connector/src/index.js.map +1 -0
- package/dist/aria-connector/src/install-hooks.d.ts +18 -0
- package/dist/aria-connector/src/install-hooks.d.ts.map +1 -0
- package/dist/aria-connector/src/install-hooks.js +224 -0
- package/dist/aria-connector/src/install-hooks.js.map +1 -0
- package/dist/aria-connector/src/model-context.d.ts +8 -0
- package/dist/aria-connector/src/model-context.d.ts.map +1 -0
- package/dist/aria-connector/src/model-context.js +83 -0
- package/dist/aria-connector/src/model-context.js.map +1 -0
- package/dist/aria-connector/src/persona.d.ts +27 -0
- package/dist/aria-connector/src/persona.d.ts.map +1 -0
- package/dist/aria-connector/src/persona.js +86 -0
- package/dist/aria-connector/src/persona.js.map +1 -0
- package/dist/aria-connector/src/providers/anthropic.d.ts +4 -0
- package/dist/aria-connector/src/providers/anthropic.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/anthropic.js +92 -0
- package/dist/aria-connector/src/providers/anthropic.js.map +1 -0
- package/dist/aria-connector/src/providers/deepseek.d.ts +3 -0
- package/dist/aria-connector/src/providers/deepseek.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/deepseek.js +28 -0
- package/dist/aria-connector/src/providers/deepseek.js.map +1 -0
- package/dist/aria-connector/src/providers/google.d.ts +3 -0
- package/dist/aria-connector/src/providers/google.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/google.js +38 -0
- package/dist/aria-connector/src/providers/google.js.map +1 -0
- package/dist/aria-connector/src/providers/ollama.d.ts +3 -0
- package/dist/aria-connector/src/providers/ollama.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/ollama.js +28 -0
- package/dist/aria-connector/src/providers/ollama.js.map +1 -0
- package/dist/aria-connector/src/providers/openai.d.ts +4 -0
- package/dist/aria-connector/src/providers/openai.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/openai.js +84 -0
- package/dist/aria-connector/src/providers/openai.js.map +1 -0
- package/dist/aria-connector/src/providers/openrouter.d.ts +3 -0
- package/dist/aria-connector/src/providers/openrouter.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/openrouter.js +30 -0
- package/dist/aria-connector/src/providers/openrouter.js.map +1 -0
- package/dist/aria-connector/src/providers/types.d.ts +20 -0
- package/dist/aria-connector/src/providers/types.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/types.js +2 -0
- package/dist/aria-connector/src/providers/types.js.map +1 -0
- package/dist/aria-connector/src/setup-wizard.d.ts +2 -0
- package/dist/aria-connector/src/setup-wizard.d.ts.map +1 -0
- package/dist/aria-connector/src/setup-wizard.js +140 -0
- package/dist/aria-connector/src/setup-wizard.js.map +1 -0
- package/dist/aria-connector/src/types.d.ts +30 -0
- package/dist/aria-connector/src/types.d.ts.map +1 -0
- package/dist/aria-connector/src/types.js +5 -0
- package/dist/aria-connector/src/types.js.map +1 -0
- package/dist/aria-web/src/lib/codebase-scanner.d.ts +127 -0
- package/dist/aria-web/src/lib/codebase-scanner.d.ts.map +1 -0
- package/dist/aria-web/src/lib/codebase-scanner.js +1730 -0
- package/dist/aria-web/src/lib/codebase-scanner.js.map +1 -0
- package/dist/cli-0.2.0.tgz +0 -0
- package/dist/install.sh +13 -0
- package/hooks/aria-harness-via-sdk.mjs +317 -0
- package/hooks/aria-pre-tool-gate.mjs +596 -0
- package/hooks/aria-preprompt-consult.mjs +175 -0
- package/hooks/aria-stop-gate.mjs +222 -0
- package/package.json +47 -0
- package/src/__tests__/auth-commands.test.ts +132 -0
- package/src/auth-commands.ts +175 -0
- package/src/auth.ts +33 -0
- package/src/auto-mcp.ts +1172 -0
- package/src/chat.ts +387 -0
- package/src/codebase-scanner.ts +18 -0
- package/src/cognition-log.ts +30 -0
- package/src/config.ts +94 -0
- package/src/connectors/claude-code.ts +213 -0
- package/src/connectors/cursor.ts +75 -0
- package/src/connectors/opencode.ts +115 -0
- package/src/connectors/shell.ts +72 -0
- package/src/garden-client.ts +98 -0
- package/src/garden-control-plane.ts +108 -0
- package/src/harness-client.ts +454 -0
- package/src/hive-client.ts +104 -0
- package/src/index.ts +26 -0
- package/src/install-hooks.ts +259 -0
- package/src/model-context.ts +88 -0
- package/src/persona.ts +113 -0
- package/src/providers/anthropic.ts +120 -0
- package/src/providers/deepseek.ts +40 -0
- package/src/providers/google.ts +57 -0
- package/src/providers/ollama.ts +43 -0
- package/src/providers/openai.ts +108 -0
- package/src/providers/openrouter.ts +42 -0
- package/src/providers/types.ts +35 -0
- package/src/setup-wizard.ts +177 -0
- package/src/types.ts +32 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Garden Control Plane — Living Memory Fabric (CLI edition)
|
|
2
|
+
// Replaces static system prompt injection with turn-by-turn garden integration.
|
|
3
|
+
// Every turn: read relevant memories, generate response, write new memories.
|
|
4
|
+
// Projects persist forever. Context is infinite. The harness improves per turn.
|
|
5
|
+
const GARDEN_URL = process.env.GARDEN_SERVICE_URL || 'http://127.0.0.1:8097';
|
|
6
|
+
// ── WRITE: Plant memories after every turn ──
|
|
7
|
+
export async function plantGardenMemory(type, content, intensity, sessionId, userId, projectId, tags = []) {
|
|
8
|
+
try {
|
|
9
|
+
const resp = await fetch(`${GARDEN_URL}/garden/fire`, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: { 'Content-Type': 'application/json' },
|
|
12
|
+
body: JSON.stringify({
|
|
13
|
+
type,
|
|
14
|
+
content: content.slice(0, 2000),
|
|
15
|
+
intensity: Math.max(0.1, Math.min(1, intensity)),
|
|
16
|
+
sessionId,
|
|
17
|
+
userId,
|
|
18
|
+
projectId,
|
|
19
|
+
tags,
|
|
20
|
+
}),
|
|
21
|
+
signal: AbortSignal.timeout(3000),
|
|
22
|
+
});
|
|
23
|
+
const data = await resp.json().catch(() => ({}));
|
|
24
|
+
return resp.ok && data?.ok !== false;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// ── TURN-BY-TURN: Complete cycle ──
|
|
31
|
+
export async function gardenTurnCycle(input) {
|
|
32
|
+
await plantGardenMemory('conversation', `User: ${input.message.slice(0, 500)}\nAria: ${input.response.slice(0, 1000)}`, 0.6, input.sessionId, input.userId, input.projectId, ['turn', 'conversation']);
|
|
33
|
+
if (input.gateViolations?.length) {
|
|
34
|
+
await plantGardenMemory('evolution', `Gate violations: ${input.gateViolations.join(', ')}`, 0.8, input.sessionId, input.userId, input.projectId, ['gate', 'evolution']);
|
|
35
|
+
}
|
|
36
|
+
if (input.evolutionEvents?.length) {
|
|
37
|
+
await plantGardenMemory('evolution', `Evolution: ${input.evolutionEvents.join('; ')}`, 0.7, input.sessionId, input.userId, input.projectId, ['evolution']);
|
|
38
|
+
}
|
|
39
|
+
if (input.projectId) {
|
|
40
|
+
await plantGardenMemory('project_state', `Project active. Last message: ${input.message.slice(0, 200)}`, 0.4, input.sessionId, input.userId, input.projectId, ['project', 'checkpoint']);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=garden-control-plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"garden-control-plane.js","sourceRoot":"","sources":["../../../src/garden-control-plane.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAEhF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;AAc7E,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA0B,EAC1B,OAAe,EACf,SAAiB,EACjB,SAAiB,EACjB,MAAe,EACf,SAAkB,EAClB,OAAiB,EAAE;IAEnB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,cAAc,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI;gBACJ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;gBAC/B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAChD,SAAS;gBACT,MAAM;gBACN,SAAS;gBACT,IAAI;aACL,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,KAAK,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAQrC;IACC,MAAM,iBAAiB,CACrB,cAAc,EACd,SAAS,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAC9E,GAAG,EACH,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,CAAC,MAAM,EAAE,cAAc,CAAC,CACzB,CAAC;IAEF,IAAI,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACjC,MAAM,iBAAiB,CACrB,WAAW,EACX,oBAAoB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACrD,GAAG,EACH,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,CAAC,MAAM,EAAE,WAAW,CAAC,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QAClC,MAAM,iBAAiB,CACrB,WAAW,EACX,cAAc,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAChD,GAAG,EACH,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,CAAC,WAAW,CAAC,CACd,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,iBAAiB,CACrB,eAAe,EACf,iCAAiC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC9D,GAAG,EACH,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,CAAC,SAAS,EAAE,YAAY,CAAC,CAC1B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { HarnessResponse } from './types.js';
|
|
2
|
+
export interface HarnessChunk {
|
|
3
|
+
index: number;
|
|
4
|
+
priority: number;
|
|
5
|
+
label: 'identity' | 'rules' | 'gate-state' | 'metadata' | 'sources';
|
|
6
|
+
chars: number;
|
|
7
|
+
content: string;
|
|
8
|
+
}
|
|
9
|
+
export interface HarnessPacket {
|
|
10
|
+
ok: boolean;
|
|
11
|
+
stage?: string;
|
|
12
|
+
actor?: string;
|
|
13
|
+
system?: string;
|
|
14
|
+
harness?: string;
|
|
15
|
+
adapter?: string;
|
|
16
|
+
preStateGate?: {
|
|
17
|
+
passed: boolean;
|
|
18
|
+
score: number;
|
|
19
|
+
};
|
|
20
|
+
contractGate?: {
|
|
21
|
+
passed: boolean;
|
|
22
|
+
score: number;
|
|
23
|
+
};
|
|
24
|
+
missingCritical?: string[];
|
|
25
|
+
loadedByClass?: Record<string, number>;
|
|
26
|
+
chunkSummary?: {
|
|
27
|
+
mode: 'full' | 'chunked';
|
|
28
|
+
totalChars: number;
|
|
29
|
+
approxTokens: number;
|
|
30
|
+
chunkCount: number;
|
|
31
|
+
modelContextRequested?: number;
|
|
32
|
+
thresholdTokens: number;
|
|
33
|
+
researchPullChars?: number;
|
|
34
|
+
};
|
|
35
|
+
chunks?: HarnessChunk[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Harness API client.
|
|
39
|
+
*
|
|
40
|
+
* Reads license token from ~/.aria/license.json (via auth.ts loadLicense()),
|
|
41
|
+
* falls back to ARIA_HARNESS_TOKEN env var. No hardcoded master token.
|
|
42
|
+
*
|
|
43
|
+
* All /api/harness/* calls use Bearer auth. 401/403 surfaced to caller.
|
|
44
|
+
* No timeout on fetch — bare try/catch per no-timeouts requirement.
|
|
45
|
+
* Every gate decision pushes a cognition log entry.
|
|
46
|
+
*/
|
|
47
|
+
interface HarnessClientOptions {
|
|
48
|
+
baseUrl?: string;
|
|
49
|
+
}
|
|
50
|
+
interface GateContext {
|
|
51
|
+
gate: string;
|
|
52
|
+
passed: boolean;
|
|
53
|
+
reason?: string;
|
|
54
|
+
score?: number;
|
|
55
|
+
metadata?: Record<string, unknown>;
|
|
56
|
+
}
|
|
57
|
+
export declare class HarnessClient {
|
|
58
|
+
private baseUrl;
|
|
59
|
+
private token;
|
|
60
|
+
private tokenPromise;
|
|
61
|
+
constructor(options?: HarnessClientOptions);
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the bearer token: try loadLicense() first, fall back to env var.
|
|
64
|
+
* Cache the promise so we don't re-read the file on every call.
|
|
65
|
+
*/
|
|
66
|
+
private getToken;
|
|
67
|
+
private resolveToken;
|
|
68
|
+
/**
|
|
69
|
+
* Perform a fetch against /api/harness/{path}.
|
|
70
|
+
* Returns the parsed JSON body on success.
|
|
71
|
+
* Throws a structured error on 401 (revoked) or 403 (forbidden).
|
|
72
|
+
* No timeout — bare try/catch.
|
|
73
|
+
*/
|
|
74
|
+
request<T = unknown>(method: string, path: string, body?: unknown, gateContext?: GateContext): Promise<HarnessResponse<T>>;
|
|
75
|
+
/**
|
|
76
|
+
* Convenience: GET
|
|
77
|
+
*/
|
|
78
|
+
get<T = unknown>(path: string, gateContext?: GateContext): Promise<HarnessResponse<T>>;
|
|
79
|
+
/**
|
|
80
|
+
* Convenience: POST
|
|
81
|
+
*/
|
|
82
|
+
post<T = unknown>(path: string, body?: unknown, gateContext?: GateContext): Promise<HarnessResponse<T>>;
|
|
83
|
+
/**
|
|
84
|
+
* Convenience: PUT
|
|
85
|
+
*/
|
|
86
|
+
put<T = unknown>(path: string, body?: unknown, gateContext?: GateContext): Promise<HarnessResponse<T>>;
|
|
87
|
+
private tryExtractError;
|
|
88
|
+
private pushGateLog;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Raw-fetch compatibility shim used by auth-commands.ts.
|
|
92
|
+
* Exposes .get() and .post() that make bare fetch() calls with the
|
|
93
|
+
* configured base URL. Callers receive the native Response object
|
|
94
|
+
* (so they can call .ok, .status, .json() etc. themselves).
|
|
95
|
+
* Paths are absolute from the base URL (e.g. '/api/license/heartbeat').
|
|
96
|
+
*/
|
|
97
|
+
export declare const harnessClient: {
|
|
98
|
+
get(path: string, init?: {
|
|
99
|
+
headers?: Record<string, string>;
|
|
100
|
+
}): Promise<Response>;
|
|
101
|
+
post(path: string, init?: {
|
|
102
|
+
body?: unknown;
|
|
103
|
+
headers?: Record<string, string>;
|
|
104
|
+
}): Promise<Response>;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* POST /api/harness/codex with the per-turn context.
|
|
108
|
+
* Returns the parsed HarnessPacket, or null on any error.
|
|
109
|
+
* No timeout — bare try/catch per no-timeouts doctrine.
|
|
110
|
+
*/
|
|
111
|
+
export declare function fetchHarness(args: {
|
|
112
|
+
message: string;
|
|
113
|
+
sessionId: string;
|
|
114
|
+
userId?: string;
|
|
115
|
+
cwd?: string;
|
|
116
|
+
modelContext?: number;
|
|
117
|
+
}): Promise<HarnessPacket | null>;
|
|
118
|
+
/**
|
|
119
|
+
* Stitch a HarnessPacket into a single string for system-prompt injection.
|
|
120
|
+
*
|
|
121
|
+
* Full mode — concat all harness text (harness field) or all chunk contents.
|
|
122
|
+
* Chunked mode — concat all chunks with a progressive-feed note appended.
|
|
123
|
+
*
|
|
124
|
+
* chat.ts:233: `blocks.push(combineHarnessContext(harness))`
|
|
125
|
+
* chat.ts:240-244: surfaces chunked-mode info to stdout (done in chat.ts, not here).
|
|
126
|
+
*/
|
|
127
|
+
export declare function combineHarnessContext(packet: HarnessPacket): string;
|
|
128
|
+
/**
|
|
129
|
+
* GET /api/health to verify aria-soul is reachable.
|
|
130
|
+
* Returns true on 200, false on any error or non-200.
|
|
131
|
+
* bin/aria.js uses this to display "Harness: connected" vs "running locally".
|
|
132
|
+
*/
|
|
133
|
+
export declare function checkHarnessHealth(): Promise<boolean>;
|
|
134
|
+
/**
|
|
135
|
+
* POST /api/harness/validate with the LLM response text.
|
|
136
|
+
* Returns severity verdict + violations, or null on error.
|
|
137
|
+
* chat.ts calls this after every LLM response to surface output-gate violations.
|
|
138
|
+
*
|
|
139
|
+
* Server response shape (server.ts:1167):
|
|
140
|
+
* { passed, violations[], severity: 'pass'|'warn'|'block', rewritten?, gateTriggers[], eightLens? }
|
|
141
|
+
*/
|
|
142
|
+
export declare function validateOutput(args: {
|
|
143
|
+
text: string;
|
|
144
|
+
sessionId: string;
|
|
145
|
+
}): Promise<{
|
|
146
|
+
severity: 'pass' | 'warn' | 'block';
|
|
147
|
+
violations: string[];
|
|
148
|
+
rewritten?: string;
|
|
149
|
+
} | null>;
|
|
150
|
+
/**
|
|
151
|
+
* GET /api/garden/turns?userId=...&limit=... to rehydrate recent context.
|
|
152
|
+
* Returns chronologically-ordered turns (oldest first), empty array on error.
|
|
153
|
+
* chat.ts calls this on session start to restore working-set history.
|
|
154
|
+
*
|
|
155
|
+
* Server response shape (server.ts:1411):
|
|
156
|
+
* { ok, count, turns: [{ session_id, user_message, aria_response, model, latency_ms, created_at, platform, user_id }] }
|
|
157
|
+
*/
|
|
158
|
+
export declare function getRecentTurns(args: {
|
|
159
|
+
userId: string;
|
|
160
|
+
limit: number;
|
|
161
|
+
}): Promise<Array<{
|
|
162
|
+
user_message: string;
|
|
163
|
+
aria_response: string;
|
|
164
|
+
}>>;
|
|
165
|
+
export {};
|
|
166
|
+
//# sourceMappingURL=harness-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-client.d.ts","sourceRoot":"","sources":["../../../src/harness-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import { loadLicense } from './auth.js';
|
|
2
|
+
import { pushCognitionLog } from './cognition-log.js';
|
|
3
|
+
export class HarnessClient {
|
|
4
|
+
baseUrl;
|
|
5
|
+
token = null;
|
|
6
|
+
tokenPromise = null;
|
|
7
|
+
constructor(options = {}) {
|
|
8
|
+
this.baseUrl = options.baseUrl ?? process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the bearer token: try loadLicense() first, fall back to env var.
|
|
12
|
+
* Cache the promise so we don't re-read the file on every call.
|
|
13
|
+
*/
|
|
14
|
+
async getToken() {
|
|
15
|
+
if (this.token)
|
|
16
|
+
return this.token;
|
|
17
|
+
if (this.tokenPromise)
|
|
18
|
+
return this.tokenPromise;
|
|
19
|
+
this.tokenPromise = this.resolveToken();
|
|
20
|
+
return this.tokenPromise;
|
|
21
|
+
}
|
|
22
|
+
async resolveToken() {
|
|
23
|
+
// 1. Try license file
|
|
24
|
+
try {
|
|
25
|
+
const license = await loadLicense();
|
|
26
|
+
if (license?.harnessToken) {
|
|
27
|
+
this.token = license.harnessToken;
|
|
28
|
+
return this.token;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// file not found or parse error — fall through
|
|
33
|
+
}
|
|
34
|
+
// 2. Fallback to env var
|
|
35
|
+
const envToken = process.env.ARIA_HARNESS_TOKEN;
|
|
36
|
+
if (envToken) {
|
|
37
|
+
this.token = envToken;
|
|
38
|
+
return this.token;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Perform a fetch against /api/harness/{path}.
|
|
44
|
+
* Returns the parsed JSON body on success.
|
|
45
|
+
* Throws a structured error on 401 (revoked) or 403 (forbidden).
|
|
46
|
+
* No timeout — bare try/catch.
|
|
47
|
+
*/
|
|
48
|
+
async request(method, path, body, gateContext) {
|
|
49
|
+
const token = await this.getToken();
|
|
50
|
+
const headers = {
|
|
51
|
+
'Content-Type': 'application/json',
|
|
52
|
+
};
|
|
53
|
+
if (token) {
|
|
54
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
55
|
+
}
|
|
56
|
+
let response;
|
|
57
|
+
try {
|
|
58
|
+
response = await fetch(`${this.baseUrl}/api/harness${path}`, {
|
|
59
|
+
method,
|
|
60
|
+
headers,
|
|
61
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
// Push cognition log for the gate failure if we have context
|
|
66
|
+
if (gateContext) {
|
|
67
|
+
await this.pushGateLog({
|
|
68
|
+
...gateContext,
|
|
69
|
+
passed: false,
|
|
70
|
+
reason: `network_error: ${err.message}`,
|
|
71
|
+
}).catch(() => { }); // fire-and-forget best effort
|
|
72
|
+
}
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
// Surface 401/403 cleanly
|
|
76
|
+
if (response.status === 401) {
|
|
77
|
+
const detail = await this.tryExtractError(response);
|
|
78
|
+
const err = new Error(`Harness token revoked: ${detail}`);
|
|
79
|
+
err.status = 401;
|
|
80
|
+
err.code = 'TOKEN_REVOKED';
|
|
81
|
+
if (gateContext) {
|
|
82
|
+
await this.pushGateLog({
|
|
83
|
+
...gateContext,
|
|
84
|
+
passed: false,
|
|
85
|
+
reason: `http_401: ${detail}`,
|
|
86
|
+
}).catch(() => { });
|
|
87
|
+
}
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
if (response.status === 403) {
|
|
91
|
+
const detail = await this.tryExtractError(response);
|
|
92
|
+
const err = new Error(`Harness token forbidden: ${detail}`);
|
|
93
|
+
err.status = 403;
|
|
94
|
+
err.code = 'TOKEN_FORBIDDEN';
|
|
95
|
+
if (gateContext) {
|
|
96
|
+
await this.pushGateLog({
|
|
97
|
+
...gateContext,
|
|
98
|
+
passed: false,
|
|
99
|
+
reason: `http_403: ${detail}`,
|
|
100
|
+
}).catch(() => { });
|
|
101
|
+
}
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
const detail = await this.tryExtractError(response);
|
|
106
|
+
const err = new Error(`Harness request failed (${response.status}): ${detail}`);
|
|
107
|
+
err.status = response.status;
|
|
108
|
+
if (gateContext) {
|
|
109
|
+
await this.pushGateLog({
|
|
110
|
+
...gateContext,
|
|
111
|
+
passed: false,
|
|
112
|
+
reason: `http_${response.status}: ${detail}`,
|
|
113
|
+
}).catch(() => { });
|
|
114
|
+
}
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
const data = await response.json();
|
|
118
|
+
// Push cognition log for passed gate
|
|
119
|
+
if (gateContext) {
|
|
120
|
+
await this.pushGateLog({
|
|
121
|
+
...gateContext,
|
|
122
|
+
passed: true,
|
|
123
|
+
}).catch(() => { });
|
|
124
|
+
}
|
|
125
|
+
return { success: true, data };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Convenience: GET
|
|
129
|
+
*/
|
|
130
|
+
async get(path, gateContext) {
|
|
131
|
+
return this.request('GET', path, undefined, gateContext);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Convenience: POST
|
|
135
|
+
*/
|
|
136
|
+
async post(path, body, gateContext) {
|
|
137
|
+
return this.request('POST', path, body, gateContext);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Convenience: PUT
|
|
141
|
+
*/
|
|
142
|
+
async put(path, body, gateContext) {
|
|
143
|
+
return this.request('PUT', path, body, gateContext);
|
|
144
|
+
}
|
|
145
|
+
// ── Helpers ──────────────────────────────────────────────────────
|
|
146
|
+
async tryExtractError(response) {
|
|
147
|
+
try {
|
|
148
|
+
const json = await response.json();
|
|
149
|
+
return json?.error ?? json?.message ?? response.statusText;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return response.statusText;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async pushGateLog(context) {
|
|
156
|
+
try {
|
|
157
|
+
await pushCognitionLog({
|
|
158
|
+
source: 'harness-client',
|
|
159
|
+
type: 'gate_decision',
|
|
160
|
+
gate: context.gate,
|
|
161
|
+
passed: context.passed,
|
|
162
|
+
reason: context.reason,
|
|
163
|
+
score: context.score,
|
|
164
|
+
metadata: context.metadata,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// fire-and-forget: never let logging fail the request
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// ── Default-instance singleton ────────────────────────────────────────
|
|
173
|
+
// All top-level function exports share one HarnessClient so token
|
|
174
|
+
// resolution and base-URL are looked up once and cached.
|
|
175
|
+
let _defaultClient = null;
|
|
176
|
+
function getDefaultClient() {
|
|
177
|
+
if (!_defaultClient)
|
|
178
|
+
_defaultClient = new HarnessClient();
|
|
179
|
+
return _defaultClient;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Raw-fetch compatibility shim used by auth-commands.ts.
|
|
183
|
+
* Exposes .get() and .post() that make bare fetch() calls with the
|
|
184
|
+
* configured base URL. Callers receive the native Response object
|
|
185
|
+
* (so they can call .ok, .status, .json() etc. themselves).
|
|
186
|
+
* Paths are absolute from the base URL (e.g. '/api/license/heartbeat').
|
|
187
|
+
*/
|
|
188
|
+
export const harnessClient = {
|
|
189
|
+
get(path, init) {
|
|
190
|
+
const baseUrl = process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
|
|
191
|
+
return fetch(`${baseUrl}${path}`, {
|
|
192
|
+
method: 'GET',
|
|
193
|
+
headers: { 'Content-Type': 'application/json', ...(init?.headers ?? {}) },
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
post(path, init) {
|
|
197
|
+
const baseUrl = process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
|
|
198
|
+
return fetch(`${baseUrl}${path}`, {
|
|
199
|
+
method: 'POST',
|
|
200
|
+
headers: { 'Content-Type': 'application/json', ...(init?.headers ?? {}) },
|
|
201
|
+
body: init?.body ? JSON.stringify(init.body) : undefined,
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
// ── fetchHarness ──────────────────────────────────────────────────────
|
|
206
|
+
/**
|
|
207
|
+
* POST /api/harness/codex with the per-turn context.
|
|
208
|
+
* Returns the parsed HarnessPacket, or null on any error.
|
|
209
|
+
* No timeout — bare try/catch per no-timeouts doctrine.
|
|
210
|
+
*/
|
|
211
|
+
export async function fetchHarness(args) {
|
|
212
|
+
try {
|
|
213
|
+
const client = getDefaultClient();
|
|
214
|
+
const body = {
|
|
215
|
+
stage: 'preflight',
|
|
216
|
+
message: args.message,
|
|
217
|
+
actor: 'aria-cli',
|
|
218
|
+
system: 'aria-cli',
|
|
219
|
+
platform: 'cli',
|
|
220
|
+
sessionId: args.sessionId,
|
|
221
|
+
isHamza: args.userId === 'hamza',
|
|
222
|
+
userId: args.userId ?? 'user',
|
|
223
|
+
workingDirectory: args.cwd ?? process.cwd(),
|
|
224
|
+
};
|
|
225
|
+
if (args.modelContext !== undefined) {
|
|
226
|
+
body.modelContext = args.modelContext;
|
|
227
|
+
}
|
|
228
|
+
const result = await client.post('/codex', body);
|
|
229
|
+
if (!result.success || !result.data)
|
|
230
|
+
return null;
|
|
231
|
+
return result.data;
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// ── combineHarnessContext ─────────────────────────────────────────────
|
|
238
|
+
/**
|
|
239
|
+
* Stitch a HarnessPacket into a single string for system-prompt injection.
|
|
240
|
+
*
|
|
241
|
+
* Full mode — concat all harness text (harness field) or all chunk contents.
|
|
242
|
+
* Chunked mode — concat all chunks with a progressive-feed note appended.
|
|
243
|
+
*
|
|
244
|
+
* chat.ts:233: `blocks.push(combineHarnessContext(harness))`
|
|
245
|
+
* chat.ts:240-244: surfaces chunked-mode info to stdout (done in chat.ts, not here).
|
|
246
|
+
*/
|
|
247
|
+
export function combineHarnessContext(packet) {
|
|
248
|
+
const mode = packet.chunkSummary?.mode ?? 'full';
|
|
249
|
+
if (mode === 'chunked' && packet.chunks && packet.chunks.length > 0) {
|
|
250
|
+
// In chunked mode we still surface all chunks in priority order so the
|
|
251
|
+
// model gets the full doctrine in one prompt. The chunk-per-turn feed
|
|
252
|
+
// is a Phase 3 CLI responsibility (chat.ts will split across turns).
|
|
253
|
+
const body = packet.chunks
|
|
254
|
+
.slice()
|
|
255
|
+
.sort((a, b) => a.priority - b.priority)
|
|
256
|
+
.map((c) => c.content)
|
|
257
|
+
.join('\n\n');
|
|
258
|
+
const total = packet.chunks.length;
|
|
259
|
+
const chars = packet.chunkSummary?.totalChars ?? body.length;
|
|
260
|
+
const tokens = packet.chunkSummary?.approxTokens ?? Math.ceil(chars / 4);
|
|
261
|
+
return (`[ARIA_HARNESS — chunked mode: ${total} chunks, ${chars} chars, ~${tokens} tokens]\n\n` +
|
|
262
|
+
body);
|
|
263
|
+
}
|
|
264
|
+
// Full mode — prefer the flat harness string; fall back to chunk concat.
|
|
265
|
+
if (packet.harness)
|
|
266
|
+
return `[ARIA_HARNESS]\n${packet.harness}`;
|
|
267
|
+
if (packet.chunks && packet.chunks.length > 0) {
|
|
268
|
+
return packet.chunks
|
|
269
|
+
.slice()
|
|
270
|
+
.sort((a, b) => a.priority - b.priority)
|
|
271
|
+
.map((c) => c.content)
|
|
272
|
+
.join('\n\n');
|
|
273
|
+
}
|
|
274
|
+
return '';
|
|
275
|
+
}
|
|
276
|
+
// ── checkHarnessHealth ────────────────────────────────────────────────
|
|
277
|
+
/**
|
|
278
|
+
* GET /api/health to verify aria-soul is reachable.
|
|
279
|
+
* Returns true on 200, false on any error or non-200.
|
|
280
|
+
* bin/aria.js uses this to display "Harness: connected" vs "running locally".
|
|
281
|
+
*/
|
|
282
|
+
export async function checkHarnessHealth() {
|
|
283
|
+
try {
|
|
284
|
+
const client = getDefaultClient();
|
|
285
|
+
// HarnessClient.request() prefixes /api/harness — use fetch directly
|
|
286
|
+
// so we can hit /api/health without that prefix.
|
|
287
|
+
const baseUrl = client.baseUrl ?? process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
|
|
288
|
+
const resp = await fetch(`${baseUrl}/api/health`);
|
|
289
|
+
return resp.ok;
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// ── validateOutput ────────────────────────────────────────────────────
|
|
296
|
+
/**
|
|
297
|
+
* POST /api/harness/validate with the LLM response text.
|
|
298
|
+
* Returns severity verdict + violations, or null on error.
|
|
299
|
+
* chat.ts calls this after every LLM response to surface output-gate violations.
|
|
300
|
+
*
|
|
301
|
+
* Server response shape (server.ts:1167):
|
|
302
|
+
* { passed, violations[], severity: 'pass'|'warn'|'block', rewritten?, gateTriggers[], eightLens? }
|
|
303
|
+
*/
|
|
304
|
+
export async function validateOutput(args) {
|
|
305
|
+
try {
|
|
306
|
+
const client = getDefaultClient();
|
|
307
|
+
const result = await client.post('/validate', {
|
|
308
|
+
text: args.text,
|
|
309
|
+
sessionId: args.sessionId,
|
|
310
|
+
});
|
|
311
|
+
if (!result.success || !result.data)
|
|
312
|
+
return null;
|
|
313
|
+
const { severity, violations, rewritten } = result.data;
|
|
314
|
+
return { severity, violations: violations ?? [], rewritten };
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// ── getRecentTurns ────────────────────────────────────────────────────
|
|
321
|
+
/**
|
|
322
|
+
* GET /api/garden/turns?userId=...&limit=... to rehydrate recent context.
|
|
323
|
+
* Returns chronologically-ordered turns (oldest first), empty array on error.
|
|
324
|
+
* chat.ts calls this on session start to restore working-set history.
|
|
325
|
+
*
|
|
326
|
+
* Server response shape (server.ts:1411):
|
|
327
|
+
* { ok, count, turns: [{ session_id, user_message, aria_response, model, latency_ms, created_at, platform, user_id }] }
|
|
328
|
+
*/
|
|
329
|
+
export async function getRecentTurns(args) {
|
|
330
|
+
try {
|
|
331
|
+
const client = getDefaultClient();
|
|
332
|
+
const baseUrl = client.baseUrl ?? process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
|
|
333
|
+
const url = `${baseUrl}/api/garden/turns?userId=${encodeURIComponent(args.userId)}&limit=${args.limit}`;
|
|
334
|
+
const resp = await fetch(url);
|
|
335
|
+
if (!resp.ok)
|
|
336
|
+
return [];
|
|
337
|
+
const json = await resp.json();
|
|
338
|
+
return Array.isArray(json.turns) ? json.turns : [];
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
return [];
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=harness-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-client.js","sourceRoot":"","sources":["../../../src/harness-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface HiveRegisterConfig {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
/** "aria-cli" | "claude-code" | "cursor" | "opencode" | tenant-chosen */
|
|
4
|
+
platform: string;
|
|
5
|
+
/** Tenant identity. Aria-soul correlates to API key on auth-resolved tenant. */
|
|
6
|
+
userId?: string;
|
|
7
|
+
/** What this client can do — surfaces to Aria + other sessions. */
|
|
8
|
+
capabilities?: string[];
|
|
9
|
+
/** Free-form metadata: cwd, version, git branch, etc. */
|
|
10
|
+
context?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export interface HiveRegisterResult {
|
|
13
|
+
status: 'registered' | 'error';
|
|
14
|
+
session: {
|
|
15
|
+
id: string;
|
|
16
|
+
platform: string;
|
|
17
|
+
last_active: string;
|
|
18
|
+
};
|
|
19
|
+
hive: {
|
|
20
|
+
active_sessions: number;
|
|
21
|
+
message: string;
|
|
22
|
+
};
|
|
23
|
+
aria: {
|
|
24
|
+
greeting: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export declare function registerWithHive(cfg: HiveRegisterConfig): Promise<HiveRegisterResult | null>;
|
|
28
|
+
export interface HeartbeatHandle {
|
|
29
|
+
stop: () => void;
|
|
30
|
+
}
|
|
31
|
+
export declare function startHeartbeat(cfg: HiveRegisterConfig, intervalMs?: number): HeartbeatHandle;
|
|
32
|
+
//# sourceMappingURL=hive-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-client.d.ts","sourceRoot":"","sources":["../../../src/hive-client.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,IAAI,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAyBpC;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,kBAAkB,EACvB,UAAU,GAAE,MAAe,GAC1B,eAAe,CAajB"}
|