@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.
Files changed (59) hide show
  1. package/dist/{agent-bridge-B07AYFBk.d.ts → agent-bridge-BKNiE1VH.d.ts} +1 -1
  2. package/dist/{compactor-BWhJXxsW.d.ts → compactor-RIPuTtWK.d.ts} +1 -1
  3. package/dist/{config-BgM0BIpz.d.ts → config-BGGuP_Ar.d.ts} +1 -1
  4. package/dist/{context-CLZXPPYk.d.ts → context-CDRyrkKQ.d.ts} +7 -0
  5. package/dist/coordination/index.d.ts +9 -9
  6. package/dist/coordination/index.js +339 -80
  7. package/dist/coordination/index.js.map +1 -1
  8. package/dist/defaults/index.d.ts +20 -19
  9. package/dist/defaults/index.js +731 -180
  10. package/dist/defaults/index.js.map +1 -1
  11. package/dist/{events-qnDZbrtb.d.ts → events-DPQKFX7W.d.ts} +1 -1
  12. package/dist/execution/index.d.ts +152 -12
  13. package/dist/execution/index.js +474 -5
  14. package/dist/execution/index.js.map +1 -1
  15. package/dist/extension/index.d.ts +6 -6
  16. package/dist/extension/index.js +2 -1
  17. package/dist/extension/index.js.map +1 -1
  18. package/dist/goal-store-BQ3YX1h1.d.ts +75 -0
  19. package/dist/{index-DPLJw_ZI.d.ts → index-B0qTujQW.d.ts} +52 -5
  20. package/dist/{index-BDnUCRvL.d.ts → index-DkdRz6yK.d.ts} +351 -15
  21. package/dist/index.d.ts +109 -28
  22. package/dist/index.js +1143 -234
  23. package/dist/index.js.map +1 -1
  24. package/dist/infrastructure/index.d.ts +6 -6
  25. package/dist/kernel/index.d.ts +9 -9
  26. package/dist/{mcp-servers-CSMfaBuL.d.ts → mcp-servers-DBdh3cee.d.ts} +3 -3
  27. package/dist/models/index.d.ts +2 -2
  28. package/dist/models/index.js +2 -3
  29. package/dist/models/index.js.map +1 -1
  30. package/dist/{multi-agent-Cv8wk47i.d.ts → multi-agent-Cpp7FXUl.d.ts} +11 -3
  31. package/dist/observability/index.d.ts +2 -2
  32. package/dist/{path-resolver-DiCUvEg6.d.ts → path-resolver--g_hKJ7V.d.ts} +2 -2
  33. package/dist/{plan-templates-DaxTCPfk.d.ts → plan-templates-CKJs_sYh.d.ts} +9 -8
  34. package/dist/{provider-runner-3SHqk9zB.d.ts → provider-runner-hl4Il3xS.d.ts} +3 -3
  35. package/dist/{retry-policy-LLUxJmYY.d.ts → retry-policy-LKS8MHsB.d.ts} +1 -1
  36. package/dist/sdd/index.d.ts +6 -4
  37. package/dist/sdd/index.js +102 -68
  38. package/dist/sdd/index.js.map +1 -1
  39. package/dist/{secret-scrubber-Z_VXuXQT.d.ts → secret-scrubber-BzQR5BiL.d.ts} +1 -1
  40. package/dist/{secret-scrubber-BhJTNr9v.d.ts → secret-scrubber-CfMdAJ_l.d.ts} +1 -1
  41. package/dist/security/index.d.ts +3 -3
  42. package/dist/security/index.js +82 -82
  43. package/dist/security/index.js.map +1 -1
  44. package/dist/{selector-DB2-byKH.d.ts → selector-C7HqnZJU.d.ts} +1 -1
  45. package/dist/{session-reader-4jxsYLZ8.d.ts → session-reader-CzfRA6Vk.d.ts} +1 -1
  46. package/dist/skills/index.js +102 -38
  47. package/dist/skills/index.js.map +1 -1
  48. package/dist/storage/index.d.ts +6 -5
  49. package/dist/storage/index.js +131 -22
  50. package/dist/storage/index.js.map +1 -1
  51. package/dist/{system-prompt-DI4Dtc1I.d.ts → system-prompt-Dl2QY1_B.d.ts} +1 -1
  52. package/dist/{tool-executor-DSvmOBe6.d.ts → tool-executor-B03CRwu-.d.ts} +4 -4
  53. package/dist/types/index.d.ts +15 -15
  54. package/dist/types/index.js +100 -102
  55. package/dist/types/index.js.map +1 -1
  56. package/dist/utils/index.d.ts +1 -1
  57. package/dist/utils/index.js +5 -0
  58. package/dist/utils/index.js.map +1 -1
  59. 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
- import { randomUUID, randomBytes } from 'crypto';
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 fsp3.writeFile(this.sessionPath, JSON.stringify(this.session, null, 2), "utf8");
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 ─────────────────────────────────────────────────────