@agentmeshhq/agent 0.4.6 → 0.4.11

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 (73) hide show
  1. package/dist/__tests__/auth-doctor-integration.test.d.ts +14 -0
  2. package/dist/__tests__/auth-doctor-integration.test.js +130 -0
  3. package/dist/__tests__/auth-doctor-integration.test.js.map +1 -0
  4. package/dist/__tests__/auth-guard.integration.test.d.ts +12 -0
  5. package/dist/__tests__/auth-guard.integration.test.js +132 -0
  6. package/dist/__tests__/auth-guard.integration.test.js.map +1 -0
  7. package/dist/__tests__/auth-guard.test.d.ts +17 -0
  8. package/dist/__tests__/auth-guard.test.js +483 -0
  9. package/dist/__tests__/auth-guard.test.js.map +1 -0
  10. package/dist/__tests__/done-state-guard.integration.test.d.ts +1 -0
  11. package/dist/__tests__/done-state-guard.integration.test.js +281 -0
  12. package/dist/__tests__/done-state-guard.integration.test.js.map +1 -0
  13. package/dist/__tests__/done-state-guard.test.d.ts +1 -0
  14. package/dist/__tests__/done-state-guard.test.js +327 -0
  15. package/dist/__tests__/done-state-guard.test.js.map +1 -0
  16. package/dist/__tests__/registry.register.test.d.ts +8 -0
  17. package/dist/__tests__/registry.register.test.js +109 -0
  18. package/dist/__tests__/registry.register.test.js.map +1 -0
  19. package/dist/__tests__/start-team-id.test.d.ts +9 -0
  20. package/dist/__tests__/start-team-id.test.js +160 -0
  21. package/dist/__tests__/start-team-id.test.js.map +1 -0
  22. package/dist/__tests__/tmux-runtime.test.d.ts +1 -0
  23. package/dist/__tests__/tmux-runtime.test.js +113 -0
  24. package/dist/__tests__/tmux-runtime.test.js.map +1 -0
  25. package/dist/cli/auth.d.ts +11 -0
  26. package/dist/cli/auth.js +92 -0
  27. package/dist/cli/auth.js.map +1 -0
  28. package/dist/cli/index.js +132 -1
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/local.d.ts +4 -2
  31. package/dist/cli/local.js +257 -108
  32. package/dist/cli/local.js.map +1 -1
  33. package/dist/cli/migrate.d.ts +1 -0
  34. package/dist/cli/migrate.js +14 -10
  35. package/dist/cli/migrate.js.map +1 -1
  36. package/dist/cli/start.d.ts +11 -0
  37. package/dist/cli/start.js +46 -24
  38. package/dist/cli/start.js.map +1 -1
  39. package/dist/cli/test.d.ts +1 -0
  40. package/dist/cli/test.js +21 -10
  41. package/dist/cli/test.js.map +1 -1
  42. package/dist/cli/watcher.d.ts +27 -0
  43. package/dist/cli/watcher.js +365 -0
  44. package/dist/cli/watcher.js.map +1 -0
  45. package/dist/config/schema.d.ts +13 -0
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/core/auth-guard.d.ts +155 -0
  48. package/dist/core/auth-guard.js +498 -0
  49. package/dist/core/auth-guard.js.map +1 -0
  50. package/dist/core/auth-sync.d.ts +105 -0
  51. package/dist/core/auth-sync.js +263 -0
  52. package/dist/core/auth-sync.js.map +1 -0
  53. package/dist/core/daemon/context-template.js +65 -0
  54. package/dist/core/daemon/context-template.js.map +1 -1
  55. package/dist/core/daemon/done-state-guard.d.ts +63 -0
  56. package/dist/core/daemon/done-state-guard.js +102 -0
  57. package/dist/core/daemon/done-state-guard.js.map +1 -0
  58. package/dist/core/daemon/tmux-session.d.ts +1 -0
  59. package/dist/core/daemon/tmux-session.js +1 -1
  60. package/dist/core/daemon/tmux-session.js.map +1 -1
  61. package/dist/core/daemon.d.ts +18 -1
  62. package/dist/core/daemon.js +158 -37
  63. package/dist/core/daemon.js.map +1 -1
  64. package/dist/core/registry.d.ts +11 -1
  65. package/dist/core/registry.js +32 -1
  66. package/dist/core/registry.js.map +1 -1
  67. package/dist/core/tmux-runtime.d.ts +11 -2
  68. package/dist/core/tmux-runtime.js +45 -19
  69. package/dist/core/tmux-runtime.js.map +1 -1
  70. package/dist/core/tmux.d.ts +1 -1
  71. package/dist/core/tmux.js +7 -3
  72. package/dist/core/tmux.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,263 @@
1
+ /**
2
+ * OpenCode auth sync — symlink-first strategy.
3
+ *
4
+ * Canonical source: ~/.local/share/opencode/auth.json
5
+ * Per-agent target: ~/.agentmesh/opencode-data/<agent>/opencode/auth.json
6
+ *
7
+ * Strategy (in order):
8
+ * 1. If target is already a correct symlink → no-op.
9
+ * 2. If target is a regular file (stale copy) → backup + replace with symlink.
10
+ * 3. If target does not exist → create symlink.
11
+ * 4. If canonical does not exist → no-op (agent must auth manually).
12
+ *
13
+ * On any symlink creation failure (e.g. cross-device) → fall back to copy.
14
+ */
15
+ import fs from "node:fs";
16
+ import os from "node:os";
17
+ import path from "node:path";
18
+ export const CANONICAL_AUTH_PATH = path.join(os.homedir(), ".local", "share", "opencode", "auth.json");
19
+ /**
20
+ * Returns the per-agent auth.json path for the given agent name.
21
+ * Pass `homeDir` to override os.homedir() — useful for testing.
22
+ */
23
+ export function agentAuthPath(agentName, homeDir = os.homedir()) {
24
+ return path.join(homeDir, ".agentmesh", "opencode-data", agentName, "opencode", "auth.json");
25
+ }
26
+ /**
27
+ * Ensures the per-agent auth.json is a symlink to the canonical source.
28
+ * Safe to call at every agent startup — idempotent.
29
+ *
30
+ * @param agentName - Agent identifier (used to compute per-agent path)
31
+ * @param canonicalPath - Override canonical auth path (default: ~/.local/share/opencode/auth.json)
32
+ * @param homeDir - Override home directory base (default: os.homedir()); useful for tests
33
+ */
34
+ export function ensureAuthLink(agentName, canonicalPath = CANONICAL_AUTH_PATH, homeDir = os.homedir()) {
35
+ const targetPath = agentAuthPath(agentName, homeDir);
36
+ const targetDir = path.dirname(targetPath);
37
+ // Canonical source must exist; nothing to link if not.
38
+ if (!fs.existsSync(canonicalPath)) {
39
+ return {
40
+ action: "no-op",
41
+ message: `Canonical auth not found at ${canonicalPath} — skipping link`,
42
+ ok: false,
43
+ };
44
+ }
45
+ // Ensure parent directory
46
+ if (!fs.existsSync(targetDir)) {
47
+ fs.mkdirSync(targetDir, { recursive: true });
48
+ }
49
+ // Check existing target
50
+ let existingLstat = null;
51
+ try {
52
+ existingLstat = fs.lstatSync(targetPath);
53
+ }
54
+ catch {
55
+ // Does not exist — will create
56
+ }
57
+ if (existingLstat) {
58
+ if (existingLstat.isSymbolicLink()) {
59
+ // Verify it points to the correct canonical path
60
+ const currentTarget = fs.readlinkSync(targetPath);
61
+ if (currentTarget === canonicalPath) {
62
+ return {
63
+ action: "symlink-ok",
64
+ message: `Auth symlink already correct for ${agentName}`,
65
+ ok: true,
66
+ };
67
+ }
68
+ // Points somewhere else — re-link
69
+ fs.unlinkSync(targetPath);
70
+ }
71
+ else if (existingLstat.isFile()) {
72
+ // Regular file (stale copy) — back it up then replace
73
+ const backupPath = `${targetPath}.bak.${Date.now()}`;
74
+ fs.renameSync(targetPath, backupPath);
75
+ }
76
+ else {
77
+ // Unknown (directory, etc.) — remove
78
+ fs.rmSync(targetPath, { recursive: true, force: true });
79
+ }
80
+ }
81
+ // Create symlink (prefer) or copy (fallback)
82
+ try {
83
+ fs.symlinkSync(canonicalPath, targetPath);
84
+ fs.chmodSync(targetPath, 0o600);
85
+ return {
86
+ action: existingLstat?.isFile() ? "symlink-replaced-file" : "symlink-created",
87
+ message: `Auth symlink created for ${agentName} → ${canonicalPath}`,
88
+ ok: true,
89
+ };
90
+ }
91
+ catch (symlinkErr) {
92
+ // Cross-device or permission issue — fall back to copy
93
+ try {
94
+ fs.copyFileSync(canonicalPath, targetPath);
95
+ fs.chmodSync(targetPath, 0o600);
96
+ return {
97
+ action: "copy-fallback",
98
+ message: `Auth copied (symlink failed) for ${agentName}: ${symlinkErr.message}`,
99
+ ok: true,
100
+ };
101
+ }
102
+ catch (copyErr) {
103
+ return {
104
+ action: "no-op",
105
+ message: `Auth sync failed for ${agentName}: ${copyErr.message}`,
106
+ ok: false,
107
+ };
108
+ }
109
+ }
110
+ }
111
+ /**
112
+ * Returns diagnostic status for a single agent's auth link.
113
+ *
114
+ * @param agentName - Agent identifier
115
+ * @param canonicalPath - Override canonical auth path (default: ~/.local/share/opencode/auth.json)
116
+ * @param homeDir - Override home directory base (default: os.homedir()); useful for tests
117
+ */
118
+ export function getAuthLinkStatus(agentName, canonicalPath = CANONICAL_AUTH_PATH, homeDir = os.homedir()) {
119
+ const authPath = agentAuthPath(agentName, homeDir);
120
+ const canonicalExists = fs.existsSync(canonicalPath);
121
+ let exists = false;
122
+ let isSymlink = false;
123
+ let pointsToCanonical = false;
124
+ let symlinkTarget;
125
+ let mtime;
126
+ try {
127
+ const lstat = fs.lstatSync(authPath);
128
+ exists = true;
129
+ isSymlink = lstat.isSymbolicLink();
130
+ mtime = lstat.mtime;
131
+ if (isSymlink) {
132
+ symlinkTarget = fs.readlinkSync(authPath);
133
+ pointsToCanonical = symlinkTarget === canonicalPath;
134
+ }
135
+ }
136
+ catch {
137
+ // Not found
138
+ }
139
+ return {
140
+ agentName,
141
+ authPath,
142
+ exists,
143
+ isSymlink,
144
+ pointsToCanonical,
145
+ canonicalExists,
146
+ symlinkTarget,
147
+ mtime,
148
+ };
149
+ }
150
+ /**
151
+ * Returns the list of agent names that have opencode-data directories.
152
+ *
153
+ * @param homeDir - Override home directory base (default: os.homedir()); useful for tests
154
+ */
155
+ export function listManagedAgents(homeDir = os.homedir()) {
156
+ const dataRoot = path.join(homeDir, ".agentmesh", "opencode-data");
157
+ if (!fs.existsSync(dataRoot))
158
+ return [];
159
+ return fs.readdirSync(dataRoot).filter((name) => {
160
+ try {
161
+ return fs.statSync(path.join(dataRoot, name)).isDirectory();
162
+ }
163
+ catch {
164
+ return false;
165
+ }
166
+ });
167
+ }
168
+ /**
169
+ * Repairs ALL managed agents' auth links.
170
+ * Returns per-agent results.
171
+ *
172
+ * @param canonicalPath - Override canonical auth path (default: ~/.local/share/opencode/auth.json)
173
+ * @param homeDir - Override home directory base (default: os.homedir()); useful for tests
174
+ */
175
+ export function repairAllAuthLinks(canonicalPath = CANONICAL_AUTH_PATH, homeDir = os.homedir()) {
176
+ const agents = listManagedAgents(homeDir);
177
+ return agents.map((agentName) => ensureAuthLink(agentName, canonicalPath, homeDir));
178
+ }
179
+ /**
180
+ * Startup preflight: verify auth is in good shape, auto-repair if not.
181
+ *
182
+ * Does NOT make a live provider API call (that would slow down every startup).
183
+ * It validates:
184
+ * 1. Canonical auth file exists and is readable
185
+ * 2. Per-agent auth link is correct (symlink → canonical or readable copy)
186
+ * 3. Auth JSON has at least one provider entry
187
+ *
188
+ * If link is bad → auto-repair via ensureAuthLink.
189
+ *
190
+ * @param agentName - Agent identifier
191
+ * @param canonicalPath - Override canonical auth path (default: ~/.local/share/opencode/auth.json)
192
+ * @param homeDir - Override home directory base (default: os.homedir()); useful for tests
193
+ */
194
+ export function preflightAuth(agentName, canonicalPath = CANONICAL_AUTH_PATH, homeDir = os.homedir()) {
195
+ // 1. Canonical auth file check
196
+ const canonicalOk = (() => {
197
+ try {
198
+ return fs.existsSync(canonicalPath) && fs.statSync(canonicalPath).isFile();
199
+ }
200
+ catch {
201
+ return false;
202
+ }
203
+ })();
204
+ if (!canonicalOk) {
205
+ return {
206
+ passed: false,
207
+ linkOk: false,
208
+ canonicalOk: false,
209
+ contentOk: false,
210
+ message: `Canonical auth not found at ${canonicalPath}. Run 'opencode auth login' to authenticate.`,
211
+ };
212
+ }
213
+ // 2. Per-agent link check + auto-repair if needed
214
+ const status = getAuthLinkStatus(agentName, canonicalPath, homeDir);
215
+ let linkOk = status.exists && (status.isSymlink ? status.pointsToCanonical : true);
216
+ let repairResult;
217
+ if (!linkOk) {
218
+ repairResult = ensureAuthLink(agentName, canonicalPath, homeDir);
219
+ linkOk = repairResult.ok;
220
+ }
221
+ if (!linkOk) {
222
+ return {
223
+ passed: false,
224
+ linkOk: false,
225
+ canonicalOk,
226
+ contentOk: false,
227
+ repairResult,
228
+ message: `Auth link repair failed for ${agentName}: ${repairResult?.message ?? "unknown error"}`,
229
+ };
230
+ }
231
+ // 3. Content validity check (parse canonical; must have at least one provider key)
232
+ const contentOk = (() => {
233
+ try {
234
+ const raw = fs.readFileSync(canonicalPath, "utf-8");
235
+ const parsed = JSON.parse(raw);
236
+ return Object.keys(parsed).length > 0;
237
+ }
238
+ catch {
239
+ return false;
240
+ }
241
+ })();
242
+ if (!contentOk) {
243
+ return {
244
+ passed: false,
245
+ linkOk,
246
+ canonicalOk,
247
+ contentOk: false,
248
+ repairResult,
249
+ message: `Auth file at ${canonicalPath} is empty or malformed. Run 'opencode auth login' to re-authenticate.`,
250
+ };
251
+ }
252
+ return {
253
+ passed: true,
254
+ linkOk,
255
+ canonicalOk,
256
+ contentOk,
257
+ repairResult,
258
+ message: repairResult
259
+ ? `Auth preflight passed (repair applied: ${repairResult.action})`
260
+ : "Auth preflight passed",
261
+ };
262
+ }
263
+ //# sourceMappingURL=auth-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-sync.js","sourceRoot":"","sources":["../../src/core/auth-sync.ts"],"names":[],"mappings":"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"}
@@ -101,6 +101,71 @@ export function generateClaudeMd(onboard, options) {
101
101
  lines.push(onboard.project.instructions);
102
102
  lines.push("");
103
103
  }
104
+ // ── CLI Reference ────────────────────────────────────────────────
105
+ lines.push("## AgentMesh CLI");
106
+ lines.push("");
107
+ lines.push("Your primary tool. Use `agentmesh --help` for the full command list.");
108
+ lines.push("");
109
+ lines.push("| Command | What it does |");
110
+ lines.push("|---------|-------------|");
111
+ lines.push("| `agentmesh whoami` | Your identity and registration status |");
112
+ lines.push("| `agentmesh status` | Hub connectivity and agent health |");
113
+ lines.push("| `agentmesh inbox` | Show pending handoffs |");
114
+ lines.push("| `agentmesh handoff accept/complete/reject <id>` | Manage handoff lifecycle |");
115
+ lines.push("| `agentmesh claims create/list/release` | File-path coordination locks |");
116
+ lines.push("| `agentmesh token` | Show, refresh, or inspect your JWT token |");
117
+ lines.push("| `agentmesh logs <name>` | View agent session logs |");
118
+ lines.push("| `agentmesh attach <name>` | Attach to agent's tmux session |");
119
+ lines.push("| `agentmesh restart <name>` | Restart agent (preserves ID and model) |");
120
+ lines.push("| `agentmesh nudge <name> <msg>` | Send a message to a running agent |");
121
+ lines.push("| `agentmesh ready` | Show available unassigned work |");
122
+ lines.push("");
123
+ // ── Daemon ────────────────────────────────────────────────────────
124
+ lines.push("## How the daemon works");
125
+ lines.push("");
126
+ lines.push("When you run `agentmesh start`, the daemon:");
127
+ lines.push("1. Registers with the hub (or re-attaches if already registered)");
128
+ lines.push("2. Rewrites this CLAUDE.md with your identity, team, and token");
129
+ lines.push("3. Opens a tmux session running opencode");
130
+ lines.push("4. Sends a heartbeat to the hub every 8 seconds to stay `online`");
131
+ lines.push("5. Listens for incoming handoffs over WebSocket");
132
+ lines.push("6. In `--worker` mode: auto-accepts handoffs and manages the work cycle");
133
+ lines.push("");
134
+ lines.push("**Heartbeat thresholds:** idle >10s · stale >45s · evicted >120s · deleted >12h");
135
+ lines.push("If deleted, re-register before sending handoffs (see Token section above).");
136
+ lines.push("");
137
+ // ── Skills Reference ──────────────────────────────────────────────
138
+ lines.push("## Available Skills");
139
+ lines.push("");
140
+ lines.push("Load these when you need them — not loaded automatically:");
141
+ lines.push("");
142
+ lines.push("| Skill | When to load |");
143
+ lines.push("|-------|-------------|");
144
+ lines.push("| `agentmesh-testing` | Before running any tests |");
145
+ lines.push("| `agentmesh-pr-merge` | Before merging a PR |");
146
+ lines.push("| `agentmesh-git-workflow` | For branching strategy and session completion |");
147
+ lines.push("| `agentmesh-migrations` | Before touching database schema |");
148
+ lines.push("| `agentmesh-deploy` | Before deploying to any environment |");
149
+ lines.push("| `agentmesh-docker` | For Docker build patterns |");
150
+ lines.push("| `agentmesh-agent-ops` | For agent registration and handoffs |");
151
+ lines.push("| `agentmesh-local-dev` | For local development environment setup |");
152
+ lines.push("| `agentmesh-concierge` | For Concierge container management |");
153
+ lines.push("| `vault-secrets` | For accessing secrets from Vault |");
154
+ lines.push("");
155
+ // ── Key Docs ──────────────────────────────────────────────────────
156
+ lines.push("## Key docs");
157
+ lines.push("");
158
+ lines.push("| Doc | What it covers |");
159
+ lines.push("|-----|---------------|");
160
+ lines.push("| `docs/TESTING.md` | Full test guide — all levels, ports, diagnosis |");
161
+ lines.push("| `docs/INFRASTRUCTURE.md` | All environments, server access, DBs, Valkey, registry, deploy pipeline |");
162
+ lines.push("| `docs/AGENT_TOKENS.md` | Token lifecycle in full detail |");
163
+ lines.push("| `docs/LOCAL_DEVELOPMENT.md` | Local dev environment setup |");
164
+ lines.push("| `docs/ENVIRONMENTS.md` | dev / staging / prod definitions |");
165
+ lines.push("| `docs/CI-CD-PIPELINE.md` | CI/CD architecture |");
166
+ lines.push("| `docs/TMUX_MESSAGE_DELIVERY.md` | Required tmux message delivery protocol |");
167
+ lines.push("| `AGENT_API_GUIDE.md` | Full Hub API reference |");
168
+ lines.push("");
104
169
  // ── Footer ────────────────────────────────────────────────────────
105
170
  lines.push("---");
106
171
  lines.push(`*Generated at ${new Date().toISOString()} by AgentMesh*`);
@@ -1 +1 @@
1
- {"version":3,"file":"context-template.js","sourceRoot":"","sources":["../../../src/core/daemon/context-template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,UAAU,gBAAgB,CAAC,OAAoB,EAAE,OAAyB;IAC9E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,yEAAyE;IACzE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,yEAAyE;IACzE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,qEAAqE;QACrE,MAAM,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,aAAa,IAAI,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,oBAAoB,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CACR,6BAA6B,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,CACtH,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,sEAAsE;IACtE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,uCAAuC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,MAAM,IAAI,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxF,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,qEAAqE;IACrE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,QAAQ,yBAAyB,CAAC,CAAC,cAAc,IAAI,SAAS,IAAI,CAC9F,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,IAAI,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,OAAO,GAKR;IACC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3D,oCAAoC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,MAAM,UAAU,GACd,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,gBAAgB,KAAK,EAAE;gBACxD,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,eAAe,CAAC;YACtB,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"context-template.js","sourceRoot":"","sources":["../../../src/core/daemon/context-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Done-State Guard — Epic #497: Restart Continuity
3
+ *
4
+ * Determines whether a restarting agent should resume its prior work or come up idle.
5
+ *
6
+ * ## Rules (from epic acceptance criteria)
7
+ * - If prior work is DONE → restart must remain `idle-awaiting-assignment`
8
+ * - Resume is only allowed when a task is `in_progress` with a valid active claim
9
+ *
10
+ * ## Definition of "done" (any true):
11
+ * 1. Agent has no active claims owned by it
12
+ * 2. The relevant handoff(s) are completed / rejected / superseded
13
+ * 3. The last inbox is empty after filtering out completed items
14
+ *
15
+ * ## Emitted lifecycle events (structured log):
16
+ * `[RESTART] state=resumed reason=<reason>`
17
+ * `[RESTART] state=idle reason=<reason>`
18
+ * `[RESTART] state=blocked reason=<reason>`
19
+ */
20
+ import type { ClaimRecord, HandoffRecord, InboxItem } from "../registry.js";
21
+ export type RestartState = "resumed" | "idle" | "blocked";
22
+ export interface RestartDecision {
23
+ state: RestartState;
24
+ reason: string;
25
+ }
26
+ export interface DoneStateInput {
27
+ /** All active claims owned by THIS agent (pre-filtered by agent_id & status=active) */
28
+ activeClaims: ClaimRecord[];
29
+ /** All inbox items currently pending for this agent */
30
+ inboxItems: InboxItem[];
31
+ /** Recently completed / rejected handoffs that were owned by this agent */
32
+ completedHandoffs: HandoffRecord[];
33
+ /** Whether automation is currently paused */
34
+ automationPaused?: boolean;
35
+ }
36
+ /**
37
+ * Evaluates whether a restarting agent should resume or stay idle.
38
+ *
39
+ * This is a pure function — no side-effects, fully testable.
40
+ *
41
+ * @param input - Snapshot of claims, inbox and recent handoff history at restart time
42
+ * @returns A RestartDecision with state and human-readable reason
43
+ */
44
+ export declare function evaluateRestartState(input: DoneStateInput): RestartDecision;
45
+ /**
46
+ * Returns true when the prior work cycle is definitively done.
47
+ * Convenience wrapper around evaluateRestartState.
48
+ */
49
+ export declare function isPriorWorkDone(input: DoneStateInput): boolean;
50
+ /**
51
+ * Formats a structured log line for the restart lifecycle event.
52
+ * Pattern: `[RESTART] state=<state> reason=<reason>`
53
+ */
54
+ export declare function formatRestartLifecycleLog(decision: RestartDecision): string;
55
+ /**
56
+ * Filters a list of claims to only those actively owned by the given agent.
57
+ */
58
+ export declare function filterActiveClaimsForAgent(claims: ClaimRecord[], agentId: string): ClaimRecord[];
59
+ /**
60
+ * Filters handoffs to those that are definitively done (completed or rejected)
61
+ * and were sent TO this agent (i.e. work that belonged to this agent).
62
+ */
63
+ export declare function filterCompletedHandoffsForAgent(handoffs: HandoffRecord[], agentId: string): HandoffRecord[];
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Done-State Guard — Epic #497: Restart Continuity
3
+ *
4
+ * Determines whether a restarting agent should resume its prior work or come up idle.
5
+ *
6
+ * ## Rules (from epic acceptance criteria)
7
+ * - If prior work is DONE → restart must remain `idle-awaiting-assignment`
8
+ * - Resume is only allowed when a task is `in_progress` with a valid active claim
9
+ *
10
+ * ## Definition of "done" (any true):
11
+ * 1. Agent has no active claims owned by it
12
+ * 2. The relevant handoff(s) are completed / rejected / superseded
13
+ * 3. The last inbox is empty after filtering out completed items
14
+ *
15
+ * ## Emitted lifecycle events (structured log):
16
+ * `[RESTART] state=resumed reason=<reason>`
17
+ * `[RESTART] state=idle reason=<reason>`
18
+ * `[RESTART] state=blocked reason=<reason>`
19
+ */
20
+ // ---------------------------------------------------------------------------
21
+ // Core guard
22
+ // ---------------------------------------------------------------------------
23
+ /**
24
+ * Evaluates whether a restarting agent should resume or stay idle.
25
+ *
26
+ * This is a pure function — no side-effects, fully testable.
27
+ *
28
+ * @param input - Snapshot of claims, inbox and recent handoff history at restart time
29
+ * @returns A RestartDecision with state and human-readable reason
30
+ */
31
+ export function evaluateRestartState(input) {
32
+ const { activeClaims, inboxItems, completedHandoffs, automationPaused } = input;
33
+ // --- BLOCKED: automation is paused ---
34
+ if (automationPaused) {
35
+ return {
36
+ state: "blocked",
37
+ reason: "automation is paused; waiting for operator to resume",
38
+ };
39
+ }
40
+ // --- IDLE: no active claims → nothing in-flight to resume ---
41
+ if (activeClaims.length === 0) {
42
+ // Extra check: if there are ONLY completed/rejected handoffs (no pending inbox),
43
+ // this confirms the previous cycle is done.
44
+ const hasPendingWork = inboxItems.some((item) => item.status === "pending");
45
+ if (!hasPendingWork) {
46
+ if (completedHandoffs.length > 0) {
47
+ return {
48
+ state: "idle",
49
+ reason: `prior cycle is done (${completedHandoffs.length} completed handoff(s), no active claims, no pending inbox)`,
50
+ };
51
+ }
52
+ return {
53
+ state: "idle",
54
+ reason: "no active claims and no pending work; awaiting new assignment",
55
+ };
56
+ }
57
+ // There are pending inbox items but no claims — treat as idle (agent will
58
+ // auto-accept them fresh on startup rather than resuming stale state).
59
+ return {
60
+ state: "idle",
61
+ reason: "pending inbox items present but no active claim; will accept fresh on startup",
62
+ };
63
+ }
64
+ // --- RESUMED: active claims exist → prior work is still in-flight ---
65
+ const claimSummary = activeClaims.map((c) => c.scope).join(", ");
66
+ return {
67
+ state: "resumed",
68
+ reason: `active claim(s) found: ${claimSummary}`,
69
+ };
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Helpers
73
+ // ---------------------------------------------------------------------------
74
+ /**
75
+ * Returns true when the prior work cycle is definitively done.
76
+ * Convenience wrapper around evaluateRestartState.
77
+ */
78
+ export function isPriorWorkDone(input) {
79
+ const decision = evaluateRestartState(input);
80
+ return decision.state === "idle";
81
+ }
82
+ /**
83
+ * Formats a structured log line for the restart lifecycle event.
84
+ * Pattern: `[RESTART] state=<state> reason=<reason>`
85
+ */
86
+ export function formatRestartLifecycleLog(decision) {
87
+ return `[RESTART] state=${decision.state} reason=${decision.reason}`;
88
+ }
89
+ /**
90
+ * Filters a list of claims to only those actively owned by the given agent.
91
+ */
92
+ export function filterActiveClaimsForAgent(claims, agentId) {
93
+ return claims.filter((claim) => claim.status === "active" && claim.agent_id === agentId);
94
+ }
95
+ /**
96
+ * Filters handoffs to those that are definitively done (completed or rejected)
97
+ * and were sent TO this agent (i.e. work that belonged to this agent).
98
+ */
99
+ export function filterCompletedHandoffsForAgent(handoffs, agentId) {
100
+ return handoffs.filter((h) => h.to_agent_id === agentId && (h.status === "completed" || h.status === "rejected"));
101
+ }
102
+ //# sourceMappingURL=done-state-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"done-state-guard.js","sourceRoot":"","sources":["../../../src/core/daemon/done-state-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA0BH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAqB;IACxD,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAEhF,wCAAwC;IACxC,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sDAAsD;SAC/D,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,iFAAiF;QACjF,4CAA4C;QAC5C,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAE5E,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO;oBACL,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,wBAAwB,iBAAiB,CAAC,MAAM,4DAA4D;iBACrH,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,+DAA+D;aACxE,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO;YACL,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,+EAA+E;SACxF,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,0BAA0B,YAAY,EAAE;KACjD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAqB;IACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAyB;IACjE,OAAO,mBAAmB,QAAQ,CAAC,KAAK,WAAW,QAAQ,CAAC,MAAM,EAAE,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAqB,EAAE,OAAe;IAC/E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAC7C,QAAyB,EACzB,OAAe;IAEf,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAC1F,CAAC;AACJ,CAAC"}
@@ -6,6 +6,7 @@ export interface StartTmuxSessionInput {
6
6
  workdir?: string;
7
7
  runnerEnv: SessionEnv;
8
8
  shouldRestoreContext: boolean;
9
+ autonomous?: boolean;
9
10
  }
10
11
  export interface StartTmuxSessionResult {
11
12
  preStartSessionId?: string | null;
@@ -18,7 +18,7 @@ export function startTmuxRuntimeSession(input) {
18
18
  }
19
19
  const preStartSessionId = snapshotSessionId(input.agentName);
20
20
  console.log(`Creating tmux session: ${sessionName}`);
21
- const created = createSession(input.agentName, input.command, input.workdir, input.runnerEnv, savedSessionId);
21
+ const created = createSession(input.agentName, input.command, input.workdir, input.runnerEnv, savedSessionId, input.autonomous);
22
22
  if (!created) {
23
23
  throw new Error("Failed to create tmux session");
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tmux-session.js","sourceRoot":"","sources":["../../../src/core/daemon/tmux-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,aAAa,EACb,cAAc,EAEd,aAAa,EACb,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAgBpB;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA4B;IAClE,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,cAAkC,CAAC;QAEvC,IAAI,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChD,cAAc,GAAG,YAAY,EAAE,MAAM,EAAE,iBAAuC,CAAC;YAC/E,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,8CAA8C,cAAc,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,aAAa,CAC3B,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,EACf,cAAc,CACf,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO;YACL,iBAAiB;YACjB,wBAAwB,EAAE,cAAc;SACzC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;IAChE,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3D,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"tmux-session.js","sourceRoot":"","sources":["../../../src/core/daemon/tmux-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,aAAa,EACb,cAAc,EAEd,aAAa,EACb,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAiBpB;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA4B;IAClE,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,cAAkC,CAAC;QAEvC,IAAI,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChD,cAAc,GAAG,YAAY,EAAE,MAAM,EAAE,iBAAuC,CAAC;YAC/E,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,8CAA8C,cAAc,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,aAAa,CAC3B,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,EACf,cAAc,EACd,KAAK,CAAC,UAAU,CACjB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO;YACL,iBAAiB;YACjB,wBAAwB,EAAE,cAAc;SACzC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;IAChE,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3D,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -28,6 +28,10 @@ export interface DaemonOptions {
28
28
  role?: string;
29
29
  /** Auto-accept pending handoffs in worker mode (default: enabled for --worker) */
30
30
  autoAcceptHandoffs?: boolean;
31
+ /** Run agent in fully autonomous mode — injects runtime-specific non-interactive flags */
32
+ autonomous?: boolean;
33
+ /** Team ID to register this worker agent with (required for --worker) */
34
+ teamId?: string;
31
35
  }
32
36
  export declare class AgentDaemon {
33
37
  private agentName;
@@ -55,18 +59,21 @@ export declare class AgentDaemon {
55
59
  private projectCode;
56
60
  private projectRole;
57
61
  private autoAcceptHandoffs;
62
+ private autonomous;
58
63
  private healthCheckInterval;
59
64
  private stopCleanupScheduler;
65
+ private authHealthWatcher;
60
66
  private _preStartSessionId;
61
67
  private _attemptedResumeSessionId;
62
68
  private stuckSince;
63
- private nudgeSentAt;
64
69
  private lastPendingHandoffAlertAt;
65
70
  private remoteAutomationPaused;
66
71
  private lastAutonomyPolicyFetchAt;
72
+ private teamId;
67
73
  private pendingClaimCreations;
68
74
  private sessionRecoveryAttempts;
69
75
  private lastSessionRecoveryAt;
76
+ private initialInboxCheckComplete;
70
77
  constructor(options: DaemonOptions);
71
78
  start(): Promise<void>;
72
79
  /**
@@ -76,6 +83,7 @@ export declare class AgentDaemon {
76
83
  private autoAcceptPendingHandoffs;
77
84
  private autoAcceptHandoffFromEvent;
78
85
  private isAutomationPaused;
86
+ private sweepInboxOnWebSocketConnect;
79
87
  private refreshRemoteAutonomyPolicy;
80
88
  private acceptHandoffWithRetry;
81
89
  private checkPendingHandoffSla;
@@ -118,6 +126,15 @@ export declare class AgentDaemon {
118
126
  * Resolves workdir from --project flag: looks up project by code, clones repo, self-assigns.
119
127
  */
120
128
  private resolveProjectWorkdir;
129
+ /**
130
+ * Evaluates whether this restart should resume in-flight work or come up idle.
131
+ *
132
+ * Pulls claims, inbox, and recent handoff history from HQ, then delegates to
133
+ * the pure `evaluateRestartState` function for the actual decision.
134
+ *
135
+ * Failures are non-fatal — defaults to `idle` so we fail safe.
136
+ */
137
+ private evaluateDoneStateGuard;
121
138
  /**
122
139
  * Fetches assignments from HQ and validates workdir setup
123
140
  * Uses project.workdir from HQ as source of truth, falls back to helpful instructions