@xenosystem/agent-interface-core 0.1.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.
Files changed (122) hide show
  1. package/LICENSE +67 -0
  2. package/dist/agentDiscovery.d.ts +97 -0
  3. package/dist/agentDiscovery.d.ts.map +1 -0
  4. package/dist/agentDiscovery.js +93 -0
  5. package/dist/agentDiscovery.js.map +1 -0
  6. package/dist/capabilityRouting.d.ts +72 -0
  7. package/dist/capabilityRouting.d.ts.map +1 -0
  8. package/dist/capabilityRouting.js +124 -0
  9. package/dist/capabilityRouting.js.map +1 -0
  10. package/dist/capabilityTier.d.ts +105 -0
  11. package/dist/capabilityTier.d.ts.map +1 -0
  12. package/dist/capabilityTier.js +120 -0
  13. package/dist/capabilityTier.js.map +1 -0
  14. package/dist/combinationVerification.d.ts +101 -0
  15. package/dist/combinationVerification.d.ts.map +1 -0
  16. package/dist/combinationVerification.js +115 -0
  17. package/dist/combinationVerification.js.map +1 -0
  18. package/dist/context/agentAttachedContextPrompt.d.ts +13 -0
  19. package/dist/context/agentAttachedContextPrompt.d.ts.map +1 -0
  20. package/dist/context/agentAttachedContextPrompt.js +50 -0
  21. package/dist/context/agentAttachedContextPrompt.js.map +1 -0
  22. package/dist/context/agentModelContext.d.ts +77 -0
  23. package/dist/context/agentModelContext.d.ts.map +1 -0
  24. package/dist/context/agentModelContext.js +297 -0
  25. package/dist/context/agentModelContext.js.map +1 -0
  26. package/dist/fanOutPlanner.d.ts +65 -0
  27. package/dist/fanOutPlanner.d.ts.map +1 -0
  28. package/dist/fanOutPlanner.js +78 -0
  29. package/dist/fanOutPlanner.js.map +1 -0
  30. package/dist/fleetBoardProjection.d.ts +143 -0
  31. package/dist/fleetBoardProjection.d.ts.map +1 -0
  32. package/dist/fleetBoardProjection.js +156 -0
  33. package/dist/fleetBoardProjection.js.map +1 -0
  34. package/dist/fleetProjection.d.ts +63 -0
  35. package/dist/fleetProjection.d.ts.map +1 -0
  36. package/dist/fleetProjection.js +86 -0
  37. package/dist/fleetProjection.js.map +1 -0
  38. package/dist/hostBackedCapabilities.d.ts +50 -0
  39. package/dist/hostBackedCapabilities.d.ts.map +1 -0
  40. package/dist/hostBackedCapabilities.js +66 -0
  41. package/dist/hostBackedCapabilities.js.map +1 -0
  42. package/dist/index.d.ts +54 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +134 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/intakeBoardProjection.d.ts +75 -0
  47. package/dist/intakeBoardProjection.d.ts.map +1 -0
  48. package/dist/intakeBoardProjection.js +90 -0
  49. package/dist/intakeBoardProjection.js.map +1 -0
  50. package/dist/intakeClaim.d.ts +156 -0
  51. package/dist/intakeClaim.d.ts.map +1 -0
  52. package/dist/intakeClaim.js +190 -0
  53. package/dist/intakeClaim.js.map +1 -0
  54. package/dist/knowledgeBoardProjection.d.ts +57 -0
  55. package/dist/knowledgeBoardProjection.d.ts.map +1 -0
  56. package/dist/knowledgeBoardProjection.js +74 -0
  57. package/dist/knowledgeBoardProjection.js.map +1 -0
  58. package/dist/landingOverlap.d.ts +127 -0
  59. package/dist/landingOverlap.d.ts.map +1 -0
  60. package/dist/landingOverlap.js +107 -0
  61. package/dist/landingOverlap.js.map +1 -0
  62. package/dist/landingQueue.d.ts +152 -0
  63. package/dist/landingQueue.d.ts.map +1 -0
  64. package/dist/landingQueue.js +258 -0
  65. package/dist/landingQueue.js.map +1 -0
  66. package/dist/markdown/markdownWindowsPaths.d.ts +20 -0
  67. package/dist/markdown/markdownWindowsPaths.d.ts.map +1 -0
  68. package/dist/markdown/markdownWindowsPaths.js +208 -0
  69. package/dist/markdown/markdownWindowsPaths.js.map +1 -0
  70. package/dist/reviewProjection.d.ts +118 -0
  71. package/dist/reviewProjection.d.ts.map +1 -0
  72. package/dist/reviewProjection.js +133 -0
  73. package/dist/reviewProjection.js.map +1 -0
  74. package/dist/runDiff.d.ts +86 -0
  75. package/dist/runDiff.d.ts.map +1 -0
  76. package/dist/runDiff.js +103 -0
  77. package/dist/runDiff.js.map +1 -0
  78. package/dist/runtime/agentReasoningEffort.d.ts +22 -0
  79. package/dist/runtime/agentReasoningEffort.d.ts.map +1 -0
  80. package/dist/runtime/agentReasoningEffort.js +76 -0
  81. package/dist/runtime/agentReasoningEffort.js.map +1 -0
  82. package/dist/runtime/agentRuntimeProvider.d.ts +12 -0
  83. package/dist/runtime/agentRuntimeProvider.d.ts.map +1 -0
  84. package/dist/runtime/agentRuntimeProvider.js +294 -0
  85. package/dist/runtime/agentRuntimeProvider.js.map +1 -0
  86. package/dist/runtime/agentRuntimeProviderTypes.d.ts +100 -0
  87. package/dist/runtime/agentRuntimeProviderTypes.d.ts.map +1 -0
  88. package/dist/runtime/agentRuntimeProviderTypes.js +2 -0
  89. package/dist/runtime/agentRuntimeProviderTypes.js.map +1 -0
  90. package/dist/runtime/conversationRuntime.d.ts +53 -0
  91. package/dist/runtime/conversationRuntime.d.ts.map +1 -0
  92. package/dist/runtime/conversationRuntime.js +207 -0
  93. package/dist/runtime/conversationRuntime.js.map +1 -0
  94. package/dist/runtime/legacyAgentRuntimeEvents.d.ts +65 -0
  95. package/dist/runtime/legacyAgentRuntimeEvents.d.ts.map +1 -0
  96. package/dist/runtime/legacyAgentRuntimeEvents.js +104 -0
  97. package/dist/runtime/legacyAgentRuntimeEvents.js.map +1 -0
  98. package/dist/runtimeProjection.d.ts +19 -0
  99. package/dist/runtimeProjection.d.ts.map +1 -0
  100. package/dist/runtimeProjection.js +133 -0
  101. package/dist/runtimeProjection.js.map +1 -0
  102. package/dist/sessionBoardProjection.d.ts +84 -0
  103. package/dist/sessionBoardProjection.d.ts.map +1 -0
  104. package/dist/sessionBoardProjection.js +103 -0
  105. package/dist/sessionBoardProjection.js.map +1 -0
  106. package/dist/sessionMode.d.ts +115 -0
  107. package/dist/sessionMode.d.ts.map +1 -0
  108. package/dist/sessionMode.js +98 -0
  109. package/dist/sessionMode.js.map +1 -0
  110. package/dist/workspace/workspaceSelectionContinuation.d.ts +8 -0
  111. package/dist/workspace/workspaceSelectionContinuation.d.ts.map +1 -0
  112. package/dist/workspace/workspaceSelectionContinuation.js +18 -0
  113. package/dist/workspace/workspaceSelectionContinuation.js.map +1 -0
  114. package/dist/workspaceKnowledge.d.ts +90 -0
  115. package/dist/workspaceKnowledge.d.ts.map +1 -0
  116. package/dist/workspaceKnowledge.js +103 -0
  117. package/dist/workspaceKnowledge.js.map +1 -0
  118. package/dist/writeLease.d.ts +92 -0
  119. package/dist/writeLease.d.ts.map +1 -0
  120. package/dist/writeLease.js +108 -0
  121. package/dist/writeLease.js.map +1 -0
  122. package/package.json +29 -0
@@ -0,0 +1,297 @@
1
+ export const AGENT_MODEL_CONTEXT_STRATEGY_VERSION = 1;
2
+ const DEFAULT_HOT_MESSAGE_COUNT = 12;
3
+ const DEFAULT_MAX_HOT_MESSAGE_CHARACTERS = 8_000;
4
+ const DEFAULT_MAX_LATEST_MESSAGE_CHARACTERS = 20_000;
5
+ const DEFAULT_MAX_SYSTEM_CONTEXT_CHARACTERS = 9_000;
6
+ const DEFAULT_MAX_LEDGER_ITEMS = 28;
7
+ const DEFAULT_MAX_COLD_MEMORY_ITEMS = 32;
8
+ const MEMORY_ANCHOR_PATTERNS = [
9
+ /\bremember\b/i,
10
+ /\bdo not forget\b/i,
11
+ /\bdecision\b/i,
12
+ /\brequirement\b/i,
13
+ /\bconstraint\b/i,
14
+ /\bacceptance criteri(?:a|on)\b/i,
15
+ /\bmust\b/i,
16
+ /\bnever\b/i,
17
+ /\balways\b/i,
18
+ /\bpreference\b/i,
19
+ /\b(?:todo|to-do)\b/i,
20
+ /\b(?:called|named)\b/i,
21
+ /\bnonce\b/i,
22
+ ];
23
+ const QUERY_STOP_WORDS = new Set([
24
+ 'about', 'after', 'again', 'also', 'been', 'before', 'being', 'could', 'does',
25
+ 'from', 'have', 'into', 'just', 'more', 'only', 'other', 'please', 'should',
26
+ 'that', 'their', 'then', 'there', 'these', 'they', 'this', 'those', 'what',
27
+ 'when', 'where', 'which', 'with', 'would', 'your',
28
+ ]);
29
+ function estimateTokens(text) {
30
+ return Math.ceil(text.length / 4);
31
+ }
32
+ function contextDigest(value) {
33
+ let hash = 0x811c9dc5;
34
+ for (let index = 0; index < value.length; index += 1) {
35
+ hash = Math.imul(hash ^ value.charCodeAt(index), 0x01000193);
36
+ }
37
+ return `fnv1a32:${(hash >>> 0).toString(16).padStart(8, '0')}`;
38
+ }
39
+ function clampText(text, maxCharacters) {
40
+ if (text.length <= maxCharacters)
41
+ return text;
42
+ const headLength = Math.max(0, Math.floor(maxCharacters * 0.72));
43
+ const tailLength = Math.max(0, maxCharacters - headLength - 96);
44
+ const head = text.slice(0, headLength).trimEnd();
45
+ const tail = text.slice(text.length - tailLength).trimStart();
46
+ return `${head}\n\n[...compacted ${text.length - head.length - tail.length} chars; raw history remains saved...]\n\n${tail}`.trim();
47
+ }
48
+ function preview(value, maxCharacters = 180) {
49
+ if (value === null || value === undefined)
50
+ return '';
51
+ const text = typeof value === 'string'
52
+ ? value
53
+ : JSON.stringify(value);
54
+ return clampText(text.replace(/\s+/g, ' ').trim(), maxCharacters);
55
+ }
56
+ function formatDate(timestamp) {
57
+ if (!timestamp || !Number.isFinite(timestamp))
58
+ return '';
59
+ try {
60
+ return new Date(timestamp).toISOString();
61
+ }
62
+ catch {
63
+ return '';
64
+ }
65
+ }
66
+ function summarizeMessageForColdHistory(message) {
67
+ const when = formatDate(message.timestamp);
68
+ const label = message.role.toUpperCase();
69
+ const text = preview(message.content, 220);
70
+ const suffix = message.toolCalls?.length
71
+ ? ` tools=${message.toolCalls.map((tool) => tool.toolName).join(',')}`
72
+ : '';
73
+ return `- ${label}${when ? ` @ ${when}` : ''}: ${text || '(no text)'}${suffix}`;
74
+ }
75
+ function evenlySpacedIndices(length, count) {
76
+ if (length <= 0 || count <= 0)
77
+ return [];
78
+ if (length <= count)
79
+ return Array.from({ length }, (_, index) => index);
80
+ if (count === 1)
81
+ return [0];
82
+ return Array.from({ length: count }, (_, index) => (Math.round((index * (length - 1)) / (count - 1))));
83
+ }
84
+ function anchorScore(message) {
85
+ const text = message.content || '';
86
+ let score = message.role === 'user' ? 1 : 0;
87
+ for (const pattern of MEMORY_ANCHOR_PATTERNS) {
88
+ if (pattern.test(text))
89
+ score += 3;
90
+ }
91
+ if (/\b[A-Z][A-Z0-9_-]{4,}\b/.test(text))
92
+ score += 2;
93
+ if (message.attachments?.length)
94
+ score += 1;
95
+ return score;
96
+ }
97
+ function latestQueryTerms(messages) {
98
+ const latestUser = [...messages].reverse().find((message) => message.role === 'user');
99
+ const terms = (latestUser?.content.toLowerCase().match(/[a-z0-9][a-z0-9._-]{3,}/g) || [])
100
+ .filter((term) => !QUERY_STOP_WORDS.has(term));
101
+ return new Set(terms.slice(0, 48));
102
+ }
103
+ function relevanceScore(message, queryTerms) {
104
+ if (queryTerms.size === 0)
105
+ return 0;
106
+ const words = new Set(message.content.toLowerCase().match(/[a-z0-9][a-z0-9._-]{3,}/g) || []);
107
+ let score = 0;
108
+ for (const term of queryTerms) {
109
+ if (words.has(term))
110
+ score += 1;
111
+ }
112
+ return score;
113
+ }
114
+ function selectColdMemories(coldMessages, allMessages, maxItems) {
115
+ if (coldMessages.length === 0 || maxItems <= 0)
116
+ return [];
117
+ const selected = [];
118
+ const seen = new Set();
119
+ const add = (indexes, kind, limit) => {
120
+ let added = 0;
121
+ for (const index of indexes) {
122
+ if (selected.length >= maxItems || added >= limit || seen.has(index))
123
+ continue;
124
+ const message = coldMessages[index];
125
+ if (!message)
126
+ continue;
127
+ selected.push({ index, kind, message });
128
+ seen.add(index);
129
+ added += 1;
130
+ }
131
+ };
132
+ const anchorLimit = Math.min(8, maxItems);
133
+ const relevantLimit = Math.min(6, Math.max(0, maxItems - anchorLimit));
134
+ const milestoneLimit = Math.min(8, Math.max(0, maxItems - anchorLimit - relevantLimit));
135
+ const anchorIndexes = coldMessages
136
+ .map((message, index) => ({ index, score: anchorScore(message) }))
137
+ .filter((candidate) => candidate.score >= 3)
138
+ .sort((left, right) => right.score - left.score || left.index - right.index)
139
+ .map((candidate) => candidate.index);
140
+ add(anchorIndexes, 'anchor', anchorLimit);
141
+ const queryTerms = latestQueryTerms(allMessages);
142
+ const relevantIndexes = coldMessages
143
+ .map((message, index) => ({ index, score: relevanceScore(message, queryTerms) }))
144
+ .filter((candidate) => candidate.score > 0)
145
+ .sort((left, right) => right.score - left.score || right.index - left.index)
146
+ .map((candidate) => candidate.index);
147
+ add(relevantIndexes, 'relevant', relevantLimit);
148
+ add(evenlySpacedIndices(coldMessages.length, milestoneLimit), 'milestone', milestoneLimit);
149
+ const recentCandidateCount = Math.min(coldMessages.length, maxItems);
150
+ add(Array.from({ length: recentCandidateCount }, (_, index) => (coldMessages.length - recentCandidateCount + index)), 'recent', maxItems);
151
+ return selected;
152
+ }
153
+ function toolParamPath(params) {
154
+ if (!params)
155
+ return '';
156
+ const candidates = ['file_path', 'path', 'directory', 'cwd', 'command', 'query', 'appId'];
157
+ for (const key of candidates) {
158
+ const value = params[key];
159
+ if (typeof value === 'string' && value.trim())
160
+ return value.trim();
161
+ }
162
+ return '';
163
+ }
164
+ function summarizeToolCall(tool) {
165
+ const target = toolParamPath(tool.params);
166
+ const artifacts = (tool.artifacts || [])
167
+ .map((artifact) => `${artifact.type}:${artifact.label || artifact.value}=${artifact.value}`)
168
+ .filter(Boolean)
169
+ .slice(0, 3)
170
+ .join('; ');
171
+ const result = tool.result || tool.summary || '';
172
+ const parts = [
173
+ `${tool.toolName}${tool.success === false ? ' failed' : tool.status === 'done' ? ' ok' : ' running'}`,
174
+ target ? `target=${preview(target, 180)}` : '',
175
+ tool.cwd ? `cwd=${preview(tool.cwd, 180)}` : '',
176
+ artifacts ? `artifacts=${preview(artifacts, 320)}` : '',
177
+ result ? `result=${preview(result, 360)}` : '',
178
+ ].filter(Boolean);
179
+ return `- ${parts.join(' | ')}`;
180
+ }
181
+ function collectToolLedger(messages, maxLedgerItems) {
182
+ const ledger = [];
183
+ for (const message of messages) {
184
+ for (const tool of message.toolCalls || []) {
185
+ if (tool.status !== 'done' && tool.status !== 'running')
186
+ continue;
187
+ ledger.push(summarizeToolCall(tool));
188
+ }
189
+ }
190
+ if (ledger.length <= maxLedgerItems)
191
+ return ledger;
192
+ const selected = new Set();
193
+ for (const index of evenlySpacedIndices(ledger.length, Math.min(8, maxLedgerItems))) {
194
+ selected.add(index);
195
+ }
196
+ for (let index = ledger.length - 1; index >= 0 && selected.size < maxLedgerItems; index -= 1) {
197
+ selected.add(index);
198
+ }
199
+ return [...selected].sort((left, right) => left - right).slice(-maxLedgerItems).map((index) => ledger[index]);
200
+ }
201
+ function buildWorkspaceContext(input) {
202
+ if (!input)
203
+ return [];
204
+ const lines = [
205
+ input.workspaceName ? `- workspace: ${input.workspaceName}` : '',
206
+ input.teamName ? `- team: ${input.teamName}` : '',
207
+ input.agentName ? `- agent: ${input.agentName}` : '',
208
+ input.rootDirectory ? `- rootDirectory: ${input.rootDirectory}` : '',
209
+ ...(input.grantedDirectories || []).map((directory) => `- grantedDirectory: ${directory}`),
210
+ ...(input.activeTasks || []).slice(-8).map((task) => `- task: ${task.status || 'pending'} - ${task.text}`),
211
+ ...(input.checkpoints || []).slice(-5).map((checkpoint) => `- checkpoint: ${checkpoint.name}`),
212
+ ].filter(Boolean);
213
+ return lines;
214
+ }
215
+ export function appendAgentModelContextToSystemPrompt(systemPrompt, systemPromptContext) {
216
+ const base = (systemPrompt || '').trim();
217
+ const context = systemPromptContext.trim();
218
+ if (!context)
219
+ return base || undefined;
220
+ return base ? `${base}\n\n${context}` : context;
221
+ }
222
+ export function buildAgentModelContext(options) {
223
+ const hotMessageCount = options.hotMessageCount ?? DEFAULT_HOT_MESSAGE_COUNT;
224
+ const maxHotMessageCharacters = options.maxHotMessageCharacters ?? DEFAULT_MAX_HOT_MESSAGE_CHARACTERS;
225
+ const maxLatestMessageCharacters = options.maxLatestMessageCharacters ?? DEFAULT_MAX_LATEST_MESSAGE_CHARACTERS;
226
+ const maxSystemContextCharacters = options.maxSystemContextCharacters ?? DEFAULT_MAX_SYSTEM_CONTEXT_CHARACTERS;
227
+ const maxLedgerItems = options.maxLedgerItems ?? DEFAULT_MAX_LEDGER_ITEMS;
228
+ const maxColdMemoryItems = options.maxColdMemoryItems ?? DEFAULT_MAX_COLD_MEMORY_ITEMS;
229
+ const messages = options.messages.filter((message) => message.role === 'user' || message.role === 'assistant');
230
+ const hotStart = Math.max(0, messages.length - hotMessageCount);
231
+ const coldMessages = messages.slice(0, hotStart);
232
+ const hotMessages = messages.slice(hotStart);
233
+ const latestIndex = hotMessages.length - 1;
234
+ const sentMessages = hotMessages.map((message, index) => {
235
+ const limit = index === latestIndex ? maxLatestMessageCharacters : maxHotMessageCharacters;
236
+ const base = message.content || '';
237
+ const attachmentNotes = (message.attachments || []).map((attachment) => `[Attachment: ${attachment.name}]`).join('\n');
238
+ const content = attachmentNotes ? `${base}\n\n${attachmentNotes}`.trim() : base;
239
+ return {
240
+ role: message.role,
241
+ content: clampText(content, limit),
242
+ };
243
+ });
244
+ const workspaceLines = buildWorkspaceContext(options.workspaceState);
245
+ const coldMemories = selectColdMemories(coldMessages, messages, maxColdMemoryItems);
246
+ const anchorLines = coldMemories
247
+ .filter((memory) => memory.kind === 'anchor' || memory.kind === 'relevant')
248
+ .sort((left, right) => left.index - right.index)
249
+ .map((memory) => summarizeMessageForColdHistory(memory.message));
250
+ const milestoneLines = coldMemories
251
+ .filter((memory) => memory.kind === 'milestone')
252
+ .sort((left, right) => left.index - right.index)
253
+ .map((memory) => summarizeMessageForColdHistory(memory.message));
254
+ const recentColdLines = coldMemories
255
+ .filter((memory) => memory.kind === 'recent')
256
+ .sort((left, right) => left.index - right.index)
257
+ .map((memory) => summarizeMessageForColdHistory(memory.message));
258
+ const ledgerLines = collectToolLedger(messages, maxLedgerItems);
259
+ const rawCharacterCount = messages.reduce((total, message) => (total + (message.content || '').length + (message.toolCalls || []).reduce((toolTotal, tool) => (toolTotal + (tool.result || '').length + JSON.stringify(tool.params || {}).length), 0)), 0);
260
+ const sentCharacterCount = sentMessages.reduce((total, message) => total + message.content.length, 0);
261
+ const contextBlocks = [
262
+ 'XENO conversation memory for this turn:',
263
+ 'Raw chat, debug events, checkpoints, and full tool payloads remain persisted outside this compact model context.',
264
+ 'Use this memory as factual context only; the latest user message remains authoritative.',
265
+ workspaceLines.length ? '\nWorkspace state:\n' + workspaceLines.join('\n') : '',
266
+ anchorLines.length ? '\nDurable conversation anchors and query-relevant history:\n' + anchorLines.join('\n') : '',
267
+ milestoneLines.length ? '\nHistorical timeline milestones:\n' + milestoneLines.join('\n') : '',
268
+ ledgerLines.length ? '\nRecent artifact/tool ledger:\n' + ledgerLines.join('\n') : '',
269
+ recentColdLines.length ? '\nRecent compacted turns:\n' + recentColdLines.join('\n') : '',
270
+ ].filter(Boolean).join('\n');
271
+ const systemPromptContext = clampText(contextBlocks, maxSystemContextCharacters);
272
+ const dispatchedContext = JSON.stringify({
273
+ strategyVersion: AGENT_MODEL_CONTEXT_STRATEGY_VERSION,
274
+ messages: sentMessages,
275
+ systemPromptContext,
276
+ });
277
+ return {
278
+ messages: sentMessages,
279
+ systemPromptContext,
280
+ stats: {
281
+ strategyVersion: AGENT_MODEL_CONTEXT_STRATEGY_VERSION,
282
+ contextDigest: contextDigest(dispatchedContext),
283
+ rawMessageCount: messages.length,
284
+ sentMessageCount: sentMessages.length,
285
+ compactedMessageCount: coldMessages.length,
286
+ rawCharacterCount,
287
+ sentCharacterCount: sentCharacterCount + systemPromptContext.length,
288
+ estimatedRawTokens: estimateTokens(messages.map((message) => message.content).join('\n')),
289
+ estimatedSentTokens: estimateTokens(sentMessages.map((message) => message.content).join('\n') + '\n' + systemPromptContext),
290
+ retainedCompactedMessageCount: coldMemories.length,
291
+ retainedAnchorCount: anchorLines.length,
292
+ retainedArtifactCount: ledgerLines.length,
293
+ retainedGrantedDirectoryCount: options.workspaceState?.grantedDirectories?.length || 0,
294
+ },
295
+ };
296
+ }
297
+ //# sourceMappingURL=agentModelContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentModelContext.js","sourceRoot":"","sources":["../../src/context/agentModelContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Who runs what, when several tasks are dispatched at once — ADE §5.2's scheduler.
3
+ *
4
+ * §5.2 asks for "scheduler, router and capability matcher behind host methods".
5
+ * `routeByCapability` answers *who could*; this answers *who gets it*. Kept
6
+ * separate and PURE for the same reason the matcher is: a plan you can inspect
7
+ * before anything starts is reviewable, and a plan is exactly the thing a person
8
+ * wants to see before N agents begin editing their repository.
9
+ *
10
+ * It starts nothing and mutates nothing. Handing the result to something that
11
+ * executes is a separate, deliberate act.
12
+ *
13
+ * ## The three rules
14
+ *
15
+ * 1. **A task that cannot be routed is refused ON ITS OWN.** The batch still
16
+ * plans. Failing all five tasks because the third needs a capability nobody
17
+ * has is the shape that makes fan-out untrustworthy — a user cannot tell
18
+ * which task was the problem, and re-running the batch re-runs the four that
19
+ * were fine.
20
+ * 2. **Load is SPREAD, not stacked.** Every task is eligible for the same
21
+ * providers most of the time, so the obvious implementation — "first
22
+ * eligible" — sends the whole batch to one agent and leaves the fleet idle.
23
+ * That is not a performance nit: fan-out that does not fan out is the
24
+ * feature failing silently.
25
+ * 3. **The plan is DETERMINISTIC.** Same tasks, same catalog, same assignment.
26
+ * A scheduler that shuffles cannot be reviewed before it runs, cannot be
27
+ * tested without tolerating any answer, and cannot be explained afterwards.
28
+ */
29
+ import type { AgentHarnessCapability, AgentRuntimeProviderDescriptor } from '@xenosystem/agent-interface-contract';
30
+ export interface FanOutTask {
31
+ taskId: string;
32
+ requiredCapabilities?: AgentHarnessCapability[];
33
+ }
34
+ export interface FanOutAssignment {
35
+ taskId: string;
36
+ providerId: string;
37
+ /** Capabilities this provider serves degraded for THIS task. Carried through
38
+ * so the plan shows a worse-but-possible run as such, rather than hiding it
39
+ * behind a successful-looking assignment. */
40
+ degraded: AgentHarnessCapability[];
41
+ }
42
+ export interface FanOutRefusal {
43
+ taskId: string;
44
+ /** Why nothing can run it — the same named reason the matcher produces. */
45
+ reason: string;
46
+ }
47
+ export interface FanOutPlan {
48
+ assignments: FanOutAssignment[];
49
+ refusals: FanOutRefusal[];
50
+ /**
51
+ * How many tasks each provider was given. Present so a caller can SEE the
52
+ * spread rather than trust it — a plan that stacked everything on one agent
53
+ * looks identical to a balanced one from the assignment list alone.
54
+ */
55
+ loadByProvider: Record<string, number>;
56
+ }
57
+ /**
58
+ * Plans a fan-out without starting anything.
59
+ *
60
+ * Tasks are planned in the order given, and each is assigned to its
61
+ * least-loaded eligible provider. Ties break on the provider order from the
62
+ * catalog, which is what makes the whole plan reproducible.
63
+ */
64
+ export declare function planFanOut(providers: readonly AgentRuntimeProviderDescriptor[], tasks: readonly FanOutTask[]): FanOutPlan;
65
+ //# sourceMappingURL=fanOutPlanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanOutPlanner.d.ts","sourceRoot":"","sources":["../src/fanOutPlanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,sCAAsC,CAAA;AAI7C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB,CAAC,EAAE,sBAAsB,EAAE,CAAA;CAChD;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB;;kDAE8C;IAC9C,QAAQ,EAAE,sBAAsB,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,gBAAgB,EAAE,CAAA;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,SAAS,8BAA8B,EAAE,EACpD,KAAK,EAAE,SAAS,UAAU,EAAE,GAC3B,UAAU,CA8CZ"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Who runs what, when several tasks are dispatched at once — ADE §5.2's scheduler.
3
+ *
4
+ * §5.2 asks for "scheduler, router and capability matcher behind host methods".
5
+ * `routeByCapability` answers *who could*; this answers *who gets it*. Kept
6
+ * separate and PURE for the same reason the matcher is: a plan you can inspect
7
+ * before anything starts is reviewable, and a plan is exactly the thing a person
8
+ * wants to see before N agents begin editing their repository.
9
+ *
10
+ * It starts nothing and mutates nothing. Handing the result to something that
11
+ * executes is a separate, deliberate act.
12
+ *
13
+ * ## The three rules
14
+ *
15
+ * 1. **A task that cannot be routed is refused ON ITS OWN.** The batch still
16
+ * plans. Failing all five tasks because the third needs a capability nobody
17
+ * has is the shape that makes fan-out untrustworthy — a user cannot tell
18
+ * which task was the problem, and re-running the batch re-runs the four that
19
+ * were fine.
20
+ * 2. **Load is SPREAD, not stacked.** Every task is eligible for the same
21
+ * providers most of the time, so the obvious implementation — "first
22
+ * eligible" — sends the whole batch to one agent and leaves the fleet idle.
23
+ * That is not a performance nit: fan-out that does not fan out is the
24
+ * feature failing silently.
25
+ * 3. **The plan is DETERMINISTIC.** Same tasks, same catalog, same assignment.
26
+ * A scheduler that shuffles cannot be reviewed before it runs, cannot be
27
+ * tested without tolerating any answer, and cannot be explained afterwards.
28
+ */
29
+ import { routeByCapability } from './capabilityRouting.js';
30
+ /**
31
+ * Plans a fan-out without starting anything.
32
+ *
33
+ * Tasks are planned in the order given, and each is assigned to its
34
+ * least-loaded eligible provider. Ties break on the provider order from the
35
+ * catalog, which is what makes the whole plan reproducible.
36
+ */
37
+ export function planFanOut(providers, tasks) {
38
+ const assignments = [];
39
+ const refusals = [];
40
+ const load = new Map();
41
+ // Seeded with every provider at 0 so `loadByProvider` reports idle agents as
42
+ // idle. Omitting them would make an unbalanced plan and a small fleet look
43
+ // the same, which is the thing the field exists to distinguish.
44
+ for (const provider of providers)
45
+ load.set(provider.id, 0);
46
+ // Catalog position, for deterministic tie-breaking.
47
+ const order = new Map(providers.map((provider, index) => [provider.id, index]));
48
+ for (const task of tasks) {
49
+ const decision = routeByCapability(providers, task.requiredCapabilities ?? []);
50
+ if (!decision.routable) {
51
+ // Rule 1: this task alone. The rest of the batch still plans.
52
+ refusals.push({ taskId: task.taskId, reason: decision.reason });
53
+ continue;
54
+ }
55
+ // Rule 2 + 3: least-loaded, ties broken by catalog order.
56
+ let chosen = decision.matches[0];
57
+ for (const candidate of decision.matches) {
58
+ const candidateLoad = load.get(candidate.providerId) ?? 0;
59
+ const chosenLoad = load.get(chosen.providerId) ?? 0;
60
+ if (candidateLoad < chosenLoad) {
61
+ chosen = candidate;
62
+ continue;
63
+ }
64
+ if (candidateLoad === chosenLoad &&
65
+ (order.get(candidate.providerId) ?? 0) < (order.get(chosen.providerId) ?? 0)) {
66
+ chosen = candidate;
67
+ }
68
+ }
69
+ load.set(chosen.providerId, (load.get(chosen.providerId) ?? 0) + 1);
70
+ assignments.push({
71
+ taskId: task.taskId,
72
+ providerId: chosen.providerId,
73
+ degraded: [...chosen.degraded],
74
+ });
75
+ }
76
+ return { assignments, refusals, loadByProvider: Object.fromEntries(load) };
77
+ }
78
+ //# sourceMappingURL=fanOutPlanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanOutPlanner.js","sourceRoot":"","sources":["../src/fanOutPlanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAiC1D;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,SAAoD,EACpD,KAA4B;IAE5B,MAAM,WAAW,GAAuB,EAAE,CAAA;IAC1C,MAAM,QAAQ,GAAoB,EAAE,CAAA;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;IACtC,6EAA6E;IAC7E,2EAA2E;IAC3E,gEAAgE;IAChE,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAE1D,oDAAoD;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE/E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;QAC9E,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,8DAA8D;YAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YAC/D,SAAQ;QACV,CAAC;QAED,0DAA0D;QAC1D,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,CAAA;QACjC,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACnD,IAAI,aAAa,GAAG,UAAU,EAAE,CAAC;gBAC/B,MAAM,GAAG,SAAS,CAAA;gBAClB,SAAQ;YACV,CAAC;YACD,IACE,aAAa,KAAK,UAAU;gBAC5B,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAC5E,CAAC;gBACD,MAAM,GAAG,SAAS,CAAA;YACpB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACnE,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAA;AAC5E,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * What a fleet surface may SHOW — ADE §9 step 6, the presentation half.
3
+ *
4
+ * `fleet.view` answers what the host knows. This decides what a person is told,
5
+ * and in what order. Pure, in `core`, for the same reason `reviewProjection`
6
+ * is: every rule here is about honesty rather than layout, and an honesty rule
7
+ * written in JSX is enforced by whoever writes the next component.
8
+ *
9
+ * ## 🔴 The board is ordered by what needs a human, not by name
10
+ *
11
+ * A fleet view exists to answer one question — *where do I need to look?* Sorted
12
+ * alphabetically it answers a different, useless one. So rows are ranked by
13
+ * attention: a run blocked on a live collision first, then one whose changes
14
+ * another run also touched, then one whose diff has a hole, then whatever is
15
+ * merely working.
16
+ *
17
+ * Ties break on run id so the order is STABLE. A board that reshuffles between
18
+ * polls is unusable for the thing a board is for — noticing what changed.
19
+ *
20
+ * ## Unobserved is its own status
21
+ *
22
+ * `diffComplete` is absent when nobody watched a run, and that is a third state
23
+ * beside complete and incomplete. Folding it into either lies in a different
24
+ * direction each way: "complete" claims a diff nobody collected, "incomplete"
25
+ * sends someone to fix an observation problem that does not exist.
26
+ */
27
+ /** Mirrors `AgentFleetRun` on the wire, redeclared so `core` stays contract-free
28
+ * in the direction that matters — this package is imported by surfaces that
29
+ * never speak the host protocol directly. */
30
+ export interface FleetBoardRunInput {
31
+ runId: string;
32
+ conversationId?: string;
33
+ workspaceId?: string;
34
+ agentId?: string;
35
+ working: boolean;
36
+ claims: string[];
37
+ changes?: {
38
+ added: number;
39
+ modified: number;
40
+ deleted: number;
41
+ };
42
+ diffComplete?: boolean;
43
+ contestedPaths: string[];
44
+ intakeItemId?: string;
45
+ /** Stopped on a permission prompt. Absent when there is no roster to ask. */
46
+ awaitingApproval?: boolean;
47
+ /**
48
+ * Messages withheld from this run, awaiting a human (§6 `hold`).
49
+ *
50
+ * Absent when there is no roster to ask. Separate from `awaitingApproval`:
51
+ * that stops the RUN, this stops a message TO it.
52
+ */
53
+ heldMessages?: number;
54
+ inboundPolicy?: 'accept' | 'hold' | 'refuse';
55
+ isolation?: 'none' | 'sandboxed' | 'unknown';
56
+ isolationMechanism?: string;
57
+ }
58
+ export interface FleetBoardCollisionInput {
59
+ scope: string;
60
+ wantedByRunId: string;
61
+ heldByRunId: string;
62
+ at: string;
63
+ stillHeld: boolean;
64
+ }
65
+ export interface FleetBoardInput {
66
+ runs: FleetBoardRunInput[];
67
+ collisions: FleetBoardCollisionInput[];
68
+ coordinationComplete: boolean;
69
+ observationComplete: boolean;
70
+ problems: string[];
71
+ }
72
+ /**
73
+ * Why a run is at the top of the board, or that it is not.
74
+ *
75
+ * Ordered by urgency, and the numbers are deliberate: the projection sorts on
76
+ * them, so adding a status between two others is a one-line change rather than
77
+ * a re-reading of a comparator.
78
+ */
79
+ export declare const FLEET_ATTENTION: {
80
+ /**
81
+ * 🔴 ABOVE `blocked`, deliberately.
82
+ *
83
+ * Both are stopped, but only one of them the reader can clear. A path
84
+ * collision waits on another RUN finishing; a permission prompt waits on the
85
+ * person looking at this board, and every second it sits below something they
86
+ * cannot act on is a second of nothing happening for no reason.
87
+ */
88
+ readonly 'awaiting-approval': 0;
89
+ readonly blocked: 1;
90
+ readonly contested: 2;
91
+ readonly incomplete: 3;
92
+ readonly working: 4;
93
+ readonly unobserved: 5;
94
+ readonly idle: 6;
95
+ };
96
+ export type FleetAttention = keyof typeof FLEET_ATTENTION;
97
+ export interface FleetBoardRow {
98
+ runId: string;
99
+ attention: FleetAttention;
100
+ working: boolean;
101
+ claims: string[];
102
+ contestedPaths: string[];
103
+ /** §5.1 provenance: the intake item this run came from, when it did. */
104
+ intakeItemId?: string;
105
+ /** Absent when the run is not observed — never zeroed. */
106
+ changes?: {
107
+ added: number;
108
+ modified: number;
109
+ deleted: number;
110
+ };
111
+ /**
112
+ * How many messages are withheld from this run pending approval.
113
+ *
114
+ * Absent when unknowable, and rendered only when > 0: a row reading
115
+ * "0 awaiting approval" is noise on every run that has none.
116
+ */
117
+ heldMessages?: number;
118
+ inboundPolicy?: 'accept' | 'hold' | 'refuse';
119
+ isolation?: 'none' | 'sandboxed' | 'unknown';
120
+ isolationMechanism?: string;
121
+ /** One line saying why this row is where it is. */
122
+ headline: string;
123
+ /** True only when this run's changes may be treated as the whole story. */
124
+ diffTrustworthy: boolean;
125
+ }
126
+ export interface FleetBoard {
127
+ rows: FleetBoardRow[];
128
+ /** Collisions a person can still act on — the holder has not released. */
129
+ liveCollisions: FleetBoardCollisionInput[];
130
+ /** Collisions that resolved. Kept: "nobody collided" and "a collision happened
131
+ * and was handled" are different histories. */
132
+ resolvedCollisions: FleetBoardCollisionInput[];
133
+ /**
134
+ * Present whenever the board is not the whole picture. A fleet view that
135
+ * showed three collisions when five happened would be read as "mostly fine",
136
+ * so the limit is stated rather than implied by a short list.
137
+ */
138
+ notice?: string;
139
+ /** True only when nothing is known to be missing. */
140
+ trustworthy: boolean;
141
+ }
142
+ export declare function projectFleetBoard(input: FleetBoardInput): FleetBoard;
143
+ //# sourceMappingURL=fleetBoardProjection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleetBoardProjection.d.ts","sourceRoot":"","sources":["../src/fleetBoardProjection.ts"],"names":[],"mappings":"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"}