ftown 0.26.0 → 0.28.0
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/dist/attention-cli.d.ts +32 -0
- package/dist/attention-cli.js +310 -0
- package/dist/attention-cli.js.map +1 -0
- package/dist/attention-events.d.ts +2 -1
- package/dist/attention-events.js.map +1 -1
- package/dist/attention-store.d.ts +6 -3
- package/dist/attention-store.js +60 -2
- package/dist/attention-store.js.map +1 -1
- package/dist/brief-cli.d.ts +10 -0
- package/dist/brief-cli.js +163 -0
- package/dist/brief-cli.js.map +1 -0
- package/dist/command-rpc.d.ts +11 -0
- package/dist/command-rpc.js +83 -16
- package/dist/command-rpc.js.map +1 -1
- package/dist/coordination/attention-routing.d.ts +37 -0
- package/dist/coordination/attention-routing.js +154 -0
- package/dist/coordination/attention-routing.js.map +1 -0
- package/dist/coordination/board.js +82 -3
- package/dist/coordination/board.js.map +1 -1
- package/dist/coordination/contract-b.d.ts +206 -0
- package/dist/coordination/contract-b.js +58 -0
- package/dist/coordination/contract-b.js.map +1 -0
- package/dist/coordination/contract-c.d.ts +117 -0
- package/dist/coordination/contract-c.js +47 -0
- package/dist/coordination/contract-c.js.map +1 -0
- package/dist/coordination/contract.d.ts +8 -1
- package/dist/coordination/contract.js +1 -1
- package/dist/coordination/contract.js.map +1 -1
- package/dist/coordination/format.js +51 -12
- package/dist/coordination/format.js.map +1 -1
- package/dist/coordination/plan.d.ts +74 -0
- package/dist/coordination/plan.js +534 -0
- package/dist/coordination/plan.js.map +1 -0
- package/dist/coordination/routes-brief.d.ts +10 -0
- package/dist/coordination/routes-brief.js +149 -0
- package/dist/coordination/routes-brief.js.map +1 -0
- package/dist/coordination/routes-plan.d.ts +13 -0
- package/dist/coordination/routes-plan.js +182 -0
- package/dist/coordination/routes-plan.js.map +1 -0
- package/dist/coordination/routes-worktrees.d.ts +29 -0
- package/dist/coordination/routes-worktrees.js +138 -0
- package/dist/coordination/routes-worktrees.js.map +1 -0
- package/dist/coordination/wiring.d.ts +17 -2
- package/dist/coordination/wiring.js +81 -11
- package/dist/coordination/wiring.js.map +1 -1
- package/dist/coordination-cli.d.ts +6 -1
- package/dist/coordination-cli.js +23 -7
- package/dist/coordination-cli.js.map +1 -1
- package/dist/create-ftown-session.d.ts +26 -1
- package/dist/create-ftown-session.js +208 -104
- package/dist/create-ftown-session.js.map +1 -1
- package/dist/ftown-cli.js +14 -2
- package/dist/ftown-cli.js.map +1 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/local-api-server.d.ts +24 -0
- package/dist/local-api-server.js +473 -32
- package/dist/local-api-server.js.map +1 -1
- package/dist/mail-delivery.d.ts +18 -4
- package/dist/mail-delivery.js +50 -8
- package/dist/mail-delivery.js.map +1 -1
- package/dist/plan-cli.d.ts +52 -0
- package/dist/plan-cli.js +357 -0
- package/dist/plan-cli.js.map +1 -0
- package/dist/security/bridge/permissions.js +55 -5
- package/dist/security/bridge/permissions.js.map +1 -1
- package/dist/session-controller.d.ts +17 -1
- package/dist/session-controller.js +93 -2
- package/dist/session-controller.js.map +1 -1
- package/dist/sessions-commands.js +75 -5
- package/dist/sessions-commands.js.map +1 -1
- package/dist/types.d.ts +9 -1
- package/dist/worktrees-cli.d.ts +39 -0
- package/dist/worktrees-cli.js +168 -0
- package/dist/worktrees-cli.js.map +1 -0
- package/dist/worktrees.d.ts +16 -0
- package/dist/worktrees.js +292 -0
- package/dist/worktrees.js.map +1 -0
- package/hooks/ftown-antigravity-hook.sh +12 -6
- package/package.json +2 -2
- package/skills/ftown/SKILL.md +88 -5
- package/skills/ftown/references/orchestrator.md +32 -29
- package/skills/ftown/references/sessions.md +155 -12
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AttentionItem } from './attention-events.js';
|
|
2
|
+
import type { AttentionAnswerEntry, AttentionPrompt } from './attention-prompt-protocol.js';
|
|
3
|
+
/** One local-API call; injectable so tests need no bridge. */
|
|
4
|
+
export type AttentionApiFn = (method: string, path: string, body?: unknown, headers?: Record<string, string>) => Promise<unknown>;
|
|
5
|
+
export interface AttentionCliDeps {
|
|
6
|
+
api: AttentionApiFn;
|
|
7
|
+
env: NodeJS.ProcessEnv;
|
|
8
|
+
log: (text: string) => void;
|
|
9
|
+
errorLog: (text: string) => void;
|
|
10
|
+
}
|
|
11
|
+
/** API failure carrying the HTTP status, so exit codes can map 403→4 and 409→5. */
|
|
12
|
+
export declare class AttentionApiError extends Error {
|
|
13
|
+
readonly status: number;
|
|
14
|
+
constructor(status: number, message: string);
|
|
15
|
+
}
|
|
16
|
+
/** Usage problem: message printed, exit code 2. */
|
|
17
|
+
export declare class UsageError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
export interface AnswerInput {
|
|
21
|
+
options?: string[];
|
|
22
|
+
text?: string;
|
|
23
|
+
answersJson?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function buildAnswers(prompt: AttentionPrompt | undefined, input: AnswerInput): AttentionAnswerEntry[];
|
|
26
|
+
export interface RoutedItem {
|
|
27
|
+
sessionId: string;
|
|
28
|
+
sessionName: string;
|
|
29
|
+
event: AttentionItem;
|
|
30
|
+
}
|
|
31
|
+
export declare function formatRoutedItem(item: RoutedItem): string[];
|
|
32
|
+
export declare function runAttention(argv: string[], deps?: Partial<AttentionCliDeps>): Promise<number>;
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ftown attention` — answer or escalate questions routed from child sessions
|
|
3
|
+
* (coordination phase B, see coordination/contract-b.ts ATTENTION_ROUTES).
|
|
4
|
+
* The caller is identified by x-ftown-session-id (FTOWN_SESSION_ID).
|
|
5
|
+
*/
|
|
6
|
+
import { Command, CommanderError } from 'commander';
|
|
7
|
+
import { apiResponse, loadPointer } from './cli-client.js';
|
|
8
|
+
import { ATTENTION_ROUTES, ESCALATION_NOTE_MAX } from './coordination/contract-b.js';
|
|
9
|
+
/** API failure carrying the HTTP status, so exit codes can map 403→4 and 409→5. */
|
|
10
|
+
export class AttentionApiError extends Error {
|
|
11
|
+
status;
|
|
12
|
+
constructor(status, message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.status = status;
|
|
15
|
+
this.name = 'AttentionApiError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Usage problem: message printed, exit code 2. */
|
|
19
|
+
export class UsageError extends Error {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'UsageError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Failure with a fixed exit code (e.g. 5 for an already-resolved item). */
|
|
26
|
+
class CliExitError extends Error {
|
|
27
|
+
code;
|
|
28
|
+
constructor(code, message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.code = code;
|
|
31
|
+
this.name = 'CliExitError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function defaultApi(method, path, body, headers) {
|
|
35
|
+
const result = await apiResponse(loadPointer(), method, path, body, headers);
|
|
36
|
+
if (result.status < 200 || result.status >= 300) {
|
|
37
|
+
const raw = result.body && typeof result.body === 'object' && !Array.isArray(result.body)
|
|
38
|
+
? result.body.error
|
|
39
|
+
: undefined;
|
|
40
|
+
throw new AttentionApiError(result.status, typeof raw === 'string' ? raw : `HTTP ${result.status}`);
|
|
41
|
+
}
|
|
42
|
+
return result.body;
|
|
43
|
+
}
|
|
44
|
+
function resolveDeps(partial) {
|
|
45
|
+
return {
|
|
46
|
+
api: partial?.api ?? defaultApi,
|
|
47
|
+
env: partial?.env ?? process.env,
|
|
48
|
+
log: partial?.log ?? ((text) => console.log(text)),
|
|
49
|
+
errorLog: partial?.errorLog ?? ((text) => console.error(text)),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function requireSelf(env) {
|
|
53
|
+
const id = env.FTOWN_SESSION_ID?.trim();
|
|
54
|
+
if (!id || !/^[A-Za-z0-9_-]{1,200}$/.test(id)) {
|
|
55
|
+
throw new UsageError('Set FTOWN_SESSION_ID (attention commands run inside a session)');
|
|
56
|
+
}
|
|
57
|
+
return id;
|
|
58
|
+
}
|
|
59
|
+
function callerHeaders(self) {
|
|
60
|
+
return { 'X-Ftown-Session-Id': self };
|
|
61
|
+
}
|
|
62
|
+
function routedPath(self) {
|
|
63
|
+
return ATTENTION_ROUTES.routed.replace(':id', encodeURIComponent(self));
|
|
64
|
+
}
|
|
65
|
+
function itemPath(childId, eventId) {
|
|
66
|
+
return `/api/sessions/${encodeURIComponent(childId)}/attention/${encodeURIComponent(eventId)}`;
|
|
67
|
+
}
|
|
68
|
+
function answerPath(childId, eventId) {
|
|
69
|
+
return ATTENTION_ROUTES.answer
|
|
70
|
+
.replace(':id', encodeURIComponent(childId))
|
|
71
|
+
.replace(':eventId', encodeURIComponent(eventId));
|
|
72
|
+
}
|
|
73
|
+
function escalatePath(childId, eventId) {
|
|
74
|
+
return ATTENTION_ROUTES.escalate
|
|
75
|
+
.replace(':id', encodeURIComponent(childId))
|
|
76
|
+
.replace(':eventId', encodeURIComponent(eventId));
|
|
77
|
+
}
|
|
78
|
+
function normalizeEntries(raw, prompt) {
|
|
79
|
+
const list = Array.isArray(raw)
|
|
80
|
+
? raw
|
|
81
|
+
: raw && typeof raw === 'object' && Array.isArray(raw.answers)
|
|
82
|
+
? raw.answers
|
|
83
|
+
: undefined;
|
|
84
|
+
if (!list)
|
|
85
|
+
throw new UsageError('--answers-json must be a JSON array of { selected, text? } entries');
|
|
86
|
+
if (prompt && list.length !== prompt.questions.length) {
|
|
87
|
+
throw new UsageError(`--answers-json must contain ${prompt.questions.length} answer(s), one per question`);
|
|
88
|
+
}
|
|
89
|
+
return list.map((entry, index) => {
|
|
90
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
|
91
|
+
throw new UsageError(`answers[${index}] must be an object with a selected array`);
|
|
92
|
+
}
|
|
93
|
+
const { selected, text } = entry;
|
|
94
|
+
if (!Array.isArray(selected) || selected.some((s) => !Number.isInteger(s) || s < 0)) {
|
|
95
|
+
throw new UsageError(`answers[${index}].selected must be an array of non-negative integers`);
|
|
96
|
+
}
|
|
97
|
+
if (text !== undefined && typeof text !== 'string') {
|
|
98
|
+
throw new UsageError(`answers[${index}].text must be a string`);
|
|
99
|
+
}
|
|
100
|
+
const question = prompt?.questions[index];
|
|
101
|
+
const indexes = [...new Set(selected)].sort((a, b) => a - b);
|
|
102
|
+
if (question && indexes.some((s) => s >= question.options.length)) {
|
|
103
|
+
throw new UsageError(`answers[${index}].selected is out of range for question ${index + 1}`);
|
|
104
|
+
}
|
|
105
|
+
return text === undefined ? { selected: indexes } : { selected: indexes, text };
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export function buildAnswers(prompt, input) {
|
|
109
|
+
if (input.answersJson !== undefined) {
|
|
110
|
+
let parsed;
|
|
111
|
+
try {
|
|
112
|
+
parsed = JSON.parse(input.answersJson);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
throw new UsageError('--answers-json is not valid JSON');
|
|
116
|
+
}
|
|
117
|
+
return normalizeEntries(parsed, prompt);
|
|
118
|
+
}
|
|
119
|
+
if (input.options !== undefined && input.options.length > 0) {
|
|
120
|
+
if (!prompt)
|
|
121
|
+
throw new UsageError('This item has no prompt options to pick from; use --text');
|
|
122
|
+
if (prompt.questions.length > 1) {
|
|
123
|
+
throw new UsageError('Multi-question prompt: use --answers-json');
|
|
124
|
+
}
|
|
125
|
+
const question = prompt.questions[0];
|
|
126
|
+
if (question.options.length === 0) {
|
|
127
|
+
throw new UsageError('This question has no options; use --text');
|
|
128
|
+
}
|
|
129
|
+
const selected = input.options.map((value) => {
|
|
130
|
+
if (/^\d+$/.test(value)) {
|
|
131
|
+
const index = Number(value);
|
|
132
|
+
if (index < 1 || index > question.options.length) {
|
|
133
|
+
throw new UsageError(`--option ${value} is out of range (1-${question.options.length})`);
|
|
134
|
+
}
|
|
135
|
+
return index - 1;
|
|
136
|
+
}
|
|
137
|
+
const index = question.options.findIndex((option) => option.label === value);
|
|
138
|
+
if (index < 0)
|
|
139
|
+
throw new UsageError(`--option "${value}" does not match an option label`);
|
|
140
|
+
return index;
|
|
141
|
+
});
|
|
142
|
+
const unique = [...new Set(selected)].sort((a, b) => a - b);
|
|
143
|
+
if (!question.multiSelect && unique.length > 1) {
|
|
144
|
+
throw new UsageError('This question allows a single choice; supply one --option');
|
|
145
|
+
}
|
|
146
|
+
return [{ selected: unique }];
|
|
147
|
+
}
|
|
148
|
+
if (input.text !== undefined) {
|
|
149
|
+
if (!input.text.trim())
|
|
150
|
+
throw new UsageError('--text must not be empty');
|
|
151
|
+
if (prompt) {
|
|
152
|
+
if (prompt.questions.length > 1)
|
|
153
|
+
throw new UsageError('Multi-question prompt: use --answers-json');
|
|
154
|
+
const question = prompt.questions[0];
|
|
155
|
+
if (question.options.length > 0 && !question.allowText) {
|
|
156
|
+
throw new UsageError('This question does not accept free text; use --option');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return [{ selected: [], text: input.text }];
|
|
160
|
+
}
|
|
161
|
+
throw new UsageError('Supply exactly one of --option, --text or --answers-json');
|
|
162
|
+
}
|
|
163
|
+
export function formatRoutedItem(item) {
|
|
164
|
+
const { event } = item;
|
|
165
|
+
const child = item.sessionName || item.sessionId;
|
|
166
|
+
const title = event.title || event.message;
|
|
167
|
+
const lines = [`${child} ${event.id} ${title}`];
|
|
168
|
+
const questions = event.prompt?.questions ?? [];
|
|
169
|
+
questions.forEach((question, index) => {
|
|
170
|
+
if (questions.length > 1)
|
|
171
|
+
lines.push(` Q${index + 1}: ${question.question}`);
|
|
172
|
+
if (question.options.length > 0) {
|
|
173
|
+
const indent = questions.length > 1 ? ' ' : ' ';
|
|
174
|
+
lines.push(`${indent}${question.options.map((option, i) => `${i + 1}) ${option.label}`).join(' ')}`);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
return lines;
|
|
178
|
+
}
|
|
179
|
+
async function listCommand(deps, opts) {
|
|
180
|
+
const self = requireSelf(deps.env);
|
|
181
|
+
const data = (await deps.api('GET', routedPath(self), undefined, callerHeaders(self)));
|
|
182
|
+
const items = data?.items ?? [];
|
|
183
|
+
if (opts.json === true) {
|
|
184
|
+
deps.log(JSON.stringify(data, null, 2));
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (items.length === 0) {
|
|
188
|
+
deps.log('no routed questions');
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
for (const item of items) {
|
|
192
|
+
for (const line of formatRoutedItem(item))
|
|
193
|
+
deps.log(line);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// ───────────────────────── answer / escalate ─────────────────────────
|
|
197
|
+
async function fetchItem(deps, self, childId, eventId) {
|
|
198
|
+
const data = (await deps.api('GET', itemPath(childId, eventId), undefined, callerHeaders(self)));
|
|
199
|
+
const event = data?.event;
|
|
200
|
+
if (!event || typeof event !== 'object')
|
|
201
|
+
throw new Error('Invalid attention response');
|
|
202
|
+
return event;
|
|
203
|
+
}
|
|
204
|
+
async function answerCommand(deps, childId, eventId, opts) {
|
|
205
|
+
const self = requireSelf(deps.env);
|
|
206
|
+
const modes = [
|
|
207
|
+
(opts.option?.length ?? 0) > 0,
|
|
208
|
+
opts.text !== undefined,
|
|
209
|
+
opts.answersJson !== undefined,
|
|
210
|
+
].filter(Boolean).length;
|
|
211
|
+
if (modes !== 1)
|
|
212
|
+
throw new UsageError('Supply exactly one of --option, --text or --answers-json');
|
|
213
|
+
const item = await fetchItem(deps, self, childId, eventId);
|
|
214
|
+
if (item.resolvedAt)
|
|
215
|
+
throw new CliExitError(5, `Attention item ${eventId} is already resolved`);
|
|
216
|
+
const answers = buildAnswers(item.prompt, {
|
|
217
|
+
options: opts.option,
|
|
218
|
+
text: opts.text,
|
|
219
|
+
answersJson: opts.answersJson,
|
|
220
|
+
});
|
|
221
|
+
const data = await deps.api('POST', answerPath(childId, eventId), { answers }, callerHeaders(self));
|
|
222
|
+
if (opts.json === true)
|
|
223
|
+
deps.log(JSON.stringify(data, null, 2));
|
|
224
|
+
else
|
|
225
|
+
deps.log(`answer recorded for ${childId} (${eventId})`);
|
|
226
|
+
}
|
|
227
|
+
async function escalateCommand(deps, childId, eventId, opts) {
|
|
228
|
+
const self = requireSelf(deps.env);
|
|
229
|
+
if (opts.note !== undefined && opts.note.length > ESCALATION_NOTE_MAX) {
|
|
230
|
+
throw new UsageError(`--note must be at most ${ESCALATION_NOTE_MAX} characters`);
|
|
231
|
+
}
|
|
232
|
+
const body = opts.note === undefined ? {} : { note: opts.note };
|
|
233
|
+
const data = await deps.api('POST', escalatePath(childId, eventId), body, callerHeaders(self));
|
|
234
|
+
if (opts.json === true)
|
|
235
|
+
deps.log(JSON.stringify(data, null, 2));
|
|
236
|
+
else
|
|
237
|
+
deps.log(`escalated ${eventId} for ${childId} to the human`);
|
|
238
|
+
}
|
|
239
|
+
// ───────────────────────── program / entry ─────────────────────────
|
|
240
|
+
function attentionProgram(deps) {
|
|
241
|
+
const program = new Command()
|
|
242
|
+
.name('ftown attention')
|
|
243
|
+
.description('Answer or escalate questions routed from child sessions');
|
|
244
|
+
program.exitOverride();
|
|
245
|
+
program.configureOutput({
|
|
246
|
+
writeOut: (text) => deps.log(text.trimEnd()),
|
|
247
|
+
writeErr: (text) => deps.errorLog(text.trimEnd()),
|
|
248
|
+
});
|
|
249
|
+
program
|
|
250
|
+
.command('list')
|
|
251
|
+
.description('Questions routed to you from your child sessions')
|
|
252
|
+
.option('--json', 'Machine-readable JSON output')
|
|
253
|
+
.action(async (opts) => {
|
|
254
|
+
await listCommand(deps, opts);
|
|
255
|
+
});
|
|
256
|
+
program
|
|
257
|
+
.command('answer <child-id> <event-id>')
|
|
258
|
+
.description('Answer a routed question as its parent session')
|
|
259
|
+
.option('--option <value>', 'Option 1-based index or exact label (repeatable)', (value, previous) => [...previous, value], [])
|
|
260
|
+
.option('--text <t>', 'Free-text answer')
|
|
261
|
+
.option('--answers-json <json>', 'JSON answers array (required for multi-question prompts)')
|
|
262
|
+
.option('--json', 'Machine-readable JSON output')
|
|
263
|
+
.action(async (childId, eventId, opts) => {
|
|
264
|
+
await answerCommand(deps, childId, eventId, opts);
|
|
265
|
+
});
|
|
266
|
+
program
|
|
267
|
+
.command('escalate <child-id> <event-id>')
|
|
268
|
+
.description('Hand a routed question to the human')
|
|
269
|
+
.option('--note <t>', `Context for the human (max ${ESCALATION_NOTE_MAX} characters)`)
|
|
270
|
+
.option('--json', 'Machine-readable JSON output')
|
|
271
|
+
.action(async (childId, eventId, opts) => {
|
|
272
|
+
await escalateCommand(deps, childId, eventId, opts);
|
|
273
|
+
});
|
|
274
|
+
return program;
|
|
275
|
+
}
|
|
276
|
+
function exitCodeFor(error) {
|
|
277
|
+
if (error instanceof CommanderError)
|
|
278
|
+
return error.exitCode === 0 ? 0 : 2;
|
|
279
|
+
if (error instanceof UsageError)
|
|
280
|
+
return 2;
|
|
281
|
+
if (error instanceof CliExitError)
|
|
282
|
+
return error.code;
|
|
283
|
+
if (error instanceof AttentionApiError) {
|
|
284
|
+
if (error.status === 403)
|
|
285
|
+
return 4;
|
|
286
|
+
if (error.status === 409)
|
|
287
|
+
return 5;
|
|
288
|
+
return 1;
|
|
289
|
+
}
|
|
290
|
+
return 1;
|
|
291
|
+
}
|
|
292
|
+
export async function runAttention(argv, deps) {
|
|
293
|
+
const resolved = resolveDeps(deps);
|
|
294
|
+
const program = attentionProgram(resolved);
|
|
295
|
+
try {
|
|
296
|
+
if (argv.length === 0) {
|
|
297
|
+
program.outputHelp({ error: true });
|
|
298
|
+
return 2;
|
|
299
|
+
}
|
|
300
|
+
await program.parseAsync(argv, { from: 'user' });
|
|
301
|
+
return 0;
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
if (error instanceof CommanderError && error.exitCode === 0)
|
|
305
|
+
return 0;
|
|
306
|
+
resolved.errorLog(`ftown attention: ${error instanceof Error ? error.message : String(error)}`);
|
|
307
|
+
return exitCodeFor(error);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=attention-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention-cli.js","sourceRoot":"","sources":["../src/attention-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AttentionRoutingFields } from "./coordination/contract-b.js";
|
|
1
2
|
import { z } from 'zod';
|
|
2
3
|
import { type AttentionAnswer, type AttentionPrompt } from './attention-prompt-protocol.js';
|
|
3
4
|
export type AttentionType = 'permission_prompt' | 'elicitation_dialog' | 'agent_needs_input' | 'ask_user';
|
|
@@ -6,7 +7,7 @@ export interface Activity {
|
|
|
6
7
|
state: 'thinking' | 'tool_use' | 'idle' | 'unknown';
|
|
7
8
|
lastActivityAt?: string;
|
|
8
9
|
}
|
|
9
|
-
export interface AttentionItem {
|
|
10
|
+
export interface AttentionItem extends AttentionRoutingFields {
|
|
10
11
|
id: string;
|
|
11
12
|
sequence: number;
|
|
12
13
|
type: AttentionType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention-events.js","sourceRoot":"","sources":["../src/attention-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attention-events.js","sourceRoot":"","sources":["../src/attention-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PushNotice } from './push-notifier.js';
|
|
2
2
|
import { type Activity, type AttentionItem } from './attention-events.js';
|
|
3
3
|
import { type AttentionPrompt } from './attention-prompt-protocol.js';
|
|
4
|
+
import { type AttentionAnsweredBy, type AttentionRoute, type AttentionRoutingFields, type AttentionRoutingStoreApi } from './coordination/contract-b.js';
|
|
4
5
|
export interface AttentionPage {
|
|
5
6
|
events: AttentionItem[];
|
|
6
7
|
cursor: string;
|
|
@@ -51,7 +52,7 @@ export interface AttentionNotificationOptions {
|
|
|
51
52
|
onSubagentIdle?: (signal: SubagentIdleSignal, isCurrent: () => boolean) => Promise<void>;
|
|
52
53
|
}
|
|
53
54
|
/** Single-process, serialized snapshots. Missing/corrupt files never masquerade as recovered history. */
|
|
54
|
-
export declare class AttentionStore {
|
|
55
|
+
export declare class AttentionStore implements AttentionRoutingStoreApi {
|
|
55
56
|
private resolveDir;
|
|
56
57
|
private resolvedRetention;
|
|
57
58
|
private onNotification?;
|
|
@@ -96,8 +97,10 @@ export declare class AttentionStore {
|
|
|
96
97
|
resolveExplicitThrough(id: string, eventId: string): Promise<ExplicitAttentionSnapshot>;
|
|
97
98
|
/** Resolve exactly one item as replied (inbox reply after durable mail). Unknown/already-resolved is a no-op. */
|
|
98
99
|
resolveReplied(id: string, eventId: string): Promise<void>;
|
|
99
|
-
/** Record the human
|
|
100
|
-
answer(id: string, eventId: string, answers: unknown, now?: Date): Promise<AttentionAnswerResult>;
|
|
100
|
+
/** Record the answer (human or parent session) and resolve the item. The caller delivers it (waiter or mail). */
|
|
101
|
+
answer(id: string, eventId: string, answers: unknown, now?: Date, answeredBy?: AttentionAnsweredBy): Promise<AttentionAnswerResult>;
|
|
102
|
+
setRoute(sessionId: string, eventId: string, fields: AttentionRoutingFields, expectRoute?: AttentionRoute): Promise<AttentionItem | undefined>;
|
|
103
|
+
listRouted(childId: string): Promise<AttentionItem[]>;
|
|
101
104
|
mutate(id: string, ids: string[], operation: 'ack' | 'resolve', reason?: string): Promise<AttentionItem[]>;
|
|
102
105
|
wait(id: string, options: AttentionReadOptions, waitSeconds: number, signal?: AbortSignal): Promise<AttentionPage>;
|
|
103
106
|
private readItem;
|
package/dist/attention-store.js
CHANGED
|
@@ -6,6 +6,7 @@ import { z } from 'zod';
|
|
|
6
6
|
import { classifyAttentionHook, normalizeAttentionPrompt, promptSchema, sanitizeAttentionText } from './attention-events.js';
|
|
7
7
|
import { ATTENTION_ITEM_WAIT_MAX_SECONDS, ATTENTION_PROMPT_LIMITS, ATTENTION_WAITER_TTL_MS } from './attention-prompt-protocol.js';
|
|
8
8
|
import { validateAttentionAnswer } from './attention-prompt.js';
|
|
9
|
+
import { ESCALATION_NOTE_MAX } from './coordination/contract-b.js';
|
|
9
10
|
const L = ATTENTION_PROMPT_LIMITS;
|
|
10
11
|
/** JSON with object keys sorted, so equal prompts always hash alike. */
|
|
11
12
|
function canonical(value) {
|
|
@@ -24,6 +25,11 @@ const answerSchema = z.object({
|
|
|
24
25
|
}).strict()).min(1).max(L.questions),
|
|
25
26
|
answeredAt: z.string(),
|
|
26
27
|
}).strict();
|
|
28
|
+
const answeredBySchema = z.object({
|
|
29
|
+
kind: z.enum(['human', 'session']),
|
|
30
|
+
sessionId: z.string().optional(),
|
|
31
|
+
name: z.string().optional(),
|
|
32
|
+
}).strict();
|
|
27
33
|
const itemSchema = z.object({
|
|
28
34
|
id: z.string(), sequence: z.number().int().positive(),
|
|
29
35
|
type: z.enum(['permission_prompt', 'elicitation_dialog', 'agent_needs_input', 'ask_user']),
|
|
@@ -32,6 +38,11 @@ const itemSchema = z.object({
|
|
|
32
38
|
acknowledgedAt: z.string().optional(), resolvedAt: z.string().optional(),
|
|
33
39
|
resolution: z.enum(['manual', 'user_prompt', 'elicitation_complete', 'session_end', 'answered', 'tool_complete', 'replied']).optional(),
|
|
34
40
|
prompt: promptSchema.optional(), answer: answerSchema.optional(),
|
|
41
|
+
route: z.enum(['parent', 'human']).optional(),
|
|
42
|
+
routedTo: z.string().optional(),
|
|
43
|
+
escalatedAt: z.string().optional(),
|
|
44
|
+
escalationNote: z.string().max(ESCALATION_NOTE_MAX).optional(),
|
|
45
|
+
answeredBy: answeredBySchema.optional(),
|
|
35
46
|
fingerprint: z.string(), sourceId: z.string().optional(), reason: z.string().optional(),
|
|
36
47
|
}).strict();
|
|
37
48
|
const ledgerSchema = z.object({
|
|
@@ -448,8 +459,8 @@ export class AttentionStore {
|
|
|
448
459
|
this.wakeItemWaiters(id);
|
|
449
460
|
});
|
|
450
461
|
}
|
|
451
|
-
/** Record the human
|
|
452
|
-
async answer(id, eventId, answers, now) {
|
|
462
|
+
/** Record the answer (human or parent session) and resolve the item. The caller delivers it (waiter or mail). */
|
|
463
|
+
async answer(id, eventId, answers, now, answeredBy = { kind: 'human' }) {
|
|
453
464
|
return this.withLock(id, async () => {
|
|
454
465
|
const ledger = await this.load(id);
|
|
455
466
|
const event = ledger.events.find(candidate => candidate.id === eventId);
|
|
@@ -471,6 +482,11 @@ export class AttentionStore {
|
|
|
471
482
|
}
|
|
472
483
|
const timestamp = at.toISOString();
|
|
473
484
|
event.answer = { answers: checked.value, answeredAt: timestamp };
|
|
485
|
+
event.answeredBy = {
|
|
486
|
+
kind: answeredBy.kind,
|
|
487
|
+
...(answeredBy.sessionId !== undefined ? { sessionId: answeredBy.sessionId } : {}),
|
|
488
|
+
...(answeredBy.name !== undefined ? { name: answeredBy.name } : {}),
|
|
489
|
+
};
|
|
474
490
|
event.resolvedAt = timestamp;
|
|
475
491
|
event.resolution = 'answered';
|
|
476
492
|
const resolvedIds = [event.id];
|
|
@@ -488,6 +504,48 @@ export class AttentionStore {
|
|
|
488
504
|
return { item, snapshot: { attention: this.latestExplicit(ledger), sequence: ledger.sequence }, waiterLive };
|
|
489
505
|
});
|
|
490
506
|
}
|
|
507
|
+
async setRoute(sessionId, eventId, fields, expectRoute) {
|
|
508
|
+
return this.withLock(sessionId, async () => {
|
|
509
|
+
const ledger = await this.load(sessionId);
|
|
510
|
+
const event = ledger.events.find(candidate => candidate.id === eventId);
|
|
511
|
+
if (!event || event.resolvedAt)
|
|
512
|
+
return undefined;
|
|
513
|
+
// Compare-and-set: parent escalate and parent-exit must not both publish.
|
|
514
|
+
if (expectRoute !== undefined && event.route !== expectRoute)
|
|
515
|
+
return undefined;
|
|
516
|
+
if (fields.route !== undefined)
|
|
517
|
+
event.route = fields.route;
|
|
518
|
+
if (fields.routedTo !== undefined)
|
|
519
|
+
event.routedTo = fields.routedTo;
|
|
520
|
+
if (fields.escalatedAt !== undefined)
|
|
521
|
+
event.escalatedAt = fields.escalatedAt;
|
|
522
|
+
if (fields.escalationNote !== undefined) {
|
|
523
|
+
const cleanedNote = sanitizeAttentionText(fields.escalationNote, ESCALATION_NOTE_MAX);
|
|
524
|
+
if (cleanedNote)
|
|
525
|
+
event.escalationNote = cleanedNote;
|
|
526
|
+
else
|
|
527
|
+
delete event.escalationNote;
|
|
528
|
+
}
|
|
529
|
+
if (fields.answeredBy !== undefined) {
|
|
530
|
+
event.answeredBy = {
|
|
531
|
+
kind: fields.answeredBy.kind,
|
|
532
|
+
...(fields.answeredBy.sessionId !== undefined ? { sessionId: fields.answeredBy.sessionId } : {}),
|
|
533
|
+
...(fields.answeredBy.name !== undefined ? { name: fields.answeredBy.name } : {}),
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
await this.save(sessionId, ledger);
|
|
537
|
+
return publicItem(event);
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
async listRouted(childId) {
|
|
541
|
+
return this.withLock(childId, async () => {
|
|
542
|
+
const ledger = await this.load(childId);
|
|
543
|
+
return ledger.events
|
|
544
|
+
.filter(event => !event.resolvedAt && event.route === 'parent')
|
|
545
|
+
.sort((a, b) => a.sequence - b.sequence)
|
|
546
|
+
.map(publicItem);
|
|
547
|
+
});
|
|
548
|
+
}
|
|
491
549
|
async mutate(id, ids, operation, reason) {
|
|
492
550
|
return this.withLock(id, async () => {
|
|
493
551
|
const ledger = await this.load(id);
|