agents-office-tower 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.
@@ -0,0 +1,2 @@
1
+ export declare function runDemoPreview(args: string[]): Promise<void>;
2
+ export declare function deletePreviewWorkspace(projectRoot: string): Promise<void>;
@@ -0,0 +1,528 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDemoPreview = runDemoPreview;
4
+ exports.deletePreviewWorkspace = deletePreviewWorkspace;
5
+ const promises_1 = require("node:fs/promises");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_os_1 = require("node:os");
8
+ const node_path_1 = require("node:path");
9
+ const web_1 = require("@agents-tower/web");
10
+ function parseDemoPreviewArgs(args) {
11
+ let port = 4181;
12
+ let host = "127.0.0.1";
13
+ let keep = false;
14
+ let durationMs = 75_000;
15
+ for (let index = 0; index < args.length; index += 1) {
16
+ const arg = args[index];
17
+ if (arg === "--port" && args[index + 1]) {
18
+ port = Number.parseInt(args[index + 1], 10);
19
+ index += 1;
20
+ continue;
21
+ }
22
+ if (arg === "--host" && args[index + 1]) {
23
+ host = args[index + 1];
24
+ index += 1;
25
+ continue;
26
+ }
27
+ if (arg === "--duration" && args[index + 1]) {
28
+ const seconds = Number.parseFloat(args[index + 1]);
29
+ durationMs = Number.isFinite(seconds) && seconds > 0 ? Math.round(seconds * 1000) : 0;
30
+ index += 1;
31
+ continue;
32
+ }
33
+ if (arg === "--keep") {
34
+ keep = true;
35
+ }
36
+ }
37
+ return {
38
+ host,
39
+ port: Number.isFinite(port) ? port : 4181,
40
+ keep,
41
+ durationMs
42
+ };
43
+ }
44
+ async function writeTextFile(filePath, content) {
45
+ await (0, promises_1.mkdir)((0, node_path_1.dirname)(filePath), { recursive: true });
46
+ await (0, promises_1.writeFile)(filePath, content, "utf8");
47
+ }
48
+ function isoAt(baseMs, offsetMs) {
49
+ return new Date(baseMs + offsetMs).toISOString();
50
+ }
51
+ function demoPresence(baseMs, offsetMs, input) {
52
+ return {
53
+ ...input,
54
+ updatedAt: isoAt(baseMs, offsetMs)
55
+ };
56
+ }
57
+ function demoTemplateFiles() {
58
+ return {
59
+ "package.json": `{
60
+ "name": "office-preview-app",
61
+ "private": true,
62
+ "version": "0.0.0",
63
+ "scripts": {
64
+ "dev": "vite",
65
+ "build": "tsc && vite build",
66
+ "test:preview": "vitest run"
67
+ }
68
+ }
69
+ `,
70
+ "README.md": `# Office Preview App
71
+
72
+ This is a disposable fake app generated by \`aot demo preview\`.
73
+
74
+ It exists only to drive the office renderer with believable rooms, files, demo agents, and demo skills.
75
+ Stop the preview command to remove this workspace unless it was launched with \`--keep\`.
76
+ `,
77
+ "src/app/main.ts": `import { renderHeroPanel } from "../ui/HeroPanel";
78
+
79
+ export function bootPreviewApp(): string {
80
+ return renderHeroPanel("Ship the preview office");
81
+ }
82
+ `,
83
+ "src/ui/HeroPanel.tsx": `export function renderHeroPanel(title: string): string {
84
+ return \`<section class="hero-panel"><h1>\${title}</h1><p>Pixel office preview workspace.</p></section>\`;
85
+ }
86
+ `,
87
+ "src/ui/StatusPill.tsx": `export function renderStatusPill(label: string): string {
88
+ return \`<span class="status-pill">\${label}</span>\`;
89
+ }
90
+ `,
91
+ "src/api/catalog.ts": `export interface FeatureCard {
92
+ id: string;
93
+ title: string;
94
+ }
95
+
96
+ export const previewCatalog: FeatureCard[] = [
97
+ { id: "office-map", title: "Office Map" },
98
+ { id: "session-panel", title: "Session Panel" }
99
+ ];
100
+ `,
101
+ "src/api/seed.ts": `export async function seedPreviewData(): Promise<void> {
102
+ return Promise.resolve();
103
+ }
104
+ `,
105
+ "tests/preview.spec.ts": `describe("preview app", () => {
106
+ it("renders a hero", () => {
107
+ expect(true).toBe(true);
108
+ });
109
+ });
110
+ `,
111
+ "docs/release-checklist.md": `# Release Checklist
112
+
113
+ - confirm office map renders
114
+ - confirm session panel reflects live state
115
+ - confirm approval/input queue remains readable
116
+ `,
117
+ ".codex/agents/preview-orchestrator.toml": `name = "preview_orchestrator"
118
+ description = "Lead demo agent that coordinates the fake launch workspace and hands work to the demo specialists."
119
+ sandbox_mode = "workspace-write"
120
+ developer_instructions = """
121
+ Keep the preview believable and lightweight.
122
+ Delegate UI polish, API cleanup, and release checks to the sibling preview agents.
123
+ Keep all edits inside this disposable preview workspace.
124
+ """
125
+ nickname_candidates = ["Orion", "North", "Lead"]
126
+ `,
127
+ ".codex/agents/preview-ui-builder.toml": `name = "preview_ui_builder"
128
+ description = "Demo UI worker that tweaks the fake launch hero and status components."
129
+ sandbox_mode = "workspace-write"
130
+ developer_instructions = """
131
+ Stay in src/ui and src/app.
132
+ Make tiny visual edits that keep the preview readable in the office map.
133
+ """
134
+ nickname_candidates = ["Nova", "Bloom", "Glimmer"]
135
+ `,
136
+ ".codex/agents/preview-api-worker.toml": `name = "preview_api_worker"
137
+ description = "Demo worker that adjusts the fake preview catalog and seed logic."
138
+ sandbox_mode = "workspace-write"
139
+ developer_instructions = """
140
+ Stay in src/api.
141
+ Focus on believable fake app data and simple command/test style updates.
142
+ """
143
+ nickname_candidates = ["Relay", "Sol", "Echo"]
144
+ `,
145
+ ".codex/agents/preview-qa-guardian.toml": `name = "preview_qa_guardian"
146
+ description = "Demo validator that checks the fake preview app and reports release blockers."
147
+ sandbox_mode = "read-only"
148
+ developer_instructions = """
149
+ Read tests and docs only.
150
+ Report concise release-check findings for the preview flow.
151
+ """
152
+ nickname_candidates = ["Ivy", "Beacon", "Check"]
153
+ `,
154
+ ".codex/skills/preview-ui-pass/SKILL.md": `# Preview UI Pass
155
+
156
+ Use this when the preview workspace needs a believable front-end polish loop.
157
+
158
+ ## Focus
159
+
160
+ - keep edits inside \`src/ui\` and \`src/app\`
161
+ - tighten copy and small component structure only
162
+ - do not introduce framework churn
163
+ `,
164
+ ".codex/skills/preview-release-check/SKILL.md": `# Preview Release Check
165
+
166
+ Use this when the preview workspace needs a fake release readiness pass.
167
+
168
+ ## Focus
169
+
170
+ - inspect \`tests/\` and \`docs/release-checklist.md\`
171
+ - summarize blockers clearly
172
+ - prefer short, concrete release language
173
+ `,
174
+ ".codex-agents/rooms.xml": `<?xml version="1.0" encoding="UTF-8"?>
175
+ <agentOffice version="1">
176
+ <room id="root" name="Preview App" path="." x="0" y="0" width="24" height="16">
177
+ <room id="app" name="App Shell" path="src/app" x="1" y="7" width="7" height="5" />
178
+ <room id="ui" name="UI" path="src/ui" x="8" y="7" width="7" height="5" />
179
+ <room id="api" name="API" path="src/api" x="15" y="7" width="8" height="5" />
180
+ <room id="qa" name="QA" path="tests" x="14" y="1" width="9" height="5" />
181
+ <room id="docs" name="Docs" path="docs" x="1" y="1" width="6" height="5" />
182
+ </room>
183
+ </agentOffice>
184
+ `
185
+ };
186
+ }
187
+ function stageFileUpdates() {
188
+ return [
189
+ {},
190
+ {
191
+ "src/ui/HeroPanel.tsx": `export function renderHeroPanel(title: string): string {
192
+ return \`<section class="hero-panel polished"><h1>\${title}</h1><p>Live office preview with demo specialists.</p></section>\`;
193
+ }
194
+ `,
195
+ "docs/release-checklist.md": `# Release Checklist
196
+
197
+ - verify hover cards stay readable
198
+ - verify the office map holds one lead and several workers
199
+ - verify the preview cleans itself up when the run ends
200
+ `
201
+ },
202
+ {
203
+ "src/api/catalog.ts": `export interface FeatureCard {
204
+ id: string;
205
+ title: string;
206
+ owner: string;
207
+ }
208
+
209
+ export const previewCatalog: FeatureCard[] = [
210
+ { id: "office-map", title: "Office Map", owner: "preview_ui_builder" },
211
+ { id: "session-panel", title: "Session Panel", owner: "preview_orchestrator" },
212
+ { id: "release-check", title: "Release Check", owner: "preview_qa_guardian" }
213
+ ];
214
+ `,
215
+ "tests/preview.spec.ts": `describe("preview app", () => {
216
+ it("keeps the preview green", () => {
217
+ expect(["office-map", "session-panel"]).toContain("office-map");
218
+ });
219
+ });
220
+ `
221
+ },
222
+ {
223
+ "src/api/seed.ts": `export async function seedPreviewData(): Promise<void> {
224
+ await Promise.resolve();
225
+ }
226
+ `,
227
+ "README.md": `# Office Preview App
228
+
229
+ This disposable workspace is mid-flight in the office preview harness.
230
+
231
+ The orchestrator has handed UI polish, API cleanup, and release review to the demo specialists.
232
+ `
233
+ }
234
+ ];
235
+ }
236
+ function buildDemoStages(projectRoot) {
237
+ const baseMs = Date.now();
238
+ const appDir = (0, node_path_1.join)(projectRoot, "src/app");
239
+ const uiDir = (0, node_path_1.join)(projectRoot, "src/ui");
240
+ const apiDir = (0, node_path_1.join)(projectRoot, "src/api");
241
+ const qaDir = (0, node_path_1.join)(projectRoot, "tests");
242
+ const docsDir = (0, node_path_1.join)(projectRoot, "docs");
243
+ const files = stageFileUpdates();
244
+ return [
245
+ {
246
+ afterMs: 0,
247
+ files: files[0],
248
+ agents: [
249
+ demoPresence(baseMs, 0, {
250
+ id: "preview-lead",
251
+ label: "Preview Orchestrator",
252
+ role: "lead",
253
+ state: "planning",
254
+ detail: "Breaking the fake launch app into UI, API, and release passes.",
255
+ cwd: appDir,
256
+ appearanceId: "sun"
257
+ }),
258
+ demoPresence(baseMs, 0, {
259
+ id: "preview-ui",
260
+ label: "Preview UI Builder",
261
+ role: "worker",
262
+ state: "editing",
263
+ detail: "Polishing HeroPanel.tsx for the office preview.",
264
+ cwd: uiDir,
265
+ appearanceId: "rose"
266
+ }),
267
+ demoPresence(baseMs, 0, {
268
+ id: "preview-api",
269
+ label: "Preview API Worker",
270
+ role: "worker",
271
+ state: "running",
272
+ detail: "Seeding src/api for believable demo data.",
273
+ cwd: apiDir,
274
+ appearanceId: "ocean"
275
+ }),
276
+ demoPresence(baseMs, 0, {
277
+ id: "preview-qa",
278
+ label: "Preview QA Guardian",
279
+ role: "explorer",
280
+ state: "validating",
281
+ detail: "Checking the fake preview spec before handoff.",
282
+ cwd: qaDir,
283
+ appearanceId: "mint"
284
+ }),
285
+ demoPresence(baseMs, 0, {
286
+ id: "preview-scribe",
287
+ label: "Preview Release Scribe",
288
+ role: "scribe",
289
+ state: "thinking",
290
+ detail: "Drafting the release checklist for the preview run.",
291
+ cwd: docsDir,
292
+ appearanceId: "iris"
293
+ })
294
+ ]
295
+ },
296
+ {
297
+ afterMs: 9_000,
298
+ files: files[1],
299
+ agents: [
300
+ demoPresence(baseMs, 9_000, {
301
+ id: "preview-lead",
302
+ label: "Preview Orchestrator",
303
+ role: "lead",
304
+ state: "delegating",
305
+ detail: "Handed UI polish to preview_ui_builder and API cleanup to preview_api_worker.",
306
+ cwd: appDir,
307
+ appearanceId: "sun"
308
+ }),
309
+ demoPresence(baseMs, 9_000, {
310
+ id: "preview-ui",
311
+ label: "Preview UI Builder",
312
+ role: "worker",
313
+ state: "editing",
314
+ detail: "Tightening hero copy and status-pill spacing.",
315
+ cwd: uiDir,
316
+ appearanceId: "rose"
317
+ }),
318
+ demoPresence(baseMs, 9_000, {
319
+ id: "preview-api",
320
+ label: "Preview API Worker",
321
+ role: "worker",
322
+ state: "editing",
323
+ detail: "Adding release ownership fields to the fake catalog.",
324
+ cwd: apiDir,
325
+ appearanceId: "ocean"
326
+ }),
327
+ demoPresence(baseMs, 9_000, {
328
+ id: "preview-qa",
329
+ label: "Preview QA Guardian",
330
+ role: "explorer",
331
+ state: "scanning",
332
+ detail: "Reading preview specs and release notes for mismatches.",
333
+ cwd: qaDir,
334
+ appearanceId: "mint"
335
+ }),
336
+ demoPresence(baseMs, 9_000, {
337
+ id: "preview-scribe",
338
+ label: "Preview Release Scribe",
339
+ role: "scribe",
340
+ state: "editing",
341
+ detail: "Refreshing docs/release-checklist.md for the preview walkthrough.",
342
+ cwd: docsDir,
343
+ appearanceId: "iris"
344
+ })
345
+ ]
346
+ },
347
+ {
348
+ afterMs: 18_000,
349
+ files: files[2],
350
+ agents: [
351
+ demoPresence(baseMs, 18_000, {
352
+ id: "preview-lead",
353
+ label: "Preview Orchestrator",
354
+ role: "lead",
355
+ state: "waiting",
356
+ detail: "Waiting on final release-note wording from the docs pass.",
357
+ cwd: appDir,
358
+ appearanceId: "sun"
359
+ }),
360
+ demoPresence(baseMs, 18_000, {
361
+ id: "preview-ui",
362
+ label: "Preview UI Builder",
363
+ role: "worker",
364
+ state: "done",
365
+ detail: "UI polish landed for HeroPanel.tsx and StatusPill.tsx.",
366
+ cwd: uiDir,
367
+ appearanceId: "rose"
368
+ }),
369
+ demoPresence(baseMs, 18_000, {
370
+ id: "preview-api",
371
+ label: "Preview API Worker",
372
+ role: "worker",
373
+ state: "validating",
374
+ detail: "Running the fake preview validation pass against src/api and tests.",
375
+ cwd: apiDir,
376
+ appearanceId: "ocean"
377
+ }),
378
+ demoPresence(baseMs, 18_000, {
379
+ id: "preview-qa",
380
+ label: "Preview QA Guardian",
381
+ role: "explorer",
382
+ state: "running",
383
+ detail: "Checking the preview spec after the catalog update.",
384
+ cwd: qaDir,
385
+ appearanceId: "mint"
386
+ }),
387
+ demoPresence(baseMs, 18_000, {
388
+ id: "preview-scribe",
389
+ label: "Preview Release Scribe",
390
+ role: "scribe",
391
+ state: "editing",
392
+ detail: "Finalizing the release checklist wording for the lead.",
393
+ cwd: docsDir,
394
+ appearanceId: "iris"
395
+ })
396
+ ]
397
+ },
398
+ {
399
+ afterMs: 30_000,
400
+ files: files[3],
401
+ agents: [
402
+ demoPresence(baseMs, 30_000, {
403
+ id: "preview-lead",
404
+ label: "Preview Orchestrator",
405
+ role: "lead",
406
+ state: "thinking",
407
+ detail: "Approval landed. Pulling the fake release story together for the office pass.",
408
+ cwd: appDir,
409
+ appearanceId: "sun"
410
+ }),
411
+ demoPresence(baseMs, 30_000, {
412
+ id: "preview-ui",
413
+ label: "Preview UI Builder",
414
+ role: "worker",
415
+ state: "done",
416
+ detail: "UI pass completed and handed back to the lead.",
417
+ cwd: uiDir,
418
+ appearanceId: "rose"
419
+ }),
420
+ demoPresence(baseMs, 30_000, {
421
+ id: "preview-api",
422
+ label: "Preview API Worker",
423
+ role: "worker",
424
+ state: "done",
425
+ detail: "Catalog and seed flow look ready for the fake handoff.",
426
+ cwd: apiDir,
427
+ appearanceId: "ocean"
428
+ }),
429
+ demoPresence(baseMs, 30_000, {
430
+ id: "preview-qa",
431
+ label: "Preview QA Guardian",
432
+ role: "explorer",
433
+ state: "done",
434
+ detail: "Preview validation pass is green.",
435
+ cwd: qaDir,
436
+ appearanceId: "mint"
437
+ }),
438
+ demoPresence(baseMs, 30_000, {
439
+ id: "preview-scribe",
440
+ label: "Preview Release Scribe",
441
+ role: "scribe",
442
+ state: "done",
443
+ detail: "Release notes and checklist are ready for the walkthrough.",
444
+ cwd: docsDir,
445
+ appearanceId: "iris"
446
+ })
447
+ ]
448
+ }
449
+ ];
450
+ }
451
+ async function writePresenceRoster(projectRoot, agents) {
452
+ const roster = {
453
+ version: 1,
454
+ agents
455
+ };
456
+ await writeTextFile((0, node_path_1.join)(projectRoot, ".codex-agents/presence.json"), JSON.stringify(roster, null, 2) + "\n");
457
+ }
458
+ async function createDemoWorkspace() {
459
+ const root = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "agents-office-preview-"));
460
+ const templates = demoTemplateFiles();
461
+ for (const [relativePath, content] of Object.entries(templates)) {
462
+ await writeTextFile((0, node_path_1.join)(root, relativePath), content);
463
+ }
464
+ return root;
465
+ }
466
+ async function applyStage(projectRoot, stage) {
467
+ if (stage.files) {
468
+ for (const [relativePath, content] of Object.entries(stage.files)) {
469
+ await writeTextFile((0, node_path_1.join)(projectRoot, relativePath), content);
470
+ }
471
+ }
472
+ await writePresenceRoster(projectRoot, stage.agents);
473
+ }
474
+ async function runDemoPreview(args) {
475
+ const options = parseDemoPreviewArgs(args);
476
+ const projectRoot = await createDemoWorkspace();
477
+ const stages = buildDemoStages(projectRoot);
478
+ const timers = new Set();
479
+ let cleaned = false;
480
+ const cleanup = () => {
481
+ if (cleaned) {
482
+ return;
483
+ }
484
+ cleaned = true;
485
+ for (const timer of timers) {
486
+ clearTimeout(timer);
487
+ }
488
+ timers.clear();
489
+ if (!options.keep && (0, node_fs_1.existsSync)(projectRoot)) {
490
+ (0, node_fs_1.rmSync)(projectRoot, { recursive: true, force: true });
491
+ }
492
+ };
493
+ process.once("SIGINT", cleanup);
494
+ process.once("SIGTERM", cleanup);
495
+ process.once("exit", cleanup);
496
+ await applyStage(projectRoot, stages[0]);
497
+ for (const stage of stages.slice(1)) {
498
+ const timer = setTimeout(() => {
499
+ void applyStage(projectRoot, stage);
500
+ timers.delete(timer);
501
+ }, stage.afterMs);
502
+ timers.add(timer);
503
+ }
504
+ console.log(`Preview workspace: ${projectRoot}`);
505
+ console.log(`Preview URL: http://${options.host}:${options.port}/?project=${encodeURIComponent(projectRoot)}`);
506
+ console.log("This run creates a disposable fake app with demo agents, demo skills, and a scripted office workflow.");
507
+ console.log(options.keep ? "Workspace cleanup is disabled for this run (--keep)." : "Workspace will be removed when the preview stops.");
508
+ if (options.durationMs > 0) {
509
+ console.log(`Preview duration: ${Math.round(options.durationMs / 1000)}s`);
510
+ }
511
+ else {
512
+ console.log("Preview duration: until interrupted");
513
+ }
514
+ await (0, web_1.startWebServer)([projectRoot, "--port", String(options.port), "--host", options.host]);
515
+ if (options.durationMs > 0) {
516
+ const timer = setTimeout(async () => {
517
+ timers.delete(timer);
518
+ cleanup();
519
+ process.exit(0);
520
+ }, options.durationMs);
521
+ timers.add(timer);
522
+ }
523
+ await new Promise(() => { });
524
+ }
525
+ async function deletePreviewWorkspace(projectRoot) {
526
+ await (0, promises_1.rm)((0, node_path_1.resolve)(projectRoot), { recursive: true, force: true });
527
+ }
528
+ //# sourceMappingURL=demo-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-preview.js","sourceRoot":"","sources":["../src/demo-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,243 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const promises_1 = require("node:timers/promises");
5
+ const node_process_1 = require("node:process");
6
+ const node_path_1 = require("node:path");
7
+ const demo_preview_1 = require("./demo-preview");
8
+ const web_query_1 = require("./web-query");
9
+ const core_1 = require("@agents-tower/core");
10
+ const web_1 = require("@agents-tower/web");
11
+ function usage() {
12
+ console.log(`aot
13
+
14
+ Usage:
15
+ aot snapshot [projectRoot] [--history]
16
+ aot watch [projectRoot] [--history]
17
+ aot web [--port 4181] [--host 127.0.0.1] [projectRoot...]
18
+ aot web query <repo> <gist|recent|last> [scope=local|team] [limit=10] [type=agents|events|all] [--json]
19
+ aot demo preview [--port 4181] [--host 127.0.0.1] [--duration 75] [--keep]
20
+ aot aseprite inspect [file]
21
+ aot presence boss [projectRoot]
22
+ aot presence clear [projectRoot]
23
+ aot rooms validate [fileOrProjectRoot]
24
+ aot rooms scaffold [projectRoot]
25
+ aot agents link hermes [--hermes-home ~/.hermes] [--hook-dir <path>]
26
+
27
+ Omit project roots for normal fleet-mode web deploys.
28
+ Pass project roots only when you intentionally want a pinned single-project or multi-project view.
29
+ Use web query to read the running local web server's current local or coordinated team snapshot.
30
+ `);
31
+ }
32
+ function roomLabel(roomId) {
33
+ return roomId ?? "cloud";
34
+ }
35
+ function renderAgents(agents) {
36
+ if (agents.length === 0) {
37
+ return " (none)";
38
+ }
39
+ return agents
40
+ .map((agent) => {
41
+ const location = agent.cwd ? ` @ ${agent.cwd}` : "";
42
+ const followUp = agent.resumeCommand ? ` | ${agent.resumeCommand}` : "";
43
+ const goal = agent.goal?.objective ? ` | 🎯 ${agent.goal.objective}` : "";
44
+ const role = agent.role ?? (agent.source === "local" ? "default" : "cloud");
45
+ return ` - [${agent.state}] ${agent.label} <${role}/${agent.appearance.id}> ${agent.detail}${goal}${location}${followUp}`;
46
+ })
47
+ .join("\n");
48
+ }
49
+ function printSnapshot(snapshot) {
50
+ const grouped = new Map();
51
+ for (const agent of snapshot.agents) {
52
+ const key = roomLabel(agent.roomId);
53
+ const list = grouped.get(key) ?? [];
54
+ list.push(agent);
55
+ grouped.set(key, list);
56
+ }
57
+ console.log("Codex Agents Office");
58
+ console.log(`Project: ${snapshot.projectRoot}`);
59
+ console.log(`Generated: ${snapshot.generatedAt}`);
60
+ console.log("");
61
+ for (const room of (0, core_1.flattenRooms)(snapshot.rooms)) {
62
+ const agents = grouped.get(room.id) ?? [];
63
+ console.log(`Room ${room.id} (${room.name}) path=${room.path} tiles=${room.width}x${room.height}`);
64
+ console.log(renderAgents(agents));
65
+ console.log("");
66
+ }
67
+ const cloudAgents = grouped.get("cloud") ?? [];
68
+ console.log("Cloud");
69
+ console.log(renderAgents(cloudAgents));
70
+ if (snapshot.notes.length > 0) {
71
+ console.log("");
72
+ console.log("Notes");
73
+ for (const note of snapshot.notes) {
74
+ console.log(` - ${note}`);
75
+ }
76
+ }
77
+ }
78
+ async function runSnapshot(projectRoot, history = false) {
79
+ const snapshot = await (0, core_1.buildDashboardSnapshot)({
80
+ projectRoot,
81
+ includeCloud: true
82
+ });
83
+ printSnapshot(history ? snapshot : (0, core_1.filterSnapshotToCurrentWorkload)(snapshot));
84
+ }
85
+ async function runWatch(projectRoot, history = false) {
86
+ while (true) {
87
+ process.stdout.write("\x1Bc");
88
+ try {
89
+ await runSnapshot(projectRoot, history);
90
+ }
91
+ catch (error) {
92
+ console.error(error instanceof Error ? error.message : String(error));
93
+ }
94
+ await (0, promises_1.setTimeout)(4000);
95
+ }
96
+ }
97
+ function resolveProjectRootArg(args) {
98
+ return (0, node_path_1.resolve)(args.find((arg) => !arg.startsWith("--")) ?? (0, node_process_1.cwd)());
99
+ }
100
+ function includeHistory(args) {
101
+ return args.includes("--history");
102
+ }
103
+ async function runRooms(args) {
104
+ const subcommand = args[0];
105
+ const target = (0, node_path_1.resolve)(args[1] ?? (0, node_process_1.cwd)());
106
+ if (subcommand === "validate") {
107
+ const filePath = target.endsWith(".xml") ? target : await (0, core_1.resolveReadableRoomsFilePath)(target);
108
+ const config = await (0, core_1.validateRoomFile)(filePath);
109
+ console.log(`Valid room file: ${config.filePath}`);
110
+ for (const room of (0, core_1.flattenRooms)(config)) {
111
+ console.log(`- ${room.id} ${room.name} path=${room.path} rect=${room.x},${room.y},${room.width},${room.height}`);
112
+ }
113
+ return;
114
+ }
115
+ if (subcommand === "scaffold") {
116
+ const filePath = await (0, core_1.scaffoldRoomsFile)(target);
117
+ console.log(filePath);
118
+ return;
119
+ }
120
+ usage();
121
+ (0, node_process_1.exit)(1);
122
+ }
123
+ async function runAseprite(args) {
124
+ const subcommand = args[0];
125
+ if (subcommand !== "inspect") {
126
+ usage();
127
+ (0, node_process_1.exit)(1);
128
+ }
129
+ const target = (0, node_path_1.resolve)(args[1] ?? (0, node_process_1.cwd)());
130
+ const header = await (0, core_1.readAsepriteHeader)(target);
131
+ console.log(`Aseprite file: ${target}`);
132
+ console.log(`Canvas: ${header.width}x${header.height}`);
133
+ console.log(`Frames: ${header.frames}`);
134
+ console.log(`Color depth: ${header.colorDepth}`);
135
+ console.log(`Flags: ${header.flags}`);
136
+ console.log(`Speed: ${header.speed}`);
137
+ console.log(`File size: ${header.fileSize}`);
138
+ console.log("");
139
+ console.log("Suggested export:");
140
+ console.log(` ${(0, core_1.buildAsepriteExportCommand)(target)}`);
141
+ }
142
+ async function runPresence(args) {
143
+ const subcommand = args[0];
144
+ const target = (0, node_path_1.resolve)(args[1] ?? (0, node_process_1.cwd)());
145
+ if (subcommand === "boss") {
146
+ await (0, core_1.setBossPresence)(target);
147
+ console.log(`Boss presence updated for ${target}`);
148
+ return;
149
+ }
150
+ if (subcommand === "clear") {
151
+ await (0, core_1.clearBossPresence)(target);
152
+ console.log(`Boss presence cleared for ${target}`);
153
+ return;
154
+ }
155
+ usage();
156
+ (0, node_process_1.exit)(1);
157
+ }
158
+ function stringFlag(args, name) {
159
+ const index = args.indexOf(name);
160
+ if (index < 0) {
161
+ return null;
162
+ }
163
+ const value = args[index + 1];
164
+ return value && !value.startsWith("--") ? value : null;
165
+ }
166
+ async function runAgents(args) {
167
+ const subcommand = args[0];
168
+ const target = args[1];
169
+ if (subcommand === "link" && target === "hermes") {
170
+ const result = await (0, core_1.installHermesAgentsOfficePlugin)({
171
+ hermesHome: stringFlag(args, "--hermes-home"),
172
+ hookDir: stringFlag(args, "--hook-dir")
173
+ });
174
+ console.log("Hermes Agents Office plugin linked.");
175
+ console.log(`Hermes home: ${result.hermesHome}`);
176
+ console.log(`Plugin: ${result.pluginDir}`);
177
+ console.log(`Hook output: ${result.hookDir}`);
178
+ console.log(`Config: ${result.configPath}`);
179
+ console.log("Restart or reload Hermes when you want it to load the plugin; this command does not launch Hermes.");
180
+ return;
181
+ }
182
+ usage();
183
+ (0, node_process_1.exit)(1);
184
+ }
185
+ async function runDemo(args) {
186
+ const subcommand = args[0];
187
+ if (subcommand === "preview") {
188
+ await (0, demo_preview_1.runDemoPreview)(args.slice(1));
189
+ return;
190
+ }
191
+ usage();
192
+ (0, node_process_1.exit)(1);
193
+ }
194
+ async function runWeb(args) {
195
+ if (args[0] === "query") {
196
+ await (0, web_query_1.runWebQuery)(args.slice(1), usage);
197
+ return;
198
+ }
199
+ await (0, web_1.startWebServer)(args);
200
+ }
201
+ async function main() {
202
+ const [command, ...args] = process.argv.slice(2);
203
+ if (!command || command === "--help" || command === "-h") {
204
+ usage();
205
+ return;
206
+ }
207
+ if (command === "snapshot") {
208
+ await runSnapshot(resolveProjectRootArg(args), includeHistory(args));
209
+ return;
210
+ }
211
+ if (command === "watch") {
212
+ await runWatch(resolveProjectRootArg(args), includeHistory(args));
213
+ return;
214
+ }
215
+ if (command === "web") {
216
+ await runWeb(args);
217
+ return;
218
+ }
219
+ if (command === "rooms") {
220
+ await runRooms(args);
221
+ return;
222
+ }
223
+ if (command === "aseprite") {
224
+ await runAseprite(args);
225
+ return;
226
+ }
227
+ if (command === "presence") {
228
+ await runPresence(args);
229
+ return;
230
+ }
231
+ if (command === "agents") {
232
+ await runAgents(args);
233
+ return;
234
+ }
235
+ if (command === "demo") {
236
+ await runDemo(args);
237
+ return;
238
+ }
239
+ usage();
240
+ (0, node_process_1.exit)(1);
241
+ }
242
+ void main();
243
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runWebQuery(args: string[], showUsage: () => void): Promise<void>;
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runWebQuery = runWebQuery;
4
+ const node_process_1 = require("node:process");
5
+ function normalizeServerBase(value) {
6
+ const trimmed = value.trim();
7
+ if (/^https?:\/\//i.test(trimmed)) {
8
+ return trimmed;
9
+ }
10
+ return `http://${trimmed}`;
11
+ }
12
+ function webQueryHost(host) {
13
+ const normalized = host.trim();
14
+ return normalized === "0.0.0.0" || normalized === "::" || normalized === "[::]"
15
+ ? "127.0.0.1"
16
+ : normalized;
17
+ }
18
+ function defaultWebServerBase() {
19
+ const host = webQueryHost(node_process_1.env.CODEX_AGENTS_OFFICE_HOST ?? "127.0.0.1");
20
+ const port = Number.parseInt(node_process_1.env.CODEX_AGENTS_OFFICE_PORT ?? "4181", 10);
21
+ return `http://${host}:${Number.isFinite(port) ? port : 4181}`;
22
+ }
23
+ function setWebQueryValue(options, key, value) {
24
+ if (key === "scope") {
25
+ if (value !== "local" && value !== "team") {
26
+ throw new Error("scope must be local or team");
27
+ }
28
+ options.scope = value;
29
+ return;
30
+ }
31
+ if (key === "server") {
32
+ options.serverBase = normalizeServerBase(value);
33
+ return;
34
+ }
35
+ if (key === "host") {
36
+ const current = new URL(options.serverBase);
37
+ current.hostname = webQueryHost(value);
38
+ options.serverBase = current.toString();
39
+ return;
40
+ }
41
+ if (key === "port") {
42
+ const current = new URL(options.serverBase);
43
+ const port = Number.parseInt(value, 10);
44
+ if (!Number.isFinite(port)) {
45
+ throw new Error("port must be a number");
46
+ }
47
+ current.port = String(port);
48
+ options.serverBase = current.toString();
49
+ return;
50
+ }
51
+ if (!["limit", "type", "state", "source", "kind", "since", "agent"].includes(key)) {
52
+ throw new Error(`Unsupported query value: ${key}`);
53
+ }
54
+ if (key === "limit") {
55
+ const limit = Number.parseInt(value, 10);
56
+ if (!Number.isFinite(limit)) {
57
+ throw new Error("limit must be a number");
58
+ }
59
+ options.values.limit = limit;
60
+ return;
61
+ }
62
+ options.values[key] = value;
63
+ }
64
+ function parseWebQueryCliArgs(args) {
65
+ const positionals = [];
66
+ const options = {
67
+ scope: "local",
68
+ values: {},
69
+ serverBase: defaultWebServerBase()
70
+ };
71
+ let json = false;
72
+ for (let index = 0; index < args.length; index += 1) {
73
+ const arg = args[index];
74
+ if (arg === "--json") {
75
+ json = true;
76
+ continue;
77
+ }
78
+ if (arg === "--server" || arg === "--host" || arg === "--port" || arg === "--scope" || arg === "--limit" || arg === "--type" || arg === "--state" || arg === "--source" || arg === "--kind" || arg === "--since" || arg === "--agent") {
79
+ const key = arg.slice(2);
80
+ const value = args[index + 1];
81
+ if (!value) {
82
+ throw new Error(`${arg} requires a value`);
83
+ }
84
+ setWebQueryValue(options, key, value);
85
+ index += 1;
86
+ continue;
87
+ }
88
+ if (arg.startsWith("--")) {
89
+ throw new Error(`Unknown option: ${arg}`);
90
+ }
91
+ positionals.push(arg);
92
+ }
93
+ const [repo, command, ...extras] = positionals;
94
+ if (!repo || !command) {
95
+ throw new Error("web query requires <repo> and <gist|recent|last>");
96
+ }
97
+ if (command !== "gist" && command !== "recent" && command !== "last") {
98
+ throw new Error("web query command must be gist, recent, or last");
99
+ }
100
+ for (const extra of extras) {
101
+ if ((extra === "local" || extra === "team") && options.scope === "local") {
102
+ options.scope = extra;
103
+ continue;
104
+ }
105
+ const separator = extra.indexOf("=");
106
+ if (separator <= 0) {
107
+ throw new Error(`Query values must be key=value pairs: ${extra}`);
108
+ }
109
+ setWebQueryValue(options, extra.slice(0, separator), extra.slice(separator + 1));
110
+ }
111
+ return {
112
+ repo,
113
+ command,
114
+ scope: options.scope,
115
+ values: options.values,
116
+ json,
117
+ serverBase: options.serverBase
118
+ };
119
+ }
120
+ function buildWebQueryUrl(options) {
121
+ const url = new URL("/api/web-cli/query", options.serverBase.endsWith("/") ? options.serverBase : `${options.serverBase}/`);
122
+ url.searchParams.set("repo", options.repo);
123
+ url.searchParams.set("command", options.command);
124
+ url.searchParams.set("scope", options.scope);
125
+ for (const [key, value] of Object.entries(options.values)) {
126
+ url.searchParams.set(key, String(value));
127
+ }
128
+ return url.toString();
129
+ }
130
+ function formatCacheAge(ageMs) {
131
+ if (typeof ageMs !== "number" || !Number.isFinite(ageMs)) {
132
+ return "unknown age";
133
+ }
134
+ if (ageMs < 1000) {
135
+ return `${Math.round(ageMs)}ms old`;
136
+ }
137
+ if (ageMs < 60000) {
138
+ return `${Math.round(ageMs / 1000)}s old`;
139
+ }
140
+ return `${Math.round(ageMs / 60000)}m old`;
141
+ }
142
+ function formatWebQueryItem(item) {
143
+ const timestamp = typeof item.timestamp === "string" ? item.timestamp : "";
144
+ const type = typeof item.type === "string" ? item.type : "item";
145
+ const label = typeof item.label === "string" ? item.label : "(untitled)";
146
+ const detail = typeof item.detail === "string" && item.detail.length > 0 ? ` - ${item.detail}` : "";
147
+ const peer = typeof item.peerLabel === "string" && item.peerLabel.length > 0 ? ` @ ${item.peerLabel}` : "";
148
+ if (type === "agent") {
149
+ const source = typeof item.source === "string" ? item.source : "unknown";
150
+ const state = typeof item.state === "string" ? item.state : "unknown";
151
+ return ` - ${timestamp} [agent/${source}/${state}] ${label}${peer}${detail}`;
152
+ }
153
+ const kind = typeof item.eventKind === "string" ? item.eventKind : "event";
154
+ const phase = typeof item.eventPhase === "string" ? item.eventPhase : "updated";
155
+ return ` - ${timestamp} [event/${kind}/${phase}] ${label}${detail}`;
156
+ }
157
+ function formatGistFileChange(change) {
158
+ const label = typeof change.label === "string" && change.label.length > 0 ? change.label : String(change.path || "(unknown)");
159
+ const heat = typeof change.heat === "number" && Number.isFinite(change.heat) ? ` heat ${Math.round(change.heat)}` : "";
160
+ const count = typeof change.changeCount === "number" && Number.isFinite(change.changeCount) ? ` x${change.changeCount}` : "";
161
+ const branch = typeof change.branch === "string" && change.branch.length > 0
162
+ ? ` [${change.branch}]`
163
+ : "";
164
+ const users = Array.isArray(change.users)
165
+ ? change.users.filter((user) => typeof user === "string" && user.length > 0)
166
+ : [];
167
+ const user = users.length > 0 ? ` @ ${users.join(", ")}` : "";
168
+ const path = typeof change.path === "string" && change.path.length > 0 ? ` - ${change.path}` : "";
169
+ return ` - ${label}${branch}${user}${heat}${count}${path}`;
170
+ }
171
+ function formatGistAgent(agent) {
172
+ const label = typeof agent.label === "string" ? agent.label : "(unknown)";
173
+ const state = typeof agent.state === "string" ? agent.state : "unknown";
174
+ const source = typeof agent.source === "string" ? agent.source : "unknown";
175
+ const message = typeof agent.lastMessage === "string" && agent.lastMessage.length > 0 ? ` - ${agent.lastMessage}` : "";
176
+ const peer = typeof agent.peerLabel === "string" && agent.peerLabel.length > 0 ? ` @ ${agent.peerLabel}` : "";
177
+ const lastFile = agent.lastFileChange && typeof agent.lastFileChange === "object"
178
+ ? agent.lastFileChange
179
+ : null;
180
+ const file = lastFile
181
+ ? ` | file ${String(lastFile.label || lastFile.path || "(unknown)")}`
182
+ : "";
183
+ return ` - [${source}/${state}] ${label}${peer}${message}${file}`;
184
+ }
185
+ function printWebQueryGist(payload) {
186
+ const gist = payload.gist && typeof payload.gist === "object" ? payload.gist : null;
187
+ if (!gist) {
188
+ return false;
189
+ }
190
+ const hotChanges = Array.isArray(gist.hotChanges) ? gist.hotChanges : [];
191
+ const activeAgents = Array.isArray(gist.activeAgents) ? gist.activeAgents : [];
192
+ console.log(`Gist: ${typeof gist.summary === "string" ? gist.summary : "state sync"}`);
193
+ console.log("Hot changes:");
194
+ if (hotChanges.length === 0) {
195
+ console.log(" (none)");
196
+ }
197
+ else {
198
+ hotChanges.forEach((change) => console.log(formatGistFileChange(change)));
199
+ }
200
+ console.log("Active agents:");
201
+ if (activeAgents.length === 0) {
202
+ console.log(" (none)");
203
+ }
204
+ else {
205
+ activeAgents.forEach((agent) => console.log(formatGistAgent(agent)));
206
+ }
207
+ return true;
208
+ }
209
+ function printWebQueryResponse(payload) {
210
+ const project = payload.matchedProject && typeof payload.matchedProject === "object"
211
+ ? payload.matchedProject
212
+ : {};
213
+ const items = Array.isArray(payload.items) ? payload.items : [];
214
+ const teamNote = payload.scope === "team"
215
+ ? payload.teamDataAvailable === true
216
+ ? `, team cache ${formatCacheAge(payload.teamCacheAgeMs)}`
217
+ : ", no coordinated team cache"
218
+ : "";
219
+ console.log(`Repo: ${String(project.repoName || project.projectLabel || payload.repo)}`);
220
+ console.log(`Project: ${String(project.projectLabel || "(unknown)")}`);
221
+ console.log(`Query: ${String(payload.scope)} ${String(payload.command)} (${String(payload.dataSource)}${teamNote})`);
222
+ if (printWebQueryGist(payload)) {
223
+ return;
224
+ }
225
+ if (items.length === 0) {
226
+ console.log(" (no matching data)");
227
+ return;
228
+ }
229
+ for (const item of items) {
230
+ console.log(formatWebQueryItem(item));
231
+ }
232
+ }
233
+ async function runWebQuery(args, showUsage) {
234
+ let options;
235
+ try {
236
+ options = parseWebQueryCliArgs(args);
237
+ }
238
+ catch (error) {
239
+ console.error(error instanceof Error ? error.message : String(error));
240
+ showUsage();
241
+ (0, node_process_1.exit)(1);
242
+ }
243
+ let response;
244
+ const url = buildWebQueryUrl(options);
245
+ try {
246
+ response = await fetch(url);
247
+ }
248
+ catch (error) {
249
+ console.error(`Could not reach Agents Office web server at ${options.serverBase}: ${error instanceof Error ? error.message : String(error)}`);
250
+ (0, node_process_1.exit)(1);
251
+ }
252
+ const rawPayload = await response.text();
253
+ let payload;
254
+ try {
255
+ payload = JSON.parse(rawPayload);
256
+ }
257
+ catch {
258
+ payload = { error: rawPayload };
259
+ }
260
+ if (!response.ok) {
261
+ console.error(typeof payload.error === "string" ? payload.error : `Web query failed with HTTP ${response.status}`);
262
+ if (Array.isArray(payload.candidates) && payload.candidates.length > 0) {
263
+ console.error("Candidates:");
264
+ for (const candidate of payload.candidates) {
265
+ console.error(` - ${String(candidate.repoName || candidate.projectLabel || candidate.projectRoot)}`);
266
+ }
267
+ }
268
+ (0, node_process_1.exit)(1);
269
+ }
270
+ if (options.json) {
271
+ console.log(JSON.stringify(payload, null, 2));
272
+ return;
273
+ }
274
+ printWebQueryResponse(payload);
275
+ }
276
+ //# sourceMappingURL=web-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-query.js","sourceRoot":"","sources":["../src/web-query.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "agents-office-tower",
3
+ "version": "0.1.0",
4
+ "description": "Live pixel-office view for agent work across Codex, Claude, Cursor, Hermes, OpenClaw, cloud tasks, and shared rooms.",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "bin": {
12
+ "aot": "dist/index.js",
13
+ "codex-agents-office": "dist/index.js"
14
+ },
15
+ "scripts": {
16
+ "build": "tsc -p tsconfig.json",
17
+ "typecheck": "tsc -p tsconfig.json --noEmit"
18
+ },
19
+ "dependencies": {
20
+ "@agents-tower/core": "^0.1.0",
21
+ "@agents-tower/web": "^0.1.0"
22
+ }
23
+ }