skyl.dev 0.1.0 → 0.1.2

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 (139) hide show
  1. package/README.md +77 -0
  2. package/dist/bin.js +2265 -2
  3. package/package.json +9 -11
  4. package/dist/bin.d.ts +0 -3
  5. package/dist/bin.d.ts.map +0 -1
  6. package/dist/bin.js.map +0 -1
  7. package/dist/cli.d.ts +0 -2
  8. package/dist/cli.d.ts.map +0 -1
  9. package/dist/cli.js +0 -158
  10. package/dist/cli.js.map +0 -1
  11. package/dist/commands/add.d.ts +0 -10
  12. package/dist/commands/add.d.ts.map +0 -1
  13. package/dist/commands/add.js +0 -38
  14. package/dist/commands/add.js.map +0 -1
  15. package/dist/commands/audit.d.ts +0 -16
  16. package/dist/commands/audit.d.ts.map +0 -1
  17. package/dist/commands/audit.js +0 -91
  18. package/dist/commands/audit.js.map +0 -1
  19. package/dist/commands/context.d.ts +0 -17
  20. package/dist/commands/context.d.ts.map +0 -1
  21. package/dist/commands/context.js +0 -47
  22. package/dist/commands/context.js.map +0 -1
  23. package/dist/commands/diff.d.ts +0 -12
  24. package/dist/commands/diff.d.ts.map +0 -1
  25. package/dist/commands/diff.js +0 -79
  26. package/dist/commands/diff.js.map +0 -1
  27. package/dist/commands/learn.d.ts +0 -18
  28. package/dist/commands/learn.d.ts.map +0 -1
  29. package/dist/commands/learn.js +0 -115
  30. package/dist/commands/learn.js.map +0 -1
  31. package/dist/commands/lint.d.ts +0 -14
  32. package/dist/commands/lint.d.ts.map +0 -1
  33. package/dist/commands/lint.js +0 -109
  34. package/dist/commands/lint.js.map +0 -1
  35. package/dist/commands/list.d.ts +0 -6
  36. package/dist/commands/list.d.ts.map +0 -1
  37. package/dist/commands/list.js +0 -60
  38. package/dist/commands/list.js.map +0 -1
  39. package/dist/commands/remove.d.ts +0 -16
  40. package/dist/commands/remove.d.ts.map +0 -1
  41. package/dist/commands/remove.js +0 -73
  42. package/dist/commands/remove.js.map +0 -1
  43. package/dist/commands/scan.d.ts +0 -10
  44. package/dist/commands/scan.d.ts.map +0 -1
  45. package/dist/commands/scan.js +0 -60
  46. package/dist/commands/scan.js.map +0 -1
  47. package/dist/commands/update.d.ts +0 -11
  48. package/dist/commands/update.d.ts.map +0 -1
  49. package/dist/commands/update.js +0 -135
  50. package/dist/commands/update.js.map +0 -1
  51. package/dist/context.d.ts +0 -44
  52. package/dist/context.d.ts.map +0 -1
  53. package/dist/context.js +0 -179
  54. package/dist/context.js.map +0 -1
  55. package/dist/ignore.d.ts +0 -21
  56. package/dist/ignore.d.ts.map +0 -1
  57. package/dist/ignore.js +0 -79
  58. package/dist/ignore.js.map +0 -1
  59. package/dist/install.d.ts +0 -10
  60. package/dist/install.d.ts.map +0 -1
  61. package/dist/install.js +0 -54
  62. package/dist/install.js.map +0 -1
  63. package/dist/learn.d.ts +0 -45
  64. package/dist/learn.d.ts.map +0 -1
  65. package/dist/learn.js +0 -146
  66. package/dist/learn.js.map +0 -1
  67. package/dist/registry.d.ts +0 -23
  68. package/dist/registry.d.ts.map +0 -1
  69. package/dist/registry.js +0 -38
  70. package/dist/registry.js.map +0 -1
  71. package/dist/scan.d.ts +0 -3
  72. package/dist/scan.d.ts.map +0 -1
  73. package/dist/scan.js +0 -104
  74. package/dist/scan.js.map +0 -1
  75. package/dist/state.d.ts +0 -31
  76. package/dist/state.d.ts.map +0 -1
  77. package/dist/state.js +0 -39
  78. package/dist/state.js.map +0 -1
  79. package/dist/ui.d.ts +0 -17
  80. package/dist/ui.d.ts.map +0 -1
  81. package/dist/ui.js +0 -35
  82. package/dist/ui.js.map +0 -1
  83. package/node_modules/@skyl/core/dist/audit.d.ts +0 -48
  84. package/node_modules/@skyl/core/dist/audit.d.ts.map +0 -1
  85. package/node_modules/@skyl/core/dist/audit.js +0 -99
  86. package/node_modules/@skyl/core/dist/audit.js.map +0 -1
  87. package/node_modules/@skyl/core/dist/detect.d.ts +0 -15
  88. package/node_modules/@skyl/core/dist/detect.d.ts.map +0 -1
  89. package/node_modules/@skyl/core/dist/detect.js +0 -62
  90. package/node_modules/@skyl/core/dist/detect.js.map +0 -1
  91. package/node_modules/@skyl/core/dist/diff.d.ts +0 -32
  92. package/node_modules/@skyl/core/dist/diff.d.ts.map +0 -1
  93. package/node_modules/@skyl/core/dist/diff.js +0 -119
  94. package/node_modules/@skyl/core/dist/diff.js.map +0 -1
  95. package/node_modules/@skyl/core/dist/errors.d.ts +0 -21
  96. package/node_modules/@skyl/core/dist/errors.d.ts.map +0 -1
  97. package/node_modules/@skyl/core/dist/errors.js +0 -25
  98. package/node_modules/@skyl/core/dist/errors.js.map +0 -1
  99. package/node_modules/@skyl/core/dist/index.d.ts +0 -14
  100. package/node_modules/@skyl/core/dist/index.d.ts.map +0 -1
  101. package/node_modules/@skyl/core/dist/index.js +0 -14
  102. package/node_modules/@skyl/core/dist/index.js.map +0 -1
  103. package/node_modules/@skyl/core/dist/lint.d.ts +0 -28
  104. package/node_modules/@skyl/core/dist/lint.d.ts.map +0 -1
  105. package/node_modules/@skyl/core/dist/lint.js +0 -169
  106. package/node_modules/@skyl/core/dist/lint.js.map +0 -1
  107. package/node_modules/@skyl/core/dist/lockfile.d.ts +0 -37
  108. package/node_modules/@skyl/core/dist/lockfile.d.ts.map +0 -1
  109. package/node_modules/@skyl/core/dist/lockfile.js +0 -47
  110. package/node_modules/@skyl/core/dist/lockfile.js.map +0 -1
  111. package/node_modules/@skyl/core/dist/match.d.ts +0 -19
  112. package/node_modules/@skyl/core/dist/match.d.ts.map +0 -1
  113. package/node_modules/@skyl/core/dist/match.js +0 -72
  114. package/node_modules/@skyl/core/dist/match.js.map +0 -1
  115. package/node_modules/@skyl/core/dist/names.d.ts +0 -11
  116. package/node_modules/@skyl/core/dist/names.d.ts.map +0 -1
  117. package/node_modules/@skyl/core/dist/names.js +0 -31
  118. package/node_modules/@skyl/core/dist/names.js.map +0 -1
  119. package/node_modules/@skyl/core/dist/parse.d.ts +0 -22
  120. package/node_modules/@skyl/core/dist/parse.d.ts.map +0 -1
  121. package/node_modules/@skyl/core/dist/parse.js +0 -163
  122. package/node_modules/@skyl/core/dist/parse.js.map +0 -1
  123. package/node_modules/@skyl/core/dist/resolve.d.ts +0 -12
  124. package/node_modules/@skyl/core/dist/resolve.d.ts.map +0 -1
  125. package/node_modules/@skyl/core/dist/resolve.js +0 -40
  126. package/node_modules/@skyl/core/dist/resolve.js.map +0 -1
  127. package/node_modules/@skyl/core/dist/source.d.ts +0 -35
  128. package/node_modules/@skyl/core/dist/source.d.ts.map +0 -1
  129. package/node_modules/@skyl/core/dist/source.js +0 -85
  130. package/node_modules/@skyl/core/dist/source.js.map +0 -1
  131. package/node_modules/@skyl/core/dist/targets.d.ts +0 -20
  132. package/node_modules/@skyl/core/dist/targets.d.ts.map +0 -1
  133. package/node_modules/@skyl/core/dist/targets.js +0 -24
  134. package/node_modules/@skyl/core/dist/targets.js.map +0 -1
  135. package/node_modules/@skyl/core/dist/types.d.ts +0 -51
  136. package/node_modules/@skyl/core/dist/types.d.ts.map +0 -1
  137. package/node_modules/@skyl/core/dist/types.js +0 -2
  138. package/node_modules/@skyl/core/dist/types.js.map +0 -1
  139. package/node_modules/@skyl/core/package.json +0 -20
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { Match, ProjectSignals, SkillMeta } from './types.ts';
2
- /**
3
- * Which skills a project matches.
4
- *
5
- * A `core` skill has no detect block by design: it applies to every project in its
6
- * family, so it is included whenever anything else in that family matched. Without that,
7
- * a project would resolve to a language skill and none of the foundation it layers on.
8
- */
9
- export declare function detect(skills: readonly SkillMeta[], signals: ProjectSignals): Match[];
10
- /**
11
- * Skills in the family that did *not* match, so `scan` can show what it considered and
12
- * rejected. A tool that only lists what it wants looks like it is guessing.
13
- */
14
- export declare function unmatched<T extends SkillMeta>(skills: readonly T[], matched: readonly Match[]): T[];
15
- //# sourceMappingURL=detect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsBhF;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,KAAK,EAAE,CAoBrF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,GAAG,CAAC,EAAE,CAMnG"}
@@ -1,62 +0,0 @@
1
- import { matches } from "./match.js";
2
- /**
3
- * Detection is a lookup, not inference: a skill's `detect` block lists what to look for,
4
- * and a project matches if any signal under the same key satisfies one of them.
5
- *
6
- * How a value is compared depends on the key. See `match.ts`: dependencies compare on
7
- * their coordinate so a test artifact does not drag in the library it tests, and file
8
- * patterns are globs.
9
- */
10
- function hits(detect, signals) {
11
- const found = [];
12
- for (const [key, wanted] of Object.entries(detect)) {
13
- const present = signals[key];
14
- if (!present || present.length === 0)
15
- continue;
16
- for (const w of wanted) {
17
- if (present.some((p) => matches(key, w, p)))
18
- found.push({ key, value: w });
19
- }
20
- }
21
- return found;
22
- }
23
- /**
24
- * Which skills a project matches.
25
- *
26
- * A `core` skill has no detect block by design: it applies to every project in its
27
- * family, so it is included whenever anything else in that family matched. Without that,
28
- * a project would resolve to a language skill and none of the foundation it layers on.
29
- */
30
- export function detect(skills, signals) {
31
- const matched = [];
32
- const families = new Set();
33
- for (const s of skills) {
34
- if (Object.keys(s.detect).length === 0)
35
- continue;
36
- const on = hits(s.detect, signals);
37
- if (on.length > 0) {
38
- matched.push({ skill: s.name, on });
39
- families.add(s.family);
40
- }
41
- }
42
- for (const s of skills) {
43
- if (s.axis !== 'core' || !families.has(s.family))
44
- continue;
45
- if (matched.some((m) => m.skill === s.name))
46
- continue;
47
- matched.push({ skill: s.name, on: [{ key: 'family', value: s.family }] });
48
- }
49
- return matched.sort((a, b) => a.skill.localeCompare(b.skill));
50
- }
51
- /**
52
- * Skills in the family that did *not* match, so `scan` can show what it considered and
53
- * rejected. A tool that only lists what it wants looks like it is guessing.
54
- */
55
- export function unmatched(skills, matched) {
56
- const taken = new Set(matched.map((m) => m.skill));
57
- const families = new Set(matched.map((m) => m.skill.split('/')[0]));
58
- return skills
59
- .filter((s) => !taken.has(s.name) && families.has(s.family))
60
- .sort((a, b) => a.name.localeCompare(b.name));
61
- }
62
- //# sourceMappingURL=detect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * A line diff, so `diff` and `update` can show what actually moved.
3
- *
4
- * Written here rather than pulled in because the whole package is dependency-free and
5
- * this is the one diff shape the CLI needs: whole lines, no rename detection, no word
6
- * level highlighting. A skill file is prose and bullet lists, where a line is the unit a
7
- * reader thinks in anyway.
8
- */
9
- export interface Hunk {
10
- readonly beforeStart: number;
11
- readonly beforeCount: number;
12
- readonly afterStart: number;
13
- readonly afterCount: number;
14
- readonly lines: readonly {
15
- readonly kind: ' ' | '-' | '+';
16
- readonly text: string;
17
- }[];
18
- }
19
- type Op = {
20
- kind: ' ' | '-' | '+';
21
- text: string;
22
- };
23
- export declare function diffLines(before: string, after: string): Op[];
24
- /** Group a diff into hunks with `context` unchanged lines around each change. */
25
- export declare function hunks(ops: readonly Op[], context?: number): Hunk[];
26
- /** How many lines were added and removed, for a one line summary. */
27
- export declare function stat(ops: readonly Op[]): {
28
- added: number;
29
- removed: number;
30
- };
31
- export {};
32
- //# sourceMappingURL=diff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtF;AAED,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAWlD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,CA+C7D;AAED,iFAAiF;AACjF,wBAAgB,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,SAAI,GAAG,IAAI,EAAE,CA+B7D;AAYD,qEAAqE;AACrE,wBAAgB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAK3E"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Longest common subsequence over lines.
3
- *
4
- * Quadratic, which is fine for files of this size: the largest skill is under 400 lines,
5
- * so the table is under 160k cells. Guarded anyway, because a caller could point this at
6
- * something else and a silent 30 second hang is worse than a coarse diff.
7
- */
8
- const MAX_CELLS = 4_000_000;
9
- export function diffLines(before, after) {
10
- const a = before.split('\n');
11
- const b = after.split('\n');
12
- if (a.length * b.length > MAX_CELLS) {
13
- return [
14
- ...a.map((text) => ({ kind: '-', text })),
15
- ...b.map((text) => ({ kind: '+', text })),
16
- ];
17
- }
18
- // trim the common head and tail first, which is most of the work on a small edit
19
- let head = 0;
20
- while (head < a.length && head < b.length && a[head] === b[head])
21
- head += 1;
22
- let tail = 0;
23
- while (tail < a.length - head &&
24
- tail < b.length - head &&
25
- a[a.length - 1 - tail] === b[b.length - 1 - tail])
26
- tail += 1;
27
- const midA = a.slice(head, a.length - tail);
28
- const midB = b.slice(head, b.length - tail);
29
- const table = Array.from({ length: midA.length + 1 }, () => new Array(midB.length + 1).fill(0));
30
- for (let i = midA.length - 1; i >= 0; i -= 1) {
31
- for (let j = midB.length - 1; j >= 0; j -= 1) {
32
- table[i][j] = midA[i] === midB[j]
33
- ? table[i + 1][j + 1] + 1
34
- : Math.max(table[i + 1][j], table[i][j + 1]);
35
- }
36
- }
37
- const ops = a.slice(0, head).map((text) => ({ kind: ' ', text }));
38
- let i = 0;
39
- let j = 0;
40
- while (i < midA.length && j < midB.length) {
41
- if (midA[i] === midB[j]) {
42
- ops.push({ kind: ' ', text: midA[i] });
43
- i += 1;
44
- j += 1;
45
- }
46
- else if (table[i + 1][j] >= table[i][j + 1]) {
47
- ops.push({ kind: '-', text: midA[i] });
48
- i += 1;
49
- }
50
- else {
51
- ops.push({ kind: '+', text: midB[j] });
52
- j += 1;
53
- }
54
- }
55
- while (i < midA.length) {
56
- ops.push({ kind: '-', text: midA[i] });
57
- i += 1;
58
- }
59
- while (j < midB.length) {
60
- ops.push({ kind: '+', text: midB[j] });
61
- j += 1;
62
- }
63
- for (const text of a.slice(a.length - tail))
64
- ops.push({ kind: ' ', text });
65
- return ops;
66
- }
67
- /** Group a diff into hunks with `context` unchanged lines around each change. */
68
- export function hunks(ops, context = 3) {
69
- const changed = ops.map((o) => o.kind !== ' ');
70
- if (!changed.some(Boolean))
71
- return [];
72
- const keep = new Array(ops.length).fill(false);
73
- for (let i = 0; i < ops.length; i += 1) {
74
- if (!changed[i])
75
- continue;
76
- for (let j = Math.max(0, i - context); j <= Math.min(ops.length - 1, i + context); j += 1) {
77
- keep[j] = true;
78
- }
79
- }
80
- const out = [];
81
- let beforeLine = 1;
82
- let afterLine = 1;
83
- let current;
84
- for (let i = 0; i < ops.length; i += 1) {
85
- const op = ops[i];
86
- if (keep[i]) {
87
- current ??= { lines: [], beforeStart: beforeLine, afterStart: afterLine };
88
- current.lines.push(op);
89
- }
90
- else if (current) {
91
- out.push(close(current));
92
- current = undefined;
93
- }
94
- if (op.kind !== '+')
95
- beforeLine += 1;
96
- if (op.kind !== '-')
97
- afterLine += 1;
98
- }
99
- if (current)
100
- out.push(close(current));
101
- return out;
102
- }
103
- function close(c) {
104
- return {
105
- beforeStart: c.beforeStart,
106
- beforeCount: c.lines.filter((l) => l.kind !== '+').length,
107
- afterStart: c.afterStart,
108
- afterCount: c.lines.filter((l) => l.kind !== '-').length,
109
- lines: c.lines,
110
- };
111
- }
112
- /** How many lines were added and removed, for a one line summary. */
113
- export function stat(ops) {
114
- return {
115
- added: ops.filter((o) => o.kind === '+').length,
116
- removed: ops.filter((o) => o.kind === '-').length,
117
- };
118
- }
119
- //# sourceMappingURL=diff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Base for everything this package throws, so a caller can catch one type.
3
- *
4
- * Written without constructor parameter properties: Node runs these files by stripping
5
- * types, which does not support that syntax, and being able to run the source directly
6
- * is worth more than the shorthand.
7
- */
8
- export declare class SkylError extends Error {
9
- readonly detail: string | undefined;
10
- constructor(message: string, detail?: string);
11
- }
12
- /** A SKILL.md that does not parse, or is missing something the format requires. */
13
- export declare class SkillFormatError extends SkylError {
14
- }
15
- /** `requires` naming a skill that is not in the index, or a cycle between skills. */
16
- export declare class ResolutionError extends SkylError {
17
- }
18
- /** No source could supply the registry. */
19
- export declare class SourceError extends SkylError {
20
- }
21
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;gBAExB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAK7C;AAED,mFAAmF;AACnF,qBAAa,gBAAiB,SAAQ,SAAS;CAAG;AAElD,qFAAqF;AACrF,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,2CAA2C;AAC3C,qBAAa,WAAY,SAAQ,SAAS;CAAG"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Base for everything this package throws, so a caller can catch one type.
3
- *
4
- * Written without constructor parameter properties: Node runs these files by stripping
5
- * types, which does not support that syntax, and being able to run the source directly
6
- * is worth more than the shorthand.
7
- */
8
- export class SkylError extends Error {
9
- detail;
10
- constructor(message, detail) {
11
- super(detail ? `${message}\n ${detail}` : message);
12
- this.name = new.target.name;
13
- this.detail = detail;
14
- }
15
- }
16
- /** A SKILL.md that does not parse, or is missing something the format requires. */
17
- export class SkillFormatError extends SkylError {
18
- }
19
- /** `requires` naming a skill that is not in the index, or a cycle between skills. */
20
- export class ResolutionError extends SkylError {
21
- }
22
- /** No source could supply the registry. */
23
- export class SourceError extends SkylError {
24
- }
25
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAqB;IAEpC,YAAY,OAAe,EAAE,MAAe;QAC1C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,gBAAiB,SAAQ,SAAS;CAAG;AAElD,qFAAqF;AACrF,MAAM,OAAO,eAAgB,SAAQ,SAAS;CAAG;AAEjD,2CAA2C;AAC3C,MAAM,OAAO,WAAY,SAAQ,SAAS;CAAG"}
@@ -1,14 +0,0 @@
1
- export * from './types.ts';
2
- export * from './errors.ts';
3
- export { parseSkill, parseFrontmatter, sections, rules, body } from './parse.ts';
4
- export { detect, unmatched } from './detect.ts';
5
- export { matches, strategyFor, type Strategy } from './match.ts';
6
- export { resolve, implied } from './resolve.ts';
7
- export { type Source, type Bundle, directorySource, bundleSource, httpBundleSource, firstAvailable, } from './source.ts';
8
- export { TARGETS, DEFAULT_TARGET, targetById, type Target } from './targets.ts';
9
- export { LOCKFILE_NAME, hashContent, emptyLockfile, parseLockfile, formatLockfile, entryFor, drift, type Lockfile, type LockEntry, type DriftKind, } from './lockfile.ts';
10
- export { normalise } from './names.ts';
11
- export { diffLines, hunks, stat, type Hunk } from './diff.ts';
12
- export { lintSkill, lintRegistry, type Finding } from './lint.ts';
13
- export { audit, scanSecrets, type AuditReport, type SectionReport } from './audit.ts';
14
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,KAAK,MAAM,EACX,KAAK,MAAM,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EACL,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EACzF,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,GAC9C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -1,14 +0,0 @@
1
- export * from "./types.js";
2
- export * from "./errors.js";
3
- export { parseSkill, parseFrontmatter, sections, rules, body } from "./parse.js";
4
- export { detect, unmatched } from "./detect.js";
5
- export { matches, strategyFor } from "./match.js";
6
- export { resolve, implied } from "./resolve.js";
7
- export { directorySource, bundleSource, httpBundleSource, firstAvailable, } from "./source.js";
8
- export { TARGETS, DEFAULT_TARGET, targetById } from "./targets.js";
9
- export { LOCKFILE_NAME, hashContent, emptyLockfile, parseLockfile, formatLockfile, entryFor, drift, } from "./lockfile.js";
10
- export { normalise } from "./names.js";
11
- export { diffLines, hunks, stat } from "./diff.js";
12
- export { lintSkill, lintRegistry } from "./lint.js";
13
- export { audit, scanSecrets } from "./audit.js";
14
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAGL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAe,MAAM,cAAc,CAAC;AAChF,OAAO,EACL,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,GAE1F,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAa,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAgB,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAwC,MAAM,YAAY,CAAC"}
@@ -1,28 +0,0 @@
1
- import type { Skill } from './types.ts';
2
- /**
3
- * The spec, checked mechanically.
4
- *
5
- * `error` is a violation of `spec/FORMAT.md` that breaks an installer or a reference.
6
- * `warn` is a violation of what a shipped skill is expected to carry: a rule with no
7
- * stated boundary still installs, it just gets applied everywhere.
8
- */
9
- export interface Finding {
10
- readonly level: 'error' | 'warn';
11
- readonly message: string;
12
- readonly detail?: string;
13
- /** 1-indexed, when the finding belongs to a particular line. */
14
- readonly line?: number;
15
- }
16
- /**
17
- * Lint one skill file. `path` is only used to check that `name` matches where the file
18
- * lives, which is what keeps `family/skill` resolvable from the directory layout alone.
19
- */
20
- export declare function lintSkill(text: string, path?: string): Finding[];
21
- /**
22
- * Checks that need the whole registry: what a skill requires, and what its rules cite.
23
- *
24
- * A dangling cross-reference is an error rather than a warning because the agent is told
25
- * to consult a rule that will not be in its context, and it has no way to notice.
26
- */
27
- export declare function lintRegistry(skills: readonly Skill[]): Map<string, Finding[]>;
28
- //# sourceMappingURL=lint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAsBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAgHhE;AAUD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CA2B7E"}
@@ -1,169 +0,0 @@
1
- import { parseSkill, body as bodyOf, sections } from "./parse.js";
2
- import { SkillFormatError } from "./errors.js";
3
- const HUMAN_SECTIONS = ['Why', 'Pitfalls', 'Provenance'];
4
- /**
5
- * Words that make an instruction undecidable.
6
- *
7
- * The spec asks for text a reader can hold against a file and answer yes or no.
8
- * "Handle errors appropriately" cannot be checked, so it cannot be followed and cannot be
9
- * failed, which is worse than not being there: it costs context and changes nothing.
10
- */
11
- const VAGUE = [
12
- 'appropriately', 'properly', 'as needed', 'as appropriate', 'when appropriate',
13
- 'best practice', 'best practices', 'if necessary', 'where possible', 'reasonable',
14
- 'clean code', 'well-structured', 'avoid unnecessary',
15
- ];
16
- const lineOf = (text, needle) => {
17
- const at = text.indexOf(needle);
18
- return at < 0 ? undefined : text.slice(0, at).split('\n').length;
19
- };
20
- /**
21
- * Lint one skill file. `path` is only used to check that `name` matches where the file
22
- * lives, which is what keeps `family/skill` resolvable from the directory layout alone.
23
- */
24
- export function lintSkill(text, path) {
25
- const found = [];
26
- let skill;
27
- try {
28
- skill = parseSkill(text);
29
- }
30
- catch (cause) {
31
- // SkylError folds detail into message, so take the first line back out
32
- const e = cause;
33
- return [{ level: 'error', message: e.message.split('\n')[0], ...(e.detail ? { detail: e.detail } : {}) }];
34
- }
35
- if (path) {
36
- const parts = path.split(/[\\/]/).filter(Boolean);
37
- const dir = parts.slice(-3, -1).join('/');
38
- if (dir !== '' && dir !== skill.name) {
39
- found.push({
40
- level: 'error',
41
- message: `name \`${skill.name}\` does not match its path`,
42
- detail: `the file lives in ${dir}/, so it can never be found by name`,
43
- });
44
- }
45
- }
46
- const md = bodyOf(text);
47
- const all = sections(md);
48
- // line numbers are reported against the file, not the body, or they point at nothing
49
- const offset = text.slice(0, text.length - md.length).split('\n').length - 1;
50
- for (const s of HUMAN_SECTIONS) {
51
- if (!all.has(s)) {
52
- found.push({ level: 'warn', message: `no \`## ${s}\` section`, detail: 'required for a shipped skill' });
53
- }
54
- }
55
- if (skill.rules.length === 0) {
56
- found.push({
57
- level: 'error',
58
- message: 'no rules found',
59
- detail: 'a rule is `- **PREFIX-N** `must`: instruction`',
60
- });
61
- }
62
- const seen = new Set();
63
- for (const rule of skill.rules) {
64
- if (seen.has(rule.id)) {
65
- found.push({ level: 'error', message: `duplicate rule id \`${rule.id}\``, ...lineFor(md, rule.id, offset) });
66
- }
67
- seen.add(rule.id);
68
- }
69
- for (const id of skill.retired) {
70
- if (!/^[A-Z0-9]+-\d+$/.test(id)) {
71
- found.push({
72
- level: 'error',
73
- message: `retired entry \`${id}\` is not a rule id`,
74
- detail: 'use the bare id, so reuse of it stays detectable',
75
- });
76
- continue;
77
- }
78
- if (seen.has(id)) {
79
- found.push({
80
- level: 'error',
81
- message: `retired id \`${id}\` is in use again`,
82
- detail: 'ids are never reused: published evidence points at the old one',
83
- ...lineFor(md, id, offset),
84
- });
85
- }
86
- }
87
- // each rule block: the boundary, the failure it names, and decidable wording
88
- for (const block of md.split(/^- \*\*/m).slice(1)) {
89
- const id = /^([A-Z0-9]+-\d+)/.exec(block)?.[1];
90
- if (!id)
91
- continue;
92
- const at = lineFor(md, id, offset);
93
- if (!block.includes('*Why:*')) {
94
- found.push({ level: 'warn', message: `${id}: no \`*Why:*\``, detail: 'the reader cannot recognise the bug in the wild', ...at });
95
- }
96
- if (!block.includes('*Not when:*')) {
97
- found.push({ level: 'warn', message: `${id}: no \`*Not when:*\``, detail: 'a rule with no stated boundary is applied everywhere', ...at });
98
- }
99
- // only the instruction has to be decidable: `*Why:*` is prose explaining a failure,
100
- // and "the timeout was not reasonable" is a fine thing to say there
101
- const instruction = block.split('*Why:*')[0].toLowerCase();
102
- for (const word of VAGUE) {
103
- if (instruction.includes(word)) {
104
- found.push({ level: 'warn', message: `${id}: "${word}" is not decidable`, detail: 'a reader cannot hold it against a file and answer yes or no', ...at });
105
- break;
106
- }
107
- }
108
- }
109
- // Skills are copied into files that hundreds of different models and editors read back.
110
- // Plain ASCII punctuation is the one form all of them round-trip unchanged.
111
- const dash = text.indexOf('—');
112
- if (dash >= 0) {
113
- found.push({
114
- level: 'warn',
115
- message: 'em dash in the text',
116
- detail: 'use a comma, a full stop, or a colon',
117
- line: text.slice(0, dash).split('\n').length,
118
- });
119
- }
120
- if (Object.keys(skill.detect).length === 0) {
121
- found.push({
122
- level: 'warn',
123
- message: 'no `detect` block',
124
- detail: 'nothing will ever propose this skill, it can only be installed by name',
125
- });
126
- }
127
- return found;
128
- }
129
- function lineFor(md, id, offset) {
130
- const line = lineOf(md, `**${id}**`);
131
- return line === undefined ? {} : { line: line + offset };
132
- }
133
- /** `` `android/core WORK-3` `` inside any skill body. */
134
- const XREF = /`([a-z0-9-]+\/[a-z0-9-]+)\s+([A-Z0-9]+-\d+)`/g;
135
- /**
136
- * Checks that need the whole registry: what a skill requires, and what its rules cite.
137
- *
138
- * A dangling cross-reference is an error rather than a warning because the agent is told
139
- * to consult a rule that will not be in its context, and it has no way to notice.
140
- */
141
- export function lintRegistry(skills) {
142
- const out = new Map();
143
- const byName = new Map(skills.map((s) => [s.name, s]));
144
- const ruleIds = new Map(skills.map((s) => [s.name, new Set([...s.rules.map((r) => r.id), ...s.retired])]));
145
- for (const skill of skills) {
146
- const found = [];
147
- for (const dep of skill.requires) {
148
- if (!byName.has(dep)) {
149
- found.push({ level: 'error', message: `requires \`${dep}\`, which is not in the registry` });
150
- }
151
- }
152
- for (const m of skill.raw.matchAll(XREF)) {
153
- const [, target, rule] = m;
154
- if (target === skill.name)
155
- continue;
156
- const ids = ruleIds.get(target);
157
- if (!ids) {
158
- found.push({ level: 'error', message: `cites \`${target} ${rule}\`, and \`${target}\` is not in the registry` });
159
- }
160
- else if (!ids.has(rule)) {
161
- found.push({ level: 'error', message: `cites \`${target} ${rule}\`, which does not exist` });
162
- }
163
- }
164
- if (found.length > 0)
165
- out.set(skill.name, found);
166
- }
167
- return out;
168
- }
169
- //# sourceMappingURL=lint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import type { Skill } from './types.ts';
2
- /**
3
- * `skyl.lock` records what was installed and the hash of what was written.
4
- *
5
- * The hash is of the installed content, not the source file: that is what `update` has
6
- * to compare against, and it is what tells local edits apart from upstream changes.
7
- */
8
- export interface LockEntry {
9
- readonly version: string;
10
- /** sha256 of the installed text, `sha256:<hex>`. */
11
- readonly hash: string;
12
- /** Whether the user asked for this or it arrived through `requires`. */
13
- readonly reason: 'requested' | 'required';
14
- }
15
- export interface Lockfile {
16
- readonly lockfileVersion: 1;
17
- readonly target: string;
18
- readonly source?: string;
19
- readonly skills: Record<string, LockEntry>;
20
- }
21
- export declare const LOCKFILE_NAME = "skyl.lock";
22
- export declare function hashContent(text: string): string;
23
- export declare function emptyLockfile(target: string): Lockfile;
24
- export declare function parseLockfile(text: string): Lockfile;
25
- /** Serialised with sorted keys so a reinstall produces no diff. */
26
- export declare function formatLockfile(lock: Lockfile): string;
27
- export declare function entryFor(skill: Skill, installed: string, reason: LockEntry['reason']): LockEntry;
28
- export type DriftKind = 'unchanged' | 'local-edit' | 'upstream-change' | 'both' | 'missing';
29
- /**
30
- * What happened to an installed skill.
31
- *
32
- * `local-edit` and `upstream-change` are told apart because the fix differs: one is the
33
- * user's work to keep, the other is ours to offer. When both moved, neither can be
34
- * applied blindly.
35
- */
36
- export declare function drift(entry: LockEntry | undefined, onDisk: string | undefined, upstream: Skill | undefined): DriftKind;
37
- //# sourceMappingURL=lockfile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../src/lockfile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;CAC3C;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAMpD;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAKrD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,CAEhG;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5F;;;;;;GAMG;AACH,wBAAgB,KAAK,CACnB,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,KAAK,GAAG,SAAS,GAC1B,SAAS,CAQX"}