iranti 0.3.30 → 0.3.32
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 +43 -0
- package/dist/src/api/server.js +208 -32
- package/dist/src/api/server.js.map +1 -1
- package/dist/src/attendant/AttendantInstance.d.ts +17 -0
- package/dist/src/attendant/AttendantInstance.d.ts.map +1 -1
- package/dist/src/attendant/AttendantInstance.js +279 -0
- package/dist/src/attendant/AttendantInstance.js.map +1 -1
- package/dist/src/staff/subTurnLoop.d.ts +47 -0
- package/dist/src/staff/subTurnLoop.d.ts.map +1 -0
- package/dist/src/staff/subTurnLoop.js +259 -0
- package/dist/src/staff/subTurnLoop.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export type SubTurnLoopOutcome = 'declined_phase' | 'declined_post_response' | 'declined_no_partial' | 'declined_too_short' | 'declined_no_new_tokens' | 'budget_exhausted' | 'attempted_empty' | 'attempted_added';
|
|
2
|
+
export interface SubTurnLoopPlan {
|
|
3
|
+
outcome: SubTurnLoopOutcome;
|
|
4
|
+
attempted: boolean;
|
|
5
|
+
partialResponseLength: number;
|
|
6
|
+
initialFactCount: number;
|
|
7
|
+
addedFactCount: number;
|
|
8
|
+
rescoreTokens: string[];
|
|
9
|
+
proposedHints: string[];
|
|
10
|
+
budgetMax: number;
|
|
11
|
+
reason: string;
|
|
12
|
+
note: string;
|
|
13
|
+
}
|
|
14
|
+
export interface PlanSubTurnLoopInput {
|
|
15
|
+
phase?: 'pre-response' | 'mid-turn' | 'post-response';
|
|
16
|
+
partialResponse?: string;
|
|
17
|
+
latestMessage?: string;
|
|
18
|
+
originalEntityHints: readonly string[];
|
|
19
|
+
initialFactCount: number;
|
|
20
|
+
/** Max retry budget (default 1). Caller fires one extra observe when attempted=true. */
|
|
21
|
+
budget?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const SUB_TURN_LOOP_DEFAULT_BUDGET = 1;
|
|
24
|
+
export declare const SUB_TURN_LOOP_MIN_PARTIAL_LENGTH = 40;
|
|
25
|
+
export declare const SUB_TURN_LOOP_MAX_RESCORE_TOKENS = 5;
|
|
26
|
+
export declare const SUB_TURN_LOOP_MAX_PROPOSED_HINTS = 3;
|
|
27
|
+
export declare const SUB_TURN_LOOP_MIN_TOKEN_LENGTH = 4;
|
|
28
|
+
/**
|
|
29
|
+
* Pure function. Decides whether the Attendant should run a bounded sub-turn
|
|
30
|
+
* retrieval retry against its own partial response. Never calls observe().
|
|
31
|
+
* Never hits I/O.
|
|
32
|
+
*
|
|
33
|
+
* Gate order:
|
|
34
|
+
* 1. Phase gate — post-response and pre-response reject immediately. M6 only
|
|
35
|
+
* fires on mid-turn attends.
|
|
36
|
+
* 2. Partial response presence — no field → declined_no_partial.
|
|
37
|
+
* 3. Length gate — partial under MIN_PARTIAL_LENGTH → declined_too_short.
|
|
38
|
+
* 4. Budget gate — budgetMax <= 0 → budget_exhausted.
|
|
39
|
+
* 5. Novelty gate — extract tokens + type/id hints from partial; if every
|
|
40
|
+
* token and hint is already in the baseline (original entity hints +
|
|
41
|
+
* latest message), decline as declined_no_new_tokens.
|
|
42
|
+
* 6. Otherwise set attempted=true with rescoreTokens + proposedHints
|
|
43
|
+
* populated. Outcome starts as 'attempted_empty' and the caller flips it
|
|
44
|
+
* to 'attempted_added' when the retry observe returns new facts.
|
|
45
|
+
*/
|
|
46
|
+
export declare function planSubTurnLoop(input: PlanSubTurnLoopInput): SubTurnLoopPlan;
|
|
47
|
+
//# sourceMappingURL=subTurnLoop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subTurnLoop.d.ts","sourceRoot":"","sources":["../../../src/staff/subTurnLoop.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,kBAAkB,GACxB,gBAAgB,GAChB,wBAAwB,GACxB,qBAAqB,GACrB,oBAAoB,GACpB,wBAAwB,GACxB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,CAAC;AAExB,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,CAAC,EAAE,cAAc,GAAG,UAAU,GAAG,eAAe,CAAC;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AA6EhD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,CAgJ5E"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/staff/subTurnLoop.ts
|
|
3
|
+
//
|
|
4
|
+
// B8 M6 — Sub-turn reasoning loop.
|
|
5
|
+
//
|
|
6
|
+
// Pure helper. Given a mid-turn attend input that carries a partial assistant
|
|
7
|
+
// response, decides whether the Attendant should re-score its own in-progress
|
|
8
|
+
// output against memory and re-run retrieval with new entity hints harvested
|
|
9
|
+
// from the partial text. Never executes observe() itself — the caller fires at
|
|
10
|
+
// most one extra retrieval when the plan says `attempted=true`.
|
|
11
|
+
//
|
|
12
|
+
// This is A3's iterative refinement pattern re-applied on response progress
|
|
13
|
+
// rather than initial-pass emptiness. Gates follow the same shape as
|
|
14
|
+
// planRefinementPass: post-response closeout is gated off, pre-response is
|
|
15
|
+
// rejected (pre-response is the initial pass, not a sub-turn loop), empty or
|
|
16
|
+
// short partial responses are declined, and a no-new-tokens verdict declines
|
|
17
|
+
// the retry so we don't thrash on text the caller already searched for.
|
|
18
|
+
//
|
|
19
|
+
// When the plan does propose a retry it surfaces `rescoreTokens` (novel
|
|
20
|
+
// lowercase tokens from the partial) + `proposedHints` (novel type/id
|
|
21
|
+
// patterns extracted by regex). The caller UNIONs those proposed hints with
|
|
22
|
+
// the original entity hints before firing observe() again — same fix pattern
|
|
23
|
+
// as B6's refinement retry (see the union-of-original+widened comment in
|
|
24
|
+
// AttendantInstance.ts around line 5228).
|
|
25
|
+
//
|
|
26
|
+
// Pure function. No LLM. No I/O. Deterministic. Fully unit-testable.
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.SUB_TURN_LOOP_MIN_TOKEN_LENGTH = exports.SUB_TURN_LOOP_MAX_PROPOSED_HINTS = exports.SUB_TURN_LOOP_MAX_RESCORE_TOKENS = exports.SUB_TURN_LOOP_MIN_PARTIAL_LENGTH = exports.SUB_TURN_LOOP_DEFAULT_BUDGET = void 0;
|
|
29
|
+
exports.planSubTurnLoop = planSubTurnLoop;
|
|
30
|
+
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
31
|
+
exports.SUB_TURN_LOOP_DEFAULT_BUDGET = 1;
|
|
32
|
+
exports.SUB_TURN_LOOP_MIN_PARTIAL_LENGTH = 40;
|
|
33
|
+
exports.SUB_TURN_LOOP_MAX_RESCORE_TOKENS = 5;
|
|
34
|
+
exports.SUB_TURN_LOOP_MAX_PROPOSED_HINTS = 3;
|
|
35
|
+
exports.SUB_TURN_LOOP_MIN_TOKEN_LENGTH = 4;
|
|
36
|
+
const SUB_TURN_LOOP_STOPWORDS = new Set([
|
|
37
|
+
'the', 'and', 'for', 'with', 'from', 'that', 'this', 'these', 'those',
|
|
38
|
+
'have', 'has', 'had', 'will', 'would', 'should', 'could', 'about',
|
|
39
|
+
'into', 'then', 'than', 'also', 'just', 'some', 'such', 'very', 'like',
|
|
40
|
+
'been', 'being', 'because', 'before', 'after', 'while', 'where', 'when',
|
|
41
|
+
'what', 'which', 'they', 'them', 'their', 'there', 'here', 'your', 'yours',
|
|
42
|
+
'mine', 'ours', 'theirs', 'over', 'under', 'between', 'against', 'every',
|
|
43
|
+
'more', 'most', 'much', 'many', 'each', 'any', 'all', 'not', 'nor',
|
|
44
|
+
'only', 'own', 'same', 'once', 'other', 'another',
|
|
45
|
+
]);
|
|
46
|
+
// Match "type/id" or "type/id/key" patterns in free-form text. Entity segments
|
|
47
|
+
// must start with a letter and contain at least 2 chars total to avoid matching
|
|
48
|
+
// ratios like "2/3" or short paths like "a/b". Three-segment form also
|
|
49
|
+
// supported so we can harvest "project/iranti/feature_idea_user_rules" but we
|
|
50
|
+
// always return the two-segment prefix for retrieval widening.
|
|
51
|
+
const ENTITY_HINT_REGEX = /([a-zA-Z][a-zA-Z0-9_-]{1,})\/([a-zA-Z][a-zA-Z0-9_-]{1,})(?:\/([a-zA-Z][a-zA-Z0-9_-]{1,}))?/g;
|
|
52
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
53
|
+
function normalizeTokens(text) {
|
|
54
|
+
if (!text)
|
|
55
|
+
return [];
|
|
56
|
+
const normalized = text
|
|
57
|
+
.toLowerCase()
|
|
58
|
+
.replace(/[^a-z0-9_\-\s\/]/g, ' ');
|
|
59
|
+
const tokens = [];
|
|
60
|
+
for (const raw of normalized.split(/\s+/)) {
|
|
61
|
+
if (!raw)
|
|
62
|
+
continue;
|
|
63
|
+
// Split entity-shaped tokens into parts so "project/iranti" contributes
|
|
64
|
+
// "project" and "iranti" to the baseline set, too.
|
|
65
|
+
for (const piece of raw.split('/')) {
|
|
66
|
+
if (!piece)
|
|
67
|
+
continue;
|
|
68
|
+
if (piece.length < exports.SUB_TURN_LOOP_MIN_TOKEN_LENGTH)
|
|
69
|
+
continue;
|
|
70
|
+
if (SUB_TURN_LOOP_STOPWORDS.has(piece))
|
|
71
|
+
continue;
|
|
72
|
+
tokens.push(piece);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return tokens;
|
|
76
|
+
}
|
|
77
|
+
function extractProposedHintsFromText(text, existingHints) {
|
|
78
|
+
const existingSet = new Set(existingHints.map((h) => h.toLowerCase().trim()));
|
|
79
|
+
// Also consider two-segment prefixes of any three-segment existing hint
|
|
80
|
+
// as "already covered" so we don't re-propose a widening of what the
|
|
81
|
+
// caller already supplied.
|
|
82
|
+
for (const hint of existingHints) {
|
|
83
|
+
const parts = hint.toLowerCase().split('/');
|
|
84
|
+
if (parts.length >= 2) {
|
|
85
|
+
existingSet.add(`${parts[0]}/${parts[1]}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const proposed = [];
|
|
89
|
+
const seen = new Set();
|
|
90
|
+
ENTITY_HINT_REGEX.lastIndex = 0;
|
|
91
|
+
let match;
|
|
92
|
+
while ((match = ENTITY_HINT_REGEX.exec(text)) !== null) {
|
|
93
|
+
const entityType = match[1];
|
|
94
|
+
const entityId = match[2];
|
|
95
|
+
if (!entityType || !entityId)
|
|
96
|
+
continue;
|
|
97
|
+
const hint = `${entityType}/${entityId}`.toLowerCase();
|
|
98
|
+
if (existingSet.has(hint))
|
|
99
|
+
continue;
|
|
100
|
+
if (seen.has(hint))
|
|
101
|
+
continue;
|
|
102
|
+
seen.add(hint);
|
|
103
|
+
proposed.push(hint);
|
|
104
|
+
if (proposed.length >= exports.SUB_TURN_LOOP_MAX_PROPOSED_HINTS)
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
return proposed;
|
|
108
|
+
}
|
|
109
|
+
// ─── planSubTurnLoop ─────────────────────────────────────────────────────────
|
|
110
|
+
/**
|
|
111
|
+
* Pure function. Decides whether the Attendant should run a bounded sub-turn
|
|
112
|
+
* retrieval retry against its own partial response. Never calls observe().
|
|
113
|
+
* Never hits I/O.
|
|
114
|
+
*
|
|
115
|
+
* Gate order:
|
|
116
|
+
* 1. Phase gate — post-response and pre-response reject immediately. M6 only
|
|
117
|
+
* fires on mid-turn attends.
|
|
118
|
+
* 2. Partial response presence — no field → declined_no_partial.
|
|
119
|
+
* 3. Length gate — partial under MIN_PARTIAL_LENGTH → declined_too_short.
|
|
120
|
+
* 4. Budget gate — budgetMax <= 0 → budget_exhausted.
|
|
121
|
+
* 5. Novelty gate — extract tokens + type/id hints from partial; if every
|
|
122
|
+
* token and hint is already in the baseline (original entity hints +
|
|
123
|
+
* latest message), decline as declined_no_new_tokens.
|
|
124
|
+
* 6. Otherwise set attempted=true with rescoreTokens + proposedHints
|
|
125
|
+
* populated. Outcome starts as 'attempted_empty' and the caller flips it
|
|
126
|
+
* to 'attempted_added' when the retry observe returns new facts.
|
|
127
|
+
*/
|
|
128
|
+
function planSubTurnLoop(input) {
|
|
129
|
+
const { phase, partialResponse, latestMessage, originalEntityHints, initialFactCount, budget, } = input;
|
|
130
|
+
const budgetMax = Math.max(0, Math.floor(budget ?? exports.SUB_TURN_LOOP_DEFAULT_BUDGET));
|
|
131
|
+
const partialText = (partialResponse ?? '').trim();
|
|
132
|
+
const partialResponseLength = partialText.length;
|
|
133
|
+
// Gate 1a: post-response is always a closeout path.
|
|
134
|
+
if (phase === 'post-response') {
|
|
135
|
+
return {
|
|
136
|
+
outcome: 'declined_post_response',
|
|
137
|
+
attempted: false,
|
|
138
|
+
partialResponseLength,
|
|
139
|
+
initialFactCount,
|
|
140
|
+
addedFactCount: 0,
|
|
141
|
+
rescoreTokens: [],
|
|
142
|
+
proposedHints: [],
|
|
143
|
+
budgetMax,
|
|
144
|
+
reason: 'post_response_closeout',
|
|
145
|
+
note: 'Sub-turn loop is gated off on post-response attends.',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// Gate 1b: M6 only fires on mid-turn. Pre-response is the initial pass;
|
|
149
|
+
// an undefined phase is treated the same as pre-response.
|
|
150
|
+
if (phase !== 'mid-turn') {
|
|
151
|
+
return {
|
|
152
|
+
outcome: 'declined_phase',
|
|
153
|
+
attempted: false,
|
|
154
|
+
partialResponseLength,
|
|
155
|
+
initialFactCount,
|
|
156
|
+
addedFactCount: 0,
|
|
157
|
+
rescoreTokens: [],
|
|
158
|
+
proposedHints: [],
|
|
159
|
+
budgetMax,
|
|
160
|
+
reason: 'phase_not_mid_turn',
|
|
161
|
+
note: `Sub-turn loop only fires on mid-turn attend; current phase = ${phase ?? 'unknown'}.`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Gate 2: no partial response supplied — nothing to rescore.
|
|
165
|
+
if (!partialResponse || partialResponseLength === 0) {
|
|
166
|
+
return {
|
|
167
|
+
outcome: 'declined_no_partial',
|
|
168
|
+
attempted: false,
|
|
169
|
+
partialResponseLength,
|
|
170
|
+
initialFactCount,
|
|
171
|
+
addedFactCount: 0,
|
|
172
|
+
rescoreTokens: [],
|
|
173
|
+
proposedHints: [],
|
|
174
|
+
budgetMax,
|
|
175
|
+
reason: 'no_partial_response',
|
|
176
|
+
note: 'Sub-turn loop requires a partialResponse field on mid-turn attend.',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Gate 3: partial response too short to be worth re-scoring.
|
|
180
|
+
if (partialResponseLength < exports.SUB_TURN_LOOP_MIN_PARTIAL_LENGTH) {
|
|
181
|
+
return {
|
|
182
|
+
outcome: 'declined_too_short',
|
|
183
|
+
attempted: false,
|
|
184
|
+
partialResponseLength,
|
|
185
|
+
initialFactCount,
|
|
186
|
+
addedFactCount: 0,
|
|
187
|
+
rescoreTokens: [],
|
|
188
|
+
proposedHints: [],
|
|
189
|
+
budgetMax,
|
|
190
|
+
reason: 'partial_response_below_min_length',
|
|
191
|
+
note: `Partial response is ${partialResponseLength} chars, below minimum of ${exports.SUB_TURN_LOOP_MIN_PARTIAL_LENGTH}.`,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// Gate 4: budget check — can't fire a retry with zero budget.
|
|
195
|
+
if (budgetMax === 0) {
|
|
196
|
+
return {
|
|
197
|
+
outcome: 'budget_exhausted',
|
|
198
|
+
attempted: false,
|
|
199
|
+
partialResponseLength,
|
|
200
|
+
initialFactCount,
|
|
201
|
+
addedFactCount: 0,
|
|
202
|
+
rescoreTokens: [],
|
|
203
|
+
proposedHints: [],
|
|
204
|
+
budgetMax,
|
|
205
|
+
reason: 'budget_zero',
|
|
206
|
+
note: 'Sub-turn loop budget is 0; not firing a retry.',
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
// Token extraction: collect normalized tokens from the partial response
|
|
210
|
+
// and diff them against the baseline of original hints + latest message.
|
|
211
|
+
// Tokens that match the baseline don't count — we're looking for what's
|
|
212
|
+
// NEW in the partial.
|
|
213
|
+
const hintText = originalEntityHints.join(' ');
|
|
214
|
+
const baselineTokens = new Set(normalizeTokens(`${latestMessage ?? ''} ${hintText}`));
|
|
215
|
+
const partialTokens = normalizeTokens(partialText);
|
|
216
|
+
const rescoreTokens = [];
|
|
217
|
+
const seenRescore = new Set();
|
|
218
|
+
for (const token of partialTokens) {
|
|
219
|
+
if (baselineTokens.has(token))
|
|
220
|
+
continue;
|
|
221
|
+
if (seenRescore.has(token))
|
|
222
|
+
continue;
|
|
223
|
+
seenRescore.add(token);
|
|
224
|
+
rescoreTokens.push(token);
|
|
225
|
+
if (rescoreTokens.length >= exports.SUB_TURN_LOOP_MAX_RESCORE_TOKENS)
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
// Proposed hints: extract type/id patterns from the partial text that
|
|
229
|
+
// weren't already in the original hints.
|
|
230
|
+
const proposedHints = extractProposedHintsFromText(partialText, originalEntityHints);
|
|
231
|
+
// Gate 5: no novel tokens AND no novel hints → nothing to rescore.
|
|
232
|
+
if (rescoreTokens.length === 0 && proposedHints.length === 0) {
|
|
233
|
+
return {
|
|
234
|
+
outcome: 'declined_no_new_tokens',
|
|
235
|
+
attempted: false,
|
|
236
|
+
partialResponseLength,
|
|
237
|
+
initialFactCount,
|
|
238
|
+
addedFactCount: 0,
|
|
239
|
+
rescoreTokens: [],
|
|
240
|
+
proposedHints: [],
|
|
241
|
+
budgetMax,
|
|
242
|
+
reason: 'all_partial_tokens_covered_by_baseline',
|
|
243
|
+
note: 'Partial response tokens already present in original hints/message — no new retrieval needed.',
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
outcome: 'attempted_empty', // caller flips to attempted_added when retry returns facts
|
|
248
|
+
attempted: true,
|
|
249
|
+
partialResponseLength,
|
|
250
|
+
initialFactCount,
|
|
251
|
+
addedFactCount: 0,
|
|
252
|
+
rescoreTokens,
|
|
253
|
+
proposedHints,
|
|
254
|
+
budgetMax,
|
|
255
|
+
reason: 'mid_turn_partial_response_has_novel_signal',
|
|
256
|
+
note: `Mid-turn partial response surfaced ${rescoreTokens.length} novel token(s) and ${proposedHints.length} proposed hint(s). Planning one bounded retry.`,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=subTurnLoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subTurnLoop.js","sourceRoot":"","sources":["../../../src/staff/subTurnLoop.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iranti",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.32",
|
|
4
4
|
"description": "Memory infrastructure for multi-agent AI systems",
|
|
5
5
|
"main": "dist/src/sdk/index.js",
|
|
6
6
|
"files": [
|
|
@@ -98,7 +98,9 @@
|
|
|
98
98
|
"test:b5-objective-autocheckpoint": "ts-node tests/attendant/run_b5_objective_autocheckpoint_tests.ts",
|
|
99
99
|
"test:b6-refinement-tool-plan": "ts-node tests/attendant/run_b6_refinement_tool_plan_tests.ts",
|
|
100
100
|
"test:b7-reasoning-council": "ts-node tests/staff/run_b7_reasoning_council_tests.ts",
|
|
101
|
+
"test:b8-subturn-loop": "ts-node tests/staff/run_b8_subturn_loop_tests.ts",
|
|
101
102
|
"test:file-change-recall": "ts-node tests/attendant/run_file_change_recall_tests.ts",
|
|
103
|
+
"test:m7-response-file-capture": "ts-node tests/attendant/run_m7_response_file_capture_tests.ts",
|
|
102
104
|
"test:copilot-setup": "ts-node tests/runtime-lifecycle/run_copilot_setup_tests.ts",
|
|
103
105
|
"test:setup-upgrade-lifecycle": "ts-node tests/runtime-lifecycle/run_setup_upgrade_tests.ts",
|
|
104
106
|
"test:setup-metadata-persistence": "ts-node tests/runtime-lifecycle/run_setup_metadata_persistence_tests.ts",
|