@davidjinguoxu/agentcore 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -127
- package/dist/config/agentcore-constants.d.ts +21 -0
- package/dist/config/agentcore-constants.d.ts.map +1 -0
- package/dist/config/agentcore-constants.js +68 -0
- package/dist/config/agentcore-constants.js.map +1 -0
- package/dist/domain/bronze/questions.d.ts +3 -0
- package/dist/domain/bronze/questions.d.ts.map +1 -0
- package/dist/domain/bronze/questions.js +60 -0
- package/dist/domain/bronze/questions.js.map +1 -0
- package/dist/domain/bronze/run-manager.d.ts +14 -0
- package/dist/domain/bronze/run-manager.d.ts.map +1 -0
- package/dist/domain/bronze/run-manager.js +25 -0
- package/dist/domain/bronze/run-manager.js.map +1 -0
- package/dist/domain/bronze/task-event-index.d.ts +31 -0
- package/dist/domain/bronze/task-event-index.d.ts.map +1 -0
- package/dist/domain/bronze/task-event-index.js +117 -0
- package/dist/domain/bronze/task-event-index.js.map +1 -0
- package/dist/domain/bronze/tasks.d.ts +3 -0
- package/dist/domain/bronze/tasks.d.ts.map +1 -0
- package/dist/domain/bronze/tasks.js +112 -0
- package/dist/domain/bronze/tasks.js.map +1 -0
- package/dist/domain/context/warm-start-builders.d.ts +18 -0
- package/dist/domain/context/warm-start-builders.d.ts.map +1 -0
- package/dist/domain/context/warm-start-builders.js +157 -0
- package/dist/domain/context/warm-start-builders.js.map +1 -0
- package/dist/domain/context/warm-start-extractors.d.ts +37 -0
- package/dist/domain/context/warm-start-extractors.d.ts.map +1 -0
- package/dist/domain/context/warm-start-extractors.js +372 -0
- package/dist/domain/context/warm-start-extractors.js.map +1 -0
- package/dist/domain/context/warm-start.d.ts +17 -0
- package/dist/domain/context/warm-start.d.ts.map +1 -0
- package/dist/domain/context/warm-start.js +225 -0
- package/dist/domain/context/warm-start.js.map +1 -0
- package/dist/domain/gold/gold-store.d.ts +11 -0
- package/dist/domain/gold/gold-store.d.ts.map +1 -0
- package/dist/domain/gold/gold-store.js +210 -0
- package/dist/domain/gold/gold-store.js.map +1 -0
- package/dist/domain/run-manager.js +0 -0
- package/dist/domain/virtual-office/inbox.d.ts +14 -0
- package/dist/domain/virtual-office/inbox.d.ts.map +1 -0
- package/dist/domain/virtual-office/inbox.js +138 -0
- package/dist/domain/virtual-office/inbox.js.map +1 -0
- package/dist/domain/virtual-office/office-status.d.ts +31 -0
- package/dist/domain/virtual-office/office-status.d.ts.map +1 -0
- package/dist/domain/virtual-office/office-status.js +138 -0
- package/dist/domain/virtual-office/office-status.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/models/bronze.d.ts +39 -0
- package/dist/models/bronze.d.ts.map +1 -0
- package/dist/models/bronze.js +4 -0
- package/dist/models/bronze.js.map +1 -0
- package/dist/models/gold.d.ts +43 -0
- package/dist/models/gold.d.ts.map +1 -0
- package/dist/models/gold.js +4 -0
- package/dist/models/gold.js.map +1 -0
- package/dist/models/index.d.ts +6 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +8 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/questions.d.ts +24 -0
- package/dist/models/questions.d.ts.map +1 -0
- package/dist/models/questions.js +3 -0
- package/dist/models/questions.js.map +1 -0
- package/dist/models/silver.d.ts +26 -0
- package/dist/models/silver.d.ts.map +1 -0
- package/dist/models/silver.js +4 -0
- package/dist/models/silver.js.map +1 -0
- package/dist/models/tasks.d.ts +56 -0
- package/dist/models/tasks.d.ts.map +1 -0
- package/dist/models/tasks.js +3 -0
- package/dist/models/tasks.js.map +1 -0
- package/dist/search/azure-search-client.d.ts.map +0 -0
- package/dist/search/deep-search.js +0 -0
- package/dist/search/embeddable.d.ts +19 -0
- package/dist/search/embeddable.d.ts.map +1 -0
- package/dist/search/embeddable.js +106 -0
- package/dist/search/embeddable.js.map +1 -0
- package/dist/search/search.d.ts +1 -1
- package/dist/search/search.d.ts.map +1 -1
- package/dist/server/mcp-slim-ack.d.ts +12 -0
- package/dist/server/mcp-slim-ack.d.ts.map +1 -0
- package/dist/server/mcp-slim-ack.js +16 -0
- package/dist/server/mcp-slim-ack.js.map +1 -0
- package/dist/server/server.d.ts +3 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +42 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/tools.d.ts +3 -0
- package/dist/server/tools.d.ts.map +1 -0
- package/dist/server/tools.js +413 -0
- package/dist/server/tools.js.map +1 -0
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -1
- package/dist/skills/index.js +1 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/insights.d.ts +3 -0
- package/dist/skills/insights.d.ts.map +1 -0
- package/dist/skills/insights.js +78 -0
- package/dist/skills/insights.js.map +1 -0
- package/dist/skills/knowledge.js +1 -1
- package/dist/skills/knowledge.js.map +1 -1
- package/dist/skills/task-workflow.js +2 -2
- package/dist/skills/task-workflow.js.map +1 -1
- package/dist/storage/backend.d.ts +1 -1
- package/dist/storage/backend.d.ts.map +1 -1
- package/dist/storage/cosmos-client.js +1 -1
- package/dist/storage/cosmos-client.js.map +1 -1
- package/dist/storage/lancedb-backend.d.ts +1 -1
- package/dist/storage/lancedb-backend.d.ts.map +1 -1
- package/dist/storage/schema-init.d.ts +12 -0
- package/dist/storage/schema-init.d.ts.map +1 -0
- package/dist/storage/schema-init.js +199 -0
- package/dist/storage/schema-init.js.map +1 -0
- package/dist/storage/store.d.ts +1 -1
- package/dist/storage/store.d.ts.map +1 -1
- package/dist/storage/store.js +1 -1
- package/dist/storage/store.js.map +1 -1
- package/dist/storage/task-compaction.d.ts +1 -1
- package/dist/storage/task-compaction.d.ts.map +1 -1
- package/dist/storage/task-context-snapshot.d.ts +1 -1
- package/dist/storage/task-context-snapshot.d.ts.map +1 -1
- package/dist/storage/trigger-engine.d.ts +1 -1
- package/dist/storage/trigger-engine.d.ts.map +1 -1
- package/dist/storage/trigger-engine.js +0 -0
- package/dist/tools/context.d.ts +3 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +45 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/gold.d.ts +3 -0
- package/dist/tools/gold.d.ts.map +1 -0
- package/dist/tools/gold.js +136 -0
- package/dist/tools/gold.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory.d.ts +3 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +187 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/tasks.d.ts +3 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +86 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/transport/client.js +1 -1
- package/dist/transport/client.js.map +1 -1
- package/dist/transport/http-server.d.ts.map +1 -1
- package/dist/transport/http-server.js +12 -13
- package/dist/transport/http-server.js.map +1 -1
- package/dist/types.d.ts +1 -184
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/mcp-slim-ack.d.ts +12 -0
- package/dist/utils/mcp-slim-ack.d.ts.map +1 -0
- package/dist/utils/mcp-slim-ack.js +16 -0
- package/dist/utils/mcp-slim-ack.js.map +1 -0
- package/package.json +3 -3
- package/scripts/run-server.mjs +1 -1
- package/scripts/stdio-only.mjs +1 -1
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
// warm-start-extractors.ts — Data extraction helpers for warm-start assembly.
|
|
2
|
+
// All I/O lives here: reads Bronze + Gold, returns typed data for builders.
|
|
3
|
+
import { readAllRecords, readEventsByTask } from "../../storage/store.js";
|
|
4
|
+
import { queryEntities } from "../gold/gold-store.js";
|
|
5
|
+
// ─── Layer builders ───────────────────────────────────────────────────────────
|
|
6
|
+
export async function extractAgentJournal(agent) {
|
|
7
|
+
try {
|
|
8
|
+
const result = await queryEntities({ entity_type: "agent_journal" });
|
|
9
|
+
const match = result.entities.find((e) => e.entity_id?.toLowerCase() === agent.toLowerCase());
|
|
10
|
+
if (!match?.data || typeof match.data !== "object")
|
|
11
|
+
return null;
|
|
12
|
+
return match.data;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function extractTaskCheckpoint(task_id) {
|
|
19
|
+
try {
|
|
20
|
+
const { records } = await readAllRecords({ type: "task_checkpoint" });
|
|
21
|
+
const checkpoints = records
|
|
22
|
+
.filter((r) => {
|
|
23
|
+
const ctx = r.context;
|
|
24
|
+
return ctx?.task_id === task_id;
|
|
25
|
+
})
|
|
26
|
+
.sort((a, b) => (b._timestamp ?? "").localeCompare(a._timestamp ?? ""));
|
|
27
|
+
if (checkpoints.length === 0)
|
|
28
|
+
return null;
|
|
29
|
+
return checkpoints[0].content ?? null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** When there is no task_context snapshot, merge task_created with task_progress for L1. */
|
|
36
|
+
/** Shared L1 metadata from task_created (criteria, files, project). */
|
|
37
|
+
function taskSideFromCreated(created, task_id) {
|
|
38
|
+
const ctx = created.context ?? {};
|
|
39
|
+
const raw = ctx.acceptance_criteria;
|
|
40
|
+
const acceptanceCriteria = Array.isArray(raw)
|
|
41
|
+
? raw.filter((x) => typeof x === "string")
|
|
42
|
+
: [];
|
|
43
|
+
const specFile = typeof ctx.spec_file === "string" ? ctx.spec_file : null;
|
|
44
|
+
const assignedTo = typeof ctx.assigned_to === "string" ? ctx.assigned_to : null;
|
|
45
|
+
const project = typeof ctx.project === "string" ? ctx.project : null;
|
|
46
|
+
const rawFiles = ctx.files_to_change;
|
|
47
|
+
const filesChanged = [];
|
|
48
|
+
if (Array.isArray(rawFiles)) {
|
|
49
|
+
for (const f of rawFiles) {
|
|
50
|
+
if (typeof f === "string" && f) {
|
|
51
|
+
filesChanged.push({ path: f, action: "MODIFY" });
|
|
52
|
+
}
|
|
53
|
+
else if (f && typeof f === "object") {
|
|
54
|
+
const fo = f;
|
|
55
|
+
const p = typeof fo.path === "string" ? fo.path : String(fo.path ?? "");
|
|
56
|
+
const a = typeof fo.action === "string" &&
|
|
57
|
+
["CREATE", "MODIFY", "DELETE"].includes(fo.action.toUpperCase())
|
|
58
|
+
? fo.action.toUpperCase()
|
|
59
|
+
: "MODIFY";
|
|
60
|
+
if (p)
|
|
61
|
+
filesChanged.push({ path: p, action: a });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
acceptanceCriteria,
|
|
67
|
+
specFile,
|
|
68
|
+
filesChanged,
|
|
69
|
+
project,
|
|
70
|
+
assignedTo,
|
|
71
|
+
baseContent: (created.content ?? `Task ${task_id}`).trim(),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** L1 body from task_compacted plus task_created structure (Cosmos-safe: uses per-task history, not global TOP N). */
|
|
75
|
+
function taskContextFromCreatedPlusCompacted(task_id, created, compactedRow) {
|
|
76
|
+
const side = taskSideFromCreated(created, task_id);
|
|
77
|
+
const compactCtx = compactedRow.context ?? {};
|
|
78
|
+
const projectFromCompact = typeof compactCtx.project === "string" ? compactCtx.project : side.project;
|
|
79
|
+
const assignedFromCompact = typeof compactCtx.assigned_to === "string"
|
|
80
|
+
? compactCtx.assigned_to
|
|
81
|
+
: side.assignedTo;
|
|
82
|
+
const summary = (compactedRow.content ?? "").trim();
|
|
83
|
+
return {
|
|
84
|
+
content: summary || side.baseContent || `Task ${task_id}`,
|
|
85
|
+
acceptanceCriteria: side.acceptanceCriteria,
|
|
86
|
+
specFile: side.specFile,
|
|
87
|
+
filesChanged: side.filesChanged,
|
|
88
|
+
project: projectFromCompact,
|
|
89
|
+
assignedTo: assignedFromCompact,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function taskContextFromTaskContextSnapshot(task_id, snap) {
|
|
93
|
+
const ctx = snap.context ?? {};
|
|
94
|
+
const raw = ctx.acceptance_criteria;
|
|
95
|
+
const acceptanceCriteria = Array.isArray(raw)
|
|
96
|
+
? raw.filter((x) => typeof x === "string")
|
|
97
|
+
: [];
|
|
98
|
+
const rawFiles = ctx.files_to_change;
|
|
99
|
+
const filesChanged = [];
|
|
100
|
+
if (Array.isArray(rawFiles)) {
|
|
101
|
+
for (const f of rawFiles) {
|
|
102
|
+
if (typeof f === "string" && f) {
|
|
103
|
+
filesChanged.push({ path: f, action: "MODIFY" });
|
|
104
|
+
}
|
|
105
|
+
else if (f && typeof f === "object") {
|
|
106
|
+
const fo = f;
|
|
107
|
+
const p = typeof fo.path === "string" ? fo.path : String(fo.path ?? "");
|
|
108
|
+
const a = typeof fo.action === "string" &&
|
|
109
|
+
["CREATE", "MODIFY", "DELETE"].includes(fo.action.toUpperCase())
|
|
110
|
+
? fo.action.toUpperCase()
|
|
111
|
+
: "MODIFY";
|
|
112
|
+
if (p)
|
|
113
|
+
filesChanged.push({ path: p, action: a });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const specFile = typeof ctx.spec_file === "string" ? ctx.spec_file : null;
|
|
118
|
+
const projectFromCtx = typeof ctx.project === "string" ? ctx.project : null;
|
|
119
|
+
const project = projectFromCtx ?? (typeof snap.project === "string" ? snap.project : null);
|
|
120
|
+
const assignedTo = typeof ctx.assigned_to === "string" ? ctx.assigned_to : null;
|
|
121
|
+
return {
|
|
122
|
+
content: snap.content ?? `Task ${task_id}`,
|
|
123
|
+
acceptanceCriteria,
|
|
124
|
+
specFile,
|
|
125
|
+
filesChanged,
|
|
126
|
+
project,
|
|
127
|
+
assignedTo,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function taskContextFromCreatedAndProgress(task_id, taskRecords) {
|
|
131
|
+
const created = taskRecords.find((r) => r.type === "task_created");
|
|
132
|
+
if (!created)
|
|
133
|
+
return null;
|
|
134
|
+
const progressRows = taskRecords.filter((r) => r.type === "task_progress");
|
|
135
|
+
if (progressRows.length === 0)
|
|
136
|
+
return null;
|
|
137
|
+
const side = taskSideFromCreated(created, task_id);
|
|
138
|
+
const progressLines = progressRows
|
|
139
|
+
.map((r) => (r.content ?? "").trim())
|
|
140
|
+
.filter((line) => line.length > 0);
|
|
141
|
+
const content = progressLines.length > 0
|
|
142
|
+
? `${side.baseContent}\n\n--- Progress ---\n${progressLines.join("\n")}`
|
|
143
|
+
: side.baseContent;
|
|
144
|
+
return {
|
|
145
|
+
content,
|
|
146
|
+
acceptanceCriteria: side.acceptanceCriteria,
|
|
147
|
+
specFile: side.specFile,
|
|
148
|
+
filesChanged: side.filesChanged,
|
|
149
|
+
project: side.project,
|
|
150
|
+
assignedTo: side.assignedTo,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function recordTime(r) {
|
|
154
|
+
return r._timestamp ?? "";
|
|
155
|
+
}
|
|
156
|
+
export async function extractLatestTaskContext(task_id) {
|
|
157
|
+
let forTask;
|
|
158
|
+
try {
|
|
159
|
+
forTask = await readEventsByTask(task_id);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
const created = forTask.find((r) => r.type === "task_created");
|
|
165
|
+
if (!created)
|
|
166
|
+
return null;
|
|
167
|
+
const compactedRows = forTask.filter((r) => {
|
|
168
|
+
if (r.type !== "task_compacted")
|
|
169
|
+
return false;
|
|
170
|
+
const ctx = r.context;
|
|
171
|
+
return ctx?.task_id === task_id;
|
|
172
|
+
});
|
|
173
|
+
const contextRows = forTask.filter((r) => {
|
|
174
|
+
if (r.type !== "task_context")
|
|
175
|
+
return false;
|
|
176
|
+
const ctx = r.context;
|
|
177
|
+
return ctx?.task_id === task_id;
|
|
178
|
+
});
|
|
179
|
+
compactedRows.sort((a, b) => recordTime(a).localeCompare(recordTime(b)));
|
|
180
|
+
contextRows.sort((a, b) => recordTime(a).localeCompare(recordTime(b)));
|
|
181
|
+
const latestCompacted = compactedRows.length > 0 ? compactedRows[compactedRows.length - 1] : null;
|
|
182
|
+
const latestContext = contextRows.length > 0 ? contextRows[contextRows.length - 1] : null;
|
|
183
|
+
if (latestCompacted && latestContext) {
|
|
184
|
+
if (recordTime(latestCompacted) >= recordTime(latestContext)) {
|
|
185
|
+
return taskContextFromCreatedPlusCompacted(task_id, created, latestCompacted);
|
|
186
|
+
}
|
|
187
|
+
return taskContextFromTaskContextSnapshot(task_id, latestContext);
|
|
188
|
+
}
|
|
189
|
+
if (latestCompacted) {
|
|
190
|
+
return taskContextFromCreatedPlusCompacted(task_id, created, latestCompacted);
|
|
191
|
+
}
|
|
192
|
+
if (latestContext) {
|
|
193
|
+
return taskContextFromTaskContextSnapshot(task_id, latestContext);
|
|
194
|
+
}
|
|
195
|
+
const fromProgress = taskContextFromCreatedAndProgress(task_id, forTask);
|
|
196
|
+
if (fromProgress)
|
|
197
|
+
return fromProgress;
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
export async function extractTaskCreated(task_id) {
|
|
201
|
+
const taskRecords = await readEventsByTask(task_id);
|
|
202
|
+
const created = taskRecords.find((r) => r.type === "task_created");
|
|
203
|
+
if (!created)
|
|
204
|
+
return null;
|
|
205
|
+
const ctx = created.context ?? {};
|
|
206
|
+
const raw = ctx.acceptance_criteria;
|
|
207
|
+
const criteria = Array.isArray(raw) ? raw : [];
|
|
208
|
+
const specFile = typeof ctx.spec_file === "string" ? ctx.spec_file : null;
|
|
209
|
+
const assignedTo = typeof ctx.assigned_to === "string" ? ctx.assigned_to : null;
|
|
210
|
+
const project = typeof ctx.project === "string" ? ctx.project : null;
|
|
211
|
+
// Parse files_to_change if present
|
|
212
|
+
const rawFiles = ctx.files_to_change;
|
|
213
|
+
const files = [];
|
|
214
|
+
if (Array.isArray(rawFiles)) {
|
|
215
|
+
for (const f of rawFiles) {
|
|
216
|
+
if (typeof f === "string") {
|
|
217
|
+
files.push({ path: f, action: "MODIFY" });
|
|
218
|
+
}
|
|
219
|
+
else if (f && typeof f === "object") {
|
|
220
|
+
const fo = f;
|
|
221
|
+
const p = typeof fo.path === "string" ? fo.path : String(fo.path ?? "");
|
|
222
|
+
const a = typeof fo.action === "string" &&
|
|
223
|
+
["CREATE", "MODIFY", "DELETE"].includes(fo.action.toUpperCase())
|
|
224
|
+
? fo.action.toUpperCase()
|
|
225
|
+
: "MODIFY";
|
|
226
|
+
if (p)
|
|
227
|
+
files.push({ path: p, action: a });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
content: created.content ?? `Task ${task_id}`,
|
|
233
|
+
acceptanceCriteria: criteria,
|
|
234
|
+
specFile,
|
|
235
|
+
filesChanged: files,
|
|
236
|
+
project,
|
|
237
|
+
assignedTo,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
export async function extractRetryInfo(task_id) {
|
|
241
|
+
const taskRecords = await readEventsByTask(task_id);
|
|
242
|
+
// Find the most recent task_reviewed with verdict=fail
|
|
243
|
+
const failedReviews = taskRecords.filter((r) => {
|
|
244
|
+
if (r.type !== "task_reviewed")
|
|
245
|
+
return false;
|
|
246
|
+
const ctx = r.context;
|
|
247
|
+
return ctx?.verdict === "fail";
|
|
248
|
+
});
|
|
249
|
+
if (failedReviews.length === 0)
|
|
250
|
+
return { isRetry: false, failedCriteria: [], fixInstructions: "" };
|
|
251
|
+
const latest = failedReviews[failedReviews.length - 1];
|
|
252
|
+
const ctx = latest.context ?? {};
|
|
253
|
+
const rawResults = ctx.criteria_results;
|
|
254
|
+
const failedCriteria = [];
|
|
255
|
+
if (Array.isArray(rawResults)) {
|
|
256
|
+
for (const cr of rawResults) {
|
|
257
|
+
if (cr && typeof cr === "object") {
|
|
258
|
+
const r = cr;
|
|
259
|
+
if (r.met === false && typeof r.criterion === "string") {
|
|
260
|
+
failedCriteria.push(r.criterion);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Extract fix instructions from review content
|
|
266
|
+
const fixInstructions = latest.content ?? "";
|
|
267
|
+
return { isRetry: true, failedCriteria, fixInstructions };
|
|
268
|
+
}
|
|
269
|
+
export async function findRelatedEntities(task_id, project) {
|
|
270
|
+
// Phase 1 (pre-DC-T12): keyword search on task_id and project as fallback
|
|
271
|
+
// When DC-T12 ships, replace with get_linked(task_entity_id)
|
|
272
|
+
const results = [];
|
|
273
|
+
const seen = new Set();
|
|
274
|
+
// Search by task_id tag
|
|
275
|
+
const byTag = await queryEntities({ tag: task_id });
|
|
276
|
+
for (const e of byTag.entities) {
|
|
277
|
+
if (!seen.has(e.entity_id)) {
|
|
278
|
+
seen.add(e.entity_id);
|
|
279
|
+
results.push(e);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Search by project (decisions and insights most relevant)
|
|
283
|
+
if (project && results.length < 6) {
|
|
284
|
+
const byProject = await queryEntities({ project, entity_type: "decision" });
|
|
285
|
+
for (const e of byProject.entities.slice(0, 3)) {
|
|
286
|
+
if (!seen.has(e.entity_id)) {
|
|
287
|
+
seen.add(e.entity_id);
|
|
288
|
+
results.push(e);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// Sort: decisions > insights > skills > other
|
|
293
|
+
const priority = {
|
|
294
|
+
decision: 0,
|
|
295
|
+
insight: 1,
|
|
296
|
+
skill: 2,
|
|
297
|
+
};
|
|
298
|
+
results.sort((a, b) => (priority[a.entity_type] ?? 9) - (priority[b.entity_type] ?? 9));
|
|
299
|
+
return results.slice(0, 8);
|
|
300
|
+
// cap at 8 entities for L3
|
|
301
|
+
}
|
|
302
|
+
export async function findRecentCompletions(project) {
|
|
303
|
+
if (!project)
|
|
304
|
+
return [];
|
|
305
|
+
const { records } = await readAllRecords({ type: "task_" });
|
|
306
|
+
const reviewed = records
|
|
307
|
+
.filter((r) => {
|
|
308
|
+
if (r.type !== "task_reviewed")
|
|
309
|
+
return false;
|
|
310
|
+
const ctx = r.context;
|
|
311
|
+
return ctx?.verdict === "pass" || ctx?.verdict === "pass_with_notes";
|
|
312
|
+
})
|
|
313
|
+
.sort((a, b) => (b._timestamp ?? "").localeCompare(a._timestamp ?? ""))
|
|
314
|
+
.slice(0, 10);
|
|
315
|
+
const results = [];
|
|
316
|
+
const seen = new Set();
|
|
317
|
+
for (const r of reviewed) {
|
|
318
|
+
const ctx = r.context;
|
|
319
|
+
const tid = typeof ctx?.task_id === "string" ? ctx.task_id : null;
|
|
320
|
+
if (!tid || seen.has(tid))
|
|
321
|
+
continue;
|
|
322
|
+
// Find task_created for this task to get project
|
|
323
|
+
const created = records.find((rec) => {
|
|
324
|
+
if (rec.type !== "task_created")
|
|
325
|
+
return false;
|
|
326
|
+
const c = rec.context;
|
|
327
|
+
return c?.task_id === tid;
|
|
328
|
+
});
|
|
329
|
+
if (!created)
|
|
330
|
+
continue;
|
|
331
|
+
const createdCtx = created.context;
|
|
332
|
+
if (typeof createdCtx?.project !== "string" ||
|
|
333
|
+
createdCtx.project.toLowerCase() !== project.toLowerCase())
|
|
334
|
+
continue;
|
|
335
|
+
seen.add(tid);
|
|
336
|
+
// Extract any deduction notes as gotchas
|
|
337
|
+
const rawDeductions = ctx?.deductions;
|
|
338
|
+
const gotcha = Array.isArray(rawDeductions) && rawDeductions.length > 0
|
|
339
|
+
? String(rawDeductions[0])
|
|
340
|
+
: undefined;
|
|
341
|
+
results.push({
|
|
342
|
+
task_id: tid,
|
|
343
|
+
summary: created.content ?? tid,
|
|
344
|
+
gotcha,
|
|
345
|
+
});
|
|
346
|
+
if (results.length >= 3)
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
return results;
|
|
350
|
+
}
|
|
351
|
+
// Minimal set of gotchas relevant to coding tasks (from CLAUDE.md)
|
|
352
|
+
// These are embedded so the preamble works even when file reads are slow.
|
|
353
|
+
const CORE_GOTCHAS = {
|
|
354
|
+
datacore: [
|
|
355
|
+
"Domain logic in domain/, transport routing in transport/. Never mix. (Gotcha #1 equivalent)",
|
|
356
|
+
"log_event is the only real output — chat responses are ephemeral. (Gotcha #14)",
|
|
357
|
+
"task_completed proof is mandatory: commit hash, test output, files changed.",
|
|
358
|
+
"Never use `any` in TypeScript — ESLint enforces no-explicit-any. (Gotcha #10)",
|
|
359
|
+
"pnpm run check:all must pass before task_completed (format, lint, build, 217 tests).",
|
|
360
|
+
],
|
|
361
|
+
memobridge: [
|
|
362
|
+
"chrome.storage.local is async — cache in module variable on load for sync handlers.",
|
|
363
|
+
"pnpm run check must pass before task_completed.",
|
|
364
|
+
"log_event is the only real output. (Gotcha #14)",
|
|
365
|
+
],
|
|
366
|
+
};
|
|
367
|
+
export function getGotchas(project) {
|
|
368
|
+
if (!project)
|
|
369
|
+
return CORE_GOTCHAS["datacore"] ?? [];
|
|
370
|
+
return CORE_GOTCHAS[project.toLowerCase()] ?? CORE_GOTCHAS["datacore"] ?? [];
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=warm-start-extractors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warm-start-extractors.js","sourceRoot":"","sources":["../../../src/domain/context/warm-start-extractors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface WarmStartInput {
|
|
2
|
+
task_id: string;
|
|
3
|
+
agent: string;
|
|
4
|
+
budget_tokens?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface WarmStartResult {
|
|
7
|
+
task_id: string;
|
|
8
|
+
agent: string;
|
|
9
|
+
preamble: string;
|
|
10
|
+
token_estimate: number;
|
|
11
|
+
layers_included: string[];
|
|
12
|
+
layers_dropped: string[];
|
|
13
|
+
assembled_at: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function buildWarmStartPreamble(input: WarmStartInput): Promise<WarmStartResult>;
|
|
17
|
+
//# sourceMappingURL=warm-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warm-start.d.ts","sourceRoot":"","sources":["../../../src/domain/context/warm-start.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4DD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,eAAe,CAAC,CAwL1B"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// warm-start.ts — How is an agent preamble assembled for dispatch?
|
|
2
|
+
// Assembly only: imports builders + extractors, enforces budget, returns preamble.
|
|
3
|
+
// Builders live in warm-start-builders.ts. Data extraction in warm-start-extractors.ts.
|
|
4
|
+
import { buildL0Identity, buildL1TaskSpec, buildL2ProjectContext, buildL3KnowledgeGraph, buildL4RecentCompletions, buildL5RetryContext, buildL6FileManifest, buildLA_AgentJournal, buildLB_TaskCheckpoint, } from "./warm-start-builders.js";
|
|
5
|
+
import { extractAgentJournal, extractTaskCheckpoint, extractLatestTaskContext, extractTaskCreated, extractRetryInfo, findRelatedEntities, findRecentCompletions, getGotchas, } from "./warm-start-extractors.js";
|
|
6
|
+
// Character-to-token approximation (conservative: 3.5 chars/token)
|
|
7
|
+
const CHARS_PER_TOKEN = 3.5;
|
|
8
|
+
function estimateTokens(text) {
|
|
9
|
+
return Math.ceil(text.length / CHARS_PER_TOKEN);
|
|
10
|
+
}
|
|
11
|
+
function getProfile(agent) {
|
|
12
|
+
const AGENT_PROFILES = {
|
|
13
|
+
codex: {
|
|
14
|
+
budget_chars: 35000,
|
|
15
|
+
format: "bullets",
|
|
16
|
+
self_contained: false,
|
|
17
|
+
include_file_manifest: true,
|
|
18
|
+
drop_l4_first: false,
|
|
19
|
+
},
|
|
20
|
+
cursor: {
|
|
21
|
+
budget_chars: 35000,
|
|
22
|
+
format: "bullets",
|
|
23
|
+
self_contained: false,
|
|
24
|
+
include_file_manifest: true,
|
|
25
|
+
drop_l4_first: false,
|
|
26
|
+
},
|
|
27
|
+
"claude-desktop": {
|
|
28
|
+
budget_chars: 17500,
|
|
29
|
+
format: "prose",
|
|
30
|
+
self_contained: false,
|
|
31
|
+
include_file_manifest: false,
|
|
32
|
+
drop_l4_first: true,
|
|
33
|
+
},
|
|
34
|
+
gemini: {
|
|
35
|
+
budget_chars: 42000,
|
|
36
|
+
format: "prose",
|
|
37
|
+
self_contained: true,
|
|
38
|
+
include_file_manifest: true,
|
|
39
|
+
drop_l4_first: false,
|
|
40
|
+
},
|
|
41
|
+
"gemini-antigravity": {
|
|
42
|
+
budget_chars: 42000,
|
|
43
|
+
format: "prose",
|
|
44
|
+
self_contained: true,
|
|
45
|
+
include_file_manifest: true,
|
|
46
|
+
drop_l4_first: false,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
return (AGENT_PROFILES[agent.toLowerCase()] ?? {
|
|
50
|
+
budget_chars: 35000,
|
|
51
|
+
format: "bullets",
|
|
52
|
+
self_contained: false,
|
|
53
|
+
include_file_manifest: true,
|
|
54
|
+
drop_l4_first: false,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// ─── Main assembly ────────────────────────────────────────────────────────────
|
|
58
|
+
export async function buildWarmStartPreamble(input) {
|
|
59
|
+
const { task_id, agent } = input;
|
|
60
|
+
const assembled_at = new Date().toISOString();
|
|
61
|
+
const profile = getProfile(agent);
|
|
62
|
+
const budgetChars = profile.budget_chars;
|
|
63
|
+
const fmt = profile.format;
|
|
64
|
+
const layersIncluded = [];
|
|
65
|
+
const layersDropped = [];
|
|
66
|
+
const sections = [];
|
|
67
|
+
// ── L0: Identity (always) ───────────────────────────────────
|
|
68
|
+
const l0 = buildL0Identity(agent, task_id, fmt);
|
|
69
|
+
sections.push({ layer: "L0", text: l0 });
|
|
70
|
+
// ── LA: Agent journal ────────────────────────────────────────
|
|
71
|
+
let agentJournal = null;
|
|
72
|
+
try {
|
|
73
|
+
agentJournal = await extractAgentJournal(agent);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
/* non-fatal */
|
|
77
|
+
}
|
|
78
|
+
if (agentJournal) {
|
|
79
|
+
sections.push({
|
|
80
|
+
layer: "LA",
|
|
81
|
+
text: buildLA_AgentJournal(agentJournal, fmt),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// ── LB: Task checkpoint (mid-task recovery) ──────────────────
|
|
85
|
+
let checkpoint = null;
|
|
86
|
+
try {
|
|
87
|
+
checkpoint = await extractTaskCheckpoint(task_id);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
/* non-fatal */
|
|
91
|
+
}
|
|
92
|
+
if (checkpoint) {
|
|
93
|
+
sections.push({
|
|
94
|
+
layer: "LB",
|
|
95
|
+
text: buildLB_TaskCheckpoint(checkpoint, fmt),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// ── Fetch task spec ──────────────────────────────────────────
|
|
99
|
+
let taskSpec = null;
|
|
100
|
+
try {
|
|
101
|
+
taskSpec =
|
|
102
|
+
(await extractLatestTaskContext(task_id)) ??
|
|
103
|
+
(await extractTaskCreated(task_id));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
/* non-fatal */
|
|
107
|
+
}
|
|
108
|
+
if (!taskSpec) {
|
|
109
|
+
const fallback = [
|
|
110
|
+
l0,
|
|
111
|
+
"",
|
|
112
|
+
`--- TASK NOT FOUND ---`,
|
|
113
|
+
`Task ${task_id} not found. Search: datacore search "${task_id}"`,
|
|
114
|
+
`Proceed with the dispatch message below.`,
|
|
115
|
+
].join("\n");
|
|
116
|
+
return {
|
|
117
|
+
task_id,
|
|
118
|
+
agent,
|
|
119
|
+
preamble: fallback,
|
|
120
|
+
token_estimate: estimateTokens(fallback),
|
|
121
|
+
layers_included: ["L0"],
|
|
122
|
+
layers_dropped: ["L1", "L2", "L3", "L4", "L5", "L6"],
|
|
123
|
+
assembled_at,
|
|
124
|
+
error: `task_created event not found for ${task_id}`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// ── L1: Task spec ────────────────────────────────────────────
|
|
128
|
+
sections.push({
|
|
129
|
+
layer: "L1",
|
|
130
|
+
text: buildL1TaskSpec(taskSpec.content, taskSpec.acceptanceCriteria, taskSpec.specFile, fmt),
|
|
131
|
+
});
|
|
132
|
+
// ── L5: Retry context (before L2 — high priority) ────────────
|
|
133
|
+
let retryInfo = {
|
|
134
|
+
isRetry: false,
|
|
135
|
+
failedCriteria: [],
|
|
136
|
+
fixInstructions: "",
|
|
137
|
+
};
|
|
138
|
+
try {
|
|
139
|
+
retryInfo = await extractRetryInfo(task_id);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
/* non-fatal */
|
|
143
|
+
}
|
|
144
|
+
if (retryInfo.isRetry) {
|
|
145
|
+
const l5 = buildL5RetryContext(retryInfo.failedCriteria, retryInfo.fixInstructions, fmt);
|
|
146
|
+
if (l5)
|
|
147
|
+
sections.push({ layer: "L5", text: l5 });
|
|
148
|
+
}
|
|
149
|
+
// ── L2: Project context ──────────────────────────────────────
|
|
150
|
+
const gotchas = getGotchas(taskSpec.project);
|
|
151
|
+
if (gotchas.length > 0) {
|
|
152
|
+
sections.push({ layer: "L2", text: buildL2ProjectContext(gotchas, fmt) });
|
|
153
|
+
}
|
|
154
|
+
// ── L3: Knowledge graph links ────────────────────────────────
|
|
155
|
+
try {
|
|
156
|
+
const related = await findRelatedEntities(task_id, taskSpec.project);
|
|
157
|
+
if (related.length > 0) {
|
|
158
|
+
sections.push({
|
|
159
|
+
layer: "L3",
|
|
160
|
+
text: buildL3KnowledgeGraph(related, profile.self_contained, fmt),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
/* non-fatal */
|
|
166
|
+
}
|
|
167
|
+
// ── L4: Recent completions ───────────────────────────────────
|
|
168
|
+
try {
|
|
169
|
+
const completions = await findRecentCompletions(taskSpec.project);
|
|
170
|
+
if (completions.length > 0) {
|
|
171
|
+
sections.push({
|
|
172
|
+
layer: "L4",
|
|
173
|
+
text: buildL4RecentCompletions(completions, fmt),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
/* non-fatal */
|
|
179
|
+
}
|
|
180
|
+
// ── L6: File manifest ────────────────────────────────────────
|
|
181
|
+
if (profile.include_file_manifest && taskSpec.filesChanged.length > 0) {
|
|
182
|
+
sections.push({
|
|
183
|
+
layer: "L6",
|
|
184
|
+
text: buildL6FileManifest(taskSpec.filesChanged, fmt),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// ── Enforce budget (drop layers in order) ────────────────────
|
|
188
|
+
const PROTECTED = new Set(["L0", "L1", "L5", "LB"]);
|
|
189
|
+
const DROP_ORDER = profile.drop_l4_first
|
|
190
|
+
? ["L4", "L6", "L3", "LA", "L2"]
|
|
191
|
+
: ["L4", "L6", "L3", "LA", "L2"];
|
|
192
|
+
let assembled = sections.map((s) => s.text).join("\n\n");
|
|
193
|
+
for (const dropLayer of DROP_ORDER) {
|
|
194
|
+
if (assembled.length <= budgetChars)
|
|
195
|
+
break;
|
|
196
|
+
if (PROTECTED.has(dropLayer))
|
|
197
|
+
continue;
|
|
198
|
+
const idx = sections.findIndex((s) => s.layer === dropLayer);
|
|
199
|
+
if (idx !== -1) {
|
|
200
|
+
sections.splice(idx, 1);
|
|
201
|
+
layersDropped.push(dropLayer);
|
|
202
|
+
assembled = sections.map((s) => s.text).join("\n\n");
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (assembled.length > budgetChars) {
|
|
206
|
+
assembled = assembled.slice(0, budgetChars - 100);
|
|
207
|
+
assembled += "\n\n⚠️ Preamble truncated at budget limit.";
|
|
208
|
+
}
|
|
209
|
+
const closing = fmt === "bullets"
|
|
210
|
+
? `\n=== END PREAMBLE — REMEMBER: log_event(task_completed) + agent_journal_entry required ===`
|
|
211
|
+
: `\n=== End of warm-start context. Write task_completed + agent_journal_entry before session ends. ===`;
|
|
212
|
+
assembled += closing;
|
|
213
|
+
for (const s of sections)
|
|
214
|
+
layersIncluded.push(s.layer);
|
|
215
|
+
return {
|
|
216
|
+
task_id,
|
|
217
|
+
agent,
|
|
218
|
+
preamble: assembled,
|
|
219
|
+
token_estimate: estimateTokens(assembled),
|
|
220
|
+
layers_included: layersIncluded,
|
|
221
|
+
layers_dropped: layersDropped,
|
|
222
|
+
assembled_at,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=warm-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warm-start.js","sourceRoot":"","sources":["../../../src/domain/context/warm-start.ts"],"names":[],"mappings":"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"}
|