@wrongstack/core 0.5.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agent-bridge-B07AYFBk.d.ts → agent-bridge-BKNiE1VH.d.ts} +1 -1
- package/dist/{compactor-BWhJXxsW.d.ts → compactor-RIPuTtWK.d.ts} +1 -1
- package/dist/{config-BgM0BIpz.d.ts → config-BGGuP_Ar.d.ts} +1 -1
- package/dist/{context-CLZXPPYk.d.ts → context-CDRyrkKQ.d.ts} +7 -0
- package/dist/coordination/index.d.ts +9 -9
- package/dist/coordination/index.js +339 -80
- package/dist/coordination/index.js.map +1 -1
- package/dist/defaults/index.d.ts +20 -19
- package/dist/defaults/index.js +731 -180
- package/dist/defaults/index.js.map +1 -1
- package/dist/{events-qnDZbrtb.d.ts → events-DPQKFX7W.d.ts} +1 -1
- package/dist/execution/index.d.ts +152 -12
- package/dist/execution/index.js +474 -5
- package/dist/execution/index.js.map +1 -1
- package/dist/extension/index.d.ts +6 -6
- package/dist/extension/index.js +2 -1
- package/dist/extension/index.js.map +1 -1
- package/dist/goal-store-BQ3YX1h1.d.ts +75 -0
- package/dist/{index-DPLJw_ZI.d.ts → index-B0qTujQW.d.ts} +52 -5
- package/dist/{index-BDnUCRvL.d.ts → index-DkdRz6yK.d.ts} +351 -15
- package/dist/index.d.ts +109 -28
- package/dist/index.js +1143 -234
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +6 -6
- package/dist/kernel/index.d.ts +9 -9
- package/dist/{mcp-servers-CSMfaBuL.d.ts → mcp-servers-DBdh3cee.d.ts} +3 -3
- package/dist/models/index.d.ts +2 -2
- package/dist/models/index.js +2 -3
- package/dist/models/index.js.map +1 -1
- package/dist/{multi-agent-Cv8wk47i.d.ts → multi-agent-Cpp7FXUl.d.ts} +11 -3
- package/dist/observability/index.d.ts +2 -2
- package/dist/{path-resolver-DiCUvEg6.d.ts → path-resolver--g_hKJ7V.d.ts} +2 -2
- package/dist/{plan-templates-DaxTCPfk.d.ts → plan-templates-CKJs_sYh.d.ts} +9 -8
- package/dist/{provider-runner-3SHqk9zB.d.ts → provider-runner-hl4Il3xS.d.ts} +3 -3
- package/dist/{retry-policy-LLUxJmYY.d.ts → retry-policy-LKS8MHsB.d.ts} +1 -1
- package/dist/sdd/index.d.ts +6 -4
- package/dist/sdd/index.js +102 -68
- package/dist/sdd/index.js.map +1 -1
- package/dist/{secret-scrubber-Z_VXuXQT.d.ts → secret-scrubber-BzQR5BiL.d.ts} +1 -1
- package/dist/{secret-scrubber-BhJTNr9v.d.ts → secret-scrubber-CfMdAJ_l.d.ts} +1 -1
- package/dist/security/index.d.ts +3 -3
- package/dist/security/index.js +82 -82
- package/dist/security/index.js.map +1 -1
- package/dist/{selector-DB2-byKH.d.ts → selector-C7HqnZJU.d.ts} +1 -1
- package/dist/{session-reader-4jxsYLZ8.d.ts → session-reader-CzfRA6Vk.d.ts} +1 -1
- package/dist/skills/index.js +102 -38
- package/dist/skills/index.js.map +1 -1
- package/dist/storage/index.d.ts +6 -5
- package/dist/storage/index.js +131 -22
- package/dist/storage/index.js.map +1 -1
- package/dist/{system-prompt-DI4Dtc1I.d.ts → system-prompt-Dl2QY1_B.d.ts} +1 -1
- package/dist/{tool-executor-DSvmOBe6.d.ts → tool-executor-B03CRwu-.d.ts} +4 -4
- package/dist/types/index.d.ts +15 -15
- package/dist/types/index.js +100 -102
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
package/dist/sdd/index.js
CHANGED
|
@@ -1,6 +1,92 @@
|
|
|
1
|
+
import { randomBytes, randomUUID } from 'crypto';
|
|
1
2
|
import * as fs from 'fs/promises';
|
|
2
3
|
import * as path from 'path';
|
|
3
|
-
|
|
4
|
+
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __esm = (fn, res) => function __init() {
|
|
8
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
9
|
+
};
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// src/utils/atomic-write.ts
|
|
16
|
+
var atomic_write_exports = {};
|
|
17
|
+
__export(atomic_write_exports, {
|
|
18
|
+
atomicWrite: () => atomicWrite,
|
|
19
|
+
ensureDir: () => ensureDir
|
|
20
|
+
});
|
|
21
|
+
async function atomicWrite(targetPath, content, opts = {}) {
|
|
22
|
+
const dir = path.dirname(targetPath);
|
|
23
|
+
await fs.mkdir(dir, { recursive: true });
|
|
24
|
+
const tmp = path.join(dir, `.${path.basename(targetPath)}.${randomBytes(6).toString("hex")}.tmp`);
|
|
25
|
+
try {
|
|
26
|
+
if (typeof content === "string") {
|
|
27
|
+
await fs.writeFile(tmp, content, { flag: "wx", encoding: opts.encoding ?? "utf8" });
|
|
28
|
+
} else {
|
|
29
|
+
await fs.writeFile(tmp, content, { flag: "wx" });
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const fh = await fs.open(tmp, "r+");
|
|
33
|
+
try {
|
|
34
|
+
await fh.sync();
|
|
35
|
+
} finally {
|
|
36
|
+
await fh.close();
|
|
37
|
+
}
|
|
38
|
+
} catch {
|
|
39
|
+
}
|
|
40
|
+
let mode;
|
|
41
|
+
try {
|
|
42
|
+
const stat2 = await fs.stat(targetPath);
|
|
43
|
+
mode = stat2.mode & 511;
|
|
44
|
+
} catch {
|
|
45
|
+
mode = opts.mode;
|
|
46
|
+
}
|
|
47
|
+
if (mode !== void 0) {
|
|
48
|
+
await fs.chmod(tmp, mode);
|
|
49
|
+
}
|
|
50
|
+
await renameWithRetry(tmp, targetPath);
|
|
51
|
+
} catch (err) {
|
|
52
|
+
try {
|
|
53
|
+
await fs.unlink(tmp);
|
|
54
|
+
} catch {
|
|
55
|
+
}
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function ensureDir(dir) {
|
|
60
|
+
await fs.mkdir(dir, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
async function renameWithRetry(from, to) {
|
|
63
|
+
if (process.platform !== "win32") {
|
|
64
|
+
await fs.rename(from, to);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const delays = [10, 25, 60, 120, 250];
|
|
68
|
+
let lastErr;
|
|
69
|
+
for (let i = 0; i <= delays.length; i++) {
|
|
70
|
+
try {
|
|
71
|
+
await fs.rename(from, to);
|
|
72
|
+
return;
|
|
73
|
+
} catch (err) {
|
|
74
|
+
lastErr = err;
|
|
75
|
+
const code = err?.code;
|
|
76
|
+
if (!code || !TRANSIENT_RENAME_CODES.has(code) || i === delays.length) {
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
await new Promise((resolve) => setTimeout(resolve, delays[i]));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
throw lastErr;
|
|
83
|
+
}
|
|
84
|
+
var TRANSIENT_RENAME_CODES;
|
|
85
|
+
var init_atomic_write = __esm({
|
|
86
|
+
"src/utils/atomic-write.ts"() {
|
|
87
|
+
TRANSIENT_RENAME_CODES = /* @__PURE__ */ new Set(["EPERM", "EBUSY", "EACCES", "ENOTEMPTY"]);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
4
90
|
|
|
5
91
|
// src/sdd/spec-parser.ts
|
|
6
92
|
var SpecParser = class {
|
|
@@ -883,72 +969,9 @@ var SpecDrivenDev = class {
|
|
|
883
969
|
}));
|
|
884
970
|
}
|
|
885
971
|
};
|
|
886
|
-
async function atomicWrite(targetPath, content, opts = {}) {
|
|
887
|
-
const dir = path.dirname(targetPath);
|
|
888
|
-
await fs.mkdir(dir, { recursive: true });
|
|
889
|
-
const tmp = path.join(dir, `.${path.basename(targetPath)}.${randomBytes(6).toString("hex")}.tmp`);
|
|
890
|
-
try {
|
|
891
|
-
if (typeof content === "string") {
|
|
892
|
-
await fs.writeFile(tmp, content, { flag: "wx", encoding: opts.encoding ?? "utf8" });
|
|
893
|
-
} else {
|
|
894
|
-
await fs.writeFile(tmp, content, { flag: "wx" });
|
|
895
|
-
}
|
|
896
|
-
try {
|
|
897
|
-
const fh = await fs.open(tmp, "r+");
|
|
898
|
-
try {
|
|
899
|
-
await fh.sync();
|
|
900
|
-
} finally {
|
|
901
|
-
await fh.close();
|
|
902
|
-
}
|
|
903
|
-
} catch {
|
|
904
|
-
}
|
|
905
|
-
let mode;
|
|
906
|
-
try {
|
|
907
|
-
const stat2 = await fs.stat(targetPath);
|
|
908
|
-
mode = stat2.mode & 511;
|
|
909
|
-
} catch {
|
|
910
|
-
mode = opts.mode;
|
|
911
|
-
}
|
|
912
|
-
if (mode !== void 0) {
|
|
913
|
-
await fs.chmod(tmp, mode);
|
|
914
|
-
}
|
|
915
|
-
await renameWithRetry(tmp, targetPath);
|
|
916
|
-
} catch (err) {
|
|
917
|
-
try {
|
|
918
|
-
await fs.unlink(tmp);
|
|
919
|
-
} catch {
|
|
920
|
-
}
|
|
921
|
-
throw err;
|
|
922
|
-
}
|
|
923
|
-
}
|
|
924
|
-
async function ensureDir(dir) {
|
|
925
|
-
await fs.mkdir(dir, { recursive: true });
|
|
926
|
-
}
|
|
927
|
-
var TRANSIENT_RENAME_CODES = /* @__PURE__ */ new Set(["EPERM", "EBUSY", "EACCES", "ENOTEMPTY"]);
|
|
928
|
-
async function renameWithRetry(from, to) {
|
|
929
|
-
if (process.platform !== "win32") {
|
|
930
|
-
await fs.rename(from, to);
|
|
931
|
-
return;
|
|
932
|
-
}
|
|
933
|
-
const delays = [10, 25, 60, 120, 250];
|
|
934
|
-
let lastErr;
|
|
935
|
-
for (let i = 0; i <= delays.length; i++) {
|
|
936
|
-
try {
|
|
937
|
-
await fs.rename(from, to);
|
|
938
|
-
return;
|
|
939
|
-
} catch (err) {
|
|
940
|
-
lastErr = err;
|
|
941
|
-
const code = err?.code;
|
|
942
|
-
if (!code || !TRANSIENT_RENAME_CODES.has(code) || i === delays.length) {
|
|
943
|
-
throw err;
|
|
944
|
-
}
|
|
945
|
-
await new Promise((resolve) => setTimeout(resolve, delays[i]));
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
throw lastErr;
|
|
949
|
-
}
|
|
950
972
|
|
|
951
973
|
// src/sdd/spec-store.ts
|
|
974
|
+
init_atomic_write();
|
|
952
975
|
var SpecStore = class {
|
|
953
976
|
baseDir;
|
|
954
977
|
indexPath;
|
|
@@ -1058,6 +1081,9 @@ var SpecStore = class {
|
|
|
1058
1081
|
await atomicWrite(this.indexPath, JSON.stringify(index, null, 2), { mode: 384 });
|
|
1059
1082
|
}
|
|
1060
1083
|
};
|
|
1084
|
+
|
|
1085
|
+
// src/sdd/task-graph-store.ts
|
|
1086
|
+
init_atomic_write();
|
|
1061
1087
|
function graphToJSON(graph) {
|
|
1062
1088
|
const serialisable = {
|
|
1063
1089
|
...graph,
|
|
@@ -1361,8 +1387,9 @@ var AISpecBuilder = class {
|
|
|
1361
1387
|
try {
|
|
1362
1388
|
const fsp3 = await import('fs/promises');
|
|
1363
1389
|
const path4 = await import('path');
|
|
1390
|
+
const { atomicWrite: atomicWrite2 } = await Promise.resolve().then(() => (init_atomic_write(), atomic_write_exports));
|
|
1364
1391
|
await fsp3.mkdir(path4.dirname(this.sessionPath), { recursive: true });
|
|
1365
|
-
await
|
|
1392
|
+
await atomicWrite2(this.sessionPath, JSON.stringify(this.session, null, 2));
|
|
1366
1393
|
} catch {
|
|
1367
1394
|
}
|
|
1368
1395
|
}
|
|
@@ -1390,9 +1417,16 @@ var AISpecBuilder = class {
|
|
|
1390
1417
|
} catch {
|
|
1391
1418
|
}
|
|
1392
1419
|
}
|
|
1393
|
-
/** Auto-save helper — calls saveSession() but never throws.
|
|
1420
|
+
/** Auto-save helper — calls saveSession() but never throws.
|
|
1421
|
+
* Failures are surfaced via process.emitWarning so a persistent
|
|
1422
|
+
* ENOSPC / EACCES doesn't silently strand session edits in memory. */
|
|
1394
1423
|
autoSave() {
|
|
1395
|
-
this.saveSession().catch(() => {
|
|
1424
|
+
this.saveSession().catch((err) => {
|
|
1425
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
1426
|
+
process.emitWarning(
|
|
1427
|
+
`SpecBuilder autoSave failed: ${detail}`,
|
|
1428
|
+
"SpecBuilderWarning"
|
|
1429
|
+
);
|
|
1396
1430
|
});
|
|
1397
1431
|
}
|
|
1398
1432
|
// ── Session Lifecycle ─────────────────────────────────────────────────────
|