@skillsmith/core 0.5.7 → 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 (183) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/api/client.d.ts.map +1 -1
  4. package/dist/src/api/client.js +30 -0
  5. package/dist/src/api/client.js.map +1 -1
  6. package/dist/src/audit/exclusions.d.ts +67 -0
  7. package/dist/src/audit/exclusions.d.ts.map +1 -0
  8. package/dist/src/audit/exclusions.js +133 -0
  9. package/dist/src/audit/exclusions.js.map +1 -0
  10. package/dist/src/audit/exclusions.types.d.ts +45 -0
  11. package/dist/src/audit/exclusions.types.d.ts.map +1 -0
  12. package/dist/src/audit/exclusions.types.js +11 -0
  13. package/dist/src/audit/exclusions.types.js.map +1 -0
  14. package/dist/src/audit/index.d.ts +15 -0
  15. package/dist/src/audit/index.d.ts.map +1 -0
  16. package/dist/src/audit/index.js +14 -0
  17. package/dist/src/audit/index.js.map +1 -0
  18. package/dist/src/benchmarks/embeddingBenchmark.d.ts.map +1 -1
  19. package/dist/src/benchmarks/embeddingBenchmark.js +5 -2
  20. package/dist/src/benchmarks/embeddingBenchmark.js.map +1 -1
  21. package/dist/src/config/audit-mode.d.ts +71 -0
  22. package/dist/src/config/audit-mode.d.ts.map +1 -0
  23. package/dist/src/config/audit-mode.js +69 -0
  24. package/dist/src/config/audit-mode.js.map +1 -0
  25. package/dist/src/config/index.d.ts +13 -0
  26. package/dist/src/config/index.d.ts.map +1 -1
  27. package/dist/src/config/index.js +24 -0
  28. package/dist/src/config/index.js.map +1 -1
  29. package/dist/src/db/migration-runner.d.ts +9 -2
  30. package/dist/src/db/migration-runner.d.ts.map +1 -1
  31. package/dist/src/db/migration-runner.js +30 -3
  32. package/dist/src/db/migration-runner.js.map +1 -1
  33. package/dist/src/db/migration.d.ts.map +1 -1
  34. package/dist/src/db/migration.js +9 -1
  35. package/dist/src/db/migration.js.map +1 -1
  36. package/dist/src/db/migrations/v16-skill-source.d.ts +41 -0
  37. package/dist/src/db/migrations/v16-skill-source.d.ts.map +1 -0
  38. package/dist/src/db/migrations/v16-skill-source.js +87 -0
  39. package/dist/src/db/migrations/v16-skill-source.js.map +1 -0
  40. package/dist/src/db/schema-sql.d.ts +1 -1
  41. package/dist/src/db/schema-sql.d.ts.map +1 -1
  42. package/dist/src/db/schema-sql.js +2 -1
  43. package/dist/src/db/schema-sql.js.map +1 -1
  44. package/dist/src/db/schema.d.ts +9 -3
  45. package/dist/src/db/schema.d.ts.map +1 -1
  46. package/dist/src/db/schema.js +12 -2
  47. package/dist/src/db/schema.js.map +1 -1
  48. package/dist/src/embeddings/embedding-utils.d.ts +23 -0
  49. package/dist/src/embeddings/embedding-utils.d.ts.map +1 -1
  50. package/dist/src/embeddings/embedding-utils.js +39 -0
  51. package/dist/src/embeddings/embedding-utils.js.map +1 -1
  52. package/dist/src/embeddings/hnsw-search.d.ts +133 -0
  53. package/dist/src/embeddings/hnsw-search.d.ts.map +1 -0
  54. package/dist/src/embeddings/hnsw-search.js +387 -0
  55. package/dist/src/embeddings/hnsw-search.js.map +1 -0
  56. package/dist/src/embeddings/hnsw-store.d.ts +9 -3
  57. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -1
  58. package/dist/src/embeddings/hnsw-store.js +17 -7
  59. package/dist/src/embeddings/hnsw-store.js.map +1 -1
  60. package/dist/src/embeddings/hnsw-store.types.d.ts +17 -4
  61. package/dist/src/embeddings/hnsw-store.types.d.ts.map +1 -1
  62. package/dist/src/embeddings/hnsw-store.types.js.map +1 -1
  63. package/dist/src/embeddings/index.d.ts +50 -4
  64. package/dist/src/embeddings/index.d.ts.map +1 -1
  65. package/dist/src/embeddings/index.js +166 -24
  66. package/dist/src/embeddings/index.js.map +1 -1
  67. package/dist/src/errors.d.ts +1 -0
  68. package/dist/src/errors.d.ts.map +1 -1
  69. package/dist/src/errors.js +7 -0
  70. package/dist/src/errors.js.map +1 -1
  71. package/dist/src/index.d.ts +4 -1
  72. package/dist/src/index.d.ts.map +1 -1
  73. package/dist/src/index.js +5 -1
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/install/fan-out.d.ts +81 -0
  76. package/dist/src/install/fan-out.d.ts.map +1 -0
  77. package/dist/src/install/fan-out.js +236 -0
  78. package/dist/src/install/fan-out.js.map +1 -0
  79. package/dist/src/install/index.d.ts +16 -0
  80. package/dist/src/install/index.d.ts.map +1 -0
  81. package/dist/src/install/index.js +14 -0
  82. package/dist/src/install/index.js.map +1 -0
  83. package/dist/src/install/paths.d.ts +16 -0
  84. package/dist/src/install/paths.d.ts.map +1 -0
  85. package/dist/src/install/paths.js +56 -0
  86. package/dist/src/install/paths.js.map +1 -0
  87. package/dist/src/repositories/AdvisoryRepository.test.js +2 -2
  88. package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -1
  89. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  90. package/dist/src/repositories/SkillRepository.js +12 -4
  91. package/dist/src/repositories/SkillRepository.js.map +1 -1
  92. package/dist/src/search/hybrid.js +2 -2
  93. package/dist/src/search/hybrid.js.map +1 -1
  94. package/dist/src/security/pathValidation.d.ts +6 -1
  95. package/dist/src/security/pathValidation.d.ts.map +1 -1
  96. package/dist/src/security/pathValidation.js +6 -1
  97. package/dist/src/security/pathValidation.js.map +1 -1
  98. package/dist/src/services/skill-installation.service.d.ts.map +1 -1
  99. package/dist/src/services/skill-installation.service.js +4 -2
  100. package/dist/src/services/skill-installation.service.js.map +1 -1
  101. package/dist/src/skills/index-local.d.ts +107 -0
  102. package/dist/src/skills/index-local.d.ts.map +1 -0
  103. package/dist/src/skills/index-local.js +208 -0
  104. package/dist/src/skills/index-local.js.map +1 -0
  105. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  106. package/dist/src/sync/SyncEngine.js +20 -3
  107. package/dist/src/sync/SyncEngine.js.map +1 -1
  108. package/dist/src/types/skill.d.ts +19 -4
  109. package/dist/src/types/skill.d.ts.map +1 -1
  110. package/dist/src/types/skill.js.map +1 -1
  111. package/dist/tests/EmbeddingService.test.js +1 -1
  112. package/dist/tests/EmbeddingService.test.js.map +1 -1
  113. package/dist/tests/SkillVersionRepository.test.js +2 -2
  114. package/dist/tests/SkillVersionRepository.test.js.map +1 -1
  115. package/dist/tests/api/client.quota.test.d.ts +11 -0
  116. package/dist/tests/api/client.quota.test.d.ts.map +1 -0
  117. package/dist/tests/api/client.quota.test.js +142 -0
  118. package/dist/tests/api/client.quota.test.js.map +1 -0
  119. package/dist/tests/db/migration.test.js +13 -5
  120. package/dist/tests/db/migration.test.js.map +1 -1
  121. package/dist/tests/embeddings/hnsw-bench-gate.test.d.ts +15 -0
  122. package/dist/tests/embeddings/hnsw-bench-gate.test.d.ts.map +1 -0
  123. package/dist/tests/embeddings/hnsw-bench-gate.test.js +117 -0
  124. package/dist/tests/embeddings/hnsw-bench-gate.test.js.map +1 -0
  125. package/dist/tests/embeddings/hnsw-integration.test.d.ts +14 -0
  126. package/dist/tests/embeddings/hnsw-integration.test.d.ts.map +1 -0
  127. package/dist/tests/embeddings/hnsw-integration.test.js +160 -0
  128. package/dist/tests/embeddings/hnsw-integration.test.js.map +1 -0
  129. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.d.ts +15 -0
  130. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.d.ts.map +1 -0
  131. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.js +64 -0
  132. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.js.map +1 -0
  133. package/dist/tests/embeddings/seed-bench.d.ts +15 -0
  134. package/dist/tests/embeddings/seed-bench.d.ts.map +1 -0
  135. package/dist/tests/embeddings/seed-bench.js +61 -0
  136. package/dist/tests/embeddings/seed-bench.js.map +1 -0
  137. package/dist/tests/helpers/database.d.ts +11 -2
  138. package/dist/tests/helpers/database.d.ts.map +1 -1
  139. package/dist/tests/helpers/database.js +23 -7
  140. package/dist/tests/helpers/database.js.map +1 -1
  141. package/dist/tests/install/fan-out.test.d.ts +2 -0
  142. package/dist/tests/install/fan-out.test.d.ts.map +1 -0
  143. package/dist/tests/install/fan-out.test.js +238 -0
  144. package/dist/tests/install/fan-out.test.js.map +1 -0
  145. package/dist/tests/install/paths.test.d.ts +2 -0
  146. package/dist/tests/install/paths.test.d.ts.map +1 -0
  147. package/dist/tests/install/paths.test.js +79 -0
  148. package/dist/tests/install/paths.test.js.map +1 -0
  149. package/dist/tests/repositories/CoInstallRepository.test.js +2 -2
  150. package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -1
  151. package/dist/tests/repositories/SkillDependencyRepository.test.js +2 -2
  152. package/dist/tests/repositories/SkillDependencyRepository.test.js.map +1 -1
  153. package/dist/tests/schema.test.js +12 -0
  154. package/dist/tests/schema.test.js.map +1 -1
  155. package/dist/tests/skill-scanner/allowlist.test.js +27 -4
  156. package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
  157. package/dist/tests/unit/audit/exclusions.test.d.ts +7 -0
  158. package/dist/tests/unit/audit/exclusions.test.d.ts.map +1 -0
  159. package/dist/tests/unit/audit/exclusions.test.js +157 -0
  160. package/dist/tests/unit/audit/exclusions.test.js.map +1 -0
  161. package/dist/tests/unit/config/audit-mode.test.d.ts +11 -0
  162. package/dist/tests/unit/config/audit-mode.test.d.ts.map +1 -0
  163. package/dist/tests/unit/config/audit-mode.test.js +86 -0
  164. package/dist/tests/unit/config/audit-mode.test.js.map +1 -0
  165. package/dist/tests/unit/migrations/migration-v16.test.d.ts +11 -0
  166. package/dist/tests/unit/migrations/migration-v16.test.d.ts.map +1 -0
  167. package/dist/tests/unit/migrations/migration-v16.test.js +134 -0
  168. package/dist/tests/unit/migrations/migration-v16.test.js.map +1 -0
  169. package/dist/tests/unit/migrations/v10-dependencies.test.js +2 -2
  170. package/dist/tests/unit/migrations/v10-dependencies.test.js.map +1 -1
  171. package/dist/tests/unit/services/skill-installation-extended.test.js +1 -1
  172. package/dist/tests/unit/services/skill-installation-extended.test.js.map +1 -1
  173. package/dist/tests/unit/services/skill-installation.service.test.js +1 -1
  174. package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
  175. package/dist/tests/unit/skills/index-local.test.d.ts +11 -0
  176. package/dist/tests/unit/skills/index-local.test.d.ts.map +1 -0
  177. package/dist/tests/unit/skills/index-local.test.js +88 -0
  178. package/dist/tests/unit/skills/index-local.test.js.map +1 -0
  179. package/dist/tests/unit/sync-engine.source-aware.test.d.ts +11 -0
  180. package/dist/tests/unit/sync-engine.source-aware.test.d.ts.map +1 -0
  181. package/dist/tests/unit/sync-engine.source-aware.test.js +147 -0
  182. package/dist/tests/unit/sync-engine.source-aware.test.js.map +1 -0
  183. package/package.json +29 -3
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @fileoverview Audit-mode resolver for SMI-4587 consumer namespace audit.
3
+ * @module @skillsmith/core/config/audit-mode
4
+ *
5
+ * Pure resolver mapping (tier, override) -> AuditMode for the inventory
6
+ * collision detector. Lives in core (not mcp-server) so the CLI, web
7
+ * surfaces, and MCP server can share one resolution path. Subpath export:
8
+ * `@skillsmith/core/config/audit-mode`.
9
+ *
10
+ * Resolution rules (decision #1 in plan):
11
+ * 1. If `override` is set and is a valid AuditMode, return it.
12
+ * 2. Otherwise return the tier default:
13
+ * - community / individual -> 'preventative'
14
+ * - team -> 'power_user'
15
+ * - enterprise -> 'governance'
16
+ * 3. Unknown tier -> 'preventative' (fail-safe).
17
+ *
18
+ * `'off'` is only reachable via an explicit override. The detector treats
19
+ * 'off' as a short-circuit (returns an empty InventoryAuditResult and
20
+ * skips telemetry).
21
+ */
22
+ const VALID_MODES = new Set([
23
+ 'preventative',
24
+ 'power_user',
25
+ 'governance',
26
+ 'off',
27
+ ]);
28
+ /**
29
+ * Type guard: returns true when `value` is a valid AuditMode.
30
+ */
31
+ export function isAuditMode(value) {
32
+ return typeof value === 'string' && VALID_MODES.has(value);
33
+ }
34
+ /**
35
+ * Resolve the effective audit-mode for a caller. Pure function — no IO.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * resolveAuditMode({ tier: 'community' }) // 'preventative'
40
+ * resolveAuditMode({ tier: 'team' }) // 'power_user'
41
+ * resolveAuditMode({ tier: 'enterprise' }) // 'governance'
42
+ * resolveAuditMode({ tier: 'team', override: 'off' }) // 'off'
43
+ * ```
44
+ */
45
+ export function resolveAuditMode(opts) {
46
+ if (opts.override != null && isAuditMode(opts.override)) {
47
+ return opts.override;
48
+ }
49
+ return tierDefault(opts.tier);
50
+ }
51
+ /**
52
+ * Tier-default mapping (decision #1). Exported so consumers can render
53
+ * "your default mode is X" hints without re-deriving the rule.
54
+ */
55
+ export function tierDefault(tier) {
56
+ switch (tier) {
57
+ case 'community':
58
+ case 'individual':
59
+ return 'preventative';
60
+ case 'team':
61
+ return 'power_user';
62
+ case 'enterprise':
63
+ return 'governance';
64
+ default:
65
+ // Unknown tier -> fail-safe to the cheapest mode.
66
+ return 'preventative';
67
+ }
68
+ }
69
+ //# sourceMappingURL=audit-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-mode.js","sourceRoot":"","sources":["../../../src/config/audit-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmBH,MAAM,WAAW,GAA2B,IAAI,GAAG,CAAC;IAClD,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,KAAK;CACN,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,KAAkB,CAAC,CAAA;AACzE,CAAC;AAgBD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA6B;IAC5D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,cAAc,CAAA;QACvB,KAAK,MAAM;YACT,OAAO,YAAY,CAAA;QACrB,KAAK,YAAY;YACf,OAAO,YAAY,CAAA;QACrB;YACE,kDAAkD;YAClD,OAAO,cAAc,CAAA;IACzB,CAAC;AACH,CAAC"}
@@ -71,6 +71,19 @@ export declare function getConfigPath(): string;
71
71
  * Creates ~/.skillsmith/ if it doesn't exist
72
72
  */
73
73
  export declare function ensureConfigDir(): void;
74
+ /**
75
+ * Get the cache directory path (~/.skillsmith/cache).
76
+ *
77
+ * SMI-4577: First-class artifact directory for cached HNSW indexes,
78
+ * model metadata, and similar machine-generated state. mkdir-on-first-call
79
+ * mirrors the pattern used by `getConfigDir()`/`ensureConfigDir()`.
80
+ *
81
+ * The pathValidation allow-list (`packages/core/src/security/pathValidation.ts`)
82
+ * already covers `~/.skillsmith` and therefore transitively allows this subtree.
83
+ *
84
+ * @returns Absolute path to ~/.skillsmith/cache/
85
+ */
86
+ export declare function getCacheDir(): string;
74
87
  /**
75
88
  * Load configuration from ~/.skillsmith/config.json
76
89
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,SAAS,CAAC,EAAE;QACV,gDAAgD;QAChD,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,oBAAoB;IACpB,IAAI,CAAC,EAAE;QACL,6BAA6B;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAuDD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAoB,GAC7C,IAAI,CAmCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAU9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,SAA+B,GAAG,MAAM,CAQ/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGxD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/D;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAgCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;CAC9C,CAAC,CA2CD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,SAAS,CAAC,EAAE;QACV,gDAAgD;QAChD,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,oBAAoB;IACpB,IAAI,CAAC,EAAE;QACL,6BAA6B;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AA0DD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAUpC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAoB,GAC7C,IAAI,CAmCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAU9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,SAA+B,GAAG,MAAM,CAQ/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGxD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/D;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAgCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;CAC9C,CAAC,CA2CD"}
@@ -37,6 +37,8 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync } from 'f
37
37
  const CONFIG_DIR = '.skillsmith';
38
38
  /** Default config file name */
39
39
  const CONFIG_FILE = 'config.json';
40
+ /** Default cache subdirectory name (sibling to config; SMI-4577) */
41
+ const CACHE_SUBDIR = 'cache';
40
42
  /** Lazy-loaded keytar module; null means unavailable */
41
43
  let keytarModule = undefined;
42
44
  /**
@@ -92,6 +94,28 @@ export function ensureConfigDir() {
92
94
  mkdirSync(configDir, { recursive: true, mode: 0o700 });
93
95
  }
94
96
  }
97
+ /**
98
+ * Get the cache directory path (~/.skillsmith/cache).
99
+ *
100
+ * SMI-4577: First-class artifact directory for cached HNSW indexes,
101
+ * model metadata, and similar machine-generated state. mkdir-on-first-call
102
+ * mirrors the pattern used by `getConfigDir()`/`ensureConfigDir()`.
103
+ *
104
+ * The pathValidation allow-list (`packages/core/src/security/pathValidation.ts`)
105
+ * already covers `~/.skillsmith` and therefore transitively allows this subtree.
106
+ *
107
+ * @returns Absolute path to ~/.skillsmith/cache/
108
+ */
109
+ export function getCacheDir() {
110
+ // SMI-4691: SKILLSMITH_CACHE_DIR_OVERRIDE allows test isolation on macOS where
111
+ // os.homedir() resolves via getpwuid() and ignores process.env.HOME mutations.
112
+ const override = process.env.SKILLSMITH_CACHE_DIR_OVERRIDE;
113
+ const cacheDir = override && override.length > 0 ? override : join(homedir(), CONFIG_DIR, CACHE_SUBDIR);
114
+ if (!existsSync(cacheDir)) {
115
+ mkdirSync(cacheDir, { recursive: true, mode: 0o700 });
116
+ }
117
+ return cacheDir;
118
+ }
95
119
  /**
96
120
  * Load configuration from ~/.skillsmith/config.json
97
121
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,19 @@
14
14
  */
15
15
  import type { Database } from './database-interface.js';
16
16
  /**
17
- * Migration definition for schema upgrades
17
+ * Migration definition for schema upgrades.
18
+ *
19
+ * A migration carries either a literal `sql` string OR an imperative `apply`
20
+ * function for cases where the change cannot be expressed as a single
21
+ * idempotent SQL blob (e.g. SMI-4665 v16 — SQLite cannot ALTER an existing
22
+ * CHECK constraint, so the table must be recreated, but only when the column
23
+ * is actually missing).
18
24
  */
19
25
  export interface Migration {
20
26
  version: number;
21
27
  description: string;
22
- sql: string;
28
+ sql?: string;
29
+ apply?: (db: Database) => void;
23
30
  }
24
31
  export declare const MIGRATIONS: Migration[];
25
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"migration-runner.d.ts","sourceRoot":"","sources":["../../../src/db/migration-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAcvD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ;AAID,eAAO,MAAM,UAAU,EAAE,SAAS,EAkEjC,CAAA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CASrD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAqBlD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAiCtD"}
1
+ {"version":3,"file":"migration-runner.d.ts","sourceRoot":"","sources":["../../../src/db/migration-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAevD;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CAC/B;AAID,eAAO,MAAM,UAAU,EAAE,SAAS,EAuEjC,CAAA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CASrD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAqBlD;AAoBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAqCtD"}
@@ -23,8 +23,9 @@ import { MIGRATION_V8_SQL } from './migrations/v8-co-installs.js';
23
23
  import { MIGRATION_V10_SQL } from './migrations/v10-dependencies.js';
24
24
  import { MIGRATION_V12_SQL } from './migrations/v12-risk-score-history.js';
25
25
  import { MIGRATION_V13_SQL } from './migrations/v13-team-tables.js';
26
+ import { applyMigrationV16 } from './migrations/v16-skill-source.js';
26
27
  import { SCHEMA_SQL, FTS5_MIGRATION_SQL } from './schema-sql.js';
27
- // Reserved: v14 (RBAC), v15 (integrations)
28
+ // Reserved: v14 (RBAC), v15 (integrations), v16 → SMI-4665
28
29
  export const MIGRATIONS = [
29
30
  {
30
31
  version: 1,
@@ -91,6 +92,11 @@ export const MIGRATIONS = [
91
92
  description: 'SMI-3896: visibility and team_id columns for private skills',
92
93
  sql: MIGRATION_V13_SQL,
93
94
  },
95
+ {
96
+ version: 16,
97
+ description: "SMI-4665: source column + extend trust_tier CHECK to allow 'local'",
98
+ apply: applyMigrationV16,
99
+ },
94
100
  ];
95
101
  /**
96
102
  * Get the current schema version from the database
@@ -117,7 +123,7 @@ export function runMigrations(db) {
117
123
  for (const migration of MIGRATIONS) {
118
124
  if (migration.version > currentVersion) {
119
125
  try {
120
- db.exec(migration.sql);
126
+ applyMigration(db, migration);
121
127
  }
122
128
  catch (error) {
123
129
  // Ignore "duplicate column" errors - column already exists from initial schema
@@ -132,6 +138,23 @@ export function runMigrations(db) {
132
138
  }
133
139
  return migrationsRun;
134
140
  }
141
+ /**
142
+ * Apply a single migration — either by executing its SQL or by calling its
143
+ * imperative `apply` function. SMI-4665: certain migrations (e.g. v16 CHECK
144
+ * constraint extension via table recreation) need imperative logic to remain
145
+ * idempotent, so the runner accepts either form.
146
+ */
147
+ function applyMigration(db, migration) {
148
+ if (migration.apply) {
149
+ migration.apply(db);
150
+ return;
151
+ }
152
+ if (migration.sql !== undefined) {
153
+ db.exec(migration.sql);
154
+ return;
155
+ }
156
+ throw new Error(`Migration v${migration.version} has neither sql nor apply — invalid definition`);
157
+ }
135
158
  /**
136
159
  * SMI-974: Run migrations with error handling for existing columns.
137
160
  *
@@ -145,7 +168,7 @@ export function runMigrationsSafe(db) {
145
168
  if (migration.version > currentVersion) {
146
169
  try {
147
170
  try {
148
- db.exec(migration.sql);
171
+ applyMigration(db, migration);
149
172
  }
150
173
  catch (error) {
151
174
  // Ignore "duplicate column" errors - column already exists
@@ -154,6 +177,10 @@ export function runMigrationsSafe(db) {
154
177
  throw error;
155
178
  }
156
179
  }
180
+ // SMI-4665: only stamp schema_version after a successful apply. If
181
+ // applyMigration threw a non-duplicate-column error we DO NOT advance
182
+ // the version — the next run will retry. Guards against a v16 SQL
183
+ // failure being silently masked.
157
184
  db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(migration.version);
158
185
  migrationsRun++;
159
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migration-runner.js","sourceRoot":"","sources":["../../../src/db/migration-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAWhE,2CAA2C;AAE3C,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,yBAAyB;QACtC,GAAG,EAAE,UAAU;KAChB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,6DAA6D;QAC1E,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,wDAAwD;QACrE,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,oDAAoD;QACjE,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,yDAAyD;QACtE,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,sEAAsE;QACnF,GAAG,EAAE,iBAAiB;KACvB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,2DAA2D;QACxE,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,gDAAgD;QAC7D,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,kEAAkE;QAC/E,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,yDAAyD;QACtE,GAAG,EAAE,iBAAiB;KACvB;IACD;QACE,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,oDAAoD;QACjE,GAAG,EAAE,iDAAiD;KACvD;IACD;QACE,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,wDAAwD;QACrE,GAAG,EAAE,iBAAiB;KACvB;IACD;QACE,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,6DAA6D;QAC1E,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,EAEtE,CAAA;QACb,OAAO,MAAM,EAAE,OAAO,IAAI,CAAC,CAAA;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAAY;IACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAA;IAC3C,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,+EAA+E;gBAC/E,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAClE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBACtC,MAAM,KAAK,CAAA;gBACb,CAAC;YACH,CAAC;YACD,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACpF,aAAa,EAAE,CAAA;QACjB,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAY;IAC5C,MAAM,cAAc,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAA;IAC3C,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,IAAI,CAAC;oBACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,2DAA2D;oBAC3D,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBAClE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;wBACtC,MAAM,KAAK,CAAA;oBACb,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;gBACpF,aAAa,EAAE,CAAA;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,yCAAyC;gBACzC,OAAO,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,OAAO,UAAU,EAAE,KAAK,CAAC,CAAA;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;IAED,OAAO,aAAa,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"migration-runner.js","sourceRoot":"","sources":["../../../src/db/migration-runner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/db/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKvE,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EAEX,YAAY,EACZ,gBAAgB,EACjB,MAAM,sBAAsB,CAAA;AAM7B,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,GAAG,mBAAmB,CAuD9E;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAmBhE;AAqBD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,YAAyC,GACjD,WAAW,CAiLb;AAMD,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CACnD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;CACzB,EACD,WAAW,GAAG,gBAAgB,CAC/B,CAcA;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,IAAI,CAkBN;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,EACpD,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAuBR;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,SAAK,GAAG,gBAAgB,EAAE,CAI/E"}
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/db/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKvE,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EAEX,YAAY,EACZ,gBAAgB,EACjB,MAAM,sBAAsB,CAAA;AAM7B,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,GAAG,mBAAmB,CA6D9E;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAmBhE;AAqBD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,YAAyC,GACjD,WAAW,CAiLb;AAMD,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CACnD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;CACzB,EACD,WAAW,GAAG,gBAAgB,CAC/B,CAcA;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,IAAI,CAkBN;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,EACpD,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAuBR;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,SAAK,GAAG,gBAAgB,EAAE,CAI/E"}
@@ -34,7 +34,15 @@ export function checkSchemaCompatibility(db) {
34
34
  };
35
35
  }
36
36
  if (currentVersion > expectedVersion) {
37
- const hasBreakingChanges = MIGRATIONS.slice(expectedVersion).some((m) => m.sql.includes('DROP') || m.sql.includes('RENAME'));
37
+ const hasBreakingChanges = MIGRATIONS.slice(expectedVersion).some((m) => {
38
+ // SMI-4665: migrations may carry an `apply` function instead of an `sql` string.
39
+ // Function-form migrations bypass this string-scan heuristic; v16 in particular
40
+ // performs a CREATE/DROP/RENAME table-recreation dance internally and has been
41
+ // verified safe by hand. If a future function-form migration is genuinely
42
+ // breaking, gate it here explicitly.
43
+ const sql = m.sql ?? '';
44
+ return sql.includes('DROP') || sql.includes('RENAME');
45
+ });
38
46
  if (hasBreakingChanges) {
39
47
  return {
40
48
  isCompatible: false,
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/db/migration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/db/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAwBvF,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E,MAAM,UAAU,wBAAwB,CAAC,EAAgB;IACvD,MAAM,cAAc,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAA;IAC3C,MAAM,eAAe,GAAG,cAAc,CAAA;IAEtC,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;QACvC,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,cAAc;YACd,eAAe;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,mCAAmC,cAAc,GAAG;SAC9D,CAAA;IACH,CAAC;IAED,IAAI,cAAc,GAAG,eAAe,EAAE,CAAC;QACrC,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,cAAc;YACd,eAAe;YACf,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,oBAAoB,cAAc,wBAAwB,eAAe,EAAE;SACrF,CAAA;IACH,CAAC;IAED,IAAI,cAAc,GAAG,eAAe,EAAE,CAAC;QACrC,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACtE,iFAAiF;YACjF,gFAAgF;YAChF,+EAA+E;YAC/E,0EAA0E;YAC1E,qCAAqC;YACrC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAA;YACvB,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO;gBACL,YAAY,EAAE,KAAK;gBACnB,cAAc;gBACd,eAAe;gBACf,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,oBAAoB,cAAc,+DAA+D,eAAe,4DAA4D;aACtL,CAAA;QACH,CAAC;QAED,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,cAAc;YACd,eAAe;YACf,MAAM,EAAE,mBAAmB;YAC3B,OAAO,EAAE,oBAAoB,cAAc,4BAA4B,eAAe,wEAAwE;SAC/J,CAAA;IACH,CAAC;IAED,OAAO;QACL,YAAY,EAAE,KAAK;QACnB,cAAc;QACd,eAAe;QACf,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,oCAAoC;KAC9C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EAAgB;IACxD,MAAM,aAAa,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAA;IAElD,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM;YACT,MAAK;QACP,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,aAAa,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,aAAa,uBAAuB,CAAC,CAAA;YAChF,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,mBAAmB;YACtB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,cAAc;YACjB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC;AAqBD,MAAM,UAAU,mBAAmB,CACjC,MAAoB,EACpB,MAAoB,EACpB,UAAwB,EAAE,QAAQ,EAAE,YAAY,EAAE;IAElD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAgB;QAC1B,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAC;KACZ,CAAA;IAED,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACjC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAC5D,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,oBAAoB,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,YAAY,GAAG,MAAM;SACxB,OAAO,CACN;kFAC4E,CAC7E;SACA,GAAG,EAAgB,CAAA;IAEtB,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAA;IAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;;;;GAIlC,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;;;;;GAKlC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAyB,CAAA;YAErE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpB,WAAW,CAAC,GAAG,CACb,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,CACZ,CAAA;gBACH,CAAC;gBACD,MAAM,CAAC,WAAW,EAAE,CAAA;YACtB,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAkB;oBAC9B,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,MAAM,EAAE,cAAc;oBACtB,WAAW,EAAE,KAAK,CAAC,UAAU;oBAC7B,WAAW,EAAE,QAAQ,CAAC,UAAU;iBACjC,CAAA;gBAED,IAAI,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAA;gBACxC,IAAI,OAAO,CAAC,UAAU;oBAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;gBAExE,QAAQ,iBAAiB,EAAE,CAAC;oBAC1B,KAAK,aAAa;wBAChB,QAAQ,CAAC,UAAU,GAAG,aAAa,CAAA;wBACnC,MAAM,CAAC,aAAa,EAAE,CAAA;wBACtB,MAAK;oBAEP,KAAK,aAAa;wBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;4BACpB,WAAW,CAAC,GAAG,CACb,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,EAAE,CACT,CAAA;wBACH,CAAC;wBACD,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAA;wBAC/B,MAAM,CAAC,aAAa,EAAE,CAAA;wBACtB,MAAK;oBAEP,KAAK,YAAY,CAAC,CAAC,CAAC;wBAClB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;wBACvD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;wBAC1D,IAAI,UAAU,GAAG,UAAU,EAAE,CAAC;4BAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gCACpB,WAAW,CAAC,GAAG,CACb,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,EAAE,CACT,CAAA;4BACH,CAAC;4BACD,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAA;4BAC/B,MAAM,CAAC,aAAa,EAAE,CAAA;wBACxB,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,UAAU,GAAG,aAAa,CAAA;4BACnC,MAAM,CAAC,aAAa,EAAE,CAAA;wBACxB,CAAC;wBACD,MAAK;oBACP,CAAC;oBAED,KAAK,cAAc,CAAC,CAAC,CAAC;wBACpB,MAAM,MAAM,GAAG;4BACb,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;4BACjC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;4BACtD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;4BACvC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;4BAC7C,aAAa,EACX,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa;4BAC7E,UAAU,EAAE,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU;4BACnF,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;4BACtD,UAAU,EACR,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gCACxD,CAAC,CAAC,KAAK,CAAC,UAAU;gCAClB,CAAC,CAAC,QAAQ,CAAC,UAAU;4BACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;4BACvC,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;yBAC3D,CAAA;wBACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;4BACpB,WAAW,CAAC,GAAG,CACb,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,KAAK,EACZ,KAAK,CAAC,EAAE,CACT,CAAA;wBACH,CAAC;wBACD,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAA;wBAC/B,MAAM,CAAC,aAAa,EAAE,CAAA;wBACtB,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,WAAW,EAAE,CAAA;IACf,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,WAAW,EAAE,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;IACxC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,MAAM,UAAU,aAAa,CAAC,EAAgB;IAY5C,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,iEAAiE,CAAC;SAC1E,GAAG,CAAC,SAAS,CAA6E,CAAA;IAE7F,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAuB,CAAA;IAEhG,OAAO;QACL,UAAU,EAAE,MAAM,EAAE,YAAY,IAAI,IAAI;QACxC,UAAU,EAAE,MAAM,EAAE,YAAY,IAAI,IAAI;QACxC,aAAa,EAAE,UAAU,CAAC,KAAK;QAC/B,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;KACpB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,EAAgB,EAChB,MAAsE;IAEtE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAE9D,EAAE,CAAC,OAAO,CACR;;;;GAID,CACA,CAAC,GAAG,CACH,GAAG,EACH,QAAQ,EACR,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,aAAa,EACzC,MAAM,CAAC,KAAK,IAAI,IAAI,EACpB,GAAG,EACH,SAAS,CACV,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,EAAgB,EAChB,MAAoD,EACpD,MAAoB,EACpB,KAAc;IAEd,MAAM,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IACzE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAEpC,EAAE,CAAC,OAAO,CACR;;;;GAID,CACA,CAAC,GAAG,CACH,EAAE,EACF,GAAG,EACH,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EACjC,MAAM,EACN,MAAM,EAAE,WAAW,IAAI,CAAC,EACxB,MAAM,EAAE,aAAa,IAAI,CAAC,EAC1B,MAAM,EAAE,aAAa,IAAI,CAAC,EAC1B,KAAK,IAAI,IAAI,EACb,MAAM,EAAE,QAAQ,IAAI,IAAI,CACzB,CAAA;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAgB,EAAE,KAAK,GAAG,EAAE;IACzD,OAAO,EAAE;SACN,OAAO,CAAC,6DAA6D,CAAC;SACtE,GAAG,CAAC,KAAK,CAAuB,CAAA;AACrC,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview Migration v16 — add `source` column + extend `trust_tier` CHECK
3
+ * @see SMI-4665: Filesystem-walking SKILL.md import command
4
+ *
5
+ * Adds two changes to the `skills` table:
6
+ *
7
+ * 1. `source TEXT NOT NULL DEFAULT 'registry' CHECK (source IN ('registry', 'local'))`
8
+ * — distinguishes registry-synced rows from filesystem-imported rows so
9
+ * `sync --force` can refuse to clobber locally-imported skills.
10
+ *
11
+ * NOTE: Migration v2 (SMI-974) added a free-form `source TEXT` column that
12
+ * held values like `'github'` for Phase-5 imports. The v16 recreation
13
+ * coerces any non-`'local'` legacy value to `'registry'` so the new CHECK
14
+ * constraint accepts existing rows. The semantic shift is intentional —
15
+ * callers that need the original import-source string can rely on
16
+ * `repo_url` (always set for github-sourced rows). See SMI-4665 retro.
17
+ *
18
+ * 2. Extend the `trust_tier` CHECK to allow `'local'`. Existing values:
19
+ * `verified`, `community`, `experimental`, `unknown`. Local skills
20
+ * surface as a distinct tier in search output instead of being indistinguishable
21
+ * from unscanned registry imports under `'unknown'`.
22
+ *
23
+ * SQLite cannot ALTER an existing CHECK constraint in place — the table is
24
+ * recreated using the standard rename/copy/drop dance, all wrapped in a
25
+ * transaction so a mid-process kill leaves either the old shape or the new
26
+ * shape, never a half-applied state.
27
+ *
28
+ * Idempotent: short-circuits when the `source` column already exists. Re-running
29
+ * the migration on a v16+ DB is a no-op. The duplicate-column guard in
30
+ * `runMigrations` / `runMigrationsSafe` adds defense-in-depth.
31
+ */
32
+ import type { Database } from '../database-interface.js';
33
+ /**
34
+ * Apply the v16 migration if not already present.
35
+ *
36
+ * Exported as a function rather than a SQL string because the table-recreation
37
+ * dance must short-circuit on an already-migrated DB (the canonical schema
38
+ * already includes `source` for fresh installs).
39
+ */
40
+ export declare function applyMigrationV16(db: Database): void;
41
+ //# sourceMappingURL=v16-skill-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v16-skill-source.d.ts","sourceRoot":"","sources":["../../../../src/db/migrations/v16-skill-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAwExD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAUpD"}
@@ -0,0 +1,87 @@
1
+ const RECREATE_TABLE_SQL = `
2
+ BEGIN;
3
+
4
+ CREATE TABLE skills_v16 (
5
+ id TEXT PRIMARY KEY,
6
+ name TEXT NOT NULL,
7
+ description TEXT,
8
+ author TEXT,
9
+ repo_url TEXT UNIQUE,
10
+ quality_score REAL CHECK(quality_score IS NULL OR (quality_score >= 0 AND quality_score <= 1)),
11
+ trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown', 'local')) DEFAULT 'unknown',
12
+ tags TEXT DEFAULT '[]',
13
+ risk_score INTEGER CHECK(risk_score IS NULL OR (risk_score >= 0 AND risk_score <= 100)),
14
+ security_findings_count INTEGER DEFAULT 0,
15
+ security_scanned_at TEXT,
16
+ security_passed INTEGER,
17
+ compatibility TEXT DEFAULT '[]',
18
+ content_hash TEXT,
19
+ visibility TEXT NOT NULL DEFAULT 'public',
20
+ team_id TEXT,
21
+ source TEXT NOT NULL DEFAULT 'registry' CHECK (source IN ('registry', 'local')),
22
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
23
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
24
+ );
25
+
26
+ INSERT INTO skills_v16 (
27
+ id, name, description, author, repo_url, quality_score, trust_tier, tags,
28
+ risk_score, security_findings_count, security_scanned_at, security_passed,
29
+ compatibility, content_hash, visibility, team_id,
30
+ created_at, updated_at
31
+ )
32
+ SELECT
33
+ id, name, description, author, repo_url, quality_score, trust_tier, tags,
34
+ risk_score, security_findings_count, security_scanned_at, security_passed,
35
+ compatibility, content_hash, visibility, team_id,
36
+ created_at, updated_at
37
+ FROM skills;
38
+
39
+ DROP TABLE skills;
40
+ ALTER TABLE skills_v16 RENAME TO skills;
41
+
42
+ CREATE INDEX IF NOT EXISTS idx_skills_author ON skills(author);
43
+ CREATE INDEX IF NOT EXISTS idx_skills_trust_tier ON skills(trust_tier);
44
+ CREATE INDEX IF NOT EXISTS idx_skills_quality_score ON skills(quality_score);
45
+ CREATE INDEX IF NOT EXISTS idx_skills_updated_at ON skills(updated_at);
46
+ CREATE INDEX IF NOT EXISTS idx_skills_created_at ON skills(created_at);
47
+ CREATE INDEX IF NOT EXISTS idx_skills_risk_score ON skills(risk_score);
48
+ CREATE INDEX IF NOT EXISTS idx_skills_security_passed ON skills(security_passed);
49
+ CREATE INDEX IF NOT EXISTS idx_skills_source ON skills(source);
50
+
51
+ CREATE TRIGGER IF NOT EXISTS skills_ai AFTER INSERT ON skills BEGIN
52
+ INSERT INTO skills_fts(rowid, name, description, tags, author)
53
+ VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);
54
+ END;
55
+
56
+ CREATE TRIGGER IF NOT EXISTS skills_ad AFTER DELETE ON skills BEGIN
57
+ INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)
58
+ VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);
59
+ END;
60
+
61
+ CREATE TRIGGER IF NOT EXISTS skills_au AFTER UPDATE ON skills BEGIN
62
+ INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)
63
+ VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);
64
+ INSERT INTO skills_fts(rowid, name, description, tags, author)
65
+ VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);
66
+ END;
67
+
68
+ COMMIT;
69
+ `;
70
+ /**
71
+ * Apply the v16 migration if not already present.
72
+ *
73
+ * Exported as a function rather than a SQL string because the table-recreation
74
+ * dance must short-circuit on an already-migrated DB (the canonical schema
75
+ * already includes `source` for fresh installs).
76
+ */
77
+ export function applyMigrationV16(db) {
78
+ const probe = db
79
+ .prepare("SELECT 1 AS hit FROM pragma_table_info('skills') WHERE name = 'source'")
80
+ .get();
81
+ if (probe) {
82
+ // Column already exists — fresh DB or v16 already applied. No-op.
83
+ return;
84
+ }
85
+ db.exec(RECREATE_TABLE_SQL);
86
+ }
87
+ //# sourceMappingURL=v16-skill-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v16-skill-source.js","sourceRoot":"","sources":["../../../../src/db/migrations/v16-skill-source.ts"],"names":[],"mappings":"AAiCA,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoE1B,CAAA;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAY;IAC5C,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CAAC,wEAAwE,CAAC;SACjF,GAAG,EAAiC,CAAA;IACvC,IAAI,KAAK,EAAE,CAAC;QACV,kEAAkE;QAClE,OAAM;IACR,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAC7B,CAAC"}
@@ -7,7 +7,7 @@
7
7
  /**
8
8
  * SQL statements for creating the database schema
9
9
  */
10
- export declare const SCHEMA_SQL = "\n-- Enable WAL mode for better concurrent performance\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = NORMAL;\nPRAGMA cache_size = -64000; -- 64MB cache\nPRAGMA temp_store = MEMORY;\n\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skills table - main storage for discovered skills\nCREATE TABLE IF NOT EXISTS skills (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n description TEXT,\n author TEXT,\n repo_url TEXT UNIQUE,\n quality_score REAL CHECK(quality_score IS NULL OR (quality_score >= 0 AND quality_score <= 1)),\n trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown')) DEFAULT 'unknown',\n tags TEXT DEFAULT '[]', -- JSON array of tags\n risk_score INTEGER CHECK(risk_score IS NULL OR (risk_score >= 0 AND risk_score <= 100)), -- SMI-825\n security_findings_count INTEGER DEFAULT 0,\n security_scanned_at TEXT,\n security_passed INTEGER, -- boolean: 1 = passed, 0 = failed, NULL = not scanned\n compatibility TEXT DEFAULT '[]', -- SMI-2760: JSON array of IDE/LLM/platform slugs\n content_hash TEXT, -- SMI-3510: SHA-256 hash of SKILL.md for tamper detection\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- FTS5 virtual table for full-text search with BM25 ranking\nCREATE VIRTUAL TABLE IF NOT EXISTS skills_fts USING fts5(\n name,\n description,\n tags,\n author,\n content='skills',\n content_rowid='rowid',\n tokenize='porter unicode61'\n);\n\n-- Triggers to keep FTS index in sync with skills table\nCREATE TRIGGER IF NOT EXISTS skills_ai AFTER INSERT ON skills BEGIN\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_ad AFTER DELETE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_au AFTER UPDATE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\n-- Sources table - tracks where skills are discovered from\nCREATE TABLE IF NOT EXISTS sources (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('github', 'gitlab', 'local', 'registry')),\n url TEXT NOT NULL UNIQUE,\n last_sync_at TEXT,\n is_active INTEGER NOT NULL DEFAULT 1,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Categories table - hierarchical organization of skills\nCREATE TABLE IF NOT EXISTS categories (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n parent_id TEXT REFERENCES categories(id) ON DELETE SET NULL,\n skill_count INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skill-Category junction table\nCREATE TABLE IF NOT EXISTS skill_categories (\n skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,\n category_id TEXT NOT NULL REFERENCES categories(id) ON DELETE CASCADE,\n PRIMARY KEY (skill_id, category_id)\n);\n\n-- Cache table for search results and API responses\nCREATE TABLE IF NOT EXISTS cache (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n expires_at INTEGER, -- Unix timestamp, NULL for no expiry\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes for common query patterns\nCREATE INDEX IF NOT EXISTS idx_skills_author ON skills(author);\nCREATE INDEX IF NOT EXISTS idx_skills_trust_tier ON skills(trust_tier);\nCREATE INDEX IF NOT EXISTS idx_skills_quality_score ON skills(quality_score);\nCREATE INDEX IF NOT EXISTS idx_skills_updated_at ON skills(updated_at);\nCREATE INDEX IF NOT EXISTS idx_skills_created_at ON skills(created_at);\nCREATE INDEX IF NOT EXISTS idx_skills_risk_score ON skills(risk_score);\nCREATE INDEX IF NOT EXISTS idx_skills_security_passed ON skills(security_passed);\nCREATE INDEX IF NOT EXISTS idx_sources_type ON sources(type);\nCREATE INDEX IF NOT EXISTS idx_sources_is_active ON sources(is_active);\nCREATE INDEX IF NOT EXISTS idx_categories_parent ON categories(parent_id);\nCREATE INDEX IF NOT EXISTS idx_cache_expires ON cache(expires_at);\n\n-- SMI-733: Audit logs table for security monitoring\n-- See: docs/security/index.md \u00A73 Audit Logging\nCREATE TABLE IF NOT EXISTS audit_logs (\n id TEXT PRIMARY KEY,\n event_type TEXT NOT NULL,\n timestamp TEXT NOT NULL DEFAULT (datetime('now')),\n actor TEXT,\n resource TEXT,\n action TEXT,\n result TEXT,\n metadata TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_audit_event_type ON audit_logs(event_type);\nCREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_logs(timestamp);\nCREATE INDEX IF NOT EXISTS idx_audit_resource ON audit_logs(resource);\nCREATE INDEX IF NOT EXISTS idx_audit_result ON audit_logs(result);\nCREATE INDEX IF NOT EXISTS idx_audit_actor ON audit_logs(actor);\n";
10
+ export declare const SCHEMA_SQL = "\n-- Enable WAL mode for better concurrent performance\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = NORMAL;\nPRAGMA cache_size = -64000; -- 64MB cache\nPRAGMA temp_store = MEMORY;\n\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skills table - main storage for discovered skills\nCREATE TABLE IF NOT EXISTS skills (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n description TEXT,\n author TEXT,\n repo_url TEXT UNIQUE,\n quality_score REAL CHECK(quality_score IS NULL OR (quality_score >= 0 AND quality_score <= 1)),\n trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown', 'local')) DEFAULT 'unknown', -- SMI-4665: added 'local' for filesystem-imported skills\n tags TEXT DEFAULT '[]', -- JSON array of tags\n risk_score INTEGER CHECK(risk_score IS NULL OR (risk_score >= 0 AND risk_score <= 100)), -- SMI-825\n security_findings_count INTEGER DEFAULT 0,\n security_scanned_at TEXT,\n security_passed INTEGER, -- boolean: 1 = passed, 0 = failed, NULL = not scanned\n compatibility TEXT DEFAULT '[]', -- SMI-2760: JSON array of IDE/LLM/platform slugs\n content_hash TEXT, -- SMI-3510: SHA-256 hash of SKILL.md for tamper detection\n source TEXT NOT NULL DEFAULT 'registry' CHECK (source IN ('registry', 'local')), -- SMI-4665: filesystem-imported rows opt out of sync overwrites\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- FTS5 virtual table for full-text search with BM25 ranking\nCREATE VIRTUAL TABLE IF NOT EXISTS skills_fts USING fts5(\n name,\n description,\n tags,\n author,\n content='skills',\n content_rowid='rowid',\n tokenize='porter unicode61'\n);\n\n-- Triggers to keep FTS index in sync with skills table\nCREATE TRIGGER IF NOT EXISTS skills_ai AFTER INSERT ON skills BEGIN\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_ad AFTER DELETE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS skills_au AFTER UPDATE ON skills BEGIN\n INSERT INTO skills_fts(skills_fts, rowid, name, description, tags, author)\n VALUES ('delete', OLD.rowid, OLD.name, OLD.description, OLD.tags, OLD.author);\n INSERT INTO skills_fts(rowid, name, description, tags, author)\n VALUES (NEW.rowid, NEW.name, NEW.description, NEW.tags, NEW.author);\nEND;\n\n-- Sources table - tracks where skills are discovered from\nCREATE TABLE IF NOT EXISTS sources (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('github', 'gitlab', 'local', 'registry')),\n url TEXT NOT NULL UNIQUE,\n last_sync_at TEXT,\n is_active INTEGER NOT NULL DEFAULT 1,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Categories table - hierarchical organization of skills\nCREATE TABLE IF NOT EXISTS categories (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n parent_id TEXT REFERENCES categories(id) ON DELETE SET NULL,\n skill_count INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Skill-Category junction table\nCREATE TABLE IF NOT EXISTS skill_categories (\n skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,\n category_id TEXT NOT NULL REFERENCES categories(id) ON DELETE CASCADE,\n PRIMARY KEY (skill_id, category_id)\n);\n\n-- Cache table for search results and API responses\nCREATE TABLE IF NOT EXISTS cache (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n expires_at INTEGER, -- Unix timestamp, NULL for no expiry\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes for common query patterns\nCREATE INDEX IF NOT EXISTS idx_skills_author ON skills(author);\nCREATE INDEX IF NOT EXISTS idx_skills_trust_tier ON skills(trust_tier);\nCREATE INDEX IF NOT EXISTS idx_skills_quality_score ON skills(quality_score);\nCREATE INDEX IF NOT EXISTS idx_skills_updated_at ON skills(updated_at);\nCREATE INDEX IF NOT EXISTS idx_skills_created_at ON skills(created_at);\nCREATE INDEX IF NOT EXISTS idx_skills_risk_score ON skills(risk_score);\nCREATE INDEX IF NOT EXISTS idx_skills_security_passed ON skills(security_passed);\nCREATE INDEX IF NOT EXISTS idx_sources_type ON sources(type);\nCREATE INDEX IF NOT EXISTS idx_sources_is_active ON sources(is_active);\nCREATE INDEX IF NOT EXISTS idx_categories_parent ON categories(parent_id);\nCREATE INDEX IF NOT EXISTS idx_cache_expires ON cache(expires_at);\n\n-- SMI-733: Audit logs table for security monitoring\n-- See: docs/security/index.md \u00A73 Audit Logging\nCREATE TABLE IF NOT EXISTS audit_logs (\n id TEXT PRIMARY KEY,\n event_type TEXT NOT NULL,\n timestamp TEXT NOT NULL DEFAULT (datetime('now')),\n actor TEXT,\n resource TEXT,\n action TEXT,\n result TEXT,\n metadata TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_audit_event_type ON audit_logs(event_type);\nCREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_logs(timestamp);\nCREATE INDEX IF NOT EXISTS idx_audit_resource ON audit_logs(resource);\nCREATE INDEX IF NOT EXISTS idx_audit_result ON audit_logs(result);\nCREATE INDEX IF NOT EXISTS idx_audit_actor ON audit_logs(actor);\n";
11
11
  /**
12
12
  * SMI-974: Migration SQL for adding FTS5 to existing database
13
13
  * Run separately as FTS5 creation can fail if table exists
@@ -1 +1 @@
1
- {"version":3,"file":"schema-sql.d.ts","sourceRoot":"","sources":["../../../src/db/schema-sql.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU,stKAkItB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wbAe9B,CAAA"}
1
+ {"version":3,"file":"schema-sql.d.ts","sourceRoot":"","sources":["../../../src/db/schema-sql.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU,86KAmItB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wbAe9B,CAAA"}
@@ -28,7 +28,7 @@ CREATE TABLE IF NOT EXISTS skills (
28
28
  author TEXT,
29
29
  repo_url TEXT UNIQUE,
30
30
  quality_score REAL CHECK(quality_score IS NULL OR (quality_score >= 0 AND quality_score <= 1)),
31
- trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown')) DEFAULT 'unknown',
31
+ trust_tier TEXT CHECK(trust_tier IN ('verified', 'community', 'experimental', 'unknown', 'local')) DEFAULT 'unknown', -- SMI-4665: added 'local' for filesystem-imported skills
32
32
  tags TEXT DEFAULT '[]', -- JSON array of tags
33
33
  risk_score INTEGER CHECK(risk_score IS NULL OR (risk_score >= 0 AND risk_score <= 100)), -- SMI-825
34
34
  security_findings_count INTEGER DEFAULT 0,
@@ -36,6 +36,7 @@ CREATE TABLE IF NOT EXISTS skills (
36
36
  security_passed INTEGER, -- boolean: 1 = passed, 0 = failed, NULL = not scanned
37
37
  compatibility TEXT DEFAULT '[]', -- SMI-2760: JSON array of IDE/LLM/platform slugs
38
38
  content_hash TEXT, -- SMI-3510: SHA-256 hash of SKILL.md for tamper detection
39
+ source TEXT NOT NULL DEFAULT 'registry' CHECK (source IN ('registry', 'local')), -- SMI-4665: filesystem-imported rows opt out of sync overwrites
39
40
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
40
41
  updated_at TEXT NOT NULL DEFAULT (datetime('now'))
41
42
  );
@@ -1 +1 @@
1
- {"version":3,"file":"schema-sql.js","sourceRoot":"","sources":["../../../src/db/schema-sql.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkIzB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;CAejC,CAAA"}
1
+ {"version":3,"file":"schema-sql.js","sourceRoot":"","sources":["../../../src/db/schema-sql.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmIzB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;CAejC,CAAA"}
@@ -16,7 +16,7 @@ export { SCHEMA_SQL, FTS5_MIGRATION_SQL } from './schema-sql.js';
16
16
  export { MIGRATIONS, getSchemaVersion, runMigrations, runMigrationsSafe, } from './migration-runner.js';
17
17
  export type { Migration } from './migration-runner.js';
18
18
  export type DatabaseType = Database;
19
- export declare const SCHEMA_VERSION = 13;
19
+ export declare const SCHEMA_VERSION = 16;
20
20
  /**
21
21
  * Initialize the database with the complete schema.
22
22
  *
@@ -36,9 +36,15 @@ export declare function createDatabase(path?: string): DatabaseType;
36
36
  */
37
37
  export declare function openDatabase(path: string): DatabaseType;
38
38
  /**
39
- * Close the database connection safely
39
+ * Close the database connection safely.
40
+ *
41
+ * SMI-4640: Tolerate `undefined` so a failed `beforeEach` (e.g. native-module
42
+ * load error in `createTestDatabase`) is reported as the original error instead
43
+ * of being shadowed by a `Cannot read properties of undefined (reading 'close')`
44
+ * cascade in `afterEach`. The underlying create-side error already carries the
45
+ * actionable diagnostic (see `createDatabaseSync`).
40
46
  */
41
- export declare function closeDatabase(db: DatabaseType): void;
47
+ export declare function closeDatabase(db: DatabaseType | undefined | null): void;
42
48
  /**
43
49
  * Create a new database connection asynchronously with WASM fallback
44
50
  * This initializes the full schema - use openDatabaseAsync for existing databases
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAOvD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAIhE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAKtD,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAA;AAKnC,eAAO,MAAM,cAAc,KAAK,CAAA;AAEhC;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAIvD;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAmB,GAAG,YAAY,CAUtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA2BvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAEpD;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAU1F;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA0B3E"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAOvD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAIhE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAKtD,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAA;AAOnC,eAAO,MAAM,cAAc,KAAK,CAAA;AAEhC;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAIvD;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAmB,GAAG,YAAY,CAUtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA2BvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAGvE;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAU1F;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA0B3E"}