@skillsmith/core 0.5.8 → 0.6.1

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 (202) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/audit/exclusions.d.ts +67 -0
  4. package/dist/src/audit/exclusions.d.ts.map +1 -0
  5. package/dist/src/audit/exclusions.js +133 -0
  6. package/dist/src/audit/exclusions.js.map +1 -0
  7. package/dist/src/audit/exclusions.types.d.ts +45 -0
  8. package/dist/src/audit/exclusions.types.d.ts.map +1 -0
  9. package/dist/src/audit/exclusions.types.js +11 -0
  10. package/dist/src/audit/exclusions.types.js.map +1 -0
  11. package/dist/src/audit/index.d.ts +15 -0
  12. package/dist/src/audit/index.d.ts.map +1 -0
  13. package/dist/src/audit/index.js +14 -0
  14. package/dist/src/audit/index.js.map +1 -0
  15. package/dist/src/benchmarks/embeddingBenchmark.d.ts.map +1 -1
  16. package/dist/src/benchmarks/embeddingBenchmark.js +5 -2
  17. package/dist/src/benchmarks/embeddingBenchmark.js.map +1 -1
  18. package/dist/src/config/audit-mode.d.ts +71 -0
  19. package/dist/src/config/audit-mode.d.ts.map +1 -0
  20. package/dist/src/config/audit-mode.js +69 -0
  21. package/dist/src/config/audit-mode.js.map +1 -0
  22. package/dist/src/config/index.d.ts +13 -0
  23. package/dist/src/config/index.d.ts.map +1 -1
  24. package/dist/src/config/index.js +24 -0
  25. package/dist/src/config/index.js.map +1 -1
  26. package/dist/src/db/migration-runner.d.ts +9 -2
  27. package/dist/src/db/migration-runner.d.ts.map +1 -1
  28. package/dist/src/db/migration-runner.js +36 -3
  29. package/dist/src/db/migration-runner.js.map +1 -1
  30. package/dist/src/db/migration.d.ts.map +1 -1
  31. package/dist/src/db/migration.js +9 -1
  32. package/dist/src/db/migration.js.map +1 -1
  33. package/dist/src/db/migrations/v16-skill-source.d.ts +41 -0
  34. package/dist/src/db/migrations/v16-skill-source.d.ts.map +1 -0
  35. package/dist/src/db/migrations/v16-skill-source.js +87 -0
  36. package/dist/src/db/migrations/v16-skill-source.js.map +1 -0
  37. package/dist/src/db/migrations/v17-curated-trust-tier.d.ts +44 -0
  38. package/dist/src/db/migrations/v17-curated-trust-tier.d.ts.map +1 -0
  39. package/dist/src/db/migrations/v17-curated-trust-tier.js +89 -0
  40. package/dist/src/db/migrations/v17-curated-trust-tier.js.map +1 -0
  41. package/dist/src/db/schema-sql.d.ts +1 -1
  42. package/dist/src/db/schema-sql.d.ts.map +1 -1
  43. package/dist/src/db/schema-sql.js +2 -1
  44. package/dist/src/db/schema-sql.js.map +1 -1
  45. package/dist/src/db/schema.d.ts +9 -3
  46. package/dist/src/db/schema.d.ts.map +1 -1
  47. package/dist/src/db/schema.js +13 -2
  48. package/dist/src/db/schema.js.map +1 -1
  49. package/dist/src/embeddings/embedding-utils.d.ts +23 -0
  50. package/dist/src/embeddings/embedding-utils.d.ts.map +1 -1
  51. package/dist/src/embeddings/embedding-utils.js +39 -0
  52. package/dist/src/embeddings/embedding-utils.js.map +1 -1
  53. package/dist/src/embeddings/hnsw-search.d.ts +133 -0
  54. package/dist/src/embeddings/hnsw-search.d.ts.map +1 -0
  55. package/dist/src/embeddings/hnsw-search.js +387 -0
  56. package/dist/src/embeddings/hnsw-search.js.map +1 -0
  57. package/dist/src/embeddings/hnsw-store.d.ts +9 -3
  58. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -1
  59. package/dist/src/embeddings/hnsw-store.js +17 -7
  60. package/dist/src/embeddings/hnsw-store.js.map +1 -1
  61. package/dist/src/embeddings/hnsw-store.types.d.ts +17 -4
  62. package/dist/src/embeddings/hnsw-store.types.d.ts.map +1 -1
  63. package/dist/src/embeddings/hnsw-store.types.js.map +1 -1
  64. package/dist/src/embeddings/index.d.ts +50 -4
  65. package/dist/src/embeddings/index.d.ts.map +1 -1
  66. package/dist/src/embeddings/index.js +166 -24
  67. package/dist/src/embeddings/index.js.map +1 -1
  68. package/dist/src/exports/services.d.ts +1 -1
  69. package/dist/src/exports/services.d.ts.map +1 -1
  70. package/dist/src/exports/services.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/indexer/SkillParser.d.ts +7 -70
  76. package/dist/src/indexer/SkillParser.d.ts.map +1 -1
  77. package/dist/src/indexer/SkillParser.helpers.d.ts +13 -0
  78. package/dist/src/indexer/SkillParser.helpers.d.ts.map +1 -0
  79. package/dist/src/indexer/SkillParser.helpers.js +90 -0
  80. package/dist/src/indexer/SkillParser.helpers.js.map +1 -0
  81. package/dist/src/indexer/SkillParser.js +5 -82
  82. package/dist/src/indexer/SkillParser.js.map +1 -1
  83. package/dist/src/indexer/SkillParser.types.d.ts +78 -0
  84. package/dist/src/indexer/SkillParser.types.d.ts.map +1 -0
  85. package/dist/src/indexer/SkillParser.types.js +9 -0
  86. package/dist/src/indexer/SkillParser.types.js.map +1 -0
  87. package/dist/src/install/fan-out.d.ts +81 -0
  88. package/dist/src/install/fan-out.d.ts.map +1 -0
  89. package/dist/src/install/fan-out.js +236 -0
  90. package/dist/src/install/fan-out.js.map +1 -0
  91. package/dist/src/install/index.d.ts +16 -0
  92. package/dist/src/install/index.d.ts.map +1 -0
  93. package/dist/src/install/index.js +14 -0
  94. package/dist/src/install/index.js.map +1 -0
  95. package/dist/src/install/paths.d.ts +16 -0
  96. package/dist/src/install/paths.d.ts.map +1 -0
  97. package/dist/src/install/paths.js +56 -0
  98. package/dist/src/install/paths.js.map +1 -0
  99. package/dist/src/repositories/AdvisoryRepository.test.js +2 -2
  100. package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -1
  101. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  102. package/dist/src/repositories/SkillRepository.js +12 -4
  103. package/dist/src/repositories/SkillRepository.js.map +1 -1
  104. package/dist/src/search/hybrid.js +2 -2
  105. package/dist/src/search/hybrid.js.map +1 -1
  106. package/dist/src/security/pathValidation.d.ts +6 -1
  107. package/dist/src/security/pathValidation.d.ts.map +1 -1
  108. package/dist/src/security/pathValidation.js +6 -1
  109. package/dist/src/security/pathValidation.js.map +1 -1
  110. package/dist/src/services/skill-installation.errors.d.ts +53 -0
  111. package/dist/src/services/skill-installation.errors.d.ts.map +1 -0
  112. package/dist/src/services/skill-installation.errors.js +63 -0
  113. package/dist/src/services/skill-installation.errors.js.map +1 -0
  114. package/dist/src/services/skill-installation.service.d.ts.map +1 -1
  115. package/dist/src/services/skill-installation.service.js +33 -35
  116. package/dist/src/services/skill-installation.service.js.map +1 -1
  117. package/dist/src/services/skill-installation.types.d.ts +16 -0
  118. package/dist/src/services/skill-installation.types.d.ts.map +1 -1
  119. package/dist/src/services/skill-installation.types.js.map +1 -1
  120. package/dist/src/skills/index-local.d.ts +107 -0
  121. package/dist/src/skills/index-local.d.ts.map +1 -0
  122. package/dist/src/skills/index-local.js +208 -0
  123. package/dist/src/skills/index-local.js.map +1 -0
  124. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  125. package/dist/src/sync/SyncEngine.js +20 -3
  126. package/dist/src/sync/SyncEngine.js.map +1 -1
  127. package/dist/src/types/skill.d.ts +20 -5
  128. package/dist/src/types/skill.d.ts.map +1 -1
  129. package/dist/src/types/skill.js.map +1 -1
  130. package/dist/tests/EmbeddingService.test.js +1 -1
  131. package/dist/tests/EmbeddingService.test.js.map +1 -1
  132. package/dist/tests/SkillVersionRepository.test.js +2 -2
  133. package/dist/tests/SkillVersionRepository.test.js.map +1 -1
  134. package/dist/tests/db/migration.test.js +13 -5
  135. package/dist/tests/db/migration.test.js.map +1 -1
  136. package/dist/tests/embeddings/hnsw-bench-gate.test.d.ts +15 -0
  137. package/dist/tests/embeddings/hnsw-bench-gate.test.d.ts.map +1 -0
  138. package/dist/tests/embeddings/hnsw-bench-gate.test.js +117 -0
  139. package/dist/tests/embeddings/hnsw-bench-gate.test.js.map +1 -0
  140. package/dist/tests/embeddings/hnsw-integration.test.d.ts +14 -0
  141. package/dist/tests/embeddings/hnsw-integration.test.d.ts.map +1 -0
  142. package/dist/tests/embeddings/hnsw-integration.test.js +160 -0
  143. package/dist/tests/embeddings/hnsw-integration.test.js.map +1 -0
  144. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.d.ts +15 -0
  145. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.d.ts.map +1 -0
  146. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.js +64 -0
  147. package/dist/tests/embeddings/hnsw-vs-brute-force.bench.js.map +1 -0
  148. package/dist/tests/embeddings/seed-bench.d.ts +15 -0
  149. package/dist/tests/embeddings/seed-bench.d.ts.map +1 -0
  150. package/dist/tests/embeddings/seed-bench.js +61 -0
  151. package/dist/tests/embeddings/seed-bench.js.map +1 -0
  152. package/dist/tests/helpers/database.d.ts +11 -2
  153. package/dist/tests/helpers/database.d.ts.map +1 -1
  154. package/dist/tests/helpers/database.js +23 -7
  155. package/dist/tests/helpers/database.js.map +1 -1
  156. package/dist/tests/install/fan-out.test.d.ts +2 -0
  157. package/dist/tests/install/fan-out.test.d.ts.map +1 -0
  158. package/dist/tests/install/fan-out.test.js +238 -0
  159. package/dist/tests/install/fan-out.test.js.map +1 -0
  160. package/dist/tests/install/paths.test.d.ts +2 -0
  161. package/dist/tests/install/paths.test.d.ts.map +1 -0
  162. package/dist/tests/install/paths.test.js +79 -0
  163. package/dist/tests/install/paths.test.js.map +1 -0
  164. package/dist/tests/repositories/CoInstallRepository.test.js +2 -2
  165. package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -1
  166. package/dist/tests/repositories/SkillDependencyRepository.test.js +2 -2
  167. package/dist/tests/repositories/SkillDependencyRepository.test.js.map +1 -1
  168. package/dist/tests/schema.test.js +12 -0
  169. package/dist/tests/schema.test.js.map +1 -1
  170. package/dist/tests/skill-scanner/allowlist.test.js +27 -4
  171. package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
  172. package/dist/tests/unit/audit/exclusions.test.d.ts +7 -0
  173. package/dist/tests/unit/audit/exclusions.test.d.ts.map +1 -0
  174. package/dist/tests/unit/audit/exclusions.test.js +157 -0
  175. package/dist/tests/unit/audit/exclusions.test.js.map +1 -0
  176. package/dist/tests/unit/config/audit-mode.test.d.ts +11 -0
  177. package/dist/tests/unit/config/audit-mode.test.d.ts.map +1 -0
  178. package/dist/tests/unit/config/audit-mode.test.js +86 -0
  179. package/dist/tests/unit/config/audit-mode.test.js.map +1 -0
  180. package/dist/tests/unit/migrations/migration-v16.test.d.ts +11 -0
  181. package/dist/tests/unit/migrations/migration-v16.test.d.ts.map +1 -0
  182. package/dist/tests/unit/migrations/migration-v16.test.js +139 -0
  183. package/dist/tests/unit/migrations/migration-v16.test.js.map +1 -0
  184. package/dist/tests/unit/migrations/migration-v17.test.d.ts +16 -0
  185. package/dist/tests/unit/migrations/migration-v17.test.d.ts.map +1 -0
  186. package/dist/tests/unit/migrations/migration-v17.test.js +256 -0
  187. package/dist/tests/unit/migrations/migration-v17.test.js.map +1 -0
  188. package/dist/tests/unit/migrations/v10-dependencies.test.js +2 -2
  189. package/dist/tests/unit/migrations/v10-dependencies.test.js.map +1 -1
  190. package/dist/tests/unit/services/skill-installation-extended.test.js +1 -1
  191. package/dist/tests/unit/services/skill-installation-extended.test.js.map +1 -1
  192. package/dist/tests/unit/services/skill-installation.service.test.js +113 -1
  193. package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
  194. package/dist/tests/unit/skills/index-local.test.d.ts +11 -0
  195. package/dist/tests/unit/skills/index-local.test.d.ts.map +1 -0
  196. package/dist/tests/unit/skills/index-local.test.js +88 -0
  197. package/dist/tests/unit/skills/index-local.test.js.map +1 -0
  198. package/dist/tests/unit/sync-engine.source-aware.test.d.ts +11 -0
  199. package/dist/tests/unit/sync-engine.source-aware.test.d.ts.map +1 -0
  200. package/dist/tests/unit/sync-engine.source-aware.test.js +147 -0
  201. package/dist/tests/unit/sync-engine.source-aware.test.js.map +1 -0
  202. package/package.json +35 -12
@@ -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;AAgBvD;;;;;;;;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,EA4EjC,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,10 @@ 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';
27
+ import { applyMigrationV17 } from './migrations/v17-curated-trust-tier.js';
26
28
  import { SCHEMA_SQL, FTS5_MIGRATION_SQL } from './schema-sql.js';
27
- // Reserved: v14 (RBAC), v15 (integrations)
29
+ // Reserved: v14 (RBAC), v15 (integrations), v16 → SMI-4665, v17 → SMI-4917
28
30
  export const MIGRATIONS = [
29
31
  {
30
32
  version: 1,
@@ -91,6 +93,16 @@ export const MIGRATIONS = [
91
93
  description: 'SMI-3896: visibility and team_id columns for private skills',
92
94
  sql: MIGRATION_V13_SQL,
93
95
  },
96
+ {
97
+ version: 16,
98
+ description: "SMI-4665: source column + extend trust_tier CHECK to allow 'local'",
99
+ apply: applyMigrationV16,
100
+ },
101
+ {
102
+ version: 17,
103
+ description: "SMI-4917: widen trust_tier CHECK to allow 'curated'",
104
+ apply: applyMigrationV17,
105
+ },
94
106
  ];
95
107
  /**
96
108
  * Get the current schema version from the database
@@ -117,7 +129,7 @@ export function runMigrations(db) {
117
129
  for (const migration of MIGRATIONS) {
118
130
  if (migration.version > currentVersion) {
119
131
  try {
120
- db.exec(migration.sql);
132
+ applyMigration(db, migration);
121
133
  }
122
134
  catch (error) {
123
135
  // Ignore "duplicate column" errors - column already exists from initial schema
@@ -132,6 +144,23 @@ export function runMigrations(db) {
132
144
  }
133
145
  return migrationsRun;
134
146
  }
147
+ /**
148
+ * Apply a single migration — either by executing its SQL or by calling its
149
+ * imperative `apply` function. SMI-4665: certain migrations (e.g. v16 CHECK
150
+ * constraint extension via table recreation) need imperative logic to remain
151
+ * idempotent, so the runner accepts either form.
152
+ */
153
+ function applyMigration(db, migration) {
154
+ if (migration.apply) {
155
+ migration.apply(db);
156
+ return;
157
+ }
158
+ if (migration.sql !== undefined) {
159
+ db.exec(migration.sql);
160
+ return;
161
+ }
162
+ throw new Error(`Migration v${migration.version} has neither sql nor apply — invalid definition`);
163
+ }
135
164
  /**
136
165
  * SMI-974: Run migrations with error handling for existing columns.
137
166
  *
@@ -145,7 +174,7 @@ export function runMigrationsSafe(db) {
145
174
  if (migration.version > currentVersion) {
146
175
  try {
147
176
  try {
148
- db.exec(migration.sql);
177
+ applyMigration(db, migration);
149
178
  }
150
179
  catch (error) {
151
180
  // Ignore "duplicate column" errors - column already exists
@@ -154,6 +183,10 @@ export function runMigrationsSafe(db) {
154
183
  throw error;
155
184
  }
156
185
  }
186
+ // SMI-4665: only stamp schema_version after a successful apply. If
187
+ // applyMigration threw a non-duplicate-column error we DO NOT advance
188
+ // the version — the next run will retry. Guards against a v16 SQL
189
+ // failure being silently masked.
157
190
  db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(migration.version);
158
191
  migrationsRun++;
159
192
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migration-runner.js","sourceRoot":"","sources":["../../../src/db/migration-runner.ts"],"names":[],"mappings":"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"}
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":"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"}
@@ -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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @fileoverview Migration v17 — widen the `trust_tier` CHECK to allow `'curated'`
3
+ * @see SMI-4917: First-time-install bug fixes
4
+ *
5
+ * The skill registry ships skills with `trust_tier = 'curated'` (introduced in
6
+ * SMI-2381 — third-party publishers manually opted in). The canonical `TrustTier`
7
+ * type and the API/Zod schema accept `'curated'`, but the SQLite CHECK constraint
8
+ * on the `skills` table omitted it (`schema-sql.ts`, `v16-skill-source.ts` allowed
9
+ * only `verified, community, experimental, unknown, local`). Every `'curated'` row
10
+ * therefore failed on insert, so `sync` silently dropped every curated skill.
11
+ *
12
+ * SQLite cannot ALTER an existing CHECK constraint in place — the table is
13
+ * recreated using the standard create/copy/drop/rename dance, all wrapped in a
14
+ * transaction so a mid-process kill leaves either the old shape or the new shape,
15
+ * never a half-applied state. This mirrors `applyMigrationV16` exactly; the column
16
+ * set, indexes, and FTS5 triggers are copied verbatim from v16 (v17 changes only
17
+ * the `trust_tier` CHECK list — no column added, no column dropped).
18
+ *
19
+ * R1 (FK inbound refs): `skill_categories`, `skill_versions`, etc. reference
20
+ * `skills(id)`. v16 ships the identical drop/rename inside a single transaction
21
+ * and is proven safe in production — v17 follows it exactly, with NO
22
+ * `PRAGMA foreign_keys` toggle. SQLite defers FK enforcement to statement
23
+ * boundaries within a transaction, so dropping and recreating `skills` in one
24
+ * `BEGIN; ... COMMIT;` is safe even with inbound FK rows present.
25
+ *
26
+ * Idempotent: v17 adds no column, so the probe inspects the CHECK text itself —
27
+ * if the `skills` DDL already contains `'curated'`, the migration is a no-op.
28
+ * Re-running on a v17+ DB (or a fresh install, whose base `SCHEMA_SQL` already
29
+ * includes `'curated'`) short-circuits. The duplicate-column guard in
30
+ * `runMigrations` / `runMigrationsSafe` does not apply here (no column change),
31
+ * so the probe is the sole idempotency mechanism — it is load-bearing.
32
+ */
33
+ import type { Database } from '../database-interface.js';
34
+ /**
35
+ * Apply the v17 migration if not already present.
36
+ *
37
+ * Exported as a function rather than a SQL string because the table-recreation
38
+ * dance must short-circuit on an already-widened DB. v17 adds no column, so the
39
+ * probe inspects the `skills` table DDL for the `'curated'` literal — if present,
40
+ * the constraint is already widened (fresh install or v17 already applied) and
41
+ * the migration is a no-op.
42
+ */
43
+ export declare function applyMigrationV17(db: Database): void;
44
+ //# sourceMappingURL=v17-curated-trust-tier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v17-curated-trust-tier.d.ts","sourceRoot":"","sources":["../../../../src/db/migrations/v17-curated-trust-tier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAwExD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAWpD"}
@@ -0,0 +1,89 @@
1
+ const RECREATE_TABLE_SQL = `
2
+ BEGIN;
3
+
4
+ CREATE TABLE skills_v17 (
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', 'curated', '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_v17 (
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, source,
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, source,
36
+ created_at, updated_at
37
+ FROM skills;
38
+
39
+ DROP TABLE skills;
40
+ ALTER TABLE skills_v17 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 v17 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-widened DB. v17 adds no column, so the
75
+ * probe inspects the `skills` table DDL for the `'curated'` literal — if present,
76
+ * the constraint is already widened (fresh install or v17 already applied) and
77
+ * the migration is a no-op.
78
+ */
79
+ export function applyMigrationV17(db) {
80
+ const ddl = db
81
+ .prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='skills'")
82
+ .get();
83
+ if (ddl && ddl.sql.includes("'curated'")) {
84
+ // CHECK already widened — fresh DB or v17 already applied. No-op.
85
+ return;
86
+ }
87
+ db.exec(RECREATE_TABLE_SQL);
88
+ }
89
+ //# sourceMappingURL=v17-curated-trust-tier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v17-curated-trust-tier.js","sourceRoot":"","sources":["../../../../src/db/migrations/v17-curated-trust-tier.ts"],"names":[],"mappings":"AAkCA,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoE1B,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAY;IAC5C,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,oEAAoE,CAAC;SAC7E,GAAG,EAAiC,CAAA;IAEvC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,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', 'curated', 'community', 'experimental', 'unknown', 'local')) DEFAULT 'unknown', -- SMI-4665: added 'local'; SMI-4917: added 'curated'\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,q7KAmItB,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', 'curated', 'community', 'experimental', 'unknown', 'local')) DEFAULT 'unknown', -- SMI-4665: added 'local'; SMI-4917: added 'curated'
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 = 17;
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;AAQnC,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"}