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.
- package/dist/chat-cli.d.ts +4 -0
- package/dist/chat-cli.d.ts.map +1 -0
- package/dist/chat-cli.js +162 -0
- package/dist/chat-cli.js.map +1 -0
- package/dist/checkback-cli.d.ts +4 -0
- package/dist/checkback-cli.d.ts.map +1 -0
- package/dist/checkback-cli.js +103 -0
- package/dist/checkback-cli.js.map +1 -0
- package/dist/contract-lock-cli.d.ts +4 -0
- package/dist/contract-lock-cli.d.ts.map +1 -0
- package/dist/contract-lock-cli.js +180 -0
- package/dist/contract-lock-cli.js.map +1 -0
- package/dist/init.d.ts +19 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +63 -0
- package/dist/init.js.map +1 -0
- package/dist/init.test.d.ts +2 -0
- package/dist/init.test.d.ts.map +1 -0
- package/dist/init.test.js +37 -0
- package/dist/init.test.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +868 -0
- package/dist/main.js.map +1 -0
- package/dist/migrate-runtime.d.ts +15 -0
- package/dist/migrate-runtime.d.ts.map +1 -0
- package/dist/migrate-runtime.js +67 -0
- package/dist/migrate-runtime.js.map +1 -0
- package/dist/room-cli.d.ts +5 -0
- package/dist/room-cli.d.ts.map +1 -0
- package/dist/room-cli.js +301 -0
- package/dist/room-cli.js.map +1 -0
- package/dist/room.d.ts +4 -0
- package/dist/room.d.ts.map +1 -0
- package/dist/room.js +149 -0
- package/dist/room.js.map +1 -0
- package/dist/status-report.d.ts +20 -0
- package/dist/status-report.d.ts.map +1 -0
- package/dist/status-report.js +218 -0
- package/dist/status-report.js.map +1 -0
- package/dist/update.d.ts +15 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +89 -0
- package/dist/update.js.map +1 -0
- package/dist/watch-daemon.d.ts +2 -0
- package/dist/watch-daemon.d.ts.map +1 -0
- package/dist/watch-daemon.js +41 -0
- package/dist/watch-daemon.js.map +1 -0
- package/dist/work-daemon.d.ts +2 -0
- package/dist/work-daemon.d.ts.map +1 -0
- package/dist/work-daemon.js +42 -0
- package/dist/work-daemon.js.map +1 -0
- package/package.json +29 -0
- package/templates/init/README.md +20 -0
- package/templates/init/mesh-agents.json +16 -0
- package/templates/init/mesh.config.yaml +94 -0
- package/templates/init/roles/common.yaml +5 -0
- package/templates/init/roles/master.yaml +5 -0
- package/templates/init/roles/secretary.yaml +2 -0
- 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
|
package/dist/room.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room.js","sourceRoot":"","sources":["../src/room.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAEL,cAAc,EACd,UAAU,EACV,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,SAAS,OAAO,CAAC,IAAY,EAAE,GAAW;IACxC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAAC,MAAqB,EAAE,QAAiB;IAC3D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,eAAe,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACnG,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,WAAW,CAAC,QAAiB;IACpC,OAAO,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAqB,EACrB,GAAW,EACX,IAAc;IAEd,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAC;YACxG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,KAAyB,CAAC;QAC9B,IAAI,IAAwB,CAAC;QAC7B,IAAI,UAA8B,CAAC;QACnC,IAAI,OAA6B,CAAC;QAClC,IAAI,IAAwB,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;iBACjD,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;iBACpD,IAAI,CAAC,KAAK,cAAc,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;iBAChE,IAAI,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC1F,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC;YACzB,SAAS;YACT,GAAG;YACH,IAAI;YACJ,SAAS;YACT,KAAK;YACL,IAAI;YACJ,UAAU;YACV,OAAO;SACR,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,IAAI,SAAS,SAAS,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,kGAAkG,CAAC,CAAC;YAClH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,IAAwB,CAAC;QAC7B,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,IAAwB,CAAC;QAC7B,IAAI,IAAwB,CAAC;QAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC/C,IAAI,CAAC,KAAK,gBAAgB;gBAAE,WAAW,GAAG,IAAI,CAAC;iBAC/C,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;iBACpD,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;gBACpD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,eAAe,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YAClE,IAAI,EAAE,IAA6D;YACnE,YAAY,EAAE,CAAC,WAAW;YAC1B,SAAS;YACT,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,IAAI,IAAI,IAAI;YACvB,SAAS,EAAE,CAAC,CAAC,IAAI;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,GAAW,EACX,IAAc;IAEd,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACvC,MAAM,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -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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"}
|
package/dist/update.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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
|