@bradheitmann/odin-sentinel 0.4.12 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +24 -17
  3. package/dist/src/harness-pacing/index.d.ts +10 -0
  4. package/dist/src/harness-pacing/index.js +11 -0
  5. package/dist/src/harness-pacing/index.js.map +1 -0
  6. package/dist/src/harness-pacing/recommend.d.ts +28 -0
  7. package/dist/src/harness-pacing/recommend.js +74 -0
  8. package/dist/src/harness-pacing/recommend.js.map +1 -0
  9. package/dist/src/harness-pacing/schema.d.ts +28 -0
  10. package/dist/src/harness-pacing/schema.js +2 -0
  11. package/dist/src/harness-pacing/schema.js.map +1 -0
  12. package/dist/src/harness-pacing/storage.d.ts +32 -0
  13. package/dist/src/harness-pacing/storage.js +74 -0
  14. package/dist/src/harness-pacing/storage.js.map +1 -0
  15. package/dist/src/mcp/server.js +29 -2
  16. package/dist/src/mcp/server.js.map +1 -1
  17. package/dist/src/odin-watch/backends/cmux.d.ts +6 -0
  18. package/dist/src/odin-watch/backends/cmux.js +39 -0
  19. package/dist/src/odin-watch/backends/cmux.js.map +1 -0
  20. package/dist/src/odin-watch/backends/tmux.d.ts +6 -0
  21. package/dist/src/odin-watch/backends/tmux.js +40 -0
  22. package/dist/src/odin-watch/backends/tmux.js.map +1 -0
  23. package/dist/src/odin-watch/classifier.d.ts +27 -0
  24. package/dist/src/odin-watch/classifier.js +182 -0
  25. package/dist/src/odin-watch/classifier.js.map +1 -0
  26. package/dist/src/odin-watch/index.d.ts +2 -0
  27. package/dist/src/odin-watch/index.js +200 -0
  28. package/dist/src/odin-watch/index.js.map +1 -0
  29. package/dist/src/odin-watch/snapshotter.d.ts +11 -0
  30. package/dist/src/odin-watch/snapshotter.js +2 -0
  31. package/dist/src/odin-watch/snapshotter.js.map +1 -0
  32. package/dist/src/odin-watch/writers.d.ts +8 -0
  33. package/dist/src/odin-watch/writers.js +27 -0
  34. package/dist/src/odin-watch/writers.js.map +1 -0
  35. package/dist/src/protocol/index.d.ts +3 -1
  36. package/dist/src/protocol/index.js +4 -1
  37. package/dist/src/protocol/index.js.map +1 -1
  38. package/dist/src/protocol/repository.d.ts +14 -0
  39. package/dist/src/protocol/repository.js +25 -1
  40. package/dist/src/protocol/repository.js.map +1 -1
  41. package/dist/src/protocol/schemas.d.ts +144 -0
  42. package/dist/src/protocol/schemas.js +23 -0
  43. package/dist/src/protocol/schemas.js.map +1 -1
  44. package/dist/src/protocol/service.d.ts +19 -2
  45. package/dist/src/protocol/service.js +89 -3
  46. package/dist/src/protocol/service.js.map +1 -1
  47. package/dist/src/protocol/surface-layout.d.ts +20 -0
  48. package/dist/src/protocol/surface-layout.js +20 -0
  49. package/dist/src/protocol/surface-layout.js.map +1 -1
  50. package/dist/src/protocol/version.d.ts +2 -2
  51. package/dist/src/protocol/version.js +2 -2
  52. package/dist/src/protocol/version.js.map +1 -1
  53. package/dist/src/utils/execFileNoThrow.d.ts +5 -0
  54. package/dist/src/utils/execFileNoThrow.js +18 -0
  55. package/dist/src/utils/execFileNoThrow.js.map +1 -0
  56. package/docs/adapters/cmux-adapter.md +168 -0
  57. package/docs/adapters/herdr-adapter.md +150 -0
  58. package/docs/adapters/minimux-adapter.md +152 -0
  59. package/docs/adapters/plain-terminal.md +80 -0
  60. package/docs/adapters/tmux-adapter.md +150 -0
  61. package/docs/guides/quick-start.md +7 -7
  62. package/docs/guides/quickstart-prompts.md +4 -4
  63. package/docs/lattice/odin-lattice-design.md +555 -0
  64. package/docs/reference/distribution.md +11 -5
  65. package/docs/reference/public-surface-audit.md +3 -3
  66. package/package.json +7 -5
  67. package/plugins/odin-scp/.claude-plugin/plugin.json +2 -2
  68. package/plugins/odin-scp/README.md +6 -6
  69. package/plugins/odin-scp/skills/odin-scp/CHANGELOG.md +12 -0
  70. package/plugins/odin-scp/skills/odin-scp/SKILL.md +196 -3
  71. package/plugins/odin-scp/skills/odin-scp/references/canonical-introduction-prompt.md +0 -2
  72. package/protocol/SCP.md +2 -2
  73. package/protocol/bootstrap-skill.md +196 -3
  74. package/protocol/closeout.yaml +1 -1
  75. package/protocol/delegation.yaml +1 -1
  76. package/protocol/mission-frontrun/droids-scrutiny-feature-reviewer.md +70 -0
  77. package/protocol/mission-frontrun/orchestrator-contract.md +70 -0
  78. package/protocol/mission-frontrun/scrutiny-feature-reviewer-contract.md +73 -0
  79. package/protocol/mission-frontrun/scrutiny-validator-contract.md +77 -0
  80. package/protocol/mission-frontrun/worker-contract.md +66 -0
  81. package/protocol/model-profiles.yaml +8 -1
  82. package/protocol/receipts/boot-receipt.yaml +13 -0
  83. package/protocol/role-cards/dev-worker.md +74 -0
  84. package/protocol/role-cards/exec-asst.md +83 -0
  85. package/protocol/role-cards/exec-pm.md +66 -0
  86. package/protocol/role-cards/qa-worker.md +71 -0
  87. package/protocol/role-cards/team-pm.md +67 -0
  88. package/protocol/roles.yaml +1 -1
  89. package/protocol/skill-references/canonical-introduction-prompt.md +0 -2
  90. package/protocol/topology.yaml +1 -1
  91. package/scripts/audit/public-surface.mjs +27 -2
  92. package/scripts/audit/verify-pack.mjs +121 -5
@@ -10,7 +10,7 @@
10
10
  "name": "odin-scp",
11
11
  "source": "./plugins/odin-scp",
12
12
  "description": "Multi-agent team governance: self-bootstrap, role topology, boot receipts, delegation, CMUX delivery proof, heartbeat cadence, adversarial QA, finish audit. Auto-wires the @bradheitmann/odin-sentinel MCP server.",
13
- "version": "0.4.12",
13
+ "version": "0.5.0",
14
14
  "category": "agents",
15
15
  "tags": [
16
16
  "mcp",
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ODIN Sentinel
2
2
 
3
- **Portable MCP governance protocol for visible multi-agent teams: 27 tools, 13 resources, role topology, readiness gates, ODIN watchers, receipts, delegation, and closeout over stdio.**
3
+ **Portable MCP governance protocol for visible multi-agent teams: 29 tools, 18 resources, role topology, readiness gates, ODIN watchers, receipts, delegation, and closeout over stdio.**
4
4
 
5
5
  ODIN Sentinel is a local stdio MCP server plus a portable coordination protocol
6
6
  for visible agent teams. It gives agents a shared roster, startup packet,
@@ -39,7 +39,7 @@ For a starter team shape, read [docs/guides/recommended-starter-team.md](docs/gu
39
39
  Before launching persistent governed roles, confirm:
40
40
 
41
41
  - Node.js satisfies `package.json` (`>=22.13.0`).
42
- - `@bradheitmann/odin-sentinel` is installed or available through a pinned
42
+ - `@bradheitmann/odin-sentinel@0.5.0` is installed or available through a pinned
43
43
  `pnpm dlx` or `npx` command.
44
44
  - The ODIN MCP server is configured in each selected harness.
45
45
  - The SCP native skill is installed where supported, or the full prompt/resource
@@ -58,29 +58,29 @@ not be launched until readiness passes or the PM records a waiver/substitution.
58
58
  Recommended zero-install path:
59
59
 
60
60
  ```bash
61
- pnpm dlx --package @bradheitmann/odin-sentinel@0.4.12 odin-sentinel-mcp
61
+ pnpm dlx --package @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp
62
62
  ```
63
63
 
64
64
  Supported npm global install:
65
65
 
66
66
  ```bash
67
- npm i -g @bradheitmann/odin-sentinel@0.4.12
67
+ npm i -g @bradheitmann/odin-sentinel@0.5.0
68
68
  ```
69
69
 
70
70
  Supported npx zero-install path:
71
71
 
72
72
  ```bash
73
- npx -y -p @bradheitmann/odin-sentinel@0.4.12 odin-sentinel-mcp
73
+ npx -y -p @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp
74
74
  ```
75
75
 
76
76
  A stdio smoke test that does not require an MCP host:
77
77
 
78
78
  ```bash
79
79
  printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}\n' \
80
- | pnpm dlx --package @bradheitmann/odin-sentinel@0.4.12 odin-sentinel-mcp
80
+ | pnpm dlx --package @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp
81
81
  ```
82
82
 
83
- A successful response includes `"serverInfo":{"name":"odin-sentinel","version":"0.4.12"}`.
83
+ A successful response includes `"serverInfo":{"name":"odin-sentinel","version":"0.5.0"}`.
84
84
  Minimum compatible child MCP version for governed-team docs is `0.4.5`.
85
85
 
86
86
  ## MCP Host Examples
@@ -88,7 +88,7 @@ Minimum compatible child MCP version for governed-team docs is `0.4.5`.
88
88
  Claude Code:
89
89
 
90
90
  ```bash
91
- claude mcp add odin-sentinel -- pnpm dlx --package @bradheitmann/odin-sentinel@0.4.12 odin-sentinel-mcp
91
+ claude mcp add odin-sentinel -- pnpm dlx --package @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp
92
92
  ```
93
93
 
94
94
  Codex (`~/.codex/config.toml`):
@@ -96,7 +96,7 @@ Codex (`~/.codex/config.toml`):
96
96
  ```toml
97
97
  [mcp_servers.odin-sentinel]
98
98
  command = "pnpm"
99
- args = ["dlx", "--package", "@bradheitmann/odin-sentinel@0.4.12", "odin-sentinel-mcp"]
99
+ args = ["dlx", "--package", "@bradheitmann/odin-sentinel@0.5.0", "odin-sentinel-mcp"]
100
100
  ```
101
101
 
102
102
  Cursor / VS Code / Droid / Crush (`mcpServers` JSON):
@@ -106,7 +106,7 @@ Cursor / VS Code / Droid / Crush (`mcpServers` JSON):
106
106
  "mcpServers": {
107
107
  "odin-sentinel": {
108
108
  "command": "pnpm",
109
- "args": ["dlx", "--package", "@bradheitmann/odin-sentinel@0.4.12", "odin-sentinel-mcp"]
109
+ "args": ["dlx", "--package", "@bradheitmann/odin-sentinel@0.5.0", "odin-sentinel-mcp"]
110
110
  }
111
111
  }
112
112
  }
@@ -118,7 +118,7 @@ Zed (`~/.config/zed/settings.json`):
118
118
  "odin-sentinel": {
119
119
  "source": "custom",
120
120
  "command": "pnpm",
121
- "args": ["dlx", "--package", "@bradheitmann/odin-sentinel@0.4.12", "odin-sentinel-mcp"]
121
+ "args": ["dlx", "--package", "@bradheitmann/odin-sentinel@0.5.0", "odin-sentinel-mcp"]
122
122
  }
123
123
  ```
124
124
 
@@ -128,7 +128,7 @@ Goose (`~/.config/goose/config.yaml`):
128
128
  odin-sentinel:
129
129
  type: stdio
130
130
  cmd: pnpm
131
- args: ["dlx", "--package", "@bradheitmann/odin-sentinel@0.4.12", "odin-sentinel-mcp"]
131
+ args: ["dlx", "--package", "@bradheitmann/odin-sentinel@0.5.0", "odin-sentinel-mcp"]
132
132
  enabled: true
133
133
  ```
134
134
 
@@ -139,7 +139,7 @@ OpenCode (`~/.config/opencode/opencode.json`):
139
139
  "mcp": {
140
140
  "odin-sentinel": {
141
141
  "type": "local",
142
- "command": ["pnpm", "dlx", "--package", "@bradheitmann/odin-sentinel@0.4.12", "odin-sentinel-mcp"],
142
+ "command": ["pnpm", "dlx", "--package", "@bradheitmann/odin-sentinel@0.5.0", "odin-sentinel-mcp"],
143
143
  "enabled": true
144
144
  }
145
145
  }
@@ -152,13 +152,13 @@ OpenHands (`~/.openhands/config.toml`):
152
152
  [mcp.stdio_servers.odin-sentinel]
153
153
  name = "odin-sentinel"
154
154
  command = "pnpm"
155
- args = ["dlx", "--package", "@bradheitmann/odin-sentinel@0.4.12", "odin-sentinel-mcp"]
155
+ args = ["dlx", "--package", "@bradheitmann/odin-sentinel@0.5.0", "odin-sentinel-mcp"]
156
156
  ```
157
157
 
158
158
  If a host cannot run `pnpm`, use the equivalent pinned npx command:
159
159
 
160
160
  ```bash
161
- npx -y -p @bradheitmann/odin-sentinel@0.4.12 odin-sentinel-mcp
161
+ npx -y -p @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp
162
162
  ```
163
163
 
164
164
  ## MCP, Skill, Plugin, Prompt Fallback
@@ -193,7 +193,7 @@ using them for real work.
193
193
  Local operator planning folders may be useful private workspaces, but they are
194
194
  not shipped product internals and are not required for public users.
195
195
 
196
- ## Provided MCP Resources (13)
196
+ ## Provided MCP Resources (18)
197
197
 
198
198
  - `odin://protocol/main`
199
199
  - `odin://protocol/roles`
@@ -208,12 +208,18 @@ not shipped product internals and are not required for public users.
208
208
  - `odin://protocol/skill-references/canonical-introduction-prompt`
209
209
  - `odin://protocol/skill-references/harness-skill-targets`
210
210
  - `odin://protocol/skill-references/team-bootstrap-runbook`
211
+ - `odin://protocol/role-cards/exec-pm`
212
+ - `odin://protocol/role-cards/team-pm`
213
+ - `odin://protocol/role-cards/dev-worker`
214
+ - `odin://protocol/role-cards/qa-worker`
215
+ - `odin://protocol/role-cards/exec-asst`
211
216
 
212
- ## Provided MCP Tools (27)
217
+ ## Provided MCP Tools (29)
213
218
 
214
219
  - `odin.get_version`
215
220
  - `odin.get_startup_packet`
216
221
  - `odin.get_role_profile`
222
+ - `odin.get_role_card`
217
223
  - `odin.get_bootstrap_skill`
218
224
  - `odin.get_boot_receipt_schema`
219
225
  - `odin.get_boot_receipt_examples`
@@ -238,6 +244,7 @@ not shipped product internals and are not required for public users.
238
244
  - `odin.preview_telemetry_redaction`
239
245
  - `odin.submit_session_report`
240
246
  - `odin.get_telemetry_config`
247
+ - `odin.get_mission_frontrun_pack`
241
248
 
242
249
  ## Development
243
250
 
@@ -0,0 +1,10 @@
1
+ /**
2
+ * harness-pacing — public module export surface.
3
+ *
4
+ * Consumers import from "odin/harness-pacing" or directly from this file.
5
+ * All public types and functions are re-exported here; nothing else is public.
6
+ */
7
+ export type { HarnessProfile, PacingRecommendation } from "./schema.js";
8
+ export type { HarnessPacingEvent, PacingEventType } from "../protocol/schemas.js";
9
+ export { getProfilePath, buildDefaultProfile, readProfile, appendEvent, LOCAL_PROFILE_BASE, } from "./storage.js";
10
+ export { recommend, loadSeed, applyCrashOverride } from "./recommend.js";
@@ -0,0 +1,11 @@
1
+ /**
2
+ * harness-pacing — public module export surface.
3
+ *
4
+ * Consumers import from "odin/harness-pacing" or directly from this file.
5
+ * All public types and functions are re-exported here; nothing else is public.
6
+ */
7
+ // Storage layer
8
+ export { getProfilePath, buildDefaultProfile, readProfile, appendEvent, LOCAL_PROFILE_BASE, } from "./storage.js";
9
+ // Recommendation engine
10
+ export { recommend, loadSeed, applyCrashOverride } from "./recommend.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/harness-pacing/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,gBAAgB;AAChB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * recommend() — conservative pacing recommendation query.
3
+ *
4
+ * Decision logic:
5
+ * 1. Local runtime profile (.odin/harness-pacing/) takes precedence over seeds.
6
+ * 2. If crash samples are present in the local profile, the smallest safe bucket
7
+ * (0-100 words) is enforced and slash_command_bundling is set to "avoid".
8
+ * 3. Seed profile is returned when no local profile exists.
9
+ * 4. Unknown harness_id returns a conservative fallback (never throws).
10
+ */
11
+ import { readFileSync, existsSync } from "node:fs";
12
+ import type { PacingRecommendation, HarnessProfile } from "./schema.js";
13
+ /** Load a seed profile by harness_id. Returns null when no seed exists. */
14
+ export declare function loadSeed(harness_id: string, seedDir?: string, fsRead?: typeof readFileSync, fsExists?: typeof existsSync): HarnessProfile | null;
15
+ /**
16
+ * Apply conservative crash override: when a profile has crash signatures the
17
+ * recommendation must use the smallest safe bucket, longest safe wait, and
18
+ * must mark slash-command bundling as "avoid".
19
+ *
20
+ * This function is pure and exported for unit testing.
21
+ */
22
+ export declare function applyCrashOverride(rec: PacingRecommendation, crashCount: number): PacingRecommendation;
23
+ /**
24
+ * Return a PacingRecommendation for the given harness_id.
25
+ * Optional _role parameter is reserved for future role-specific tuning.
26
+ * Never throws — unknown harnesses receive conservative defaults.
27
+ */
28
+ export declare function recommend(harness_id: string, _role?: string): PacingRecommendation;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * recommend() — conservative pacing recommendation query.
3
+ *
4
+ * Decision logic:
5
+ * 1. Local runtime profile (.odin/harness-pacing/) takes precedence over seeds.
6
+ * 2. If crash samples are present in the local profile, the smallest safe bucket
7
+ * (0-100 words) is enforced and slash_command_bundling is set to "avoid".
8
+ * 3. Seed profile is returned when no local profile exists.
9
+ * 4. Unknown harness_id returns a conservative fallback (never throws).
10
+ */
11
+ import { readFileSync, existsSync } from "node:fs";
12
+ import { join } from "node:path";
13
+ import { readProfile } from "./storage.js";
14
+ /** Resolved at module load via import.meta.url so seeds are found relative to this file. */
15
+ const SEED_DIR = new URL("./seeds/", import.meta.url).pathname;
16
+ /** Load a seed profile by harness_id. Returns null when no seed exists. */
17
+ export function loadSeed(harness_id, seedDir = SEED_DIR, fsRead = readFileSync, fsExists = existsSync) {
18
+ const path = join(seedDir, `${harness_id}.json`);
19
+ if (!fsExists(path))
20
+ return null;
21
+ try {
22
+ return JSON.parse(fsRead(path, "utf8"));
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Apply conservative crash override: when a profile has crash signatures the
30
+ * recommendation must use the smallest safe bucket, longest safe wait, and
31
+ * must mark slash-command bundling as "avoid".
32
+ *
33
+ * This function is pure and exported for unit testing.
34
+ */
35
+ export function applyCrashOverride(rec, crashCount) {
36
+ if (crashCount === 0)
37
+ return rec;
38
+ return {
39
+ ...rec,
40
+ max_word_bucket: "0-100 words",
41
+ min_idle_wait_seconds: Math.max(rec.min_idle_wait_seconds, 5),
42
+ slash_command_bundling: "avoid",
43
+ notes: rec.notes.includes("crash")
44
+ ? rec.notes
45
+ : `${rec.notes}; crash override applied (${crashCount} known crash signature(s))`,
46
+ };
47
+ }
48
+ /**
49
+ * Return a PacingRecommendation for the given harness_id.
50
+ * Optional _role parameter is reserved for future role-specific tuning.
51
+ * Never throws — unknown harnesses receive conservative defaults.
52
+ */
53
+ export function recommend(harness_id, _role) {
54
+ // 1. Local profile takes precedence over seed.
55
+ const local = readProfile(harness_id);
56
+ if (local) {
57
+ return applyCrashOverride(local.recommended, local.crash_signatures.length);
58
+ }
59
+ // 2. Seed profile.
60
+ const seed = loadSeed(harness_id);
61
+ if (seed) {
62
+ return applyCrashOverride(seed.recommended, seed.crash_signatures.length);
63
+ }
64
+ // 3. Conservative fallback for unknown harnesses — never throws.
65
+ return {
66
+ harness_id,
67
+ max_word_bucket: "0-100 words",
68
+ min_idle_wait_seconds: 5,
69
+ slash_command_bundling: "unknown",
70
+ multi_phase_prompting: "unknown",
71
+ notes: "No profile data available; using conservative defaults",
72
+ };
73
+ }
74
+ //# sourceMappingURL=recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../../src/harness-pacing/recommend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,4FAA4F;AAC5F,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAE/D,2EAA2E;AAC3E,MAAM,UAAU,QAAQ,CACtB,UAAkB,EAClB,OAAO,GAAG,QAAQ,EAClB,SAA8B,YAAY,EAC1C,WAA8B,UAAU;IAExC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW,CAAmB,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAyB,EAAE,UAAkB;IAC9E,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACjC,OAAO;QACL,GAAG,GAAG;QACN,eAAe,EAAE,aAAa;QAC9B,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC7D,sBAAsB,EAAE,OAAO;QAC/B,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,KAAK;YACX,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,6BAA6B,UAAU,4BAA4B;KACpF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,UAAkB,EAAE,KAAc;IAC1D,+CAA+C;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC;IAED,iEAAiE;IACjE,OAAO;QACL,UAAU;QACV,eAAe,EAAE,aAAa;QAC9B,qBAAqB,EAAE,CAAC;QACxB,sBAAsB,EAAE,SAAS;QACjC,qBAAqB,EAAE,SAAS;QAChC,KAAK,EAAE,wDAAwD;KAChE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type { HarnessPacingEvent, PacingEventType } from "../protocol/schemas.js";
2
+ /**
3
+ * A per-harness pacing profile built from accumulated HarnessPacingEvents.
4
+ * Stored locally under .odin/harness-pacing/<harness_id>/profile.json.
5
+ * Seed profiles live at src/harness-pacing/seeds/<harness_id>.json.
6
+ */
7
+ export interface HarnessProfile {
8
+ harness_id: string;
9
+ version: string;
10
+ last_updated: string;
11
+ basis_note?: string;
12
+ samples_total: number;
13
+ events: import("../protocol/schemas.js").HarnessPacingEvent[];
14
+ crash_signatures: string[];
15
+ recommended: PacingRecommendation;
16
+ }
17
+ /**
18
+ * Conservative pacing recommendation derived from a HarnessProfile.
19
+ * Crash samples force the smallest safe bucket and set mitigation notes.
20
+ */
21
+ export interface PacingRecommendation {
22
+ harness_id: string;
23
+ max_word_bucket: string;
24
+ min_idle_wait_seconds: number;
25
+ slash_command_bundling: "allowed" | "avoid" | "unknown";
26
+ multi_phase_prompting: "allowed" | "avoid" | "unknown";
27
+ notes: string;
28
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/harness-pacing/schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Storage layer for harness pacing profiles and events.
3
+ *
4
+ * Runtime profile directory: .odin/harness-pacing/<harness_id>/profile.json
5
+ * Events store METADATA ONLY — prompt_text_stored: false at all times.
6
+ *
7
+ * Pure logic is separated from fs I/O so unit tests can stub the fs layer.
8
+ */
9
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
10
+ import type { HarnessProfile } from "./schema.js";
11
+ import type { HarnessPacingEvent } from "../protocol/schemas.js";
12
+ /** Default runtime profile base — kept outside audit-reserved local state paths. */
13
+ export declare const LOCAL_PROFILE_BASE = ".odin/harness-pacing";
14
+ /** Absolute path to the profile JSON for a given harness_id. */
15
+ export declare function getProfilePath(harness_id: string, base?: string): string;
16
+ /**
17
+ * Build the initial empty profile for a harness_id.
18
+ * Exported for testability — callers that need a blank slate can use this
19
+ * rather than re-constructing the default shape by hand.
20
+ */
21
+ export declare function buildDefaultProfile(harness_id: string): HarnessProfile;
22
+ /**
23
+ * Read the local runtime profile for harness_id.
24
+ * Returns null when no profile exists (never throws).
25
+ */
26
+ export declare function readProfile(harness_id: string, base?: string, fsRead?: typeof readFileSync, fsExists?: typeof existsSync): HarnessProfile | null;
27
+ /**
28
+ * Append a pacing event to the local runtime profile for the event's harness_id.
29
+ * Creates the profile directory and file if they do not exist.
30
+ * Crash events: adds crash_signature_hash to the profile's crash_signatures list.
31
+ */
32
+ export declare function appendEvent(event: HarnessPacingEvent, base?: string, fsRead?: typeof readFileSync, fsExists?: typeof existsSync, fsWrite?: typeof writeFileSync, fsMkdir?: typeof mkdirSync): void;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Storage layer for harness pacing profiles and events.
3
+ *
4
+ * Runtime profile directory: .odin/harness-pacing/<harness_id>/profile.json
5
+ * Events store METADATA ONLY — prompt_text_stored: false at all times.
6
+ *
7
+ * Pure logic is separated from fs I/O so unit tests can stub the fs layer.
8
+ */
9
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
10
+ import { join } from "node:path";
11
+ /** Default runtime profile base — kept outside audit-reserved local state paths. */
12
+ export const LOCAL_PROFILE_BASE = ".odin/harness-pacing";
13
+ /** Absolute path to the profile JSON for a given harness_id. */
14
+ export function getProfilePath(harness_id, base = LOCAL_PROFILE_BASE) {
15
+ return join(base, harness_id, "profile.json");
16
+ }
17
+ /**
18
+ * Build the initial empty profile for a harness_id.
19
+ * Exported for testability — callers that need a blank slate can use this
20
+ * rather than re-constructing the default shape by hand.
21
+ */
22
+ export function buildDefaultProfile(harness_id) {
23
+ return {
24
+ harness_id,
25
+ version: "1.0",
26
+ last_updated: new Date().toISOString(),
27
+ samples_total: 0,
28
+ events: [],
29
+ crash_signatures: [],
30
+ recommended: {
31
+ harness_id,
32
+ max_word_bucket: "0-100 words",
33
+ min_idle_wait_seconds: 3,
34
+ slash_command_bundling: "unknown",
35
+ multi_phase_prompting: "unknown",
36
+ notes: "No data yet — using conservative defaults",
37
+ },
38
+ };
39
+ }
40
+ /**
41
+ * Read the local runtime profile for harness_id.
42
+ * Returns null when no profile exists (never throws).
43
+ */
44
+ export function readProfile(harness_id, base = LOCAL_PROFILE_BASE, fsRead = readFileSync, fsExists = existsSync) {
45
+ const path = getProfilePath(harness_id, base);
46
+ if (!fsExists(path))
47
+ return null;
48
+ try {
49
+ return JSON.parse(fsRead(path, "utf8"));
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ /**
56
+ * Append a pacing event to the local runtime profile for the event's harness_id.
57
+ * Creates the profile directory and file if they do not exist.
58
+ * Crash events: adds crash_signature_hash to the profile's crash_signatures list.
59
+ */
60
+ export function appendEvent(event, base = LOCAL_PROFILE_BASE, fsRead = readFileSync, fsExists = existsSync, fsWrite = writeFileSync, fsMkdir = mkdirSync) {
61
+ const dir = join(base, event.harness_id);
62
+ fsMkdir(dir, { recursive: true });
63
+ const existing = readProfile(event.harness_id, base, fsRead, fsExists) ?? buildDefaultProfile(event.harness_id);
64
+ existing.events.push(event);
65
+ existing.samples_total = existing.events.length;
66
+ existing.last_updated = new Date().toISOString();
67
+ if (event.crash_signature_hash &&
68
+ !existing.crash_signatures.includes(event.crash_signature_hash)) {
69
+ existing.crash_signatures.push(event.crash_signature_hash);
70
+ }
71
+ const path = getProfilePath(event.harness_id, base);
72
+ fsWrite(path, JSON.stringify(existing, null, 2), "utf8");
73
+ }
74
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/harness-pacing/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,oFAAoF;AACpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAEzD,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,IAAI,GAAG,kBAAkB;IAC1E,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO;QACL,UAAU;QACV,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,EAAE;QACV,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE;YACX,UAAU;YACV,eAAe,EAAE,aAAa;YAC9B,qBAAqB,EAAE,CAAC;YACxB,sBAAsB,EAAE,SAAS;YACjC,qBAAqB,EAAE,SAAS;YAChC,KAAK,EAAE,2CAA2C;SACnD;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,UAAkB,EAClB,IAAI,GAAG,kBAAkB,EACzB,SAA8B,YAAY,EAC1C,WAA8B,UAAU;IAExC,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW,CAAmB,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,KAAyB,EACzB,IAAI,GAAG,kBAAkB,EACzB,SAA8B,YAAY,EAC1C,WAA8B,UAAU,EACxC,UAAgC,aAAa,EAC7C,UAA4B,SAAS;IAErC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEhH,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAChD,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEjD,IACE,KAAK,CAAC,oBAAoB;QAC1B,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAC/D,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import YAML from "yaml";
3
- import { VERSION, evaluateReadinessGate, exportProtocolSnapshot, getActivationGates, getActiveWatchPacket, getBootReceiptExamples, getBootReceiptSchema, getCloseoutChecklist, getDelegationPacket, getHarnessProbeMatrix, getOnboardingPlan, getRoleProfile, getRuntimeNotice, getStartupPacket, getVersionMetadata, loadProtocolData, validateBootReceipt, validateCmuxDeliveryProof, validateDelegationPacket, validateInstructionReadProof, validateTeamManifest } from "../protocol/service.js";
3
+ import { VERSION, evaluateReadinessGate, exportProtocolSnapshot, getActivationGates, getActiveWatchPacket, getBootReceiptExamples, getBootReceiptSchema, getCloseoutChecklist, getDelegationPacket, getHarnessProbeMatrix, getMissionFrontrunPack, getOnboardingPlan, getRoleCard, getRoleProfile, getRuntimeNotice, getStartupPacket, getVersionMetadata, loadProtocolData, validateBootReceipt, validateCmuxDeliveryProof, validateDelegationPacket, validateInstructionReadProof, validateTeamManifest } from "../protocol/service.js";
4
4
  import { computeSurfaceLayout, computeSurfaceLayoutGate, computeHumanCmuxQuadLayout, renderSurfaceLayoutAscii } from "../protocol/surface-layout.js";
5
5
  import { compileSessionReport, publicTelemetryConfig, readTelemetryConfig, redactPayload, submitSessionReport } from "../telemetry/index.js";
6
- import { bootReceiptInputShape, activeWatchPacketInputShape, closeoutChecklistInputShape, cmuxDeliveryProofInputShape, delegationPacketInputShape, harnessProbeInputShape, instructionReadProofInputShape, onboardingPlanInputShape, recordInputShape, readinessGateInputShape, reportRecordInputSchema, roleProfileInputShape, sessionReportInputShape, submitSessionReportInputSchema, startupPacketInputShape, surfaceLayoutGateInputShape, surfaceLayoutInputShape, teamManifestInputShape } from "../protocol/schemas.js";
6
+ import { bootReceiptInputShape, activeWatchPacketInputShape, closeoutChecklistInputShape, cmuxDeliveryProofInputShape, delegationPacketInputShape, harnessProbeInputShape, instructionReadProofInputShape, missionFrontrunInputShape, onboardingPlanInputShape, recordInputShape, readinessGateInputShape, reportRecordInputSchema, roleCardInputShape, roleProfileInputShape, sessionReportInputShape, submitSessionReportInputSchema, startupPacketInputShape, surfaceLayoutGateInputShape, surfaceLayoutInputShape, teamManifestInputShape } from "../protocol/schemas.js";
7
7
  function jsonText(value) {
8
8
  return {
9
9
  content: [
@@ -28,6 +28,13 @@ function textResource(uri, text, mimeType) {
28
28
  function yamlResource(value) {
29
29
  return YAML.stringify(value);
30
30
  }
31
+ const ROLE_CARD_ID_TO_KEY = {
32
+ "exec-pm": "execPm",
33
+ "team-pm": "teamPm",
34
+ "dev-worker": "devWorker",
35
+ "qa-worker": "qaWorker",
36
+ "exec-asst": "execAsst"
37
+ };
31
38
  function registerProtocolResources(server) {
32
39
  const resources = [
33
40
  {
@@ -142,6 +149,16 @@ function registerProtocolResources(server) {
142
149
  mimeType: resource.mimeType
143
150
  }, (uri) => textResource(uri.href, resource.read(), resource.mimeType));
144
151
  }
152
+ // Role card resources (one per role)
153
+ const roleCardIds = ["exec-pm", "team-pm", "dev-worker", "qa-worker", "exec-asst"];
154
+ for (const role_id of roleCardIds) {
155
+ const cardKey = ROLE_CARD_ID_TO_KEY[role_id];
156
+ server.registerResource(`role-card-${role_id}`, `odin://protocol/role-cards/${role_id}`, {
157
+ title: `SCP Role Card: ${role_id}`,
158
+ description: `Quick-start role card (<=4KB) for the ${role_id} role.`,
159
+ mimeType: "text/markdown"
160
+ }, (uri) => textResource(uri.href, loadProtocolData().roleCards[cardKey], "text/markdown"));
161
+ }
145
162
  }
146
163
  export function createServer() {
147
164
  const server = new McpServer({
@@ -185,6 +202,11 @@ export function createServer() {
185
202
  description: "Return the authority profile for a generic ODIN/SCP role.",
186
203
  inputSchema: roleProfileInputShape
187
204
  }, (input) => jsonText(getRoleProfile(input.role)));
205
+ server.registerTool("odin.get_role_card", {
206
+ title: "Get Role Card",
207
+ description: "Return the quick-start role card for a given SCP role ID. Returns role_id, role_name, version, payload_bytes, content_sha256, and content. Valid role_ids: exec-pm, team-pm, dev-worker, qa-worker, exec-asst.",
208
+ inputSchema: roleCardInputShape
209
+ }, (input) => jsonText(getRoleCard(input.role_id)));
188
210
  server.registerTool("odin.validate_boot_receipt", {
189
211
  title: "Validate Boot Receipt",
190
212
  description: "Check a boot receipt for required ODIN/SCP fields and basic authority warnings.",
@@ -292,6 +314,11 @@ export function createServer() {
292
314
  description: "Submit a redacted session report to the configured telemetry endpoint. Telemetry is disabled by default; this tool returns {submitted: false, reason: ...} unless ODIN_TELEMETRY_ENDPOINT is set. Only invoke after explicit user consent for the current session.",
293
315
  inputSchema: submitSessionReportInputSchema
294
316
  }, async (input) => jsonText(await submitSessionReport(input.report, { userConsentConfirmed: input.userConsentConfirmed === true })));
317
+ server.registerTool("odin.get_mission_frontrun_pack", {
318
+ title: "Get Factory Mission Front-Runner Contract Pack",
319
+ description: "Assemble a Factory Mission governance contract pack using the PROVEN --append-system-prompt-file seam (live-verified 2026-06-12). Returns four role contracts (orchestrator, worker, scrutiny-validator, scrutiny-feature-reviewer), the .factory/droids/scrutiny-feature-reviewer.md file content, a launch command template, a boot_contract_receipt template with all six required fields (role, session_id, contract_path, byte_count, sha256, timestamp), and a notes block distinguishing PROVEN vs UNPROVEN seams. All placeholder tokens ({{WRITE_SCOPE}}, {{TASK_ID}}, {{REPO_PATH}}, {{MISSION_NAME}}) are substituted from input.",
320
+ inputSchema: missionFrontrunInputShape
321
+ }, (input) => jsonText(getMissionFrontrunPack(input)));
295
322
  return server;
296
323
  }
297
324
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,OAAO,EACP,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,8BAA8B,EAC9B,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,EAEvB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACrC;SACF;KACF,CAAC;AACJ,CAAC;AAWD,SAAS,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,QAAgB;IAC/D,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,GAAG;gBACH,QAAQ;gBACR,IAAI;aACL;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,mBAAmB,GAA2E;IAClG,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,UAAU;CACxB,CAAC;AAEF,SAAS,yBAAyB,CAAC,MAAiB;IAClD,MAAM,SAAS,GAAmB;QAChC;YACE,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,sBAAsB;YAC3B,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,QAAQ;SACxC;QACD;YACE,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,4BAA4B;YACjC,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,8DAA8D;YAC3E,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC;SACxD;QACD;YACE,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,+BAA+B;YACpC,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC;SACzD;QACD;YACE,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,wCAAwC;YAC7C,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,8DAA8D;YAC3E,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC;SAC1D;QACD;YACE,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,uBAAuB;YAC5B,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,kDAAkD;YAC/D,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC;SACnD;QACD;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,0BAA0B;YAC/B,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;SACtD;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,gCAAgC;YACrC,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAC3D;QACD;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,0BAA0B;YAC/B,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,kDAAkD;YAC/D,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;SACtD;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,iCAAiC;YACtC,KAAK,EAAE,sCAAsC;YAC7C,WAAW,EACT,yNAAyN;YAC3N,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,cAAc;SAC9C;QACD;YACE,IAAI,EAAE,uCAAuC;YAC7C,GAAG,EAAE,wDAAwD;YAC7D,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE,2FAA2F;YACxG,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,mBAAmB;SACnE;QACD;YACE,IAAI,EAAE,+CAA+C;YACrD,GAAG,EAAE,gEAAgE;YACrE,KAAK,EAAE,mCAAmC;YAC1C,WAAW,EAAE,0FAA0F;YACvG,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,2BAA2B;SAC3E;QACD;YACE,IAAI,EAAE,uCAAuC;YAC7C,GAAG,EAAE,wDAAwD;YAC7D,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE,sEAAsE;YACnF,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,mBAAmB;SACnE;QACD;YACE,IAAI,EAAE,wCAAwC;YAC9C,GAAG,EAAE,yDAAyD;YAC9D,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,+EAA+E;YAC5F,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,oBAAoB;SACpE;KACF,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,gBAAgB,CACrB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,GAAG,EACZ;YACE,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CACpE,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;IAC5F,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,gBAAgB,CACrB,aAAa,OAAO,EAAE,EACtB,8BAA8B,OAAO,EAAE,EACvC;YACE,KAAK,EAAE,kBAAkB,OAAO,EAAE;YAClC,WAAW,EAAE,yCAAyC,OAAO,QAAQ;YACrE,QAAQ,EAAE,eAAe;SAC1B,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CACxF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAElC,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,wRAAwR;QAC1R,WAAW,EAAE,0BAA0B;KACxC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAChD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iCAAiC,EACjC;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,mMAAmM;QACrM,WAAW,EAAE,gBAAgB;KAC9B,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,8CAA8C;KAC5D,EACD,GAAG,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CACrC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,mGAAmG;KACjH,EACD,GAAG,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CACvC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,gFAAgF;KAC9F,EACD,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CACzC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,gFAAgF;KAC9F,EACD,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CACnC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,oEAAoE;QACjF,WAAW,EAAE,uBAAuB;KACrC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE,qBAAqB;KACnC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,gNAAgN;QAClN,WAAW,EAAE,kBAAkB;KAChC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAChD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,iFAAiF;QAC9F,WAAW,EAAE,qBAAqB;KACnC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CACxD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,sBAAsB;KACpC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mCAAmC,EACnC;QACE,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,2SAA2S;QAC7S,WAAW,EAAE,2BAA2B;KACzC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAC5D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sCAAsC,EACtC;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,6SAA6S;QAC/S,WAAW,EAAE,8BAA8B;KAC5C,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAC/D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,maAAma;KACta,EACD,GAAG,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CACrC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,yCAAyC;QAChD,WAAW,EACT,2aAA2a;QAC7a,WAAW,EAAE,uBAAuB;KACrC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAClD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,uIAAuI;QACzI,WAAW,EAAE,2BAA2B;KACzC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CACjD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,0KAA0K;QAC5K,WAAW,EAAE,sBAAsB;KACpC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAClD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,imBAAimB;QACnmB,WAAW,EAAE,wBAAwB;KACtC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,uEAAuE;QACpF,WAAW,EAAE,2BAA2B;KACzC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACtD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,2EAA2E;KACzF,EACD,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAC,CACtE,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,yKAAyK;QAC3K,WAAW,EAAE,uBAAuB;KACrC,EACD,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,iBAAiB,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,KAAK,iBAAiB;YAC1C,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,SAAS,CAAC;YAC7C,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC;YACd,GAAG,MAAM;YACT,KAAK,EAAE,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,qCAAqC;SACtG,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qCAAqC,EACrC;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,+KAA+K;QACjL,WAAW,EAAE,uBAAuB;KACrC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CACjE,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kCAAkC,EAClC;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,yHAAyH;QAC3H,WAAW,EAAE,2BAA2B;KACzC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAC7F,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,6QAA6Q;KAChR,EACD,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,gBAAgB,EAAE,CAAC,cAAc;aACxC;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,+IAA+I;KAClJ,EACD,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAC7D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,+OAA+O;QACjP,WAAW,EAAE,uBAAuB;KACrC,EACD,CAAC,KAAK,EAAE,EAAE,CACR,QAAQ,CAAC,oBAAoB,CAAC,KAA2B,EAAE,OAAO,CAAC,CAAC,CACvE,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kCAAkC,EAClC;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,qKAAqK;QACvK,WAAW,EAAE,uBAAuB;KACrC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,MAAiC,CAAC,CAAC,CAC5E,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,oQAAoQ;QACtQ,WAAW,EAAE,8BAA8B;KAC5C,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,mBAAmB,CAAC,KAAK,CAAC,MAAiC,EAAE,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC,CAAC,CAC7J,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,KAAK,EAAE,gDAAgD;QACvD,WAAW,EACT,8mBAA8mB;QAChnB,WAAW,EAAE,yBAAyB;KACvC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CACnD,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Snapshot, Snapshotter } from "../snapshotter.js";
2
+ export declare class CmuxBackend implements Snapshotter {
3
+ private readonly archiveDir;
4
+ constructor(archiveDir: string);
5
+ capture(pane_id: string): Promise<Snapshot>;
6
+ }
@@ -0,0 +1,39 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdirSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { execFileNoThrow } from "../../utils/execFileNoThrow.js";
5
+ export class CmuxBackend {
6
+ archiveDir;
7
+ constructor(archiveDir) {
8
+ this.archiveDir = archiveDir;
9
+ }
10
+ async capture(pane_id) {
11
+ const result = await execFileNoThrow("cmux", [
12
+ "read-screen",
13
+ "--surface",
14
+ pane_id,
15
+ ]);
16
+ const text = result.status === 0 ? result.stdout : "";
17
+ const ts = Date.now();
18
+ const hash = createHash("sha256").update(text).digest("hex");
19
+ // Archive raw screen text
20
+ try {
21
+ mkdirSync(this.archiveDir, { recursive: true });
22
+ const filename = `${pane_id.replace(/[^a-zA-Z0-9_-]/g, "_")}_${ts}.txt`;
23
+ writeFileSync(join(this.archiveDir, filename), text, {
24
+ encoding: "utf8",
25
+ });
26
+ }
27
+ catch {
28
+ // Archive failure is non-fatal; snapshot still returned
29
+ }
30
+ return {
31
+ pane_id,
32
+ substrate: "cmux",
33
+ text,
34
+ hash,
35
+ ts,
36
+ };
37
+ }
38
+ }
39
+ //# sourceMappingURL=cmux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmux.js","sourceRoot":"","sources":["../../../../src/odin-watch/backends/cmux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,MAAM,OAAO,WAAW;IACL,UAAU,CAAS;IAEpC,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE;YAC3C,aAAa;YACb,WAAW;YACX,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE7D,0BAA0B;QAC1B,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;YACxE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE;gBACnD,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;QAED,OAAO;YACL,OAAO;YACP,SAAS,EAAE,MAAM;YACjB,IAAI;YACJ,IAAI;YACJ,EAAE;SACH,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import type { Snapshot, Snapshotter } from "../snapshotter.js";
2
+ export declare class TmuxBackend implements Snapshotter {
3
+ private readonly archiveDir;
4
+ constructor(archiveDir: string);
5
+ capture(pane_id: string): Promise<Snapshot>;
6
+ }