baxian 1.2.24 → 1.2.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/bootstrap-poller.d.ts.map +1 -1
- package/dist/agent/bootstrap-poller.js +0 -11
- package/dist/agent/bootstrap-poller.js.map +1 -1
- package/dist/agent/bootstrap.d.ts.map +1 -1
- package/dist/agent/bootstrap.js +0 -42
- package/dist/agent/bootstrap.js.map +1 -1
- package/dist/agent/diff-split.d.ts.map +1 -1
- package/dist/agent/diff-split.js +0 -4
- package/dist/agent/diff-split.js.map +1 -1
- package/dist/agent/image-input.d.ts.map +1 -1
- package/dist/agent/image-input.js +0 -3
- package/dist/agent/image-input.js.map +1 -1
- package/dist/agent/liveness.d.ts.map +1 -1
- package/dist/agent/liveness.js +0 -3
- package/dist/agent/liveness.js.map +1 -1
- package/dist/agent/manager.d.ts +0 -4
- package/dist/agent/manager.d.ts.map +1 -1
- package/dist/agent/manager.js +9 -951
- package/dist/agent/manager.js.map +1 -1
- package/dist/agent/pane-streamer-manager.d.ts.map +1 -1
- package/dist/agent/pane-streamer-manager.js +0 -9
- package/dist/agent/pane-streamer-manager.js.map +1 -1
- package/dist/agent/pane-streamer.d.ts.map +1 -1
- package/dist/agent/pane-streamer.js +2 -27
- package/dist/agent/pane-streamer.js.map +1 -1
- package/dist/agent/pet-input.d.ts.map +1 -1
- package/dist/agent/pet-input.js +0 -3
- package/dist/agent/pet-input.js.map +1 -1
- package/dist/agent/phase-signal-watcher.d.ts +0 -6
- package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
- package/dist/agent/phase-signal-watcher.js +0 -41
- package/dist/agent/phase-signal-watcher.js.map +1 -1
- package/dist/agent/phase-signal.d.ts.map +1 -1
- package/dist/agent/phase-signal.js +1 -18
- package/dist/agent/phase-signal.js.map +1 -1
- package/dist/agent/preflight.d.ts.map +1 -1
- package/dist/agent/preflight.js +0 -12
- package/dist/agent/preflight.js.map +1 -1
- package/dist/agent/prompt.d.ts +0 -4
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +0 -66
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/repo-store.d.ts.map +1 -1
- package/dist/agent/repo-store.js +0 -21
- package/dist/agent/repo-store.js.map +1 -1
- package/dist/agent/review-transport.d.ts +0 -1
- package/dist/agent/review-transport.d.ts.map +1 -1
- package/dist/agent/review-transport.js +0 -16
- package/dist/agent/review-transport.js.map +1 -1
- package/dist/agent/runner.d.ts +0 -3
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +0 -40
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/tmux-probe-poller.d.ts.map +1 -1
- package/dist/agent/tmux-probe-poller.js +1 -20
- package/dist/agent/tmux-probe-poller.js.map +1 -1
- package/dist/agent/tmux.d.ts +0 -1
- package/dist/agent/tmux.d.ts.map +1 -1
- package/dist/agent/tmux.js +6 -45
- package/dist/agent/tmux.js.map +1 -1
- package/dist/agent/worktree.d.ts.map +1 -1
- package/dist/agent/worktree.js +0 -9
- package/dist/agent/worktree.js.map +1 -1
- package/dist/api/agents.d.ts.map +1 -1
- package/dist/api/agents.js +0 -5
- package/dist/api/agents.js.map +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +0 -16
- package/dist/api/config.js.map +1 -1
- package/dist/api/hosts.d.ts.map +1 -1
- package/dist/api/hosts.js +0 -37
- package/dist/api/hosts.js.map +1 -1
- package/dist/api/pets.d.ts.map +1 -1
- package/dist/api/pets.js +0 -5
- package/dist/api/pets.js.map +1 -1
- package/dist/api/probe.d.ts.map +1 -1
- package/dist/api/probe.js +0 -5
- package/dist/api/probe.js.map +1 -1
- package/dist/api/projects.d.ts.map +1 -1
- package/dist/api/projects.js +0 -40
- package/dist/api/projects.js.map +1 -1
- package/dist/api/tasks.d.ts.map +1 -1
- package/dist/api/tasks.js +0 -14
- package/dist/api/tasks.js.map +1 -1
- package/dist/app.d.ts +0 -3
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +0 -14
- package/dist/app.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +0 -13
- package/dist/cli.js.map +1 -1
- package/dist/config/hot-reload.d.ts.map +1 -1
- package/dist/config/hot-reload.js +0 -3
- package/dist/config/hot-reload.js.map +1 -1
- package/dist/config/loader.d.ts +0 -27
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +0 -56
- package/dist/config/loader.js.map +1 -1
- package/dist/config/normalizer.js +0 -1
- package/dist/config/normalizer.js.map +1 -1
- package/dist/config/validator.d.ts.map +1 -1
- package/dist/config/validator.js +0 -16
- package/dist/config/validator.js.map +1 -1
- package/dist/event/broker.d.ts.map +1 -1
- package/dist/event/broker.js +0 -2
- package/dist/event/broker.js.map +1 -1
- package/dist/event/bus.d.ts.map +1 -1
- package/dist/event/bus.js +0 -2
- package/dist/event/bus.js.map +1 -1
- package/dist/event/handlers.d.ts.map +1 -1
- package/dist/event/handlers.js +2 -150
- package/dist/event/handlers.js.map +1 -1
- package/dist/event/publish.d.ts.map +1 -1
- package/dist/event/publish.js +0 -8
- package/dist/event/publish.js.map +1 -1
- package/dist/event/server-handlers.d.ts.map +1 -1
- package/dist/event/server-handlers.js +0 -80
- package/dist/event/server-handlers.js.map +1 -1
- package/dist/event/ws.d.ts.map +1 -1
- package/dist/event/ws.js +0 -5
- package/dist/event/ws.js.map +1 -1
- package/dist/github/mapper.d.ts.map +1 -1
- package/dist/github/mapper.js +0 -13
- package/dist/github/mapper.js.map +1 -1
- package/dist/github/poller.d.ts.map +1 -1
- package/dist/github/poller.js +0 -15
- package/dist/github/poller.js.map +1 -1
- package/dist/github/resolver.d.ts.map +1 -1
- package/dist/github/resolver.js +0 -1
- package/dist/github/resolver.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -26
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/restart-sentinel.d.ts.map +1 -1
- package/dist/lifecycle/restart-sentinel.js +0 -1
- package/dist/lifecycle/restart-sentinel.js.map +1 -1
- package/dist/lifecycle/restart.d.ts +0 -1
- package/dist/lifecycle/restart.d.ts.map +1 -1
- package/dist/lifecycle/restart.js +0 -3
- package/dist/lifecycle/restart.js.map +1 -1
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +0 -19
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/git-url.d.ts +0 -2
- package/dist/shared/git-url.d.ts.map +1 -1
- package/dist/shared/git-url.js +0 -21
- package/dist/shared/git-url.js.map +1 -1
- package/dist/shared/types.d.ts +0 -54
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/skill/registry.d.ts.map +1 -1
- package/dist/skill/registry.js +3 -25
- package/dist/skill/registry.js.map +1 -1
- package/dist/state/agent-store.d.ts +0 -1
- package/dist/state/agent-store.d.ts.map +1 -1
- package/dist/state/agent-store.js +0 -5
- package/dist/state/agent-store.js.map +1 -1
- package/dist/state/error-record-store.d.ts.map +1 -1
- package/dist/state/error-record-store.js +1 -27
- package/dist/state/error-record-store.js.map +1 -1
- package/dist/state/lock.d.ts.map +1 -1
- package/dist/state/lock.js +1 -6
- package/dist/state/lock.js.map +1 -1
- package/dist/state/pet-store.d.ts.map +1 -1
- package/dist/state/pet-store.js +0 -10
- package/dist/state/pet-store.js.map +1 -1
- package/dist/state/post-approve-store.d.ts.map +1 -1
- package/dist/state/post-approve-store.js +0 -1
- package/dist/state/post-approve-store.js.map +1 -1
- package/dist/state/process-lock.d.ts +0 -2
- package/dist/state/process-lock.d.ts.map +1 -1
- package/dist/state/process-lock.js +0 -5
- package/dist/state/process-lock.js.map +1 -1
- package/dist/state/review-store.d.ts.map +1 -1
- package/dist/state/review-store.js +0 -3
- package/dist/state/review-store.js.map +1 -1
- package/dist/state/snapshot.d.ts.map +1 -1
- package/dist/state/snapshot.js +0 -19
- package/dist/state/snapshot.js.map +1 -1
- package/dist/state/task-store.d.ts.map +1 -1
- package/dist/state/task-store.js +0 -4
- package/dist/state/task-store.js.map +1 -1
- package/dist/terminal/attach.d.ts.map +1 -1
- package/dist/terminal/attach.js +0 -12
- package/dist/terminal/attach.js.map +1 -1
- package/dist/terminal/key-sanitizer.d.ts.map +1 -1
- package/dist/terminal/key-sanitizer.js +0 -2
- package/dist/terminal/key-sanitizer.js.map +1 -1
- package/dist/terminal/stream-ws.d.ts.map +1 -1
- package/dist/terminal/stream-ws.js +0 -5
- package/dist/terminal/stream-ws.js.map +1 -1
- package/dist/timing/backoff.d.ts.map +1 -1
- package/dist/timing/backoff.js.map +1 -1
- package/dist/web/assets/index-BFsxrk2C.js +7 -0
- package/dist/web/assets/{index-CHAb8Mrm.css → index-DvVOHfHm.css} +1 -1
- package/dist/web/assets/{router-D24GsdXZ.js → router-BgSDZqI0.js} +1 -1
- package/dist/web/index.html +3 -3
- package/package.json +2 -2
- package/dist/web/assets/index-B3nBJsTG.js +0 -4
package/dist/skill/registry.js
CHANGED
|
@@ -10,7 +10,6 @@ export class SkillScanError extends Error {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
const MAX_SKILL_FILE_BYTES = 100 * 1024;
|
|
13
|
-
// XML 1.0 illegal control chars (tab/LF/CR valid; everything else in 0x00-0x1F is not).
|
|
14
13
|
const ILLEGAL_XML = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\uFFFE\uFFFF]/u;
|
|
15
14
|
const utf8Strict = new TextDecoder('utf-8', { fatal: true });
|
|
16
15
|
function decodeStrictUtf8(path, buf) {
|
|
@@ -30,8 +29,6 @@ function decodeStrictUtf8(path, buf) {
|
|
|
30
29
|
}
|
|
31
30
|
return text;
|
|
32
31
|
}
|
|
33
|
-
// Narrow frontmatter parser: pulls a single-line `description: <value>` from the
|
|
34
|
-
// leading `---\n...\n---` block. Avoids a full YAML dependency.
|
|
35
32
|
function parseSkillDescription(content) {
|
|
36
33
|
if (!content.startsWith('---\n'))
|
|
37
34
|
return firstParagraph(content);
|
|
@@ -80,10 +77,8 @@ async function walk(dir, base = dir) {
|
|
|
80
77
|
s = await lstat(entryPath);
|
|
81
78
|
}
|
|
82
79
|
catch {
|
|
83
|
-
continue;
|
|
80
|
+
continue;
|
|
84
81
|
}
|
|
85
|
-
// lstat, not stat: our skills are regular files only — a symlink/special
|
|
86
|
-
// file isn't ours, so skip it rather than follow it out of the tree.
|
|
87
82
|
if (s.isDirectory()) {
|
|
88
83
|
out.push(...(await walk(entryPath, base)));
|
|
89
84
|
}
|
|
@@ -102,7 +97,6 @@ async function walk(dir, base = dir) {
|
|
|
102
97
|
export class SkillRegistry {
|
|
103
98
|
skillsDir;
|
|
104
99
|
skills = new Map();
|
|
105
|
-
// skillsDir holds the package-shipped skills (npm packaging puts them next to dist).
|
|
106
100
|
constructor(skillsDir) {
|
|
107
101
|
this.skillsDir = skillsDir;
|
|
108
102
|
}
|
|
@@ -124,9 +118,8 @@ export class SkillRegistry {
|
|
|
124
118
|
s = await lstat(entryPath);
|
|
125
119
|
}
|
|
126
120
|
catch {
|
|
127
|
-
continue;
|
|
121
|
+
continue;
|
|
128
122
|
}
|
|
129
|
-
// lstat skips a symlinked dir too: a skill dir must be a real directory we own.
|
|
130
123
|
if (!s.isDirectory())
|
|
131
124
|
continue;
|
|
132
125
|
const skillFile = join(entryPath, 'SKILL.md');
|
|
@@ -135,11 +128,8 @@ export class SkillRegistry {
|
|
|
135
128
|
skillStat = await lstat(skillFile);
|
|
136
129
|
}
|
|
137
130
|
catch {
|
|
138
|
-
continue;
|
|
131
|
+
continue;
|
|
139
132
|
}
|
|
140
|
-
// SKILL.md must be a real file we own. A symlink would register the skill
|
|
141
|
-
// (readFile follows it) while walk() skips it, so materialize() never writes
|
|
142
|
-
// it out — a registered-but-unmaterialized skill the agent can't discover.
|
|
143
133
|
if (!skillStat.isFile())
|
|
144
134
|
continue;
|
|
145
135
|
let skillBuf;
|
|
@@ -179,10 +169,6 @@ export class SkillRegistry {
|
|
|
179
169
|
return [];
|
|
180
170
|
return phaseConfig.skills.filter((name) => this.skills.has(name));
|
|
181
171
|
}
|
|
182
|
-
// Write every scanned skill (SKILL.md + helper files) under destRoot/<name>/<relPath>
|
|
183
|
-
// so the agent host's `claude`/`codex` REPL discovers them as native skills. `write`
|
|
184
|
-
// abstracts the transport (CommandRunner.writeFile for SSH/local) so this stays
|
|
185
|
-
// decoupled from the agent layer. Returns the absolute file paths written.
|
|
186
172
|
async materialize(write, destRoot) {
|
|
187
173
|
const written = [];
|
|
188
174
|
for (const def of this.skills.values()) {
|
|
@@ -194,8 +180,6 @@ export class SkillRegistry {
|
|
|
194
180
|
}
|
|
195
181
|
return written;
|
|
196
182
|
}
|
|
197
|
-
// Stable digest of all scanned skill content. The on-host version marker compares
|
|
198
|
-
// against it so a redeploy with edited skills re-materializes, an unchanged one skips.
|
|
199
183
|
contentHash() {
|
|
200
184
|
const h = createHash('sha256');
|
|
201
185
|
for (const name of [...this.skills.keys()].sort()) {
|
|
@@ -208,13 +192,7 @@ export class SkillRegistry {
|
|
|
208
192
|
return h.digest('hex').slice(0, 16);
|
|
209
193
|
}
|
|
210
194
|
}
|
|
211
|
-
// Skills the greeting gate + signal dispatch hard-depend on. The gate is unconditional, so
|
|
212
|
-
// their absence is never a valid "skill-less" deployment — it is a packaging/scan error.
|
|
213
195
|
export const CORE_SKILLS = ['baxian-greeting', 'baxian-signals'];
|
|
214
|
-
// Throw at startup when a core skill is missing. An EMPTY registry (dropped skills/ dir or a
|
|
215
|
-
// bad skillsDir) is the worst case and must be fatal too: otherwise the server boots, the gate
|
|
216
|
-
// injects /baxian-greeting that resolves to nothing, and every agent burns the full greeting
|
|
217
|
-
// timeout into greeting_failed instead of the error surfacing loudly at boot.
|
|
218
196
|
export function assertCoreSkillsPresent(registry, skillsDir) {
|
|
219
197
|
const missing = CORE_SKILLS.filter((name) => !registry.has(name));
|
|
220
198
|
if (missing.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skill/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skill/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,6 @@ export declare class AgentStore {
|
|
|
11
11
|
onChange(fn: AgentStoreListener): () => void;
|
|
12
12
|
get(id: string): Promise<AgentBindingFacts | null>;
|
|
13
13
|
set(state: AgentBindingFacts): Promise<void>;
|
|
14
|
-
/** Per-agent serialized RMW. Updater returns: binding=write, null=delete, AGENT_STORE_NOOP=skip. Non-reentrant. */
|
|
15
14
|
update(id: string, updater: (existing: AgentBindingFacts | null) => AgentStoreUpdateResult): Promise<void>;
|
|
16
15
|
list(): Promise<AgentBindingFacts[]>;
|
|
17
16
|
delete(id: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-store.d.ts","sourceRoot":"","sources":["../../src/state/agent-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvF,eAAO,MAAM,gBAAgB,eAAyC,CAAC;AACvE,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,GAAG,IAAI,GAAG,OAAO,gBAAgB,CAAC;AAExF,qBAAa,UAAU;IAIT,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,KAAK,CAAuC;gBAEhC,GAAG,EAAE,MAAM;IAE/B,QAAQ,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAKtC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-store.d.ts","sourceRoot":"","sources":["../../src/state/agent-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvF,eAAO,MAAM,gBAAgB,eAAyC,CAAC;AACvE,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,GAAG,IAAI,GAAG,OAAO,gBAAgB,CAAC;AAExF,qBAAa,UAAU;IAIT,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,KAAK,CAAuC;gBAEhC,GAAG,EAAE,MAAM;IAE/B,QAAQ,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAKtC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAWlD,GAAG,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5C,MAAM,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,KAAK,sBAAsB,GACtE,OAAO,CAAC,IAAI,CAAC;IAmBV,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAoBpC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavC,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,IAAI;CASb"}
|
|
@@ -18,8 +18,6 @@ export class AgentStore {
|
|
|
18
18
|
content = await readFile(this.path(id), 'utf-8');
|
|
19
19
|
}
|
|
20
20
|
catch (err) {
|
|
21
|
-
// ENOENT alone is "no binding"; corrupt/permission/IO errors must surface so a live
|
|
22
|
-
// binding is never misread as absent.
|
|
23
21
|
if (err?.code === 'ENOENT')
|
|
24
22
|
return null;
|
|
25
23
|
throw err;
|
|
@@ -34,7 +32,6 @@ export class AgentStore {
|
|
|
34
32
|
await rename(tmp, final);
|
|
35
33
|
this.fire('set', state.id);
|
|
36
34
|
}
|
|
37
|
-
/** Per-agent serialized RMW. Updater returns: binding=write, null=delete, AGENT_STORE_NOOP=skip. Non-reentrant. */
|
|
38
35
|
async update(id, updater) {
|
|
39
36
|
const prev = this.mutex.get(id) ?? Promise.resolve();
|
|
40
37
|
const task = prev.then(async () => {
|
|
@@ -48,7 +45,6 @@ export class AgentStore {
|
|
|
48
45
|
}
|
|
49
46
|
await this.set(result);
|
|
50
47
|
});
|
|
51
|
-
// map 存 swallow-catch 版本以维持 mutex 链;删除前校验 still-current 防止误删后来者。
|
|
52
48
|
const chain = task.catch(() => undefined).finally(() => {
|
|
53
49
|
if (this.mutex.get(id) === chain)
|
|
54
50
|
this.mutex.delete(id);
|
|
@@ -83,7 +79,6 @@ export class AgentStore {
|
|
|
83
79
|
await unlink(this.path(id));
|
|
84
80
|
}
|
|
85
81
|
catch (err) {
|
|
86
|
-
// ENOENT is idempotent; other errors mean file still on disk → don't broadcast.
|
|
87
82
|
const code = err?.code;
|
|
88
83
|
if (code !== 'ENOENT') {
|
|
89
84
|
console.error(`[AgentStore] delete ${id} failed; not broadcasting:`, err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-store.js","sourceRoot":"","sources":["../../src/state/agent-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAGvE,MAAM,OAAO,UAAU;IAID;IAHZ,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEpD,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEnC,QAAQ,CAAC,EAAsB;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,
|
|
1
|
+
{"version":3,"file":"agent-store.js","sourceRoot":"","sources":["../../src/state/agent-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAGvE,MAAM,OAAO,UAAU;IAID;IAHZ,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEpD,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEnC,QAAQ,CAAC,EAAsB;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAAyC,EAAE,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC/E,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAwB;QAChC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAA2C,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QACxD,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CACV,EAAU,EACV,OAAuE;QAEvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,gBAAgB;gBAAE,OAAO;YACxC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAqB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACvE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7G,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,yCAAyC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAAyC,EAAE,IAAI,CAAC;YAC9D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,GAAG,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;IAEO,IAAI,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAEO,IAAI,CAAC,IAA0B,EAAE,EAAU;QACjD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACf,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,GAA4B,EAAE,UAAkB;IACxE,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAChG,MAAM,OAAO,GAAsB,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IAChE,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAChE,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ;QAAE,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;IAClF,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACtE,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACzE,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,QAAQ;QAAE,OAAO,CAAC,mBAAmB,GAAG,GAAG,CAAC,mBAAmB,CAAC;IACvG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAChE,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;IACrF,IAAI,GAAG,CAAC,MAAM,KAAK,gBAAgB;QAAE,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC;IACvE,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;IACrF,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;QAAE,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IACxF,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;IACrF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-record-store.d.ts","sourceRoot":"","sources":["../../src/state/error-record-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,aAAa,GAAG,gBAAgB,CAAC,CAAC;IAChH,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAuC;gBAEhC,GAAG,EAAE,MAAM;IAEzB,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBrD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAOjE,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"error-record-store.d.ts","sourceRoot":"","sources":["../../src/state/error-record-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,aAAa,GAAG,gBAAgB,CAAC,CAAC;IAChH,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAuC;gBAEhC,GAAG,EAAE,MAAM;IAEzB,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBrD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAOjE,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAO1E,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAa3D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQzD,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IASrE,yBAAyB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ1F,OAAO,CAAC,eAAe;IAyDvB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB;YAUnC,OAAO;CAwBtB"}
|
|
@@ -40,8 +40,6 @@ export class ErrorRecordStore {
|
|
|
40
40
|
.filter(record => record.agentId === agentId && record.operation === 'bootstrap')
|
|
41
41
|
.sort((a, b) => b.occurredAt.localeCompare(a.occurredAt))[0];
|
|
42
42
|
}
|
|
43
|
-
// Batched variant for buildAllAgentSnapshots — one readAll() per snapshot pass instead of
|
|
44
|
-
// N (agent count) × full-history scan. Returns the most recent bootstrap record per agentId.
|
|
45
43
|
async latestBootstrapByAgent() {
|
|
46
44
|
const records = await this.readAll();
|
|
47
45
|
const latest = new Map();
|
|
@@ -55,9 +53,6 @@ export class ErrorRecordStore {
|
|
|
55
53
|
}
|
|
56
54
|
return latest;
|
|
57
55
|
}
|
|
58
|
-
// Drops every record for an agentId by rewriting each affected jsonl. Called from
|
|
59
|
-
// agent-delete so an id reused later (delete + recreate) doesn't inherit stale bootstrap
|
|
60
|
-
// errors from the previous incarnation. Best-effort; partial failures are logged not thrown.
|
|
61
56
|
async purgeAgent(agentId) {
|
|
62
57
|
const idMarker = `"agentId":${JSON.stringify(agentId)}`;
|
|
63
58
|
return this.rewriteFiltered({
|
|
@@ -65,9 +60,6 @@ export class ErrorRecordStore {
|
|
|
65
60
|
shouldDrop: record => record.agentId === agentId,
|
|
66
61
|
});
|
|
67
62
|
}
|
|
68
|
-
// Narrower variant: drops only bootstrap-operation records for one agent, called from
|
|
69
|
-
// runSingleTarget's success path on EVERY tick. Hot path — quickCheck must be cheap and
|
|
70
|
-
// truly short-circuit (read alone, no parse, no rewrite) in the common no-stale case.
|
|
71
63
|
async purgeBootstrapForAgent(agentId) {
|
|
72
64
|
const idMarker = `"agentId":${JSON.stringify(agentId)}`;
|
|
73
65
|
const opMarker = '"operation":"bootstrap"';
|
|
@@ -76,25 +68,12 @@ export class ErrorRecordStore {
|
|
|
76
68
|
shouldDrop: record => record.agentId === agentId && record.operation === 'bootstrap',
|
|
77
69
|
});
|
|
78
70
|
}
|
|
79
|
-
// One-shot sweep on startup / config-replace: drop bootstrap-operation records for every
|
|
80
|
-
// agent NOT currently in the auto-bootstrap set. Covers:
|
|
81
|
-
// (a) agent transitioned from auto-mode to explicit workdir (id stays, leaves bootstrap)
|
|
82
|
-
// (b) agent deleted while server was down
|
|
83
|
-
// (c) PATCH /config saved then restartRequired — old poller appended a fresh stale record
|
|
84
|
-
// in the window before restart; sweep on next startup clears it
|
|
85
|
-
// Done in a single rewriteFiltered pass — one full-history scan per startup rather than
|
|
86
|
-
// N (stale agents) × full scans.
|
|
87
71
|
async sweepStaleBootstrapErrors(activeAgentIds) {
|
|
88
72
|
return this.rewriteFiltered({
|
|
89
73
|
mayMatch: content => content.includes('"operation":"bootstrap"'),
|
|
90
74
|
shouldDrop: record => record.operation === 'bootstrap' && !activeAgentIds.has(record.agentId),
|
|
91
75
|
});
|
|
92
76
|
}
|
|
93
|
-
// Shared rewrite-with-filter helper. shouldDrop returns true for records to remove.
|
|
94
|
-
// Uses tmp file + atomic rename per jsonl to survive crash/disk-full mid-rewrite
|
|
95
|
-
// (in-place writeFile would otherwise truncate the file and lose unrelated history).
|
|
96
|
-
// mayMatch lets callers short-circuit per file BEFORE the parse loop — without it, every
|
|
97
|
-
// call still parses the whole history even when nothing matches, defeating the rewrite skip.
|
|
98
77
|
rewriteFiltered(opts) {
|
|
99
78
|
const result = this.chain.then(async () => {
|
|
100
79
|
let files;
|
|
@@ -143,19 +122,14 @@ export class ErrorRecordStore {
|
|
|
143
122
|
try {
|
|
144
123
|
await writeFile(tmp, kept.length > 0 ? kept.join('\n') + '\n' : '');
|
|
145
124
|
await rename(tmp, path);
|
|
146
|
-
// Only count records as removed after the atomic rename succeeds. If writeFile or
|
|
147
|
-
// rename fails the original file is untouched, and callers (bootstrap.ts uses
|
|
148
|
-
// removed > 0 as a state-change signal) must not be misled into publishing a
|
|
149
|
-
// "stale error cleared" event for a purge that didn't actually happen.
|
|
150
125
|
removed += fileRemoved;
|
|
151
126
|
}
|
|
152
127
|
catch (err) {
|
|
153
128
|
console.warn(`[ErrorRecordStore] rewriteFiltered: atomic rewrite failed for ${file}:`, err);
|
|
154
|
-
// Best-effort tmp cleanup so a partial write doesn't accumulate orphan .tmp files.
|
|
155
129
|
try {
|
|
156
130
|
await unlink(tmp);
|
|
157
131
|
}
|
|
158
|
-
catch {
|
|
132
|
+
catch { }
|
|
159
133
|
}
|
|
160
134
|
}
|
|
161
135
|
return { removed };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-record-store.js","sourceRoot":"","sources":["../../src/state/error-record-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBzC,MAAM,OAAO,gBAAgB;IAGP;IAFZ,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEnC,KAAK,CAAC,MAAM,CAAC,KAAuB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACvC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAChE,MAAM,MAAM,GAAgB;gBAC1B,EAAE,EAAE,OAAO,UAAU,EAAE,EAAE;gBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU;gBACV,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,CAAC;YACF,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACpG,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,OAAO;aACX,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAAe;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,OAAO;aACX,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,SAAS,KAAK,WAAW,CAAC;aAChF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"error-record-store.js","sourceRoot":"","sources":["../../src/state/error-record-store.ts"],"names":[],"mappings":"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"}
|
package/dist/state/lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"AAGA,qBAAa,WAAW;IACV,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"AAGA,qBAAa,WAAW;IACV,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IAEzB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa1D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUtD,OAAO,CAAC,IAAI;CAGb"}
|
package/dist/state/lock.js
CHANGED
|
@@ -5,9 +5,6 @@ export class LockManager {
|
|
|
5
5
|
constructor(dir) {
|
|
6
6
|
this.dir = dir;
|
|
7
7
|
}
|
|
8
|
-
// owner: optional identity of the flow holding the lock (e.g. a taskId). Lets callers later
|
|
9
|
-
// distinguish "I still hold this lock" from "someone else does" without a separate registry —
|
|
10
|
-
// see ownerOf(). The file lock itself is anonymous; owner is the only ownership proof.
|
|
11
8
|
async acquire(agentId, owner) {
|
|
12
9
|
try {
|
|
13
10
|
await writeFile(this.path(agentId), JSON.stringify({ agentId, acquiredAt: new Date().toISOString(), ...(owner !== undefined ? { owner } : {}) }) + '\n', { flag: 'wx' });
|
|
@@ -21,7 +18,7 @@ export class LockManager {
|
|
|
21
18
|
try {
|
|
22
19
|
await unlink(this.path(agentId));
|
|
23
20
|
}
|
|
24
|
-
catch {
|
|
21
|
+
catch { }
|
|
25
22
|
}
|
|
26
23
|
async isLocked(agentId) {
|
|
27
24
|
try {
|
|
@@ -32,8 +29,6 @@ export class LockManager {
|
|
|
32
29
|
return false;
|
|
33
30
|
}
|
|
34
31
|
}
|
|
35
|
-
// Returns the owner recorded at acquire time, or null when the lock is absent / unowned /
|
|
36
|
-
// unreadable. Used to prove a specific flow still holds the lock (owner === expected).
|
|
37
32
|
async ownerOf(agentId) {
|
|
38
33
|
try {
|
|
39
34
|
const raw = await readFile(this.path(agentId), 'utf8');
|
package/dist/state/lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEnC,
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEnC,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,KAAc;QAC3C,IAAI,CAAC;YACH,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAClB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EACnH,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;YACtD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pet-store.d.ts","sourceRoot":"","sources":["../../src/state/pet-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAKzD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,iBAAiB,CAAA;KAAE,CAAC;CACxD;
|
|
1
|
+
{"version":3,"file":"pet-store.d.ts","sourceRoot":"","sources":["../../src/state/pet-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAKzD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,iBAAiB,CAAA;KAAE,CAAC;CACxD;AAED,qBAAa,QAAQ;IAMP,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IALjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuD;IAClF,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,IAAI,CAAuC;gBAEtB,GAAG,CAAC,EAAE,MAAM,YAAA;IAEzC,QAAQ,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAKpC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAoB1B,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB/C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAY/C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,iBAAiB,CAAA;KAAE,GAAG,IAAI,CAAC;IAgBzF,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKtD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIlD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAczE,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,QAAQ;YAMF,eAAe;YAgBf,gBAAgB;CAQ/B"}
|
package/dist/state/pet-store.js
CHANGED
|
@@ -4,9 +4,6 @@ import { randomUUID } from 'node:crypto';
|
|
|
4
4
|
import { isRecord } from '../shared/index.js';
|
|
5
5
|
const SAFE_PET_ID = /^[A-Za-z0-9_-]+$/;
|
|
6
6
|
const ASSIGNMENTS_FILE = 'assignments.json';
|
|
7
|
-
// Persists the shared Pet library (state/pets/<id>/) and per-agent assignments
|
|
8
|
-
// (state/pets/assignments.json). onChange fires for the agents whose petId changed
|
|
9
|
-
// so the EventPublisher can re-broadcast their snapshots (wired in index.ts).
|
|
10
7
|
export class PetStore {
|
|
11
8
|
dir;
|
|
12
9
|
listeners = new Set();
|
|
@@ -98,9 +95,6 @@ export class PetStore {
|
|
|
98
95
|
async delete(petId) {
|
|
99
96
|
if (!SAFE_PET_ID.test(petId))
|
|
100
97
|
return;
|
|
101
|
-
// Library removal happens INSIDE the lock together with the assignment cascade so a
|
|
102
|
-
// concurrent setAssignment(samePetId) either runs before us (we then clear its entry)
|
|
103
|
-
// or after us (its in-lock getMeta sees the pet gone and rejects) — never dangling.
|
|
104
98
|
const affected = await this.withLock(async () => {
|
|
105
99
|
const map = await this.readAssignments();
|
|
106
100
|
const ids = Object.keys(map).filter((agentId) => map[agentId] === petId);
|
|
@@ -126,8 +120,6 @@ export class PetStore {
|
|
|
126
120
|
return this.readAssignments();
|
|
127
121
|
}
|
|
128
122
|
async setAssignment(agentId, petId) {
|
|
129
|
-
// Existence check is INSIDE the lock so it can't pass against a pet that a concurrent
|
|
130
|
-
// delete() is removing under the same lock (TOCTOU → dangling assignment otherwise).
|
|
131
123
|
await this.withLock(async () => {
|
|
132
124
|
if (petId !== null) {
|
|
133
125
|
const meta = await this.getMeta(petId);
|
|
@@ -164,8 +156,6 @@ export class PetStore {
|
|
|
164
156
|
return {};
|
|
165
157
|
throw err;
|
|
166
158
|
}
|
|
167
|
-
// Only a missing file means "no assignments". Invalid JSON or a non-object payload is
|
|
168
|
-
// corruption — propagate so a later write can't silently overwrite tampered state.
|
|
169
159
|
const parsed = JSON.parse(content);
|
|
170
160
|
if (!isRecord(parsed))
|
|
171
161
|
throw new Error(`corrupt ${ASSIGNMENTS_FILE}: expected a JSON object`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pet-store.js","sourceRoot":"","sources":["../../src/state/pet-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK9C,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAQ5C
|
|
1
|
+
{"version":3,"file":"pet-store.js","sourceRoot":"","sources":["../../src/state/pet-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-approve-store.d.ts","sourceRoot":"","sources":["../../src/state/post-approve-store.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"post-approve-store.d.ts","sourceRoot":"","sources":["../../src/state/post-approve-store.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAiBD,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAEtC,GAAG,CAAC,EAAE,MAAM,YAAA;IAEnC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAY1D,GAAG,CACP,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GACA,OAAO,CAAC,IAAI,CAAC;IAmBV,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAapC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -30,7 +30,6 @@ export class PostApproveStore {
|
|
|
30
30
|
content = await readFile(this.path(taskId), 'utf-8');
|
|
31
31
|
}
|
|
32
32
|
catch (err) {
|
|
33
|
-
// ENOENT = no completion; corrupt/permission/IO errors must surface, not look "absent".
|
|
34
33
|
if (err?.code === 'ENOENT')
|
|
35
34
|
return null;
|
|
36
35
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-approve-store.js","sourceRoot":"","sources":["../../src/state/post-approve-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"post-approve-store.js","sourceRoot":"","sources":["../../src/state/post-approve-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,13 +7,11 @@ export declare class ProcessLockError extends Error {
|
|
|
7
7
|
readonly existing?: ProcessLockInfo | undefined;
|
|
8
8
|
constructor(message: string, existing?: ProcessLockInfo | undefined);
|
|
9
9
|
}
|
|
10
|
-
/** Single-instance guard. Stale locks require manual cleanup (auto-unlink races). */
|
|
11
10
|
export declare class ProcessLock {
|
|
12
11
|
private acquired;
|
|
13
12
|
private ownerId;
|
|
14
13
|
private readonly path;
|
|
15
14
|
constructor(stateDir: string, fileName?: string);
|
|
16
|
-
/** Returns the lock info on success; throws {@link ProcessLockError} otherwise. */
|
|
17
15
|
acquire(): Promise<ProcessLockInfo>;
|
|
18
16
|
release(): Promise<void>;
|
|
19
17
|
releaseSync(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-lock.d.ts","sourceRoot":"","sources":["../../src/state/process-lock.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aACI,QAAQ,CAAC,EAAE,eAAe;gBAA3D,OAAO,EAAE,MAAM,EAAkB,QAAQ,CAAC,EAAE,eAAe,YAAA;CAIxE;AAED,
|
|
1
|
+
{"version":3,"file":"process-lock.d.ts","sourceRoot":"","sources":["../../src/state/process-lock.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aACI,QAAQ,CAAC,EAAE,eAAe;gBAA3D,OAAO,EAAE,MAAM,EAAkB,QAAQ,CAAC,EAAE,eAAe,YAAA;CAIxE;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkB;IAIpD,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAyCnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC9B,WAAW,IAAI,IAAI;IA6BnB,UAAU,IAAI,OAAO;IAIrB,OAAO,IAAI,MAAM;YAIH,oBAAoB;CA+BnC"}
|
|
@@ -12,7 +12,6 @@ export class ProcessLockError extends Error {
|
|
|
12
12
|
this.name = 'ProcessLockError';
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
/** Single-instance guard. Stale locks require manual cleanup (auto-unlink races). */
|
|
16
15
|
export class ProcessLock {
|
|
17
16
|
acquired = false;
|
|
18
17
|
ownerId = null;
|
|
@@ -20,7 +19,6 @@ export class ProcessLock {
|
|
|
20
19
|
constructor(stateDir, fileName = LOCK_FILE) {
|
|
21
20
|
this.path = join(stateDir, fileName);
|
|
22
21
|
}
|
|
23
|
-
/** Returns the lock info on success; throws {@link ProcessLockError} otherwise. */
|
|
24
22
|
async acquire() {
|
|
25
23
|
const ownerId = randomUUID();
|
|
26
24
|
const info = {
|
|
@@ -89,7 +87,6 @@ export class ProcessLock {
|
|
|
89
87
|
throw err;
|
|
90
88
|
}
|
|
91
89
|
}
|
|
92
|
-
// Best-effort sync release for `process.once('exit', ...)` where async fs is dropped.
|
|
93
90
|
releaseSync() {
|
|
94
91
|
if (!this.acquired)
|
|
95
92
|
return;
|
|
@@ -120,7 +117,6 @@ export class ProcessLock {
|
|
|
120
117
|
this.ownerId = null;
|
|
121
118
|
}
|
|
122
119
|
catch {
|
|
123
|
-
// best-effort: process is exiting anyway
|
|
124
120
|
}
|
|
125
121
|
}
|
|
126
122
|
isAcquired() {
|
|
@@ -168,7 +164,6 @@ function isAlive(pid) {
|
|
|
168
164
|
return true;
|
|
169
165
|
}
|
|
170
166
|
catch (err) {
|
|
171
|
-
// EPERM: process exists, owned by another user.
|
|
172
167
|
return err?.code === 'EPERM';
|
|
173
168
|
}
|
|
174
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-lock.js","sourceRoot":"","sources":["../../src/state/process-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAQ7B,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACI;IAA7C,YAAY,OAAe,EAAkB,QAA0B;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,aAAQ,GAAR,QAAQ,CAAkB;QAErE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,
|
|
1
|
+
{"version":3,"file":"process-lock.js","sourceRoot":"","sources":["../../src/state/process-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-store.d.ts","sourceRoot":"","sources":["../../src/state/review-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"review-store.d.ts","sourceRoot":"","sources":["../../src/state/review-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKjE,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;gBAE5B,GAAG,CAAC,EAAE,MAAM,YAAA;IAEnC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAYtF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAiCrE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -2,9 +2,6 @@ import { mkdir, readFile, readdir, rename, rm, writeFile } from 'node:fs/promise
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
const ROUND_FILE_RE = /^round-(\d+)\.json$/;
|
|
4
4
|
const PHASES = ['spec', 'code'];
|
|
5
|
-
// Server-mode review persistence: state/reviews/{taskId}/{phase}/round-N.json.
|
|
6
|
-
// Phase subdirs prevent spec round-1 colliding with code round-1 (reviewRound
|
|
7
|
-
// resets to 0 on the spec→code transition). Data outlives the task (audit).
|
|
8
5
|
export class ReviewStore {
|
|
9
6
|
dir;
|
|
10
7
|
memory = new Map();
|