ftown 0.27.0 → 0.28.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.
Files changed (62) hide show
  1. package/dist/attention-store.js +34 -2
  2. package/dist/attention-store.js.map +1 -1
  3. package/dist/command-rpc.d.ts +11 -0
  4. package/dist/command-rpc.js +79 -15
  5. package/dist/command-rpc.js.map +1 -1
  6. package/dist/coordination/board.js +82 -3
  7. package/dist/coordination/board.js.map +1 -1
  8. package/dist/coordination/contract-c.d.ts +117 -0
  9. package/dist/coordination/contract-c.js +47 -0
  10. package/dist/coordination/contract-c.js.map +1 -0
  11. package/dist/coordination/contract.d.ts +8 -1
  12. package/dist/coordination/contract.js +1 -1
  13. package/dist/coordination/contract.js.map +1 -1
  14. package/dist/coordination/format.js +37 -11
  15. package/dist/coordination/format.js.map +1 -1
  16. package/dist/coordination/plan.d.ts +74 -0
  17. package/dist/coordination/plan.js +534 -0
  18. package/dist/coordination/plan.js.map +1 -0
  19. package/dist/coordination/routes-plan.d.ts +13 -0
  20. package/dist/coordination/routes-plan.js +182 -0
  21. package/dist/coordination/routes-plan.js.map +1 -0
  22. package/dist/coordination/wiring.d.ts +6 -0
  23. package/dist/coordination/wiring.js +50 -2
  24. package/dist/coordination/wiring.js.map +1 -1
  25. package/dist/coordination-cli.d.ts +6 -1
  26. package/dist/coordination-cli.js +17 -7
  27. package/dist/coordination-cli.js.map +1 -1
  28. package/dist/create-ftown-session.d.ts +18 -0
  29. package/dist/create-ftown-session.js +44 -0
  30. package/dist/create-ftown-session.js.map +1 -1
  31. package/dist/ftown-cli.js +5 -2
  32. package/dist/ftown-cli.js.map +1 -1
  33. package/dist/index.js +28 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/local-api-server.js +14 -4
  36. package/dist/local-api-server.js.map +1 -1
  37. package/dist/local-pair-cli.js +2 -3
  38. package/dist/local-pair-cli.js.map +1 -1
  39. package/dist/plan-cli.d.ts +52 -0
  40. package/dist/plan-cli.js +374 -0
  41. package/dist/plan-cli.js.map +1 -0
  42. package/dist/security/bridge/permissions.js +21 -1
  43. package/dist/security/bridge/permissions.js.map +1 -1
  44. package/dist/security-cli.d.ts +13 -2
  45. package/dist/security-cli.js +35 -6
  46. package/dist/security-cli.js.map +1 -1
  47. package/dist/sessions-commands.js +10 -0
  48. package/dist/sessions-commands.js.map +1 -1
  49. package/dist/types.d.ts +4 -1
  50. package/dist/wire-types.d.ts +2 -0
  51. package/dist/wire-types.js.map +1 -1
  52. package/muse-plugin/.muse-plugin/plugin.json +41 -1
  53. package/muse-plugin/hooks/ftown-post-tool-use-failure.sh +27 -0
  54. package/muse-plugin/hooks/ftown-post-tool-use.sh +26 -0
  55. package/muse-plugin/hooks/ftown-pre-tool-use.sh +26 -0
  56. package/muse-plugin/hooks/ftown-user-prompt-submit.sh +26 -0
  57. package/muse-plugin/lib/ftown-hook.sh +42 -5
  58. package/opencode-plugin/ftown.js +121 -11
  59. package/package.json +2 -2
  60. package/skills/ftown/SKILL.md +42 -0
  61. package/skills/ftown/references/orchestrator.md +29 -25
  62. package/skills/ftown/references/sessions.md +64 -4
@@ -0,0 +1,374 @@
1
+ /**
2
+ * `ftown plan` — manager plan list CLI (coordination phase C).
3
+ * Thin client over the local plan API (see coordination/contract-c.ts).
4
+ */
5
+ import { Command, CommanderError } from 'commander';
6
+ import { api as request, loadPointer } from './cli-client.js';
7
+ import { UsageError } from './coordination-cli.js';
8
+ import { PLAN_LIMITS, PLAN_ROUTES, } from './coordination/contract-c.js';
9
+ const PLAN_USAGE = 'Usage: ftown plan [--json] [--session-id <id>] | ' +
10
+ 'ftown plan add <title...> [--note <t>] [--after <id,id>] [--priority 1|2|3] [--session-id <id>] | ' +
11
+ 'ftown plan start <id> --session <child-id> [--session-id <id>] | ' +
12
+ 'ftown plan done|drop|todo <id> [--session-id <id>] | ' +
13
+ 'ftown plan edit <id> [--title <t>] [--note <t>|--no-note] [--after <ids>|--no-after] [--priority n] [--session-id <id>] | ' +
14
+ 'ftown plan rm <id> [--session-id <id>]';
15
+ const ITEM_ID_RE = /^p\d{1,6}$/;
16
+ const SESSION_ID_RE = /^[A-Za-z0-9_-]{1,200}$/;
17
+ async function defaultApi(method, path, body) {
18
+ return request(loadPointer(), method, path, body);
19
+ }
20
+ function resolveDeps(partial) {
21
+ return {
22
+ api: partial?.api ?? defaultApi,
23
+ env: partial?.env ?? process.env,
24
+ log: partial?.log ?? ((text) => console.log(text)),
25
+ errorLog: partial?.errorLog ?? ((text) => console.error(text)),
26
+ };
27
+ }
28
+ function requireSessionId(explicit, env) {
29
+ const id = (explicit ?? env.FTOWN_SESSION_ID)?.trim();
30
+ if (!id || !SESSION_ID_RE.test(id)) {
31
+ throw new UsageError('Supply a valid --session-id or set FTOWN_SESSION_ID');
32
+ }
33
+ return id;
34
+ }
35
+ function planPath(sessionId) {
36
+ return PLAN_ROUTES.plan.replace(':id', encodeURIComponent(sessionId));
37
+ }
38
+ function itemPath(sessionId, itemId) {
39
+ return PLAN_ROUTES.item
40
+ .replace(':id', encodeURIComponent(sessionId))
41
+ .replace(':itemId', encodeURIComponent(itemId));
42
+ }
43
+ // ───────────────────────── Flag parsing (pure) ─────────────────────────
44
+ export function parsePlanItemId(value) {
45
+ const id = value.trim();
46
+ if (!ITEM_ID_RE.test(id)) {
47
+ throw new UsageError(`Invalid plan item id "${value}" (expected p<n>)`);
48
+ }
49
+ return id;
50
+ }
51
+ export function parsePlanPriority(value) {
52
+ if (value !== '1' && value !== '2' && value !== '3') {
53
+ throw new UsageError(`--priority must be 1, 2 or 3 (got "${value}")`);
54
+ }
55
+ return Number(value);
56
+ }
57
+ export function parsePlanAfter(value) {
58
+ const parts = value.split(',').map((part) => part.trim());
59
+ if (parts.length === 0 || parts.some((part) => part.length === 0)) {
60
+ throw new UsageError('--after must be a comma-separated list of plan item ids');
61
+ }
62
+ for (const part of parts)
63
+ parsePlanItemId(part);
64
+ if (parts.length > PLAN_LIMITS.after) {
65
+ throw new UsageError(`--after must list at most ${PLAN_LIMITS.after} items`);
66
+ }
67
+ return parts;
68
+ }
69
+ function parseChildSessionId(value) {
70
+ const id = value.trim();
71
+ if (!SESSION_ID_RE.test(id)) {
72
+ throw new UsageError('--session requires a valid child session id');
73
+ }
74
+ return id;
75
+ }
76
+ // ───────────────────────── Output helpers ─────────────────────────
77
+ function planMark(item, ready) {
78
+ switch (item.state) {
79
+ case 'todo':
80
+ return ready.has(item.id) ? '→' : '·';
81
+ case 'started':
82
+ return '▸';
83
+ case 'done':
84
+ return '✓';
85
+ case 'dropped':
86
+ return '✗';
87
+ }
88
+ }
89
+ /**
90
+ * Plain plan row: `<mark> <id> [P<prio>] <title> (after p1,p2 | → <child name>)`.
91
+ * Ready/waiting comes only from `ready` (the server PlanView.ready ids);
92
+ * the child label is the session name from `childNames`, else the session id.
93
+ */
94
+ export function formatPlanItem(item, ready, childNames) {
95
+ const readySet = new Set(ready);
96
+ const base = `${planMark(item, readySet)} ${item.id} [P${item.priority}] ${item.title}`;
97
+ const suffix = [];
98
+ if (item.after.length > 0)
99
+ suffix.push(`after ${item.after.join(',')}`);
100
+ if (item.sessionId)
101
+ suffix.push(`→ ${childNames?.get(item.sessionId) ?? item.sessionId}`);
102
+ return suffix.length > 0 ? `${base} (${suffix.join(' | ')})` : base;
103
+ }
104
+ /** Plain plan list lines, in the order the API returned them. */
105
+ export function formatPlanList(view, childNames) {
106
+ const ready = new Set(view.ready);
107
+ return view.items.map((item) => formatPlanItem(item, ready, childNames));
108
+ }
109
+ /** Session id → name from a GET /api/sessions payload (`{ sessions: [{ id, name }] }`). */
110
+ export function parseSessionNames(data) {
111
+ const names = new Map();
112
+ if (data !== null && typeof data === 'object' && !Array.isArray(data)) {
113
+ const sessions = data.sessions;
114
+ if (Array.isArray(sessions)) {
115
+ for (const entry of sessions) {
116
+ if (entry !== null && typeof entry === 'object' && !Array.isArray(entry)) {
117
+ const id = entry.id;
118
+ const name = entry.name;
119
+ if (typeof id === 'string' && typeof name === 'string' && name)
120
+ names.set(id, name);
121
+ }
122
+ }
123
+ }
124
+ }
125
+ return names;
126
+ }
127
+ function asPlanView(data) {
128
+ if (data !== null && typeof data === 'object' && !Array.isArray(data)) {
129
+ const record = data;
130
+ const items = Array.isArray(record.items) ? record.items : [];
131
+ const ready = Array.isArray(record.ready)
132
+ ? record.ready.filter((value) => typeof value === 'string')
133
+ : [];
134
+ return { items, ready };
135
+ }
136
+ return { items: [], ready: [] };
137
+ }
138
+ function asItem(data) {
139
+ if (data !== null && typeof data === 'object' && !Array.isArray(data)) {
140
+ const item = data.item;
141
+ if (item !== null && typeof item === 'object' && !Array.isArray(item))
142
+ return item;
143
+ }
144
+ throw new Error('Invalid plan response');
145
+ }
146
+ async function printItem(deps, sessionId, data, json) {
147
+ if (json) {
148
+ deps.log(JSON.stringify(data, null, 2));
149
+ return;
150
+ }
151
+ const mutated = asItem(data);
152
+ // The mutation already succeeded: a failed confirmation GET must not turn
153
+ // it into an error. Fall back to the mutation payload and warn on stderr.
154
+ let view = { items: [], ready: [] };
155
+ try {
156
+ view = asPlanView(await deps.api('GET', planPath(sessionId)));
157
+ }
158
+ catch (error) {
159
+ deps.errorLog(`ftown plan: warning: could not refresh the plan (${error instanceof Error ? error.message : String(error)}); showing the mutation result`);
160
+ }
161
+ let childNames = new Map();
162
+ try {
163
+ childNames = parseSessionNames(await deps.api('GET', '/api/sessions'));
164
+ }
165
+ catch (error) {
166
+ deps.errorLog(`ftown plan: warning: could not load session names (${error instanceof Error ? error.message : String(error)}); showing session ids`);
167
+ }
168
+ const fresh = view.items.find((item) => item.id === mutated.id) ?? mutated;
169
+ deps.log(formatPlanItem(fresh, new Set(view.ready), childNames));
170
+ }
171
+ async function listPlan(deps, opts) {
172
+ const sessionId = requireSessionId(opts.sessionId, deps.env);
173
+ const data = await deps.api('GET', planPath(sessionId));
174
+ if (opts.json === true) {
175
+ deps.log(JSON.stringify(data, null, 2));
176
+ return;
177
+ }
178
+ const view = asPlanView(data);
179
+ // One sessions call per list resolves every child name; unknown ids fall back to the id.
180
+ const childNames = parseSessionNames(await deps.api('GET', '/api/sessions'));
181
+ if (view.items.length === 0) {
182
+ deps.log('no plan items');
183
+ return;
184
+ }
185
+ for (const line of formatPlanList(view, childNames))
186
+ deps.log(line);
187
+ }
188
+ export function buildAddBody(titleParts, opts) {
189
+ const title = titleParts.join(' ');
190
+ if (!title.trim())
191
+ throw new UsageError('Supply the plan item title', PLAN_USAGE);
192
+ const body = { title };
193
+ if (opts.note !== undefined)
194
+ body.note = opts.note;
195
+ if (opts.after !== undefined)
196
+ body.after = parsePlanAfter(opts.after);
197
+ if (opts.priority !== undefined)
198
+ body.priority = parsePlanPriority(opts.priority);
199
+ return body;
200
+ }
201
+ async function addPlan(deps, titleParts, opts) {
202
+ const sessionId = requireSessionId(opts.sessionId, deps.env);
203
+ const body = buildAddBody(titleParts, opts);
204
+ const data = await deps.api('POST', planPath(sessionId), body);
205
+ await printItem(deps, sessionId, data, opts.json === true);
206
+ }
207
+ async function startPlan(deps, rawId, opts) {
208
+ const sessionId = requireSessionId(opts.sessionId, deps.env);
209
+ const itemId = parsePlanItemId(rawId);
210
+ if (opts.session === undefined) {
211
+ throw new UsageError('ftown plan start requires --session <child-id>', PLAN_USAGE);
212
+ }
213
+ const childId = parseChildSessionId(opts.session);
214
+ const body = { state: 'started', sessionId: childId };
215
+ const data = await deps.api('PATCH', itemPath(sessionId, itemId), body);
216
+ await printItem(deps, sessionId, data, opts.json === true);
217
+ }
218
+ async function setPlanState(deps, rawId, state, opts) {
219
+ const sessionId = requireSessionId(opts.sessionId, deps.env);
220
+ const itemId = parsePlanItemId(rawId);
221
+ const data = await deps.api('PATCH', itemPath(sessionId, itemId), { state });
222
+ await printItem(deps, sessionId, data, opts.json === true);
223
+ }
224
+ export function buildEditPatch(opts) {
225
+ const patch = {};
226
+ let touched = false;
227
+ if (opts.title !== undefined) {
228
+ if (!opts.title.trim())
229
+ throw new UsageError('--title must not be empty');
230
+ patch.title = opts.title;
231
+ touched = true;
232
+ }
233
+ if (typeof opts.note === 'string') {
234
+ patch.note = opts.note;
235
+ touched = true;
236
+ }
237
+ else if (opts.note === false) {
238
+ patch.note = null;
239
+ touched = true;
240
+ }
241
+ if (typeof opts.after === 'string') {
242
+ patch.after = parsePlanAfter(opts.after);
243
+ touched = true;
244
+ }
245
+ else if (opts.after === false) {
246
+ patch.after = [];
247
+ touched = true;
248
+ }
249
+ if (opts.priority !== undefined) {
250
+ patch.priority = parsePlanPriority(opts.priority);
251
+ touched = true;
252
+ }
253
+ if (!touched) {
254
+ throw new UsageError('Nothing to edit: supply at least one of --title, --note/--no-note, --after/--no-after or --priority', PLAN_USAGE);
255
+ }
256
+ return patch;
257
+ }
258
+ async function editPlan(deps, rawId, opts) {
259
+ const sessionId = requireSessionId(opts.sessionId, deps.env);
260
+ const itemId = parsePlanItemId(rawId);
261
+ const patch = buildEditPatch(opts);
262
+ const data = await deps.api('PATCH', itemPath(sessionId, itemId), patch);
263
+ await printItem(deps, sessionId, data, opts.json === true);
264
+ }
265
+ async function removePlan(deps, rawId, opts) {
266
+ const sessionId = requireSessionId(opts.sessionId, deps.env);
267
+ const itemId = parsePlanItemId(rawId);
268
+ const data = await deps.api('DELETE', itemPath(sessionId, itemId));
269
+ if (opts.json === true) {
270
+ deps.log(JSON.stringify(data, null, 2));
271
+ return;
272
+ }
273
+ deps.log(`removed ${itemId}`);
274
+ }
275
+ function addJsonSessionOptions(command) {
276
+ return command
277
+ .option('--json', 'Machine-readable JSON output')
278
+ .option('--plain', 'Human-readable output (default)')
279
+ .option('--session-id <id>', 'Target session; defaults to FTOWN_SESSION_ID');
280
+ }
281
+ function planProgram(deps) {
282
+ const program = new Command()
283
+ .name('ftown plan')
284
+ .description("Manager plan list for this session's tree");
285
+ program.exitOverride();
286
+ program.enablePositionalOptions();
287
+ program.configureOutput({
288
+ writeOut: (text) => deps.log(text.trimEnd()),
289
+ writeErr: (text) => deps.errorLog(text.trimEnd()),
290
+ });
291
+ program
292
+ .option('--json', 'Machine-readable JSON output')
293
+ .option('--plain', 'Human-readable output (default)')
294
+ .option('--session-id <id>', 'Target session; defaults to FTOWN_SESSION_ID')
295
+ .action(async (opts) => {
296
+ await listPlan(deps, opts);
297
+ });
298
+ addJsonSessionOptions(program
299
+ .command('add')
300
+ .description('Add a plan item')
301
+ .argument('<title...>', 'Plan item title'))
302
+ .option('--note <t>', 'Item note')
303
+ .option('--after <id,id>', 'Comma-separated ids that must finish first')
304
+ .option('--priority <n>', 'Priority: 1 (highest), 2 or 3')
305
+ .action(async (titleParts, opts) => {
306
+ await addPlan(deps, titleParts, opts);
307
+ });
308
+ addJsonSessionOptions(program
309
+ .command('start')
310
+ .description('Mark an item started by a child session')
311
+ .argument('<id>', 'Plan item id'))
312
+ .option('--session <child-id>', 'Child session doing the item')
313
+ .action(async (id, opts) => {
314
+ await startPlan(deps, id, opts);
315
+ });
316
+ addJsonSessionOptions(program
317
+ .command('done')
318
+ .description('Mark a plan item done')
319
+ .argument('<id>', 'Plan item id')).action(async (id, opts) => {
320
+ await setPlanState(deps, id, 'done', opts);
321
+ });
322
+ addJsonSessionOptions(program
323
+ .command('drop')
324
+ .description('Mark a plan item dropped')
325
+ .argument('<id>', 'Plan item id')).action(async (id, opts) => {
326
+ await setPlanState(deps, id, 'dropped', opts);
327
+ });
328
+ addJsonSessionOptions(program
329
+ .command('todo')
330
+ .description('Mark a plan item todo')
331
+ .argument('<id>', 'Plan item id')).action(async (id, opts) => {
332
+ await setPlanState(deps, id, 'todo', opts);
333
+ });
334
+ addJsonSessionOptions(program
335
+ .command('edit')
336
+ .description('Edit a plan item')
337
+ .argument('<id>', 'Plan item id'))
338
+ .option('--title <t>', 'New title')
339
+ .option('--note <t>', 'New note')
340
+ .option('--no-note', 'Clear the note')
341
+ .option('--after <ids>', 'Comma-separated ids that must finish first')
342
+ .option('--no-after', 'Clear all predecessors')
343
+ .option('--priority <n>', 'Priority: 1 (highest), 2 or 3')
344
+ .action(async (id, opts) => {
345
+ await editPlan(deps, id, opts);
346
+ });
347
+ addJsonSessionOptions(program
348
+ .command('rm')
349
+ .description('Remove a plan item')
350
+ .argument('<id>', 'Plan item id')).action(async (id, opts) => {
351
+ await removePlan(deps, id, opts);
352
+ });
353
+ return program;
354
+ }
355
+ export async function runPlan(argv, deps) {
356
+ const resolved = resolveDeps(deps);
357
+ try {
358
+ await planProgram(resolved).parseAsync(argv, { from: 'user' });
359
+ return 0;
360
+ }
361
+ catch (error) {
362
+ if (error instanceof CommanderError)
363
+ return error.exitCode === 0 ? 0 : 2;
364
+ if (error instanceof UsageError) {
365
+ resolved.errorLog(`ftown plan: ${error.message}`);
366
+ if (error.usage)
367
+ resolved.errorLog(error.usage);
368
+ return 2;
369
+ }
370
+ resolved.errorLog(`ftown plan: ${error instanceof Error ? error.message : String(error)}`);
371
+ return 1;
372
+ }
373
+ }
374
+ //# sourceMappingURL=plan-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-cli.js","sourceRoot":"","sources":["../src/plan-cli.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { BridgeSecurityError } from './errors.js';
2
2
  const session = /^[A-Za-z0-9_-]+$/;
3
3
  const readCommands = new Set(['get_pull_request_statuses', 'session_preview_status', 'session_preview_chunk', 'get_bridge_update', 'list_sessions', 'get_history', 'get_session_usage', 'get_sessions_usage', 'get_session_attention',
4
4
  'ledger_head', 'ledger_chain',
5
- 'get_model_routing']);
5
+ 'get_model_routing', 'get_session_board']);
6
6
  const controlCommands = new Set(['update_bridge', 'create_session', 'stop_session', 'retry_session', 'send_message', 'rename_session', 'remove_session',
7
7
  'bridge_exec', 'clear_terminal', 'update_session_parent', 'resolve_session_attention', 'answer_session_attention',
8
8
  'set_model_routing']);
@@ -62,6 +62,26 @@ export function classifyHttp(method, path) {
62
62
  const events = /^\/api\/sessions\/([A-Za-z0-9_-]{1,200})\/events$/.exec(url.pathname);
63
63
  if (events)
64
64
  return method === 'GET' && queryAllows(url, ['since', 'limit', 'waitSeconds']) ? result('read', 'events_get', events[1]) : deny();
65
+ const planItem = /^\/api\/sessions\/([A-Za-z0-9_-]{1,200})\/plan\/(p\d{1,6})$/.exec(url.pathname);
66
+ if (planItem) {
67
+ if (url.search)
68
+ return deny();
69
+ if (method === 'PATCH')
70
+ return result('control', 'plan_patch', planItem[1]);
71
+ if (method === 'DELETE')
72
+ return result('control', 'plan_remove', planItem[1]);
73
+ return deny();
74
+ }
75
+ const plan = /^\/api\/sessions\/([A-Za-z0-9_-]{1,200})\/plan$/.exec(url.pathname);
76
+ if (plan) {
77
+ if (url.search)
78
+ return deny();
79
+ if (method === 'GET')
80
+ return result('read', 'plan_get', plan[1]);
81
+ if (method === 'POST')
82
+ return result('control', 'plan_add', plan[1]);
83
+ return deny();
84
+ }
65
85
  if (url.pathname === '/api/loops' || /^\/api\/loops\/[A-Za-z0-9_-]+(?:\/[A-Za-z0-9_-]+)?$/.test(url.pathname)) {
66
86
  if (!['GET', 'POST', 'PATCH', 'DELETE'].includes(method))
67
87
  return deny();
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/security/bridge/permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/security/bridge/permissions.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,19 @@
1
- import { SecurityCommandError } from './cli-client.js';
1
+ import { SecurityCommandError, securityCommand } from './cli-client.js';
2
2
  import type { BridgeInvitation } from './security/protocol.js';
3
3
  /** Printed instead of an invitation by an account bridge: its browsers come only from the passkey ledger (account_managed). */
4
4
  export declare const ACCOUNT_MANAGED_INVITE_MESSAGE: string;
5
5
  /** The line printed for a security command the bridge refused: its typed code, explained when known. */
6
6
  export declare function securityRefusalMessage(error: SecurityCommandError): string;
7
7
  export declare function invitationLink(invitation: BridgeInvitation, apiUrl?: string): string;
8
- export declare function runSecurity(argv: string[]): Promise<number>;
8
+ /**
9
+ * A --solo bridge serves its panel on its own front origin (persisted in the
10
+ * pointer as soloOrigin), so its invitation links belong there, not on the
11
+ * hosted one. The origin is still verified to name THIS bridge: a stale or
12
+ * wrong pointer must never hand the invitation to a different bridge's panel.
13
+ * Null keeps the hosted flow (hosted pointers, --local bridges, a front that
14
+ * no longer answers with this bridge's identity).
15
+ */
16
+ export declare function soloPanelOrigin(soloOrigin: string | undefined, bridgeId: string | undefined, fetchImpl?: typeof fetch): Promise<string | null>;
17
+ /** The base an invitation link is printed on: the solo panel origin when it verifies, else the configured API origin. */
18
+ export declare function invitationOrigin(soloOrigin: string | undefined, bridgeId: string | undefined, apiUrl: string | undefined, fetchImpl?: typeof fetch): Promise<string>;
19
+ export declare function runSecurity(argv: string[], send?: typeof securityCommand, fetchImpl?: typeof fetch, print?: (line: string) => void): Promise<number>;
@@ -23,9 +23,38 @@ export function invitationLink(invitation, apiUrl = 'https://ftown.ia.br') {
23
23
  url.hash = `invite=${encodeURIComponent(JSON.stringify(invitation))}`;
24
24
  return url.href;
25
25
  }
26
- export async function runSecurity(argv) {
26
+ /** A probe of the solo panel origin may take at most this long before falling back to the hosted link. */
27
+ const SOLO_PROBE_TIMEOUT_MS = 1500;
28
+ /**
29
+ * A --solo bridge serves its panel on its own front origin (persisted in the
30
+ * pointer as soloOrigin), so its invitation links belong there, not on the
31
+ * hosted one. The origin is still verified to name THIS bridge: a stale or
32
+ * wrong pointer must never hand the invitation to a different bridge's panel.
33
+ * Null keeps the hosted flow (hosted pointers, --local bridges, a front that
34
+ * no longer answers with this bridge's identity).
35
+ */
36
+ export async function soloPanelOrigin(soloOrigin, bridgeId, fetchImpl = fetch) {
37
+ if (!soloOrigin || !bridgeId)
38
+ return null;
39
+ try {
40
+ const response = await fetchImpl(new URL('/api/security/info', soloOrigin), { signal: AbortSignal.timeout(SOLO_PROBE_TIMEOUT_MS) });
41
+ if (!response.ok)
42
+ return null;
43
+ const info = (await response.json());
44
+ return info.bridgeId === bridgeId ? soloOrigin : null;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ /** The base an invitation link is printed on: the solo panel origin when it verifies, else the configured API origin. */
51
+ export async function invitationOrigin(soloOrigin, bridgeId, apiUrl, fetchImpl = fetch) {
52
+ return (await soloPanelOrigin(soloOrigin, bridgeId, fetchImpl)) ?? apiUrl ?? 'https://ftown.ia.br';
53
+ }
54
+ export async function runSecurity(argv, send = securityCommand, fetchImpl = fetch, print = console.log) {
27
55
  const program = new Command().name('ftown security').description('Manage this bridge’s encrypted endpoint trust')
28
- .option('--data-dir <path>', 'Bridge instance data directory').exitOverride();
56
+ .option('--data-dir <path>', 'Bridge instance data directory').exitOverride()
57
+ .configureOutput({ writeOut: text => print(text) });
29
58
  const pointer = () => readLocalPointer(program.opts().dataDir);
30
59
  program.command('invite').description('Create a one-use browser invitation (secret is printed only on this explicit request)')
31
60
  .option('--label <label>', 'Device label', 'Browser')
@@ -33,16 +62,16 @@ export async function runSecurity(argv) {
33
62
  const current = pointer();
34
63
  if (accountManaged(current.ownerId))
35
64
  throw new SecurityCliRefusal(ACCOUNT_MANAGED_INVITE_MESSAGE);
36
- const invite = await securityCommand(current, 'security_invite', { label: String(options.label) });
37
- console.log(invitationLink(invite, current.apiUrl));
65
+ const invite = await send(current, 'security_invite', { label: String(options.label) });
66
+ print(invitationLink(invite, await invitationOrigin(current.soloOrigin, current.bridgeId, current.apiUrl, fetchImpl)));
38
67
  });
39
68
  program.command('devices').description('List locally approved encrypted endpoints').action(async () => {
40
69
  const result = await securityCommand(pointer(), 'security_devices');
41
- console.log(JSON.stringify(result));
70
+ print(JSON.stringify(result));
42
71
  });
43
72
  program.command('revoke <endpoint-id>').description('Revoke an endpoint on this bridge').action(async (endpointId) => {
44
73
  await securityCommand(pointer(), 'security_revoke', { endpointId: String(endpointId) });
45
- console.log('Endpoint revoked.');
74
+ print('Endpoint revoked.');
46
75
  });
47
76
  program.command('proxy').description('Run one encrypted local API request from bounded JSON on stdin').action(async () => {
48
77
  let bytes = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"security-cli.js","sourceRoot":"","sources":["../src/security-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGrF,+HAA+H;AAC/H,MAAM,CAAC,MAAM,8BAA8B,GAAG,wGAAwG;MAClJ,6EAA6E,CAAC;AAElF,qGAAqG;AACrG,MAAM,kBAAmB,SAAQ,KAAK;CAAG;AAEzC,wGAAwG;AACxG,MAAM,UAAU,sBAAsB,CAAC,KAA2B;IAChE,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACrC,OAAO,4IAA4I,CAAC;IACtJ,CAAC;IACD,OAAO,6CAA6C,KAAK,CAAC,OAAO,EAAE,CAAC;AACtE,CAAC;AAED,yGAAyG;AACzG,SAAS,cAAc,CAAC,OAA2B;IACjD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAA4B,EAAE,MAAM,GAAG,qBAAqB;IACzF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,IAAI,GAAG,UAAU,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IACtE,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,+CAA+C,CAAC;SAC9G,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC,CAAC,YAAY,EAAE,CAAC;IAChF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAA6B,CAAC,CAAC;IACrF,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,uFAAuF,CAAC;SAC3H,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,SAAS,CAAC;SACpD,MAAM,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;QACtB,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAC1B,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,kBAAkB,CAAC,8BAA8B,CAAC,CAAC;QAClG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAgC,CAAC;QAClI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IACL,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACpG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAC,UAAU,EAAC,EAAE;QACjH,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC5H,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,gEAAgE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACvH,IAAI,KAAK,GAAG,CAAC,CAAC;QAAC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC3C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;YACtD,IAAI,KAAK,GAAG,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAC;QAC9F,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;eAC7H,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;eACtE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;eACnE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpI,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EACpF,MAAM,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAChF,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,cAAc;YAAE,OAAO,KAAK,CAAC,IAAI,KAAK,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1G,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACpF,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACtG,OAAO,CAAC,KAAK,CAAC,mGAAmG,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAC/H,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"security-cli.js","sourceRoot":"","sources":["../src/security-cli.ts"],"names":[],"mappings":"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"}
@@ -119,6 +119,7 @@ function sessionProgram() {
119
119
  .option('--base <ref>', 'Base ref for the worktree branch (requires --worktree)')
120
120
  .option('--name <label>', 'Dashboard name').option('--command <cmd>', 'Full command override')
121
121
  .option('--parent', 'Link to the current session').option('--parent-id <uuid>', 'Explicit parent session')
122
+ .option('--plan-item <id>', 'Start this todo item (p<n>) on the parent plan; requires --parent or --parent-id')
122
123
  .option('--model <name>', 'Model override')
123
124
  .option('--orchestrator', 'Compatibility flag (no additional prompt or environment changes)')
124
125
  .action((_opts, cmd) => run('create', [], cmd));
@@ -509,6 +510,13 @@ async function executeSessionCommand(cmd, rest, options) {
509
510
  const model = options.model;
510
511
  const parentId = options.parentId;
511
512
  const useParent = !!options.parent;
513
+ const planItem = options.planItem;
514
+ if (planItem !== undefined && !/^p\d{1,6}$/.test(planItem)) {
515
+ throw new Error('--plan-item must be a plan item id like p1, p12');
516
+ }
517
+ if (planItem !== undefined && !parentId && !useParent) {
518
+ throw new Error('--plan-item requires --parent or --parent-id');
519
+ }
512
520
  const createWorkdir = !!options.createWorkdir;
513
521
  const useWorktree = !!options.worktree;
514
522
  const branch = options.branch;
@@ -533,6 +541,8 @@ async function executeSessionCommand(cmd, rest, options) {
533
541
  body.parentSessionId = parentId;
534
542
  else if (useParent)
535
543
  body.parentSessionId = true;
544
+ if (planItem)
545
+ body.planItem = planItem;
536
546
  if (createWorkdir)
537
547
  body.createMissingWorkingDir = true;
538
548
  if (useWorktree) {