@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,183 @@
|
|
|
1
|
+
export type Provenance = "operator" | "untrusted";
|
|
2
|
+
export interface ContextSpan {
|
|
3
|
+
role: "system" | "user" | "assistant" | "tool";
|
|
4
|
+
provenance: Provenance;
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
export interface FrozenSnapshot {
|
|
8
|
+
prefixBytes: Uint8Array;
|
|
9
|
+
prefixHash: string;
|
|
10
|
+
breakpoints: number[];
|
|
11
|
+
takenAt: string;
|
|
12
|
+
}
|
|
13
|
+
export interface VerificationTraceFile {
|
|
14
|
+
kind: "file";
|
|
15
|
+
path: string;
|
|
16
|
+
existsExpected: true;
|
|
17
|
+
sha256?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface VerificationTraceSQL {
|
|
20
|
+
kind: "sql";
|
|
21
|
+
query: string;
|
|
22
|
+
expectRows: number | {
|
|
23
|
+
op: "=" | ">" | ">=";
|
|
24
|
+
n: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface VerificationTraceHTTP {
|
|
28
|
+
kind: "http";
|
|
29
|
+
method: string;
|
|
30
|
+
url: string;
|
|
31
|
+
expectStatus: number;
|
|
32
|
+
}
|
|
33
|
+
export interface VerificationTraceExit {
|
|
34
|
+
kind: "exit";
|
|
35
|
+
argv: string[];
|
|
36
|
+
expectCode: number;
|
|
37
|
+
}
|
|
38
|
+
export type VerificationTrace = VerificationTraceFile | VerificationTraceSQL | VerificationTraceHTTP | VerificationTraceExit;
|
|
39
|
+
export interface PlanStep {
|
|
40
|
+
intent: string;
|
|
41
|
+
tools: string[];
|
|
42
|
+
irreversible: boolean;
|
|
43
|
+
trace: VerificationTrace;
|
|
44
|
+
}
|
|
45
|
+
export interface Plan {
|
|
46
|
+
steps: PlanStep[];
|
|
47
|
+
}
|
|
48
|
+
export interface TurnInput {
|
|
49
|
+
sessionId: string;
|
|
50
|
+
spans: ContextSpan[];
|
|
51
|
+
/** Optional approval token for Tier-3 plans (AC-01-17) */
|
|
52
|
+
approvalToken?: string;
|
|
53
|
+
/** Per-turn cancellation (ADR-0051): /stop aborts the in-flight turn. The loop
|
|
54
|
+
* maps an abort to a clean Halt('stopped'), never an error. */
|
|
55
|
+
signal?: AbortSignal;
|
|
56
|
+
}
|
|
57
|
+
export type TurnState = {
|
|
58
|
+
status: "ok";
|
|
59
|
+
} | {
|
|
60
|
+
status: "awaiting-clarification";
|
|
61
|
+
} | {
|
|
62
|
+
status: "awaiting-approval";
|
|
63
|
+
} | {
|
|
64
|
+
status: "halted";
|
|
65
|
+
reason: "loop-guardian" | "all-providers-down" | "plan-lint-failed" | "cap-exceeded" | "budget-capped" | "stopped";
|
|
66
|
+
} | {
|
|
67
|
+
status: "in-progress";
|
|
68
|
+
nextStepIndex: number;
|
|
69
|
+
};
|
|
70
|
+
/** Token + dollar usage for a turn (or a single model call). */
|
|
71
|
+
export interface TurnUsage {
|
|
72
|
+
inputTokens: number;
|
|
73
|
+
outputTokens: number;
|
|
74
|
+
dollars: number;
|
|
75
|
+
}
|
|
76
|
+
export interface TurnResult {
|
|
77
|
+
reply: string;
|
|
78
|
+
state: "ok" | "awaiting-clarification" | "awaiting-approval" | "halted";
|
|
79
|
+
haltReason?: "loop-guardian" | "all-providers-down" | "plan-lint-failed" | "cap-exceeded" | "budget-capped" | "stopped";
|
|
80
|
+
/** On state "awaiting-approval", the hash of the pending Tier-3 plan; the caller must
|
|
81
|
+
* echo it back as approvalToken so a swapped plan cannot reuse a prior token (§5, AC-01-17). */
|
|
82
|
+
planHash?: string;
|
|
83
|
+
/** True if the turn's context held an untrusted span (outbound is locked). */
|
|
84
|
+
narrowed?: boolean;
|
|
85
|
+
/** Accumulated provider usage for the turn (when the adapter reports it). */
|
|
86
|
+
usage?: TurnUsage;
|
|
87
|
+
}
|
|
88
|
+
export interface AgentLoop {
|
|
89
|
+
runTurn(input: TurnInput): Promise<TurnResult>;
|
|
90
|
+
}
|
|
91
|
+
export interface Clock {
|
|
92
|
+
now(): string;
|
|
93
|
+
}
|
|
94
|
+
export interface ModelRequest {
|
|
95
|
+
sessionId: string;
|
|
96
|
+
prefixBytes: Uint8Array;
|
|
97
|
+
spans: ContextSpan[];
|
|
98
|
+
}
|
|
99
|
+
export interface ToolCall {
|
|
100
|
+
name: string;
|
|
101
|
+
args: Record<string, unknown>;
|
|
102
|
+
/** ref back to the span the args were derived from, if any */
|
|
103
|
+
sourceSpanProvenance?: Provenance;
|
|
104
|
+
}
|
|
105
|
+
export interface ModelResponse {
|
|
106
|
+
reply: string;
|
|
107
|
+
toolCalls?: ToolCall[];
|
|
108
|
+
planPath?: string;
|
|
109
|
+
interpretationCount?: number;
|
|
110
|
+
/** Inline plan emitted by the model; linted (R1–R5) before any dispatch. */
|
|
111
|
+
plan?: Plan;
|
|
112
|
+
/** Provider usage for this call, when the adapter reports it. */
|
|
113
|
+
usage?: TurnUsage;
|
|
114
|
+
}
|
|
115
|
+
export interface ProviderError extends Error {
|
|
116
|
+
kind: "rate-limit" | "server-error" | "timeout" | "all-exhausted";
|
|
117
|
+
}
|
|
118
|
+
export interface ProviderAdapter {
|
|
119
|
+
complete(req: ModelRequest, signal?: AbortSignal): Promise<ModelResponse>;
|
|
120
|
+
}
|
|
121
|
+
export interface HookCtx {
|
|
122
|
+
provenance: Provenance;
|
|
123
|
+
narrowed: boolean;
|
|
124
|
+
}
|
|
125
|
+
export interface HookGate {
|
|
126
|
+
pre(call: ToolCall, ctx: HookCtx): Promise<"allow" | "deny" | "ask" | {
|
|
127
|
+
modify: ToolCall;
|
|
128
|
+
}>;
|
|
129
|
+
post(call: ToolCall, result: unknown): Promise<void>;
|
|
130
|
+
}
|
|
131
|
+
export interface MemoryPort {
|
|
132
|
+
snapshot(): Promise<FrozenSnapshot>;
|
|
133
|
+
forget(factRef: string, humanConfirmed: boolean): Promise<void>;
|
|
134
|
+
}
|
|
135
|
+
export interface LoopGuardian {
|
|
136
|
+
observe(call: ToolCall): {
|
|
137
|
+
trip: boolean;
|
|
138
|
+
period?: 1 | 2 | 3;
|
|
139
|
+
};
|
|
140
|
+
note(event: "replan"): void;
|
|
141
|
+
}
|
|
142
|
+
export interface LogEntry {
|
|
143
|
+
seq: number;
|
|
144
|
+
ts: string;
|
|
145
|
+
kind: string;
|
|
146
|
+
payloadHash: string;
|
|
147
|
+
payload: unknown;
|
|
148
|
+
}
|
|
149
|
+
export interface SessionSummary {
|
|
150
|
+
sessionId: string;
|
|
151
|
+
turns: number;
|
|
152
|
+
lastAt: string;
|
|
153
|
+
}
|
|
154
|
+
export interface SessionLog {
|
|
155
|
+
append(entry: LogEntry): void;
|
|
156
|
+
resume(sessionId: string): TurnState | null;
|
|
157
|
+
recent?(n: number): SessionSummary[];
|
|
158
|
+
}
|
|
159
|
+
export interface AgentLoopDeps {
|
|
160
|
+
clock: Clock;
|
|
161
|
+
provider: ProviderAdapter;
|
|
162
|
+
hookGate: HookGate;
|
|
163
|
+
memory: MemoryPort;
|
|
164
|
+
guardian: LoopGuardian;
|
|
165
|
+
sessionLog: SessionLog;
|
|
166
|
+
/** Maximum number of re-plans before halting with cap-exceeded (default 2) */
|
|
167
|
+
maxReplans?: number;
|
|
168
|
+
/** Maximum total tool calls before halting with cap-exceeded */
|
|
169
|
+
maxTotalToolCalls?: number;
|
|
170
|
+
/** Runs a verification trace probe (ADR-0017); injectable test seam. Default: pass. */
|
|
171
|
+
probeRunner?: (trace: VerificationTrace) => boolean | Promise<boolean>;
|
|
172
|
+
/** Executes an allowed tool call; injectable test seam. Default: no-op. */
|
|
173
|
+
executeTool?: (call: ToolCall) => unknown | Promise<unknown>;
|
|
174
|
+
/** Post-model-call budget probe (ADR-0051): given the turn's running usage,
|
|
175
|
+
* return true to halt the turn with budget-capped. Default: never halts. */
|
|
176
|
+
budgetCheck?: (usage: {
|
|
177
|
+
sessionId: string;
|
|
178
|
+
inputTokens: number;
|
|
179
|
+
outputTokens: number;
|
|
180
|
+
dollars: number;
|
|
181
|
+
}) => boolean | Promise<boolean>;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent-loop/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent-loop/types.ts"],"names":[],"mappings":"AAAA,gDAAgD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aisy.d.ts","sourceRoot":"","sources":["../../src/bin/aisy.ts"],"names":[],"mappings":""}
|
package/dist/bin/aisy.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Legacy onboarding entry (not a linked bin — the app's unified `aisy` owns the
|
|
3
|
+
// command). Kept runnable via `node dist/bin/aisy.js` for core-only use.
|
|
4
|
+
// All adapter wiring lives in runtime/onboarding-node.ts.
|
|
5
|
+
import { runCli } from '../cli/index.js';
|
|
6
|
+
import { makeNodeOnboardingOps, harnessVersion } from '../runtime/onboarding-node.js';
|
|
7
|
+
const exitCode = await runCli(process.argv.slice(2), {
|
|
8
|
+
ops: makeNodeOnboardingOps(),
|
|
9
|
+
out: (s) => process.stdout.write(s + '\n'),
|
|
10
|
+
err: (s) => process.stderr.write(s + '\n'),
|
|
11
|
+
version: harnessVersion(),
|
|
12
|
+
});
|
|
13
|
+
process.exit(exitCode);
|
|
14
|
+
//# sourceMappingURL=aisy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aisy.js","sourceRoot":"","sources":["../../src/bin/aisy.ts"],"names":[],"mappings":";AACA,gFAAgF;AAChF,yEAAyE;AACzE,0DAA0D;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAErF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACnD,GAAG,EAAE,qBAAqB,EAAE;IAC5B,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,cAAc,EAAE;CAC1B,CAAC,CAAA;AACF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OnboardingOps } from '../onboarding/index.js';
|
|
2
|
+
export interface ParsedArgs {
|
|
3
|
+
command: string;
|
|
4
|
+
flags: Record<string, string | boolean>;
|
|
5
|
+
positional: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
8
|
+
export interface CliDeps {
|
|
9
|
+
ops: OnboardingOps;
|
|
10
|
+
out: (s: string) => void;
|
|
11
|
+
err: (s: string) => void;
|
|
12
|
+
version?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const SETUP_ELEMENTS: readonly ["provider", "telegram", "memory", "personality"];
|
|
15
|
+
export type SetupElement = (typeof SETUP_ELEMENTS)[number];
|
|
16
|
+
export declare function runCli(argv: string[], deps: CliDeps): Promise<number>;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,wBAAwB,CAAA;AAQvF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;IACvC,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiBpD;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,aAAa,CAAA;IAClB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACxB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,cAAc,4DAA6D,CAAA;AACxF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAuB1D,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAiE3E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
export function parseArgs(argv) {
|
|
2
|
+
const flags = {};
|
|
3
|
+
const positional = [];
|
|
4
|
+
let command = '';
|
|
5
|
+
for (const arg of argv) {
|
|
6
|
+
if (arg.startsWith('--')) {
|
|
7
|
+
const body = arg.slice(2);
|
|
8
|
+
const eq = body.indexOf('=');
|
|
9
|
+
if (eq >= 0)
|
|
10
|
+
flags[body.slice(0, eq)] = body.slice(eq + 1);
|
|
11
|
+
else
|
|
12
|
+
flags[body] = true;
|
|
13
|
+
}
|
|
14
|
+
else if (!command) {
|
|
15
|
+
command = arg;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
positional.push(arg);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return { command, flags, positional };
|
|
22
|
+
}
|
|
23
|
+
export const SETUP_ELEMENTS = ['provider', 'telegram', 'memory', 'personality'];
|
|
24
|
+
const USAGE = `aisy — personal agent harness
|
|
25
|
+
|
|
26
|
+
Usage:
|
|
27
|
+
aisy run Boot the Telegram agent
|
|
28
|
+
aisy init [--yes] [--force] [--non-interactive] Scaffold & validate a config (idempotent)
|
|
29
|
+
aisy setup [<element>] Re-run onboarding (optionally for one element)
|
|
30
|
+
aisy doctor [--fix] [--json] [--post-upgrade] Full-stack health check (read-only by default)
|
|
31
|
+
[--only=a,b] [--skip=a,b]
|
|
32
|
+
aisy diagnostics [--out=path] Write a redacted support bundle
|
|
33
|
+
aisy --help Show this help`;
|
|
34
|
+
const list = (v) => typeof v === 'string' && v.length > 0 ? v.split(',') : undefined;
|
|
35
|
+
function printReport(r, out) {
|
|
36
|
+
out(`doctor: ${r.ok ? 'OK' : 'FAIL'} (${r.checks.length} checks, harness ${r.harnessVersion})`);
|
|
37
|
+
for (const c of r.checks) {
|
|
38
|
+
if (c.status !== 'pass')
|
|
39
|
+
out(` [${c.status}/${c.severity}] ${c.id} — ${c.detail}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export async function runCli(argv, deps) {
|
|
43
|
+
const { command, flags, positional } = parseArgs(argv);
|
|
44
|
+
const { ops, out, err } = deps;
|
|
45
|
+
if (command === '' || command === 'help' || flags['help'] === true) {
|
|
46
|
+
out(USAGE);
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
switch (command) {
|
|
50
|
+
case 'init': {
|
|
51
|
+
const res = await ops.init({
|
|
52
|
+
yes: flags['yes'] === true,
|
|
53
|
+
force: flags['force'] === true,
|
|
54
|
+
nonInteractive: flags['non-interactive'] === true,
|
|
55
|
+
});
|
|
56
|
+
out(res.completed ? `init: complete — scaffolded ${res.scaffolded.join(', ')}` : 'init: incomplete');
|
|
57
|
+
for (const o of res.outcomes)
|
|
58
|
+
if (o.result === 'failed')
|
|
59
|
+
err(` ${o.step}: ${o.detail}`);
|
|
60
|
+
return res.completed ? 0 : 1;
|
|
61
|
+
}
|
|
62
|
+
case 'setup': {
|
|
63
|
+
const element = positional[0];
|
|
64
|
+
if (element !== undefined) {
|
|
65
|
+
if (!SETUP_ELEMENTS.includes(element)) {
|
|
66
|
+
err(`setup: unknown element "${element}". Valid elements: ${SETUP_ELEMENTS.join(', ')}`);
|
|
67
|
+
return 2;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Route to init; element (if any) is passed through as a positional hint.
|
|
71
|
+
// Per-element re-config flow is a documented follow-up — init currently ignores it.
|
|
72
|
+
const res = await ops.init({
|
|
73
|
+
yes: flags['yes'] === true,
|
|
74
|
+
force: flags['force'] === true,
|
|
75
|
+
nonInteractive: flags['non-interactive'] === true,
|
|
76
|
+
});
|
|
77
|
+
out(res.completed ? `init: complete — scaffolded ${res.scaffolded.join(', ')}` : 'init: incomplete');
|
|
78
|
+
for (const o of res.outcomes)
|
|
79
|
+
if (o.result === 'failed')
|
|
80
|
+
err(` ${o.step}: ${o.detail}`);
|
|
81
|
+
return res.completed ? 0 : 1;
|
|
82
|
+
}
|
|
83
|
+
case 'doctor': {
|
|
84
|
+
// Build conditionally — exactOptionalPropertyTypes forbids passing `undefined`.
|
|
85
|
+
const dopts = {
|
|
86
|
+
fix: flags['fix'] === true,
|
|
87
|
+
postUpgrade: flags['post-upgrade'] === true,
|
|
88
|
+
};
|
|
89
|
+
const only = list(flags['only']);
|
|
90
|
+
if (only)
|
|
91
|
+
dopts.only = only;
|
|
92
|
+
const skip = list(flags['skip']);
|
|
93
|
+
if (skip)
|
|
94
|
+
dopts.skip = skip;
|
|
95
|
+
const report = await ops.doctor(dopts);
|
|
96
|
+
if (flags['json'] === true)
|
|
97
|
+
out(ops.toJson(report));
|
|
98
|
+
else
|
|
99
|
+
printReport(report, out);
|
|
100
|
+
return report.ok ? 0 : 1;
|
|
101
|
+
}
|
|
102
|
+
case 'diagnostics': {
|
|
103
|
+
const out0 = typeof flags['out'] === 'string' ? flags['out'] : undefined;
|
|
104
|
+
const res = await ops.diagnostics(out0 !== undefined ? { out: out0 } : {});
|
|
105
|
+
out(`diagnostics: wrote ${res.bundlePath} (redacted: ${res.redactedFields.join(', ') || 'none'})`);
|
|
106
|
+
return 0;
|
|
107
|
+
}
|
|
108
|
+
default:
|
|
109
|
+
err(`unknown command: ${command}`);
|
|
110
|
+
err(USAGE);
|
|
111
|
+
return 2;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ContextEngine, ContextEngineDeps } from './types.js';
|
|
2
|
+
export type { SegmentKind, CompactionTier, TranscriptEntry, ContextSegment, CompactionView, ContextEngineDeps, ContextEngine, Provenance, } from './types.js';
|
|
3
|
+
export declare function makeContextEngine(deps: ContextEngineDeps): ContextEngine;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAGlB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,WAAW,EACX,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,UAAU,GACX,MAAM,YAAY,CAAA;AAWnB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAoIxE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// makeContextEngine — projection over an append-only transcript (ADR-0040).
|
|
3
|
+
// Compaction is a VIEW: the journal (transcript of record) is never mutated;
|
|
4
|
+
// each tier produces fresh segments referencing transcript ranges.
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
const TIERS = ['snip', 'micro', 'collapse', 'auto'];
|
|
7
|
+
const TAIL_VERBATIM = 1; // most-recent turns always kept verbatim
|
|
8
|
+
export function makeContextEngine(deps) {
|
|
9
|
+
const seqBy = new Map();
|
|
10
|
+
const lastTier = new Map();
|
|
11
|
+
const est = (t) => deps.estimateTokens(t);
|
|
12
|
+
const verbatim = (e) => ({
|
|
13
|
+
kind: 'verbatim',
|
|
14
|
+
provenance: e.provenance,
|
|
15
|
+
text: e.text,
|
|
16
|
+
coversSeq: [e.seq, e.seq],
|
|
17
|
+
});
|
|
18
|
+
// A summary inherits the STRICTEST provenance of its sources (ADR-0027):
|
|
19
|
+
// any untrusted source → the summary is untrusted (cannot be laundered).
|
|
20
|
+
const summarySeg = async (entries) => ({
|
|
21
|
+
kind: 'summary',
|
|
22
|
+
provenance: entries.some(e => e.provenance === 'untrusted') ? 'untrusted' : 'operator',
|
|
23
|
+
text: await deps.summarize(entries),
|
|
24
|
+
coversSeq: [entries[0].seq, entries[entries.length - 1].seq],
|
|
25
|
+
});
|
|
26
|
+
const totalTokens = (pinnedText, segs) => est(pinnedText) + segs.reduce((n, s) => n + est(s.text), 0);
|
|
27
|
+
// --- tier builders (recall-first: load-bearing entries never summarized) ---
|
|
28
|
+
const buildSnip = (entries) => {
|
|
29
|
+
const seen = new Set();
|
|
30
|
+
return entries.filter(e => (seen.has(e.text) ? false : (seen.add(e.text), true))).map(verbatim);
|
|
31
|
+
};
|
|
32
|
+
const buildMicro = async (entries) => {
|
|
33
|
+
const idx = entries.findIndex(e => !e.loadBearing && e.role === 'tool');
|
|
34
|
+
if (idx < 0)
|
|
35
|
+
return entries.map(verbatim);
|
|
36
|
+
const out = [];
|
|
37
|
+
for (let i = 0; i < entries.length; i++) {
|
|
38
|
+
out.push(i === idx ? await summarySeg([entries[i]]) : verbatim(entries[i]));
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
};
|
|
42
|
+
const buildCollapse = async (entries) => {
|
|
43
|
+
const mid = Math.floor(entries.length / 2);
|
|
44
|
+
const toSummarize = entries.slice(0, mid).filter(e => !e.loadBearing);
|
|
45
|
+
const keep = [...entries.slice(0, mid).filter(e => e.loadBearing), ...entries.slice(mid)];
|
|
46
|
+
const segs = toSummarize.length ? [await summarySeg(toSummarize)] : [];
|
|
47
|
+
return [...segs, ...keep.map(verbatim)];
|
|
48
|
+
};
|
|
49
|
+
const buildAuto = async (entries) => {
|
|
50
|
+
const tailStart = Math.max(0, entries.length - TAIL_VERBATIM);
|
|
51
|
+
const keepVerbatim = entries.filter((e, i) => e.loadBearing || i >= tailStart);
|
|
52
|
+
const toSummarize = entries.filter((e, i) => !e.loadBearing && i < tailStart);
|
|
53
|
+
const segs = toSummarize.length ? [await summarySeg(toSummarize)] : [];
|
|
54
|
+
return [...segs, ...keepVerbatim.map(verbatim)];
|
|
55
|
+
};
|
|
56
|
+
const buildTier = (tier, entries) => {
|
|
57
|
+
switch (tier) {
|
|
58
|
+
case 'snip': return buildSnip(entries);
|
|
59
|
+
case 'micro': return buildMicro(entries);
|
|
60
|
+
case 'collapse': return buildCollapse(entries);
|
|
61
|
+
default: return buildAuto(entries);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
// Deterministic fallback (no model): drop oldest non-load-bearing entries
|
|
65
|
+
// from the view until it fits — used when the summarizer is unavailable (§7).
|
|
66
|
+
const trimDeterministic = (entries, pinnedText, windowTokens) => {
|
|
67
|
+
const kept = [...entries];
|
|
68
|
+
while (totalTokens(pinnedText, kept.map(verbatim)) > windowTokens) {
|
|
69
|
+
const dropIdx = kept.findIndex(e => !e.loadBearing);
|
|
70
|
+
if (dropIdx < 0)
|
|
71
|
+
break; // only load-bearing left — keep them (recall-first)
|
|
72
|
+
kept.splice(dropIdx, 1);
|
|
73
|
+
}
|
|
74
|
+
return kept.map(verbatim);
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
record(sessionId, entry) {
|
|
78
|
+
const seq = (seqBy.get(sessionId) ?? 0) + 1;
|
|
79
|
+
seqBy.set(sessionId, seq);
|
|
80
|
+
deps.journalAppend({ ...entry, seq });
|
|
81
|
+
},
|
|
82
|
+
currentTier(sessionId) {
|
|
83
|
+
return lastTier.get(sessionId) ?? 'none';
|
|
84
|
+
},
|
|
85
|
+
async assemble(sessionId) {
|
|
86
|
+
const entries = deps.journalRead(sessionId);
|
|
87
|
+
const pinned = deps.pinnedPrefix();
|
|
88
|
+
const pinnedSeg = { kind: 'pinned', provenance: 'operator', text: pinned.text, coversSeq: [-1, -1] };
|
|
89
|
+
const breakpoints = pinned.breakpoints.slice(0, 4); // ADR-0019: ≤4, re-pinned post-projection
|
|
90
|
+
const { windowTokens, compactAtFraction } = deps.budget;
|
|
91
|
+
// Under budget → verbatim, no compaction.
|
|
92
|
+
const verbatimTotal = totalTokens(pinned.text, entries.map(verbatim));
|
|
93
|
+
if (verbatimTotal <= windowTokens * compactAtFraction) {
|
|
94
|
+
const segments = [pinnedSeg, ...entries.map(verbatim)];
|
|
95
|
+
lastTier.set(sessionId, 'none');
|
|
96
|
+
deps.emitEvent?.('context.assembled', { tier: 'none', tokens: verbatimTotal });
|
|
97
|
+
return { segments, breakpoints, tier: 'none', tokensEstimated: verbatimTotal };
|
|
98
|
+
}
|
|
99
|
+
// Compaction needed → require a durable trace (fail-closed, §7).
|
|
100
|
+
if (deps.journalAvailable && !deps.journalAvailable()) {
|
|
101
|
+
throw new Error('context-engine: journal unavailable — refusing to compact without a durable trace (fail-closed)');
|
|
102
|
+
}
|
|
103
|
+
const finalize = (tier, segs) => {
|
|
104
|
+
const segments = [pinnedSeg, ...segs];
|
|
105
|
+
lastTier.set(sessionId, tier);
|
|
106
|
+
deps.emitEvent?.('context.compacted', { tier, covers: segs.map(s => s.coversSeq) });
|
|
107
|
+
return { segments, breakpoints, tier, tokensEstimated: totalTokens(pinned.text, segs) };
|
|
108
|
+
};
|
|
109
|
+
try {
|
|
110
|
+
for (const tier of TIERS) {
|
|
111
|
+
const segs = await buildTier(tier, entries);
|
|
112
|
+
if (totalTokens(pinned.text, segs) <= windowTokens || tier === 'auto') {
|
|
113
|
+
return finalize(tier, segs);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// unreachable (auto always returns), but keep the type checker happy
|
|
117
|
+
return finalize('auto', await buildAuto(entries));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Summarizer failed → degrade to deterministic trimming, never throw (AC-15-9).
|
|
121
|
+
return finalize('auto', trimDeterministic(entries, pinned.text, windowTokens));
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context-engine/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Provenance } from '../agent-loop/types.js';
|
|
2
|
+
export type { Provenance };
|
|
3
|
+
export type SegmentKind = 'pinned' | 'verbatim' | 'summary';
|
|
4
|
+
export type CompactionTier = 'none' | 'snip' | 'micro' | 'collapse' | 'auto';
|
|
5
|
+
export interface TranscriptEntry {
|
|
6
|
+
seq: number;
|
|
7
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
8
|
+
provenance: Provenance;
|
|
9
|
+
text: string;
|
|
10
|
+
/** unresolved bug / open decision / pending TODO — survives compaction (recall-first). */
|
|
11
|
+
loadBearing?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ContextSegment {
|
|
14
|
+
kind: SegmentKind;
|
|
15
|
+
provenance: Provenance;
|
|
16
|
+
text: string;
|
|
17
|
+
coversSeq: [number, number];
|
|
18
|
+
}
|
|
19
|
+
export interface CompactionView {
|
|
20
|
+
segments: ContextSegment[];
|
|
21
|
+
breakpoints: number[];
|
|
22
|
+
tier: CompactionTier;
|
|
23
|
+
tokensEstimated: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ContextEngineDeps {
|
|
26
|
+
/** Append-only transcript of record (Observability 12). */
|
|
27
|
+
journalAppend(entry: TranscriptEntry): void;
|
|
28
|
+
journalRead(sessionId: string): TranscriptEntry[];
|
|
29
|
+
/** Whether the durable journal is readable — fail-closed when false (spec §7). */
|
|
30
|
+
journalAvailable?(): boolean;
|
|
31
|
+
/** Frozen Level-1 prefix (Core/Memory) — pinned, never compacted. */
|
|
32
|
+
pinnedPrefix(): {
|
|
33
|
+
text: string;
|
|
34
|
+
breakpoints: number[];
|
|
35
|
+
};
|
|
36
|
+
budget: {
|
|
37
|
+
windowTokens: number;
|
|
38
|
+
compactAtFraction: number;
|
|
39
|
+
};
|
|
40
|
+
/** Drafts a recall-first summary of a range; NEVER mutates the trace. May throw. */
|
|
41
|
+
summarize(entries: TranscriptEntry[]): Promise<string>;
|
|
42
|
+
estimateTokens(text: string): number;
|
|
43
|
+
/** Observability sink (context.assembled / context.compacted). */
|
|
44
|
+
emitEvent?(event: string, payload: unknown): void;
|
|
45
|
+
}
|
|
46
|
+
export interface ContextEngine {
|
|
47
|
+
/** Append a turn to the transcript of record (write-through). */
|
|
48
|
+
record(sessionId: string, entry: Omit<TranscriptEntry, 'seq'>): void;
|
|
49
|
+
/** Project the transcript to the smallest recall-first view under budget. */
|
|
50
|
+
assemble(sessionId: string): Promise<CompactionView>;
|
|
51
|
+
/** Current tier without re-projecting (introspection / `/context`). */
|
|
52
|
+
currentTier(sessionId: string): CompactionTier;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context-engine/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;AAC3D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAA;AAE5E,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;IAC9C,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,IAAI,EAAE,cAAc,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IAC3C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;IACjD,kFAAkF;IAClF,gBAAgB,CAAC,IAAI,OAAO,CAAA;IAC5B,qEAAqE;IACrE,YAAY,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACvD,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3D,oFAAoF;IACpF,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACpC,kEAAkE;IAClE,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CAClD;AAED,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;IACpE,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACpD,uEAAuE;IACvE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAA;CAC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context-engine/types.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,uDAAuD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type { CaseRuns, PassHatKReport, TrajectoryStep, Trajectory, DivergenceKind, Divergence, TrajectoryDiff, GoldenCase, ReplayReport, JournalLike, } from './types.js';
|
|
2
|
+
import type { CaseRuns, PassHatKReport, Trajectory, TrajectoryStep, TrajectoryDiff, GoldenCase, ReplayReport, JournalLike } from './types.js';
|
|
3
|
+
export declare function passHatK(cases: CaseRuns[]): PassHatKReport;
|
|
4
|
+
export declare function stepSignature(step: TrajectoryStep): string;
|
|
5
|
+
export declare function diffTrajectory(golden: Trajectory, replayed: Trajectory): TrajectoryDiff;
|
|
6
|
+
/**
|
|
7
|
+
* Replay a golden suite through an injected driver and gate on any divergence.
|
|
8
|
+
* The driver maps a prompt to the trajectory the current harness produces; in a
|
|
9
|
+
* real run it wraps the assembled system (safety/memory/gateway/observability),
|
|
10
|
+
* in a unit test it is a fake — the diff logic is identical either way.
|
|
11
|
+
*/
|
|
12
|
+
export declare function replaySuite(golden: GoldenCase[], replay: (prompt: string) => Trajectory): ReplayReport;
|
|
13
|
+
/**
|
|
14
|
+
* Derive a comparable trajectory from the append-only journal (Observability 12
|
|
15
|
+
* / ADR-0017). Volatile fields (ts/seq/prevHash/hash) never enter the step, so
|
|
16
|
+
* two runs that differ only in timing produce identical trajectories. tool ←
|
|
17
|
+
* payload.tool || entry.kind; verdict ← payload.verdict || (payload.pass ? …).
|
|
18
|
+
*/
|
|
19
|
+
export declare function trajectoryFromJournal(entries: JournalLike[]): Trajectory;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eval/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,QAAQ,EACR,cAAc,EACd,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EAEd,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAA;AAQnB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,CAyC1D;AAqBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,cAAc,CA4BvF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,YAAY,CAStG;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,CAUxE"}
|