@ontrails/core 1.0.0-beta.13 → 1.0.0-beta.15

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 (287) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/README.md +19 -14
  4. package/dist/branded.d.ts +1 -1
  5. package/dist/branded.d.ts.map +1 -1
  6. package/dist/branded.js +1 -1
  7. package/dist/branded.js.map +1 -1
  8. package/dist/context.d.ts +13 -1
  9. package/dist/context.d.ts.map +1 -1
  10. package/dist/context.js +19 -3
  11. package/dist/context.js.map +1 -1
  12. package/dist/contour.d.ts +81 -0
  13. package/dist/contour.d.ts.map +1 -0
  14. package/dist/contour.js +176 -0
  15. package/dist/contour.js.map +1 -0
  16. package/dist/cross-schema.d.ts +18 -0
  17. package/dist/cross-schema.d.ts.map +1 -0
  18. package/dist/cross-schema.js +29 -0
  19. package/dist/cross-schema.js.map +1 -0
  20. package/dist/derive.d.ts +6 -0
  21. package/dist/derive.d.ts.map +1 -1
  22. package/dist/derive.js +29 -5
  23. package/dist/derive.js.map +1 -1
  24. package/dist/draft.d.ts +28 -0
  25. package/dist/draft.d.ts.map +1 -0
  26. package/dist/draft.js +157 -0
  27. package/dist/draft.js.map +1 -0
  28. package/dist/errors.d.ts +62 -4
  29. package/dist/errors.d.ts.map +1 -1
  30. package/dist/errors.js +44 -1
  31. package/dist/errors.js.map +1 -1
  32. package/dist/execute.d.ts +26 -9
  33. package/dist/execute.d.ts.map +1 -1
  34. package/dist/execute.js +441 -20
  35. package/dist/execute.js.map +1 -1
  36. package/dist/fire.d.ts +43 -0
  37. package/dist/fire.d.ts.map +1 -0
  38. package/dist/fire.js +185 -0
  39. package/dist/fire.js.map +1 -0
  40. package/dist/index.d.ts +33 -17
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +26 -12
  43. package/dist/index.js.map +1 -1
  44. package/dist/internal/cross-batch.d.ts +44 -0
  45. package/dist/internal/cross-batch.d.ts.map +1 -0
  46. package/dist/internal/cross-batch.js +58 -0
  47. package/dist/internal/cross-batch.js.map +1 -0
  48. package/dist/internal/fork-ctx.d.ts +41 -0
  49. package/dist/internal/fork-ctx.d.ts.map +1 -0
  50. package/dist/internal/fork-ctx.js +47 -0
  51. package/dist/internal/fork-ctx.js.map +1 -0
  52. package/dist/internal/signal-ref.d.ts +15 -0
  53. package/dist/internal/signal-ref.d.ts.map +1 -0
  54. package/dist/internal/signal-ref.js +41 -0
  55. package/dist/internal/signal-ref.js.map +1 -0
  56. package/dist/internal/topo-saves.d.ts +53 -0
  57. package/dist/internal/topo-saves.d.ts.map +1 -0
  58. package/dist/internal/topo-saves.js +449 -0
  59. package/dist/internal/topo-saves.js.map +1 -0
  60. package/dist/internal/topo-snapshots.d.ts +57 -0
  61. package/dist/internal/topo-snapshots.d.ts.map +1 -0
  62. package/dist/internal/topo-snapshots.js +372 -0
  63. package/dist/internal/topo-snapshots.js.map +1 -0
  64. package/dist/internal/topo-store-read.d.ts +70 -0
  65. package/dist/internal/topo-store-read.d.ts.map +1 -0
  66. package/dist/internal/topo-store-read.js +221 -0
  67. package/dist/internal/topo-store-read.js.map +1 -0
  68. package/dist/internal/topo-store.d.ts +26 -0
  69. package/dist/internal/topo-store.d.ts.map +1 -0
  70. package/dist/internal/topo-store.js +621 -0
  71. package/dist/internal/topo-store.js.map +1 -0
  72. package/dist/internal/tracing.d.ts +98 -0
  73. package/dist/internal/tracing.d.ts.map +1 -0
  74. package/dist/internal/tracing.js +102 -0
  75. package/dist/internal/tracing.js.map +1 -0
  76. package/dist/internal/trails-db.d.ts +16 -0
  77. package/dist/internal/trails-db.d.ts.map +1 -0
  78. package/dist/internal/trails-db.js +118 -0
  79. package/dist/internal/trails-db.js.map +1 -0
  80. package/dist/internal/zod-wrappers.d.ts +40 -0
  81. package/dist/internal/zod-wrappers.d.ts.map +1 -0
  82. package/dist/internal/zod-wrappers.js +59 -0
  83. package/dist/internal/zod-wrappers.js.map +1 -0
  84. package/dist/layer.d.ts +22 -5
  85. package/dist/layer.d.ts.map +1 -1
  86. package/dist/layer.js +20 -3
  87. package/dist/layer.js.map +1 -1
  88. package/dist/path-security.d.ts +1 -1
  89. package/dist/path-security.d.ts.map +1 -1
  90. package/dist/path-security.js +1 -1
  91. package/dist/path-security.js.map +1 -1
  92. package/dist/resilience.d.ts +1 -1
  93. package/dist/resilience.d.ts.map +1 -1
  94. package/dist/resilience.js +3 -3
  95. package/dist/resilience.js.map +1 -1
  96. package/dist/resource-config.d.ts +22 -0
  97. package/dist/resource-config.d.ts.map +1 -0
  98. package/dist/resource-config.js +210 -0
  99. package/dist/resource-config.js.map +1 -0
  100. package/dist/resource.d.ts +74 -0
  101. package/dist/resource.d.ts.map +1 -0
  102. package/dist/resource.js +61 -0
  103. package/dist/resource.js.map +1 -0
  104. package/dist/run.d.ts +4 -3
  105. package/dist/run.d.ts.map +1 -1
  106. package/dist/run.js +5 -4
  107. package/dist/run.js.map +1 -1
  108. package/dist/serialization.d.ts.map +1 -1
  109. package/dist/serialization.js +2 -1
  110. package/dist/serialization.js.map +1 -1
  111. package/dist/store/accessor-protocol.d.ts +51 -0
  112. package/dist/store/accessor-protocol.d.ts.map +1 -0
  113. package/dist/store/accessor-protocol.js +2 -0
  114. package/dist/store/accessor-protocol.js.map +1 -0
  115. package/dist/store/index.d.ts +2 -0
  116. package/dist/store/index.d.ts.map +1 -0
  117. package/dist/store/index.js +2 -0
  118. package/dist/store/index.js.map +1 -0
  119. package/dist/surface-filter.d.ts +13 -0
  120. package/dist/surface-filter.d.ts.map +1 -0
  121. package/dist/surface-filter.js +76 -0
  122. package/dist/surface-filter.js.map +1 -0
  123. package/dist/topo-store.d.ts +62 -0
  124. package/dist/topo-store.d.ts.map +1 -0
  125. package/dist/topo-store.js +319 -0
  126. package/dist/topo-store.js.map +1 -0
  127. package/dist/topo.d.ts +23 -9
  128. package/dist/topo.d.ts.map +1 -1
  129. package/dist/topo.js +175 -46
  130. package/dist/topo.js.map +1 -1
  131. package/dist/trail.d.ts +86 -19
  132. package/dist/trail.d.ts.map +1 -1
  133. package/dist/trail.js +59 -4
  134. package/dist/trail.js.map +1 -1
  135. package/dist/trails/derive-trail.d.ts +66 -0
  136. package/dist/trails/derive-trail.d.ts.map +1 -0
  137. package/dist/trails/derive-trail.js +378 -0
  138. package/dist/trails/derive-trail.js.map +1 -0
  139. package/dist/trails/index.d.ts +5 -0
  140. package/dist/trails/index.d.ts.map +1 -0
  141. package/dist/trails/index.js +3 -0
  142. package/dist/trails/index.js.map +1 -0
  143. package/dist/trails/ingest.d.ts +24 -0
  144. package/dist/trails/ingest.d.ts.map +1 -0
  145. package/dist/trails/ingest.js +63 -0
  146. package/dist/trails/ingest.js.map +1 -0
  147. package/dist/transport-error-map.d.ts +106 -0
  148. package/dist/transport-error-map.d.ts.map +1 -0
  149. package/dist/transport-error-map.js +24 -0
  150. package/dist/transport-error-map.js.map +1 -0
  151. package/dist/type-checks.test-d.d.ts +71 -0
  152. package/dist/type-checks.test-d.d.ts.map +1 -0
  153. package/dist/type-checks.test-d.js +12 -0
  154. package/dist/type-checks.test-d.js.map +1 -0
  155. package/dist/type-utils.d.ts +11 -2
  156. package/dist/type-utils.d.ts.map +1 -1
  157. package/dist/type-utils.js.map +1 -1
  158. package/dist/types.d.ts +113 -7
  159. package/dist/types.d.ts.map +1 -1
  160. package/dist/types.js.map +1 -1
  161. package/dist/validate-established-topo.d.ts +76 -0
  162. package/dist/validate-established-topo.d.ts.map +1 -0
  163. package/dist/validate-established-topo.js +43 -0
  164. package/dist/validate-established-topo.js.map +1 -0
  165. package/dist/validate-topo.d.ts.map +1 -1
  166. package/dist/validate-topo.js +27 -8
  167. package/dist/validate-topo.js.map +1 -1
  168. package/dist/workspace.d.ts +1 -1
  169. package/dist/workspace.d.ts.map +1 -1
  170. package/dist/workspace.js +1 -1
  171. package/dist/workspace.js.map +1 -1
  172. package/package.json +10 -1
  173. package/src/__tests__/branded.test.ts +5 -5
  174. package/src/__tests__/context.test.ts +3 -3
  175. package/src/__tests__/contour.test.ts +263 -0
  176. package/src/__tests__/derive-trail.test.ts +668 -0
  177. package/src/__tests__/derive.test.ts +58 -1
  178. package/src/__tests__/errors.test.ts +118 -0
  179. package/src/__tests__/execute.test.ts +1179 -141
  180. package/src/__tests__/fire.test.ts +1056 -0
  181. package/src/__tests__/fork-ctx.test.ts +83 -0
  182. package/src/__tests__/ingest.test.ts +191 -0
  183. package/src/__tests__/{gate.test.ts → layer.test.ts} +21 -21
  184. package/src/__tests__/path-security.test.ts +7 -7
  185. package/src/__tests__/resilience.test.ts +8 -8
  186. package/src/__tests__/resource.test.ts +204 -0
  187. package/src/__tests__/run.test.ts +13 -13
  188. package/src/__tests__/service-config.test.ts +28 -32
  189. package/src/__tests__/surface-filter.test.ts +196 -0
  190. package/src/__tests__/topo-store-read.test.ts +256 -0
  191. package/src/__tests__/topo-store.test.ts +869 -0
  192. package/src/__tests__/topo.test.ts +350 -54
  193. package/src/__tests__/trail.test.ts +189 -24
  194. package/src/__tests__/trails-db.test.ts +198 -0
  195. package/src/__tests__/transport-error-map.test.ts +82 -0
  196. package/src/__tests__/type-utils.test.ts +29 -1
  197. package/src/__tests__/validate-topo.test.ts +305 -16
  198. package/src/__tests__/workspace.test.ts +6 -6
  199. package/src/__tests__/zod-wrappers.test.ts +62 -0
  200. package/src/branded.ts +1 -1
  201. package/src/context.ts +24 -4
  202. package/src/contour.ts +344 -0
  203. package/src/cross-schema.ts +36 -0
  204. package/src/derive.ts +39 -8
  205. package/src/draft.ts +338 -0
  206. package/src/errors.ts +62 -18
  207. package/src/execute.ts +840 -29
  208. package/src/fire.ts +295 -0
  209. package/src/index.ts +142 -26
  210. package/src/internal/cross-batch.ts +77 -0
  211. package/src/internal/fork-ctx.ts +69 -0
  212. package/src/internal/signal-ref.ts +87 -0
  213. package/src/internal/topo-snapshots.ts +517 -0
  214. package/src/internal/topo-store-read.ts +481 -0
  215. package/src/internal/topo-store.ts +1192 -0
  216. package/src/internal/tracing.ts +187 -0
  217. package/src/internal/trails-db.ts +187 -0
  218. package/src/internal/zod-wrappers.ts +78 -0
  219. package/src/layer.ts +50 -0
  220. package/src/path-security.ts +1 -1
  221. package/src/resilience.ts +3 -3
  222. package/src/{provision-config.ts → resource-config.ts} +109 -123
  223. package/src/resource.ts +155 -0
  224. package/src/run.ts +5 -4
  225. package/src/serialization.ts +2 -0
  226. package/src/store/accessor-protocol.ts +56 -0
  227. package/src/store/index.ts +4 -0
  228. package/src/surface-filter.ts +182 -0
  229. package/src/topo-store.ts +510 -0
  230. package/src/topo.ts +328 -57
  231. package/src/trail.ts +199 -31
  232. package/src/trails/derive-trail.ts +842 -0
  233. package/src/trails/index.ts +9 -0
  234. package/src/trails/ingest.ts +146 -0
  235. package/src/transport-error-map.ts +56 -0
  236. package/src/type-checks.test-d.ts +106 -0
  237. package/src/type-utils.ts +17 -2
  238. package/src/types.ts +148 -11
  239. package/src/validate-established-topo.ts +63 -0
  240. package/src/validate-topo.ts +37 -9
  241. package/src/workspace.ts +1 -1
  242. package/tsconfig.tests.json +10 -0
  243. package/tsconfig.tsbuildinfo +1 -1
  244. package/dist/adapters.d.ts +0 -39
  245. package/dist/adapters.d.ts.map +0 -1
  246. package/dist/adapters.js +0 -2
  247. package/dist/adapters.js.map +0 -1
  248. package/dist/dispatch.d.ts +0 -27
  249. package/dist/dispatch.d.ts.map +0 -1
  250. package/dist/dispatch.js +0 -34
  251. package/dist/dispatch.js.map +0 -1
  252. package/dist/event.d.ts +0 -8
  253. package/dist/event.d.ts.map +0 -1
  254. package/dist/event.js +0 -7
  255. package/dist/event.js.map +0 -1
  256. package/dist/gate.d.ts +0 -17
  257. package/dist/gate.d.ts.map +0 -1
  258. package/dist/gate.js +0 -21
  259. package/dist/gate.js.map +0 -1
  260. package/dist/health.d.ts +0 -18
  261. package/dist/health.d.ts.map +0 -1
  262. package/dist/health.js +0 -5
  263. package/dist/health.js.map +0 -1
  264. package/dist/job.d.ts +0 -24
  265. package/dist/job.d.ts.map +0 -1
  266. package/dist/job.js +0 -17
  267. package/dist/job.js.map +0 -1
  268. package/dist/provision-config.d.ts +0 -22
  269. package/dist/provision-config.d.ts.map +0 -1
  270. package/dist/provision-config.js +0 -210
  271. package/dist/provision-config.js.map +0 -1
  272. package/dist/provision.d.ts +0 -71
  273. package/dist/provision.d.ts.map +0 -1
  274. package/dist/provision.js +0 -56
  275. package/dist/provision.js.map +0 -1
  276. package/dist/service-config.d.ts +0 -22
  277. package/dist/service-config.d.ts.map +0 -1
  278. package/dist/service-config.js +0 -210
  279. package/dist/service-config.js.map +0 -1
  280. package/dist/service.d.ts +0 -71
  281. package/dist/service.d.ts.map +0 -1
  282. package/dist/service.js +0 -56
  283. package/dist/service.js.map +0 -1
  284. package/src/__tests__/service.test.ts +0 -197
  285. package/src/event.ts +0 -15
  286. package/src/gate.ts +0 -44
  287. package/src/provision.ts +0 -148
@@ -0,0 +1,41 @@
1
+ const LATE_BOUND_SIGNAL_REF = Symbol('trails.late-bound-signal-ref');
2
+ const LATE_BOUND_SIGNAL_MARKER_PREFIX = '@@trails:late-bound-signal-ref:';
3
+ const defineLateBoundSignalRef = (value, ref) => {
4
+ Object.defineProperty(value, LATE_BOUND_SIGNAL_REF, {
5
+ configurable: false,
6
+ enumerable: false,
7
+ value: ref,
8
+ writable: false,
9
+ });
10
+ return value;
11
+ };
12
+ export const getLateBoundSignalRef = (signal) => signal === undefined
13
+ ? undefined
14
+ : signal[LATE_BOUND_SIGNAL_REF];
15
+ export const attachLateBoundSignalRef = (signal, ref) => Object.freeze(defineLateBoundSignalRef({
16
+ ...signal,
17
+ }, ref));
18
+ export const cloneSignalWithId = (signal, id) => {
19
+ const clone = {
20
+ ...signal,
21
+ id,
22
+ };
23
+ const ref = getLateBoundSignalRef(signal);
24
+ return Object.freeze(ref ? defineLateBoundSignalRef(clone, ref) : clone);
25
+ };
26
+ export const createLateBoundSignalMarker = (ref, displayId) => `${LATE_BOUND_SIGNAL_MARKER_PREFIX}${ref.token}:${displayId}`;
27
+ export const parseLateBoundSignalMarker = (value) => {
28
+ if (!value.startsWith(LATE_BOUND_SIGNAL_MARKER_PREFIX)) {
29
+ return null;
30
+ }
31
+ const remainder = value.slice(LATE_BOUND_SIGNAL_MARKER_PREFIX.length);
32
+ const separator = remainder.indexOf(':');
33
+ if (separator <= 0 || separator === remainder.length - 1) {
34
+ return null;
35
+ }
36
+ return {
37
+ displayId: remainder.slice(separator + 1),
38
+ token: remainder.slice(0, separator),
39
+ };
40
+ };
41
+ //# sourceMappingURL=signal-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-ref.js","sourceRoot":"","sources":["../../src/internal/signal-ref.ts"],"names":[],"mappings":"AAYA,MAAM,qBAAqB,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC;AACrE,MAAM,+BAA+B,GAAG,iCAAiC,CAAC;AAE1E,MAAM,wBAAwB,GAAG,CAC/B,KAAQ,EACR,GAAuB,EACpB,EAAE;IACL,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,qBAAqB,EAAE;QAClD,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,MAAyC,EACT,EAAE,CAClC,MAAM,KAAK,SAAS;IAClB,CAAC,CAAC,SAAS;IACX,CAAC,CAAG,MAAuC,CAAC,qBAAqB,CAEjD,CAAC;AAErB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,MAAiB,EACjB,GAAuB,EACZ,EAAE,CACb,MAAM,CAAC,MAAM,CACX,wBAAwB,CACtB;IACE,GAAG,MAAM;CACV,EACD,GAAG,CACJ,CACW,CAAC;AAEjB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAAiB,EACjB,EAAU,EACC,EAAE;IACb,MAAM,KAAK,GAAG;QACZ,GAAG,MAAM;QACT,EAAE;KACH,CAAC;IACF,MAAM,GAAG,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,MAAM,CAClB,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CACtC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,GAAuB,EACvB,SAAiB,EACT,EAAE,CAAC,GAAG,+BAA+B,GAAG,GAAG,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;AAE3E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAAa,EACiB,EAAE;IAChC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACzC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;KACrC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ export interface TopoSaveRecord {
3
+ readonly createdAt: string;
4
+ readonly gitDirty: boolean;
5
+ readonly gitSha?: string;
6
+ readonly id: string;
7
+ readonly resourceCount: number;
8
+ readonly signalCount: number;
9
+ readonly trailCount: number;
10
+ }
11
+ export interface CreateTopoSaveInput {
12
+ readonly createdAt?: string;
13
+ readonly gitDirty?: boolean;
14
+ readonly gitSha?: string;
15
+ readonly id?: string;
16
+ readonly resourceCount?: number;
17
+ readonly signalCount?: number;
18
+ readonly trailCount?: number;
19
+ }
20
+ export interface TopoPinRecord {
21
+ readonly createdAt: string;
22
+ readonly name: string;
23
+ readonly saveId: string;
24
+ }
25
+ export interface CreateTopoPinInput {
26
+ readonly createdAt?: string;
27
+ readonly name: string;
28
+ readonly saveId: string;
29
+ }
30
+ /**
31
+ * Current topo subsystem schema version. Exported so read-only callers can
32
+ * peek at `meta_schema_versions` and skip the write-mode migration escalation
33
+ * when the store is already current.
34
+ */
35
+ export declare const TOPO_SCHEMA_VERSION = 5;
36
+ export declare const ensureTopoHistorySchema: (db: Database) => void;
37
+ export declare const insertTopoSaveRecord: (db: Database, input?: CreateTopoSaveInput) => TopoSaveRecord;
38
+ export declare const createTopoSave: (db: Database, input?: CreateTopoSaveInput) => TopoSaveRecord;
39
+ export declare const pinTopoSave: (db: Database, input: CreateTopoPinInput) => TopoPinRecord;
40
+ export declare const listTopoSaves: (db: Database) => readonly TopoSaveRecord[];
41
+ export declare const listTopoPins: (db: Database) => readonly TopoPinRecord[];
42
+ export declare const countTopoSaves: (db: Database) => number;
43
+ export declare const countTopoPins: (db: Database) => number;
44
+ export declare const getTopoSave: (db: Database, id: string) => TopoSaveRecord | undefined;
45
+ export declare const getTopoPin: (db: Database, name: string) => TopoPinRecord | undefined;
46
+ export declare const countPrunableTopoSaves: (db: Database, options: {
47
+ readonly keep: number;
48
+ }) => number;
49
+ export declare const pruneUnpinnedTopoSaves: (db: Database, options: {
50
+ readonly keep: number;
51
+ }) => number;
52
+ export declare const unpinTopoSave: (db: Database, name: string) => boolean;
53
+ //# sourceMappingURL=topo-saves.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-saves.d.ts","sourceRoot":"","sources":["../../src/internal/topo-saves.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6J3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAiLD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,eAAO,MAAM,uBAAuB,GAAI,IAAI,QAAQ,KAAG,IAQtD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,IAAI,QAAQ,EACZ,QAAQ,mBAAmB,KAC1B,cA2BF,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,IAAI,QAAQ,EACZ,QAAQ,mBAAmB,KAC1B,cAGF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,IAAI,QAAQ,EACZ,OAAO,kBAAkB,KACxB,aAkBF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,IAAI,QAAQ,KAAG,SAAS,cAAc,EAYnE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,IAAI,QAAQ,KAAG,SAAS,aAAa,EAYjE,CAAC;AASF,eAAO,MAAM,cAAc,GAAI,IAAI,QAAQ,KAAG,MAK7C,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,IAAI,QAAQ,KAAG,MAQ5C,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,IAAI,QAAQ,EACZ,IAAI,MAAM,KACT,cAAc,GAAG,SAYnB,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,IAAI,QAAQ,EACZ,MAAM,MAAM,KACX,aAAa,GAAG,SAYlB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,QAAQ,EACZ,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACjC,MAkBF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,QAAQ,EACZ,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACjC,MAyBF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,KAAG,OAI1D,CAAC"}
@@ -0,0 +1,449 @@
1
+ import { ensureSubsystemSchema } from './trails-db.js';
2
+ const TOPO_SUBSYSTEM = 'topo';
3
+ const TOPO_TABLE_STATEMENTS = [
4
+ `CREATE TABLE IF NOT EXISTS topo_saves (
5
+ id TEXT PRIMARY KEY,
6
+ git_sha TEXT,
7
+ git_dirty INTEGER NOT NULL DEFAULT 0,
8
+ trail_count INTEGER NOT NULL DEFAULT 0,
9
+ signal_count INTEGER NOT NULL DEFAULT 0,
10
+ resource_count INTEGER NOT NULL DEFAULT 0,
11
+ created_at TEXT NOT NULL
12
+ )`,
13
+ `CREATE TABLE IF NOT EXISTS topo_pins (
14
+ name TEXT PRIMARY KEY,
15
+ save_id TEXT NOT NULL,
16
+ created_at TEXT NOT NULL,
17
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id)
18
+ )`,
19
+ `CREATE TABLE IF NOT EXISTS topo_trails (
20
+ id TEXT NOT NULL,
21
+ intent TEXT,
22
+ idempotent INTEGER NOT NULL DEFAULT 0,
23
+ has_output INTEGER NOT NULL DEFAULT 0,
24
+ has_examples INTEGER NOT NULL DEFAULT 0,
25
+ example_count INTEGER NOT NULL DEFAULT 0,
26
+ description TEXT,
27
+ meta TEXT,
28
+ save_id TEXT NOT NULL,
29
+ PRIMARY KEY (id, save_id),
30
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
31
+ )`,
32
+ `CREATE TABLE IF NOT EXISTS topo_crossings (
33
+ source_id TEXT NOT NULL,
34
+ target_id TEXT NOT NULL,
35
+ save_id TEXT NOT NULL,
36
+ PRIMARY KEY (source_id, target_id, save_id),
37
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
38
+ )`,
39
+ `CREATE TABLE IF NOT EXISTS topo_trail_resources (
40
+ trail_id TEXT NOT NULL,
41
+ resource_id TEXT NOT NULL,
42
+ save_id TEXT NOT NULL,
43
+ PRIMARY KEY (trail_id, resource_id, save_id),
44
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
45
+ )`,
46
+ `CREATE TABLE IF NOT EXISTS topo_resources (
47
+ id TEXT NOT NULL,
48
+ has_mock INTEGER NOT NULL DEFAULT 0,
49
+ has_health INTEGER NOT NULL DEFAULT 0,
50
+ save_id TEXT NOT NULL,
51
+ PRIMARY KEY (id, save_id),
52
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
53
+ )`,
54
+ `CREATE TABLE IF NOT EXISTS topo_signals (
55
+ id TEXT NOT NULL,
56
+ description TEXT,
57
+ save_id TEXT NOT NULL,
58
+ PRIMARY KEY (id, save_id),
59
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
60
+ )`,
61
+ `CREATE TABLE IF NOT EXISTS topo_trail_signals (
62
+ trail_id TEXT NOT NULL,
63
+ signal_id TEXT NOT NULL,
64
+ save_id TEXT NOT NULL,
65
+ PRIMARY KEY (trail_id, signal_id, save_id),
66
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
67
+ )`,
68
+ `CREATE TABLE IF NOT EXISTS topo_trailheads (
69
+ trail_id TEXT NOT NULL,
70
+ trailhead TEXT NOT NULL,
71
+ derived_name TEXT NOT NULL,
72
+ method TEXT,
73
+ save_id TEXT NOT NULL,
74
+ PRIMARY KEY (trail_id, trailhead, save_id),
75
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
76
+ )`,
77
+ `CREATE TABLE IF NOT EXISTS topo_examples (
78
+ id TEXT PRIMARY KEY,
79
+ trail_id TEXT NOT NULL,
80
+ ordinal INTEGER NOT NULL,
81
+ name TEXT NOT NULL,
82
+ description TEXT,
83
+ input TEXT NOT NULL,
84
+ expected TEXT,
85
+ error TEXT,
86
+ save_id TEXT NOT NULL,
87
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
88
+ )`,
89
+ `CREATE TABLE IF NOT EXISTS topo_schemas (
90
+ owner_id TEXT NOT NULL,
91
+ owner_kind TEXT NOT NULL,
92
+ schema_kind TEXT NOT NULL,
93
+ zod_hash TEXT NOT NULL,
94
+ json_schema TEXT NOT NULL,
95
+ save_id TEXT NOT NULL,
96
+ PRIMARY KEY (owner_id, owner_kind, schema_kind, save_id),
97
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
98
+ )`,
99
+ `CREATE TABLE IF NOT EXISTS topo_exports (
100
+ save_id TEXT PRIMARY KEY,
101
+ trailhead_map TEXT NOT NULL,
102
+ trailhead_hash TEXT NOT NULL,
103
+ serialized_lock TEXT NOT NULL,
104
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
105
+ )`,
106
+ `CREATE TABLE IF NOT EXISTS topo_trail_fires (
107
+ trail_id TEXT NOT NULL,
108
+ signal_id TEXT NOT NULL,
109
+ save_id TEXT NOT NULL,
110
+ PRIMARY KEY (trail_id, signal_id, save_id),
111
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
112
+ )`,
113
+ `CREATE TABLE IF NOT EXISTS topo_trail_on (
114
+ trail_id TEXT NOT NULL,
115
+ signal_id TEXT NOT NULL,
116
+ save_id TEXT NOT NULL,
117
+ PRIMARY KEY (trail_id, signal_id, save_id),
118
+ FOREIGN KEY (save_id) REFERENCES topo_saves(id) ON DELETE CASCADE
119
+ )`,
120
+ ];
121
+ const TOPO_INDEX_STATEMENTS = [
122
+ 'CREATE INDEX IF NOT EXISTS idx_topo_saves_created_at ON topo_saves(created_at DESC)',
123
+ 'CREATE INDEX IF NOT EXISTS idx_topo_pins_save_id ON topo_pins(save_id)',
124
+ 'CREATE INDEX IF NOT EXISTS idx_topo_trails_save_id ON topo_trails(save_id)',
125
+ 'CREATE INDEX IF NOT EXISTS idx_topo_crossings_save_id ON topo_crossings(save_id)',
126
+ 'CREATE INDEX IF NOT EXISTS idx_topo_trail_resources_save_id ON topo_trail_resources(save_id)',
127
+ 'CREATE INDEX IF NOT EXISTS idx_topo_resources_save_id ON topo_resources(save_id)',
128
+ 'CREATE INDEX IF NOT EXISTS idx_topo_signals_save_id ON topo_signals(save_id)',
129
+ 'CREATE INDEX IF NOT EXISTS idx_topo_trail_signals_save_id ON topo_trail_signals(save_id)',
130
+ 'CREATE INDEX IF NOT EXISTS idx_topo_trailheads_save_id ON topo_trailheads(save_id)',
131
+ 'CREATE UNIQUE INDEX IF NOT EXISTS idx_topo_examples_save_trail_ordinal ON topo_examples(save_id, trail_id, ordinal)',
132
+ 'CREATE INDEX IF NOT EXISTS idx_topo_schemas_save_id ON topo_schemas(save_id)',
133
+ `CREATE INDEX IF NOT EXISTS idx_topo_schemas_lookup
134
+ ON topo_schemas(owner_id, owner_kind, schema_kind, zod_hash)`,
135
+ 'CREATE INDEX IF NOT EXISTS idx_topo_trail_fires_save_id ON topo_trail_fires(save_id)',
136
+ 'CREATE INDEX IF NOT EXISTS idx_topo_trail_on_save_id ON topo_trail_on(save_id)',
137
+ ];
138
+ const rowToSave = (row) => ({
139
+ createdAt: row.created_at,
140
+ gitDirty: row.git_dirty === 1,
141
+ id: row.id,
142
+ resourceCount: row.resource_count,
143
+ signalCount: row.signal_count,
144
+ trailCount: row.trail_count,
145
+ ...(row.git_sha === null ? {} : { gitSha: row.git_sha }),
146
+ });
147
+ const rowToPin = (row) => ({
148
+ createdAt: row.created_at,
149
+ name: row.name,
150
+ saveId: row.save_id,
151
+ });
152
+ const tableExists = (db, tableName) => {
153
+ const row = db
154
+ .query("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?")
155
+ .get(tableName);
156
+ return row?.name === tableName;
157
+ };
158
+ const runStatements = (db, statements) => {
159
+ for (const statement of statements) {
160
+ db.run(statement);
161
+ }
162
+ };
163
+ const LEGACY_PROVISION_TABLES = [
164
+ 'topo_provisions',
165
+ 'topo_trail_provisions',
166
+ ];
167
+ const ALL_TOPO_TABLES = [
168
+ 'topo_exports',
169
+ 'topo_schemas',
170
+ 'topo_examples',
171
+ 'topo_trailheads',
172
+ 'topo_trail_signals',
173
+ 'topo_signals',
174
+ 'topo_trail_on',
175
+ 'topo_trail_fires',
176
+ 'topo_resources',
177
+ 'topo_trail_resources',
178
+ 'topo_crossings',
179
+ 'topo_trails',
180
+ 'topo_pins',
181
+ 'topo_saves',
182
+ ];
183
+ const notifyLegacyDrop = (savesCleared) => {
184
+ // biome-ignore lint/suspicious/noConsole: one-shot migration notice
185
+ console.info(savesCleared
186
+ ? 'topo store schema updated per ADR-0023; previous topo saves cleared'
187
+ : 'topo store schema updated per ADR-0023; legacy provision tables removed');
188
+ };
189
+ const topoSavesHasLegacyProvisionColumn = (db) => {
190
+ if (!tableExists(db, 'topo_saves')) {
191
+ return false;
192
+ }
193
+ const columns = db
194
+ .query('PRAGMA table_info(topo_saves)')
195
+ .all();
196
+ return columns.some((column) => column.name === 'provision_count');
197
+ };
198
+ const dropAllTopoTables = (db) => {
199
+ for (const table of ALL_TOPO_TABLES) {
200
+ db.run(`DROP TABLE IF EXISTS ${table}`);
201
+ }
202
+ };
203
+ const dropLegacyProvisionTables = (db) => {
204
+ let dropped = false;
205
+ for (const table of LEGACY_PROVISION_TABLES) {
206
+ if (tableExists(db, table)) {
207
+ db.run(`DROP TABLE IF EXISTS ${table}`);
208
+ dropped = true;
209
+ }
210
+ }
211
+ return dropped;
212
+ };
213
+ /**
214
+ * Drop legacy provision schema per ADR-0023.
215
+ *
216
+ * Returns `true` when anything legacy was dropped — either the orphan
217
+ * `topo_provisions` / `topo_trail_provisions` tables, or the full topo
218
+ * table set (because `topo_saves` still carried the legacy `provision_count`
219
+ * column). In either case the caller MUST recreate every table from scratch,
220
+ * regardless of the recorded subsystem version. The version-delta migration
221
+ * branches only add incremental tables and cannot be trusted to rebuild
222
+ * missing base tables.
223
+ *
224
+ * Pure-rename stores (v4 with `resource_count` already in place) return
225
+ * `false` and skip the rebuild path.
226
+ */
227
+ const dropLegacyProvisionSchema = (db) => {
228
+ const droppedLegacyTables = dropLegacyProvisionTables(db);
229
+ const hasLegacyColumn = topoSavesHasLegacyProvisionColumn(db);
230
+ if (hasLegacyColumn) {
231
+ dropAllTopoTables(db);
232
+ }
233
+ const anyDropHappened = droppedLegacyTables || hasLegacyColumn;
234
+ if (anyDropHappened) {
235
+ notifyLegacyDrop(hasLegacyColumn);
236
+ }
237
+ return anyDropHappened;
238
+ };
239
+ const createAllTopoTables = (db) => {
240
+ runStatements(db, TOPO_TABLE_STATEMENTS);
241
+ runStatements(db, TOPO_INDEX_STATEMENTS);
242
+ };
243
+ const createSchemaCacheAndExportTables = (db) => {
244
+ // v2→v3: add schema cache and export tables
245
+ runStatements(db, TOPO_TABLE_STATEMENTS.slice(10, 12));
246
+ runStatements(db, TOPO_INDEX_STATEMENTS.slice(10, 12));
247
+ };
248
+ const createSignalEdgeTables = (db) => {
249
+ // v3→v4: add persisted signal edges (fires/on)
250
+ runStatements(db, TOPO_TABLE_STATEMENTS.slice(12));
251
+ runStatements(db, TOPO_INDEX_STATEMENTS.slice(12));
252
+ };
253
+ const runVersionDeltaMigration = (db, currentVersion) => {
254
+ if (currentVersion < 2) {
255
+ createAllTopoTables(db);
256
+ return;
257
+ }
258
+ if (currentVersion === 2) {
259
+ createSchemaCacheAndExportTables(db);
260
+ }
261
+ if (currentVersion < 4) {
262
+ createSignalEdgeTables(db);
263
+ return;
264
+ }
265
+ // currentVersion >= 4: (re)create all tables with the new resource*
266
+ // names. IF NOT EXISTS guards keep this safe when the store was already
267
+ // consistent.
268
+ createAllTopoTables(db);
269
+ };
270
+ const runTopoMigration = (db, currentVersion) => {
271
+ // v4→v5 (ADR-0023): drop any legacy `provision*` tables and rebuild
272
+ // `topo_saves` when it still carries the legacy `provision_count`
273
+ // column. Runs before the create-if-not-exists statements below so
274
+ // the new schema lands cleanly. Rows are not migrated.
275
+ const legacyDropHappened = dropLegacyProvisionSchema(db);
276
+ // When any legacy artifact was dropped — orphan provision tables OR the
277
+ // full topo table set — the version-delta branches can't be trusted to
278
+ // recreate the base tables (v2/v3 deltas only add incremental tables and
279
+ // would leave the store permanently missing `topo_resources`,
280
+ // `topo_trail_resources`, etc.). Rebuild everything from scratch and skip
281
+ // the old deltas.
282
+ if (legacyDropHappened) {
283
+ createAllTopoTables(db);
284
+ return;
285
+ }
286
+ runVersionDeltaMigration(db, currentVersion);
287
+ };
288
+ /**
289
+ * Current topo subsystem schema version. Exported so read-only callers can
290
+ * peek at `meta_schema_versions` and skip the write-mode migration escalation
291
+ * when the store is already current.
292
+ */
293
+ export const TOPO_SCHEMA_VERSION = 5;
294
+ export const ensureTopoHistorySchema = (db) => {
295
+ ensureSubsystemSchema(db, {
296
+ migrate: (currentVersion) => {
297
+ runTopoMigration(db, currentVersion);
298
+ },
299
+ subsystem: TOPO_SUBSYSTEM,
300
+ version: TOPO_SCHEMA_VERSION,
301
+ });
302
+ };
303
+ export const insertTopoSaveRecord = (db, input) => {
304
+ const record = {
305
+ createdAt: input?.createdAt ?? new Date().toISOString(),
306
+ gitDirty: input?.gitDirty ?? false,
307
+ id: input?.id ?? Bun.randomUUIDv7(),
308
+ resourceCount: input?.resourceCount ?? 0,
309
+ signalCount: input?.signalCount ?? 0,
310
+ trailCount: input?.trailCount ?? 0,
311
+ ...(input?.gitSha === undefined ? {} : { gitSha: input.gitSha }),
312
+ };
313
+ db.run(`INSERT INTO topo_saves (
314
+ id, git_sha, git_dirty, trail_count, signal_count, resource_count, created_at
315
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)`, [
316
+ record.id,
317
+ record.gitSha ?? null,
318
+ record.gitDirty ? 1 : 0,
319
+ record.trailCount,
320
+ record.signalCount,
321
+ record.resourceCount,
322
+ record.createdAt,
323
+ ]);
324
+ return record;
325
+ };
326
+ export const createTopoSave = (db, input) => {
327
+ ensureTopoHistorySchema(db);
328
+ return insertTopoSaveRecord(db, input);
329
+ };
330
+ export const pinTopoSave = (db, input) => {
331
+ ensureTopoHistorySchema(db);
332
+ const record = {
333
+ createdAt: input.createdAt ?? new Date().toISOString(),
334
+ name: input.name,
335
+ saveId: input.saveId,
336
+ };
337
+ db.run(`INSERT INTO topo_pins (name, save_id, created_at) VALUES (?, ?, ?)
338
+ ON CONFLICT(name) DO UPDATE SET
339
+ save_id = excluded.save_id,
340
+ created_at = excluded.created_at`, [record.name, record.saveId, record.createdAt]);
341
+ return record;
342
+ };
343
+ export const listTopoSaves = (db) => {
344
+ if (!tableExists(db, 'topo_saves')) {
345
+ return [];
346
+ }
347
+ const rows = db
348
+ .query(`SELECT id, git_sha, git_dirty, trail_count, signal_count, resource_count, created_at
349
+ FROM topo_saves
350
+ ORDER BY created_at DESC, id DESC`)
351
+ .all();
352
+ return rows.map(rowToSave);
353
+ };
354
+ export const listTopoPins = (db) => {
355
+ if (!tableExists(db, 'topo_pins')) {
356
+ return [];
357
+ }
358
+ const rows = db
359
+ .query(`SELECT name, save_id, created_at
360
+ FROM topo_pins
361
+ ORDER BY created_at ASC, name ASC`)
362
+ .all();
363
+ return rows.map(rowToPin);
364
+ };
365
+ const countSaves = (db) => {
366
+ const row = db
367
+ .query('SELECT COUNT(*) as count FROM topo_saves')
368
+ .get();
369
+ return row?.count ?? 0;
370
+ };
371
+ export const countTopoSaves = (db) => {
372
+ if (!tableExists(db, 'topo_saves')) {
373
+ return 0;
374
+ }
375
+ return countSaves(db);
376
+ };
377
+ export const countTopoPins = (db) => {
378
+ if (!tableExists(db, 'topo_pins')) {
379
+ return 0;
380
+ }
381
+ const row = db
382
+ .query('SELECT COUNT(*) as count FROM topo_pins')
383
+ .get();
384
+ return row?.count ?? 0;
385
+ };
386
+ export const getTopoSave = (db, id) => {
387
+ if (!tableExists(db, 'topo_saves')) {
388
+ return undefined;
389
+ }
390
+ const row = db
391
+ .query(`SELECT id, git_sha, git_dirty, trail_count, signal_count, resource_count, created_at
392
+ FROM topo_saves
393
+ WHERE id = ?`)
394
+ .get(id);
395
+ return row === null || row === undefined ? undefined : rowToSave(row);
396
+ };
397
+ export const getTopoPin = (db, name) => {
398
+ if (!tableExists(db, 'topo_pins')) {
399
+ return undefined;
400
+ }
401
+ const row = db
402
+ .query(`SELECT name, save_id, created_at
403
+ FROM topo_pins
404
+ WHERE name = ?`)
405
+ .get(name);
406
+ return row === null || row === undefined ? undefined : rowToPin(row);
407
+ };
408
+ export const countPrunableTopoSaves = (db, options) => {
409
+ if (!tableExists(db, 'topo_saves') || !tableExists(db, 'topo_pins')) {
410
+ return 0;
411
+ }
412
+ const row = db
413
+ .query(`SELECT COUNT(*) as count
414
+ FROM (
415
+ SELECT save.id
416
+ FROM topo_saves save
417
+ LEFT JOIN topo_pins pin ON pin.save_id = save.id
418
+ WHERE pin.save_id IS NULL
419
+ ORDER BY save.created_at DESC, save.id DESC
420
+ LIMIT -1 OFFSET ?
421
+ )`)
422
+ .get(options.keep);
423
+ return row?.count ?? 0;
424
+ };
425
+ export const pruneUnpinnedTopoSaves = (db, options) => {
426
+ if (!tableExists(db, 'topo_saves') || !tableExists(db, 'topo_pins')) {
427
+ return 0;
428
+ }
429
+ if (countPrunableTopoSaves(db, options) === 0) {
430
+ return 0;
431
+ }
432
+ db.run(`DELETE FROM topo_saves
433
+ WHERE id IN (
434
+ SELECT save.id
435
+ FROM topo_saves save
436
+ LEFT JOIN topo_pins pin ON pin.save_id = save.id
437
+ WHERE pin.save_id IS NULL
438
+ ORDER BY save.created_at DESC, save.id DESC
439
+ LIMIT -1 OFFSET ?
440
+ )`, [options.keep]);
441
+ return (db.query('SELECT changes() as changes').get()
442
+ ?.changes ?? 0);
443
+ };
444
+ export const unpinTopoSave = (db, name) => {
445
+ ensureTopoHistorySchema(db);
446
+ const result = db.run('DELETE FROM topo_pins WHERE name = ?', [name]);
447
+ return result.changes > 0;
448
+ };
449
+ //# sourceMappingURL=topo-saves.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-saves.js","sourceRoot":"","sources":["../../src/internal/topo-saves.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ export interface TopoSnapshot {
3
+ readonly createdAt: string;
4
+ readonly gitDirty: boolean;
5
+ readonly gitSha?: string;
6
+ readonly id: string;
7
+ readonly pinnedAs?: string;
8
+ readonly resourceCount: number;
9
+ readonly signalCount: number;
10
+ readonly trailCount: number;
11
+ }
12
+ export interface CreateTopoSnapshotInput {
13
+ readonly createdAt?: string;
14
+ readonly gitDirty?: boolean;
15
+ readonly gitSha?: string;
16
+ readonly id?: string;
17
+ readonly resourceCount?: number;
18
+ readonly signalCount?: number;
19
+ readonly trailCount?: number;
20
+ }
21
+ export interface ListTopoSnapshotsOptions {
22
+ readonly before?: string;
23
+ readonly limit?: number;
24
+ readonly pinned?: boolean;
25
+ }
26
+ /**
27
+ * Current topo subsystem schema version.
28
+ *
29
+ * Version 8 adds `pattern TEXT` column to `topo_trails`.
30
+ *
31
+ * Version 7 defined the snapshot-first topo tables (`topo_snapshots`,
32
+ * `topo_surfaces`, and `snapshot_id` foreign keys) as the only supported
33
+ * schema. Older pre-release tables are ignored in place; we create the current
34
+ * tables and advance the subsystem version without translating or deleting
35
+ * legacy rows.
36
+ */
37
+ export declare const TOPO_SCHEMA_VERSION = 8;
38
+ export declare const ensureTopoSnapshotSchema: (db: Database) => void;
39
+ export declare const insertTopoSnapshotRecord: (db: Database, input?: CreateTopoSnapshotInput) => TopoSnapshot;
40
+ export declare const readTopoSnapshot: (db: Database, id: string) => TopoSnapshot | undefined;
41
+ export declare const readPinnedTopoSnapshot: (db: Database, name: string) => TopoSnapshot | undefined;
42
+ export declare const listTopoSnapshots: (db: Database, options?: ListTopoSnapshotsOptions) => readonly TopoSnapshot[];
43
+ export declare const countTopoSnapshots: (db: Database) => number;
44
+ export declare const countPinnedSnapshots: (db: Database) => number;
45
+ export declare const countPrunableSnapshots: (db: Database, options: {
46
+ readonly keep: number;
47
+ }) => number;
48
+ export declare const createTopoSnapshot: (db: Database, input?: CreateTopoSnapshotInput) => TopoSnapshot;
49
+ export declare const pinTopoSnapshot: (db: Database, input: {
50
+ readonly id: string;
51
+ readonly name: string;
52
+ }) => TopoSnapshot | undefined;
53
+ export declare const unpinTopoSnapshot: (db: Database, nameOrId: string) => TopoSnapshot | undefined;
54
+ export declare const pruneUnpinnedSnapshots: (db: Database, options: {
55
+ readonly keep: number;
56
+ }) => number;
57
+ //# sourceMappingURL=topo-snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-snapshots.d.ts","sourceRoot":"","sources":["../../src/internal/topo-snapshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAoJ7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAiCD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,eAAO,MAAM,wBAAwB,GAAI,IAAI,QAAQ,KAAG,IAWvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,IAAI,QAAQ,EACZ,QAAQ,uBAAuB,KAC9B,YA4BF,CAAC;AASF,eAAO,MAAM,gBAAgB,GAC3B,IAAI,QAAQ,EACZ,IAAI,MAAM,KACT,YAAY,GAAG,SAYjB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,QAAQ,EACZ,MAAM,MAAM,KACX,YAAY,GAAG,SAajB,CAAC;AAiFF,eAAO,MAAM,iBAAiB,GAC5B,IAAI,QAAQ,EACZ,UAAU,wBAAwB,KACjC,SAAS,YAAY,EAAsD,CAAC;AAW/E,eAAO,MAAM,kBAAkB,GAAI,IAAI,QAAQ,KAAG,MAKjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,IAAI,QAAQ,KAAG,MAKnD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,QAAQ,EACZ,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACjC,MAiBF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,IAAI,QAAQ,EACZ,QAAQ,uBAAuB,KAC9B,YAGF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,IAAI,QAAQ,EACZ,OAAO;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpD,YAAY,GAAG,SAmBjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,IAAI,QAAQ,EACZ,UAAU,MAAM,KACf,YAAY,GAAG,SAgBjB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,QAAQ,EACZ,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACjC,MAwBF,CAAC"}