@namzu/sdk 38.0.0 → 38.2.1
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/CHANGELOG.md +80 -0
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +1 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +2 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +4 -0
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/plan/lifecycle.d.ts +1 -1
- package/dist/manager/plan/lifecycle.d.ts.map +1 -1
- package/dist/manager/plan/lifecycle.js +14 -12
- package/dist/manager/plan/lifecycle.js.map +1 -1
- package/dist/manager/resident/agenda.d.ts +125 -0
- package/dist/manager/resident/agenda.d.ts.map +1 -0
- package/dist/manager/resident/agenda.js +551 -0
- package/dist/manager/resident/agenda.js.map +1 -0
- package/dist/manager/resident/delivery-window.d.ts +22 -0
- package/dist/manager/resident/delivery-window.d.ts.map +1 -0
- package/dist/manager/resident/delivery-window.js +78 -0
- package/dist/manager/resident/delivery-window.js.map +1 -0
- package/dist/manager/resident/host.d.ts +78 -0
- package/dist/manager/resident/host.d.ts.map +1 -0
- package/dist/manager/resident/host.js +252 -0
- package/dist/manager/resident/host.js.map +1 -0
- package/dist/manager/resident/initiative.d.ts +111 -0
- package/dist/manager/resident/initiative.d.ts.map +1 -0
- package/dist/manager/resident/initiative.js +121 -0
- package/dist/manager/resident/initiative.js.map +1 -0
- package/dist/manager/resident/learning.d.ts +483 -0
- package/dist/manager/resident/learning.d.ts.map +1 -0
- package/dist/manager/resident/learning.js +263 -0
- package/dist/manager/resident/learning.js.map +1 -0
- package/dist/manager/resident/loop.d.ts +31 -0
- package/dist/manager/resident/loop.d.ts.map +1 -0
- package/dist/manager/resident/loop.js +69 -0
- package/dist/manager/resident/loop.js.map +1 -0
- package/dist/manager/resident/outbox.d.ts +180 -0
- package/dist/manager/resident/outbox.d.ts.map +1 -0
- package/dist/manager/resident/outbox.js +214 -0
- package/dist/manager/resident/outbox.js.map +1 -0
- package/dist/manager/resident/proposal.d.ts +91 -0
- package/dist/manager/resident/proposal.d.ts.map +1 -0
- package/dist/manager/resident/proposal.js +75 -0
- package/dist/manager/resident/proposal.js.map +1 -0
- package/dist/manager/resident/store.d.ts +149 -0
- package/dist/manager/resident/store.d.ts.map +1 -0
- package/dist/manager/resident/store.js +175 -0
- package/dist/manager/resident/store.js.map +1 -0
- package/dist/prompt/contributions.d.ts +5 -2
- package/dist/prompt/contributions.d.ts.map +1 -1
- package/dist/prompt/contributions.js.map +1 -1
- package/dist/prompt/index.d.ts +2 -0
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +1 -0
- package/dist/prompt/index.js.map +1 -1
- package/dist/prompt/resident-step.d.ts +29 -0
- package/dist/prompt/resident-step.d.ts.map +1 -0
- package/dist/prompt/resident-step.js +74 -0
- package/dist/prompt/resident-step.js.map +1 -0
- package/dist/provider/capabilities.d.ts +1 -1
- package/dist/provider/capabilities.d.ts.map +1 -1
- package/dist/provider/capabilities.js +4 -1
- package/dist/provider/capabilities.js.map +1 -1
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +2 -0
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/idle-timeout.d.ts.map +1 -1
- package/dist/provider/idle-timeout.js +5 -0
- package/dist/provider/idle-timeout.js.map +1 -1
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +5 -0
- package/dist/provider/retry.js.map +1 -1
- package/dist/public-runtime.d.ts +10 -1
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +10 -1
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-types.d.ts +16 -2
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/tool/execute.d.ts +18 -0
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +43 -6
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/runtime/query/events.d.ts +6 -1
- package/dist/runtime/query/events.d.ts.map +1 -1
- package/dist/runtime/query/events.js +21 -12
- package/dist/runtime/query/events.js.map +1 -1
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +1 -1
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
- package/dist/runtime/query/prompt-cache.js +21 -42
- package/dist/runtime/query/prompt-cache.js.map +1 -1
- package/dist/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +2 -0
- package/dist/scheduler/local.js.map +1 -1
- package/dist/testing.d.ts +1 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +1 -0
- package/dist/testing.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +3 -0
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/types/agent/reactive.d.ts +4 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/agent/scheduler.d.ts +3 -0
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +3 -0
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/provider/interface.d.ts +2 -0
- package/dist/types/provider/interface.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +3 -0
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/sandbox/index.d.ts +36 -3
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/ReactiveAgent.ts +1 -0
- package/src/bridge/sse/mapper.ts +2 -0
- package/src/manager/agent/lifecycle.ts +4 -0
- package/src/manager/plan/lifecycle.ts +15 -13
- package/src/manager/resident/agenda.ts +853 -0
- package/src/manager/resident/delivery-window.ts +93 -0
- package/src/manager/resident/host.ts +356 -0
- package/src/manager/resident/initiative.ts +195 -0
- package/src/manager/resident/learning.ts +369 -0
- package/src/manager/resident/loop.ts +101 -0
- package/src/manager/resident/outbox.ts +307 -0
- package/src/manager/resident/proposal.ts +105 -0
- package/src/manager/resident/store.ts +229 -0
- package/src/prompt/contributions.ts +5 -2
- package/src/prompt/index.ts +2 -0
- package/src/prompt/resident-step.ts +96 -0
- package/src/provider/capabilities.ts +8 -3
- package/src/provider/fallback.ts +6 -0
- package/src/provider/idle-timeout.ts +6 -0
- package/src/provider/retry.ts +6 -0
- package/src/public-runtime.ts +14 -0
- package/src/public-types.ts +67 -0
- package/src/registry/index.ts +1 -1
- package/src/registry/tool/execute.ts +56 -9
- package/src/runtime/query/events.ts +24 -14
- package/src/runtime/query/index.ts +1 -2
- package/src/runtime/query/prompt-cache.ts +24 -47
- package/src/scheduler/local.ts +2 -0
- package/src/testing.ts +2 -0
- package/src/tools/coordinator/index.ts +3 -0
- package/src/types/agent/reactive.ts +2 -0
- package/src/types/agent/scheduler.ts +4 -0
- package/src/types/agent/task.ts +4 -0
- package/src/types/provider/interface.ts +3 -0
- package/src/types/run/events.ts +3 -0
- package/src/types/sandbox/index.ts +42 -4
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { reviewHarnessCandidate, } from '../../eval/harness-verification.js';
|
|
4
|
+
const label = z.string().trim().min(1).max(256);
|
|
5
|
+
const name = z.string().regex(/^[a-z0-9][a-z0-9_-]{0,63}$/);
|
|
6
|
+
const digest = z.string().regex(/^[a-f0-9]{64}$/);
|
|
7
|
+
export const residentLearningEvidenceSchema = z.object({
|
|
8
|
+
key: label,
|
|
9
|
+
source: label,
|
|
10
|
+
reason: z.string().trim().min(1).max(1_000),
|
|
11
|
+
});
|
|
12
|
+
const candidateSchema = z.object({
|
|
13
|
+
name,
|
|
14
|
+
description: z.string().trim().min(1).max(1_000),
|
|
15
|
+
body: z.string().trim().min(1).max(4_000),
|
|
16
|
+
});
|
|
17
|
+
const learnedSkillSchema = candidateSchema.extend({
|
|
18
|
+
hash: digest,
|
|
19
|
+
evidence: residentLearningEvidenceSchema,
|
|
20
|
+
verification: z.object({
|
|
21
|
+
baselineHash: z.union([digest, z.literal('none')]),
|
|
22
|
+
candidateHash: digest,
|
|
23
|
+
evidenceDigest: digest,
|
|
24
|
+
verificationTasks: z.number().int().min(5).max(64),
|
|
25
|
+
confirmationTasks: z.number().int().min(5).max(64),
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
export const residentLearningSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
revision: z.number().int().positive().safe(),
|
|
31
|
+
identity: z
|
|
32
|
+
.object({
|
|
33
|
+
text: z.string().trim().min(1).max(4_000),
|
|
34
|
+
evidence: residentLearningEvidenceSchema,
|
|
35
|
+
})
|
|
36
|
+
.optional(),
|
|
37
|
+
preferences: z
|
|
38
|
+
.array(z.object({
|
|
39
|
+
key: name,
|
|
40
|
+
value: z.string().trim().min(1).max(1_000),
|
|
41
|
+
evidence: residentLearningEvidenceSchema,
|
|
42
|
+
}))
|
|
43
|
+
.max(32),
|
|
44
|
+
skills: z.array(learnedSkillSchema).max(16),
|
|
45
|
+
lastChange: residentLearningEvidenceSchema,
|
|
46
|
+
})
|
|
47
|
+
.superRefine((state, context) => {
|
|
48
|
+
if (new Set(state.preferences.map((p) => p.key)).size !== state.preferences.length ||
|
|
49
|
+
new Set(state.skills.map((s) => s.name)).size !== state.skills.length ||
|
|
50
|
+
state.skills.some((skill) => skill.hash !== hashResidentSkill(skill) ||
|
|
51
|
+
skill.verification.candidateHash !== skill.hash))
|
|
52
|
+
context.addIssue({
|
|
53
|
+
code: z.ZodIssueCode.custom,
|
|
54
|
+
message: 'Invalid resident learning identity or content digest.',
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
/** Internal immutable snapshot used by storage and admitted context. */
|
|
58
|
+
export function freezeResidentLearning(input) {
|
|
59
|
+
const state = residentLearningSchema.parse(input);
|
|
60
|
+
return Object.freeze({
|
|
61
|
+
...state,
|
|
62
|
+
...(state.identity
|
|
63
|
+
? {
|
|
64
|
+
identity: Object.freeze({
|
|
65
|
+
...state.identity,
|
|
66
|
+
evidence: Object.freeze(state.identity.evidence),
|
|
67
|
+
}),
|
|
68
|
+
}
|
|
69
|
+
: {}),
|
|
70
|
+
preferences: Object.freeze(state.preferences.map((p) => Object.freeze({ ...p, evidence: Object.freeze(p.evidence) }))),
|
|
71
|
+
skills: Object.freeze(state.skills.map((skill) => Object.freeze({
|
|
72
|
+
...skill,
|
|
73
|
+
evidence: Object.freeze(skill.evidence),
|
|
74
|
+
verification: Object.freeze(skill.verification),
|
|
75
|
+
}))),
|
|
76
|
+
lastChange: Object.freeze(state.lastChange),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function evidenceFor(current, input) {
|
|
80
|
+
const evidence = residentLearningEvidenceSchema.parse(input);
|
|
81
|
+
const used = [
|
|
82
|
+
current?.lastChange,
|
|
83
|
+
current?.identity?.evidence,
|
|
84
|
+
...(current?.preferences.map((p) => p.evidence) ?? []),
|
|
85
|
+
...(current?.skills.map((s) => s.evidence) ?? []),
|
|
86
|
+
];
|
|
87
|
+
if (used.some((old) => old?.key === evidence.key))
|
|
88
|
+
throw new Error('A learning change requires a fresh evidence key.');
|
|
89
|
+
return evidence;
|
|
90
|
+
}
|
|
91
|
+
function base(current, evidence) {
|
|
92
|
+
const checked = current ? freezeResidentLearning(current) : undefined;
|
|
93
|
+
return {
|
|
94
|
+
...checked,
|
|
95
|
+
revision: (checked?.revision ?? 0) + 1,
|
|
96
|
+
preferences: checked?.preferences ?? [],
|
|
97
|
+
skills: checked?.skills ?? [],
|
|
98
|
+
lastChange: evidence,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Internal pure profile transition; storage owns exact agenda CAS and idle admission. */
|
|
102
|
+
export function reviseResidentProfile(current, input) {
|
|
103
|
+
const checked = z
|
|
104
|
+
.object({
|
|
105
|
+
identity: z.string().trim().min(1).max(4_000).optional(),
|
|
106
|
+
preferences: z
|
|
107
|
+
.array(z.object({
|
|
108
|
+
key: name,
|
|
109
|
+
value: z.string().trim().min(1).max(1_000),
|
|
110
|
+
supersedes: label.nullable(),
|
|
111
|
+
}))
|
|
112
|
+
.max(32)
|
|
113
|
+
.optional(),
|
|
114
|
+
evidence: residentLearningEvidenceSchema,
|
|
115
|
+
})
|
|
116
|
+
.parse(input);
|
|
117
|
+
if (checked.identity === undefined && !checked.preferences?.length)
|
|
118
|
+
throw new Error('A profile change must change identity or preferences.');
|
|
119
|
+
if (new Set(checked.preferences?.map((p) => p.key)).size !== checked.preferences?.length &&
|
|
120
|
+
checked.preferences !== undefined)
|
|
121
|
+
throw new Error('Duplicate preference corrections are not allowed.');
|
|
122
|
+
const evidence = evidenceFor(current, checked.evidence);
|
|
123
|
+
const next = base(current, evidence);
|
|
124
|
+
const preferences = [...next.preferences];
|
|
125
|
+
for (const change of checked.preferences ?? []) {
|
|
126
|
+
const index = preferences.findIndex((p) => p.key === change.key);
|
|
127
|
+
const previous = index >= 0 ? preferences[index] : undefined;
|
|
128
|
+
if (change.supersedes !== (previous?.evidence.key ?? null))
|
|
129
|
+
throw new Error('Preference correction does not supersede its current evidence.');
|
|
130
|
+
const updated = { key: change.key, value: change.value, evidence };
|
|
131
|
+
if (index < 0)
|
|
132
|
+
preferences.push(updated);
|
|
133
|
+
else
|
|
134
|
+
preferences[index] = updated;
|
|
135
|
+
}
|
|
136
|
+
return freezeResidentLearning({
|
|
137
|
+
...next,
|
|
138
|
+
preferences,
|
|
139
|
+
...(checked.identity !== undefined ? { identity: { text: checked.identity, evidence } } : {}),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/** @experimental Bind evaluation to the exact normalized name, description and body. */
|
|
143
|
+
export function hashResidentSkill(input) {
|
|
144
|
+
const candidate = candidateSchema.parse(input);
|
|
145
|
+
return createHash('sha256')
|
|
146
|
+
.update(JSON.stringify([candidate.name, candidate.description, candidate.body]))
|
|
147
|
+
.digest('hex');
|
|
148
|
+
}
|
|
149
|
+
/** Internal pure activation; reuse the kernel's conservative two-round verification gate. */
|
|
150
|
+
export function promoteResidentSkill(current, input, evaluation, inputEvidence) {
|
|
151
|
+
const candidate = candidateSchema.parse(input);
|
|
152
|
+
const hash = hashResidentSkill(candidate);
|
|
153
|
+
const baselineHash = current?.skills.find((s) => s.name === candidate.name)?.hash ?? 'none';
|
|
154
|
+
const evidence = evidenceFor(current, inputEvidence);
|
|
155
|
+
for (const batch of [evaluation.verification, evaluation.confirmation]) {
|
|
156
|
+
if (!batch)
|
|
157
|
+
continue;
|
|
158
|
+
if (batch.baselineRevision !== baselineHash || batch.candidateRevision !== hash)
|
|
159
|
+
throw new Error('Skill evaluation does not match the active baseline and candidate digests.');
|
|
160
|
+
if (batch.baseline.length > 128 ||
|
|
161
|
+
batch.candidate.length > 128 ||
|
|
162
|
+
batch.attributions.length > 128)
|
|
163
|
+
throw new Error('Resident skill evaluation is bounded to 64 tasks per round.');
|
|
164
|
+
// Recorded evidence must consistently identify success and complete measurements.
|
|
165
|
+
for (const trial of [...batch.baseline, ...batch.candidate]) {
|
|
166
|
+
if (trial.result.passed !== (trial.result.status === 'passed') ||
|
|
167
|
+
(trial.result.status === 'passed' && trial.result.failedGates?.length))
|
|
168
|
+
throw new Error('Inconsistent recorded skill evaluation outcome.');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const review = reviewHarnessCandidate(evaluation.verification, evaluation.confirmation);
|
|
172
|
+
if (review.decision !== 'accept')
|
|
173
|
+
throw new Error(`Resident skill promotion ${review.decision}: ${review.reason}`);
|
|
174
|
+
const skill = {
|
|
175
|
+
...candidate,
|
|
176
|
+
hash,
|
|
177
|
+
evidence,
|
|
178
|
+
verification: {
|
|
179
|
+
baselineHash,
|
|
180
|
+
candidateHash: hash,
|
|
181
|
+
evidenceDigest: createHash('sha256').update(JSON.stringify(evaluation)).digest('hex'),
|
|
182
|
+
verificationTasks: review.verification.tasks.length,
|
|
183
|
+
confirmationTasks: review.confirmation?.tasks.length ?? 0,
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
const next = base(current, evidence);
|
|
187
|
+
return freezeResidentLearning({
|
|
188
|
+
...next,
|
|
189
|
+
skills: [...next.skills.filter((s) => s.name !== candidate.name), skill],
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/** Internal rollback appends a new learning version while preserving current profile values. */
|
|
193
|
+
export function restoreResidentSkill(current, historical, skillName, inputEvidence) {
|
|
194
|
+
name.parse(skillName);
|
|
195
|
+
if (!current?.skills.some((s) => s.name === skillName))
|
|
196
|
+
throw new Error('No active resident skill to roll back.');
|
|
197
|
+
const next = base(current, evidenceFor(current, inputEvidence));
|
|
198
|
+
const previous = historical
|
|
199
|
+
? freezeResidentLearning(historical).skills.find((s) => s.name === skillName)
|
|
200
|
+
: undefined;
|
|
201
|
+
return freezeResidentLearning({
|
|
202
|
+
...next,
|
|
203
|
+
skills: [...next.skills.filter((s) => s.name !== skillName), ...(previous ? [previous] : [])],
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/** @experimental Bounded context data; never registers tools, loads files or executes a skill. */
|
|
207
|
+
export function projectResidentLearning(current, options) {
|
|
208
|
+
if (!Number.isSafeInteger(options.maxChars) || options.maxChars < 0 || options.maxChars > 64_000)
|
|
209
|
+
throw new TypeError('Resident learning context requires maxChars between 0 and 64000.');
|
|
210
|
+
const selected = z.array(name).max(16).parse(options.skillNames);
|
|
211
|
+
if (new Set(selected).size !== selected.length)
|
|
212
|
+
throw new Error('Duplicate selected skill names.');
|
|
213
|
+
if (!current)
|
|
214
|
+
return Object.freeze({
|
|
215
|
+
text: '',
|
|
216
|
+
revision: null,
|
|
217
|
+
includedSkills: Object.freeze([]),
|
|
218
|
+
omitted: selected.length,
|
|
219
|
+
});
|
|
220
|
+
const state = freezeResidentLearning(current);
|
|
221
|
+
const pieces = [];
|
|
222
|
+
const includedSkills = [];
|
|
223
|
+
let omitted = 0;
|
|
224
|
+
let length = 0;
|
|
225
|
+
const add = (value) => {
|
|
226
|
+
const part = JSON.stringify(value);
|
|
227
|
+
const size = part.length + (pieces.length ? 1 : 0);
|
|
228
|
+
if (length + size > options.maxChars) {
|
|
229
|
+
omitted++;
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
pieces.push(part);
|
|
233
|
+
length += size;
|
|
234
|
+
return true;
|
|
235
|
+
};
|
|
236
|
+
if (state.identity)
|
|
237
|
+
add({ kind: 'self-description', ...state.identity });
|
|
238
|
+
for (const preference of state.preferences)
|
|
239
|
+
add({ kind: 'preference', ...preference });
|
|
240
|
+
for (const skillName of selected) {
|
|
241
|
+
const skill = state.skills.find((s) => s.name === skillName);
|
|
242
|
+
if (!skill) {
|
|
243
|
+
omitted++;
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
if (add({
|
|
247
|
+
kind: 'evaluated-guidance',
|
|
248
|
+
name: skill.name,
|
|
249
|
+
description: skill.description,
|
|
250
|
+
body: skill.body,
|
|
251
|
+
hash: skill.hash,
|
|
252
|
+
evidence: skill.evidence,
|
|
253
|
+
}))
|
|
254
|
+
includedSkills.push(skill.name);
|
|
255
|
+
}
|
|
256
|
+
return Object.freeze({
|
|
257
|
+
text: pieces.join('\n'),
|
|
258
|
+
revision: state.revision,
|
|
259
|
+
includedSkills: Object.freeze(includedSkills),
|
|
260
|
+
omitted,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=learning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning.js","sourceRoot":"","sources":["../../../src/manager/resident/learning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ResidentDecision, type ResidentExecutionStore, type ResidentState } from './store.js';
|
|
2
|
+
/** @experimental Developer-owned step; bind providers, tools and budgets in the host. */
|
|
3
|
+
export type ResidentStep = (state: ResidentState, signal: AbortSignal) => Promise<ResidentDecision>;
|
|
4
|
+
/** @experimental No model is invoked for an idle, terminal or unresolved resident. */
|
|
5
|
+
export type ResidentStepResult = {
|
|
6
|
+
status: 'settled';
|
|
7
|
+
state: ResidentState;
|
|
8
|
+
} | {
|
|
9
|
+
status: 'idle';
|
|
10
|
+
reason: 'not-due' | 'terminal' | 'unresolved' | 'contended';
|
|
11
|
+
state: ResidentState;
|
|
12
|
+
};
|
|
13
|
+
/** @experimental A failed/aborted callback leaves its durable claim unresolved. */
|
|
14
|
+
export declare function stepResident(store: ResidentExecutionStore, step: ResidentStep, signal: AbortSignal, now?: () => number): Promise<ResidentStepResult>;
|
|
15
|
+
/** @experimental Bounded local driver; not a daemon, process recovery service or notification transport. */
|
|
16
|
+
export interface ResidentLoopOptions {
|
|
17
|
+
readonly store: ResidentExecutionStore;
|
|
18
|
+
readonly step: ResidentStep;
|
|
19
|
+
readonly signal: AbortSignal;
|
|
20
|
+
/** Required finite admission cap for this invocation, independent of provider token limits. */
|
|
21
|
+
readonly maxSteps: number;
|
|
22
|
+
/** Maximum single idle wait, default 60 seconds. Longer waits return control to the host. */
|
|
23
|
+
readonly maxIdleMs?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @experimental Continue a pursuit without a new user message. Null wake times
|
|
27
|
+
* and terminal states stop immediately; cancellation also interrupts idle waits.
|
|
28
|
+
* An abort cannot undo callback effects or forcibly stop a callback ignoring its signal.
|
|
29
|
+
*/
|
|
30
|
+
export declare function runResident(options: ResidentLoopOptions): Promise<ResidentStepResult>;
|
|
31
|
+
//# sourceMappingURL=loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/manager/resident/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,MAAM,YAAY,CAAA;AAEnB,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAEnG,sFAAsF;AACtF,MAAM,MAAM,kBAAkB,GAC3B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAC3C;IACA,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAA;IAC3D,KAAK,EAAE,aAAa,CAAA;CACnB,CAAA;AAEJ,mFAAmF;AACnF,wBAAsB,YAAY,CACjC,KAAK,EAAE,sBAAsB,EAC7B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,WAAW,EACnB,GAAG,GAAE,MAAM,MAAiB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;AAED,4GAA4G;AAC5G,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6B3F"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { setTimeout as sleep } from 'node:timers/promises';
|
|
2
|
+
import { ResidentConflictError, } from './store.js';
|
|
3
|
+
/** @experimental A failed/aborted callback leaves its durable claim unresolved. */
|
|
4
|
+
export async function stepResident(store, step, signal, now = Date.now) {
|
|
5
|
+
signal.throwIfAborted();
|
|
6
|
+
const state = await store.read();
|
|
7
|
+
signal.throwIfAborted();
|
|
8
|
+
if (!state)
|
|
9
|
+
throw new Error('Create the resident before running it.');
|
|
10
|
+
if (state.phase === 'running')
|
|
11
|
+
return { status: 'idle', reason: 'unresolved', state };
|
|
12
|
+
if (state.phase !== 'waiting')
|
|
13
|
+
return { status: 'idle', reason: 'terminal', state };
|
|
14
|
+
if (state.wakeAt === null || state.wakeAt > now())
|
|
15
|
+
return { status: 'idle', reason: 'not-due', state };
|
|
16
|
+
let claim;
|
|
17
|
+
try {
|
|
18
|
+
claim = await store.claim(state, now());
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (!(error instanceof ResidentConflictError))
|
|
22
|
+
throw error;
|
|
23
|
+
return {
|
|
24
|
+
status: 'idle',
|
|
25
|
+
reason: 'contended',
|
|
26
|
+
state: (await store.read()) ?? state,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
signal.throwIfAborted();
|
|
30
|
+
const decision = await step(claim, signal);
|
|
31
|
+
signal.throwIfAborted();
|
|
32
|
+
return {
|
|
33
|
+
status: 'settled',
|
|
34
|
+
state: await store.settle(claim, decision, now()),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @experimental Continue a pursuit without a new user message. Null wake times
|
|
39
|
+
* and terminal states stop immediately; cancellation also interrupts idle waits.
|
|
40
|
+
* An abort cannot undo callback effects or forcibly stop a callback ignoring its signal.
|
|
41
|
+
*/
|
|
42
|
+
export async function runResident(options) {
|
|
43
|
+
const maxIdleMs = options.maxIdleMs ?? 60_000;
|
|
44
|
+
if (!Number.isSafeInteger(options.maxSteps) ||
|
|
45
|
+
options.maxSteps < 1 ||
|
|
46
|
+
!Number.isSafeInteger(maxIdleMs) ||
|
|
47
|
+
maxIdleMs < 0 ||
|
|
48
|
+
maxIdleMs > 2_147_483_647) {
|
|
49
|
+
throw new TypeError('Resident loop requires positive finite maxSteps and bounded nonnegative maxIdleMs.');
|
|
50
|
+
}
|
|
51
|
+
let admitted = 0;
|
|
52
|
+
while (true) {
|
|
53
|
+
const result = await stepResident(options.store, options.step, options.signal);
|
|
54
|
+
if (result.status === 'settled')
|
|
55
|
+
admitted++;
|
|
56
|
+
if (admitted >= options.maxSteps)
|
|
57
|
+
return result;
|
|
58
|
+
const { state } = result;
|
|
59
|
+
if (state.phase !== 'waiting' ||
|
|
60
|
+
state.wakeAt === null ||
|
|
61
|
+
(result.status === 'idle' && result.reason !== 'not-due'))
|
|
62
|
+
return result;
|
|
63
|
+
const delay = Math.max(0, state.wakeAt - Date.now());
|
|
64
|
+
if (delay > maxIdleMs)
|
|
65
|
+
return result;
|
|
66
|
+
await sleep(Math.max(1, delay), undefined, { signal: options.signal });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/manager/resident/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ResidentAgendaState } from './agenda.js';
|
|
3
|
+
export declare const residentMessageInputSchema: z.ZodObject<{
|
|
4
|
+
id: z.ZodString;
|
|
5
|
+
pursuitId: z.ZodString;
|
|
6
|
+
destination: z.ZodString;
|
|
7
|
+
body: z.ZodEffects<z.ZodString, string, string>;
|
|
8
|
+
notBefore: z.ZodNumber;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
id: string;
|
|
11
|
+
body: string;
|
|
12
|
+
pursuitId: string;
|
|
13
|
+
destination: string;
|
|
14
|
+
notBefore: number;
|
|
15
|
+
}, {
|
|
16
|
+
id: string;
|
|
17
|
+
body: string;
|
|
18
|
+
pursuitId: string;
|
|
19
|
+
destination: string;
|
|
20
|
+
notBefore: number;
|
|
21
|
+
}>;
|
|
22
|
+
/** @experimental Host-approved content and an opaque destination route, never credentials. */
|
|
23
|
+
export type ResidentMessageInput = Readonly<z.infer<typeof residentMessageInputSchema>>;
|
|
24
|
+
export declare const residentOutboxMessageSchema: z.ZodEffects<z.ZodObject<{
|
|
25
|
+
id: z.ZodString;
|
|
26
|
+
pursuitId: z.ZodString;
|
|
27
|
+
destination: z.ZodString;
|
|
28
|
+
body: z.ZodEffects<z.ZodString, string, string>;
|
|
29
|
+
notBefore: z.ZodNumber;
|
|
30
|
+
} & {
|
|
31
|
+
tenantId: z.ZodString;
|
|
32
|
+
agentKey: z.ZodString;
|
|
33
|
+
sourceClaimId: z.ZodNullable<z.ZodString>;
|
|
34
|
+
revision: z.ZodNumber;
|
|
35
|
+
attempts: z.ZodNumber;
|
|
36
|
+
phase: z.ZodEnum<["pending", "sending", "acknowledged", "cancelled"]>;
|
|
37
|
+
claimId: z.ZodNullable<z.ZodString>;
|
|
38
|
+
nextAttemptAt: z.ZodNullable<z.ZodNumber>;
|
|
39
|
+
receiptId: z.ZodNullable<z.ZodString>;
|
|
40
|
+
acknowledgedAt: z.ZodNullable<z.ZodNumber>;
|
|
41
|
+
lastReason: z.ZodNullable<z.ZodString>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
id: string;
|
|
44
|
+
revision: number;
|
|
45
|
+
attempts: number;
|
|
46
|
+
tenantId: string;
|
|
47
|
+
body: string;
|
|
48
|
+
phase: "pending" | "cancelled" | "sending" | "acknowledged";
|
|
49
|
+
agentKey: string;
|
|
50
|
+
pursuitId: string;
|
|
51
|
+
claimId: string | null;
|
|
52
|
+
destination: string;
|
|
53
|
+
notBefore: number;
|
|
54
|
+
sourceClaimId: string | null;
|
|
55
|
+
nextAttemptAt: number | null;
|
|
56
|
+
receiptId: string | null;
|
|
57
|
+
acknowledgedAt: number | null;
|
|
58
|
+
lastReason: string | null;
|
|
59
|
+
}, {
|
|
60
|
+
id: string;
|
|
61
|
+
revision: number;
|
|
62
|
+
attempts: number;
|
|
63
|
+
tenantId: string;
|
|
64
|
+
body: string;
|
|
65
|
+
phase: "pending" | "cancelled" | "sending" | "acknowledged";
|
|
66
|
+
agentKey: string;
|
|
67
|
+
pursuitId: string;
|
|
68
|
+
claimId: string | null;
|
|
69
|
+
destination: string;
|
|
70
|
+
notBefore: number;
|
|
71
|
+
sourceClaimId: string | null;
|
|
72
|
+
nextAttemptAt: number | null;
|
|
73
|
+
receiptId: string | null;
|
|
74
|
+
acknowledgedAt: number | null;
|
|
75
|
+
lastReason: string | null;
|
|
76
|
+
}>, {
|
|
77
|
+
id: string;
|
|
78
|
+
revision: number;
|
|
79
|
+
attempts: number;
|
|
80
|
+
tenantId: string;
|
|
81
|
+
body: string;
|
|
82
|
+
phase: "pending" | "cancelled" | "sending" | "acknowledged";
|
|
83
|
+
agentKey: string;
|
|
84
|
+
pursuitId: string;
|
|
85
|
+
claimId: string | null;
|
|
86
|
+
destination: string;
|
|
87
|
+
notBefore: number;
|
|
88
|
+
sourceClaimId: string | null;
|
|
89
|
+
nextAttemptAt: number | null;
|
|
90
|
+
receiptId: string | null;
|
|
91
|
+
acknowledgedAt: number | null;
|
|
92
|
+
lastReason: string | null;
|
|
93
|
+
}, {
|
|
94
|
+
id: string;
|
|
95
|
+
revision: number;
|
|
96
|
+
attempts: number;
|
|
97
|
+
tenantId: string;
|
|
98
|
+
body: string;
|
|
99
|
+
phase: "pending" | "cancelled" | "sending" | "acknowledged";
|
|
100
|
+
agentKey: string;
|
|
101
|
+
pursuitId: string;
|
|
102
|
+
claimId: string | null;
|
|
103
|
+
destination: string;
|
|
104
|
+
notBefore: number;
|
|
105
|
+
sourceClaimId: string | null;
|
|
106
|
+
nextAttemptAt: number | null;
|
|
107
|
+
receiptId: string | null;
|
|
108
|
+
acknowledgedAt: number | null;
|
|
109
|
+
lastReason: string | null;
|
|
110
|
+
}>;
|
|
111
|
+
/** @experimental Acknowledgment proves transport acceptance, not human reading. */
|
|
112
|
+
export type ResidentOutboxMessage = Readonly<z.infer<typeof residentOutboxMessageSchema>>;
|
|
113
|
+
export declare const residentDeliveryOutcomeSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
|
|
114
|
+
kind: z.ZodLiteral<"acknowledged">;
|
|
115
|
+
receiptId: z.ZodString;
|
|
116
|
+
}, "strip", z.ZodTypeAny, {
|
|
117
|
+
kind: "acknowledged";
|
|
118
|
+
receiptId: string;
|
|
119
|
+
}, {
|
|
120
|
+
kind: "acknowledged";
|
|
121
|
+
receiptId: string;
|
|
122
|
+
}>, z.ZodObject<{
|
|
123
|
+
kind: z.ZodLiteral<"not-accepted">;
|
|
124
|
+
retryAt: z.ZodNullable<z.ZodNumber>;
|
|
125
|
+
reason: z.ZodString;
|
|
126
|
+
}, "strip", z.ZodTypeAny, {
|
|
127
|
+
kind: "not-accepted";
|
|
128
|
+
reason: string;
|
|
129
|
+
retryAt: number | null;
|
|
130
|
+
}, {
|
|
131
|
+
kind: "not-accepted";
|
|
132
|
+
reason: string;
|
|
133
|
+
retryAt: number | null;
|
|
134
|
+
}>]>;
|
|
135
|
+
/** @experimental Retry only with evidence of non-acceptance; null retryAt ends delivery. */
|
|
136
|
+
export type ResidentDeliveryOutcome = Readonly<z.infer<typeof residentDeliveryOutcomeSchema>>;
|
|
137
|
+
/** @experimental Atomic admission and exact-claim settlement, without automatic claim expiry. */
|
|
138
|
+
export interface ResidentOutboxStore {
|
|
139
|
+
read(): Promise<ResidentAgendaState | null>;
|
|
140
|
+
claimMessage(expected: ResidentAgendaState, id: string, now: number): Promise<ResidentOutboxMessage>;
|
|
141
|
+
settleMessage(expected: ResidentOutboxMessage, outcome: ResidentDeliveryOutcome, now: number): Promise<ResidentOutboxMessage>;
|
|
142
|
+
}
|
|
143
|
+
/** @experimental A synchronous host policy, evaluated before claiming and again before sending. */
|
|
144
|
+
export type ResidentDeliveryGate = (message: ResidentOutboxMessage, now: number) => {
|
|
145
|
+
readonly allow: true;
|
|
146
|
+
} | {
|
|
147
|
+
readonly allow: false;
|
|
148
|
+
readonly nextCheckAt: number | null;
|
|
149
|
+
readonly reason: string;
|
|
150
|
+
};
|
|
151
|
+
/** @experimental Bind an authorized route; forward message.id as the stable idempotency key. */
|
|
152
|
+
export type ResidentMessageTransport = (message: ResidentOutboxMessage, signal: AbortSignal) => Promise<ResidentDeliveryOutcome>;
|
|
153
|
+
/** @experimental One dispatch admission, with no model invocation, polling or implicit retries. */
|
|
154
|
+
export interface ResidentDeliveryOptions {
|
|
155
|
+
readonly signal: AbortSignal;
|
|
156
|
+
readonly gate: ResidentDeliveryGate;
|
|
157
|
+
readonly now?: () => number;
|
|
158
|
+
}
|
|
159
|
+
/** @experimental An idle result never asserts a message reached its destination. */
|
|
160
|
+
export type ResidentDeliveryResult = {
|
|
161
|
+
readonly status: 'settled';
|
|
162
|
+
readonly message: ResidentOutboxMessage;
|
|
163
|
+
} | {
|
|
164
|
+
readonly status: 'idle';
|
|
165
|
+
readonly reason: 'paused' | 'unresolved' | 'empty' | 'not-due' | 'window' | 'contended';
|
|
166
|
+
readonly nextCheckAt: number | null;
|
|
167
|
+
};
|
|
168
|
+
/** Internal pure enqueue used in the same revision transaction as pursuit settlement. */
|
|
169
|
+
export declare function appendResidentMessage(state: ResidentAgendaState, input: ResidentMessageInput, sourceClaimId?: string | null): readonly ResidentOutboxMessage[];
|
|
170
|
+
/** Internal exact-message transition; agenda storage owns exclusive admission. */
|
|
171
|
+
export declare function claimResidentOutboxMessage(message: ResidentOutboxMessage, now: number): ResidentOutboxMessage;
|
|
172
|
+
/** Internal settlement; unknown failures deliberately have no transition. */
|
|
173
|
+
export declare function settleResidentOutboxMessage(message: ResidentOutboxMessage, outcome: ResidentDeliveryOutcome, now: number): ResidentOutboxMessage;
|
|
174
|
+
/**
|
|
175
|
+
* @experimental Persist one send claim before calling a host-owned transport.
|
|
176
|
+
* Throws, malformed outcomes and cancellation keep the claim unresolved. Stop
|
|
177
|
+
* old executors and inspect effects before explicit settleMessage reconciliation.
|
|
178
|
+
*/
|
|
179
|
+
export declare function deliverResidentMessage(store: ResidentOutboxStore, transport: ResidentMessageTransport, options: ResidentDeliveryOptions): Promise<ResidentDeliveryResult>;
|
|
180
|
+
//# sourceMappingURL=outbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../../src/manager/resident/outbox.ts"],"names":[],"mappings":"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"}
|