@jaggerxtrm/specialists 3.18.1 → 3.18.3
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/config/mandatory-rules/code-quality-defaults.md +58 -1
- package/config/skills/setup-specialists/SKILL.md +1 -1
- package/config/skills/using-script-specialists/SKILL.md +5 -5
- package/config/skills/using-specialists/SKILL.md +1135 -879
- package/config/skills/using-specialists-auto/SKILL.md +21 -21
- package/config/specialists/chain-coordinator.specialist.json +63 -0
- package/config/specialists/reviewer.specialist.json +1 -1
- package/config/specialists/seconder.specialist.json +1 -1
- package/dist/asset-contract.json +8 -13
- package/dist/index.js +151 -28
- package/dist/lib.js +8 -0
- package/dist/types/cli/clean.d.ts.map +1 -1
- package/dist/types/cli/init.d.ts.map +1 -1
- package/dist/types/cli/view.d.ts.map +1 -1
- package/dist/types/specialist/control.d.ts.map +1 -1
- package/dist/types/specialist/loader.d.ts +12 -0
- package/dist/types/specialist/loader.d.ts.map +1 -1
- package/dist/types/specialist/process-health.d.ts +16 -1
- package/dist/types/specialist/process-health.d.ts.map +1 -1
- package/dist/types/specialist/supervisor.d.ts.map +1 -1
- package/docs/design/roadmap/chain-templates/README.md +1 -1
- package/docs/design/roadmap/chains-prompt-evals.md +3054 -0
- package/docs/design/roadmap/enhanced-prd.md +4282 -0
- package/docs/design/roadmap/specialists-roadmap.md +7 -7
- package/docs/design/xt-pi-role-pi-flag-passthrough.md +174 -0
- package/docs/skills.md +4 -13
- package/package.json +1 -1
- package/config/skills/using-specialists-v2/SKILL.md +0 -766
- package/config/skills/using-specialists-v3/SKILL.md +0 -1327
package/dist/index.js
CHANGED
|
@@ -21617,6 +21617,14 @@ class SpecialistLoader {
|
|
|
21617
21617
|
this.cache.set(name, merged.spec);
|
|
21618
21618
|
return merged.spec;
|
|
21619
21619
|
}
|
|
21620
|
+
async getEffective(name) {
|
|
21621
|
+
const merged = await this.buildMergedSpec(name);
|
|
21622
|
+
if (!merged)
|
|
21623
|
+
return null;
|
|
21624
|
+
if (merged.warnings.length)
|
|
21625
|
+
this.blockedFieldWarnings.set(name, merged.warnings);
|
|
21626
|
+
return merged.spec;
|
|
21627
|
+
}
|
|
21620
21628
|
getBlockedFieldWarnings(name) {
|
|
21621
21629
|
if (name)
|
|
21622
21630
|
return this.blockedFieldWarnings.get(name) ?? [];
|
|
@@ -27612,7 +27620,7 @@ ${appendError}
|
|
|
27612
27620
|
writeFileSync5(this.resultPath(id), lastTurnSummaryTextContent || output, "utf-8");
|
|
27613
27621
|
}
|
|
27614
27622
|
try {
|
|
27615
|
-
this.withSqliteOperation("upsertResult:resume_turn", (client) => client.upsertResult(id, output));
|
|
27623
|
+
this.withSqliteOperation("upsertResult:resume_turn", (client) => client.upsertResult(id, lastTurnSummaryTextContent || output));
|
|
27616
27624
|
} catch (error2) {
|
|
27617
27625
|
console.warn(`[supervisor] SQLite upsertResult failed during resume turn: ${String(error2)}`);
|
|
27618
27626
|
}
|
|
@@ -27620,7 +27628,7 @@ ${appendError}
|
|
|
27620
27628
|
model: statusSnapshot.model ?? "unknown",
|
|
27621
27629
|
backend: statusSnapshot.backend ?? "unknown",
|
|
27622
27630
|
beadId: statusSnapshot.bead_id,
|
|
27623
|
-
output
|
|
27631
|
+
output: lastTurnSummaryTextContent || output
|
|
27624
27632
|
});
|
|
27625
27633
|
const passFinalize = shouldAutoFinalizeKeepAlive(output);
|
|
27626
27634
|
const readOnlyClose = shouldAutoCloseReadOnlyKeepAlive(output);
|
|
@@ -28163,14 +28171,15 @@ ${appendError}
|
|
|
28163
28171
|
});
|
|
28164
28172
|
isReadOnlySpecialist = finalResult.permissionRequired === "READ_ONLY";
|
|
28165
28173
|
autoCommitPolicy = finalResult.autoCommit;
|
|
28174
|
+
const reportedOutput = lastTurnSummaryTextContent || finalResult.output;
|
|
28166
28175
|
emitRunCompleteForTurn({
|
|
28167
28176
|
model: finalResult.model,
|
|
28168
28177
|
backend: finalResult.backend,
|
|
28169
28178
|
beadId: finalResult.beadId,
|
|
28170
|
-
output:
|
|
28179
|
+
output: reportedOutput
|
|
28171
28180
|
});
|
|
28172
28181
|
try {
|
|
28173
|
-
this.withSqliteOperation("upsertResult:initial_turn", (client) => client.upsertResult(id,
|
|
28182
|
+
this.withSqliteOperation("upsertResult:initial_turn", (client) => client.upsertResult(id, reportedOutput));
|
|
28174
28183
|
} catch (error2) {
|
|
28175
28184
|
console.warn(`[supervisor] SQLite upsertResult failed during initial turn: ${String(error2)}`);
|
|
28176
28185
|
}
|
|
@@ -28305,7 +28314,7 @@ ${appendError}
|
|
|
28305
28314
|
exit_reason: runMetrics.exit_reason,
|
|
28306
28315
|
metrics: enrichedRunMetrics,
|
|
28307
28316
|
...gitnexusSummary ? { gitnexus_summary: gitnexusSummary } : {}
|
|
28308
|
-
}),
|
|
28317
|
+
}), reportedOutput);
|
|
28309
28318
|
return true;
|
|
28310
28319
|
});
|
|
28311
28320
|
if (completePersisted === undefined) {
|
|
@@ -28942,7 +28951,6 @@ var exports_view = {};
|
|
|
28942
28951
|
__export(exports_view, {
|
|
28943
28952
|
run: () => run5
|
|
28944
28953
|
});
|
|
28945
|
-
import { readFile as readFile2 } from "fs/promises";
|
|
28946
28954
|
import readline2 from "readline/promises";
|
|
28947
28955
|
import { stdin as input, stdout as output } from "process";
|
|
28948
28956
|
function permissionBadge2(permission) {
|
|
@@ -29107,9 +29115,13 @@ function printFullSpecialist(spec) {
|
|
|
29107
29115
|
printBySection(spec, "stall_detection");
|
|
29108
29116
|
printBySection(spec, "beads");
|
|
29109
29117
|
}
|
|
29110
|
-
async function printRaw(summary) {
|
|
29111
|
-
const
|
|
29112
|
-
|
|
29118
|
+
async function printRaw(summary, loader) {
|
|
29119
|
+
const spec = await loader.getEffective(summary.name);
|
|
29120
|
+
if (!spec) {
|
|
29121
|
+
console.error(`Specialist not found: ${summary.name}`);
|
|
29122
|
+
process.exit(1);
|
|
29123
|
+
}
|
|
29124
|
+
console.log(JSON.stringify(spec, null, 2));
|
|
29113
29125
|
}
|
|
29114
29126
|
async function run5() {
|
|
29115
29127
|
let args;
|
|
@@ -29147,7 +29159,7 @@ async function run5() {
|
|
|
29147
29159
|
selectedSummary = chosen;
|
|
29148
29160
|
}
|
|
29149
29161
|
if (args.raw) {
|
|
29150
|
-
await printRaw(selectedSummary);
|
|
29162
|
+
await printRaw(selectedSummary, loader);
|
|
29151
29163
|
return;
|
|
29152
29164
|
}
|
|
29153
29165
|
const specialist = await loader.get(selectedSummary.name);
|
|
@@ -29293,7 +29305,7 @@ __export(exports_init, {
|
|
|
29293
29305
|
runGlobal: () => runGlobal,
|
|
29294
29306
|
run: () => run7
|
|
29295
29307
|
});
|
|
29296
|
-
import { copyFileSync, cpSync, existsSync as existsSync15, lstatSync, mkdirSync as mkdirSync8, readdirSync as readdirSync4, readFileSync as readFileSync13, readlinkSync, renameSync as renameSync3, symlinkSync, unlinkSync, writeFileSync as writeFileSync7 } from "fs";
|
|
29308
|
+
import { copyFileSync, cpSync, existsSync as existsSync15, lstatSync, mkdirSync as mkdirSync8, readdirSync as readdirSync4, readFileSync as readFileSync13, readlinkSync, renameSync as renameSync3, rmSync as rmSync3, symlinkSync, unlinkSync, writeFileSync as writeFileSync7 } from "fs";
|
|
29297
29309
|
import { spawnSync as spawnSync10 } from "child_process";
|
|
29298
29310
|
import { basename as basename4, dirname as dirname8, join as join15, relative, resolve as resolve6 } from "path";
|
|
29299
29311
|
function ok(msg) {
|
|
@@ -29678,6 +29690,23 @@ function installProjectSkills(cwd, syncSkills) {
|
|
|
29678
29690
|
ensureRootSymlink(join15(cwd, ".pi", "skills"), activeRoot);
|
|
29679
29691
|
let copied = 0;
|
|
29680
29692
|
let refreshed = 0;
|
|
29693
|
+
let pruned = 0;
|
|
29694
|
+
if (syncSkills) {
|
|
29695
|
+
const currentSkills = new Set(skills);
|
|
29696
|
+
for (const entry of readdirSync4(defaultRoot, { withFileTypes: true })) {
|
|
29697
|
+
if (!entry.isDirectory() || currentSkills.has(entry.name))
|
|
29698
|
+
continue;
|
|
29699
|
+
const retiredDefaultPath = join15(defaultRoot, entry.name);
|
|
29700
|
+
const retiredActivePath = join15(activeRoot, entry.name);
|
|
29701
|
+
try {
|
|
29702
|
+
if (lstatSync(retiredActivePath).isSymbolicLink() && resolve6(dirname8(retiredActivePath), readlinkSync(retiredActivePath)) === resolve6(retiredDefaultPath)) {
|
|
29703
|
+
unlinkSync(retiredActivePath);
|
|
29704
|
+
}
|
|
29705
|
+
} catch {}
|
|
29706
|
+
rmSync3(retiredDefaultPath, { recursive: true, force: true });
|
|
29707
|
+
pruned++;
|
|
29708
|
+
}
|
|
29709
|
+
}
|
|
29681
29710
|
for (const skill of skills) {
|
|
29682
29711
|
const src = join15(sourceDir, skill);
|
|
29683
29712
|
const defaultSkillPath = join15(defaultRoot, skill);
|
|
@@ -29696,6 +29725,8 @@ function installProjectSkills(cwd, syncSkills) {
|
|
|
29696
29725
|
ok(`copied ${copied} skill${copied === 1 ? "" : "s"} to .xtrm/skills/default/`);
|
|
29697
29726
|
if (refreshed > 0)
|
|
29698
29727
|
ok(`re-synced ${refreshed} skill${refreshed === 1 ? "" : "s"} in .xtrm/skills/default/`);
|
|
29728
|
+
if (pruned > 0)
|
|
29729
|
+
ok(`pruned ${pruned} retired managed skill${pruned === 1 ? "" : "s"}`);
|
|
29699
29730
|
ok("verified active skill symlinks in .xtrm/skills/active/");
|
|
29700
29731
|
}
|
|
29701
29732
|
function createSpecialistsDirs(cwd) {
|
|
@@ -31948,7 +31979,7 @@ __export(exports_validate, {
|
|
|
31948
31979
|
parseArgs: () => parseArgs5,
|
|
31949
31980
|
ArgParseError: () => ArgParseError3
|
|
31950
31981
|
});
|
|
31951
|
-
import { readFile as
|
|
31982
|
+
import { readFile as readFile2 } from "fs/promises";
|
|
31952
31983
|
import { existsSync as existsSync18 } from "fs";
|
|
31953
31984
|
function parseArgs5(argv) {
|
|
31954
31985
|
const value = argv[0];
|
|
@@ -31971,7 +32002,7 @@ async function findSpecialist(name) {
|
|
|
31971
32002
|
return list.find((item) => item.name === name);
|
|
31972
32003
|
}
|
|
31973
32004
|
async function loadSpecFromFile(filePath) {
|
|
31974
|
-
const content = await
|
|
32005
|
+
const content = await readFile2(filePath, "utf-8");
|
|
31975
32006
|
const raw = filePath.endsWith(".yaml") || filePath.endsWith(".yml") ? $parse(content) : JSON.parse(content);
|
|
31976
32007
|
return SpecialistSchema.parseAsync(raw);
|
|
31977
32008
|
}
|
|
@@ -32033,7 +32064,7 @@ async function run10() {
|
|
|
32033
32064
|
}
|
|
32034
32065
|
process.exit(1);
|
|
32035
32066
|
}
|
|
32036
|
-
const content = await
|
|
32067
|
+
const content = await readFile2(summary.filePath, "utf-8");
|
|
32037
32068
|
const result = await validateSpecialist(content);
|
|
32038
32069
|
if (args.json) {
|
|
32039
32070
|
console.log(JSON.stringify({
|
|
@@ -32833,7 +32864,7 @@ var init_edit = __esm(() => {
|
|
|
32833
32864
|
});
|
|
32834
32865
|
|
|
32835
32866
|
// src/specialist/resolution-diagnostics.ts
|
|
32836
|
-
import { readFile as
|
|
32867
|
+
import { readFile as readFile3 } from "fs/promises";
|
|
32837
32868
|
import { createRequire as createRequire3 } from "module";
|
|
32838
32869
|
import { execSync as execSync3 } from "child_process";
|
|
32839
32870
|
import { join as join19 } from "path";
|
|
@@ -32930,7 +32961,7 @@ function probeHealth(catalog) {
|
|
|
32930
32961
|
}
|
|
32931
32962
|
async function loadResolvedConfigReport(args) {
|
|
32932
32963
|
const manifest = readJsonFile3(join19(args.projectDir, "config", "specialists", `${args.specialistName}.specialist.json`));
|
|
32933
|
-
const index = loadToolCatalogIndex(await
|
|
32964
|
+
const index = loadToolCatalogIndex(await readFile3(args.catalogsPath, "utf-8"));
|
|
32934
32965
|
const catalogs = index.catalogs;
|
|
32935
32966
|
const probes = catalogs.map(probeHealth);
|
|
32936
32967
|
const extensionState = Object.fromEntries(probes.map((probe) => [probe.name, { health: probe.health, catalogCompatible: probe.drift === "none" }]));
|
|
@@ -43921,6 +43952,39 @@ async function stopJob(jobId, opts = {}) {
|
|
|
43921
43952
|
if (!status)
|
|
43922
43953
|
throw new Error(`No job found: ${jobId}`);
|
|
43923
43954
|
if (status.status === "done" || status.status === "error" || status.status === "cancelled") {
|
|
43955
|
+
const pid2 = status.pid;
|
|
43956
|
+
if (typeof pid2 === "number" && Number.isInteger(pid2) && pid2 > 0 && isProcessAlive(pid2, status.started_at_ms)) {
|
|
43957
|
+
supervisor.emitControlEvent(jobId, "stop_terminal_alive_reaped", {
|
|
43958
|
+
source: "cli",
|
|
43959
|
+
pid: pid2,
|
|
43960
|
+
previous_status: status.status,
|
|
43961
|
+
reason: "registry_terminal_process_alive",
|
|
43962
|
+
signal: "SIGTERM/SIGKILL",
|
|
43963
|
+
tmux_session: status.tmux_session
|
|
43964
|
+
});
|
|
43965
|
+
try {
|
|
43966
|
+
process.kill(-pid2, "SIGTERM");
|
|
43967
|
+
} catch (err) {
|
|
43968
|
+
if (err?.code !== "ESRCH") {
|
|
43969
|
+
try {
|
|
43970
|
+
process.kill(pid2, "SIGTERM");
|
|
43971
|
+
} catch {}
|
|
43972
|
+
}
|
|
43973
|
+
}
|
|
43974
|
+
const exited = await waitForProcessExit(pid2, 3000);
|
|
43975
|
+
if (!exited) {
|
|
43976
|
+
try {
|
|
43977
|
+
process.kill(-pid2, "SIGKILL");
|
|
43978
|
+
} catch {
|
|
43979
|
+
tryKillProcessGroup(pid2);
|
|
43980
|
+
}
|
|
43981
|
+
}
|
|
43982
|
+
if (status.tmux_session)
|
|
43983
|
+
killTmuxSession(status.tmux_session);
|
|
43984
|
+
process.stdout.write(`${green10("\u2713")} Reaped orphaned PID ${pid2} for job ${jobId} (registry was ${status.status}).
|
|
43985
|
+
`);
|
|
43986
|
+
return;
|
|
43987
|
+
}
|
|
43924
43988
|
process.stderr.write(`${dim10(`Job ${jobId} already finalized (${status.status}).`)}
|
|
43925
43989
|
`);
|
|
43926
43990
|
return;
|
|
@@ -45161,9 +45225,11 @@ function collectStaleSpecialistJobs(options2 = {}) {
|
|
|
45161
45225
|
const procRoot = options2.procRoot ?? "/proc";
|
|
45162
45226
|
const nowMs = options2.nowMs ?? Date.now();
|
|
45163
45227
|
const minKeepAliveAgeMs = options2.minKeepAliveAgeMs ?? 30 * 60 * 1000;
|
|
45228
|
+
const minTerminalAliveAgeMs = options2.minTerminalAliveAgeMs ?? 60 * 1000;
|
|
45164
45229
|
const observabilityClient = options2.observabilityClient ?? createObservabilitySqliteClient();
|
|
45165
45230
|
const statuses = observabilityClient?.listStatuses() ?? [];
|
|
45166
45231
|
const staleStatuses = statuses.filter((status) => ["starting", "running", "waiting"].includes(status.status));
|
|
45232
|
+
const terminalStatuses = statuses.filter((status) => ["done", "error", "cancelled"].includes(status.status));
|
|
45167
45233
|
const uptimeSeconds = readProcUptimeSecondsOrNull(procRoot) ?? nowMs / 1000;
|
|
45168
45234
|
const candidates = [];
|
|
45169
45235
|
for (const status of staleStatuses) {
|
|
@@ -45199,6 +45265,39 @@ function collectStaleSpecialistJobs(options2 = {}) {
|
|
|
45199
45265
|
continue;
|
|
45200
45266
|
candidates.push({ jobId: status.id, pid, beadId: status.bead_id ?? null, specialist: status.specialist, cwd: snapshot.cwd, ageMs, reason: "dead-toolchain" });
|
|
45201
45267
|
}
|
|
45268
|
+
for (const status of terminalStatuses) {
|
|
45269
|
+
const pid = status.pid;
|
|
45270
|
+
if (typeof pid !== "number" || !Number.isInteger(pid) || pid <= 0)
|
|
45271
|
+
continue;
|
|
45272
|
+
const updatedAtMs = status.updated_at_ms ?? nowMs;
|
|
45273
|
+
const ageMs = Math.max(0, nowMs - updatedAtMs);
|
|
45274
|
+
if (ageMs < minTerminalAliveAgeMs)
|
|
45275
|
+
continue;
|
|
45276
|
+
const snapshot = readProcessSnapshot(pid, procRoot, uptimeSeconds);
|
|
45277
|
+
if (!snapshot) {
|
|
45278
|
+
if (readProcessLiveness(pid, procRoot) !== "alive")
|
|
45279
|
+
continue;
|
|
45280
|
+
candidates.push({
|
|
45281
|
+
jobId: status.id,
|
|
45282
|
+
pid,
|
|
45283
|
+
beadId: status.bead_id ?? null,
|
|
45284
|
+
specialist: status.specialist,
|
|
45285
|
+
cwd: readProcCwdOrNull(pid, procRoot),
|
|
45286
|
+
ageMs,
|
|
45287
|
+
reason: "terminal-alive"
|
|
45288
|
+
});
|
|
45289
|
+
continue;
|
|
45290
|
+
}
|
|
45291
|
+
candidates.push({
|
|
45292
|
+
jobId: status.id,
|
|
45293
|
+
pid,
|
|
45294
|
+
beadId: status.bead_id ?? null,
|
|
45295
|
+
specialist: status.specialist,
|
|
45296
|
+
cwd: snapshot.cwd,
|
|
45297
|
+
ageMs,
|
|
45298
|
+
reason: "terminal-alive"
|
|
45299
|
+
});
|
|
45300
|
+
}
|
|
45202
45301
|
return candidates.sort((left, right) => left.pid - right.pid);
|
|
45203
45302
|
}
|
|
45204
45303
|
var DEFAULT_WARN_PCT = 70, DEFAULT_REFUSE_PCT = 85, CLOCK_TICKS_PER_SECOND = 100;
|
|
@@ -46017,7 +46116,7 @@ import {
|
|
|
46017
46116
|
mkdirSync as mkdirSync12,
|
|
46018
46117
|
readFileSync as readFileSync21,
|
|
46019
46118
|
renameSync as renameSync4,
|
|
46020
|
-
rmSync as
|
|
46119
|
+
rmSync as rmSync4,
|
|
46021
46120
|
statSync as statSync5,
|
|
46022
46121
|
writeFileSync as writeFileSync13
|
|
46023
46122
|
} from "fs";
|
|
@@ -46086,7 +46185,7 @@ function writeConsoleConfig(config2, cookie = `${process.pid}.${Math.floor(perfo
|
|
|
46086
46185
|
renameSync4(tmpPath, location.path);
|
|
46087
46186
|
} catch (renameError) {
|
|
46088
46187
|
try {
|
|
46089
|
-
|
|
46188
|
+
rmSync4(tmpPath, { force: true });
|
|
46090
46189
|
} catch {}
|
|
46091
46190
|
logError("ps", "write_global_config", {
|
|
46092
46191
|
step: "console_json",
|
|
@@ -49540,7 +49639,7 @@ var init_console = __esm(() => {
|
|
|
49540
49639
|
});
|
|
49541
49640
|
|
|
49542
49641
|
// src/specialist/worktree.ts
|
|
49543
|
-
import { existsSync as existsSync26, symlinkSync as symlinkSync2, mkdirSync as mkdirSync13, rmSync as
|
|
49642
|
+
import { existsSync as existsSync26, symlinkSync as symlinkSync2, mkdirSync as mkdirSync13, rmSync as rmSync5 } from "fs";
|
|
49544
49643
|
import { join as join30, resolve as resolve9 } from "path";
|
|
49545
49644
|
import { spawnSync as spawnSync15, execFileSync as execFileSync3 } from "child_process";
|
|
49546
49645
|
function deriveBranchName(beadId, specialistName) {
|
|
@@ -49582,7 +49681,7 @@ function provisionWorktree(options2) {
|
|
|
49582
49681
|
createWorktreeViaBd(worktreePath, branch, commonRoot);
|
|
49583
49682
|
normalizeParentHooksPath(commonRoot);
|
|
49584
49683
|
try {
|
|
49585
|
-
|
|
49684
|
+
rmSync5(join30(worktreePath, ".beads"), { recursive: true, force: true });
|
|
49586
49685
|
markBeadsSkipWorktree(worktreePath);
|
|
49587
49686
|
} catch {}
|
|
49588
49687
|
symlinkPiNpmCache(commonRoot, worktreePath);
|
|
@@ -49672,7 +49771,7 @@ var init_worktree = __esm(() => {
|
|
|
49672
49771
|
});
|
|
49673
49772
|
|
|
49674
49773
|
// src/specialist/epic-reconciler.ts
|
|
49675
|
-
import { mkdirSync as mkdirSync14, openSync as openSync2, readFileSync as readFileSync24, rmSync as
|
|
49774
|
+
import { mkdirSync as mkdirSync14, openSync as openSync2, readFileSync as readFileSync24, rmSync as rmSync6, writeFileSync as writeFileSync14 } from "fs";
|
|
49676
49775
|
import { join as join31 } from "path";
|
|
49677
49776
|
function buildEpicLockPath(epicId) {
|
|
49678
49777
|
const location = resolveObservabilityDbLocation();
|
|
@@ -49700,7 +49799,7 @@ function withEpicAdvisoryLock(epicId, action) {
|
|
|
49700
49799
|
} finally {
|
|
49701
49800
|
if (lockFd !== null) {
|
|
49702
49801
|
try {
|
|
49703
|
-
|
|
49802
|
+
rmSync6(lockPath, { force: true });
|
|
49704
49803
|
} catch {}
|
|
49705
49804
|
}
|
|
49706
49805
|
}
|
|
@@ -60060,7 +60159,7 @@ var exports_clean = {};
|
|
|
60060
60159
|
__export(exports_clean, {
|
|
60061
60160
|
run: () => run27
|
|
60062
60161
|
});
|
|
60063
|
-
import { existsSync as existsSync37, readFileSync as readFileSync34, readdirSync as readdirSync18, rmSync as
|
|
60162
|
+
import { existsSync as existsSync37, readFileSync as readFileSync34, readdirSync as readdirSync18, rmSync as rmSync7, statSync as statSync12 } from "fs";
|
|
60064
60163
|
import { join as join42 } from "path";
|
|
60065
60164
|
function parseDuration2(raw) {
|
|
60066
60165
|
const match = /^(\d+)(ms|s|m|h|d)$/i.exec(raw.trim());
|
|
@@ -60470,6 +60569,30 @@ async function reapStaleSpecialistJobs(jobs, dryRun) {
|
|
|
60470
60569
|
} catch {}
|
|
60471
60570
|
} catch {}
|
|
60472
60571
|
}
|
|
60572
|
+
if (job.reason === "terminal-alive") {
|
|
60573
|
+
try {
|
|
60574
|
+
process.kill(-job.pid, "SIGTERM");
|
|
60575
|
+
} catch (err) {
|
|
60576
|
+
if (err?.code !== "ESRCH") {
|
|
60577
|
+
try {
|
|
60578
|
+
process.kill(job.pid, "SIGTERM");
|
|
60579
|
+
} catch {}
|
|
60580
|
+
}
|
|
60581
|
+
}
|
|
60582
|
+
await new Promise((resolve11) => setTimeout(resolve11, 500));
|
|
60583
|
+
try {
|
|
60584
|
+
process.kill(job.pid, 0);
|
|
60585
|
+
try {
|
|
60586
|
+
process.kill(-job.pid, "SIGKILL");
|
|
60587
|
+
} catch {
|
|
60588
|
+
try {
|
|
60589
|
+
process.kill(job.pid, "SIGKILL");
|
|
60590
|
+
} catch {}
|
|
60591
|
+
}
|
|
60592
|
+
} catch {}
|
|
60593
|
+
reapedCount += 1;
|
|
60594
|
+
continue;
|
|
60595
|
+
}
|
|
60473
60596
|
sqliteClient.markSpecialistJobCancelled(job.jobId, `cleanup: stale-reaper:${job.reason}`);
|
|
60474
60597
|
reapedCount += 1;
|
|
60475
60598
|
}
|
|
@@ -60487,7 +60610,7 @@ function printStaleJobSummary(reapedCount) {
|
|
|
60487
60610
|
}
|
|
60488
60611
|
function deleteJobDirectories(jobs) {
|
|
60489
60612
|
for (const job of jobs) {
|
|
60490
|
-
|
|
60613
|
+
rmSync7(job.directoryPath, { recursive: true, force: true });
|
|
60491
60614
|
}
|
|
60492
60615
|
return jobs.length;
|
|
60493
60616
|
}
|
|
@@ -61120,7 +61243,7 @@ var init_attach = __esm(() => {
|
|
|
61120
61243
|
});
|
|
61121
61244
|
|
|
61122
61245
|
// src/specialist/drift-detector.ts
|
|
61123
|
-
import { existsSync as existsSync38, readFileSync as readFileSync35, readdirSync as readdirSync19, rmSync as
|
|
61246
|
+
import { existsSync as existsSync38, readFileSync as readFileSync35, readdirSync as readdirSync19, rmSync as rmSync8 } from "fs";
|
|
61124
61247
|
import { join as join43, resolve as resolve11, relative as relative3 } from "path";
|
|
61125
61248
|
function listFiles(root) {
|
|
61126
61249
|
if (!existsSync38(root))
|
|
@@ -61216,7 +61339,7 @@ function pruneStaleDefaults(repoRoot, dryRun, keepDiverged = false) {
|
|
|
61216
61339
|
const targets = detectDriftForRepo(repoRoot).filter((f) => f.scope === "default" && (keepDiverged ? f.bytes_equal === true : true)).map((f) => f.path);
|
|
61217
61340
|
if (!dryRun) {
|
|
61218
61341
|
for (const target of targets)
|
|
61219
|
-
|
|
61342
|
+
rmSync8(target, { recursive: true, force: true });
|
|
61220
61343
|
}
|
|
61221
61344
|
return targets;
|
|
61222
61345
|
}
|
|
@@ -63660,7 +63783,7 @@ import { createServer } from "http";
|
|
|
63660
63783
|
import { randomUUID as randomUUID7 } from "crypto";
|
|
63661
63784
|
import { once } from "events";
|
|
63662
63785
|
import { spawnSync as spawnSync25 } from "child_process";
|
|
63663
|
-
import { access, readdir as readdir2, readFile as
|
|
63786
|
+
import { access, readdir as readdir2, readFile as readFile4, constants } from "fs/promises";
|
|
63664
63787
|
import { existsSync as existsSync42 } from "fs";
|
|
63665
63788
|
import { homedir as homedir12 } from "os";
|
|
63666
63789
|
import { join as join48 } from "path";
|
|
@@ -63688,7 +63811,7 @@ async function checkUserDirSpecs(userDir) {
|
|
|
63688
63811
|
let validCount = 0;
|
|
63689
63812
|
for (const file of specFiles) {
|
|
63690
63813
|
try {
|
|
63691
|
-
const content = await
|
|
63814
|
+
const content = await readFile4(join48(userDir, file), "utf-8");
|
|
63692
63815
|
const json = file.endsWith(".json") ? content : null;
|
|
63693
63816
|
if (!json)
|
|
63694
63817
|
continue;
|
package/dist/lib.js
CHANGED
|
@@ -17574,6 +17574,14 @@ class SpecialistLoader {
|
|
|
17574
17574
|
this.cache.set(name, merged.spec);
|
|
17575
17575
|
return merged.spec;
|
|
17576
17576
|
}
|
|
17577
|
+
async getEffective(name) {
|
|
17578
|
+
const merged = await this.buildMergedSpec(name);
|
|
17579
|
+
if (!merged)
|
|
17580
|
+
return null;
|
|
17581
|
+
if (merged.warnings.length)
|
|
17582
|
+
this.blockedFieldWarnings.set(name, merged.warnings);
|
|
17583
|
+
return merged.spec;
|
|
17584
|
+
}
|
|
17577
17585
|
getBlockedFieldWarnings(name) {
|
|
17578
17586
|
if (name)
|
|
17579
17587
|
return this.blockedFieldWarnings.get(name) ?? [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/cli/clean.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/cli/clean.ts"],"names":[],"mappings":"AA8mBA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAsGzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/init.ts"],"names":[],"mappings":"AA64BA,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uGAAuG;IACvG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sHAAsH;IACtH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAsD/C;AAED,wBAAsB,GAAG,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6G/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/cli/view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/cli/view.ts"],"names":[],"mappings":"AAsPA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../src/specialist/control.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../src/specialist/control.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwIrF;AAED,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDrG"}
|
|
@@ -85,6 +85,18 @@ export declare class SpecialistLoader {
|
|
|
85
85
|
private resolveCanonicalPresetReferences;
|
|
86
86
|
list(category?: string): Promise<SpecialistSummary[]>;
|
|
87
87
|
get(name: string): Promise<Specialist>;
|
|
88
|
+
/**
|
|
89
|
+
* Return the merged (effective) spec for `name`: package canonical + global
|
|
90
|
+
* user.json + repo overrides, in the same precedence as get().
|
|
91
|
+
*
|
|
92
|
+
* Unlike get(), does NOT enforce the "model must be set" gate — this method
|
|
93
|
+
* exists precisely so tooling (sp view --raw, launchers, doctors) can inspect
|
|
94
|
+
* the effective config even when it isn't yet runnable. Callers that need
|
|
95
|
+
* runtime enforcement should still use get().
|
|
96
|
+
*
|
|
97
|
+
* Returns null if the specialist has no package canonical (unknown name).
|
|
98
|
+
*/
|
|
99
|
+
getEffective(name: string): Promise<Specialist | null>;
|
|
88
100
|
/**
|
|
89
101
|
* Blocked-field warnings collected during the most recent list() or get() calls.
|
|
90
102
|
* Returns all warnings when called without a name; filters to one specialist otherwise.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/specialist/loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAQL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,oBAAoB;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7D,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACzE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,QAAQ,CAAC;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,mGAAmG;AACnG,qBAAa,2BAA4B,SAAQ,KAAK;aACxB,cAAc,EAAE,MAAM;gBAAtB,cAAc,EAAE,MAAM;CAQnD;AAED,0EAA0E;AAC1E,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,CAiBlC;AAED,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,GAAE,aAAkB;IAIvC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,qBAAqB;IAc7B,wFAAwF;IACxF,OAAO,CAAC,aAAa;IAgBrB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA2F3B,OAAO,CAAC,oBAAoB;IAU5B;;;;;;;OAOG;YACW,eAAe;IAoE7B,OAAO,CAAC,gCAAgC;IAelC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAgDrD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAkB5C;;;OAGG;IACH,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAO7D,kHAAkH;IAClH,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;IAQjD,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;CASrC"}
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/specialist/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,16 @@ export interface StaleSpecialistJobCandidate {
|
|
|
30
30
|
specialist: string;
|
|
31
31
|
cwd: string | null;
|
|
32
32
|
ageMs: number;
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* - dead-pid: registry active, PID gone (existing container-restart-orphan class).
|
|
35
|
+
* - orphaned-keep-alive: registry waiting, ppid==1, edit-capable keep-alive reparented after wrapper died.
|
|
36
|
+
* - dead-toolchain: registry active, PID alive but no tool/think activity in the window.
|
|
37
|
+
* - terminal-alive: registry done/error/cancelled but PID (and its detached pi child) still running.
|
|
38
|
+
* Class introduced for unitAI-yme9q — pi keep-alive sessions dispatched via bare `sp run ... &`
|
|
39
|
+
* (no console/daemon driving the FIFO, waiting_auto_close_ms unset) never receive a close signal;
|
|
40
|
+
* the job's SQLite row is marked terminal for chain bookkeeping while the OS process leaks indefinitely.
|
|
41
|
+
*/
|
|
42
|
+
reason: 'dead-pid' | 'orphaned-keep-alive' | 'dead-toolchain' | 'terminal-alive';
|
|
34
43
|
}
|
|
35
44
|
export type ProcessHealthStatus = 'OK' | 'WARN' | 'REFUSE';
|
|
36
45
|
export interface ProcessHealthReport {
|
|
@@ -71,6 +80,12 @@ export declare function collectStaleSpecialistJobs(options?: {
|
|
|
71
80
|
procRoot?: string;
|
|
72
81
|
nowMs?: number;
|
|
73
82
|
minKeepAliveAgeMs?: number;
|
|
83
|
+
/**
|
|
84
|
+
* Minimum ms since the last update on a terminal-status job before its still-alive PID
|
|
85
|
+
* is treated as a leak. pi's session close-path has an 8s group-SIGKILL backstop, so any
|
|
86
|
+
* process still alive well past that has failed to receive a close signal. Default 60s.
|
|
87
|
+
*/
|
|
88
|
+
minTerminalAliveAgeMs?: number;
|
|
74
89
|
observabilityClient?: StaleSpecialistJobSource;
|
|
75
90
|
}): StaleSpecialistJobCandidate[];
|
|
76
91
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-health.d.ts","sourceRoot":"","sources":["../../../src/specialist/process-health.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEvF,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,wBAAwB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,qBAAqB,GAAG,iBAAiB,GAAG,WAAW,GAAG,0BAA0B,CAAC;CAC/F;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"process-health.d.ts","sourceRoot":"","sources":["../../../src/specialist/process-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/specialist/supervisor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/specialist/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ Catalog table (for full per-template detail with mermaid step diagrams, severity
|
|
|
34
34
|
|
|
35
35
|
**Canonical pipeline.** The Layer-1 shapes above are what the formula files declare. On top of Layer-1, every production-diff chain runs the **canonical pipeline** described in [canon §2](../../chain-templates.md#2-the-canonical-pipeline) — `seconder → test-engineer → test-runner → security-auditor (if sensitive) → obligations-scanner → reviewer` with Release Checklist. The canonical pipeline is not opt-in; severity (`SCRUTINY: low|medium|high|critical`) modulates which steps fire. Each template's resolved canonical chain is in [canon §3](../../chain-templates.md#3-the-template-catalog).
|
|
36
36
|
|
|
37
|
-
**Status today.** The Iron portion of the canonical pipeline (seconder gate + obligations-scanner + reviewer + auto-escalation) is **in production** via `config/skills/using-specialists
|
|
37
|
+
**Status today.** The Iron portion of the canonical pipeline (seconder gate + obligations-scanner + reviewer + auto-escalation) is **in production** via `config/skills/using-specialists/SKILL.md`. The QA portion (`test-engineer` + upgraded `test-runner`) is now **wired in formula files** via epic `unitAI-f9kku` (blocked on sfwe1.1/.2 at specialist layer). Once shipped, both are canonical pipeline behavior — not "overlays." The one currently-pending piece is **DevOps gates** for operational validation ([canon §4](../../chain-templates.md#4-devops-gates--design-pending)); design fill follows in a separate session segment.
|
|
38
38
|
|
|
39
39
|
## Shipping path
|
|
40
40
|
|