@aisy/core 0.1.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/LICENSE +202 -0
- package/dist/agent-loop/index.d.ts +4 -0
- package/dist/agent-loop/index.d.ts.map +1 -0
- package/dist/agent-loop/index.js +352 -0
- package/dist/agent-loop/index.js.map +1 -0
- package/dist/agent-loop/types.d.ts +183 -0
- package/dist/agent-loop/types.d.ts.map +1 -0
- package/dist/agent-loop/types.js +3 -0
- package/dist/agent-loop/types.js.map +1 -0
- package/dist/bin/aisy.d.ts +3 -0
- package/dist/bin/aisy.d.ts.map +1 -0
- package/dist/bin/aisy.js +14 -0
- package/dist/bin/aisy.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +114 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/context-engine/index.d.ts +4 -0
- package/dist/context-engine/index.d.ts.map +1 -0
- package/dist/context-engine/index.js +126 -0
- package/dist/context-engine/index.js.map +1 -0
- package/dist/context-engine/types.d.ts +54 -0
- package/dist/context-engine/types.d.ts.map +1 -0
- package/dist/context-engine/types.js +4 -0
- package/dist/context-engine/types.js.map +1 -0
- package/dist/eval/index.d.ts +20 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +128 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/types.d.ts +62 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +17 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/gateway/index.d.ts +5 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +288 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/types.d.ts +194 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +94 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/goals/index.d.ts +11 -0
- package/dist/goals/index.d.ts.map +1 -0
- package/dist/goals/index.js +21 -0
- package/dist/goals/index.js.map +1 -0
- package/dist/goals/types.d.ts +47 -0
- package/dist/goals/types.d.ts.map +1 -0
- package/dist/goals/types.js +5 -0
- package/dist/goals/types.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +215 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/types.d.ts +148 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +4 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory/index.d.ts +6 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +419 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/types.d.ts +131 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +33 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/nightly/index.d.ts +4 -0
- package/dist/nightly/index.d.ts.map +1 -0
- package/dist/nightly/index.js +470 -0
- package/dist/nightly/index.js.map +1 -0
- package/dist/nightly/types.d.ts +326 -0
- package/dist/nightly/types.d.ts.map +1 -0
- package/dist/nightly/types.js +3 -0
- package/dist/nightly/types.js.map +1 -0
- package/dist/observability/index.d.ts +11 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +396 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/types.d.ts +139 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +4 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/onboarding/index.d.ts +16 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +787 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/interactive.d.ts +23 -0
- package/dist/onboarding/interactive.d.ts.map +1 -0
- package/dist/onboarding/interactive.js +45 -0
- package/dist/onboarding/interactive.js.map +1 -0
- package/dist/onboarding/types.d.ts +388 -0
- package/dist/onboarding/types.d.ts.map +1 -0
- package/dist/onboarding/types.js +35 -0
- package/dist/onboarding/types.js.map +1 -0
- package/dist/orchestration/index.d.ts +8 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +706 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/types.d.ts +391 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +30 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/personality/index.d.ts +65 -0
- package/dist/personality/index.d.ts.map +1 -0
- package/dist/personality/index.js +339 -0
- package/dist/personality/index.js.map +1 -0
- package/dist/personality/types.d.ts +103 -0
- package/dist/personality/types.d.ts.map +1 -0
- package/dist/personality/types.js +15 -0
- package/dist/personality/types.js.map +1 -0
- package/dist/provider/index.d.ts +4 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +236 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/types.d.ts +180 -0
- package/dist/provider/types.d.ts.map +1 -0
- package/dist/provider/types.js +4 -0
- package/dist/provider/types.js.map +1 -0
- package/dist/runtime/agent-cards.d.ts +14 -0
- package/dist/runtime/agent-cards.d.ts.map +1 -0
- package/dist/runtime/agent-cards.js +90 -0
- package/dist/runtime/agent-cards.js.map +1 -0
- package/dist/runtime/agent-runner.d.ts +30 -0
- package/dist/runtime/agent-runner.d.ts.map +1 -0
- package/dist/runtime/agent-runner.js +37 -0
- package/dist/runtime/agent-runner.js.map +1 -0
- package/dist/runtime/budget.d.ts +15 -0
- package/dist/runtime/budget.d.ts.map +1 -0
- package/dist/runtime/budget.js +24 -0
- package/dist/runtime/budget.js.map +1 -0
- package/dist/runtime/delegation-driver.d.ts +11 -0
- package/dist/runtime/delegation-driver.d.ts.map +1 -0
- package/dist/runtime/delegation-driver.js +132 -0
- package/dist/runtime/delegation-driver.js.map +1 -0
- package/dist/runtime/exact-cache.d.ts +10 -0
- package/dist/runtime/exact-cache.d.ts.map +1 -0
- package/dist/runtime/exact-cache.js +30 -0
- package/dist/runtime/exact-cache.js.map +1 -0
- package/dist/runtime/execute-tool.d.ts +29 -0
- package/dist/runtime/execute-tool.d.ts.map +1 -0
- package/dist/runtime/execute-tool.js +80 -0
- package/dist/runtime/execute-tool.js.map +1 -0
- package/dist/runtime/guardian.d.ts +9 -0
- package/dist/runtime/guardian.d.ts.map +1 -0
- package/dist/runtime/guardian.js +41 -0
- package/dist/runtime/guardian.js.map +1 -0
- package/dist/runtime/hook-gate.d.ts +17 -0
- package/dist/runtime/hook-gate.d.ts.map +1 -0
- package/dist/runtime/hook-gate.js +56 -0
- package/dist/runtime/hook-gate.js.map +1 -0
- package/dist/runtime/memory-adapter.d.ts +6 -0
- package/dist/runtime/memory-adapter.d.ts.map +1 -0
- package/dist/runtime/memory-adapter.js +38 -0
- package/dist/runtime/memory-adapter.js.map +1 -0
- package/dist/runtime/nightly-adapters.d.ts +48 -0
- package/dist/runtime/nightly-adapters.d.ts.map +1 -0
- package/dist/runtime/nightly-adapters.js +139 -0
- package/dist/runtime/nightly-adapters.js.map +1 -0
- package/dist/runtime/nightly-generator.d.ts +10 -0
- package/dist/runtime/nightly-generator.d.ts.map +1 -0
- package/dist/runtime/nightly-generator.js +335 -0
- package/dist/runtime/nightly-generator.js.map +1 -0
- package/dist/runtime/onboarding-node.d.ts +6 -0
- package/dist/runtime/onboarding-node.d.ts.map +1 -0
- package/dist/runtime/onboarding-node.js +356 -0
- package/dist/runtime/onboarding-node.js.map +1 -0
- package/dist/runtime/provider-anthropic.d.ts +43 -0
- package/dist/runtime/provider-anthropic.d.ts.map +1 -0
- package/dist/runtime/provider-anthropic.js +148 -0
- package/dist/runtime/provider-anthropic.js.map +1 -0
- package/dist/runtime/provider-cli.d.ts +18 -0
- package/dist/runtime/provider-cli.d.ts.map +1 -0
- package/dist/runtime/provider-cli.js +73 -0
- package/dist/runtime/provider-cli.js.map +1 -0
- package/dist/runtime/provider-openai.d.ts +30 -0
- package/dist/runtime/provider-openai.d.ts.map +1 -0
- package/dist/runtime/provider-openai.js +114 -0
- package/dist/runtime/provider-openai.js.map +1 -0
- package/dist/runtime/providers.d.ts +43 -0
- package/dist/runtime/providers.d.ts.map +1 -0
- package/dist/runtime/providers.js +72 -0
- package/dist/runtime/providers.js.map +1 -0
- package/dist/runtime/sandbox-bash.d.ts +21 -0
- package/dist/runtime/sandbox-bash.d.ts.map +1 -0
- package/dist/runtime/sandbox-bash.js +51 -0
- package/dist/runtime/sandbox-bash.js.map +1 -0
- package/dist/runtime/scoped-tool-executor.d.ts +10 -0
- package/dist/runtime/scoped-tool-executor.d.ts.map +1 -0
- package/dist/runtime/scoped-tool-executor.js +30 -0
- package/dist/runtime/scoped-tool-executor.js.map +1 -0
- package/dist/runtime/session-log.d.ts +6 -0
- package/dist/runtime/session-log.d.ts.map +1 -0
- package/dist/runtime/session-log.js +54 -0
- package/dist/runtime/session-log.js.map +1 -0
- package/dist/runtime/settings.d.ts +24 -0
- package/dist/runtime/settings.d.ts.map +1 -0
- package/dist/runtime/settings.js +29 -0
- package/dist/runtime/settings.js.map +1 -0
- package/dist/runtime/spawn-plan.d.ts +13 -0
- package/dist/runtime/spawn-plan.d.ts.map +1 -0
- package/dist/runtime/spawn-plan.js +107 -0
- package/dist/runtime/spawn-plan.js.map +1 -0
- package/dist/runtime/spend.d.ts +41 -0
- package/dist/runtime/spend.d.ts.map +1 -0
- package/dist/runtime/spend.js +0 -0
- package/dist/runtime/spend.js.map +1 -0
- package/dist/runtime/sub-agent-runner.d.ts +19 -0
- package/dist/runtime/sub-agent-runner.d.ts.map +1 -0
- package/dist/runtime/sub-agent-runner.js +47 -0
- package/dist/runtime/sub-agent-runner.js.map +1 -0
- package/dist/safety/grants.d.ts +7 -0
- package/dist/safety/grants.d.ts.map +1 -0
- package/dist/safety/grants.js +53 -0
- package/dist/safety/grants.js.map +1 -0
- package/dist/safety/index.d.ts +72 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +464 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/safety/types.d.ts +254 -0
- package/dist/safety/types.d.ts.map +1 -0
- package/dist/safety/types.js +3 -0
- package/dist/safety/types.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +463 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/types.d.ts +177 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +3 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/testing/clock.d.ts +8 -0
- package/dist/testing/clock.d.ts.map +1 -0
- package/dist/testing/clock.js +13 -0
- package/dist/testing/clock.js.map +1 -0
- package/dist/testing/effect-verifier.d.ts +15 -0
- package/dist/testing/effect-verifier.d.ts.map +1 -0
- package/dist/testing/effect-verifier.js +27 -0
- package/dist/testing/effect-verifier.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/provider-fake.d.ts +14 -0
- package/dist/testing/provider-fake.d.ts.map +1 -0
- package/dist/testing/provider-fake.js +18 -0
- package/dist/testing/provider-fake.js.map +1 -0
- package/dist/testing/sandbox-stub.d.ts +15 -0
- package/dist/testing/sandbox-stub.d.ts.map +1 -0
- package/dist/testing/sandbox-stub.js +15 -0
- package/dist/testing/sandbox-stub.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +0 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/types.d.ts +138 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +4 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/triggers/index.d.ts +4 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +187 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/types.d.ts +74 -0
- package/dist/triggers/types.d.ts.map +1 -0
- package/dist/triggers/types.js +5 -0
- package/dist/triggers/types.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { RunLock, Validators, Fact, MemOp } from '../nightly/index.js';
|
|
2
|
+
import type { MemoryFact, MemoryOp } from '../memory/index.js';
|
|
3
|
+
export interface FileRunLockDeps {
|
|
4
|
+
lockPath: string;
|
|
5
|
+
readFile(path: string): string;
|
|
6
|
+
writeFile(path: string, content: string): void;
|
|
7
|
+
exists(path: string): boolean;
|
|
8
|
+
removeFile(path: string): void;
|
|
9
|
+
pid: number;
|
|
10
|
+
bootId: string;
|
|
11
|
+
startTime: number;
|
|
12
|
+
now(): number;
|
|
13
|
+
maxHeldMs?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* File-based RunLock.
|
|
17
|
+
* acquire(): if the lockfile does not exist → write token JSON, return {ok:true, token}.
|
|
18
|
+
* if it exists → parse; if stale (now - acquiredAt > maxHeldMs) → overwrite and take over.
|
|
19
|
+
* if corrupt (parse error) → treat as stale, take over.
|
|
20
|
+
* if live → return {ok:false, heldBy, heldForMs}.
|
|
21
|
+
* release(token): if the lockfile exists AND its nonce matches → remove; otherwise no-op.
|
|
22
|
+
*/
|
|
23
|
+
export declare function makeFileRunLock(deps: FileRunLockDeps): RunLock;
|
|
24
|
+
export interface MemoryValidatorsDeps {
|
|
25
|
+
liveFactIds: Set<string>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Deterministic Validators for nightly consolidation.
|
|
29
|
+
* - MemOp UPDATE/DELETE with an unknown factId → fails refs_exist
|
|
30
|
+
* - MemOp ADD with empty text → fails (no_conflicts as the "content" validator)
|
|
31
|
+
* - SkillDraft (no kind field) → passes always
|
|
32
|
+
* - Otherwise → passes
|
|
33
|
+
*/
|
|
34
|
+
export declare function makeMemoryValidators(deps: MemoryValidatorsDeps): Validators;
|
|
35
|
+
/**
|
|
36
|
+
* Bridge mapper: converts Memory's MemoryFact shape to the nightly Fact shape.
|
|
37
|
+
* Memory's factKey is a string hash; nightly's FactKey is {entity, relation, object}.
|
|
38
|
+
* We map id→entity, 'memory'→relation, factKey→object as a stable bridge convention.
|
|
39
|
+
*/
|
|
40
|
+
export declare function liveFactsForNightly(facts: MemoryFact[]): Fact[];
|
|
41
|
+
/**
|
|
42
|
+
* Bridge mapper: converts a nightly MemOp to a Memory MemoryOp for promotion.
|
|
43
|
+
* NOOP → null (no commit needed).
|
|
44
|
+
* DELETE uses humanConfirmed: true because promotion runs only after the
|
|
45
|
+
* operator's morning-card Approve tap → human-confirmed.
|
|
46
|
+
*/
|
|
47
|
+
export declare function memOpToMemoryOp(op: MemOp): MemoryOp | null;
|
|
48
|
+
//# sourceMappingURL=nightly-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nightly-adapters.d.ts","sourceRoot":"","sources":["../../src/runtime/nightly-adapters.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAa,UAAU,EAAmB,IAAI,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AACvG,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAM9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,IAAI,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CA4D9D;AAMD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,UAAU,CAyB3E;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAQ/D;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,CAY1D"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// packages/core-ts/src/runtime/nightly-adapters.ts
|
|
2
|
+
// Nightly support adapters: file-based RunLock, deterministic Validators,
|
|
3
|
+
// and the nightly↔memory type bridge (Tier-4 B2).
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
/**
|
|
6
|
+
* File-based RunLock.
|
|
7
|
+
* acquire(): if the lockfile does not exist → write token JSON, return {ok:true, token}.
|
|
8
|
+
* if it exists → parse; if stale (now - acquiredAt > maxHeldMs) → overwrite and take over.
|
|
9
|
+
* if corrupt (parse error) → treat as stale, take over.
|
|
10
|
+
* if live → return {ok:false, heldBy, heldForMs}.
|
|
11
|
+
* release(token): if the lockfile exists AND its nonce matches → remove; otherwise no-op.
|
|
12
|
+
*/
|
|
13
|
+
export function makeFileRunLock(deps) {
|
|
14
|
+
const maxHeldMs = deps.maxHeldMs ?? 7_200_000;
|
|
15
|
+
const readToken = () => {
|
|
16
|
+
if (!deps.exists(deps.lockPath))
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(deps.readFile(deps.lockPath));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Corrupt lockfile — treat as absent (stale takeover)
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const writeToken = (token) => {
|
|
27
|
+
deps.writeFile(deps.lockPath, JSON.stringify(token));
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
acquire() {
|
|
31
|
+
const nowMs = deps.now();
|
|
32
|
+
if (!deps.exists(deps.lockPath)) {
|
|
33
|
+
const token = {
|
|
34
|
+
pid: deps.pid,
|
|
35
|
+
bootId: deps.bootId,
|
|
36
|
+
startTime: deps.startTime,
|
|
37
|
+
nonce: randomUUID(),
|
|
38
|
+
acquiredAt: nowMs,
|
|
39
|
+
};
|
|
40
|
+
writeToken(token);
|
|
41
|
+
return { ok: true, token };
|
|
42
|
+
}
|
|
43
|
+
const existing = readToken();
|
|
44
|
+
const heldForMs = existing ? nowMs - existing.acquiredAt : maxHeldMs + 1;
|
|
45
|
+
// Stale or corrupt: take over
|
|
46
|
+
if (existing === null || heldForMs > maxHeldMs) {
|
|
47
|
+
const token = {
|
|
48
|
+
pid: deps.pid,
|
|
49
|
+
bootId: deps.bootId,
|
|
50
|
+
startTime: deps.startTime,
|
|
51
|
+
nonce: randomUUID(),
|
|
52
|
+
acquiredAt: nowMs,
|
|
53
|
+
};
|
|
54
|
+
writeToken(token);
|
|
55
|
+
return { ok: true, token };
|
|
56
|
+
}
|
|
57
|
+
return { ok: false, heldBy: existing, heldForMs };
|
|
58
|
+
},
|
|
59
|
+
release(token) {
|
|
60
|
+
if (!deps.exists(deps.lockPath))
|
|
61
|
+
return;
|
|
62
|
+
const stored = readToken();
|
|
63
|
+
if (stored === null)
|
|
64
|
+
return;
|
|
65
|
+
if (stored.nonce !== token.nonce)
|
|
66
|
+
return;
|
|
67
|
+
deps.removeFile(deps.lockPath);
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Deterministic Validators for nightly consolidation.
|
|
73
|
+
* - MemOp UPDATE/DELETE with an unknown factId → fails refs_exist
|
|
74
|
+
* - MemOp ADD with empty text → fails (no_conflicts as the "content" validator)
|
|
75
|
+
* - SkillDraft (no kind field) → passes always
|
|
76
|
+
* - Otherwise → passes
|
|
77
|
+
*/
|
|
78
|
+
export function makeMemoryValidators(deps) {
|
|
79
|
+
return {
|
|
80
|
+
check(candidate) {
|
|
81
|
+
// SkillDraft has no `kind` field; MemOp always has one.
|
|
82
|
+
if (!('kind' in candidate)) {
|
|
83
|
+
return { ok: true };
|
|
84
|
+
}
|
|
85
|
+
const op = candidate;
|
|
86
|
+
if (op.kind === 'UPDATE' || op.kind === 'DELETE') {
|
|
87
|
+
if (!deps.liveFactIds.has(op.factId)) {
|
|
88
|
+
return { ok: false, failed: ['refs_exist'] };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (op.kind === 'ADD') {
|
|
92
|
+
if (op.text.trim() === '') {
|
|
93
|
+
return { ok: false, failed: ['dry_run_ok'] };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { ok: true };
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// liveFactsForNightly — MemoryFact[] → nightly Fact[]
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
/**
|
|
104
|
+
* Bridge mapper: converts Memory's MemoryFact shape to the nightly Fact shape.
|
|
105
|
+
* Memory's factKey is a string hash; nightly's FactKey is {entity, relation, object}.
|
|
106
|
+
* We map id→entity, 'memory'→relation, factKey→object as a stable bridge convention.
|
|
107
|
+
*/
|
|
108
|
+
export function liveFactsForNightly(facts) {
|
|
109
|
+
return facts.map((f) => ({
|
|
110
|
+
id: f.id,
|
|
111
|
+
text: f.text,
|
|
112
|
+
factKey: { entity: f.id, relation: 'memory', object: f.factKey },
|
|
113
|
+
invalidAt: f.invalidAt,
|
|
114
|
+
isHumanConfirmed: f.isHumanConfirmed,
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
// memOpToMemoryOp — nightly MemOp → memory MemoryOp | null
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
/**
|
|
121
|
+
* Bridge mapper: converts a nightly MemOp to a Memory MemoryOp for promotion.
|
|
122
|
+
* NOOP → null (no commit needed).
|
|
123
|
+
* DELETE uses humanConfirmed: true because promotion runs only after the
|
|
124
|
+
* operator's morning-card Approve tap → human-confirmed.
|
|
125
|
+
*/
|
|
126
|
+
export function memOpToMemoryOp(op) {
|
|
127
|
+
switch (op.kind) {
|
|
128
|
+
case 'ADD':
|
|
129
|
+
return { op: 'ADD', text: op.text };
|
|
130
|
+
case 'UPDATE':
|
|
131
|
+
return { op: 'UPDATE', targetId: op.factId, text: op.text };
|
|
132
|
+
case 'DELETE':
|
|
133
|
+
// promotion runs only after the operator's morning-card Approve tap → human-confirmed
|
|
134
|
+
return { op: 'DELETE', targetId: op.factId, humanConfirmed: true, reason: op.reason };
|
|
135
|
+
case 'NOOP':
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=nightly-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nightly-adapters.js","sourceRoot":"","sources":["../../src/runtime/nightly-adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Generator, Judge } from '../nightly/index.js';
|
|
2
|
+
import type { ProviderAdapter } from '../agent-loop/types.js';
|
|
3
|
+
export declare function makeNightlyGenerator(deps: {
|
|
4
|
+
provider: ProviderAdapter;
|
|
5
|
+
nowIso: () => string;
|
|
6
|
+
}): Generator;
|
|
7
|
+
export declare function makeNightlyJudge(deps: {
|
|
8
|
+
provider: ProviderAdapter;
|
|
9
|
+
}): Judge;
|
|
10
|
+
//# sourceMappingURL=nightly-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nightly-generator.d.ts","sourceRoot":"","sources":["../../src/runtime/nightly-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAA2F,MAAM,qBAAqB,CAAA;AACpJ,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAqN7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,EAAE,eAAe,CAAA;IACzB,MAAM,EAAE,MAAM,MAAM,CAAA;CACrB,GAAG,SAAS,CAgDZ;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,eAAe,CAAA;CAAE,GAAG,KAAK,CAsD3E"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
// packages/core-ts/src/runtime/nightly-generator.ts
|
|
2
|
+
// LLM-backed Generator and Judge adapters for nightly consolidation (Tier-4 B3).
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Helpers
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
/**
|
|
7
|
+
* Wrap a raw slug string from the LLM into the structured nightly FactKey.
|
|
8
|
+
* Convention: { entity: 'fact', relation: 'asserts', object: <slug> }
|
|
9
|
+
*/
|
|
10
|
+
function wrapSlug(slug) {
|
|
11
|
+
return { entity: 'fact', relation: 'asserts', object: slug };
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Scan `text` starting at `from`, tracking JSON string-literal context.
|
|
15
|
+
* Returns the index of the next occurrence of `open` that is NOT inside a
|
|
16
|
+
* JSON string, or -1 if none found.
|
|
17
|
+
*/
|
|
18
|
+
function indexOfOutsideString(text, open, from) {
|
|
19
|
+
let inString = false;
|
|
20
|
+
for (let i = from; i < text.length; i++) {
|
|
21
|
+
const ch = text[i];
|
|
22
|
+
if (inString) {
|
|
23
|
+
if (ch === '\\') {
|
|
24
|
+
i++;
|
|
25
|
+
continue;
|
|
26
|
+
} // skip escaped char
|
|
27
|
+
if (ch === '"')
|
|
28
|
+
inString = false;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
if (ch === '"') {
|
|
32
|
+
inString = true;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (ch === open)
|
|
36
|
+
return i;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return -1;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Starting at `start` (which must be the opening bracket `open`), scan to the
|
|
43
|
+
* matching close bracket, respecting JSON string-literal context so brackets
|
|
44
|
+
* inside strings are not counted. Returns the index of the matching close, or
|
|
45
|
+
* -1 if the text ends before the brackets balance.
|
|
46
|
+
*/
|
|
47
|
+
function matchingClose(text, start, open, close) {
|
|
48
|
+
let inString = false;
|
|
49
|
+
let depth = 0;
|
|
50
|
+
for (let i = start; i < text.length; i++) {
|
|
51
|
+
const ch = text[i];
|
|
52
|
+
if (inString) {
|
|
53
|
+
if (ch === '\\') {
|
|
54
|
+
i++;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (ch === '"')
|
|
58
|
+
inString = false;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (ch === '"') {
|
|
62
|
+
inString = true;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (ch === open)
|
|
66
|
+
depth++;
|
|
67
|
+
else if (ch === close) {
|
|
68
|
+
depth--;
|
|
69
|
+
if (depth === 0)
|
|
70
|
+
return i;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return -1;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Extract the first top-level JSON array from a string that may contain prose.
|
|
78
|
+
* String-aware: brackets inside JSON string literals are not counted.
|
|
79
|
+
* If a candidate substring fails JSON.parse, scanning resumes after that '['.
|
|
80
|
+
* Returns the raw substring or null if no valid JSON array is found.
|
|
81
|
+
*/
|
|
82
|
+
function extractFirstJsonArray(text) {
|
|
83
|
+
let searchFrom = 0;
|
|
84
|
+
while (true) {
|
|
85
|
+
const start = indexOfOutsideString(text, '[', searchFrom);
|
|
86
|
+
if (start === -1)
|
|
87
|
+
return null;
|
|
88
|
+
const end = matchingClose(text, start, '[', ']');
|
|
89
|
+
if (end === -1)
|
|
90
|
+
return null;
|
|
91
|
+
const candidate = text.slice(start, end + 1);
|
|
92
|
+
try {
|
|
93
|
+
JSON.parse(candidate);
|
|
94
|
+
return candidate;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
searchFrom = start + 1; // this '[' is junk prose; try the next one
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Extract the first top-level JSON object from a string that may contain prose.
|
|
103
|
+
* String-aware: brackets inside JSON string literals are not counted.
|
|
104
|
+
* If a candidate substring fails JSON.parse, scanning resumes after that '{'.
|
|
105
|
+
* Used by the judge to parse { verdict: ... }.
|
|
106
|
+
*/
|
|
107
|
+
function extractFirstJsonObject(text) {
|
|
108
|
+
let searchFrom = 0;
|
|
109
|
+
while (true) {
|
|
110
|
+
const start = indexOfOutsideString(text, '{', searchFrom);
|
|
111
|
+
if (start === -1)
|
|
112
|
+
return null;
|
|
113
|
+
const end = matchingClose(text, start, '{', '}');
|
|
114
|
+
if (end === -1)
|
|
115
|
+
return null;
|
|
116
|
+
const candidate = text.slice(start, end + 1);
|
|
117
|
+
try {
|
|
118
|
+
JSON.parse(candidate);
|
|
119
|
+
return candidate;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
searchFrom = start + 1; // this '{' is junk prose; try the next one
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const MAX_OPS = 50;
|
|
127
|
+
/**
|
|
128
|
+
* Parse the LLM reply into validated MemOps.
|
|
129
|
+
* - Extracts the first JSON array from reply (handles prose wrapping).
|
|
130
|
+
* - Validates each element: kind ∈ {ADD,UPDATE,DELETE,NOOP} + required fields.
|
|
131
|
+
* - Wraps the string factKey slug into the structured FactKey for ADD/UPDATE.
|
|
132
|
+
* - For UPDATE missing factKey, reuses the live fact's factKey.
|
|
133
|
+
* - Drops malformed elements silently.
|
|
134
|
+
* - Caps array at MAX_OPS.
|
|
135
|
+
* On any parse failure returns [].
|
|
136
|
+
*/
|
|
137
|
+
function parseMemOps(reply, liveFacts) {
|
|
138
|
+
const raw = extractFirstJsonArray(reply);
|
|
139
|
+
if (raw === null)
|
|
140
|
+
return [];
|
|
141
|
+
let parsed;
|
|
142
|
+
try {
|
|
143
|
+
parsed = JSON.parse(raw);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
if (!Array.isArray(parsed))
|
|
149
|
+
return [];
|
|
150
|
+
const ops = [];
|
|
151
|
+
for (const el of parsed) {
|
|
152
|
+
if (ops.length >= MAX_OPS)
|
|
153
|
+
break;
|
|
154
|
+
if (el === null || typeof el !== 'object')
|
|
155
|
+
continue;
|
|
156
|
+
const elem = el;
|
|
157
|
+
const kind = elem['kind'];
|
|
158
|
+
if (kind !== 'ADD' && kind !== 'UPDATE' && kind !== 'DELETE' && kind !== 'NOOP')
|
|
159
|
+
continue;
|
|
160
|
+
if (kind === 'ADD') {
|
|
161
|
+
const rawKey = elem['factKey'];
|
|
162
|
+
const text = elem['text'];
|
|
163
|
+
if (typeof text !== 'string' || text === '')
|
|
164
|
+
continue;
|
|
165
|
+
// factKey may be a string slug (from LLM) or already a structured object
|
|
166
|
+
const factKey = typeof rawKey === 'string'
|
|
167
|
+
? wrapSlug(rawKey)
|
|
168
|
+
: isStructuredFactKey(rawKey)
|
|
169
|
+
? rawKey
|
|
170
|
+
: null;
|
|
171
|
+
if (factKey === null)
|
|
172
|
+
continue;
|
|
173
|
+
ops.push({ kind: 'ADD', factKey, text });
|
|
174
|
+
}
|
|
175
|
+
else if (kind === 'UPDATE') {
|
|
176
|
+
const factId = elem['factId'];
|
|
177
|
+
const text = elem['text'];
|
|
178
|
+
if (typeof factId !== 'string' || typeof text !== 'string' || text === '')
|
|
179
|
+
continue;
|
|
180
|
+
// factKey: use LLM-provided slug/object, or fall back to live fact's factKey
|
|
181
|
+
const rawKey = elem['factKey'];
|
|
182
|
+
let factKey = null;
|
|
183
|
+
if (typeof rawKey === 'string') {
|
|
184
|
+
factKey = wrapSlug(rawKey);
|
|
185
|
+
}
|
|
186
|
+
else if (isStructuredFactKey(rawKey)) {
|
|
187
|
+
factKey = rawKey;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// LLM omitted factKey — reuse from live facts
|
|
191
|
+
factKey = liveFacts.find((f) => f.id === factId)?.factKey ?? null;
|
|
192
|
+
}
|
|
193
|
+
if (factKey === null)
|
|
194
|
+
continue;
|
|
195
|
+
ops.push({ kind: 'UPDATE', factId, factKey, text });
|
|
196
|
+
}
|
|
197
|
+
else if (kind === 'DELETE') {
|
|
198
|
+
const factId = elem['factId'];
|
|
199
|
+
const reason = elem['reason'];
|
|
200
|
+
if (typeof factId !== 'string' || typeof reason !== 'string')
|
|
201
|
+
continue;
|
|
202
|
+
ops.push({ kind: 'DELETE', factId, reason });
|
|
203
|
+
}
|
|
204
|
+
else if (kind === 'NOOP') {
|
|
205
|
+
const factId = elem['factId'];
|
|
206
|
+
if (typeof factId !== 'string')
|
|
207
|
+
continue;
|
|
208
|
+
ops.push({ kind: 'NOOP', factId });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return ops;
|
|
212
|
+
}
|
|
213
|
+
function isStructuredFactKey(v) {
|
|
214
|
+
if (v === null || typeof v !== 'object')
|
|
215
|
+
return false;
|
|
216
|
+
const k = v;
|
|
217
|
+
return typeof k['entity'] === 'string' && typeof k['relation'] === 'string' && typeof k['object'] === 'string';
|
|
218
|
+
}
|
|
219
|
+
function buildDiff(ops) {
|
|
220
|
+
const added = [];
|
|
221
|
+
const removed = [];
|
|
222
|
+
const updated = [];
|
|
223
|
+
for (const op of ops) {
|
|
224
|
+
if (op.kind === 'ADD')
|
|
225
|
+
added.push(op);
|
|
226
|
+
else if (op.kind === 'DELETE')
|
|
227
|
+
removed.push(op.factId);
|
|
228
|
+
else if (op.kind === 'UPDATE')
|
|
229
|
+
updated.push(op);
|
|
230
|
+
// NOOP excluded from the diff
|
|
231
|
+
}
|
|
232
|
+
return { added, removed, updated };
|
|
233
|
+
}
|
|
234
|
+
const EMPTY_DIFF = { added: [], removed: [], updated: [] };
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
// makeNightlyGenerator
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
export function makeNightlyGenerator(deps) {
|
|
239
|
+
return {
|
|
240
|
+
async proposeMemoryOps(log, liveFacts) {
|
|
241
|
+
const logText = JSON.stringify(log.records);
|
|
242
|
+
const factsText = liveFacts
|
|
243
|
+
.map((f) => `${f.id} | ${f.factKey.object} | ${f.text}`)
|
|
244
|
+
.join('\n');
|
|
245
|
+
const systemPrompt = 'You consolidate a day\'s events into durable long-term memory. ' +
|
|
246
|
+
'Output ONLY a JSON array of operations, no prose. ' +
|
|
247
|
+
'Each element must be one of:\n' +
|
|
248
|
+
' {"kind":"ADD","factKey":"<short-topic-slug>","text":"..."}\n' +
|
|
249
|
+
' {"kind":"UPDATE","factId":"<existing id>","factKey":"<slug>","text":"..."}\n' +
|
|
250
|
+
' {"kind":"DELETE","factId":"<existing id>","reason":"..."}\n' +
|
|
251
|
+
' {"kind":"NOOP","factId":"<id>"}\n' +
|
|
252
|
+
'factKey must be a plain string slug (e.g. "user-location"). Do NOT emit structured objects.';
|
|
253
|
+
const userPrompt = `Day log records:\n${logText}\n\n` +
|
|
254
|
+
`Current live facts (factId | topic | text):\n${factsText || '(none)'}`;
|
|
255
|
+
let response;
|
|
256
|
+
try {
|
|
257
|
+
response = await deps.provider.complete({
|
|
258
|
+
sessionId: 'nightly',
|
|
259
|
+
prefixBytes: new Uint8Array(0),
|
|
260
|
+
spans: [
|
|
261
|
+
{ role: 'system', provenance: 'operator', text: systemPrompt },
|
|
262
|
+
{ role: 'user', provenance: 'operator', text: userPrompt },
|
|
263
|
+
],
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
// Provider unavailable — graceful degrade
|
|
268
|
+
return { ops: [], diff: EMPTY_DIFF };
|
|
269
|
+
}
|
|
270
|
+
const ops = parseMemOps(response.reply, liveFacts);
|
|
271
|
+
const diff = buildDiff(ops);
|
|
272
|
+
return { ops, diff };
|
|
273
|
+
},
|
|
274
|
+
async draftSkills(_log) {
|
|
275
|
+
// Skill drafting deferred to a follow-up task. The runner handles an empty
|
|
276
|
+
// draft set gracefully (the lint pass is not skipped on an empty return).
|
|
277
|
+
return [];
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
// makeNightlyJudge
|
|
283
|
+
// ---------------------------------------------------------------------------
|
|
284
|
+
export function makeNightlyJudge(deps) {
|
|
285
|
+
return {
|
|
286
|
+
async grade(quarantinedDiff) {
|
|
287
|
+
const systemPrompt = 'You are a STRICT reviewer of a proposed memory diff. ' +
|
|
288
|
+
'You see only the artifact, never the author\'s reasoning. ' +
|
|
289
|
+
'Accept only safe, durable, non-redundant edits. ' +
|
|
290
|
+
'Output ONLY strict JSON: {"verdict":"accept"} or {"verdict":"reject"} or {"verdict":"edit"}. No prose.';
|
|
291
|
+
const diffSummary = `Added ops: ${quarantinedDiff.diff.added.length}\n` +
|
|
292
|
+
`Removed factIds: ${quarantinedDiff.diff.removed.join(', ') || '(none)'}\n` +
|
|
293
|
+
`Updated ops: ${quarantinedDiff.diff.updated.length}`;
|
|
294
|
+
const userPrompt = `Proposed diff body:\n${quarantinedDiff.body}\n\n` +
|
|
295
|
+
`Diff summary:\n${diffSummary}`;
|
|
296
|
+
let reply;
|
|
297
|
+
try {
|
|
298
|
+
const response = await deps.provider.complete({
|
|
299
|
+
sessionId: 'nightly',
|
|
300
|
+
prefixBytes: new Uint8Array(0),
|
|
301
|
+
spans: [
|
|
302
|
+
{ role: 'system', provenance: 'operator', text: systemPrompt },
|
|
303
|
+
{ role: 'user', provenance: 'operator', text: userPrompt },
|
|
304
|
+
],
|
|
305
|
+
});
|
|
306
|
+
reply = response.reply;
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// Provider unavailable — fail-safe: reject
|
|
310
|
+
return 'reject';
|
|
311
|
+
}
|
|
312
|
+
// Parse the verdict from the reply
|
|
313
|
+
const raw = extractFirstJsonObject(reply);
|
|
314
|
+
if (raw === null)
|
|
315
|
+
return 'reject';
|
|
316
|
+
let parsed;
|
|
317
|
+
try {
|
|
318
|
+
parsed = JSON.parse(raw);
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
return 'reject';
|
|
322
|
+
}
|
|
323
|
+
if (parsed === null || typeof parsed !== 'object')
|
|
324
|
+
return 'reject';
|
|
325
|
+
const verdict = parsed['verdict'];
|
|
326
|
+
if (verdict === 'accept')
|
|
327
|
+
return 'accept';
|
|
328
|
+
if (verdict === 'edit')
|
|
329
|
+
return 'edit';
|
|
330
|
+
// 'reject' or anything else → reject (fail-safe)
|
|
331
|
+
return 'reject';
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=nightly-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nightly-generator.js","sourceRoot":"","sources":["../../src/runtime/nightly-generator.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,iFAAiF;AAKjF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY;IACpE,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAQ;YAAC,CAAC,CAAG,oBAAoB;YACzD,IAAI,EAAE,KAAK,GAAG;gBAAE,QAAQ,GAAG,KAAK,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,SAAQ;YAAC,CAAC;YAC7C,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,KAAa;IAC7E,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAQ;YAAC,CAAC;YAClC,IAAI,EAAE,KAAK,GAAG;gBAAE,QAAQ,GAAG,KAAK,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,SAAQ;YAAC,CAAC;YAC7C,IAAI,EAAE,KAAK,IAAI;gBAAE,KAAK,EAAE,CAAA;iBACnB,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;gBACtB,KAAK,EAAE,CAAA;gBACP,IAAI,KAAK,KAAK,CAAC;oBAAE,OAAO,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;QACzD,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAChD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACrB,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,KAAK,GAAG,CAAC,CAAA,CAAG,2CAA2C;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;QACzD,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAChD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACrB,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,KAAK,GAAG,CAAC,CAAA,CAAG,2CAA2C;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,EAAE,CAAA;AAElB;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,KAAa,EAAE,SAAiB;IACnD,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAE3B,IAAI,MAAiB,CAAA;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAA;IAErC,MAAM,GAAG,GAAY,EAAE,CAAA;IAEvB,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO;YAAE,MAAK;QAChC,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,SAAQ;QACnD,MAAM,IAAI,GAAG,EAA6B,CAAA;QAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QACzB,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM;YAAE,SAAQ;QAEzF,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE;gBAAE,SAAQ;YACrD,yEAAyE;YACzE,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ;gBACxC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAClB,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC;oBAC3B,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,IAAI,CAAA;YACV,IAAI,OAAO,KAAK,IAAI;gBAAE,SAAQ;YAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;YACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE;gBAAE,SAAQ;YAEnF,6EAA6E;YAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;YAC9B,IAAI,OAAO,GAAmB,IAAI,CAAA;YAClC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC5B,CAAC;iBAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,OAAO,GAAG,MAAM,CAAA;YAClB,CAAC;iBAAM,CAAC;gBACN,8CAA8C;gBAC9C,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,OAAO,IAAI,IAAI,CAAA;YACnE,CAAC;YACD,IAAI,OAAO,KAAK,IAAI;gBAAE,SAAQ;YAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,SAAQ;YACtE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAC9C,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,SAAQ;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAU;IACrC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,OAAO,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAA;AAChH,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,MAAM,KAAK,GAAY,EAAE,CAAA;IACzB,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,OAAO,GAAY,EAAE,CAAA;IAE3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;aAChC,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;aACjD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/C,8BAA8B;IAChC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,GAAS,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;AAEhE,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,UAAU,oBAAoB,CAAC,IAGpC;IACC,OAAO;QACL,KAAK,CAAC,gBAAgB,CAAC,GAAqB,EAAE,SAAiB;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC3C,MAAM,SAAS,GAAG,SAAS;iBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;iBACvD,IAAI,CAAC,IAAI,CAAC,CAAA;YAEb,MAAM,YAAY,GAChB,iEAAiE;gBACjE,oDAAoD;gBACpD,gCAAgC;gBAChC,gEAAgE;gBAChE,gFAAgF;gBAChF,+DAA+D;gBAC/D,qCAAqC;gBACrC,6FAA6F,CAAA;YAE/F,MAAM,UAAU,GACd,qBAAqB,OAAO,MAAM;gBAClC,gDAAgD,SAAS,IAAI,QAAQ,EAAE,CAAA;YAEzE,IAAI,QAA2B,CAAA;YAC/B,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACtC,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;oBAC9B,KAAK,EAAE;wBACL,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;wBAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;qBAC3D;iBACF,CAAC,CAAA;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;gBAC1C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;YACtC,CAAC;YAED,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAClD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YAC3B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;QACtB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,IAAsB;YACtC,2EAA2E;YAC3E,0EAA0E;YAC1E,OAAO,EAAE,CAAA;QACX,CAAC;KACF,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,UAAU,gBAAgB,CAAC,IAAmC;IAClE,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,eAAgC;YAC1C,MAAM,YAAY,GAChB,uDAAuD;gBACvD,4DAA4D;gBAC5D,kDAAkD;gBAClD,wGAAwG,CAAA;YAE1G,MAAM,WAAW,GACf,cAAc,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI;gBACnD,oBAAoB,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI;gBAC3E,gBAAgB,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;YAEvD,MAAM,UAAU,GACd,wBAAwB,eAAe,CAAC,IAAI,MAAM;gBAClD,kBAAkB,WAAW,EAAE,CAAA;YAEjC,IAAI,KAAa,CAAA;YACjB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC5C,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;oBAC9B,KAAK,EAAE;wBACL,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;wBAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;qBAC3D;iBACF,CAAC,CAAA;gBACF,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;gBAC3C,OAAO,QAAQ,CAAA;YACjB,CAAC;YAED,mCAAmC;YACnC,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;YACzC,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,QAAQ,CAAA;YAEjC,IAAI,MAAe,CAAA;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,QAAQ,CAAA;YACjB,CAAC;YAED,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAClE,MAAM,OAAO,GAAI,MAAkC,CAAC,SAAS,CAAC,CAAA;YAE9D,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YACzC,IAAI,OAAO,KAAK,MAAM;gBAAE,OAAO,MAAM,CAAA;YACrC,iDAAiD;YACjD,OAAO,QAAQ,CAAA;QACjB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { makeOnboardingOps } from '../onboarding/index.js';
|
|
2
|
+
/** Build the onboarding ops with real Node adapters. Honors AISY_HOME. */
|
|
3
|
+
export declare function makeNodeOnboardingOps(): ReturnType<typeof makeOnboardingOps>;
|
|
4
|
+
/** Harness version from package.json (for the CLI version flag). */
|
|
5
|
+
export declare function harnessVersion(): string;
|
|
6
|
+
//# sourceMappingURL=onboarding-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding-node.d.ts","sourceRoot":"","sources":["../../src/runtime/onboarding-node.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AA+D1D,0EAA0E;AAC1E,wBAAgB,qBAAqB,IAAI,UAAU,CAAC,OAAO,iBAAiB,CAAC,CA4R5E;AAED,oEAAoE;AACpE,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
|