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
package/dist/room.js ADDED
@@ -0,0 +1,149 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { chatRoomConfig, createRoom, sayInRoom, tailRoom, listRooms, resolveAgentId, } from "@seat-mesh/core";
3
+ import { runWhere } from "@seat-mesh/tmux";
4
+ function tmuxOpt(pane, key) {
5
+ const r = spawnSync("tmux", ["display-message", "-t", pane, "-p", key], { encoding: "utf8" });
6
+ if (r.status !== 0)
7
+ return "";
8
+ return (r.stdout ?? "").trim();
9
+ }
10
+ function resolveFrom(loaded, explicit) {
11
+ if (explicit)
12
+ return explicit;
13
+ const w = runWhere(loaded);
14
+ const mini = tmuxOpt(w.paneId ?? "", "#{@mesh_mini}") || tmuxOpt(w.paneId ?? "", "#{@zsign_mini}");
15
+ return resolveAgentId({ role: w.role, slot: w.slot, mini: mini || null });
16
+ }
17
+ function resolvePane(explicit) {
18
+ return explicit ?? process.env.TMUX_PANE ?? undefined;
19
+ }
20
+ export async function runRoomCommand(loaded, sub, tail) {
21
+ const cfg = chatRoomConfig(loaded.profile);
22
+ const workspace = loaded.workspace;
23
+ if (sub === "list") {
24
+ for (const slug of listRooms(workspace, cfg))
25
+ console.log(slug);
26
+ return;
27
+ }
28
+ if (sub === "create" || sub === "open") {
29
+ const slug = tail[0];
30
+ if (!slug) {
31
+ console.error("usage: room create <slug> [--scope text] [--lead id] [--supervisor id] [--members a,b]");
32
+ process.exit(2);
33
+ }
34
+ let scope;
35
+ let lead;
36
+ let supervisor;
37
+ let members;
38
+ let from;
39
+ for (let i = 1; i < tail.length; i++) {
40
+ const a = tail[i];
41
+ if (a === "--scope" && tail[i + 1])
42
+ scope = tail[++i];
43
+ else if (a === "--lead" && tail[i + 1])
44
+ lead = tail[++i];
45
+ else if (a === "--supervisor" && tail[i + 1])
46
+ supervisor = tail[++i];
47
+ else if (a === "--members" && tail[i + 1])
48
+ members = tail[++i].split(",").map((s) => s.trim());
49
+ else if (a === "--from" && tail[i + 1])
50
+ from = tail[++i];
51
+ }
52
+ const createdBy = resolveFrom(loaded, from);
53
+ const profile = createRoom({
54
+ workspace,
55
+ cfg,
56
+ slug,
57
+ createdBy,
58
+ scope,
59
+ lead,
60
+ supervisor,
61
+ members,
62
+ });
63
+ console.log(`room=${profile.slug} path=${workspace}/${cfg.root}/${slug}`);
64
+ console.log(`createdBy=${profile.createdBy}`);
65
+ return;
66
+ }
67
+ if (sub === "say") {
68
+ const slug = tail[0];
69
+ if (!slug) {
70
+ console.error("usage: room say <slug> <message...> [--kind claim|done|blocked|fyi] [--no-checkback] [--from id]");
71
+ process.exit(2);
72
+ }
73
+ let kind;
74
+ let noCheckback = false;
75
+ let from;
76
+ let pane;
77
+ const msgParts = [];
78
+ for (let i = 1; i < tail.length; i++) {
79
+ const a = tail[i];
80
+ if (a === "--kind" && tail[i + 1])
81
+ kind = tail[++i];
82
+ else if (a === "--no-checkback")
83
+ noCheckback = true;
84
+ else if (a === "--from" && tail[i + 1])
85
+ from = tail[++i];
86
+ else if (a === "--pane" && tail[i + 1])
87
+ pane = tail[++i];
88
+ else
89
+ msgParts.push(a);
90
+ }
91
+ const body = msgParts.join(" ").trim();
92
+ if (!body) {
93
+ console.error("room say: message required");
94
+ process.exit(2);
95
+ }
96
+ const agentId = resolveFrom(loaded, from);
97
+ const w = runWhere(loaded);
98
+ const mini = tmuxOpt(w.paneId ?? "", "#{@mesh_mini}") || tmuxOpt(w.paneId ?? "", "#{@zsign_mini}");
99
+ const ownerPane = resolvePane(pane);
100
+ const result = await sayInRoom(workspace, cfg, slug, agentId, body, {
101
+ kind: kind,
102
+ armCheckback: !noCheckback,
103
+ ownerPane,
104
+ senderPane: ownerPane,
105
+ ownerMini: mini || null,
106
+ ownerSlot: w.slot,
107
+ });
108
+ console.log(`ok id=${result.message.id} kind=${result.message.kind}`);
109
+ if (result.checkback?.skipped) {
110
+ console.log(`checkback: skipped (${result.checkback.reason ?? "?"})`);
111
+ }
112
+ else if (result.checkback && !result.checkback.ok) {
113
+ console.log(`checkback: failed (${result.checkback.reason ?? "?"})`);
114
+ }
115
+ else if (result.checkback?.ok) {
116
+ console.log("checkback: armed");
117
+ }
118
+ return;
119
+ }
120
+ if (sub === "tail") {
121
+ const slug = tail[0];
122
+ if (!slug) {
123
+ console.error("usage: room tail <slug> [-n 50]");
124
+ process.exit(2);
125
+ }
126
+ let n = 50;
127
+ for (let i = 1; i < tail.length; i++) {
128
+ if (tail[i] === "-n" && tail[i + 1])
129
+ n = Number.parseInt(tail[++i], 10);
130
+ }
131
+ const lines = tailRoom(workspace, cfg, slug, n);
132
+ for (const row of lines) {
133
+ console.log(`${row.ts}\t${row.from}\t${row.kind}\t${row.body}`);
134
+ }
135
+ return;
136
+ }
137
+ console.error("usage: room create|say|tail|list ...");
138
+ console.error(" contract create ... (alias for room create — parallel chat contract)");
139
+ process.exit(2);
140
+ }
141
+ export async function runContractCommand(loaded, sub, tail) {
142
+ if (sub === "create" || sub === "open") {
143
+ await runRoomCommand(loaded, "create", tail);
144
+ return;
145
+ }
146
+ console.error("usage: contract create <slug> [room create options...]");
147
+ process.exit(2);
148
+ }
149
+ //# sourceMappingURL=room.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room.js","sourceRoot":"","sources":["../src/room.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type LoadedProfile } from "seat-mesh-core";
2
+ export interface PrereqRow {
3
+ name: string;
4
+ required: boolean;
5
+ ok: boolean;
6
+ detail: string;
7
+ }
8
+ export interface StatusReportOptions {
9
+ json?: boolean;
10
+ }
11
+ export interface StatusReport {
12
+ ok: boolean;
13
+ prereqs: PrereqRow[];
14
+ sessionOk: boolean;
15
+ inboxOk: boolean;
16
+ layoutOk: boolean;
17
+ }
18
+ /** Full stack status — default when `npx seat-mesh` runs with no subcommand. */
19
+ export declare function printStatusReport(loaded: LoadedProfile, opts?: StatusReportOptions): Promise<StatusReport>;
20
+ //# sourceMappingURL=status-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-report.d.ts","sourceRoot":"","sources":["../src/status-report.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAWxB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AA4KD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAiEvB"}
@@ -0,0 +1,218 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { meshRuntimePaths, profilePaths, } from "seat-mesh-core";
5
+ import { snapshotConnectivity, formatStatus } from "seat-mesh-connectivity";
6
+ import { inboxHealth, meshInboxPort, meshInboxStatusLine, printVerify, tmuxHasSession, verifyMeshSession, } from "seat-mesh-tmux";
7
+ function which(bin) {
8
+ const r = spawnSync("sh", ["-c", `command -v ${bin}`], { encoding: "utf8" });
9
+ return r.status === 0;
10
+ }
11
+ function tmuxVersion() {
12
+ const r = spawnSync("tmux", ["-V"], { encoding: "utf8" });
13
+ if (r.status !== 0)
14
+ return null;
15
+ return (r.stdout ?? "").trim() || null;
16
+ }
17
+ function checkPrereqs(loaded) {
18
+ const rows = [];
19
+ const add = (name, required, ok, detail) => {
20
+ rows.push({ name, required, ok, detail });
21
+ };
22
+ add("node", true, true, process.version);
23
+ add("npm", false, which("npm"), which("npm") ? "ok" : "missing (cold-start build needs npm)");
24
+ add("tmux", true, which("tmux"), tmuxVersion() ?? "not in PATH");
25
+ add("curl", true, which("curl"), which("curl") ? "ok (inbox /health)" : "missing");
26
+ add("git", false, which("git"), which("git") ? "ok" : "optional");
27
+ const profilePath = loaded.profilePath;
28
+ add("profile", true, fs.existsSync(profilePath), fs.existsSync(profilePath) ? profilePath : "config not found");
29
+ const smDir = loaded.profileDir.includes(`${path.sep}.sm${path.sep}`) ||
30
+ loaded.profileDir.endsWith(`${path.sep}.sm`)
31
+ ? loaded.profileDir
32
+ : fs.existsSync(path.join(loaded.workspace, ".sm", "mesh.config.yaml"))
33
+ ? path.join(loaded.workspace, ".sm")
34
+ : loaded.profileDir;
35
+ add("dotdir", false, fs.existsSync(smDir), fs.existsSync(smDir) ? smDir : "run: npx seat-mesh init");
36
+ const providerBins = {
37
+ "cursor-agent": "agent",
38
+ claude: "claude",
39
+ kiro: "kiro",
40
+ opencode: "opencode",
41
+ };
42
+ for (const p of loaded.profile.providers ?? []) {
43
+ if (p === "empty")
44
+ continue;
45
+ const bin = providerBins[p] ?? p;
46
+ add(`cli:${p}`, false, which(bin), which(bin) ? "in PATH" : "not found (launch may fail)");
47
+ }
48
+ return rows;
49
+ }
50
+ function printSection(title) {
51
+ console.log(`\n## ${title}`);
52
+ }
53
+ function printPrereqs(rows) {
54
+ printSection("Prerequisites");
55
+ let ok = true;
56
+ for (const r of rows) {
57
+ const mark = r.ok ? "PASS" : r.required ? "FAIL" : "WARN";
58
+ if (!r.ok && r.required)
59
+ ok = false;
60
+ console.log(`${mark} ${r.name}: ${r.detail}`);
61
+ }
62
+ return ok;
63
+ }
64
+ function printProfile(loaded) {
65
+ printSection("Profile");
66
+ const paths = profilePaths(loaded);
67
+ const rt = meshRuntimePaths(loaded);
68
+ console.log(`name=${loaded.profile.name}`);
69
+ console.log(`workspace=${loaded.workspace}`);
70
+ console.log(`workspace_id=${loaded.workspaceId}`);
71
+ console.log(`session=${loaded.sessionName}`);
72
+ console.log(`daemon_port=${paths.daemonPort}`);
73
+ console.log(`storage=${rt.storageBackend}${rt.storageBackend === "sqlite" ? ` (${rt.sqlitePath})` : ""}`);
74
+ console.log(`daemon_dir=${rt.daemonDir}`);
75
+ console.log(`seats_root=${paths.seatsRoot}`);
76
+ console.log(`roles_dir=${paths.rolesDir}`);
77
+ console.log(`contracts=${paths.contractsDir ?? "(profile default)"}`);
78
+ }
79
+ function printSession(loaded) {
80
+ printSection("Tmux session");
81
+ const session = loaded.sessionName;
82
+ const exists = tmuxHasSession(session);
83
+ console.log(`session=${session} exists=${exists}`);
84
+ if (!exists) {
85
+ console.log(" next: npx seat-mesh session up");
86
+ return false;
87
+ }
88
+ const issues = verifyMeshSession(loaded);
89
+ printVerify(issues);
90
+ return issues.every((i) => i.level !== "error");
91
+ }
92
+ function printInbox(loaded) {
93
+ printSection("Inbox daemon");
94
+ const port = meshInboxPort(loaded);
95
+ const h = inboxHealth(port);
96
+ let ok = Boolean(h && h.engine === "seat-mesh-daemon");
97
+ console.log(meshInboxStatusLine(loaded, h));
98
+ if (ok && h) {
99
+ const daemonSession = String(h.session ?? "");
100
+ if (daemonSession && daemonSession !== loaded.sessionName) {
101
+ console.log(` WARN: daemon session=${daemonSession} != profile session=${loaded.sessionName} (stale listener?)`);
102
+ ok = false;
103
+ }
104
+ if (h.stateDir)
105
+ console.log(` state_dir=${String(h.stateDir)}`);
106
+ if (h.supervisorPid)
107
+ console.log(` supervisor_pid=${String(h.supervisorPid)}`);
108
+ if (h.uptimeSec != null)
109
+ console.log(` uptime_sec=${String(h.uptimeSec)}`);
110
+ if (h.peerUnsent != null)
111
+ console.log(` peer_unsent=${String(h.peerUnsent)}`);
112
+ if (h.inboxUnresolved != null)
113
+ console.log(` inbox_unresolved=${String(h.inboxUnresolved)}`);
114
+ if (h.checkbackActive != null)
115
+ console.log(` checkback_active=${String(h.checkbackActive)}`);
116
+ if (h.ocLimitActive != null && Number(h.ocLimitActive) > 0) {
117
+ console.log(` oc_limit_active=${String(h.ocLimitActive)}`);
118
+ }
119
+ if (!ok) {
120
+ console.log(` fix: npx seat-mesh inbox restart (or session up / reload)`);
121
+ }
122
+ }
123
+ else {
124
+ const rt = meshRuntimePaths(loaded);
125
+ console.log(` fix: npx seat-mesh inbox start (or session up / reload)`);
126
+ if (fs.existsSync(rt.meshInboxLog))
127
+ console.log(` log: ${rt.meshInboxLog}`);
128
+ }
129
+ return { ok, health: h };
130
+ }
131
+ function printPaneOps(h) {
132
+ printSection("Pane ops queue");
133
+ if (!h || h.engine !== "seat-mesh-daemon") {
134
+ console.log("pending=? (inbox down)");
135
+ return;
136
+ }
137
+ const pending = h.paneOpsPending ?? h.pane_ops_pending;
138
+ console.log(`pending=${pending != null ? String(pending) : "?"}`);
139
+ }
140
+ async function printConnectivity(loaded) {
141
+ const conn = loaded.profile.connectivity;
142
+ if (!conn?.enabled) {
143
+ printSection("Connectivity");
144
+ console.log("disabled in profile");
145
+ return;
146
+ }
147
+ printSection("Connectivity");
148
+ const snap = await snapshotConnectivity(loaded.profile);
149
+ console.log(formatStatus(snap));
150
+ }
151
+ function printInTmux() {
152
+ printSection("This shell");
153
+ const pane = process.env.TMUX_PANE;
154
+ if (pane) {
155
+ console.log(`in_tmux=yes pane=${pane}`);
156
+ }
157
+ else {
158
+ console.log("in_tmux=no (attach: npx seat-mesh session attach)");
159
+ }
160
+ }
161
+ /** Full stack status — default when `npx seat-mesh` runs with no subcommand. */
162
+ export async function printStatusReport(loaded, opts = {}) {
163
+ const prereqs = checkPrereqs(loaded);
164
+ const prereqOk = prereqs.filter((r) => r.required).every((r) => r.ok);
165
+ const sessionOk = tmuxHasSession(loaded.sessionName);
166
+ const port = meshInboxPort(loaded);
167
+ const h0 = inboxHealth(port);
168
+ const inboxOk = Boolean(h0 && h0.engine === "seat-mesh-daemon") &&
169
+ String(h0?.session ?? loaded.sessionName) === loaded.sessionName;
170
+ const layoutIssues = sessionOk ? verifyMeshSession(loaded) : [];
171
+ const layoutOk = layoutIssues.every((i) => i.level !== "error");
172
+ const report = {
173
+ ok: prereqOk && inboxOk && (!sessionOk || layoutOk),
174
+ prereqs,
175
+ sessionOk,
176
+ inboxOk,
177
+ layoutOk,
178
+ };
179
+ if (opts.json) {
180
+ console.log(JSON.stringify({
181
+ ...report,
182
+ profile: loaded.profile.name,
183
+ workspace: loaded.workspace,
184
+ session: loaded.sessionName,
185
+ daemon_port: port,
186
+ inbox: h0 ?? null,
187
+ layout_issues: layoutIssues,
188
+ }, null, 2));
189
+ return report;
190
+ }
191
+ console.log(`seat-mesh status profile=${loaded.profile.name} session=${loaded.sessionName}`);
192
+ const pOk = printPrereqs(prereqs);
193
+ printProfile(loaded);
194
+ printInTmux();
195
+ const sOk = printSession(loaded);
196
+ const inbox = printInbox(loaded);
197
+ printPaneOps(inbox.health);
198
+ await printConnectivity(loaded);
199
+ printSection("Summary");
200
+ const marks = [
201
+ ["prereqs", pOk],
202
+ ["session", sOk],
203
+ ["inbox", inbox.ok],
204
+ ["layout", !sessionOk || layoutOk],
205
+ ];
206
+ for (const [k, v] of marks) {
207
+ console.log(`${v ? "PASS" : "FAIL"} ${k}`);
208
+ }
209
+ report.ok = pOk && inbox.ok && (!sessionOk || layoutOk);
210
+ if (!report.ok) {
211
+ console.log("\nHint: npx seat-mesh init -> session up -> inbox (auto on reload)");
212
+ }
213
+ else {
214
+ console.log("\nOK: stack ready");
215
+ }
216
+ return report;
217
+ }
218
+ //# sourceMappingURL=status-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-report.js","sourceRoot":"","sources":["../src/status-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type MigrateRuntimeResult } from "./migrate-runtime.js";
2
+ export interface UpdateOptions {
3
+ profileArg?: string;
4
+ dryRun?: boolean;
5
+ migrate?: boolean;
6
+ }
7
+ export interface UpdateResult {
8
+ refreshed: string[];
9
+ skipped: string[];
10
+ pathsManifest: string;
11
+ migrate?: MigrateRuntimeResult;
12
+ }
13
+ /** Refresh locked vendor templates + regenerate paths.json (never clobber user runtime). */
14
+ export declare function runUpdate(opts?: UpdateOptions): UpdateResult;
15
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAUA,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAiCD,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,YAAY,CAyChE"}
package/dist/update.js ADDED
@@ -0,0 +1,89 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { buildResolvedPaths, contractsDirFor, loadProfile, writePathsManifest, } from "seat-mesh-core";
5
+ import { runMigrateRuntime } from "./migrate-runtime.js";
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ const VENDOR_ROOT = path.join(__dirname, "..", "templates", "init");
8
+ function copyVendorTree(srcDir, destDir, refreshed, skipped, dryRun) {
9
+ if (!fs.existsSync(srcDir))
10
+ return;
11
+ fs.mkdirSync(destDir, { recursive: true });
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
+ copyVendorTree(src, dest, refreshed, skipped, dryRun);
17
+ continue;
18
+ }
19
+ if (fs.existsSync(dest)) {
20
+ skipped.push(dest);
21
+ continue;
22
+ }
23
+ if (!dryRun) {
24
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
25
+ fs.copyFileSync(src, dest);
26
+ }
27
+ refreshed.push(dest);
28
+ }
29
+ }
30
+ /** Refresh locked vendor templates + regenerate paths.json (never clobber user runtime). */
31
+ export function runUpdate(opts = {}) {
32
+ const loaded = loadProfile(opts.profileArg);
33
+ const refreshed = [];
34
+ const skipped = [];
35
+ const dryRun = Boolean(opts.dryRun);
36
+ const rolesVendorSrc = path.join(VENDOR_ROOT, "roles");
37
+ const rolesVendorDest = path.join(loaded.profileDir, "roles", "_vendor");
38
+ copyVendorTree(rolesVendorSrc, rolesVendorDest, refreshed, skipped, dryRun);
39
+ const contractsVendorSrc = path.join(VENDOR_ROOT, "contracts", "_vendor");
40
+ const contractsVendorDest = path.join(contractsDirFor(loaded), "_vendor");
41
+ if (fs.existsSync(contractsVendorSrc)) {
42
+ copyVendorTree(contractsVendorSrc, contractsVendorDest, refreshed, skipped, dryRun);
43
+ }
44
+ else {
45
+ const superviseTpl = path.join(VENDOR_ROOT, "contracts", "supervise.yaml");
46
+ if (fs.existsSync(superviseTpl)) {
47
+ const dest = path.join(contractsVendorDest, "supervise.yaml");
48
+ if (fs.existsSync(dest))
49
+ skipped.push(dest);
50
+ else if (!dryRun) {
51
+ fs.mkdirSync(contractsVendorDest, { recursive: true });
52
+ fs.copyFileSync(superviseTpl, dest);
53
+ refreshed.push(dest);
54
+ }
55
+ else
56
+ refreshed.push(dest);
57
+ }
58
+ }
59
+ let pathsManifest = buildResolvedPaths(loaded).meshAgentsJson.replace(/mesh-agents\.json$/, "paths.json");
60
+ pathsManifest = path.join(loaded.profileDir, "paths.json");
61
+ if (!dryRun) {
62
+ writePathsManifest(loaded);
63
+ }
64
+ let migrate;
65
+ if (opts.migrate) {
66
+ migrate = runMigrateRuntime({ profileArg: opts.profileArg, dryRun });
67
+ }
68
+ ensureRuntimeDirs(loaded, refreshed, skipped, dryRun);
69
+ return { refreshed, skipped, pathsManifest, migrate };
70
+ }
71
+ function ensureRuntimeDirs(loaded, refreshed, skipped, dryRun) {
72
+ const paths = buildResolvedPaths(loaded);
73
+ for (const dir of [
74
+ paths.daemonDir,
75
+ paths.chatRoomsRoot,
76
+ paths.seatsRoot,
77
+ paths.contractsDir,
78
+ path.join(paths.contractsDir, "locks"),
79
+ ]) {
80
+ if (fs.existsSync(dir)) {
81
+ skipped.push(dir);
82
+ continue;
83
+ }
84
+ if (!dryRun)
85
+ fs.mkdirSync(dir, { recursive: true });
86
+ refreshed.push(dir);
87
+ }
88
+ }
89
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runWatchDaemon(logPath: string, once?: boolean): void;
2
+ //# sourceMappingURL=watch-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-daemon.d.ts","sourceRoot":"","sources":["../src/watch-daemon.ts"],"names":[],"mappings":"AAgBA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,UAAQ,GAAG,IAAI,CAgBlE"}
@@ -0,0 +1,41 @@
1
+ import { loadProfile } from "@seat-mesh/core";
2
+ import { formatHumanStatus, runHumanStatus } from "@seat-mesh/tmux";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ const INTERVAL_MS = 120_000;
6
+ const SESSIONS = ["dev", "dev-sm-clone"];
7
+ function stamp() {
8
+ return new Date().toISOString();
9
+ }
10
+ function logLine(logPath, line) {
11
+ fs.appendFileSync(logPath, `${stamp()} ${line}\n`);
12
+ }
13
+ export function runWatchDaemon(logPath, once = false) {
14
+ const loaded = loadProfile();
15
+ const formula = loaded.profile.ports.worker;
16
+ const run = () => {
17
+ for (const session of SESSIONS) {
18
+ try {
19
+ const s = runHumanStatus(session, formula);
20
+ logLine(logPath, formatHumanStatus(s).replace(/\n/g, " | "));
21
+ }
22
+ catch (e) {
23
+ logLine(logPath, `ERR ${session}: ${e.message}`);
24
+ }
25
+ }
26
+ };
27
+ run();
28
+ if (once)
29
+ return;
30
+ setInterval(run, INTERVAL_MS);
31
+ }
32
+ if (import.meta.url === `file://${process.argv[1]}`) {
33
+ const log = process.argv[2] ??
34
+ path.join(loadProfile().workspace, "tasks/agent-seats/manager/sm-watch.log");
35
+ const once = process.argv.includes("--once");
36
+ runWatchDaemon(log, once);
37
+ if (!once) {
38
+ process.stdin.resume();
39
+ }
40
+ }
41
+ //# sourceMappingURL=watch-daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-daemon.js","sourceRoot":"","sources":["../src/watch-daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5B,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAEzC,SAAS,KAAK;IACZ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,IAAY;IAC5C,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,IAAI,GAAG,KAAK;IAC1D,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5C,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC3C,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,OAAO,EAAE,OAAO,OAAO,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,GAAG,EAAE,CAAC;IACN,IAAI,IAAI;QAAE,OAAO;IACjB,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAChC,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,MAAM,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,wCAAwC,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function workDaemonLoop(workspace: string, logPath: string, pidPath: string): void;
2
+ //# sourceMappingURL=work-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-daemon.d.ts","sourceRoot":"","sources":["../src/work-daemon.ts"],"names":[],"mappings":"AAiBA,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAuBxF"}
@@ -0,0 +1,42 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { loadProfile } from "@seat-mesh/core";
5
+ const TICK_MS = 30_000;
6
+ function log(logPath, msg) {
7
+ fs.appendFileSync(logPath, `${new Date().toISOString()} ${msg}\n`);
8
+ }
9
+ function run(cmd, cwd) {
10
+ const r = spawnSync("bash", ["-lc", cmd], { cwd, encoding: "utf8", timeout: 300_000 });
11
+ const out = `${r.stdout ?? ""}${r.stderr ?? ""}`.trim();
12
+ return { ok: r.status === 0, out };
13
+ }
14
+ export function workDaemonLoop(workspace, logPath, pidPath) {
15
+ fs.writeFileSync(pidPath, `${process.pid}\n`);
16
+ log(logPath, `work-daemon start pid=${process.pid}`);
17
+ const sm = "./sm.sh";
18
+ const mesh = path.join(workspace, "seat-mesh");
19
+ const tick = () => {
20
+ log(logPath, "tick status dev");
21
+ const st = run(`env -u TMUX -u TMUX_PANE ${sm} status dev`, workspace);
22
+ log(logPath, st.ok ? `dev ${st.out.split("\n")[0]}` : `dev FAIL ${st.out.slice(0, 200)}`);
23
+ log(logPath, "tick status clone");
24
+ const cl = run(`env -u TMUX -u TMUX_PANE ${sm} status dev-sm-clone`, workspace);
25
+ log(logPath, cl.ok ? `clone ${cl.out.split("\n")[0]}` : `clone FAIL ${cl.out.slice(0, 200)}`);
26
+ log(logPath, "tick npm test");
27
+ const t = run("npm test 2>&1 | tail -3", mesh);
28
+ log(logPath, t.ok ? `tests ${t.out.replace(/\n/g, " ")}` : `tests FAIL ${t.out.slice(0, 200)}`);
29
+ };
30
+ tick();
31
+ setInterval(tick, TICK_MS);
32
+ }
33
+ if (import.meta.url === `file://${process.argv[1]}`) {
34
+ const loaded = loadProfile();
35
+ const workspace = loaded.workspace;
36
+ const mgr = path.join(workspace, "tasks/agent-seats/manager");
37
+ const logPath = path.join(mgr, "sm-work.log");
38
+ const pidPath = path.join(mgr, "sm-work.pid");
39
+ workDaemonLoop(workspace, logPath, pidPath);
40
+ process.stdin.resume();
41
+ }
42
+ //# sourceMappingURL=work-daemon.js.map