@skillit/core 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/audit-formatter.d.ts +2 -0
  2. package/dist/audit-formatter.d.ts.map +1 -1
  3. package/dist/audit-formatter.js +2 -0
  4. package/dist/audit-formatter.js.map +1 -1
  5. package/dist/audit-score.js +82 -4
  6. package/dist/audit-score.js.map +1 -1
  7. package/dist/audit-types.d.ts +1 -29
  8. package/dist/audit-types.d.ts.map +1 -1
  9. package/dist/audit.d.ts +6 -2
  10. package/dist/audit.d.ts.map +1 -1
  11. package/dist/audit.js +39 -32
  12. package/dist/audit.js.map +1 -1
  13. package/dist/config-extract.d.ts +48 -0
  14. package/dist/config-extract.d.ts.map +1 -0
  15. package/dist/config-extract.js +230 -0
  16. package/dist/config-extract.js.map +1 -0
  17. package/dist/docs-scanner.d.ts +3 -0
  18. package/dist/docs-scanner.d.ts.map +1 -1
  19. package/dist/docs-scanner.js +3 -0
  20. package/dist/docs-scanner.js.map +1 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/refine/ast-edit.d.ts +41 -0
  26. package/dist/refine/ast-edit.d.ts.map +1 -1
  27. package/dist/refine/ast-edit.js +187 -19
  28. package/dist/refine/ast-edit.js.map +1 -1
  29. package/dist/refine/config-source.d.ts +81 -0
  30. package/dist/refine/config-source.d.ts.map +1 -0
  31. package/dist/refine/config-source.js +283 -0
  32. package/dist/refine/config-source.js.map +1 -0
  33. package/dist/refine/index.d.ts +5 -1
  34. package/dist/refine/index.d.ts.map +1 -1
  35. package/dist/refine/index.js +3 -1
  36. package/dist/refine/index.js.map +1 -1
  37. package/dist/refine/jsdoc-edit.d.ts +8 -1
  38. package/dist/refine/jsdoc-edit.d.ts.map +1 -1
  39. package/dist/refine/jsdoc-edit.js +8 -1
  40. package/dist/refine/jsdoc-edit.js.map +1 -1
  41. package/dist/refine/loop.d.ts.map +1 -1
  42. package/dist/refine/loop.js +26 -5
  43. package/dist/refine/loop.js.map +1 -1
  44. package/dist/refine/package-metadata.d.ts +28 -0
  45. package/dist/refine/package-metadata.d.ts.map +1 -0
  46. package/dist/refine/package-metadata.js +64 -0
  47. package/dist/refine/package-metadata.js.map +1 -0
  48. package/dist/refine/select-targets.d.ts.map +1 -1
  49. package/dist/refine/select-targets.js +31 -6
  50. package/dist/refine/select-targets.js.map +1 -1
  51. package/dist/refine/types.d.ts +29 -2
  52. package/dist/refine/types.d.ts.map +1 -1
  53. package/dist/renderer.js +13 -8
  54. package/dist/renderer.js.map +1 -1
  55. package/dist/tokens.d.ts +2 -0
  56. package/dist/tokens.d.ts.map +1 -1
  57. package/dist/tokens.js +2 -0
  58. package/dist/tokens.js.map +1 -1
  59. package/dist/types.d.ts +21 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-source.js","sourceRoot":"","sources":["../../src/refine/config-source.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,9 @@ export * from './select-targets.js';
3
3
  export { refineSkill } from './loop.js';
4
4
  export type { ScoreSkill } from './loop.js';
5
5
  export { insertJsDocTag } from './jsdoc-edit.js';
6
- export { upsertJsDocTag, readJsDocTags } from './ast-edit.js';
6
+ export { upsertJsDocTag, upsertPropertyJsDocTag, readJsDocTags } from './ast-edit.js';
7
+ export { ConfigRefineSource } from './config-source.js';
8
+ export type { ConfigRefineSourceOptions } from './config-source.js';
9
+ export { stripScope, findNearestPackageDir, readPackageMetadata } from './package-metadata.js';
10
+ export type { PackageMetadata } from './package-metadata.js';
7
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/refine/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/refine/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC/F,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -2,5 +2,7 @@ export * from './types.js';
2
2
  export * from './select-targets.js';
3
3
  export { refineSkill } from './loop.js';
4
4
  export { insertJsDocTag } from './jsdoc-edit.js';
5
- export { upsertJsDocTag, readJsDocTags } from './ast-edit.js';
5
+ export { upsertJsDocTag, upsertPropertyJsDocTag, readJsDocTags } from './ast-edit.js';
6
+ export { ConfigRefineSource } from './config-source.js';
7
+ export { stripScope, findNearestPackageDir, readPackageMetadata } from './package-metadata.js';
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/refine/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/refine/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,4 +1,11 @@
1
1
  import type { RefineTag } from './types.js';
2
- /** @deprecated internal alias — use upsertJsDocTag. Kept for callers/tests. */
2
+ /**
3
+ * @deprecated internal alias — use {@link upsertJsDocTag}. Kept for callers/tests.
4
+ *
5
+ * @remarks
6
+ * A thin pass-through to {@link upsertJsDocTag} with identical parameters and
7
+ * behaviour; retained only so existing callers and tests that import the old
8
+ * name keep compiling. New code should call {@link upsertJsDocTag} directly.
9
+ */
3
10
  export declare function insertJsDocTag(source: string, exportName: string, tag: RefineTag, content: string): string;
4
11
  //# sourceMappingURL=jsdoc-edit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsdoc-edit.d.ts","sourceRoot":"","sources":["../../src/refine/jsdoc-edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAER"}
1
+ {"version":3,"file":"jsdoc-edit.d.ts","sourceRoot":"","sources":["../../src/refine/jsdoc-edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAER"}
@@ -1,5 +1,12 @@
1
1
  import { upsertJsDocTag } from './ast-edit.js';
2
- /** @deprecated internal alias — use upsertJsDocTag. Kept for callers/tests. */
2
+ /**
3
+ * @deprecated internal alias — use {@link upsertJsDocTag}. Kept for callers/tests.
4
+ *
5
+ * @remarks
6
+ * A thin pass-through to {@link upsertJsDocTag} with identical parameters and
7
+ * behaviour; retained only so existing callers and tests that import the old
8
+ * name keep compiling. New code should call {@link upsertJsDocTag} directly.
9
+ */
3
10
  export function insertJsDocTag(source, exportName, tag, content) {
4
11
  return upsertJsDocTag(source, exportName, tag, content);
5
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsdoc-edit.js","sourceRoot":"","sources":["../../src/refine/jsdoc-edit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,UAAkB,EAClB,GAAc,EACd,OAAe;IAEf,OAAO,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"jsdoc-edit.js","sourceRoot":"","sources":["../../src/refine/jsdoc-edit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,UAAkB,EAClB,GAAc,EACd,OAAe;IAEf,OAAO,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/refine/loop.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,KAAK,EAGV,aAAa,EACb,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,kBAAkB,CAAC;AAavE,wBAAsB,WAAW,CAC/B,IAAI,EAAE,aAAa,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,GAChD,OAAO,CAAC,YAAY,CAAC,CA0FvB"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/refine/loop.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,KAAK,EAGV,aAAa,EACb,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,kBAAkB,CAAC;AAwBvE,wBAAsB,WAAW,CAC/B,IAAI,EAAE,aAAa,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,GAChD,OAAO,CAAC,YAAY,CAAC,CAuGvB"}
@@ -5,14 +5,24 @@ import { selectWorkItems } from './select-targets.js';
5
5
  const DEFAULT_PASSING_GRADES = ['A'];
6
6
  const DEFAULT_MAX_ITERATIONS = 5;
7
7
  const DEFAULT_ITEMS_PER_ITERATION = 5;
8
- function defaultScore(source) {
8
+ function defaultScore() {
9
9
  return (skill) => {
10
- const audit = auditSkill(skill, source.auditContext(skill));
10
+ const audit = auditSkill(skill);
11
11
  return estimateSkillJudgeScore(audit, skill);
12
12
  };
13
13
  }
14
+ /**
15
+ * Total work items currently available across all improvements (uncapped), used
16
+ * as the loop's "backlog" signal. Reuses {@link selectWorkItems} so it counts
17
+ * exactly what would become work — i.e. improvements with a parseable tag and
18
+ * targets. Shrinks as config options get tagged; stays flat when the model is
19
+ * stuck re-drafting the same still-failing targets.
20
+ */
21
+ function countAvailableWork(improvements) {
22
+ return selectWorkItems(improvements, Number.POSITIVE_INFINITY).length;
23
+ }
14
24
  export async function refineSkill(opts) {
15
- const { source, model, passingGrades = DEFAULT_PASSING_GRADES, maxIterations = DEFAULT_MAX_ITERATIONS, itemsPerIteration = DEFAULT_ITEMS_PER_ITERATION, onIteration, scoreSkill = defaultScore(source) } = opts;
25
+ const { source, model, passingGrades = DEFAULT_PASSING_GRADES, maxIterations = DEFAULT_MAX_ITERATIONS, itemsPerIteration = DEFAULT_ITEMS_PER_ITERATION, onIteration, scoreSkill = defaultScore() } = opts;
16
26
  const passingSet = new Set(passingGrades);
17
27
  const iterations = [];
18
28
  let skill = await source.extract();
@@ -22,9 +32,19 @@ export async function refineSkill(opts) {
22
32
  return finished('passed', skill, estimate, iterations, guidance);
23
33
  }
24
34
  let prevTotal = estimate.total;
35
+ let prevAvailable = countAvailableWork(estimate.improvements);
25
36
  for (let i = 0; i < maxIterations; i++) {
26
- // Plateau: if this isn't the last allowed iteration and score hasn't improved, stop early.
27
- if (i > 0 && i < maxIterations - 1 && estimate.total <= prevTotal) {
37
+ const available = countAvailableWork(estimate.improvements);
38
+ // Plateau: stop early when the score has stalled but NOT while we're still
39
+ // burning down a backlog of work. Per-option config coverage targets become
40
+ // score-neutral once the routing thresholds (W7/W8/W9) pass, yet each
41
+ // iteration still documents more options; a pure score check would halt that
42
+ // mid-surface. Only plateau when the score is flat AND the available-work
43
+ // pool is not shrinking (the genuinely-stuck case the check exists to catch).
44
+ if (i > 0 &&
45
+ i < maxIterations - 1 &&
46
+ estimate.total <= prevTotal &&
47
+ available >= prevAvailable) {
28
48
  return finished('plateau', skill, estimate, iterations, guidance);
29
49
  }
30
50
  const workItems = selectWorkItems(estimate.improvements, itemsPerIteration);
@@ -74,6 +94,7 @@ export async function refineSkill(opts) {
74
94
  }
75
95
  await source.applyFixes(fixes);
76
96
  prevTotal = estimate.total;
97
+ prevAvailable = available;
77
98
  skill = await source.extract();
78
99
  estimate = scoreSkill(skill);
79
100
  const iteration = { iteration: i + 1, estimate, workItems, fixes };
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/refine/loop.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAYtD,MAAM,sBAAsB,GAA+C,CAAC,GAAG,CAAC,CAAC;AACjF,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,MAA+B;IACnD,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,OAAO,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAiD;IAEjD,MAAM,EACJ,MAAM,EACN,KAAK,EACL,aAAa,GAAG,sBAAsB,EACtC,aAAa,GAAG,sBAAsB,EACtC,iBAAiB,GAAG,2BAA2B,EAC/C,WAAW,EACX,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,EAClC,GAAG,IAAI,CAAC;IAET,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,IAAI,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC3C,IAAI,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,2FAA2F;QAC3F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;YAClE,OAAO,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjE,IAAI,YAAgC,CAAC;YACrC,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;gBACrB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;oBACnE,YAAY,GAAG,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAuB,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,IAAI,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU;gBACvC,YAAY;gBACZ,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK;gBACL,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU;gBACvC,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;oBACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,UAAU,EAAE,MAAM,CAAC,QAAQ;oBAC3B,YAAY,EAAE,KAAK;oBACnB,KAAK;oBACL,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAE7B,MAAM,SAAS,GAAoB,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpF,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;QAEzB,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,QAAQ,CACf,aAA+B,EAC/B,UAA0B,EAC1B,aAAiC,EACjC,UAAsC,EACtC,QAA4B;IAE5B,OAAO;QACL,UAAU;QACV,UAAU;QACV,aAAa;QACb,MAAM,EAAE,aAAa,KAAK,QAAQ;QAClC,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/refine/loop.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAYtD,MAAM,sBAAsB,GAA+C,CAAC,GAAG,CAAC,CAAC;AACjF,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,SAAS,YAAY;IACnB,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,YAAgD;IAC1E,OAAO,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAiD;IAEjD,MAAM,EACJ,MAAM,EACN,KAAK,EACL,aAAa,GAAG,sBAAsB,EACtC,aAAa,GAAG,sBAAsB,EACtC,iBAAiB,GAAG,2BAA2B,EAC/C,WAAW,EACX,UAAU,GAAG,YAAY,EAAE,EAC5B,GAAG,IAAI,CAAC;IAET,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,IAAI,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC3C,IAAI,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/B,IAAI,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5D,6EAA6E;QAC7E,4EAA4E;QAC5E,sEAAsE;QACtE,6EAA6E;QAC7E,0EAA0E;QAC1E,8EAA8E;QAC9E,IACE,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,aAAa,GAAG,CAAC;YACrB,QAAQ,CAAC,KAAK,IAAI,SAAS;YAC3B,SAAS,IAAI,aAAa,EAC1B,CAAC;YACD,OAAO,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjE,IAAI,YAAgC,CAAC;YACrC,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;gBACrB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;oBACnE,YAAY,GAAG,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAuB,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,IAAI,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU;gBACvC,YAAY;gBACZ,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK;gBACL,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU;gBACvC,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;oBACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,UAAU,EAAE,MAAM,CAAC,QAAQ;oBAC3B,YAAY,EAAE,KAAK;oBACnB,KAAK;oBACL,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,aAAa,GAAG,SAAS,CAAC;QAC1B,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAE7B,MAAM,SAAS,GAAoB,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpF,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;QAEzB,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,QAAQ,CACf,aAA+B,EAC/B,UAA0B,EAC1B,aAAiC,EACjC,UAAsC,EACtC,QAA4B;IAE5B,OAAO;QACL,UAAU;QACV,UAAU;QACV,aAAa;QACb,MAAM,EAAE,aAAa,KAAK,QAAQ;QAClC,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { ParsedReadme } from '../audit-types.js';
2
+ /** Package metadata read from a package dir (package.json fields + parsed README). */
3
+ export interface PackageMetadata {
4
+ /** Scope-stripped package name. */
5
+ packageName?: string;
6
+ packageDescription?: string;
7
+ keywords?: string[];
8
+ repository?: string;
9
+ readme?: ParsedReadme;
10
+ }
11
+ /** Strip a leading `@scope/` from a package name. */
12
+ export declare function stripScope(name: string): string;
13
+ /**
14
+ * Walk up from `startDir` (inclusive) up to `maxDepth` parents looking for a
15
+ * directory containing a `package.json`. Returns the dir, or undefined.
16
+ *
17
+ * @param startDir - Directory to start the upward search from (searched first).
18
+ * @param maxDepth - Maximum number of parent directories to ascend (default 5).
19
+ * @returns The nearest directory containing a `package.json`, or `undefined`
20
+ * when none is found within `maxDepth` levels (or the filesystem root is hit).
21
+ */
22
+ export declare function findNearestPackageDir(startDir: string, maxDepth?: number): Promise<string | undefined>;
23
+ /**
24
+ * Read package.json fields + `parseReadme(README.md)` from `pkgDir`. Never
25
+ * throws — unreadable/absent files yield unset fields.
26
+ */
27
+ export declare function readPackageMetadata(pkgDir: string): Promise<PackageMetadata>;
28
+ //# sourceMappingURL=package-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-metadata.d.ts","sourceRoot":"","sources":["../../src/refine/package-metadata.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAID,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,QAAQ,SAAoB,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAa7B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAuBlF"}
@@ -0,0 +1,64 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ import { parseReadme } from '../readme-parser.js';
4
+ const DEFAULT_MAX_DEPTH = 5;
5
+ /** Strip a leading `@scope/` from a package name. */
6
+ export function stripScope(name) {
7
+ const slash = name.indexOf('/');
8
+ return name.startsWith('@') && slash !== -1 ? name.slice(slash + 1) : name;
9
+ }
10
+ /**
11
+ * Walk up from `startDir` (inclusive) up to `maxDepth` parents looking for a
12
+ * directory containing a `package.json`. Returns the dir, or undefined.
13
+ *
14
+ * @param startDir - Directory to start the upward search from (searched first).
15
+ * @param maxDepth - Maximum number of parent directories to ascend (default 5).
16
+ * @returns The nearest directory containing a `package.json`, or `undefined`
17
+ * when none is found within `maxDepth` levels (or the filesystem root is hit).
18
+ */
19
+ export async function findNearestPackageDir(startDir, maxDepth = DEFAULT_MAX_DEPTH) {
20
+ let dir = startDir;
21
+ for (let i = 0; i <= maxDepth; i++) {
22
+ try {
23
+ await readFile(join(dir, 'package.json'), 'utf8');
24
+ return dir;
25
+ }
26
+ catch {
27
+ const parent = dirname(dir);
28
+ if (parent === dir)
29
+ break;
30
+ dir = parent;
31
+ }
32
+ }
33
+ return undefined;
34
+ }
35
+ /**
36
+ * Read package.json fields + `parseReadme(README.md)` from `pkgDir`. Never
37
+ * throws — unreadable/absent files yield unset fields.
38
+ */
39
+ export async function readPackageMetadata(pkgDir) {
40
+ const meta = {};
41
+ try {
42
+ const pkg = JSON.parse(await readFile(join(pkgDir, 'package.json'), 'utf8'));
43
+ if (pkg.name)
44
+ meta.packageName = stripScope(pkg.name);
45
+ if (pkg.description)
46
+ meta.packageDescription = pkg.description;
47
+ if (Array.isArray(pkg.keywords))
48
+ meta.keywords = pkg.keywords;
49
+ const repo = typeof pkg.repository === 'string' ? pkg.repository : pkg.repository?.url;
50
+ if (repo)
51
+ meta.repository = repo;
52
+ }
53
+ catch {
54
+ /* no/invalid package.json */
55
+ }
56
+ try {
57
+ meta.readme = parseReadme(await readFile(join(pkgDir, 'README.md'), 'utf8'));
58
+ }
59
+ catch {
60
+ /* no README */
61
+ }
62
+ return meta;
63
+ }
64
+ //# sourceMappingURL=package-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-metadata.js","sourceRoot":"","sources":["../../src/refine/package-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAalD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,qDAAqD;AACrD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,QAAQ,GAAG,iBAAiB;IAE5B,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;YAClD,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YAC1B,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAc;IACtD,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAK1E,CAAC;QACF,IAAI,GAAG,CAAC,IAAI;YAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,GAAG,CAAC,WAAW;YAAE,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,WAAW,CAAC;QAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;QACvF,IAAI,IAAI;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-targets.d.ts","sourceRoot":"","sources":["../../src/refine/select-targets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5D,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAYlE;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,SAAS,qBAAqB,EAAE,EAC9C,KAAK,EAAE,MAAM,GACZ,cAAc,EAAE,CAYlB"}
1
+ {"version":3,"file":"select-targets.d.ts","sourceRoot":"","sources":["../../src/refine/select-targets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5D,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAYlE;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,SAAS,qBAAqB,EAAE,EAC9C,KAAK,EAAE,MAAM,GACZ,cAAc,EAAE,CAoClB"}
@@ -14,17 +14,42 @@ export function parseTag(suggestion) {
14
14
  return valid.has(tag) ? tag : undefined;
15
15
  }
16
16
  export function selectWorkItems(improvements, limit) {
17
- const items = [];
17
+ // Group an improvement's targets together, preserving target order, then rank
18
+ // the groups by points descending.
19
+ const groups = [];
18
20
  for (const imp of improvements) {
19
21
  const tag = parseTag(imp.suggestion);
20
22
  if (!tag)
21
23
  continue;
22
- const targets = imp.targets ?? [];
23
- for (const target of targets) {
24
- items.push({ toolName: target.name, tag, improvement: imp });
24
+ const group = (imp.targets ?? []).map((target) => ({
25
+ toolName: target.name,
26
+ tag,
27
+ improvement: imp
28
+ }));
29
+ if (group.length > 0)
30
+ groups.push(group);
31
+ }
32
+ groups.sort((a, b) => b[0].improvement.points - a[0].improvement.points);
33
+ // Round-robin across groups rather than draining the highest-points group
34
+ // first: take the Nth target of every group before any (N+1)th. A bounded
35
+ // iteration then spreads across ALL still-failing tags, so a tag with many
36
+ // completeness targets (e.g. `@pitfalls` on a wide config surface) can't
37
+ // monopolize the slice and starve `@useWhen`/`@avoidWhen` — which, before the
38
+ // first of those is ever drafted, let the loop's score plateau stop early with
39
+ // those dimensions still failing. With one target per group this is identical
40
+ // to the old points-descending order.
41
+ const items = [];
42
+ const maxLen = groups.reduce((m, g) => Math.max(m, g.length), 0);
43
+ for (let round = 0; round < maxLen && items.length < limit; round++) {
44
+ for (const group of groups) {
45
+ const item = group[round];
46
+ if (item) {
47
+ items.push(item);
48
+ if (items.length >= limit)
49
+ break;
50
+ }
25
51
  }
26
52
  }
27
- items.sort((a, b) => b.improvement.points - a.improvement.points);
28
- return items.slice(0, limit);
53
+ return items;
29
54
  }
30
55
  //# sourceMappingURL=select-targets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-targets.js","sourceRoot":"","sources":["../../src/refine/select-targets.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB,MAAM,UAAU,QAAQ,CAAC,UAAkB;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAc,CAAC;IAClC,MAAM,KAAK,GAA2B,IAAI,GAAG,CAAC;QAC5C,SAAS;QACT,WAAW;QACX,UAAU;QACV,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,YAA8C,EAC9C,KAAa;IAEb,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"select-targets.js","sourceRoot":"","sources":["../../src/refine/select-targets.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB,MAAM,UAAU,QAAQ,CAAC,UAAkB;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAc,CAAC;IAClC,MAAM,KAAK,GAA2B,IAAI,GAAG,CAAC;QAC5C,SAAS;QACT,WAAW;QACX,UAAU;QACV,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,YAA8C,EAC9C,KAAa;IAEb,8EAA8E;IAC9E,mCAAmC;IACnC,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjD,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,GAAG;YACH,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC,CAAC;QACJ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE3E,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,8EAA8E;IAC9E,+EAA+E;IAC/E,8EAA8E;IAC9E,sCAAsC;IACtC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;oBAAE,MAAM;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ExtractedSkill, SkillJudgeEstimate, ActionableImprovement, AuditContext } from '../index.js';
1
+ import type { ExtractedSkill, SkillJudgeEstimate, ActionableImprovement } from '../index.js';
2
2
  export type RefineTag = 'useWhen' | 'avoidWhen' | 'pitfalls' | 'remarks' | 'example';
3
3
  export interface DraftRequest {
4
4
  toolName: string;
@@ -30,11 +30,38 @@ export interface ModelClient {
30
30
  draft(req: DraftRequest): Promise<string>;
31
31
  review(req: ReviewRequest): Promise<ReviewResult>;
32
32
  }
33
+ /**
34
+ * Where an audit/judge target's enrichment surface lives on disk, so a caller
35
+ * (e.g. the agent-bootstrap slash command) can jump straight to the declaration
36
+ * instead of re-deriving the file from `sourceModule`.
37
+ */
38
+ export interface TargetLocation {
39
+ /** Absolute or repo-relative path to the file holding the declaration. */
40
+ file: string;
41
+ /** The declaration name to anchor the edit on (export name, interface, or option key). */
42
+ declName: string;
43
+ /** Dot-path into a config type when the target is a single option (e.g. `components.prefix`). */
44
+ propertyPath?: string;
45
+ }
33
46
  export interface RefineSource {
34
47
  extract(): Promise<ExtractedSkill>;
35
- auditContext(skill: ExtractedSkill): AuditContext;
36
48
  applyFixes(fixes: readonly DraftedFix[]): Promise<void>;
37
49
  guidance?(): string | Promise<string>;
50
+ /**
51
+ * Resolve an improvement target (`{file, name, kind}` from `ActionableImprovement.targets`)
52
+ * to a concrete on-disk location. Optional — a source that cannot resolve a
53
+ * given target returns `undefined`. Used by `skillit audit --json` and the
54
+ * agent-bootstrap loop.
55
+ *
56
+ * The return is a union of sync and async: config/typedoc resolve synchronously,
57
+ * but cli and mcp(build) must read source files, so they return a `Promise`.
58
+ * Callers `await` the result (awaiting a non-Promise is a no-op).
59
+ */
60
+ resolveTargetLocation?(target: {
61
+ name: string;
62
+ kind: string;
63
+ file?: string;
64
+ }): TargetLocation | undefined | Promise<TargetLocation | undefined>;
38
65
  }
39
66
  export interface RefineWorkItem {
40
67
  toolName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/refine/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAErF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAAC;IAClD,UAAU,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,qBAAqB,CAAC;CACpC;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;IACvC,UAAU,EAAE,cAAc,CAAC;IAC3B,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,gBAAgB,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/refine/types.ts"],"names":[],"mappings":"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"}
package/dist/renderer.js CHANGED
@@ -259,7 +259,7 @@ function renderRouterSkill(skills, opts) {
259
259
  return {
260
260
  short: s.name.replace(/^@[^/]+\//, ''),
261
261
  peerName: toSkillName(s.name),
262
- desc: s.packageDescription || s.description || '',
262
+ desc: s.description || s.packageDescription || '',
263
263
  remarks: s.remarks || '',
264
264
  useWhens: s.useWhen ?? [],
265
265
  avoidWhens: s.avoidWhen ?? [],
@@ -384,13 +384,16 @@ function renderSkillMd(skill, skillName, opts, refManifest) {
384
384
  sections.push(opts.bodyPrefix);
385
385
  }
386
386
  sections.push(`# ${skill.name}`);
387
- // Package description as body intro
388
- if (skill.packageDescription) {
389
- sections.push(skill.packageDescription);
390
- }
391
- else if (skill.description) {
387
+ // Surface description as body intro. `description` is the skill's render
388
+ // headline (a config source puts its config-specific blurb here); the literal
389
+ // package.json `packageDescription` is audit-only metadata, used here only as
390
+ // a last-resort fallback.
391
+ if (skill.description) {
392
392
  sections.push(skill.description);
393
393
  }
394
+ else if (skill.packageDescription) {
395
+ sections.push(skill.packageDescription);
396
+ }
394
397
  // @remarks from @packageDocumentation — architectural context, trade-offs, mental models
395
398
  if (skill.remarks) {
396
399
  sections.push(skill.remarks);
@@ -842,8 +845,10 @@ function buildRefManifest(basePath, references) {
842
845
  return manifest;
843
846
  }
844
847
  function buildDescription(skill) {
845
- // Description = package.json tagline + short WHEN clause + domain keywords.
846
- const desc = skill.packageDescription || skill.description || `API reference for ${skill.name}`;
848
+ // Description = surface tagline + short WHEN clause + domain keywords. Prefer
849
+ // the render headline (`description`); `packageDescription` is audit-only and
850
+ // serves only as a fallback.
851
+ const desc = skill.description || skill.packageDescription || `API reference for ${skill.name}`;
847
852
  const parts = [desc];
848
853
  // Add a short scenario-based WHEN from @useWhen (first item only, truncated to 80 chars)
849
854
  if (skill.useWhen && skill.useWhen.length > 0) {