@davidjinguoxu/agentcore 0.4.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/LICENSE +21 -0
- package/README.md +198 -0
- package/config/default-triggers.json +119 -0
- package/dist/adapters/runtime-adapter.d.ts +124 -0
- package/dist/adapters/runtime-adapter.d.ts.map +1 -0
- package/dist/adapters/runtime-adapter.js +5 -0
- package/dist/adapters/runtime-adapter.js.map +1 -0
- package/dist/config/datacore-constants.d.ts +21 -0
- package/dist/config/datacore-constants.d.ts.map +1 -0
- package/dist/config/datacore-constants.js +68 -0
- package/dist/config/datacore-constants.js.map +1 -0
- package/dist/domain/embeddable.d.ts +19 -0
- package/dist/domain/embeddable.d.ts.map +1 -0
- package/dist/domain/embeddable.js +106 -0
- package/dist/domain/embeddable.js.map +1 -0
- package/dist/domain/gold-store.d.ts +11 -0
- package/dist/domain/gold-store.d.ts.map +1 -0
- package/dist/domain/gold-store.js +210 -0
- package/dist/domain/gold-store.js.map +1 -0
- package/dist/domain/inbox.d.ts +14 -0
- package/dist/domain/inbox.d.ts.map +1 -0
- package/dist/domain/inbox.js +138 -0
- package/dist/domain/inbox.js.map +1 -0
- package/dist/domain/office-status.d.ts +31 -0
- package/dist/domain/office-status.d.ts.map +1 -0
- package/dist/domain/office-status.js +138 -0
- package/dist/domain/office-status.js.map +1 -0
- package/dist/domain/questions.d.ts +3 -0
- package/dist/domain/questions.d.ts.map +1 -0
- package/dist/domain/questions.js +60 -0
- package/dist/domain/questions.js.map +1 -0
- package/dist/domain/run-manager.d.ts +14 -0
- package/dist/domain/run-manager.d.ts.map +1 -0
- package/dist/domain/run-manager.js +25 -0
- package/dist/domain/run-manager.js.map +1 -0
- package/dist/domain/task-event-index.d.ts +31 -0
- package/dist/domain/task-event-index.d.ts.map +1 -0
- package/dist/domain/task-event-index.js +117 -0
- package/dist/domain/task-event-index.js.map +1 -0
- package/dist/domain/tasks.d.ts +3 -0
- package/dist/domain/tasks.d.ts.map +1 -0
- package/dist/domain/tasks.js +112 -0
- package/dist/domain/tasks.js.map +1 -0
- package/dist/domain/warm-start-builders.d.ts +18 -0
- package/dist/domain/warm-start-builders.d.ts.map +1 -0
- package/dist/domain/warm-start-builders.js +157 -0
- package/dist/domain/warm-start-builders.js.map +1 -0
- package/dist/domain/warm-start-extractors.d.ts +37 -0
- package/dist/domain/warm-start-extractors.d.ts.map +1 -0
- package/dist/domain/warm-start-extractors.js +372 -0
- package/dist/domain/warm-start-extractors.js.map +1 -0
- package/dist/domain/warm-start.d.ts +17 -0
- package/dist/domain/warm-start.d.ts.map +1 -0
- package/dist/domain/warm-start.js +225 -0
- package/dist/domain/warm-start.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-slim-ack.d.ts +12 -0
- package/dist/mcp-slim-ack.d.ts.map +1 -0
- package/dist/mcp-slim-ack.js +16 -0
- package/dist/mcp-slim-ack.js.map +1 -0
- package/dist/routing/capability-registry.d.ts +38 -0
- package/dist/routing/capability-registry.d.ts.map +1 -0
- package/dist/routing/capability-registry.js +52 -0
- package/dist/routing/capability-registry.js.map +1 -0
- package/dist/routing/runtime-target-resolver.d.ts +42 -0
- package/dist/routing/runtime-target-resolver.d.ts.map +1 -0
- package/dist/routing/runtime-target-resolver.js +139 -0
- package/dist/routing/runtime-target-resolver.js.map +1 -0
- package/dist/search/azure-search-client.d.ts +53 -0
- package/dist/search/azure-search-client.d.ts.map +1 -0
- package/dist/search/azure-search-client.js +191 -0
- package/dist/search/azure-search-client.js.map +1 -0
- package/dist/search/circuit-breaker.d.ts +46 -0
- package/dist/search/circuit-breaker.d.ts.map +1 -0
- package/dist/search/circuit-breaker.js +87 -0
- package/dist/search/circuit-breaker.js.map +1 -0
- package/dist/search/deep-search.d.ts +24 -0
- package/dist/search/deep-search.d.ts.map +1 -0
- package/dist/search/deep-search.js +98 -0
- package/dist/search/deep-search.js.map +1 -0
- package/dist/search/search.d.ts +3 -0
- package/dist/search/search.d.ts.map +1 -0
- package/dist/search/search.js +76 -0
- package/dist/search/search.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +39 -0
- package/dist/server.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +8 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/knowledge.d.ts +3 -0
- package/dist/skills/knowledge.d.ts.map +1 -0
- package/dist/skills/knowledge.js +78 -0
- package/dist/skills/knowledge.js.map +1 -0
- package/dist/skills/task-workflow.d.ts +3 -0
- package/dist/skills/task-workflow.d.ts.map +1 -0
- package/dist/skills/task-workflow.js +205 -0
- package/dist/skills/task-workflow.js.map +1 -0
- package/dist/storage/active-backend.d.ts +4 -0
- package/dist/storage/active-backend.d.ts.map +1 -0
- package/dist/storage/active-backend.js +12 -0
- package/dist/storage/active-backend.js.map +1 -0
- package/dist/storage/backend.d.ts +12 -0
- package/dist/storage/backend.d.ts.map +1 -0
- package/dist/storage/backend.js +5 -0
- package/dist/storage/backend.js.map +1 -0
- package/dist/storage/cosmos-client.d.ts +6 -0
- package/dist/storage/cosmos-client.d.ts.map +1 -0
- package/dist/storage/cosmos-client.js +38 -0
- package/dist/storage/cosmos-client.js.map +1 -0
- package/dist/storage/lancedb-backend.d.ts +13 -0
- package/dist/storage/lancedb-backend.d.ts.map +1 -0
- package/dist/storage/lancedb-backend.js +373 -0
- package/dist/storage/lancedb-backend.js.map +1 -0
- package/dist/storage/store.d.ts +8 -0
- package/dist/storage/store.d.ts.map +1 -0
- package/dist/storage/store.js +294 -0
- package/dist/storage/store.js.map +1 -0
- package/dist/storage/task-compaction.d.ts +12 -0
- package/dist/storage/task-compaction.d.ts.map +1 -0
- package/dist/storage/task-compaction.js +112 -0
- package/dist/storage/task-compaction.js.map +1 -0
- package/dist/storage/task-context-snapshot.d.ts +6 -0
- package/dist/storage/task-context-snapshot.d.ts.map +1 -0
- package/dist/storage/task-context-snapshot.js +87 -0
- package/dist/storage/task-context-snapshot.js.map +1 -0
- package/dist/storage/trigger-engine.d.ts +39 -0
- package/dist/storage/trigger-engine.d.ts.map +1 -0
- package/dist/storage/trigger-engine.js +212 -0
- package/dist/storage/trigger-engine.js.map +1 -0
- package/dist/tools.d.ts +3 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +413 -0
- package/dist/tools.js.map +1 -0
- package/dist/transport/client.d.ts +68 -0
- package/dist/transport/client.d.ts.map +1 -0
- package/dist/transport/client.js +210 -0
- package/dist/transport/client.js.map +1 -0
- package/dist/transport/http-server.d.ts +3 -0
- package/dist/transport/http-server.d.ts.map +1 -0
- package/dist/transport/http-server.js +337 -0
- package/dist/transport/http-server.js.map +1 -0
- package/dist/types.d.ts +185 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
- package/scripts/run-server.mjs +3 -0
- package/scripts/stdio-only.mjs +23 -0
|
@@ -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/warm-start.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export { appendEvent, readAllRecords, getBronzeDir } from "./storage/store.js";
|
|
3
|
+
export { queryEntities, upsertEntity, getLinkedEntities, } from "./domain/gold-store.js";
|
|
4
|
+
export { buildWarmStartPreamble } from "./domain/warm-start.js";
|
|
5
|
+
export { checkTriggers } from "./storage/trigger-engine.js";
|
|
6
|
+
export type { StorageBackend } from "./storage/backend.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// index.ts — Public API for @datacore/engine.
|
|
2
|
+
// Import from here, not from internal paths.
|
|
3
|
+
export * from "./types.js";
|
|
4
|
+
export { appendEvent, readAllRecords, getBronzeDir } from "./storage/store.js";
|
|
5
|
+
export { queryEntities, upsertEntity, getLinkedEntities, } from "./domain/gold-store.js";
|
|
6
|
+
export { buildWarmStartPreamble } from "./domain/warm-start.js";
|
|
7
|
+
export { checkTriggers } from "./storage/trigger-engine.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,6CAA6C;AAE7C,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AddEntityResult, BronzeRecord } from "./types.js";
|
|
2
|
+
export declare function bronzeWriteAck(record: BronzeRecord): {
|
|
3
|
+
status: "ok";
|
|
4
|
+
event_id: string;
|
|
5
|
+
type: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function goldUpsertAck(result: AddEntityResult): {
|
|
8
|
+
status: "ok";
|
|
9
|
+
entity_id: string;
|
|
10
|
+
action: AddEntityResult["action"];
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=mcp-slim-ack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slim-ack.d.ts","sourceRoot":"","sources":["../src/mcp-slim-ack.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG;IACpD,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAMA;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG;IACtD,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;CACnC,CAMA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// mcp-slim-ack.ts — Minimal structuredContent for write tools (DC-T23: avoid echoing full records into model context).
|
|
2
|
+
export function bronzeWriteAck(record) {
|
|
3
|
+
return {
|
|
4
|
+
status: "ok",
|
|
5
|
+
event_id: record._event_id,
|
|
6
|
+
type: record.type,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function goldUpsertAck(result) {
|
|
10
|
+
return {
|
|
11
|
+
status: "ok",
|
|
12
|
+
entity_id: result.entity_id,
|
|
13
|
+
action: result.action,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=mcp-slim-ack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slim-ack.js","sourceRoot":"","sources":["../src/mcp-slim-ack.ts"],"names":[],"mappings":"AAAA,uHAAuH;AAIvH,MAAM,UAAU,cAAc,CAAC,MAAoB;IAKjD,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,MAAM,CAAC,SAAS;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAuB;IAKnD,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type CostClass = "free" | "low" | "medium" | "high";
|
|
2
|
+
export type QuotaClass = "unlimited" | "subscription" | "pay-per-use" | "rate-limited";
|
|
3
|
+
export type ReliabilityClass = "high" | "medium" | "experimental";
|
|
4
|
+
export type AgentRole = "planner" | "builder" | "reviewer" | "architect" | "researcher" | "ops" | "director";
|
|
5
|
+
export type TaskStage = "planning" | "implementation" | "review" | "rework" | "validation" | "release";
|
|
6
|
+
export interface SubstrateCapability {
|
|
7
|
+
agent_id: string;
|
|
8
|
+
runtime_id?: string;
|
|
9
|
+
provider?: string;
|
|
10
|
+
supports_mcp: boolean;
|
|
11
|
+
supports_hooks: boolean;
|
|
12
|
+
supports_transcript_export: boolean;
|
|
13
|
+
supports_isolation: boolean;
|
|
14
|
+
supports_review_mode: boolean;
|
|
15
|
+
supports_parallel_subagents: boolean;
|
|
16
|
+
cost_class: CostClass;
|
|
17
|
+
quota_class?: QuotaClass;
|
|
18
|
+
reliability_class?: ReliabilityClass;
|
|
19
|
+
ideal_roles: AgentRole[];
|
|
20
|
+
ideal_stages: TaskStage[];
|
|
21
|
+
type?: string;
|
|
22
|
+
script?: string;
|
|
23
|
+
aliases?: string[];
|
|
24
|
+
notes?: string;
|
|
25
|
+
}
|
|
26
|
+
/** Find substrate by canonical id or alias. */
|
|
27
|
+
export declare function findSubstrate(id: string): SubstrateCapability | null;
|
|
28
|
+
/** All substrates suitable for a given role. */
|
|
29
|
+
export declare function substratesForRole(role: AgentRole): SubstrateCapability[];
|
|
30
|
+
/** All substrates suitable for a given stage. */
|
|
31
|
+
export declare function substratesForStage(stage: TaskStage): SubstrateCapability[];
|
|
32
|
+
/** Substrates at or below the specified cost ceiling. */
|
|
33
|
+
export declare function substratesByCost(maxCost: CostClass): SubstrateCapability[];
|
|
34
|
+
/** All substrates that support MCP (can write back mid-session). */
|
|
35
|
+
export declare function substratesWithMcp(): SubstrateCapability[];
|
|
36
|
+
/** All registered substrates. */
|
|
37
|
+
export declare function allSubstrates(): SubstrateCapability[];
|
|
38
|
+
//# sourceMappingURL=capability-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-registry.d.ts","sourceRoot":"","sources":["../../src/routing/capability-registry.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC3D,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,cAAc,GACd,aAAa,GACb,cAAc,CAAC;AACnB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,CAAC;AAClE,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,UAAU,GACV,WAAW,GACX,YAAY,GACZ,KAAK,GACL,UAAU,CAAC;AACf,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAElC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,0BAA0B,EAAE,OAAO,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,2BAA2B,EAAE,OAAO,CAAC;IAGrC,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAGrC,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,YAAY,EAAE,SAAS,EAAE,CAAC;IAG1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwBD,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAUpE;AAED,gDAAgD;AAChD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,EAAE,CAExE;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB,EAAE,CAE1E;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,mBAAmB,EAAE,CAI1E;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,IAAI,mBAAmB,EAAE,CAEzD;AAED,iCAAiC;AACjC,wBAAgB,aAAa,IAAI,mBAAmB,EAAE,CAErD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// capability-registry.ts — What execution substrates are available and what can they do?
|
|
2
|
+
// Layer 2: Routing. Wraps providers/registry.json into a typed, queryable registry.
|
|
3
|
+
// The registry is the single source of truth for substrate capabilities.
|
|
4
|
+
// Question answered: "Given a task, which substrates are eligible?"
|
|
5
|
+
import { readFileSync } from "node:fs";
|
|
6
|
+
import { dirname, join } from "node:path";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
// ─── Registry ─────────────────────────────────────────────────────────────────
|
|
9
|
+
function loadAgentsFile() {
|
|
10
|
+
const dir = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
// providers/registry.json is at repo root — three levels up from engine/dist/routing/
|
|
12
|
+
const agentsPath = join(dir, "..", "..", "..", "providers", "registry.json");
|
|
13
|
+
const raw = readFileSync(agentsPath, "utf8");
|
|
14
|
+
const parsed = JSON.parse(raw);
|
|
15
|
+
return parsed.agents ?? [];
|
|
16
|
+
}
|
|
17
|
+
let _cached = null;
|
|
18
|
+
function all() {
|
|
19
|
+
if (!_cached)
|
|
20
|
+
_cached = loadAgentsFile();
|
|
21
|
+
return _cached;
|
|
22
|
+
}
|
|
23
|
+
/** Find substrate by canonical id or alias. */
|
|
24
|
+
export function findSubstrate(id) {
|
|
25
|
+
const normalised = id.toLowerCase();
|
|
26
|
+
return (all().find((s) => s.agent_id.toLowerCase() === normalised ||
|
|
27
|
+
s.runtime_id?.toLowerCase() === normalised ||
|
|
28
|
+
s.aliases?.some((a) => a.toLowerCase() === normalised)) ?? null);
|
|
29
|
+
}
|
|
30
|
+
/** All substrates suitable for a given role. */
|
|
31
|
+
export function substratesForRole(role) {
|
|
32
|
+
return all().filter((s) => s.ideal_roles.includes(role));
|
|
33
|
+
}
|
|
34
|
+
/** All substrates suitable for a given stage. */
|
|
35
|
+
export function substratesForStage(stage) {
|
|
36
|
+
return all().filter((s) => s.ideal_stages.includes(stage));
|
|
37
|
+
}
|
|
38
|
+
/** Substrates at or below the specified cost ceiling. */
|
|
39
|
+
export function substratesByCost(maxCost) {
|
|
40
|
+
const order = ["free", "low", "medium", "high"];
|
|
41
|
+
const ceiling = order.indexOf(maxCost);
|
|
42
|
+
return all().filter((s) => order.indexOf(s.cost_class) <= ceiling);
|
|
43
|
+
}
|
|
44
|
+
/** All substrates that support MCP (can write back mid-session). */
|
|
45
|
+
export function substratesWithMcp() {
|
|
46
|
+
return all().filter((s) => s.supports_mcp);
|
|
47
|
+
}
|
|
48
|
+
/** All registered substrates. */
|
|
49
|
+
export function allSubstrates() {
|
|
50
|
+
return [...all()];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=capability-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-registry.js","sourceRoot":"","sources":["../../src/routing/capability-registry.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,oFAAoF;AACpF,yEAAyE;AACzE,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA6DzC,iFAAiF;AAEjF,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,sFAAsF;IACtF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IAC7C,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,IAAI,OAAO,GAAiC,IAAI,CAAC;AAEjD,SAAS,GAAG;IACV,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,cAAc,EAAE,CAAC;IACzC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,CACL,GAAG,EAAE,CAAC,IAAI,CACR,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,UAAU;QACvC,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU;QAC1C,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CACzD,IAAI,IAAI,CACV,CAAC;AACJ,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAC/C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,OAAkB;IACjD,MAAM,KAAK,GAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type SubstrateCapability, type AgentRole, type TaskStage, type CostClass } from "./capability-registry.js";
|
|
2
|
+
export { substratesForRole, substratesForStage, } from "./capability-registry.js";
|
|
3
|
+
export type ExecutionTarget = {
|
|
4
|
+
kind: "cli";
|
|
5
|
+
agent_id: string;
|
|
6
|
+
script: string;
|
|
7
|
+
} | {
|
|
8
|
+
kind: "agent_framework";
|
|
9
|
+
endpoint: string;
|
|
10
|
+
adapter: string;
|
|
11
|
+
} | {
|
|
12
|
+
kind: "api";
|
|
13
|
+
endpoint: string;
|
|
14
|
+
} | {
|
|
15
|
+
kind: "deterministic";
|
|
16
|
+
fn: string;
|
|
17
|
+
} | {
|
|
18
|
+
kind: "unresolvable";
|
|
19
|
+
reason: string;
|
|
20
|
+
};
|
|
21
|
+
export interface RoutingRequest {
|
|
22
|
+
task_id: string;
|
|
23
|
+
preferred_role?: AgentRole;
|
|
24
|
+
preferred_stage?: TaskStage;
|
|
25
|
+
max_cost?: CostClass;
|
|
26
|
+
require_mcp?: boolean;
|
|
27
|
+
require_review?: boolean;
|
|
28
|
+
preferred_runtime?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface RoutingDecision {
|
|
31
|
+
target: ExecutionTarget;
|
|
32
|
+
substrate?: SubstrateCapability;
|
|
33
|
+
reason: string;
|
|
34
|
+
candidates: SubstrateCapability[];
|
|
35
|
+
fallback_order: string[];
|
|
36
|
+
}
|
|
37
|
+
export declare function resolveTarget(req: RoutingRequest): RoutingDecision;
|
|
38
|
+
/** Resolve the best builder for a task. */
|
|
39
|
+
export declare function resolveBuilder(opts?: Partial<RoutingRequest>): RoutingDecision;
|
|
40
|
+
/** Resolve the best reviewer for a task. */
|
|
41
|
+
export declare function resolveReviewer(opts?: Partial<RoutingRequest>): RoutingDecision;
|
|
42
|
+
//# sourceMappingURL=runtime-target-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-target-resolver.d.ts","sourceRoot":"","sources":["../../src/routing/runtime-target-resolver.ts"],"names":[],"mappings":"AAcA,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAgCD,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe,CAiFlE;AAID,2CAA2C;AAC3C,wBAAgB,cAAc,CAC5B,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC7B,eAAe,CAMjB;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAC7B,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC7B,eAAe,CAOjB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// runtime-target-resolver.ts — How does Datacore decide which substrate executes a task?
|
|
2
|
+
// Layer 2: Routing. The decision engine between control (what should happen)
|
|
3
|
+
// and execution substrates (who does the work).
|
|
4
|
+
//
|
|
5
|
+
// Resolution order:
|
|
6
|
+
// 1. Explicit override in task context (task.preferred_runtime)
|
|
7
|
+
// 2. Role-fit scoring using capability registry
|
|
8
|
+
// 3. Cost policy (prefer free/low unless override)
|
|
9
|
+
// 4. Reliability class
|
|
10
|
+
// 5. Fallback to default substrate per role
|
|
11
|
+
//
|
|
12
|
+
// When Microsoft Agent Framework is integrated, it registers as a substrate here.
|
|
13
|
+
// No dispatch logic lives here — only the decision.
|
|
14
|
+
import { findSubstrate, substratesByCost, allSubstrates, } from "./capability-registry.js";
|
|
15
|
+
// Re-export registry helpers so callers only need to import from routing/
|
|
16
|
+
export { substratesForRole, substratesForStage, } from "./capability-registry.js";
|
|
17
|
+
// ─── Scoring ─────────────────────────────────────────────────────────────────
|
|
18
|
+
const COST_SCORE = {
|
|
19
|
+
free: 4,
|
|
20
|
+
low: 3,
|
|
21
|
+
medium: 2,
|
|
22
|
+
high: 1,
|
|
23
|
+
};
|
|
24
|
+
function scoreSubstrate(s, req) {
|
|
25
|
+
let score = 0;
|
|
26
|
+
if (req.preferred_role && s.ideal_roles.includes(req.preferred_role))
|
|
27
|
+
score += 10;
|
|
28
|
+
if (req.preferred_stage && s.ideal_stages.includes(req.preferred_stage))
|
|
29
|
+
score += 5;
|
|
30
|
+
if (req.require_mcp && s.supports_mcp)
|
|
31
|
+
score += 3;
|
|
32
|
+
if (req.require_review && s.supports_review_mode)
|
|
33
|
+
score += 3;
|
|
34
|
+
score += COST_SCORE[s.cost_class] ?? 1;
|
|
35
|
+
const reliability = s.reliability_class;
|
|
36
|
+
if (reliability === "high")
|
|
37
|
+
score += 2;
|
|
38
|
+
else if (reliability === "medium")
|
|
39
|
+
score += 1;
|
|
40
|
+
return score;
|
|
41
|
+
}
|
|
42
|
+
// ─── Resolver ────────────────────────────────────────────────────────────────
|
|
43
|
+
export function resolveTarget(req) {
|
|
44
|
+
// 1. Explicit override
|
|
45
|
+
if (req.preferred_runtime) {
|
|
46
|
+
const explicit = findSubstrate(req.preferred_runtime);
|
|
47
|
+
if (explicit?.script) {
|
|
48
|
+
return {
|
|
49
|
+
target: {
|
|
50
|
+
kind: "cli",
|
|
51
|
+
agent_id: explicit.agent_id,
|
|
52
|
+
script: explicit.script,
|
|
53
|
+
},
|
|
54
|
+
substrate: explicit,
|
|
55
|
+
reason: `explicit preferred_runtime: ${req.preferred_runtime}`,
|
|
56
|
+
candidates: [explicit],
|
|
57
|
+
fallback_order: [],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
target: {
|
|
62
|
+
kind: "unresolvable",
|
|
63
|
+
reason: `preferred_runtime '${req.preferred_runtime}' not found in registry`,
|
|
64
|
+
},
|
|
65
|
+
reason: "explicit runtime not found",
|
|
66
|
+
candidates: [],
|
|
67
|
+
fallback_order: [],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// 2. Build candidate pool
|
|
71
|
+
let pool = allSubstrates();
|
|
72
|
+
if (req.preferred_role)
|
|
73
|
+
pool = pool.filter((s) => s.ideal_roles.includes(req.preferred_role));
|
|
74
|
+
if (req.preferred_stage)
|
|
75
|
+
pool = pool.filter((s) => s.ideal_stages.includes(req.preferred_stage));
|
|
76
|
+
if (req.require_mcp)
|
|
77
|
+
pool = pool.filter((s) => s.supports_mcp);
|
|
78
|
+
if (req.require_review)
|
|
79
|
+
pool = pool.filter((s) => s.supports_review_mode);
|
|
80
|
+
if (req.max_cost)
|
|
81
|
+
pool = substratesByCost(req.max_cost).filter((s) => pool.includes(s));
|
|
82
|
+
if (pool.length === 0) {
|
|
83
|
+
return {
|
|
84
|
+
target: {
|
|
85
|
+
kind: "unresolvable",
|
|
86
|
+
reason: "no substrate satisfies all constraints",
|
|
87
|
+
},
|
|
88
|
+
reason: "no candidates after filtering",
|
|
89
|
+
candidates: [],
|
|
90
|
+
fallback_order: [],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// 3. Score and rank
|
|
94
|
+
const ranked = pool
|
|
95
|
+
.map((s) => ({ s, score: scoreSubstrate(s, req) }))
|
|
96
|
+
.sort((a, b) => b.score - a.score);
|
|
97
|
+
const winner = ranked[0].s;
|
|
98
|
+
const fallback = ranked.slice(1).map((r) => r.s.agent_id);
|
|
99
|
+
if (winner.script) {
|
|
100
|
+
return {
|
|
101
|
+
target: { kind: "cli", agent_id: winner.agent_id, script: winner.script },
|
|
102
|
+
substrate: winner,
|
|
103
|
+
reason: `scored winner (${ranked[0].score} pts) from ${pool.length} candidates`,
|
|
104
|
+
candidates: pool,
|
|
105
|
+
fallback_order: fallback,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Substrate exists in registry but has no script — future substrate (e.g. Agent Framework)
|
|
109
|
+
return {
|
|
110
|
+
target: {
|
|
111
|
+
kind: "agent_framework",
|
|
112
|
+
endpoint: "pending",
|
|
113
|
+
adapter: winner.agent_id,
|
|
114
|
+
},
|
|
115
|
+
substrate: winner,
|
|
116
|
+
reason: `substrate ${winner.agent_id} registered without CLI script — Agent Framework target`,
|
|
117
|
+
candidates: pool,
|
|
118
|
+
fallback_order: fallback,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// ─── Convenience helpers ─────────────────────────────────────────────────────
|
|
122
|
+
/** Resolve the best builder for a task. */
|
|
123
|
+
export function resolveBuilder(opts) {
|
|
124
|
+
return resolveTarget({
|
|
125
|
+
task_id: opts?.task_id ?? "unknown",
|
|
126
|
+
preferred_role: "builder",
|
|
127
|
+
...opts,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/** Resolve the best reviewer for a task. */
|
|
131
|
+
export function resolveReviewer(opts) {
|
|
132
|
+
return resolveTarget({
|
|
133
|
+
task_id: opts?.task_id ?? "unknown",
|
|
134
|
+
preferred_role: "reviewer",
|
|
135
|
+
require_review: true,
|
|
136
|
+
...opts,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=runtime-target-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-target-resolver.js","sourceRoot":"","sources":["../../src/routing/runtime-target-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface AzureSearchConfig {
|
|
2
|
+
endpoint: string;
|
|
3
|
+
key: string;
|
|
4
|
+
indexName: string;
|
|
5
|
+
openAiEndpoint: string;
|
|
6
|
+
openAiKey: string;
|
|
7
|
+
openAiDeployment: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AzureSearchResult {
|
|
10
|
+
eventId: string | null;
|
|
11
|
+
timestamp: string | null;
|
|
12
|
+
source: string | null;
|
|
13
|
+
type: string | null;
|
|
14
|
+
content: string | null;
|
|
15
|
+
score: number;
|
|
16
|
+
}
|
|
17
|
+
export interface AzureSearchOutput {
|
|
18
|
+
query: string;
|
|
19
|
+
mode: string;
|
|
20
|
+
indexName: string;
|
|
21
|
+
totalResults: number;
|
|
22
|
+
results: AzureSearchResult[];
|
|
23
|
+
}
|
|
24
|
+
export declare function isAzureSearchEnabled(): boolean;
|
|
25
|
+
export declare function isAzureOpenAIEnabled(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Embed a text string using Azure OpenAI.
|
|
28
|
+
* Returns a 1536-dim vector (text-embedding-ada-002) or null if not configured.
|
|
29
|
+
*/
|
|
30
|
+
export declare function embedText(text: string): Promise<number[] | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Index a single Bronze event into Azure AI Search.
|
|
33
|
+
* Silently skips if Azure Search is not configured.
|
|
34
|
+
* Skips embedding if Azure OpenAI is not configured (text-only index).
|
|
35
|
+
*/
|
|
36
|
+
export declare function indexEvent(record: {
|
|
37
|
+
_event_id?: string;
|
|
38
|
+
source?: string;
|
|
39
|
+
type?: string;
|
|
40
|
+
content?: string;
|
|
41
|
+
_timestamp?: string;
|
|
42
|
+
context?: unknown;
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Run a vector + keyword hybrid search against Azure AI Search.
|
|
46
|
+
*/
|
|
47
|
+
export declare function vectorSearch(query: string, options?: {
|
|
48
|
+
numResults?: number;
|
|
49
|
+
source?: string;
|
|
50
|
+
type?: string;
|
|
51
|
+
mode?: "hybrid" | "semantic";
|
|
52
|
+
}): Promise<AzureSearchOutput>;
|
|
53
|
+
//# sourceMappingURL=azure-search-client.d.ts.map
|