seatmesh 1.2.4 → 1.3.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.
Files changed (91) hide show
  1. package/bin/seatmesh +6 -1
  2. package/dist/commands/agent-forum.d.ts +6 -0
  3. package/dist/commands/agent-forum.d.ts.map +1 -0
  4. package/dist/commands/agent-forum.js +26 -0
  5. package/dist/commands/agent-forum.js.map +1 -0
  6. package/dist/commands/campaign-cli.d.ts +10 -0
  7. package/dist/commands/campaign-cli.d.ts.map +1 -0
  8. package/dist/commands/campaign-cli.js +136 -0
  9. package/dist/commands/campaign-cli.js.map +1 -0
  10. package/dist/commands/chat-cli.d.ts.map +1 -1
  11. package/dist/commands/chat-cli.js +55 -0
  12. package/dist/commands/chat-cli.js.map +1 -1
  13. package/dist/commands/cli-speed.test.d.ts +2 -0
  14. package/dist/commands/cli-speed.test.d.ts.map +1 -0
  15. package/dist/commands/cli-speed.test.js +39 -0
  16. package/dist/commands/cli-speed.test.js.map +1 -0
  17. package/dist/commands/cli-vocal.test.d.ts +2 -0
  18. package/dist/commands/cli-vocal.test.d.ts.map +1 -0
  19. package/dist/commands/cli-vocal.test.js +58 -0
  20. package/dist/commands/cli-vocal.test.js.map +1 -0
  21. package/dist/commands/completion.d.ts +3 -0
  22. package/dist/commands/completion.d.ts.map +1 -1
  23. package/dist/commands/completion.js +55 -14
  24. package/dist/commands/completion.js.map +1 -1
  25. package/dist/commands/completion.test.js +37 -2
  26. package/dist/commands/completion.test.js.map +1 -1
  27. package/dist/commands/contract-lock-cli.d.ts.map +1 -1
  28. package/dist/commands/contract-lock-cli.js +150 -29
  29. package/dist/commands/contract-lock-cli.js.map +1 -1
  30. package/dist/commands/help-text.d.ts.map +1 -1
  31. package/dist/commands/help-text.js +90 -26
  32. package/dist/commands/help-text.js.map +1 -1
  33. package/dist/commands/host-cli.d.ts +5 -0
  34. package/dist/commands/host-cli.d.ts.map +1 -0
  35. package/dist/commands/host-cli.js +120 -0
  36. package/dist/commands/host-cli.js.map +1 -0
  37. package/dist/commands/nav-cli.d.ts +8 -0
  38. package/dist/commands/nav-cli.d.ts.map +1 -0
  39. package/dist/commands/nav-cli.js +54 -0
  40. package/dist/commands/nav-cli.js.map +1 -0
  41. package/dist/commands/notify-cli.d.ts.map +1 -1
  42. package/dist/commands/notify-cli.js +38 -3
  43. package/dist/commands/notify-cli.js.map +1 -1
  44. package/dist/commands/room-cli.d.ts.map +1 -1
  45. package/dist/commands/room-cli.js +23 -6
  46. package/dist/commands/room-cli.js.map +1 -1
  47. package/dist/commands/schedule-cli.d.ts +13 -0
  48. package/dist/commands/schedule-cli.d.ts.map +1 -0
  49. package/dist/commands/schedule-cli.js +74 -0
  50. package/dist/commands/schedule-cli.js.map +1 -0
  51. package/dist/commands/schedule-cli.test.d.ts +2 -0
  52. package/dist/commands/schedule-cli.test.d.ts.map +1 -0
  53. package/dist/commands/schedule-cli.test.js +29 -0
  54. package/dist/commands/schedule-cli.test.js.map +1 -0
  55. package/dist/commands/todo-give.test.js +21 -5
  56. package/dist/commands/todo-give.test.js.map +1 -1
  57. package/dist/fast-spawn.d.ts +3 -0
  58. package/dist/fast-spawn.d.ts.map +1 -0
  59. package/dist/fast-spawn.js +107 -0
  60. package/dist/fast-spawn.js.map +1 -0
  61. package/dist/main.js +323 -44
  62. package/dist/main.js.map +1 -1
  63. package/dist/setup/init.d.ts +11 -0
  64. package/dist/setup/init.d.ts.map +1 -1
  65. package/dist/setup/init.js +38 -0
  66. package/dist/setup/init.js.map +1 -1
  67. package/dist/setup/init.test.js +3 -2
  68. package/dist/setup/init.test.js.map +1 -1
  69. package/dist/setup/install.js +2 -2
  70. package/dist/setup/install.js.map +1 -1
  71. package/package.json +8 -7
  72. package/profiles/minimal/mesh.config.yaml +1 -0
  73. package/templates/cursor/rules/seatmesh-agent.mdc +40 -0
  74. package/templates/docs/RELEASE.md +9 -3
  75. package/templates/docs/cli/README.md +110 -11
  76. package/templates/docs/cli/chat.md +4 -3
  77. package/templates/docs/cli/contract.md +15 -15
  78. package/templates/docs/cli/host.md +12 -0
  79. package/templates/docs/cli/human.md +15 -7
  80. package/templates/docs/cli/kind.md +4 -2
  81. package/templates/docs/cli/nav.md +12 -0
  82. package/templates/docs/cli/{oc-proxy.md → opencode-cpe.md} +10 -10
  83. package/templates/docs/cli/rebuild.md +3 -0
  84. package/templates/docs/cli/reload.md +8 -5
  85. package/templates/docs/cli/room.md +5 -7
  86. package/templates/docs/cli/schedule.md +13 -0
  87. package/templates/docs/cli/secretary.md +1 -1
  88. package/templates/docs/cli/spawn.md +13 -0
  89. package/templates/docs/cli/switch.md +4 -4
  90. package/templates/init/AGENTS.md +10 -10
  91. package/templates/init/mesh.config.yaml +11 -4
package/bin/seatmesh CHANGED
@@ -38,6 +38,11 @@ for a in "$@"; do
38
38
  PROFILE="${a#--profile=}"
39
39
  continue
40
40
  fi
41
+ # Global boolean flags (main.ts strips these itself) — skip in ARGS so
42
+ # is_attach_cmd/allow_outside_mesh see the real command, e.g. `--agents help`.
43
+ if [[ "$a" == "--agents" || "$a" == "--agent-help" ]]; then
44
+ continue
45
+ fi
41
46
  ARGS+=("$a")
42
47
  done
43
48
  [[ -n "$prev" ]] && ARGS+=("$prev")
@@ -128,7 +133,7 @@ in_mesh_context() {
128
133
  allow_outside_mesh() {
129
134
  local a0="${ARGS[0]:-}"
130
135
  case "$a0" in
131
- ""|help|-h|--help|start|attach|session|sessions|init|version|install|update|completion|migrate-runtime|roles) return 0 ;;
136
+ ""|help|-h|--help|start|attach|session|sessions|init|version|install|update|completion|migrate-runtime|roles|host) return 0 ;;
132
137
  esac
133
138
  return 1
134
139
  }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Agent golf / shorthand forum — printed by `sm agent forum` (alias: golf).
3
+ * This is what "shorthand" means: collapse bash magic into one sm verb + Ruby ranges.
4
+ */
5
+ export declare function printAgentForum(): void;
6
+ //# sourceMappingURL=agent-forum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-forum.d.ts","sourceRoot":"","sources":["../../src/commands/agent-forum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAoBtC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Agent golf / shorthand forum — printed by `sm agent forum` (alias: golf).
3
+ * This is what "shorthand" means: collapse bash magic into one sm verb + Ruby ranges.
4
+ */
5
+ export function printAgentForum() {
6
+ console.log(`--- golf / shorthand ---
7
+ NOT synonym soup. Shorthand = collapse bash into one sm verb + Ruby ranges.
8
+
9
+ | Job | Type this | Not this |
10
+ |-----|-----------|----------|
11
+ | Tell seats | sm agent peer 1..4 "…" | for i in 1 2 3 4; do … peer slot-$i |
12
+ | Tell list | sm agent peer 1,3,5 "…" | three peer calls / bash loop |
13
+ | Empty→CLI | sm agent spawn slot-1 opencode | type opencode by hand / slow switch |
14
+ | Fast paste | spawn (default --fast) | switch (waits verify+summon) |
15
+ | Replace live | sm agent switch slot-1 claude | C-c; opencode; hope |
16
+ | Resume cfg | sm agent launch 1..4 | bash paste each pane |
17
+ | Give work | sm agent todo give slot-2 "…" | edit TASKS.md |
18
+ | Close ask | sm agent ack <id> | chat "ACK" |
19
+ | Eyes | sm agent notify … | ./scripts/notify.sh |
20
+
21
+ Ranges: 1..4 · slot-2..5 · mini-1..3 · 1,3,5
22
+ Gateway: sm agent whoami · sm agent (every turn)
23
+ Bin: sm (not seatmesh --profile .sm · not ./sm.sh · not npx --prefix)
24
+ `);
25
+ }
26
+ //# sourceMappingURL=agent-forum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-forum.js","sourceRoot":"","sources":["../../src/commands/agent-forum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `sm campaign ...` (TODO 8.2/8.4) — ticket-style campaigns, the narrowest slice
3
+ * of the campaign-contract vision (docs/HANDOUT-CAMPAIGN-CONTRACT.md). One atomic
4
+ * unit of work: title, objective (what "done" means), status, optional assignee.
5
+ * No dependency graph, no supervisor/balancer roles — those stay open questions.
6
+ */
7
+ import { Command } from "commander";
8
+ import { type LoadedProfile } from "@seat-mesh/core";
9
+ export declare function buildCampaignCommands(getLoaded: () => LoadedProfile): Command;
10
+ //# sourceMappingURL=campaign-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaign-cli.d.ts","sourceRoot":"","sources":["../../src/commands/campaign-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAgCzB,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,aAAa,GAAG,OAAO,CAqH7E"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * `sm campaign ...` (TODO 8.2/8.4) — ticket-style campaigns, the narrowest slice
3
+ * of the campaign-contract vision (docs/HANDOUT-CAMPAIGN-CONTRACT.md). One atomic
4
+ * unit of work: title, objective (what "done" means), status, optional assignee.
5
+ * No dependency graph, no supervisor/balancer roles — those stay open questions.
6
+ */
7
+ import { Command } from "commander";
8
+ import { assignCampaign, createCampaign, findCampaign, noteCampaign, readCampaigns, setCampaignStatus, } from "@seat-mesh/core";
9
+ function printCampaignLine(c) {
10
+ console.log(`${c.id}\t${c.status}\t${c.title}\tassignee=${c.assignee ?? "-"}\tcreated=${c.createdAt}`);
11
+ }
12
+ function printCampaignDetail(c) {
13
+ console.log(`id: ${c.id}`);
14
+ console.log(`title: ${c.title}`);
15
+ console.log(`objective: ${c.objective ?? "(none)"}`);
16
+ console.log(`status: ${c.status}`);
17
+ console.log(`assignee: ${c.assignee ?? "-"}`);
18
+ console.log(`created: ${c.createdAt}`);
19
+ console.log(`updated: ${c.updatedAt}`);
20
+ if (c.doneAt)
21
+ console.log(`done: ${c.doneAt}`);
22
+ if (c.notes.length) {
23
+ console.log("notes:");
24
+ for (const n of c.notes)
25
+ console.log(` ${n.at}\t${n.by ?? "?"}\t${n.note}`);
26
+ }
27
+ }
28
+ async function requireCampaign(loaded, id) {
29
+ const c = await findCampaign(loaded, id);
30
+ if (!c) {
31
+ console.error(`campaign not found: ${id}`);
32
+ process.exit(1);
33
+ }
34
+ return c;
35
+ }
36
+ export function buildCampaignCommands(getLoaded) {
37
+ const campaign = new Command("campaign").description("Ticket-style campaigns — atomic work units with a status and an objective");
38
+ campaign
39
+ .command("create <title>")
40
+ .description("Create a new open campaign")
41
+ .option("--objective <text>", "what \"done\" means for this campaign")
42
+ .option("--assign <seat>", "assignee (seat id / persona column)")
43
+ .option("--by <seat>", "who filed this (defaults to operator)")
44
+ .option("--json", "JSON output")
45
+ .action(async (title, opts) => {
46
+ const loaded = getLoaded();
47
+ const c = await createCampaign(loaded, {
48
+ title,
49
+ objective: opts.objective,
50
+ assignee: opts.assign,
51
+ by: opts.by,
52
+ });
53
+ if (opts.json) {
54
+ console.log(JSON.stringify(c, null, 2));
55
+ return;
56
+ }
57
+ console.log(`created ${c.id}`);
58
+ printCampaignDetail(c);
59
+ });
60
+ campaign
61
+ .command("list")
62
+ .description("List campaigns, most recently created first")
63
+ .option("--status <status>", "filter: open|done|cancelled|all", "open")
64
+ .option("--json", "JSON output")
65
+ .action(async (opts) => {
66
+ const loaded = getLoaded();
67
+ const all = await readCampaigns(loaded);
68
+ const rows = opts.status === "all" ? all : all.filter((c) => c.status === opts.status);
69
+ if (opts.json) {
70
+ console.log(JSON.stringify(rows, null, 2));
71
+ return;
72
+ }
73
+ if (!rows.length) {
74
+ console.log(`(no ${opts.status === "all" ? "" : `${opts.status} `}campaigns)`);
75
+ return;
76
+ }
77
+ for (const c of rows)
78
+ printCampaignLine(c);
79
+ });
80
+ campaign
81
+ .command("show <id>")
82
+ .description("Show one campaign's full detail, including notes")
83
+ .option("--json", "JSON output")
84
+ .action(async (id, opts) => {
85
+ const loaded = getLoaded();
86
+ const c = await requireCampaign(loaded, id);
87
+ if (opts.json) {
88
+ console.log(JSON.stringify(c, null, 2));
89
+ return;
90
+ }
91
+ printCampaignDetail(c);
92
+ });
93
+ campaign
94
+ .command("assign <id> <seat>")
95
+ .description("Assign (or reassign) a campaign to a seat")
96
+ .option("--by <seat>", "who filed this")
97
+ .action(async (id, seat, opts) => {
98
+ const loaded = getLoaded();
99
+ await requireCampaign(loaded, id);
100
+ await assignCampaign(loaded, id, seat, opts.by);
101
+ console.log(`${id} assigned -> ${seat}`);
102
+ });
103
+ const setStatus = (status, verb) => async (id, opts) => {
104
+ const loaded = getLoaded();
105
+ await requireCampaign(loaded, id);
106
+ await setCampaignStatus(loaded, id, status, opts.by);
107
+ console.log(`${id} ${verb}`);
108
+ };
109
+ campaign
110
+ .command("done <id>")
111
+ .description("Mark a campaign done")
112
+ .option("--by <seat>", "who filed this")
113
+ .action(setStatus("done", "done"));
114
+ campaign
115
+ .command("cancel <id>")
116
+ .description("Cancel a campaign")
117
+ .option("--by <seat>", "who filed this")
118
+ .action(setStatus("cancelled", "cancelled"));
119
+ campaign
120
+ .command("reopen <id>")
121
+ .description("Reopen a done/cancelled campaign")
122
+ .option("--by <seat>", "who filed this")
123
+ .action(setStatus("open", "reopened"));
124
+ campaign
125
+ .command("note <id> <text>")
126
+ .description("Append a progress note to a campaign")
127
+ .option("--by <seat>", "who filed this")
128
+ .action(async (id, text, opts) => {
129
+ const loaded = getLoaded();
130
+ await requireCampaign(loaded, id);
131
+ await noteCampaign(loaded, id, text, opts.by);
132
+ console.log(`${id} noted`);
133
+ });
134
+ return campaign;
135
+ }
136
+ //# sourceMappingURL=campaign-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaign-cli.js","sourceRoot":"","sources":["../../src/commands/campaign-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,GAIlB,MAAM,iBAAiB,CAAC;AAEzB,SAAS,iBAAiB,CAAC,CAAiB;IAC1C,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,QAAQ,IAAI,GAAG,aAAa,CAAC,CAAC,SAAS,EAAE,CAC1F,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAiB;IAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAqB,EAAE,EAAU;IAC9D,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAA8B;IAClE,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAClD,2EAA2E,CAC5E,CAAC;IAEF,QAAQ;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,oBAAoB,EAAE,uCAAuC,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;SAChE,MAAM,CAAC,aAAa,EAAE,uCAAuC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CACL,KAAK,EACH,KAAa,EACb,IAA0E,EAC1E,EAAE;QACF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;YACrC,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CACF,CAAC;IAEJ,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,IAAwC,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAwB,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAY,EAAE,IAAqB,EAAE,EAAE;QAChE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEL,MAAM,SAAS,GAAG,CAAC,MAAsB,EAAE,IAAY,EAAE,EAAE,CACzD,KAAK,EAAE,EAAU,EAAE,IAAqB,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEJ,QAAQ;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAErC,QAAQ;SACL,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/C,QAAQ;SACL,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzC,QAAQ;SACL,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAY,EAAE,IAAqB,EAAE,EAAE;QAChE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat-cli.d.ts","sourceRoot":"","sources":["../../src/commands/chat-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,KAAK,aAAa,EAUnB,MAAM,iBAAiB,CAAC;AA4BzB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,aAAa,GAAG,OAAO,CAyKzE"}
1
+ {"version":3,"file":"chat-cli.d.ts","sourceRoot":"","sources":["../../src/commands/chat-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,KAAK,aAAa,EAUnB,MAAM,iBAAiB,CAAC;AA4BzB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,aAAa,GAAG,OAAO,CA4OzE"}
@@ -106,6 +106,61 @@ export function buildChatCommands(getLoaded) {
106
106
  });
107
107
  console.log(`ok id=${row.id} slot=${row.slot} agent=${row.agent} humanKind=${row.humanKind} turnHash=${row.turnHash}`);
108
108
  });
109
+ chat
110
+ .command("put")
111
+ .description("Positional upsert — same as `chat append --human` (dedup by turnHash)")
112
+ .argument("<slot>", "worker-1, mini-3, manager, ...")
113
+ .argument("<human...>", "human prompt text")
114
+ .option("--response <text>", "agent response")
115
+ .option("--session <id>")
116
+ .option("--model <name>")
117
+ .option("--provider <id>", "default: unknown")
118
+ .action(async (slot, humanParts, opts) => {
119
+ const loaded = getLoaded();
120
+ const cfg = chatFileConfigForLoaded(loaded);
121
+ const human = humanParts.join(" ").trim();
122
+ if (!human) {
123
+ console.error("chat put: human prompt required");
124
+ process.exit(2);
125
+ }
126
+ const row = await appendSlotPrompt(loaded.workspace, cfg, {
127
+ slot,
128
+ providerId: opts.provider ?? "unknown",
129
+ sessionId: opts.session,
130
+ model: opts.model,
131
+ humanPrompt: human,
132
+ agentResponse: opts.response,
133
+ });
134
+ console.log(`ok id=${row.id} slot=${row.slot} agent=${row.agent} turnHash=${row.turnHash}`);
135
+ });
136
+ chat
137
+ .command("get")
138
+ .description("Look up one chat record by id or turnHash (full or 8-char prefix)")
139
+ .argument("<id>", "record id or turnHash, full or 8-char prefix")
140
+ .option("--slot <key>", "search only this slot (default: all slots)")
141
+ .option("--json", "JSON output")
142
+ .action(async (id, opts) => {
143
+ const loaded = getLoaded();
144
+ const cfg = chatFileConfigForLoaded(loaded);
145
+ const rows = await querySlotPrompts(loaded.workspace, cfg, {
146
+ slot: opts.slot,
147
+ limit: Number.MAX_SAFE_INTEGER,
148
+ });
149
+ const row = rows.find((r) => r.id === id ||
150
+ r.id.startsWith(id) ||
151
+ r.turnHash === id ||
152
+ Boolean(r.turnHash?.startsWith(id)));
153
+ if (!row) {
154
+ console.error(`chat get: no record ${id}${opts.slot ? ` in slot=${opts.slot}` : ""}`);
155
+ process.exit(1);
156
+ }
157
+ if (opts.json) {
158
+ console.log(JSON.stringify(row, null, 2));
159
+ }
160
+ else {
161
+ console.log(formatChatTranscript(row));
162
+ }
163
+ });
109
164
  chat
110
165
  .command("record")
111
166
  .description("Scrape pane(s) via AgentProvider and append new turns")
@@ -1 +1 @@
1
- {"version":3,"file":"chat-cli.js","sourceRoot":"","sources":["../../src/commands/chat-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-cli.js","sourceRoot":"","sources":["../../src/commands/chat-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-speed.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-speed.test.d.ts","sourceRoot":"","sources":["../../src/commands/cli-speed.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * CLI speed budget — >1s wall for spawn --fast is a regression.
3
+ * Needs live mesh tmux (skips otherwise).
4
+ */
5
+ import { describe, expect, it } from "vitest";
6
+ import { spawnSync } from "node:child_process";
7
+ import path from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../..");
10
+ const bin = path.join(repoRoot, "bin/seatmesh");
11
+ const inMesh = Boolean(process.env.TMUX_PANE) && Boolean(process.env.TMUX);
12
+ describe("cli speed budget", () => {
13
+ it.skipIf(!inMesh)("spawn --fast wall clock < 1000ms", () => {
14
+ // Ensure empty shell first (also must be fast)
15
+ spawnSync(bin, ["switch", "slot-1", "empty", "--fast"], {
16
+ encoding: "utf8",
17
+ cwd: repoRoot,
18
+ env: process.env,
19
+ });
20
+ const t0 = Date.now();
21
+ const r = spawnSync(bin, ["spawn", "slot-1", "opencode"], {
22
+ encoding: "utf8",
23
+ cwd: repoRoot,
24
+ env: process.env,
25
+ });
26
+ const ms = Date.now() - t0;
27
+ expect(r.status, r.stderr || r.stdout).toBe(0);
28
+ expect(r.stdout + r.stderr).toMatch(/\[fast\]|already live|launched\[fast\]/);
29
+ expect(ms, `spawn --fast took ${ms}ms (budget 1000ms)`).toBeLessThan(1000);
30
+ });
31
+ it("help spawn wall < 1000ms (cold-ish)", () => {
32
+ const t0 = Date.now();
33
+ const r = spawnSync(bin, ["help", "spawn"], { encoding: "utf8", cwd: repoRoot });
34
+ const ms = Date.now() - t0;
35
+ expect(r.status).toBe(0);
36
+ expect(ms, `help spawn took ${ms}ms`).toBeLessThan(1000);
37
+ });
38
+ });
39
+ //# sourceMappingURL=cli-speed.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-speed.test.js","sourceRoot":"","sources":["../../src/commands/cli-speed.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3F,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAChD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE3E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1D,+CAA+C;QAC/C,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;YACtD,QAAQ,EAAE,MAAM;YAChB,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;YACxD,QAAQ,EAAE,MAAM;YAChB,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QAC9E,MAAM,CAAC,EAAE,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-vocal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-vocal.test.d.ts","sourceRoot":"","sources":["../../src/commands/cli-vocal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { spawnSync } from "node:child_process";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { printAgentForum } from "./agent-forum.js";
6
+ import { printCmdHelp, resolveHelpVerb, listHelpVerbs } from "./help-text.js";
7
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../..");
8
+ const bin = path.join(repoRoot, "bin/seatmesh");
9
+ describe("cli vocal + shorthand coverage", () => {
10
+ it("help covers spawn, rebuild, forum", () => {
11
+ const verbs = new Set(listHelpVerbs());
12
+ expect(verbs.has("spawn")).toBe(true);
13
+ expect(verbs.has("rebuild") || resolveHelpVerb("rebuild") === "reload").toBe(true);
14
+ expect(printCmdHelp("spawn")).toBe(true);
15
+ expect(printCmdHelp("forum")).toBe(true);
16
+ expect(printCmdHelp("reload")).toBe(true);
17
+ });
18
+ it("spawn help mentions fast + ranges", () => {
19
+ const r = spawnSync(bin, ["help", "spawn"], { encoding: "utf8", cwd: repoRoot });
20
+ expect(r.status).toBe(0);
21
+ expect(r.stdout).toMatch(/--fast/);
22
+ expect(r.stdout).toMatch(/1\.\.4|ranges/i);
23
+ });
24
+ it("rebuild aliases to reload help", () => {
25
+ expect(resolveHelpVerb("rebuild")).toBe("reload");
26
+ const r = spawnSync(bin, ["help", "rebuild"], { encoding: "utf8", cwd: repoRoot });
27
+ expect(r.status).toBe(0);
28
+ expect(r.stdout).toMatch(/npm build|labels/i);
29
+ });
30
+ it("forum table prints Ruby ranges + no bash", () => {
31
+ const lines = [];
32
+ const orig = console.log;
33
+ console.log = (...a) => {
34
+ lines.push(a.map(String).join(" "));
35
+ };
36
+ try {
37
+ printAgentForum();
38
+ }
39
+ finally {
40
+ console.log = orig;
41
+ }
42
+ const body = lines.join("\n");
43
+ expect(body).toMatch(/1\.\.4/);
44
+ expect(body).toMatch(/peer 1\.\.4/);
45
+ expect(body).toMatch(/spawn/);
46
+ expect(body).toMatch(/NOT synonym soup|Ruby ranges/i);
47
+ });
48
+ it("agent forum exits 0", () => {
49
+ const r = spawnSync(bin, ["agent", "forum"], {
50
+ encoding: "utf8",
51
+ cwd: repoRoot,
52
+ env: { ...process.env, TMUX: "", TMUX_PANE: "" },
53
+ });
54
+ expect(r.status).toBe(0);
55
+ expect(r.stdout).toMatch(/1\.\.4/);
56
+ });
57
+ });
58
+ //# sourceMappingURL=cli-vocal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-vocal.test.js","sourceRoot":"","sources":["../../src/commands/cli-vocal.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ /** Test-only: resolveCliTypes() memoizes per process; tests that chdir between a
2
+ * profile and no-profile cwd need to clear this between cases. */
3
+ export declare function __resetCliTypesCacheForTests(): void;
1
4
  /** Top-level verbs + aliases (+ completion itself). */
2
5
  export declare function listTopLevelCompletionWords(): string[];
3
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AA0JA,uDAAuD;AACvD,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAGtD;AAUD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAmDhE;AAaD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAsFrE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAyB7C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAa5C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAgB7C;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAoBjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsCzD"}
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAqKA;kEACkE;AAClE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAwBD,uDAAuD;AACvD,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAGtD;AAUD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAmDhE;AAaD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA0FrE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAyB7C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAa5C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAgB7C;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAoBjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsCzD"}
@@ -3,12 +3,17 @@
3
3
  * Source of truth for top-level verbs: help-text.ts.
4
4
  */
5
5
  import { listHelpAliases, listHelpVerbs } from "./help-text.js";
6
+ import { findDotSmConfig, knownAgentKindIds, loadProfile } from "@seat-mesh/core";
7
+ import { resolveKindsForProfile } from "@seat-mesh/providers";
6
8
  const GLOBAL_FLAGS = ["--profile", "-p", "--help", "-h"];
9
+ /** Builtin fallback — used when no `.sm/` profile is discoverable from cwd, or it
10
+ * fails to load. `switch`/`handoff`/`set`/`secretary switch` prefer the live
11
+ * resolveCliTypes() below (profile-aware: custom agents.kinds + their aliases). */
7
12
  const CLI_TYPES = [
8
13
  "agent",
9
14
  "claude",
10
15
  "opencode",
11
- "oc-proxy",
16
+ "opencode-cpe",
12
17
  "kiro",
13
18
  "empty",
14
19
  "cc",
@@ -34,19 +39,20 @@ const SUBS = {
34
39
  web: ["status", "up", "down", "restart", "open", "url", "help"],
35
40
  session: ["attach", "up", "down", "status", "sync", "check", "repair", "init"],
36
41
  sessions: ["list", "attach", "forget", "register", "pick"],
37
- layout: ["column"],
42
+ layout: ["column", "scale", "reload", "realign"],
38
43
  ops: ["list", "clear"],
39
44
  inbox: ["list", "resolve", "log", "instances", "stop", "restart"],
40
45
  mini: ["list", "spawn", "prompt", "done", "kill", "reassign", "dispatch-all"],
41
- secretary: ["start", "status", "digest", "restart", "supervise", "switch", "watch"],
46
+ secretary: ["start", "stop", "status", "digest", "restart", "supervise", "switch", "watch"],
42
47
  roles: ["status", "migrate", "steps"],
43
48
  night: ["on", "off", "status"],
44
49
  ack: ["list", "reply", "clear", "redirect"],
45
50
  cb: ["list", "start", "cancel", "cancel-all", "reset", "ack"],
46
51
  checkback: ["list", "start", "cancel", "cancel-all", "reset", "ack"],
47
52
  patience: ["list", "start", "cancel", "cancel-all", "reset", "ack"],
48
- room: ["tail", "say", "broadcast", "read", "call", "accept"],
49
- chat: ["tail", "query", "append", "record"],
53
+ room: ["tail", "say", "broadcast", "read", "call", "accept", "get"],
54
+ chat: ["tail", "query", "append", "record", "put", "get"],
55
+ nav: ["log", "summary"],
50
56
  hub: ["contexts", "todos", "acks", "cbs", "chat", "room", "shared", "sessions"],
51
57
  get: ["contexts", "todos", "acks", "cbs", "chat", "room", "shared", "sessions"],
52
58
  seat: ["init", "task", "todo", "now", "mark", "remind", "assign"],
@@ -58,7 +64,7 @@ const SUBS = {
58
64
  reply: [],
59
65
  todo: ["give", "send", "to", "list", "add", "check", "ls", "show"],
60
66
  todos: ["give", "send", "to", "list", "add", "check", "ls", "show"],
61
- notify: ["info", "md", "details", "yesno", "desktop"],
67
+ notify: ["info", "md", "details", "yesno", "run", "cmd", "desktop"],
62
68
  mds: ["hosted", "agent-self", "agent", "status", "list", "help"],
63
69
  preview: [],
64
70
  limit: ["idle", "idle-clear"],
@@ -81,6 +87,7 @@ const SUBS = {
81
87
  continue: ["all", "1", "2", "3"],
82
88
  switch: [...COMMON_TARGETS],
83
89
  handoff: [...COMMON_TARGETS],
90
+ spawn: [...COMMON_TARGETS],
84
91
  set: [...COMMON_TARGETS],
85
92
  swap: [...COMMON_TARGETS],
86
93
  ppa: ["--raw", "--idle", "perf-index", "index"],
@@ -92,6 +99,7 @@ const SUBS = {
92
99
  version: ["--json", "--check-registry"],
93
100
  update: ["--dry-run", "--migrate", "--no-restart-inbox"],
94
101
  reload: ["--layout"],
102
+ rebuild: ["--layout"],
95
103
  save: ["--json", "--no-labels"],
96
104
  auto: ["--json", "--no-labels"],
97
105
  init: ["--force", "--seats-root", "--name"],
@@ -106,6 +114,8 @@ const SUBS = {
106
114
  const DEEPER = {
107
115
  layout: {
108
116
  column: ["list", "add", "remove"],
117
+ scale: ["workers", "minis", "up", "down"],
118
+ reload: ["--yes", "--no-leads", "--no-resume"],
109
119
  },
110
120
  seat: {
111
121
  task: ["list", "add", "check"],
@@ -114,7 +124,7 @@ const DEEPER = {
114
124
  secretary: {
115
125
  supervise: ["on", "run", "off"],
116
126
  watch: ["on", "off"],
117
- switch: CLI_TYPES,
127
+ // switch: handled earlier via resolveCliTypes() (profile-aware, TODO 6.3)
118
128
  },
119
129
  session: {
120
130
  init: [],
@@ -132,9 +142,8 @@ const DEEPER = {
132
142
  peek: {
133
143
  // after target
134
144
  },
135
- switch: Object.fromEntries(COMMON_TARGETS.map((t) => [t, CLI_TYPES])),
136
- handoff: Object.fromEntries(COMMON_TARGETS.map((t) => [t, CLI_TYPES])),
137
- set: Object.fromEntries(COMMON_TARGETS.map((t) => [t, CLI_TYPES])),
145
+ // switch/handoff/set <target> <cli>: handled earlier via resolveCliTypes()
146
+ // (profile-aware, TODO 6.3) — not listed here.
138
147
  pane: {
139
148
  resume: COMMON_TARGETS.filter((t) => t !== "all"),
140
149
  },
@@ -145,6 +154,36 @@ const DEEPER = {
145
154
  function uniqSorted(words) {
146
155
  return [...new Set(words.filter(Boolean))].sort((a, b) => a.localeCompare(b));
147
156
  }
157
+ let cachedCliTypes;
158
+ /** Test-only: resolveCliTypes() memoizes per process; tests that chdir between a
159
+ * profile and no-profile cwd need to clear this between cases. */
160
+ export function __resetCliTypesCacheForTests() {
161
+ cachedCliTypes = undefined;
162
+ }
163
+ /**
164
+ * Profile-aware CLI type completions (TODO 6.3): resolved kinds — provider
165
+ * kindBase ⊎ this profile's agents.kinds overlay ⊎ runners shim — instead of just
166
+ * the builtin CLI_TYPES list, so a custom `agents.kinds.my-oc: {...}` overlay tab-
167
+ * completes too. Cheap (yaml parse only, no tmux/network) and memoized per process;
168
+ * falls back to CLI_TYPES on any failure or when no `.sm/` is discoverable from cwd.
169
+ */
170
+ function resolveCliTypes() {
171
+ if (cachedCliTypes)
172
+ return cachedCliTypes;
173
+ try {
174
+ const profilePath = findDotSmConfig();
175
+ if (!profilePath)
176
+ return CLI_TYPES;
177
+ const loaded = loadProfile(profilePath);
178
+ const kinds = resolveKindsForProfile(loaded.profile, loaded.profileDir);
179
+ const ids = [...knownAgentKindIds(kinds)];
180
+ cachedCliTypes = ids.length ? uniqSorted([...ids, ...CLI_TYPES]) : CLI_TYPES;
181
+ }
182
+ catch {
183
+ cachedCliTypes = CLI_TYPES;
184
+ }
185
+ return cachedCliTypes;
186
+ }
148
187
  /** Top-level verbs + aliases (+ completion itself). */
149
188
  export function listTopLevelCompletionWords() {
150
189
  const aliases = listHelpAliases().map((a) => a.alias);
@@ -271,14 +310,16 @@ export function completeArgv(words, cword) {
271
310
  // Deeper: cmd sub …
272
311
  if (before.length >= 2) {
273
312
  const sub = before[1];
313
+ // switch/handoff/set <target> <cli> and secretary switch <cli> — profile-aware
314
+ // kinds take precedence over the static DEEPER entries below (TODO 6.3).
315
+ if (((cmd === "switch" || cmd === "handoff" || cmd === "set") && before.length === 2) ||
316
+ (cmd === "secretary" && sub === "switch" && before.length === 2)) {
317
+ return filterPrefix(resolveCliTypes(), cur);
318
+ }
274
319
  const deep = DEEPER[cmd]?.[sub];
275
320
  if (deep && before.length === 2) {
276
321
  return filterPrefix(uniqSorted(deep), cur);
277
322
  }
278
- // switch <target> <cli>
279
- if ((cmd === "switch" || cmd === "handoff" || cmd === "set") && before.length === 2) {
280
- return filterPrefix(CLI_TYPES, cur);
281
- }
282
323
  if (cmd === "peek" && before.length === 2) {
283
324
  return filterPrefix(["status", "full"], cur);
284
325
  }