@skillsmith/core 0.5.4 → 0.5.5

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 (107) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/api/client.d.ts +4 -66
  4. package/dist/src/api/client.d.ts.map +1 -1
  5. package/dist/src/api/client.events.d.ts.map +1 -1
  6. package/dist/src/api/client.events.js +10 -1
  7. package/dist/src/api/client.events.js.map +1 -1
  8. package/dist/src/api/client.js +40 -66
  9. package/dist/src/api/client.js.map +1 -1
  10. package/dist/src/api/client.token-refresh.d.ts +3 -0
  11. package/dist/src/api/client.token-refresh.d.ts.map +1 -0
  12. package/dist/src/api/client.token-refresh.js +19 -0
  13. package/dist/src/api/client.token-refresh.js.map +1 -0
  14. package/dist/src/api/client.token-refresh.test.d.ts +2 -0
  15. package/dist/src/api/client.token-refresh.test.d.ts.map +1 -0
  16. package/dist/src/api/client.token-refresh.test.js +73 -0
  17. package/dist/src/api/client.token-refresh.test.js.map +1 -0
  18. package/dist/src/api/client.types.d.ts +2 -0
  19. package/dist/src/api/client.types.d.ts.map +1 -1
  20. package/dist/src/api/index.d.ts +1 -1
  21. package/dist/src/api/index.d.ts.map +1 -1
  22. package/dist/src/api/index.js +1 -1
  23. package/dist/src/api/index.js.map +1 -1
  24. package/dist/src/api/schemas.d.ts +319 -70
  25. package/dist/src/config/index.d.ts +4 -0
  26. package/dist/src/config/index.d.ts.map +1 -1
  27. package/dist/src/config/index.js +6 -0
  28. package/dist/src/config/index.js.map +1 -1
  29. package/dist/src/config/token-credentials.d.ts +13 -0
  30. package/dist/src/config/token-credentials.d.ts.map +1 -0
  31. package/dist/src/config/token-credentials.js +126 -0
  32. package/dist/src/config/token-credentials.js.map +1 -0
  33. package/dist/src/config/token-credentials.test.d.ts +10 -0
  34. package/dist/src/config/token-credentials.test.d.ts.map +1 -0
  35. package/dist/src/config/token-credentials.test.js +91 -0
  36. package/dist/src/config/token-credentials.test.js.map +1 -0
  37. package/dist/src/index.d.ts +4 -2
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +5 -2
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +34 -5
  42. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  43. package/dist/src/scripts/github-import/blocklist.d.ts +65 -0
  44. package/dist/src/scripts/github-import/blocklist.d.ts.map +1 -0
  45. package/dist/src/scripts/github-import/blocklist.js +124 -0
  46. package/dist/src/scripts/github-import/blocklist.js.map +1 -0
  47. package/dist/src/scripts/github-import/index.d.ts +1 -0
  48. package/dist/src/scripts/github-import/index.d.ts.map +1 -1
  49. package/dist/src/scripts/github-import/index.js +3 -0
  50. package/dist/src/scripts/github-import/index.js.map +1 -1
  51. package/dist/src/scripts/github-import/signal-of-intent.d.ts +87 -0
  52. package/dist/src/scripts/github-import/signal-of-intent.d.ts.map +1 -0
  53. package/dist/src/scripts/github-import/signal-of-intent.js +213 -0
  54. package/dist/src/scripts/github-import/signal-of-intent.js.map +1 -0
  55. package/dist/src/scripts/github-import/types.d.ts +22 -0
  56. package/dist/src/scripts/github-import/types.d.ts.map +1 -1
  57. package/dist/src/scripts/github-import/types.js.map +1 -1
  58. package/dist/src/scripts/import-github-skills.js +73 -3
  59. package/dist/src/scripts/import-github-skills.js.map +1 -1
  60. package/dist/src/scripts/skill-scanner/allowlist.d.ts +38 -0
  61. package/dist/src/scripts/skill-scanner/allowlist.d.ts.map +1 -0
  62. package/dist/src/scripts/skill-scanner/allowlist.js +178 -0
  63. package/dist/src/scripts/skill-scanner/allowlist.js.map +1 -0
  64. package/dist/src/scripts/skill-scanner/scanner.d.ts +10 -2
  65. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
  66. package/dist/src/scripts/skill-scanner/scanner.js +15 -3
  67. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
  68. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +20 -6
  69. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
  70. package/dist/src/scripts/skill-scanner/trust-scorer.js +28 -9
  71. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  72. package/dist/src/scripts/skill-scanner/types.d.ts +50 -0
  73. package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -1
  74. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +18 -0
  75. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
  76. package/dist/src/security/scanner/SecurityScanner.helpers.js +54 -6
  77. package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
  78. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  79. package/dist/src/security/scanner/patterns.js +45 -5
  80. package/dist/src/security/scanner/patterns.js.map +1 -1
  81. package/dist/tests/api/client.events.test.d.ts +10 -0
  82. package/dist/tests/api/client.events.test.d.ts.map +1 -0
  83. package/dist/tests/api/client.events.test.js +85 -0
  84. package/dist/tests/api/client.events.test.js.map +1 -0
  85. package/dist/tests/github-import/blocklist.test.d.ts +15 -0
  86. package/dist/tests/github-import/blocklist.test.d.ts.map +1 -0
  87. package/dist/tests/github-import/blocklist.test.js +182 -0
  88. package/dist/tests/github-import/blocklist.test.js.map +1 -0
  89. package/dist/tests/github-import/signal-of-intent.test.d.ts +15 -0
  90. package/dist/tests/github-import/signal-of-intent.test.d.ts.map +1 -0
  91. package/dist/tests/github-import/signal-of-intent.test.js +171 -0
  92. package/dist/tests/github-import/signal-of-intent.test.js.map +1 -0
  93. package/dist/tests/security/scanner-regression-guard.test.d.ts +12 -0
  94. package/dist/tests/security/scanner-regression-guard.test.d.ts.map +1 -1
  95. package/dist/tests/security/scanner-regression-guard.test.js +15 -3
  96. package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
  97. package/dist/tests/security/scanner-wave2-fixtures.test.d.ts +12 -0
  98. package/dist/tests/security/scanner-wave2-fixtures.test.d.ts.map +1 -0
  99. package/dist/tests/security/scanner-wave2-fixtures.test.js +173 -0
  100. package/dist/tests/security/scanner-wave2-fixtures.test.js.map +1 -0
  101. package/dist/tests/security.test.js +1 -0
  102. package/dist/tests/security.test.js.map +1 -1
  103. package/dist/tests/skill-scanner/allowlist.test.d.ts +16 -0
  104. package/dist/tests/skill-scanner/allowlist.test.d.ts.map +1 -0
  105. package/dist/tests/skill-scanner/allowlist.test.js +332 -0
  106. package/dist/tests/skill-scanner/allowlist.test.js.map +1 -0
  107. package/package.json +1 -1
@@ -0,0 +1,124 @@
1
+ /**
2
+ * SMI-4408: Indexer blocklist for non-skill repos.
3
+ *
4
+ * Loads data/indexer-blocklist.json and produces a BlocklistMatcher consumed
5
+ * by the main() CLI in import-github-skills.ts. The filter runs between
6
+ * deduplicateSkills() and saveOutput() so blocked repos never reach
7
+ * data/imported-skills.json.
8
+ *
9
+ * Tactical fix for known-bad repos. The structural fix (require a
10
+ * signal-of-intent signal per ingested repo) is tracked as Tier 2
11
+ * follow-up under ADR-109 SPARC.
12
+ *
13
+ * Design invariants:
14
+ * - Exact-match only (`owner/name`, case-sensitive) — no wildcards. Keeps
15
+ * scope tight and auditable. If wildcards become necessary, file a
16
+ * follow-up issue rather than widening this module.
17
+ * - Malformed entries throw at load (fail-safe toward ingestion rejection
18
+ * would be wrong here — ingestion should NOT proceed with an unverified
19
+ * blocklist file).
20
+ * - version=1 contract: future schema changes must bump and handle migration.
21
+ */
22
+ import * as fs from 'fs';
23
+ const REQUIRED_ENTRY_FIELDS = ['repo', 'reason', 'addedBy', 'addedAt'];
24
+ const DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
25
+ const REPO_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/;
26
+ function validateEntryShape(entry, entryIndex) {
27
+ if (typeof entry !== 'object' || entry === null) {
28
+ throw new Error(`Blocklist entry #${entryIndex} is not an object`);
29
+ }
30
+ const e = entry;
31
+ for (const field of REQUIRED_ENTRY_FIELDS) {
32
+ if (typeof e[field] !== 'string' || e[field].length === 0) {
33
+ throw new Error(`Blocklist entry #${entryIndex} missing or empty required field: ${String(field)}`);
34
+ }
35
+ }
36
+ if (!REPO_PATTERN.test(e.repo)) {
37
+ throw new Error(`Blocklist entry #${entryIndex} repo must be 'owner/name' (GitHub full_name), got: ${String(e.repo)}`);
38
+ }
39
+ if (!DATE_PATTERN.test(e.addedAt)) {
40
+ throw new Error(`Blocklist entry #${entryIndex} addedAt must be YYYY-MM-DD, got: ${String(e.addedAt)}`);
41
+ }
42
+ return e;
43
+ }
44
+ /**
45
+ * Parse a raw blocklist file object. Throws on malformed shape or missing
46
+ * required fields. Callers must catch.
47
+ */
48
+ export function parseBlocklistFile(raw) {
49
+ if (typeof raw !== 'object' || raw === null) {
50
+ throw new Error('Blocklist file root must be an object');
51
+ }
52
+ const r = raw;
53
+ if (r.version !== 1) {
54
+ throw new Error(`Unsupported blocklist file version: ${String(r.version)} (expected 1)`);
55
+ }
56
+ if (typeof r.updatedAt !== 'string' || !DATE_PATTERN.test(r.updatedAt)) {
57
+ throw new Error(`Blocklist file updatedAt must be YYYY-MM-DD, got: ${String(r.updatedAt)}`);
58
+ }
59
+ if (!Array.isArray(r.blocked)) {
60
+ throw new Error('Blocklist file .blocked must be an array');
61
+ }
62
+ const entries = r.blocked.map((entry, i) => validateEntryShape(entry, i));
63
+ const seen = new Set();
64
+ for (const entry of entries) {
65
+ if (seen.has(entry.repo)) {
66
+ throw new Error(`Blocklist file contains duplicate entry: ${entry.repo}`);
67
+ }
68
+ seen.add(entry.repo);
69
+ }
70
+ return { version: 1, updatedAt: r.updatedAt, blocked: entries };
71
+ }
72
+ class SetBackedMatcher {
73
+ blocked;
74
+ entryList;
75
+ constructor(entries) {
76
+ this.blocked = new Set(entries.map((e) => e.repo));
77
+ this.entryList = entries;
78
+ }
79
+ isBlocked(repo) {
80
+ return this.blocked.has(repo);
81
+ }
82
+ entries() {
83
+ return this.entryList;
84
+ }
85
+ }
86
+ /**
87
+ * Empty matcher — blocks nothing. Used when the blocklist file is absent or
88
+ * callers want to opt out without conditional plumbing.
89
+ */
90
+ export const EMPTY_BLOCKLIST = {
91
+ isBlocked() {
92
+ return false;
93
+ },
94
+ entries() {
95
+ return [];
96
+ },
97
+ };
98
+ /**
99
+ * Load + validate a blocklist JSON file and return a matcher.
100
+ *
101
+ * If `path` does not exist, returns EMPTY_BLOCKLIST (no-op). A malformed
102
+ * file throws so the importer refuses to proceed with a corrupt blocklist.
103
+ */
104
+ export function loadBlocklist(path) {
105
+ if (!fs.existsSync(path)) {
106
+ return EMPTY_BLOCKLIST;
107
+ }
108
+ const raw = fs.readFileSync(path, 'utf-8');
109
+ let parsed;
110
+ try {
111
+ parsed = JSON.parse(raw);
112
+ }
113
+ catch (err) {
114
+ throw new Error(`Blocklist file ${path} is not valid JSON: ${err.message}`);
115
+ }
116
+ const file = parseBlocklistFile(parsed);
117
+ return new SetBackedMatcher(file.blocked);
118
+ }
119
+ /** Build a matcher from an in-memory entry list (test + inline use). */
120
+ export function buildBlocklist(entries) {
121
+ entries.forEach((entry, i) => validateEntryShape(entry, i));
122
+ return new SetBackedMatcher(entries);
123
+ }
124
+ //# sourceMappingURL=blocklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../../../../src/scripts/github-import/blocklist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AA6BxB,MAAM,qBAAqB,GAAgC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAEnG,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAC1C,MAAM,YAAY,GAAG,0DAA0D,CAAA;AAE/E,SAAS,kBAAkB,CAAC,KAAc,EAAE,UAAkB;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,mBAAmB,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,CAAC,GAAG,KAAgC,CAAA;IAC1C,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAK,CAAC,CAAC,KAAK,CAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,qCAAqC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnF,CAAA;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAc,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,uDAAuD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CACtG,CAAA;IACH,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAiB,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,qCAAqC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CACvF,CAAA;IACH,CAAC;IACD,OAAO,CAA8B,CAAA;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IACD,MAAM,CAAC,GAAG,GAA8B,CAAA;IACxC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,qDAAqD,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC7F,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AACjE,CAAC;AAED,MAAM,gBAAgB;IACH,OAAO,CAAa;IACpB,SAAS,CAA2B;IAErD,YAAY,OAAyB;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAA;IAC1B,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,SAAS;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAA;IACX,CAAC;CACF,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,eAAe,CAAA;IACxB,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;IACxF,CAAC;IACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3D,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC"}
@@ -26,4 +26,5 @@ export * from './github-client.js';
26
26
  export * from './checkpoint.js';
27
27
  export * from './deduplication.js';
28
28
  export * from './output.js';
29
+ export * from './signal-of-intent.js';
29
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/scripts/github-import/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/scripts/github-import/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA"}
@@ -33,6 +33,7 @@ export * from './github-client.js';
33
33
  export * from './checkpoint.js';
34
34
  export * from './deduplication.js';
35
35
  export * from './output.js';
36
+ export * from './signal-of-intent.js';
36
37
  /**
37
38
  * Main import function.
38
39
  * Orchestrates the import process with support for resume.
@@ -60,6 +61,8 @@ async function _main() {
60
61
  total_found: 0,
61
62
  total_imported: 0,
62
63
  duplicates_removed: 0,
64
+ blocked_count: 0,
65
+ blocked_repos: [],
63
66
  queries_completed: [],
64
67
  errors: [],
65
68
  started_at: new Date().toISOString(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/scripts/github-import/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/scripts/github-import/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * SMI-4415: Signal-of-intent gate for the GitHub importer.
3
+ *
4
+ * Purpose: between the de-duplication step and the blocklist / saveOutput
5
+ * step in `import-github-skills.ts`, drop repositories that do not exhibit
6
+ * a *structural* signal of being a Claude Code skill. This is the Tier 2
7
+ * companion to SMI-4408's tactical blocklist — the blocklist catches known
8
+ * bad repos by exact match, this gate catches the long tail by shape.
9
+ *
10
+ * Design:
11
+ * - Multi-signal composite score (Option D in the SMI-4415 plan).
12
+ * - **Structural-signal floor** (plan-review H4): `shouldIngest` requires
13
+ * BOTH `hasStructuralSignal === true` AND `score >= threshold`. This
14
+ * closes the pure-metadata gaming hole where description (+2) + name
15
+ * regex (+2) alone could clear the threshold with zero structural proof.
16
+ * - Zero extra GitHub API calls — only reads fields already present on
17
+ * `ImportedSkill` (populated from the GitHub search response).
18
+ *
19
+ * Plan: docs/internal/implementation/smi-4415-indexer-signal-of-intent.md
20
+ */
21
+ import type { ImportedSkill } from './types.js';
22
+ /**
23
+ * Default signal-score threshold. Revisit against the Wave 0 evidence
24
+ * before tuning; changes with a ≥20% `intent_admit_rate` delta against
25
+ * the rolling baseline require plan-review.
26
+ */
27
+ export declare const SIGNAL_THRESHOLD = 4;
28
+ /**
29
+ * Owner-level trust list. Any repository whose `author` matches an entry
30
+ * here is deemed to carry author-vouched intent, worth +5 (enough to clear
31
+ * the default threshold on its own).
32
+ *
33
+ * TRUTH SOURCE: `supabase/functions/indexer/high-trust-authors.ts`
34
+ * (distinct `.owner` values from the `HIGH_TRUST_AUTHORS` array).
35
+ * Cross-boundary imports from `supabase/functions/` into `packages/core/`
36
+ * are unsupported (the Edge Function pipeline compiles under Deno, not
37
+ * Node), so the values are duplicated here and must be **manually synced**
38
+ * when that file changes. The two files are the authoritative pair for
39
+ * "trusted owner."
40
+ *
41
+ * Wave 0 R2 added `daymade` — `daymade/claude-code-skills` (901⭐ community
42
+ * marketplace) has no topics and would otherwise fail the structural floor
43
+ * despite legitimate intent. Author manually verified 2026-04-21.
44
+ *
45
+ * Matching: case-insensitive (done in `isHighTrustOwner`).
46
+ */
47
+ export declare const HIGH_TRUST_OWNERS: ReadonlySet<string>;
48
+ export interface SignalScore {
49
+ /** Sum of weights for every signal that fired. */
50
+ score: number;
51
+ /**
52
+ * Human-readable labels for each fired signal — surfaced in import
53
+ * stats (`rejected_for_intent_reasons`) for audit and debugging.
54
+ */
55
+ signals: string[];
56
+ /**
57
+ * True iff at least one structural signal fired. Required (in addition
58
+ * to score >= threshold) by `shouldIngest` per plan-review H4.
59
+ */
60
+ hasStructuralSignal: boolean;
61
+ }
62
+ /**
63
+ * Compute the signal-of-intent score for a single imported skill candidate.
64
+ *
65
+ * Reads only fields already present on `ImportedSkill` — zero additional
66
+ * GitHub API calls. Designed to be cheap enough to run on every deduped
67
+ * repo per import run.
68
+ */
69
+ export declare function computeSignalScore(skill: ImportedSkill): SignalScore;
70
+ /**
71
+ * Intent-gate decision for a single imported skill candidate.
72
+ *
73
+ * Requires BOTH:
74
+ * 1. `hasStructuralSignal === true` — at least one structural signal
75
+ * (topic tag OR HIGH_TRUST_OWNERS membership) fired. This is the
76
+ * plan-review H4 floor.
77
+ * 2. `score >= threshold` — the composite score clears the cutoff.
78
+ *
79
+ * Metadata-only matches (description + name + language + license + stars)
80
+ * can contribute to the score but will fail on the floor regardless of
81
+ * how high the sum reaches.
82
+ *
83
+ * @param skill - Deduped importer candidate.
84
+ * @param threshold - Defaults to `SIGNAL_THRESHOLD` (4).
85
+ */
86
+ export declare function shouldIngest(skill: ImportedSkill, threshold?: number): boolean;
87
+ //# sourceMappingURL=signal-of-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-of-intent.d.ts","sourceRoot":"","sources":["../../../../src/scripts/github-import/signal-of-intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAuBjC;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAahD,CAAA;AAsEF,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB;;;OAGG;IACH,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAmDpE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,GAAE,MAAyB,GAAG,OAAO,CAGhG"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * SMI-4415: Signal-of-intent gate for the GitHub importer.
3
+ *
4
+ * Purpose: between the de-duplication step and the blocklist / saveOutput
5
+ * step in `import-github-skills.ts`, drop repositories that do not exhibit
6
+ * a *structural* signal of being a Claude Code skill. This is the Tier 2
7
+ * companion to SMI-4408's tactical blocklist — the blocklist catches known
8
+ * bad repos by exact match, this gate catches the long tail by shape.
9
+ *
10
+ * Design:
11
+ * - Multi-signal composite score (Option D in the SMI-4415 plan).
12
+ * - **Structural-signal floor** (plan-review H4): `shouldIngest` requires
13
+ * BOTH `hasStructuralSignal === true` AND `score >= threshold`. This
14
+ * closes the pure-metadata gaming hole where description (+2) + name
15
+ * regex (+2) alone could clear the threshold with zero structural proof.
16
+ * - Zero extra GitHub API calls — only reads fields already present on
17
+ * `ImportedSkill` (populated from the GitHub search response).
18
+ *
19
+ * Plan: docs/internal/implementation/smi-4415-indexer-signal-of-intent.md
20
+ */
21
+ // ---------------------------------------------------------------------------
22
+ // Constants
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Default signal-score threshold. Revisit against the Wave 0 evidence
26
+ * before tuning; changes with a ≥20% `intent_admit_rate` delta against
27
+ * the rolling baseline require plan-review.
28
+ */
29
+ export const SIGNAL_THRESHOLD = 4;
30
+ /**
31
+ * Structural topic tags that constitute a "this is a Claude skill" signal
32
+ * at the highest weight (+4). Matching is case-insensitive against
33
+ * `ImportedSkill.topics`.
34
+ *
35
+ * Wave 0 R1 expanded this set to include `agent-skills` and `agent-skill`
36
+ * after fixture verification showed `anthropics/skills` (121k stars) and
37
+ * `prismatic-io/prismatic-skills` (26 stars) rely on those conventions
38
+ * rather than the older `claude-skill` / `claude-code-skill` tags.
39
+ */
40
+ const STRUCTURAL_TOPIC_SET = new Set([
41
+ 'claude-skill',
42
+ 'claude-code-skill',
43
+ 'anthropic-skill',
44
+ 'agent-skills',
45
+ 'agent-skill',
46
+ ]);
47
+ /** Secondary structural topic — contributes +1 (not enough to clear threshold alone). */
48
+ const MCP_SERVER_TOPIC = 'mcp-server';
49
+ /**
50
+ * Owner-level trust list. Any repository whose `author` matches an entry
51
+ * here is deemed to carry author-vouched intent, worth +5 (enough to clear
52
+ * the default threshold on its own).
53
+ *
54
+ * TRUTH SOURCE: `supabase/functions/indexer/high-trust-authors.ts`
55
+ * (distinct `.owner` values from the `HIGH_TRUST_AUTHORS` array).
56
+ * Cross-boundary imports from `supabase/functions/` into `packages/core/`
57
+ * are unsupported (the Edge Function pipeline compiles under Deno, not
58
+ * Node), so the values are duplicated here and must be **manually synced**
59
+ * when that file changes. The two files are the authoritative pair for
60
+ * "trusted owner."
61
+ *
62
+ * Wave 0 R2 added `daymade` — `daymade/claude-code-skills` (901⭐ community
63
+ * marketplace) has no topics and would otherwise fail the structural floor
64
+ * despite legitimate intent. Author manually verified 2026-04-21.
65
+ *
66
+ * Matching: case-insensitive (done in `isHighTrustOwner`).
67
+ */
68
+ export const HIGH_TRUST_OWNERS = new Set([
69
+ 'anthropics',
70
+ 'huggingface',
71
+ 'vercel-labs',
72
+ 'resend',
73
+ 'addyosmani',
74
+ 'amplitude',
75
+ 'microsoft',
76
+ 'google-gemini',
77
+ 'awslabs',
78
+ 'SalesforceCommerceCloud',
79
+ // Wave 0 R2: manually verified community author.
80
+ 'daymade',
81
+ ]);
82
+ // ---------------------------------------------------------------------------
83
+ // Weight configuration
84
+ // ---------------------------------------------------------------------------
85
+ /**
86
+ * Scoring weights. Mirrors the table in the plan (Wave 1 Step 1).
87
+ *
88
+ * Structural signals (`*_STRUCTURAL`) are the only ones that can satisfy
89
+ * the `hasStructuralSignal` floor required by `shouldIngest`. Metadata
90
+ * signals (description, name, language, license, stars) contribute to
91
+ * the score but cannot cross the floor by themselves.
92
+ */
93
+ const WEIGHTS = {
94
+ STRUCTURAL_TOPIC: 4, // structural
95
+ MCP_SERVER_TOPIC: 1, // structural
96
+ HIGH_TRUST_OWNER: 5, // structural
97
+ DESCRIPTION_MATCH: 2, // metadata
98
+ NAME_MATCH: 2, // metadata
99
+ LANGUAGE_MATCH: 1, // metadata
100
+ LICENSE_PRESENT: 1, // metadata
101
+ STARS_THRESHOLD: 1, // metadata
102
+ };
103
+ const METADATA_LANGUAGES = new Set(['Markdown', 'TypeScript', 'JavaScript']);
104
+ const STARS_THRESHOLD = 10;
105
+ // The regex set — module-level so we don't reallocate them per-repo.
106
+ const DESCRIPTION_REGEX = /skill|claude-code|claude code|anthropic/i;
107
+ const NAME_REGEX = /^claude-(code-)?skills?|-skill$/i;
108
+ // ---------------------------------------------------------------------------
109
+ // Helpers
110
+ // ---------------------------------------------------------------------------
111
+ /**
112
+ * Case-insensitive owner lookup. Kept separate so the HIGH_TRUST_OWNERS
113
+ * set can be iterated at load time without normalizing all entries.
114
+ */
115
+ function isHighTrustOwner(author) {
116
+ if (!author)
117
+ return false;
118
+ const normalized = author.toLowerCase();
119
+ for (const owner of HIGH_TRUST_OWNERS) {
120
+ if (owner.toLowerCase() === normalized)
121
+ return true;
122
+ }
123
+ return false;
124
+ }
125
+ function hasStructuralTopic(topics) {
126
+ if (!topics || topics.length === 0)
127
+ return false;
128
+ for (const topic of topics) {
129
+ if (STRUCTURAL_TOPIC_SET.has(topic.toLowerCase()))
130
+ return true;
131
+ }
132
+ return false;
133
+ }
134
+ function hasMcpServerTopic(topics) {
135
+ if (!topics || topics.length === 0)
136
+ return false;
137
+ for (const topic of topics) {
138
+ if (topic.toLowerCase() === MCP_SERVER_TOPIC)
139
+ return true;
140
+ }
141
+ return false;
142
+ }
143
+ /**
144
+ * Compute the signal-of-intent score for a single imported skill candidate.
145
+ *
146
+ * Reads only fields already present on `ImportedSkill` — zero additional
147
+ * GitHub API calls. Designed to be cheap enough to run on every deduped
148
+ * repo per import run.
149
+ */
150
+ export function computeSignalScore(skill) {
151
+ const signals = [];
152
+ let score = 0;
153
+ let hasStructuralSignal = false;
154
+ // ---- Structural signals --------------------------------------------------
155
+ if (hasStructuralTopic(skill.topics)) {
156
+ score += WEIGHTS.STRUCTURAL_TOPIC;
157
+ signals.push('structural-topic');
158
+ hasStructuralSignal = true;
159
+ }
160
+ if (hasMcpServerTopic(skill.topics)) {
161
+ score += WEIGHTS.MCP_SERVER_TOPIC;
162
+ signals.push('mcp-server-topic');
163
+ hasStructuralSignal = true;
164
+ }
165
+ if (isHighTrustOwner(skill.author)) {
166
+ score += WEIGHTS.HIGH_TRUST_OWNER;
167
+ signals.push('high-trust-owner');
168
+ hasStructuralSignal = true;
169
+ }
170
+ // ---- Metadata signals ----------------------------------------------------
171
+ if (skill.description && DESCRIPTION_REGEX.test(skill.description)) {
172
+ score += WEIGHTS.DESCRIPTION_MATCH;
173
+ signals.push('description-match');
174
+ }
175
+ if (skill.name && NAME_REGEX.test(skill.name)) {
176
+ score += WEIGHTS.NAME_MATCH;
177
+ signals.push('name-match');
178
+ }
179
+ if (skill.language && METADATA_LANGUAGES.has(skill.language)) {
180
+ score += WEIGHTS.LANGUAGE_MATCH;
181
+ signals.push('language-match');
182
+ }
183
+ if (skill.license !== null && skill.license !== undefined) {
184
+ score += WEIGHTS.LICENSE_PRESENT;
185
+ signals.push('license-present');
186
+ }
187
+ if (typeof skill.stars === 'number' && skill.stars >= STARS_THRESHOLD) {
188
+ score += WEIGHTS.STARS_THRESHOLD;
189
+ signals.push('stars-threshold');
190
+ }
191
+ return { score, signals, hasStructuralSignal };
192
+ }
193
+ /**
194
+ * Intent-gate decision for a single imported skill candidate.
195
+ *
196
+ * Requires BOTH:
197
+ * 1. `hasStructuralSignal === true` — at least one structural signal
198
+ * (topic tag OR HIGH_TRUST_OWNERS membership) fired. This is the
199
+ * plan-review H4 floor.
200
+ * 2. `score >= threshold` — the composite score clears the cutoff.
201
+ *
202
+ * Metadata-only matches (description + name + language + license + stars)
203
+ * can contribute to the score but will fail on the floor regardless of
204
+ * how high the sum reaches.
205
+ *
206
+ * @param skill - Deduped importer candidate.
207
+ * @param threshold - Defaults to `SIGNAL_THRESHOLD` (4).
208
+ */
209
+ export function shouldIngest(skill, threshold = SIGNAL_THRESHOLD) {
210
+ const { score, hasStructuralSignal } = computeSignalScore(skill);
211
+ return hasStructuralSignal && score >= threshold;
212
+ }
213
+ //# sourceMappingURL=signal-of-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-of-intent.js","sourceRoot":"","sources":["../../../../src/scripts/github-import/signal-of-intent.ts"],"names":[],"mappings":"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"}
@@ -90,6 +90,28 @@ export interface ImportStats {
90
90
  total_found: number;
91
91
  total_imported: number;
92
92
  duplicates_removed: number;
93
+ /** SMI-4408: count of post-dedup skills dropped by the indexer blocklist. */
94
+ blocked_count: number;
95
+ /** SMI-4408: the repos (owner/name) that were blocked this run, for audit. */
96
+ blocked_repos: string[];
97
+ /**
98
+ * SMI-4415: count of post-dedup skills rejected by the signal-of-intent gate
99
+ * before reaching the blocklist stage. Optional for checkpoint-resume compat
100
+ * with pre-SMI-4415 files (backfilled to 0 at load time).
101
+ */
102
+ rejected_for_intent_count?: number;
103
+ /**
104
+ * SMI-4415: aggregated reason strings for intent-gate rejections this run
105
+ * (e.g. `"metadata-only"`, `"mcp-server-topic"`). One entry per rejected
106
+ * repo, appropriate for grouping/reporting downstream.
107
+ */
108
+ rejected_for_intent_reasons?: string[];
109
+ /**
110
+ * SMI-4415: `admitted / (admitted + rejected_for_intent)` ratio. Operator
111
+ * gauge — a ≥20% delta from the rolling baseline requires plan-review
112
+ * per the SMI-4415 plan.
113
+ */
114
+ intent_admit_rate?: number;
93
115
  queries_completed: string[];
94
116
  errors: string[];
95
117
  started_at: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scripts/github-import/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scripts/github-import/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/scripts/github-import/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqCH,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACtC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;IACxC,0BAA0B,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;IAClE,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;IAC1D,cAAc,EAAE,wBAAwB;IACxC,QAAQ,EAAE,GAAG;IACb,qBAAqB,EAAE,IAAI;IAC3B,gBAAgB,EAAE,GAAG;IACrB,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE;QACL,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,IAAI;QACnB,kBAAkB,EAAE,CAAC;KACtB;IACD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,6BAA6B;IACrE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,+BAA+B;CAChF,CAAA;AA2FD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,4BAA4B;KAC1C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,iDAAiD;KAC/D;CACF,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/scripts/github-import/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqCH,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACtC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;IACxC,0BAA0B,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;IAClE,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;IAC1D,cAAc,EAAE,wBAAwB;IACxC,QAAQ,EAAE,GAAG;IACb,qBAAqB,EAAE,IAAI;IAC3B,gBAAgB,EAAE,GAAG;IACrB,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE;QACL,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,IAAI;QACnB,kBAAkB,EAAE,CAAC;KACtB;IACD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,6BAA6B;IACrE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,+BAA+B;CAChF,CAAA;AAiHD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,4BAA4B;KAC1C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,iDAAiD;KAC/D;CACF,CAAA"}