seatmesh 0.1.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 (60) hide show
  1. package/dist/chat-cli.d.ts +4 -0
  2. package/dist/chat-cli.d.ts.map +1 -0
  3. package/dist/chat-cli.js +162 -0
  4. package/dist/chat-cli.js.map +1 -0
  5. package/dist/checkback-cli.d.ts +4 -0
  6. package/dist/checkback-cli.d.ts.map +1 -0
  7. package/dist/checkback-cli.js +103 -0
  8. package/dist/checkback-cli.js.map +1 -0
  9. package/dist/contract-lock-cli.d.ts +4 -0
  10. package/dist/contract-lock-cli.d.ts.map +1 -0
  11. package/dist/contract-lock-cli.js +180 -0
  12. package/dist/contract-lock-cli.js.map +1 -0
  13. package/dist/init.d.ts +19 -0
  14. package/dist/init.d.ts.map +1 -0
  15. package/dist/init.js +63 -0
  16. package/dist/init.js.map +1 -0
  17. package/dist/init.test.d.ts +2 -0
  18. package/dist/init.test.d.ts.map +1 -0
  19. package/dist/init.test.js +37 -0
  20. package/dist/init.test.js.map +1 -0
  21. package/dist/main.d.ts +3 -0
  22. package/dist/main.d.ts.map +1 -0
  23. package/dist/main.js +868 -0
  24. package/dist/main.js.map +1 -0
  25. package/dist/migrate-runtime.d.ts +15 -0
  26. package/dist/migrate-runtime.d.ts.map +1 -0
  27. package/dist/migrate-runtime.js +67 -0
  28. package/dist/migrate-runtime.js.map +1 -0
  29. package/dist/room-cli.d.ts +5 -0
  30. package/dist/room-cli.d.ts.map +1 -0
  31. package/dist/room-cli.js +301 -0
  32. package/dist/room-cli.js.map +1 -0
  33. package/dist/room.d.ts +4 -0
  34. package/dist/room.d.ts.map +1 -0
  35. package/dist/room.js +149 -0
  36. package/dist/room.js.map +1 -0
  37. package/dist/status-report.d.ts +20 -0
  38. package/dist/status-report.d.ts.map +1 -0
  39. package/dist/status-report.js +218 -0
  40. package/dist/status-report.js.map +1 -0
  41. package/dist/update.d.ts +15 -0
  42. package/dist/update.d.ts.map +1 -0
  43. package/dist/update.js +89 -0
  44. package/dist/update.js.map +1 -0
  45. package/dist/watch-daemon.d.ts +2 -0
  46. package/dist/watch-daemon.d.ts.map +1 -0
  47. package/dist/watch-daemon.js +41 -0
  48. package/dist/watch-daemon.js.map +1 -0
  49. package/dist/work-daemon.d.ts +2 -0
  50. package/dist/work-daemon.d.ts.map +1 -0
  51. package/dist/work-daemon.js +42 -0
  52. package/dist/work-daemon.js.map +1 -0
  53. package/package.json +29 -0
  54. package/templates/init/README.md +20 -0
  55. package/templates/init/mesh-agents.json +16 -0
  56. package/templates/init/mesh.config.yaml +94 -0
  57. package/templates/init/roles/common.yaml +5 -0
  58. package/templates/init/roles/master.yaml +5 -0
  59. package/templates/init/roles/secretary.yaml +2 -0
  60. package/templates/init/roles/worker.yaml +2 -0
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ import { type LoadedProfile } from "seat-mesh-core";
3
+ export declare function buildChatCommands(getLoaded: () => LoadedProfile): Command;
4
+ //# sourceMappingURL=chat-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-cli.d.ts","sourceRoot":"","sources":["../src/chat-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,KAAK,aAAa,EASnB,MAAM,gBAAgB,CAAC;AA+BxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,aAAa,GAAG,OAAO,CAoKzE"}
@@ -0,0 +1,162 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { Command } from "commander";
3
+ import { chatFileConfig, appendSlotPrompt, tailSlotPrompts, querySlotPrompts, recordPromptFromPane, recordAllPanes, resolveAgentId, resolveSlotKeyFromPane, } from "seat-mesh-core";
4
+ import { createRegistryForProfile } from "seat-mesh-providers";
5
+ import { runWhoami, capturePaneSnapshot, listSessionPanes } from "seat-mesh-tmux";
6
+ function tmuxOpt(pane, key) {
7
+ const r = spawnSync("tmux", ["display-message", "-t", pane, "-p", key], { encoding: "utf8" });
8
+ if (r.status !== 0)
9
+ return "";
10
+ return (r.stdout ?? "").trim();
11
+ }
12
+ function resolveSlotFromWhere(loaded, explicit) {
13
+ if (explicit)
14
+ return explicit;
15
+ const w = runWhoami(loaded);
16
+ const mini = tmuxOpt(w.paneId ?? "", "#{@mesh_mini}");
17
+ return resolveAgentId({ role: w.role, slot: w.slot, mini: mini || null });
18
+ }
19
+ function printRecords(rows, json) {
20
+ if (json) {
21
+ console.log(JSON.stringify(rows, null, 2));
22
+ return;
23
+ }
24
+ for (const r of rows) {
25
+ const sid = r.sessionId ?? "-";
26
+ const model = r.model ?? "-";
27
+ console.log(`${r.ts}\t${r.slot}\t${r.providerId}\t${sid}\t${model}\thuman=${r.humanPrompt.slice(0, 60).replace(/\n/g, " ")}`);
28
+ }
29
+ }
30
+ export function buildChatCommands(getLoaded) {
31
+ const chat = new Command("chat").description("Per-slot prompt log (CHAT.jsonl) — session, model, human prompt, agent response");
32
+ chat
33
+ .command("tail")
34
+ .description("Last N records for a slot (default: current pane slot)")
35
+ .option("--slot <key>", "worker-1, mini-3, manager, ...")
36
+ .option("--lines <n>", "line count", "30")
37
+ .option("--json", "JSON output")
38
+ .action(async (opts) => {
39
+ const loaded = getLoaded();
40
+ const cfg = chatFileConfig(loaded.profile);
41
+ const slot = resolveSlotFromWhere(loaded, opts.slot);
42
+ const rows = await tailSlotPrompts(loaded.workspace, cfg, slot, Number.parseInt(opts.lines, 10));
43
+ printRecords(rows, Boolean(opts.json));
44
+ });
45
+ chat
46
+ .command("query")
47
+ .description("Filter records across slots")
48
+ .option("--slot <key>")
49
+ .option("--session <id>")
50
+ .option("--provider <id>")
51
+ .option("--model <name>")
52
+ .option("--since <iso>")
53
+ .option("--limit <n>", "max rows", "100")
54
+ .option("--json", "JSON output")
55
+ .action(async (opts) => {
56
+ const loaded = getLoaded();
57
+ const cfg = chatFileConfig(loaded.profile);
58
+ const rows = await querySlotPrompts(loaded.workspace, cfg, {
59
+ slot: opts.slot,
60
+ sessionId: opts.session,
61
+ providerId: opts.provider,
62
+ model: opts.model,
63
+ since: opts.since,
64
+ limit: Number.parseInt(opts.limit, 10),
65
+ });
66
+ printRecords(rows, Boolean(opts.json));
67
+ });
68
+ chat
69
+ .command("append")
70
+ .description("Append one turn explicitly (inject hook or manual)")
71
+ .requiredOption("--human <text>", "human prompt")
72
+ .option("--response <text>", "agent response")
73
+ .option("--slot <key>", "default: current pane")
74
+ .option("--session <id>")
75
+ .option("--model <name>")
76
+ .option("--provider <id>", "default: detected provider or unknown")
77
+ .option("--pane <id>", "tmux pane id for metadata")
78
+ .action(async (opts) => {
79
+ const loaded = getLoaded();
80
+ const cfg = chatFileConfig(loaded.profile);
81
+ const slot = resolveSlotFromWhere(loaded, opts.slot);
82
+ const reg = createRegistryForProfile(loaded.profile);
83
+ let providerId = opts.provider ?? "unknown";
84
+ if (!opts.provider && opts.pane) {
85
+ const snap = capturePaneSnapshot(opts.pane);
86
+ if (snap)
87
+ providerId = reg.detect(snap)?.id ?? providerId;
88
+ }
89
+ else if (!opts.provider) {
90
+ const w = runWhoami(loaded);
91
+ if (w.paneId) {
92
+ const snap = capturePaneSnapshot(w.paneId);
93
+ if (snap)
94
+ providerId = reg.detect(snap)?.id ?? providerId;
95
+ }
96
+ }
97
+ const row = await appendSlotPrompt(loaded.workspace, cfg, {
98
+ slot,
99
+ paneId: opts.pane,
100
+ providerId,
101
+ sessionId: opts.session,
102
+ model: opts.model,
103
+ humanPrompt: opts.human,
104
+ agentResponse: opts.response,
105
+ });
106
+ console.log(`ok id=${row.id} slot=${row.slot} turnHash=${row.turnHash}`);
107
+ });
108
+ chat
109
+ .command("record")
110
+ .description("Scrape pane(s) via AgentProvider and append new turns")
111
+ .option("--pane <id>", "single tmux pane")
112
+ .option("--all", "every pane in session")
113
+ .option("--session <name>", "tmux session name")
114
+ .action(async (opts) => {
115
+ const loaded = getLoaded();
116
+ const cfg = chatFileConfig(loaded.profile);
117
+ const reg = createRegistryForProfile(loaded.profile);
118
+ if (opts.all) {
119
+ const session = opts.session ?? loaded.sessionName;
120
+ const panes = listSessionPanes(session);
121
+ const snaps = panes
122
+ .map((id) => capturePaneSnapshot(id))
123
+ .filter((s) => s != null);
124
+ const results = await recordAllPanes(loaded.workspace, cfg, reg, snaps);
125
+ let recorded = 0;
126
+ for (const r of results) {
127
+ if (r.recorded)
128
+ recorded++;
129
+ }
130
+ console.log(`ok scanned=${snaps.length} recorded=${recorded}`);
131
+ return;
132
+ }
133
+ const paneId = opts.pane ?? process.env.TMUX_PANE;
134
+ if (!paneId) {
135
+ console.error("record: need --pane, --all, or TMUX_PANE");
136
+ process.exit(2);
137
+ }
138
+ const snap = capturePaneSnapshot(paneId);
139
+ if (!snap) {
140
+ console.error(`record: could not capture ${paneId}`);
141
+ process.exit(1);
142
+ }
143
+ const provider = reg.detect(snap);
144
+ if (!provider || provider.id === "empty") {
145
+ console.error("record: no agent provider on pane");
146
+ process.exit(1);
147
+ }
148
+ const detection = provider.detect(snap);
149
+ if (!detection) {
150
+ console.error("record: provider detect failed");
151
+ process.exit(1);
152
+ }
153
+ const result = await recordPromptFromPane(loaded.workspace, cfg, provider, snap, detection);
154
+ if (!result.recorded) {
155
+ console.log(`skip: ${result.reason ?? "not recorded"}`);
156
+ return;
157
+ }
158
+ console.log(`ok id=${result.record?.id} slot=${resolveSlotKeyFromPane(snap)} session=${result.record?.sessionId ?? "-"}`);
159
+ });
160
+ return chat;
161
+ }
162
+ //# sourceMappingURL=chat-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-cli.js","sourceRoot":"","sources":["../src/chat-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ import { type LoadedProfile } from "seat-mesh-core";
3
+ export declare function buildCheckbackCommands(getLoaded: () => LoadedProfile): Command;
4
+ //# sourceMappingURL=checkback-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback-cli.d.ts","sourceRoot":"","sources":["../src/checkback-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,KAAK,aAAa,EAOnB,MAAM,gBAAgB,CAAC;AAiBxB,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,aAAa,GAAG,OAAO,CAmG9E"}
@@ -0,0 +1,103 @@
1
+ import { Command } from "commander";
2
+ import { armCheckback, cancelAllCheckbacks, cancelCheckback, chatRoomConfigForLoaded, listCheckbacks, } from "seat-mesh-core";
3
+ import { ensureMeshInbox, runWhoami } from "seat-mesh-tmux";
4
+ function resolvePane(loaded, explicit) {
5
+ if (explicit)
6
+ return explicit;
7
+ if (process.env.TMUX_PANE)
8
+ return process.env.TMUX_PANE;
9
+ return runWhoami(loaded).paneId ?? undefined;
10
+ }
11
+ function printEntry(e) {
12
+ const left = e.expiresAt ? `exp=${e.expiresAt}` : "exp=n/a";
13
+ const renew = e.renewSec ? `renew=${e.renewSec}s` : "renew=-";
14
+ console.log(`${e.id}\t${e.status}\t${e.kind}\t${left}\t${renew}\t${e.ownerPane ?? "-"}\t${(e.expect ?? "-").slice(0, 80)}`);
15
+ }
16
+ export function buildCheckbackCommands(getLoaded) {
17
+ const checkback = new Command("checkback")
18
+ .alias("patience")
19
+ .description("Mesh inbox :3100 /patience poll-later entries (daemon injects on expiry)");
20
+ checkback
21
+ .command("start")
22
+ .description("Arm a checkback — daemon writes 'Check: <expect>' into a tmux pane on expiry")
23
+ .requiredOption("--expect <text>", "what to be checked back on")
24
+ .option("--duration <dur>", "how long until fire (default: profile 5m)", "5m")
25
+ .option("--renew <dur>", "re-arm with this interval after firing (default: 3m)", "3m")
26
+ .option("--pane <id>", "target tmux pane id (default: current pane)")
27
+ .option("--kind <kind>", "entry kind (default: checkback)", "checkback")
28
+ .option("--from <id>", "sender agent id")
29
+ .action(async (opts) => {
30
+ const loaded = getLoaded();
31
+ const cfg = chatRoomConfigForLoaded(loaded);
32
+ ensureMeshInbox(loaded, { quiet: true });
33
+ const ownerPane = resolvePane(loaded, opts.pane);
34
+ if (!ownerPane) {
35
+ console.error("checkback start: no target pane");
36
+ process.exit(2);
37
+ }
38
+ const res = await armCheckback({
39
+ inboxBase: cfg.inboxBase,
40
+ ownerPane,
41
+ expect: opts.expect,
42
+ duration: opts.duration,
43
+ renew: opts.renew,
44
+ kind: opts.kind,
45
+ senderPane: ownerPane,
46
+ });
47
+ if (!res.ok) {
48
+ console.error(`checkback start: FAIL ${res.reason ?? "?"}`);
49
+ process.exit(1);
50
+ }
51
+ const entry = res.response?.entry;
52
+ if (!entry) {
53
+ console.error("checkback start: FAIL no entry returned");
54
+ process.exit(1);
55
+ }
56
+ console.log(`ok id=${entry.id} expiresAt=${entry.expiresAt ?? "-"} expect=${opts.expect}`);
57
+ });
58
+ checkback
59
+ .command("list")
60
+ .alias("ls")
61
+ .description("List checkback entries (active by default)")
62
+ .option("--all", "include cancelled entries")
63
+ .option("--json", "raw JSON")
64
+ .action(async (opts) => {
65
+ const loaded = getLoaded();
66
+ const cfg = chatRoomConfigForLoaded(loaded);
67
+ ensureMeshInbox(loaded, { quiet: true });
68
+ const out = await listCheckbacks(cfg.inboxBase, { all: opts.all });
69
+ if (opts.json) {
70
+ console.log(JSON.stringify(out, null, 2));
71
+ return;
72
+ }
73
+ if (!out.entries.length) {
74
+ console.log("no checkbacks");
75
+ return;
76
+ }
77
+ for (const e of out.entries)
78
+ printEntry(e);
79
+ });
80
+ checkback
81
+ .command("cancel")
82
+ .description("Cancel a checkback by id (id prefix ok)")
83
+ .argument("<id>", "checkback id or prefix")
84
+ .action(async (id) => {
85
+ const loaded = getLoaded();
86
+ const cfg = chatRoomConfigForLoaded(loaded);
87
+ ensureMeshInbox(loaded, { quiet: true });
88
+ const res = await cancelCheckback(cfg.inboxBase, id);
89
+ console.log(`ok cancelled=${res.cancelled}`);
90
+ });
91
+ checkback
92
+ .command("cancel-all")
93
+ .description("Cancel every active checkback (mesh inbox poll-later)")
94
+ .action(async () => {
95
+ const loaded = getLoaded();
96
+ const cfg = chatRoomConfigForLoaded(loaded);
97
+ ensureMeshInbox(loaded, { quiet: true });
98
+ const res = await cancelAllCheckbacks(cfg.inboxBase);
99
+ console.log(`ok cancelled=${res.cancelled}`);
100
+ });
101
+ return checkback;
102
+ }
103
+ //# sourceMappingURL=checkback-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkback-cli.js","sourceRoot":"","sources":["../src/checkback-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ import { type LoadedProfile } from "seat-mesh-core";
3
+ export declare function buildContractLockCommands(getLoaded: () => LoadedProfile): Command;
4
+ //# sourceMappingURL=contract-lock-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-lock-cli.d.ts","sourceRoot":"","sources":["../src/contract-lock-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAUL,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAmFxB,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,aAAa,GAAG,OAAO,CA6GjF"}
@@ -0,0 +1,180 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { Command } from "commander";
3
+ import { armContractLock, chatRoomConfigForLoaded, contractsDirFor, createRoom, disarmContractLock, isGlobalSlug, listContractLocks, loadVendorContract, resolveAgentId, upsertContractRoom, } from "seat-mesh-core";
4
+ import { createRegistryForProfile } from "seat-mesh-providers";
5
+ import { runWhoami, secretarySupervise } from "seat-mesh-tmux";
6
+ function tmuxOpt(pane, key) {
7
+ const r = spawnSync("tmux", ["display-message", "-t", pane, "-p", key], { encoding: "utf8" });
8
+ if (r.status !== 0)
9
+ return "";
10
+ return (r.stdout ?? "").trim();
11
+ }
12
+ function resolveFrom(loaded, explicit) {
13
+ if (explicit)
14
+ return explicit;
15
+ const w = runWhoami(loaded);
16
+ const mini = tmuxOpt(w.paneId ?? "", "#{@mesh_mini}");
17
+ return resolveAgentId({ role: w.role, slot: w.slot, mini: mini || null });
18
+ }
19
+ function armSuperviseContract(loaded, agentId, from) {
20
+ const contractsDir = contractsDirFor(loaded);
21
+ const doc = loadVendorContract(contractsDir, "supervise");
22
+ if (agentId !== doc.supervisor) {
23
+ throw new Error(`supervise contract binds supervisor=${doc.supervisor}, not ${agentId}`);
24
+ }
25
+ const lock = armContractLock(contractsDir, doc.id, agentId);
26
+ const cfg = chatRoomConfigForLoaded(loaded);
27
+ const room = upsertContractRoom({
28
+ workspace: loaded.workspace,
29
+ cfg,
30
+ slug: doc.room_slug,
31
+ createdBy: from,
32
+ kind: "contract",
33
+ scope: doc.scope,
34
+ members: doc.members,
35
+ leads: doc.leads,
36
+ supervisor: doc.supervisor,
37
+ });
38
+ const managers = upsertContractRoom({
39
+ workspace: loaded.workspace,
40
+ cfg,
41
+ slug: "managers",
42
+ createdBy: from,
43
+ kind: "contract",
44
+ scope: "Manager coord digest — manager + manager-2",
45
+ members: doc.leads ?? ["manager", "manager-2"],
46
+ leads: doc.leads,
47
+ });
48
+ console.log(`OK: contract ${doc.id} ON agent=${agentId}`);
49
+ console.log(` lock=${lock}`);
50
+ console.log(` room=${room.slug} supervisor=${room.supervisor ?? "-"}`);
51
+ console.log(` room=${managers.slug} members=${(managers.members ?? []).join(",")}`);
52
+ try {
53
+ const reg = createRegistryForProfile(loaded.profile);
54
+ secretarySupervise(loaded, reg, "on", "5m");
55
+ console.log(" secretary supervise loop armed");
56
+ }
57
+ catch (e) {
58
+ console.log(` secretary supervise skipped (${e.message})`);
59
+ }
60
+ }
61
+ function disarmSuperviseContract(loaded, agentId) {
62
+ const contractsDir = contractsDirFor(loaded);
63
+ const doc = loadVendorContract(contractsDir, "supervise");
64
+ if (agentId !== doc.supervisor) {
65
+ throw new Error(`supervise contract binds supervisor=${doc.supervisor}, not ${agentId}`);
66
+ }
67
+ const removed = disarmContractLock(contractsDir, doc.id, agentId);
68
+ try {
69
+ const reg = createRegistryForProfile(loaded.profile);
70
+ secretarySupervise(loaded, reg, "off");
71
+ }
72
+ catch {
73
+ /* session may be down */
74
+ }
75
+ console.log(removed
76
+ ? `OK: contract ${doc.id} OFF agent=${agentId}`
77
+ : `OK: contract ${doc.id} already off for agent=${agentId}`);
78
+ }
79
+ export function buildContractLockCommands(getLoaded) {
80
+ const contract = new Command("contract").description("Harness contracts — vendor yaml + lock files under .sm/contracts/");
81
+ contract
82
+ .command("list")
83
+ .description("List armed contract locks")
84
+ .action(() => {
85
+ const loaded = getLoaded();
86
+ const rows = listContractLocks(contractsDirFor(loaded));
87
+ if (!rows.length) {
88
+ console.log("(no contract locks)");
89
+ return;
90
+ }
91
+ for (const row of rows) {
92
+ console.log(`${row.contractId}\t${row.agentId}\t${row.path}`);
93
+ }
94
+ });
95
+ contract
96
+ .command("create")
97
+ .alias("open")
98
+ .description("Open a named chat contract (not global)")
99
+ .argument("<slug>", "room slug")
100
+ .option("--scope <text>", "contract scope")
101
+ .option("--lead <id>", "lead agent id")
102
+ .option("--supervisor <id>", "supervisor agent id")
103
+ .option("--members <ids>", "comma-separated member ids")
104
+ .option("--from <id>", "creator agent id")
105
+ .action((slug, opts) => {
106
+ const loaded = getLoaded();
107
+ const cfg = chatRoomConfigForLoaded(loaded);
108
+ if (isGlobalSlug(cfg, slug)) {
109
+ console.error(`slug "${slug}" is reserved for the global room`);
110
+ process.exit(2);
111
+ }
112
+ const profile = createRoom({
113
+ workspace: loaded.workspace,
114
+ cfg,
115
+ slug,
116
+ createdBy: resolveFrom(loaded, opts.from),
117
+ kind: "contract",
118
+ scope: opts.scope,
119
+ lead: opts.lead,
120
+ supervisor: opts.supervisor,
121
+ members: opts.members?.split(",").map((s) => s.trim()),
122
+ });
123
+ console.log(`room=${profile.slug}`);
124
+ console.log(`createdBy=${profile.createdBy}`);
125
+ });
126
+ contract
127
+ .command("on")
128
+ .description("Arm a vendor contract (creates lock + contract room)")
129
+ .argument("<id>", "contract id (e.g. supervise)")
130
+ .requiredOption("--agent <id>", "agent bound to the lock (supervise: secretary)")
131
+ .option("--from <id>", "creator agent id")
132
+ .action((id, opts) => {
133
+ const loaded = getLoaded();
134
+ const from = resolveFrom(loaded, opts.from);
135
+ if (id === "supervise") {
136
+ armSuperviseContract(loaded, opts.agent, from);
137
+ return;
138
+ }
139
+ const contractsDir = contractsDirFor(loaded);
140
+ const doc = loadVendorContract(contractsDir, id);
141
+ if (opts.agent !== doc.supervisor) {
142
+ throw new Error(`contract ${id} supervisor=${doc.supervisor}, not ${opts.agent}`);
143
+ }
144
+ const lock = armContractLock(contractsDir, doc.id, opts.agent);
145
+ const cfg = chatRoomConfigForLoaded(loaded);
146
+ upsertContractRoom({
147
+ workspace: loaded.workspace,
148
+ cfg,
149
+ slug: doc.room_slug,
150
+ createdBy: from,
151
+ kind: "contract",
152
+ scope: doc.scope,
153
+ members: doc.members,
154
+ leads: doc.leads,
155
+ supervisor: doc.supervisor,
156
+ });
157
+ console.log(`OK: contract ${doc.id} ON lock=${lock}`);
158
+ });
159
+ contract
160
+ .command("off")
161
+ .description("Disarm a contract lock")
162
+ .argument("<id>", "contract id")
163
+ .requiredOption("--agent <id>", "agent that holds the lock")
164
+ .action((id, opts) => {
165
+ const loaded = getLoaded();
166
+ if (id === "supervise") {
167
+ disarmSuperviseContract(loaded, opts.agent);
168
+ return;
169
+ }
170
+ const contractsDir = contractsDirFor(loaded);
171
+ const doc = loadVendorContract(contractsDir, id);
172
+ if (opts.agent !== doc.supervisor) {
173
+ throw new Error(`contract ${id} supervisor=${doc.supervisor}, not ${opts.agent}`);
174
+ }
175
+ const removed = disarmContractLock(contractsDir, doc.id, opts.agent);
176
+ console.log(removed ? `OK: contract ${doc.id} OFF` : `OK: contract ${doc.id} already off`);
177
+ });
178
+ return contract;
179
+ }
180
+ //# sourceMappingURL=contract-lock-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-lock-cli.js","sourceRoot":"","sources":["../src/contract-lock-cli.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ export interface InitOptions {
2
+ /** Project root (default cwd). */
3
+ workspace?: string;
4
+ /** Profile name slug (default: basename of workspace). */
5
+ name?: string;
6
+ /** seats.root in yaml — default `.sm/seats` for greenfield. */
7
+ seatsRoot?: string;
8
+ /** Overwrite existing .sm (default refuse). */
9
+ force?: boolean;
10
+ }
11
+ export interface InitResult {
12
+ smDir: string;
13
+ configPath: string;
14
+ created: string[];
15
+ skipped: string[];
16
+ }
17
+ /** Create `.sm/` dotdir in a project (npx seat-mesh init). Never touches existing seat FOCUS/TASKS. */
18
+ export declare function runInit(opts?: InitOptions): InitResult;
19
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA6BD,uGAAuG;AACvG,wBAAgB,OAAO,CAAC,IAAI,GAAE,WAAgB,GAAG,UAAU,CA0C1D"}
package/dist/init.js ADDED
@@ -0,0 +1,63 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { SM_DIR, SM_CONFIG } from "seat-mesh-core";
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+ const TEMPLATE_ROOT = path.join(__dirname, "..", "templates", "init");
7
+ function tpl(name, vars) {
8
+ const raw = fs.readFileSync(path.join(TEMPLATE_ROOT, name), "utf8");
9
+ return raw.replace(/\{\{(\w+)\}\}/g, (_, key) => vars[key] ?? "");
10
+ }
11
+ function copyTree(srcDir, destDir, created, skipped, force) {
12
+ for (const ent of fs.readdirSync(srcDir, { withFileTypes: true })) {
13
+ const src = path.join(srcDir, ent.name);
14
+ const dest = path.join(destDir, ent.name);
15
+ if (ent.isDirectory()) {
16
+ fs.mkdirSync(dest, { recursive: true });
17
+ copyTree(src, dest, created, skipped, force);
18
+ continue;
19
+ }
20
+ if (fs.existsSync(dest) && !force) {
21
+ skipped.push(dest);
22
+ continue;
23
+ }
24
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
25
+ fs.copyFileSync(src, dest);
26
+ created.push(dest);
27
+ }
28
+ }
29
+ /** Create `.sm/` dotdir in a project (npx seat-mesh init). Never touches existing seat FOCUS/TASKS. */
30
+ export function runInit(opts = {}) {
31
+ const workspace = path.resolve(opts.workspace ?? process.cwd());
32
+ const smDir = path.join(workspace, SM_DIR);
33
+ const configPath = path.join(smDir, SM_CONFIG);
34
+ const created = [];
35
+ const skipped = [];
36
+ if (fs.existsSync(configPath) && !opts.force) {
37
+ throw new Error(`${configPath} already exists — use --force to replace templates (does not delete seat FOCUS/TASKS under seats.root)`);
38
+ }
39
+ const name = opts.name ?? path.basename(workspace);
40
+ const seatsRoot = opts.seatsRoot ?? ".sm/seats";
41
+ fs.mkdirSync(smDir, { recursive: true });
42
+ fs.mkdirSync(path.join(smDir, "runtime", "daemon"), { recursive: true });
43
+ const vars = { name, seatsRoot, workdir: workspace };
44
+ const writeTpl = (rel) => {
45
+ const dest = path.join(smDir, rel);
46
+ if (fs.existsSync(dest) && !opts.force) {
47
+ skipped.push(dest);
48
+ return;
49
+ }
50
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
51
+ fs.writeFileSync(dest, tpl(rel, vars));
52
+ created.push(dest);
53
+ };
54
+ writeTpl("mesh.config.yaml");
55
+ writeTpl("mesh-agents.json");
56
+ writeTpl("README.md");
57
+ const rolesSrc = path.join(TEMPLATE_ROOT, "roles");
58
+ const rolesDest = path.join(smDir, "roles");
59
+ fs.mkdirSync(rolesDest, { recursive: true });
60
+ copyTree(rolesSrc, rolesDest, created, skipped, Boolean(opts.force));
61
+ return { smDir, configPath, created, skipped };
62
+ }
63
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../src/init.test.ts"],"names":[],"mappings":""}