@tpsdev-ai/cli 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/LICENSE +201 -0
- package/README.md +79 -0
- package/dist/bin/tps.d.ts +3 -0
- package/dist/bin/tps.d.ts.map +1 -0
- package/dist/bin/tps.js +267 -0
- package/dist/bin/tps.js.map +1 -0
- package/dist/src/cli/hire.d.ts +16 -0
- package/dist/src/cli/hire.d.ts.map +1 -0
- package/dist/src/cli/hire.js +176 -0
- package/dist/src/cli/hire.js.map +1 -0
- package/dist/src/cli/office.d.ts +7 -0
- package/dist/src/cli/office.d.ts.map +1 -0
- package/dist/src/cli/office.js +51 -0
- package/dist/src/cli/office.js.map +1 -0
- package/dist/src/cli/review.d.ts +9 -0
- package/dist/src/cli/review.d.ts.map +1 -0
- package/dist/src/cli/review.js +109 -0
- package/dist/src/cli/review.js.map +1 -0
- package/dist/src/cli/roster.d.ts +6 -0
- package/dist/src/cli/roster.d.ts.map +1 -0
- package/dist/src/cli/roster.js +60 -0
- package/dist/src/cli/roster.js.map +1 -0
- package/dist/src/commands/branch.d.ts +14 -0
- package/dist/src/commands/branch.d.ts.map +1 -0
- package/dist/src/commands/branch.js +395 -0
- package/dist/src/commands/branch.js.map +1 -0
- package/dist/src/commands/context.d.ts +9 -0
- package/dist/src/commands/context.d.ts.map +1 -0
- package/dist/src/commands/context.js +57 -0
- package/dist/src/commands/context.js.map +1 -0
- package/dist/src/commands/identity.d.ts +13 -0
- package/dist/src/commands/identity.d.ts.map +1 -0
- package/dist/src/commands/identity.js +231 -0
- package/dist/src/commands/identity.js.map +1 -0
- package/dist/src/commands/mail.d.ts +12 -0
- package/dist/src/commands/mail.d.ts.map +1 -0
- package/dist/src/commands/mail.js +225 -0
- package/dist/src/commands/mail.js.map +1 -0
- package/dist/src/commands/office.d.ts +19 -0
- package/dist/src/commands/office.d.ts.map +1 -0
- package/dist/src/commands/office.js +598 -0
- package/dist/src/commands/office.js.map +1 -0
- package/dist/src/commands/roster.d.ts +10 -0
- package/dist/src/commands/roster.d.ts.map +1 -0
- package/dist/src/commands/roster.js +143 -0
- package/dist/src/commands/roster.js.map +1 -0
- package/dist/src/generators/claude-code.d.ts +17 -0
- package/dist/src/generators/claude-code.d.ts.map +1 -0
- package/dist/src/generators/claude-code.js +80 -0
- package/dist/src/generators/claude-code.js.map +1 -0
- package/dist/src/generators/codex.d.ts +22 -0
- package/dist/src/generators/codex.d.ts.map +1 -0
- package/dist/src/generators/codex.js +78 -0
- package/dist/src/generators/codex.js.map +1 -0
- package/dist/src/generators/ollama.d.ts +18 -0
- package/dist/src/generators/ollama.d.ts.map +1 -0
- package/dist/src/generators/ollama.js +97 -0
- package/dist/src/generators/ollama.js.map +1 -0
- package/dist/src/generators/openclaw.d.ts +15 -0
- package/dist/src/generators/openclaw.d.ts.map +1 -0
- package/dist/src/generators/openclaw.js +103 -0
- package/dist/src/generators/openclaw.js.map +1 -0
- package/dist/src/generators/registry.d.ts +36 -0
- package/dist/src/generators/registry.d.ts.map +1 -0
- package/dist/src/generators/registry.js +99 -0
- package/dist/src/generators/registry.js.map +1 -0
- package/dist/src/schema/manifest.d.ts +140 -0
- package/dist/src/schema/manifest.d.ts.map +1 -0
- package/dist/src/schema/manifest.js +62 -0
- package/dist/src/schema/manifest.js.map +1 -0
- package/dist/src/schema/report.d.ts +166 -0
- package/dist/src/schema/report.d.ts.map +1 -0
- package/dist/src/schema/report.js +90 -0
- package/dist/src/schema/report.js.map +1 -0
- package/dist/src/schema/sanitizer.d.ts +30 -0
- package/dist/src/schema/sanitizer.d.ts.map +1 -0
- package/dist/src/schema/sanitizer.js +97 -0
- package/dist/src/schema/sanitizer.js.map +1 -0
- package/dist/src/soundstage/mock-llm.d.ts +3 -0
- package/dist/src/soundstage/mock-llm.d.ts.map +1 -0
- package/dist/src/soundstage/mock-llm.js +68 -0
- package/dist/src/soundstage/mock-llm.js.map +1 -0
- package/dist/src/utils/agent-info.d.ts +28 -0
- package/dist/src/utils/agent-info.d.ts.map +1 -0
- package/dist/src/utils/agent-info.js +102 -0
- package/dist/src/utils/agent-info.js.map +1 -0
- package/dist/src/utils/archive.d.ts +27 -0
- package/dist/src/utils/archive.d.ts.map +1 -0
- package/dist/src/utils/archive.js +80 -0
- package/dist/src/utils/archive.js.map +1 -0
- package/dist/src/utils/config-inject.d.ts +27 -0
- package/dist/src/utils/config-inject.d.ts.map +1 -0
- package/dist/src/utils/config-inject.js +83 -0
- package/dist/src/utils/config-inject.js.map +1 -0
- package/dist/src/utils/config.d.ts +30 -0
- package/dist/src/utils/config.d.ts.map +1 -0
- package/dist/src/utils/config.js +55 -0
- package/dist/src/utils/config.js.map +1 -0
- package/dist/src/utils/connection-state.d.ts +27 -0
- package/dist/src/utils/connection-state.d.ts.map +1 -0
- package/dist/src/utils/connection-state.js +81 -0
- package/dist/src/utils/connection-state.js.map +1 -0
- package/dist/src/utils/context.d.ts +14 -0
- package/dist/src/utils/context.d.ts.map +1 -0
- package/dist/src/utils/context.js +68 -0
- package/dist/src/utils/context.js.map +1 -0
- package/dist/src/utils/github-webhook.d.ts +3 -0
- package/dist/src/utils/github-webhook.d.ts.map +1 -0
- package/dist/src/utils/github-webhook.js +105 -0
- package/dist/src/utils/github-webhook.js.map +1 -0
- package/dist/src/utils/identity.d.ts +114 -0
- package/dist/src/utils/identity.d.ts.map +1 -0
- package/dist/src/utils/identity.js +341 -0
- package/dist/src/utils/identity.js.map +1 -0
- package/dist/src/utils/internal-mail.d.ts +18 -0
- package/dist/src/utils/internal-mail.d.ts.map +1 -0
- package/dist/src/utils/internal-mail.js +75 -0
- package/dist/src/utils/internal-mail.js.map +1 -0
- package/dist/src/utils/loop-detector.d.ts +27 -0
- package/dist/src/utils/loop-detector.d.ts.map +1 -0
- package/dist/src/utils/loop-detector.js +42 -0
- package/dist/src/utils/loop-detector.js.map +1 -0
- package/dist/src/utils/mail-handler.d.ts +19 -0
- package/dist/src/utils/mail-handler.d.ts.map +1 -0
- package/dist/src/utils/mail-handler.js +94 -0
- package/dist/src/utils/mail-handler.js.map +1 -0
- package/dist/src/utils/mail.d.ts +22 -0
- package/dist/src/utils/mail.d.ts.map +1 -0
- package/dist/src/utils/mail.js +111 -0
- package/dist/src/utils/mail.js.map +1 -0
- package/dist/src/utils/manifest.d.ts +36 -0
- package/dist/src/utils/manifest.d.ts.map +1 -0
- package/dist/src/utils/manifest.js +91 -0
- package/dist/src/utils/manifest.js.map +1 -0
- package/dist/src/utils/noise-ik-transport.d.ts +18 -0
- package/dist/src/utils/noise-ik-transport.d.ts.map +1 -0
- package/dist/src/utils/noise-ik-transport.js +357 -0
- package/dist/src/utils/noise-ik-transport.js.map +1 -0
- package/dist/src/utils/nono.d.ts +72 -0
- package/dist/src/utils/nono.d.ts.map +1 -0
- package/dist/src/utils/nono.js +166 -0
- package/dist/src/utils/nono.js.map +1 -0
- package/dist/src/utils/outbox.d.ts +10 -0
- package/dist/src/utils/outbox.d.ts.map +1 -0
- package/dist/src/utils/outbox.js +29 -0
- package/dist/src/utils/outbox.js.map +1 -0
- package/dist/src/utils/output.d.ts +17 -0
- package/dist/src/utils/output.d.ts.map +1 -0
- package/dist/src/utils/output.js +83 -0
- package/dist/src/utils/output.js.map +1 -0
- package/dist/src/utils/plain-tcp-transport.d.ts +10 -0
- package/dist/src/utils/plain-tcp-transport.d.ts.map +1 -0
- package/dist/src/utils/plain-tcp-transport.js +209 -0
- package/dist/src/utils/plain-tcp-transport.js.map +1 -0
- package/dist/src/utils/provision.d.ts +2 -0
- package/dist/src/utils/provision.d.ts.map +1 -0
- package/dist/src/utils/provision.js +186 -0
- package/dist/src/utils/provision.js.map +1 -0
- package/dist/src/utils/relay.d.ts +30 -0
- package/dist/src/utils/relay.d.ts.map +1 -0
- package/dist/src/utils/relay.js +539 -0
- package/dist/src/utils/relay.js.map +1 -0
- package/dist/src/utils/sandbox.d.ts +37 -0
- package/dist/src/utils/sandbox.d.ts.map +1 -0
- package/dist/src/utils/sandbox.js +126 -0
- package/dist/src/utils/sandbox.js.map +1 -0
- package/dist/src/utils/transport.d.ts +62 -0
- package/dist/src/utils/transport.d.ts.map +1 -0
- package/dist/src/utils/transport.js +75 -0
- package/dist/src/utils/transport.js.map +1 -0
- package/dist/src/utils/wall.d.ts +5 -0
- package/dist/src/utils/wall.d.ts.map +1 -0
- package/dist/src/utils/wall.js +51 -0
- package/dist/src/utils/wall.js.map +1 -0
- package/dist/src/utils/wire-delivery.d.ts +10 -0
- package/dist/src/utils/wire-delivery.d.ts.map +1 -0
- package/dist/src/utils/wire-delivery.js +57 -0
- package/dist/src/utils/wire-delivery.js.map +1 -0
- package/dist/src/utils/wire-frame.d.ts +10 -0
- package/dist/src/utils/wire-frame.d.ts.map +1 -0
- package/dist/src/utils/wire-frame.js +66 -0
- package/dist/src/utils/wire-frame.js.map +1 -0
- package/dist/src/utils/wire-mail.d.ts +54 -0
- package/dist/src/utils/wire-mail.d.ts.map +1 -0
- package/dist/src/utils/wire-mail.js +24 -0
- package/dist/src/utils/wire-mail.js.map +1 -0
- package/dist/src/utils/ws-noise-transport.d.ts +18 -0
- package/dist/src/utils/ws-noise-transport.d.ts.map +1 -0
- package/dist/src/utils/ws-noise-transport.js +356 -0
- package/dist/src/utils/ws-noise-transport.js.map +1 -0
- package/nono-profiles/tps-hire.toml +17 -0
- package/nono-profiles/tps-review-deep.toml +18 -0
- package/nono-profiles/tps-review-local.toml +21 -0
- package/nono-profiles/tps-roster.toml +16 -0
- package/package.json +68 -0
- package/personas/designer.tps +58 -0
- package/personas/developer.tps +59 -0
- package/personas/ea.tps +59 -0
- package/personas/ops.tps +60 -0
- package/personas/security.tps +59 -0
- package/personas/strategy.tps +60 -0
- package/personas/support.tps +57 -0
- package/reports/anvil.tps +68 -0
- package/reports/flint.tps +71 -0
- package/reports/kern.tps +65 -0
- package/reports/pulse.tps +64 -0
|
@@ -0,0 +1,598 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, openSync, closeSync, copyFileSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
5
|
+
import { sanitizeIdentifier } from "../schema/sanitizer.js";
|
|
6
|
+
import { connectAndKeepAlive, startRelay, syncRemoteBranch } from "../utils/relay.js";
|
|
7
|
+
import { connectionAlive, listHostStates } from "../utils/connection-state.js";
|
|
8
|
+
import { sandboxSocketPath, isSandboxReady, waitForSandbox, sandboxExec, loadImageIntoSandbox } from "../utils/sandbox.js";
|
|
9
|
+
import { provisionTeam } from "../utils/provision.js";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
import { fingerprint, loadHostIdentity, lookupBranch, registerBranch, revokeBranch } from "../utils/identity.js";
|
|
12
|
+
import { NoiseIkTransport } from "../utils/noise-ik-transport.js";
|
|
13
|
+
import { WsNoiseTransport } from "../utils/ws-noise-transport.js";
|
|
14
|
+
import { MSG_JOIN_COMPLETE } from "../utils/wire-mail.js";
|
|
15
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
const BOOTSTRAP_TEMPLATE = `#!/bin/bash
|
|
17
|
+
set -e
|
|
18
|
+
|
|
19
|
+
# Install dependencies (skip if already available, e.g., soundstage image)
|
|
20
|
+
if ! command -v openclaw >/dev/null 2>&1; then
|
|
21
|
+
npm install -g openclaw || { echo "ERROR: openclaw install failed"; exit 1; }
|
|
22
|
+
npm install -g @tpsdev-ai/cli || echo "TPS not on npm yet, skipping"
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
openclaw --version
|
|
26
|
+
|
|
27
|
+
# Detect config location
|
|
28
|
+
# Standard branch office: workspace/.openclaw/openclaw.json
|
|
29
|
+
# Multi-agent office: team-root/.openclaw/openclaw.json (workspace is a subdir)
|
|
30
|
+
if [ -f "__WORKSPACE__/.openclaw/openclaw.json" ]; then
|
|
31
|
+
CONFIG="__WORKSPACE__/.openclaw/openclaw.json"
|
|
32
|
+
elif [ -f "__WORKSPACE__/../.openclaw/openclaw.json" ]; then
|
|
33
|
+
CONFIG="__WORKSPACE__/../.openclaw/openclaw.json"
|
|
34
|
+
else
|
|
35
|
+
echo "No openclaw.json found"
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
echo "Starting gateway with config: $CONFIG"
|
|
40
|
+
|
|
41
|
+
# If mock LLM script exists, start it (soundstage mode)
|
|
42
|
+
# mock-llm.js lives in team root (outside workspace) so agents can't modify it
|
|
43
|
+
if [ -f "__TEAM_ROOT__/mock-llm.js" ]; then
|
|
44
|
+
echo "Starting mock LLM (soundstage mode)..."
|
|
45
|
+
nohup node __TEAM_ROOT__/mock-llm.js > __TEAM_ROOT__/mock-llm.log 2>&1 &
|
|
46
|
+
sleep 1
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# Run gateway in background (nohup to survive shell exit)
|
|
50
|
+
nohup openclaw gateway run --config "$CONFIG" > __WORKSPACE__/gateway.log 2>&1 &
|
|
51
|
+
echo "Branch office agent ready (gateway pid $!)"
|
|
52
|
+
`;
|
|
53
|
+
function branchRoot() {
|
|
54
|
+
return join(process.env.HOME || homedir(), ".tps", "branch-office");
|
|
55
|
+
}
|
|
56
|
+
function validateAgent(agent) {
|
|
57
|
+
if (!agent) {
|
|
58
|
+
console.error("Agent is required.");
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const safe = sanitizeIdentifier(agent);
|
|
62
|
+
if (safe !== agent) {
|
|
63
|
+
console.error(`Invalid agent id: ${agent}`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
return agent;
|
|
67
|
+
}
|
|
68
|
+
export function parseJoinToken(token) {
|
|
69
|
+
let u;
|
|
70
|
+
try {
|
|
71
|
+
u = new URL(token);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw new Error("Invalid join token URL");
|
|
75
|
+
}
|
|
76
|
+
if (u.protocol !== "tps:")
|
|
77
|
+
throw new Error("Join token must use tps:// scheme");
|
|
78
|
+
const host = u.searchParams.get("host") || "";
|
|
79
|
+
const portRaw = u.searchParams.get("port") || "";
|
|
80
|
+
const transportRaw = u.searchParams.get("transport") || "ws";
|
|
81
|
+
const pubkeyRaw = u.searchParams.get("pubkey") || "";
|
|
82
|
+
const sigRaw = u.searchParams.get("sigpubkey") || "";
|
|
83
|
+
const fp = u.searchParams.get("fp") || "";
|
|
84
|
+
if (!host)
|
|
85
|
+
throw new Error("Join token missing host");
|
|
86
|
+
const transport = transportRaw === "tcp" ? "tcp" : "ws";
|
|
87
|
+
const port = Number(portRaw);
|
|
88
|
+
if (!Number.isFinite(port) || port <= 0 || port > 65535) {
|
|
89
|
+
throw new Error("Join token has invalid port");
|
|
90
|
+
}
|
|
91
|
+
if (!pubkeyRaw)
|
|
92
|
+
throw new Error("Join token missing pubkey");
|
|
93
|
+
if (!sigRaw)
|
|
94
|
+
throw new Error("Join token missing sigpubkey");
|
|
95
|
+
if (!fp)
|
|
96
|
+
throw new Error("Join token missing fingerprint");
|
|
97
|
+
let encryptionPubkey;
|
|
98
|
+
let signingPubkey;
|
|
99
|
+
try {
|
|
100
|
+
encryptionPubkey = new Uint8Array(Buffer.from(pubkeyRaw, "base64url"));
|
|
101
|
+
signingPubkey = new Uint8Array(Buffer.from(sigRaw, "base64url"));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
throw new Error("Join token contains invalid key encoding");
|
|
105
|
+
}
|
|
106
|
+
if (encryptionPubkey.length !== 32)
|
|
107
|
+
throw new Error("Join token encryption pubkey must be 32 bytes");
|
|
108
|
+
if (signingPubkey.length !== 32)
|
|
109
|
+
throw new Error("Join token signing pubkey must be 32 bytes");
|
|
110
|
+
const normalizedFp = fp.startsWith("sha256:") ? fp : `sha256:${fp}`;
|
|
111
|
+
const expected = `sha256:${fingerprint(signingPubkey)}`;
|
|
112
|
+
if (expected !== normalizedFp) {
|
|
113
|
+
throw new Error("Join token fingerprint does not match signing key");
|
|
114
|
+
}
|
|
115
|
+
return { host, port, transport, encryptionPubkey, signingPubkey, fingerprint: normalizedFp };
|
|
116
|
+
}
|
|
117
|
+
function workspacePath(agent) {
|
|
118
|
+
return join(branchRoot(), agent);
|
|
119
|
+
}
|
|
120
|
+
function sandboxName(agent) {
|
|
121
|
+
return `tps-${agent}`;
|
|
122
|
+
}
|
|
123
|
+
function sandboxAgent() {
|
|
124
|
+
const raw = process.env.TPS_SANDBOX_AGENT || "claude";
|
|
125
|
+
const safe = sanitizeIdentifier(raw);
|
|
126
|
+
if (safe !== raw) {
|
|
127
|
+
throw new Error(`Invalid sandbox agent: ${raw}`);
|
|
128
|
+
}
|
|
129
|
+
return raw;
|
|
130
|
+
}
|
|
131
|
+
function idFile(agent) {
|
|
132
|
+
return join(workspacePath(agent), "sandbox.id");
|
|
133
|
+
}
|
|
134
|
+
function relayPidFile(agent) {
|
|
135
|
+
return join(workspacePath(agent), "relay.pid");
|
|
136
|
+
}
|
|
137
|
+
function setupWorkspace(agent) {
|
|
138
|
+
const ws = workspacePath(agent);
|
|
139
|
+
mkdirSync(join(ws, "mail", "inbox", "new"), { recursive: true });
|
|
140
|
+
mkdirSync(join(ws, "mail", "inbox", "cur"), { recursive: true });
|
|
141
|
+
mkdirSync(join(ws, "mail", "outbox", "new"), { recursive: true });
|
|
142
|
+
mkdirSync(join(ws, "mail", "outbox", "cur"), { recursive: true });
|
|
143
|
+
mkdirSync(join(ws, "mail", "outbox", "failed"), { recursive: true });
|
|
144
|
+
mkdirSync(join(ws, "mail", "outbox", "paused"), { recursive: true });
|
|
145
|
+
const bootstrap = join(ws, "bootstrap.sh");
|
|
146
|
+
// Security: never source bootstrap from process.cwd().
|
|
147
|
+
// Use the trusted in-code template to avoid cwd injection.
|
|
148
|
+
// ops-15.5: Don't overwrite existing bootstrap.sh if user customized it.
|
|
149
|
+
if (!existsSync(bootstrap)) {
|
|
150
|
+
const template = BOOTSTRAP_TEMPLATE.replaceAll("__WORKSPACE__", ws);
|
|
151
|
+
writeFileSync(bootstrap, template, { mode: 0o755 });
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.log("Using existing bootstrap.sh");
|
|
155
|
+
}
|
|
156
|
+
return ws;
|
|
157
|
+
}
|
|
158
|
+
function resolveSandboxId(agent) {
|
|
159
|
+
const sid = idFile(agent);
|
|
160
|
+
if (existsSync(sid)) {
|
|
161
|
+
return readFileSync(sid, "utf-8").trim();
|
|
162
|
+
}
|
|
163
|
+
const listed = spawnSync("docker", ["sandbox", "ls", "--json"], { encoding: "utf-8" });
|
|
164
|
+
if (listed.status !== 0)
|
|
165
|
+
return null;
|
|
166
|
+
try {
|
|
167
|
+
const parsed = JSON.parse(listed.stdout || "{}");
|
|
168
|
+
const rows = parsed.vms || [];
|
|
169
|
+
const expected = sandboxName(agent).toLowerCase();
|
|
170
|
+
const match = rows.find((r) => (r.name || "").toLowerCase() === expected);
|
|
171
|
+
if (!match)
|
|
172
|
+
return null;
|
|
173
|
+
return (match.name || match.id || match.sandboxId || null);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function relayLogFile(agent) {
|
|
180
|
+
return join(workspacePath(agent), "relay.log");
|
|
181
|
+
}
|
|
182
|
+
function startRelayProcess(agent) {
|
|
183
|
+
const pidFile = relayPidFile(agent);
|
|
184
|
+
if (existsSync(pidFile)) {
|
|
185
|
+
const pid = Number(readFileSync(pidFile, "utf-8").trim());
|
|
186
|
+
try {
|
|
187
|
+
// Check if process exists (signal 0)
|
|
188
|
+
process.kill(pid, 0);
|
|
189
|
+
console.log(`Relay already running (pid ${pid})`);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Process dead, proceed to spawn new one
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const logPath = relayLogFile(agent);
|
|
197
|
+
const logFd = openSync(logPath, "a");
|
|
198
|
+
const child = spawn(process.execPath, [process.argv[1], "office", "relay", agent], {
|
|
199
|
+
detached: true,
|
|
200
|
+
stdio: ["ignore", logFd, logFd],
|
|
201
|
+
env: { ...process.env },
|
|
202
|
+
});
|
|
203
|
+
child.unref();
|
|
204
|
+
// Close the fd in the parent so we don't hold it open (child has it now)
|
|
205
|
+
// Wait, spawn with detached doesn't automatically close fds in parent?
|
|
206
|
+
// Actually, passing fd to stdio options duplicates it to child. Parent can close.
|
|
207
|
+
// But we need to be careful not to close it before spawn uses it? Spawn is synchronous in setup.
|
|
208
|
+
// Node docs say: "The file descriptor is duplicated in the child process."
|
|
209
|
+
// Safe to close in parent after spawn returns.
|
|
210
|
+
try {
|
|
211
|
+
closeSync(logFd);
|
|
212
|
+
}
|
|
213
|
+
catch { }
|
|
214
|
+
writeFileSync(relayPidFile(agent), `${child.pid}\n`, "utf-8");
|
|
215
|
+
}
|
|
216
|
+
function stopRelayProcess(agent) {
|
|
217
|
+
const pf = relayPidFile(agent);
|
|
218
|
+
if (!existsSync(pf))
|
|
219
|
+
return;
|
|
220
|
+
const pid = Number(readFileSync(pf, "utf-8").trim());
|
|
221
|
+
if (pid > 0) {
|
|
222
|
+
try {
|
|
223
|
+
process.kill(pid, "SIGTERM");
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// already stopped
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function outboxCounts(agent) {
|
|
231
|
+
const ws = workspacePath(agent);
|
|
232
|
+
const outNew = join(ws, "mail", "outbox", "new");
|
|
233
|
+
const outCur = join(ws, "mail", "outbox", "cur");
|
|
234
|
+
const outFailed = join(ws, "mail", "outbox", "failed");
|
|
235
|
+
const newCount = existsSync(outNew) ? readdirSync(outNew).filter((f) => f.endsWith(".json")).length : 0;
|
|
236
|
+
const curCount = existsSync(outCur) ? readdirSync(outCur).filter((f) => f.endsWith(".json")).length : 0;
|
|
237
|
+
const failedCount = existsSync(outFailed) ? readdirSync(outFailed).filter((f) => f.endsWith(".json")).length : 0;
|
|
238
|
+
return { newCount, curCount, failedCount };
|
|
239
|
+
}
|
|
240
|
+
export async function runOffice(args) {
|
|
241
|
+
switch (args.action) {
|
|
242
|
+
case "join": {
|
|
243
|
+
const agent = validateAgent(args.agent);
|
|
244
|
+
if (!args.joinToken) {
|
|
245
|
+
console.error("Usage: tps office join <name> <join-token-url>");
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
const token = parseJoinToken(args.joinToken);
|
|
249
|
+
const existing = lookupBranch(agent);
|
|
250
|
+
if (existing) {
|
|
251
|
+
console.error(`Branch '${agent}' is already registered. Revoke first or use a different name.`);
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
registerBranch(agent, token.signingPubkey, {
|
|
255
|
+
fingerprint: `sha256:${fingerprint(token.signingPubkey)}`,
|
|
256
|
+
trust: "standard",
|
|
257
|
+
}, token.encryptionPubkey);
|
|
258
|
+
console.log(`Connecting to ${token.host}:${token.port}...`);
|
|
259
|
+
const hostKp = loadHostIdentity();
|
|
260
|
+
const wire = token.transport === "ws" ? new WsNoiseTransport(hostKp) : new NoiseIkTransport(hostKp);
|
|
261
|
+
const channel = await wire.connect({
|
|
262
|
+
host: token.host,
|
|
263
|
+
port: token.port,
|
|
264
|
+
branchId: agent,
|
|
265
|
+
hostPublicKey: token.encryptionPubkey,
|
|
266
|
+
});
|
|
267
|
+
console.log(`Noise_IK handshake OK — branch fingerprint verified: ${token.fingerprint}`);
|
|
268
|
+
await channel.send({
|
|
269
|
+
type: MSG_JOIN_COMPLETE,
|
|
270
|
+
seq: 0,
|
|
271
|
+
ts: new Date().toISOString(),
|
|
272
|
+
body: {
|
|
273
|
+
hostPubkey: Buffer.from(hostKp.encryption.publicKey).toString("base64url"),
|
|
274
|
+
hostFingerprint: fingerprint(hostKp.encryption.publicKey),
|
|
275
|
+
hostId: process.env.TPS_HOST_ID || "host",
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
const ws = workspacePath(agent);
|
|
279
|
+
mkdirSync(ws, { recursive: true });
|
|
280
|
+
const remoteRecord = {
|
|
281
|
+
host: token.host,
|
|
282
|
+
port: token.port,
|
|
283
|
+
branchId: agent,
|
|
284
|
+
fingerprint: token.fingerprint,
|
|
285
|
+
pubkey: Buffer.from(token.encryptionPubkey).toString("base64url"),
|
|
286
|
+
joinedAt: new Date().toISOString(),
|
|
287
|
+
transport: token.transport,
|
|
288
|
+
};
|
|
289
|
+
writeFileSync(join(ws, "remote.json"), JSON.stringify(remoteRecord, null, 2), "utf-8");
|
|
290
|
+
await channel.close();
|
|
291
|
+
console.log(`Branch '${agent}' registered.`);
|
|
292
|
+
console.log("Host pubkey sent to branch.");
|
|
293
|
+
console.log("Remote branch office ready.");
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
case "start": {
|
|
297
|
+
const agent = validateAgent(args.agent);
|
|
298
|
+
// ops-17: Check for manifest mode (team provisioning)
|
|
299
|
+
if (args.manifest) {
|
|
300
|
+
try {
|
|
301
|
+
provisionTeam(args.manifest, branchRoot());
|
|
302
|
+
console.log(`Team '${agent}' provisioned from manifest.`);
|
|
303
|
+
}
|
|
304
|
+
catch (e) {
|
|
305
|
+
console.error(`Failed to provision team: ${e.message}`);
|
|
306
|
+
process.exit(1);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
const ws = setupWorkspace(agent);
|
|
310
|
+
if (args.soundstage) {
|
|
311
|
+
// Write soundstage marker OUTSIDE workspace mount (agents can't detect it)
|
|
312
|
+
const teamRoot = join(branchRoot(), agent);
|
|
313
|
+
const marker = {
|
|
314
|
+
mode: "soundstage",
|
|
315
|
+
createdAt: new Date().toISOString(),
|
|
316
|
+
agent,
|
|
317
|
+
manifest: args.manifest || null,
|
|
318
|
+
mockLlmPort: 11434,
|
|
319
|
+
};
|
|
320
|
+
// Use teamRoot instead of ws to place outside workspace
|
|
321
|
+
writeFileSync(join(teamRoot, "soundstage.json"), JSON.stringify(marker, null, 2), "utf-8");
|
|
322
|
+
// Rewrite openclaw.json to point at mock LLM
|
|
323
|
+
const configPath = join(ws, ".openclaw", "openclaw.json");
|
|
324
|
+
if (existsSync(configPath)) {
|
|
325
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
326
|
+
if (config.agents?.defaults?.model) {
|
|
327
|
+
config.agents.defaults.model.primary = "openai-compatible/mock-soundstage";
|
|
328
|
+
config.agents.defaults.model.fallbacks = [];
|
|
329
|
+
}
|
|
330
|
+
// Add base URL for the mock
|
|
331
|
+
config.agents = config.agents || {};
|
|
332
|
+
config.agents.defaults = config.agents.defaults || {};
|
|
333
|
+
config.agents.defaults.baseUrl = "http://127.0.0.1:11434/v1";
|
|
334
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
335
|
+
}
|
|
336
|
+
// Copy mock LLM server into team root (NOT workspace — agents can't modify it)
|
|
337
|
+
const mockSrc = join(__dirname, "..", "soundstage", "mock-llm.js");
|
|
338
|
+
const mockDst = join(teamRoot, "mock-llm.js");
|
|
339
|
+
if (!existsSync(mockSrc)) {
|
|
340
|
+
throw new Error("Soundstage mock LLM not found. Run `bun run build` first.");
|
|
341
|
+
}
|
|
342
|
+
copyFileSync(mockSrc, mockDst);
|
|
343
|
+
// Substitute __TEAM_ROOT__ in bootstrap (setupWorkspace only handles __WORKSPACE__)
|
|
344
|
+
const bootstrapPath = join(ws, "bootstrap.sh");
|
|
345
|
+
if (existsSync(bootstrapPath)) {
|
|
346
|
+
const bs = readFileSync(bootstrapPath, "utf-8").replaceAll("__TEAM_ROOT__", teamRoot);
|
|
347
|
+
writeFileSync(bootstrapPath, bs, { mode: 0o755 });
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
const sName = sandboxName(agent);
|
|
351
|
+
const skipVm = process.env.TPS_OFFICE_SKIP_VM === "1";
|
|
352
|
+
if (!skipVm) {
|
|
353
|
+
// Idempotency: check if sandbox already exists
|
|
354
|
+
const existingId = resolveSandboxId(agent);
|
|
355
|
+
if (!existingId) {
|
|
356
|
+
const sAgent = sandboxAgent();
|
|
357
|
+
console.log(`Creating sandbox ${sName}...`);
|
|
358
|
+
// docker sandbox create hangs indefinitely (v0.11.0 bug) even after
|
|
359
|
+
// the VM is ready. Spawn it in the background and wait for the socket.
|
|
360
|
+
const createLog = join(ws, "create.log");
|
|
361
|
+
const createLogFd = openSync(createLog, "a");
|
|
362
|
+
const createArgs = ["sandbox", "create", "--name", sName];
|
|
363
|
+
// Soundstage uses a pre-built image with openclaw already installed
|
|
364
|
+
if (args.soundstage) {
|
|
365
|
+
createArgs.push("--template", "tps-soundstage:latest");
|
|
366
|
+
}
|
|
367
|
+
createArgs.push(sAgent, ws);
|
|
368
|
+
const createChild = spawn("docker", createArgs, {
|
|
369
|
+
detached: true,
|
|
370
|
+
stdio: ["ignore", createLogFd, createLogFd],
|
|
371
|
+
});
|
|
372
|
+
createChild.unref();
|
|
373
|
+
try {
|
|
374
|
+
closeSync(createLogFd);
|
|
375
|
+
}
|
|
376
|
+
catch { }
|
|
377
|
+
// Wait for VM socket to appear (the create command keeps running but VM is ready)
|
|
378
|
+
console.log("Waiting for sandbox VM to boot...");
|
|
379
|
+
if (!waitForSandbox(sName, 90000)) {
|
|
380
|
+
// Check if sandbox appeared in ls even if socket isn't ready
|
|
381
|
+
const check = spawnSync("docker", ["sandbox", "ls", "--json"], { encoding: "utf-8" });
|
|
382
|
+
const vms = JSON.parse(check.stdout || "{}").vms || [];
|
|
383
|
+
const found = vms.find((v) => v.name === sName);
|
|
384
|
+
if (!found) {
|
|
385
|
+
console.error(`Sandbox creation failed. Check ${createLog}`);
|
|
386
|
+
process.exit(1);
|
|
387
|
+
}
|
|
388
|
+
// VM exists but socket not ready — wait longer
|
|
389
|
+
console.log("VM created, waiting for daemon...");
|
|
390
|
+
if (!waitForSandbox(sName, 30000)) {
|
|
391
|
+
console.error("Sandbox VM daemon did not become ready.");
|
|
392
|
+
process.exit(1);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
console.log("Sandbox VM ready.");
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
const id = sName;
|
|
399
|
+
writeFileSync(idFile(agent), `${id}\n`, "utf-8");
|
|
400
|
+
const sock = sandboxSocketPath(id);
|
|
401
|
+
if (!skipVm) {
|
|
402
|
+
// Ensure VM is ready (may already be if we just created it above)
|
|
403
|
+
if (!isSandboxReady(id)) {
|
|
404
|
+
console.log("Waiting for sandbox VM...");
|
|
405
|
+
if (!waitForSandbox(id, 60000)) {
|
|
406
|
+
console.error("Sandbox VM did not become ready in 60s.");
|
|
407
|
+
process.exit(1);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Load base image for bootstrap execution
|
|
411
|
+
console.log("Loading base image into sandbox...");
|
|
412
|
+
if (!loadImageIntoSandbox(id, "node:22-alpine")) {
|
|
413
|
+
if (!loadImageIntoSandbox(id, "alpine:latest")) {
|
|
414
|
+
console.error("Failed to load base image into sandbox VM.");
|
|
415
|
+
process.exit(1);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
// Execute bootstrap via direct socket (workaround for docker sandbox exec bug)
|
|
419
|
+
console.log("Running bootstrap...");
|
|
420
|
+
const exec = sandboxExec(id, ["sh", join(ws, "bootstrap.sh")], {
|
|
421
|
+
workspace: ws,
|
|
422
|
+
image: "node:22-alpine",
|
|
423
|
+
});
|
|
424
|
+
if (exec.status !== 0) {
|
|
425
|
+
const fallback = sandboxExec(id, ["sh", join(ws, "bootstrap.sh")], {
|
|
426
|
+
workspace: ws,
|
|
427
|
+
image: "alpine:latest",
|
|
428
|
+
});
|
|
429
|
+
if (fallback.status !== 0) {
|
|
430
|
+
console.error(fallback.stderr || fallback.stdout || "Bootstrap failed.");
|
|
431
|
+
process.exit(1);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
if (process.env.TPS_OFFICE_SKIP_RELAY !== "1") {
|
|
436
|
+
startRelayProcess(agent);
|
|
437
|
+
}
|
|
438
|
+
console.log(`Sandbox started for ${agent}`);
|
|
439
|
+
console.log(`ID: ${id}`);
|
|
440
|
+
console.log(`Socket: ${sock}`);
|
|
441
|
+
console.log(`Workspace: ${ws}`);
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
case "stop": {
|
|
445
|
+
const agent = validateAgent(args.agent);
|
|
446
|
+
stopRelayProcess(agent);
|
|
447
|
+
const id = resolveSandboxId(agent);
|
|
448
|
+
if (!id) {
|
|
449
|
+
console.error(`No sandbox found for agent: ${agent}`);
|
|
450
|
+
process.exit(1);
|
|
451
|
+
}
|
|
452
|
+
const stop = spawnSync("docker", ["sandbox", "stop", id], { encoding: "utf-8" });
|
|
453
|
+
if (stop.status !== 0) {
|
|
454
|
+
console.error(stop.stderr || stop.stdout || `Failed to stop sandbox ${id}.`);
|
|
455
|
+
process.exit(1);
|
|
456
|
+
}
|
|
457
|
+
console.log(`Stopped sandbox ${id} (${agent})`);
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
case "revoke": {
|
|
461
|
+
const agent = validateAgent(args.agent);
|
|
462
|
+
const existing = lookupBranch(agent);
|
|
463
|
+
if (!existing) {
|
|
464
|
+
console.error(`Branch '${agent}' not found in registry.`);
|
|
465
|
+
process.exit(1);
|
|
466
|
+
}
|
|
467
|
+
revokeBranch(agent, "manual revocation");
|
|
468
|
+
console.log(`Branch '${agent}' revoked. Run 'tps branch init' on the remote to re-join.`);
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
case "sync": {
|
|
472
|
+
const agent = validateAgent(args.agent);
|
|
473
|
+
const result = await syncRemoteBranch(agent);
|
|
474
|
+
console.log(`Sync complete. Received ${result.received} message(s) from ${agent}.`);
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
case "connect": {
|
|
478
|
+
const agent = validateAgent(args.agent);
|
|
479
|
+
console.log(`Connecting to ${agent}... (Ctrl-C to stop)`);
|
|
480
|
+
const cleanup = await connectAndKeepAlive(agent);
|
|
481
|
+
const shutdown = async () => {
|
|
482
|
+
await cleanup();
|
|
483
|
+
process.exit(0);
|
|
484
|
+
};
|
|
485
|
+
process.on("SIGTERM", shutdown);
|
|
486
|
+
process.on("SIGINT", shutdown);
|
|
487
|
+
await new Promise(() => { });
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
case "list": {
|
|
491
|
+
const root = branchRoot();
|
|
492
|
+
if (!existsSync(root)) {
|
|
493
|
+
console.log("No branch-office workspaces found.");
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
const agents = readdirSync(root).filter((d) => existsSync(join(root, d)));
|
|
497
|
+
if (agents.length === 0) {
|
|
498
|
+
console.log("No branch-office workspaces found.");
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
for (const a of agents) {
|
|
502
|
+
const sid = resolveSandboxId(a);
|
|
503
|
+
console.log(`- ${a}${sid ? ` (${sid})` : ""}`);
|
|
504
|
+
}
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
case "status": {
|
|
508
|
+
if (!args.agent) {
|
|
509
|
+
const states = listHostStates();
|
|
510
|
+
if (states.length === 0) {
|
|
511
|
+
console.log("No active branch connections.");
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
for (const s of states) {
|
|
515
|
+
const alive = connectionAlive(s.branch);
|
|
516
|
+
const age = Math.round((Date.now() - new Date(s.connectedAt).getTime()) / 1000);
|
|
517
|
+
const lastAck = s.lastHeartbeatAck
|
|
518
|
+
? Math.round((Date.now() - new Date(s.lastHeartbeatAck).getTime()) / 1000) + "s ago"
|
|
519
|
+
: "never";
|
|
520
|
+
const anomaly = !alive ? " ⚠️ STALE (PID dead)" : s.reconnectCount > 3 ? ` ⚠️ ${s.reconnectCount} reconnects` : "";
|
|
521
|
+
console.log(`${s.branch.padEnd(12)} ${alive ? "connected" : "STALE"} ${age}s ↑${s.messagesSent}msg ↓${s.messagesReceived}msg last ack: ${lastAck}${anomaly}`);
|
|
522
|
+
}
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
const agent = validateAgent(args.agent);
|
|
526
|
+
const sid = resolveSandboxId(agent);
|
|
527
|
+
const ws = workspacePath(agent);
|
|
528
|
+
const relayRunning = existsSync(relayPidFile(agent));
|
|
529
|
+
const counts = outboxCounts(agent);
|
|
530
|
+
const sName2 = sandboxName(agent);
|
|
531
|
+
const vmReady = sid ? isSandboxReady(sName2) : false;
|
|
532
|
+
const soundstageMarker = join(branchRoot(), agent, "soundstage.json");
|
|
533
|
+
const isSoundstage = existsSync(soundstageMarker);
|
|
534
|
+
console.log(`Agent: ${agent}`);
|
|
535
|
+
console.log(`Workspace: ${ws}`);
|
|
536
|
+
if (isSoundstage) {
|
|
537
|
+
console.log(`Mode: 🎬 soundstage (mock LLM, real sandbox)`);
|
|
538
|
+
console.log(`Sandbox: ${sid || "not running"}${vmReady ? " (VM ready)" : ""}`);
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
console.log(`Sandbox: ${sid || "not running"}${vmReady ? " (VM ready)" : ""}`);
|
|
542
|
+
}
|
|
543
|
+
if (sid)
|
|
544
|
+
console.log(`Socket: ${sandboxSocketPath(sName2)}`);
|
|
545
|
+
console.log(`Relay: ${relayRunning ? "running" : "stopped"}`);
|
|
546
|
+
console.log(`Outbox pending: ${counts.newCount} (cur=${counts.curCount}, failed=${counts.failedCount})`);
|
|
547
|
+
// Check for paused messages (loop detection)
|
|
548
|
+
const pausedDir = join(ws, "mail", "outbox", "paused");
|
|
549
|
+
if (existsSync(pausedDir)) {
|
|
550
|
+
const pausedCount = readdirSync(pausedDir).filter((f) => f.endsWith(".json")).length;
|
|
551
|
+
if (pausedCount > 0) {
|
|
552
|
+
console.log(`⚠️ Paused messages (loop detected): ${pausedCount}`);
|
|
553
|
+
console.log(` Review: ${pausedDir}`);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
case "relay": {
|
|
559
|
+
const agent = validateAgent(args.agent);
|
|
560
|
+
const stop = startRelay(agent);
|
|
561
|
+
process.on("SIGTERM", () => {
|
|
562
|
+
stop();
|
|
563
|
+
process.exit(0);
|
|
564
|
+
});
|
|
565
|
+
process.on("SIGINT", () => {
|
|
566
|
+
stop();
|
|
567
|
+
process.exit(0);
|
|
568
|
+
});
|
|
569
|
+
// keep process alive
|
|
570
|
+
setInterval(() => { }, 60_000);
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
case "exec": {
|
|
574
|
+
const agent = validateAgent(args.agent);
|
|
575
|
+
const sName2 = sandboxName(agent);
|
|
576
|
+
const ws = workspacePath(agent);
|
|
577
|
+
if (!isSandboxReady(sName2)) {
|
|
578
|
+
console.error(`Sandbox VM for ${agent} is not ready. Start it with: tps office start ${agent}`);
|
|
579
|
+
process.exit(1);
|
|
580
|
+
}
|
|
581
|
+
const cmd = args.command;
|
|
582
|
+
if (!cmd || cmd.length === 0) {
|
|
583
|
+
console.error("Usage: tps office exec <agent> -- <command...>");
|
|
584
|
+
process.exit(1);
|
|
585
|
+
}
|
|
586
|
+
const result = sandboxExec(sName2, cmd, {
|
|
587
|
+
workspace: ws,
|
|
588
|
+
image: "node:22-alpine",
|
|
589
|
+
});
|
|
590
|
+
if (result.stdout)
|
|
591
|
+
process.stdout.write(result.stdout);
|
|
592
|
+
if (result.stderr)
|
|
593
|
+
process.stderr.write(result.stderr);
|
|
594
|
+
process.exit(result.status ?? 1);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
//# sourceMappingURL=office.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"office.js","sourceRoot":"","sources":["../../../src/commands/office.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster.d.ts","sourceRoot":"","sources":["../../../src/commands/roster.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAqBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CA4HhD"}
|