forgeprint 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/dist/bin.js +1 -1
  3. package/dist/bin.js.map +1 -1
  4. package/dist/changed.d.ts +17 -0
  5. package/dist/changed.d.ts.map +1 -0
  6. package/dist/changed.js +62 -0
  7. package/dist/changed.js.map +1 -0
  8. package/dist/cli.d.ts +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +209 -25
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config.d.ts +1 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +6 -0
  15. package/dist/config.js.map +1 -1
  16. package/dist/index.d.ts +5 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +5 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/lint-setup.d.ts.map +1 -1
  21. package/dist/lint-setup.js +37 -2
  22. package/dist/lint-setup.js.map +1 -1
  23. package/dist/manifest.d.ts +2 -0
  24. package/dist/manifest.d.ts.map +1 -1
  25. package/dist/manifest.js +1 -1
  26. package/dist/manifest.js.map +1 -1
  27. package/dist/paths.d.ts +1 -0
  28. package/dist/paths.d.ts.map +1 -1
  29. package/dist/paths.js +1 -0
  30. package/dist/paths.js.map +1 -1
  31. package/dist/recipe.d.ts +43 -0
  32. package/dist/recipe.d.ts.map +1 -0
  33. package/dist/recipe.js +131 -0
  34. package/dist/recipe.js.map +1 -0
  35. package/dist/requests.d.ts +54 -0
  36. package/dist/requests.d.ts.map +1 -0
  37. package/dist/requests.js +102 -0
  38. package/dist/requests.js.map +1 -0
  39. package/dist/skills.d.ts +23 -0
  40. package/dist/skills.d.ts.map +1 -0
  41. package/dist/skills.js +162 -0
  42. package/dist/skills.js.map +1 -0
  43. package/dist/test-setup.d.ts +54 -0
  44. package/dist/test-setup.d.ts.map +1 -0
  45. package/dist/test-setup.js +219 -0
  46. package/dist/test-setup.js.map +1 -0
  47. package/dist/validate.d.ts.map +1 -1
  48. package/dist/validate.js +6 -0
  49. package/dist/validate.js.map +1 -1
  50. package/package.json +2 -1
@@ -13,6 +13,8 @@ const STEP_PATTERN = /^(\d+)\.\s+(\S.*)$/;
13
13
  const IF_PATTERN = /^<!--\s*if\s+options\.([a-z0-9-]+)\s*==\s*([a-z0-9-]+)\s*-->$/;
14
14
  const ENDIF_PATTERN = /^<!--\s*endif\s*-->$/;
15
15
  const ANY_GUARD_PATTERN = /^<!--\s*(if|endif)\b/;
16
+ /** A heading ends the step above it; the prose after a recipe is not a step. */
17
+ const HEADING_PATTERN = /^\s{0,3}#{1,6}\s/;
16
18
  /** Opening or closing line of a fenced code block. */
17
19
  const FENCE_PATTERN = /^\s*(?:```|~~~)/;
18
20
  /** Hosts a setup step may reach: package registries and the local machine. */
@@ -138,6 +140,10 @@ export function lintSetup(source, { options = {} } = {}) {
138
140
  current.body.push(text);
139
141
  return;
140
142
  }
143
+ if (HEADING_PATTERN.test(text)) {
144
+ closeStep();
145
+ return;
146
+ }
141
147
  const guard = IF_PATTERN.exec(text.trim());
142
148
  const isEndif = ENDIF_PATTERN.test(text.trim());
143
149
  if (guard !== null) {
@@ -229,6 +235,24 @@ export function lintSetup(source, { options = {} } = {}) {
229
235
  if (!step.body.some((text) => VERIFY_PATTERN.test(text))) {
230
236
  add(step.line, 'step-needs-verification', `step ${step.number} has no "Verify: \`command\`" line`);
231
237
  }
238
+ // A step that writes a file names the file in backticks and then opens a
239
+ // fenced block. Anything in backticks after that block is a second action,
240
+ // which makes the step unexecutable however clearly it reads.
241
+ const opening = step.body.findIndex((text) => FENCE_PATTERN.test(text));
242
+ if (opening !== -1) {
243
+ const closing = step.body.findIndex((text, at) => at > opening && FENCE_PATTERN.test(text));
244
+ const before = step.body.slice(0, opening).join('\n');
245
+ const after = step.body
246
+ .slice(closing === -1 ? step.body.length : closing + 1)
247
+ .filter((text) => !VERIFY_PATTERN.test(text))
248
+ .join('\n');
249
+ if (!/`[^`]+`/.test(before)) {
250
+ add(step.line, 'write-step-needs-path', `step ${step.number} writes a file but does not name it; put the path in backticks before the block`);
251
+ }
252
+ if (/`[^`]+`/.test(after)) {
253
+ add(step.line, 'one-action-per-step', `step ${step.number} states another action after the block; a step is one action, so give it its own step`);
254
+ }
255
+ }
232
256
  }
233
257
  // Only commands are linted. Prose that mentions `sudo` to warn against it is
234
258
  // not a violation; a code span that runs it is.
@@ -270,8 +294,19 @@ function hostsIn(text) {
270
294
  const authority = match[1];
271
295
  if (authority === undefined)
272
296
  continue;
273
- const host = authority.split('@').pop() ?? authority;
274
- hosts.push(host.replace(/:\d+$/, '').toLowerCase());
297
+ // A host the shell computes at run time cannot be checked here. The rules
298
+ // that matter for those commands — no privilege, no pipe from a download —
299
+ // are checked on the command itself.
300
+ if (authority.includes('$'))
301
+ continue;
302
+ const authorityOnly = authority.split('@').pop() ?? authority;
303
+ // Backslashes come from regexes written inside a command; the port may be a
304
+ // pattern rather than a number, so everything after the colon goes.
305
+ const withoutEscapes = authorityOnly.replace(/\\/g, '');
306
+ const host = withoutEscapes.startsWith('[')
307
+ ? withoutEscapes.slice(0, withoutEscapes.indexOf(']') + 1)
308
+ : (withoutEscapes.split(':')[0] ?? withoutEscapes);
309
+ hosts.push(host.toLowerCase());
275
310
  }
276
311
  return hosts;
277
312
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lint-setup.js","sourceRoot":"","sources":["../src/lint-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint-setup.js","sourceRoot":"","sources":["../src/lint-setup.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { type Taxonomy } from './taxonomy.js';
3
+ /** GitHub login, as GitHub itself validates it. */
4
+ export declare const GITHUB_HANDLE_PATTERN: RegExp;
3
5
  /** ADR 0001: variation is limited so the option matrix stays testable. */
4
6
  export declare const MAX_OPTION_FIELDS = 3;
5
7
  export declare const MAX_OPTION_VALUES = 3;
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAanE,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAiBnC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAmCtD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkBhD;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAExE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAIzD"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMnE,mDAAmD;AACnD,eAAO,MAAM,qBAAqB,QAAqD,CAAC;AAMxF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAiBnC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAmCtD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkBhD;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAExE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAIzD"}
package/dist/manifest.js CHANGED
@@ -3,7 +3,7 @@ import { SLUG_PATTERN, terms } from './taxonomy.js';
3
3
  /** https://semver.org — the official recommended pattern, anchored. */
4
4
  const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
5
5
  /** GitHub login, as GitHub itself validates it. */
6
- const GITHUB_HANDLE_PATTERN = /^[a-zA-Z\d](?:[a-zA-Z\d]|-(?=[a-zA-Z\d])){0,38}$/;
6
+ export const GITHUB_HANDLE_PATTERN = /^[a-zA-Z\d](?:[a-zA-Z\d]|-(?=[a-zA-Z\d])){0,38}$/;
7
7
  /** A tool with an optional version constraint, for example `dotnet>=9`. */
8
8
  const REQUIRED_TOOL_PATTERN = /^[a-z0-9][a-z0-9.+-]*(?:\s*(?:>=|<=|==|>|<|~|\^)\s*[0-9][0-9a-zA-Z.-]*)?$/;
9
9
  /** ADR 0001: variation is limited so the option matrix stays testable. */
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAiB,MAAM,eAAe,CAAC;AAEnE,uEAAuE;AACvE,MAAM,cAAc,GAClB,qLAAqL,CAAC;AAExL,mDAAmD;AACnD,MAAM,qBAAqB,GAAG,kDAAkD,CAAC;AAEjF,2EAA2E;AAC3E,MAAM,qBAAqB,GACzB,2EAA2E,CAAC;AAE9E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAExE,SAAS,UAAU,CAAC,QAAkB,EAAE,IAAiC;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,YAAY,CAAC,CAAC;IACnF,OAAO,CAAC,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAsB,IAAO,EAAE,GAAG,GAAG,CAAC;IACxD,OAAO,CAAC;SACL,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,GAAG,CAAC;SACR,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,OAAO,CAAC;SACL,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpB,IAAI;QACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,4BAA4B,CAAC;QACvE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;QAClC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;QAC3F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACpC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzD,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzD,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/D,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC;QAClD,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvD,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;aACP,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;aACzE,QAAQ,EAAE;QACb,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC;YACN,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;SACrC,CAAC;aACD,MAAM,EAAE;aACR,QAAQ,EAAE;QACb,cAAc,EAAE,WAAW,CACzB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,8CAA8C,CAAC,CACxF,CAAC,QAAQ,EAAE;QACZ,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC1C,CAAC;SACD,MAAM,EAAE,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACtC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,CAAC;gBACjB,OAAO,EAAE,WAAW,iBAAiB,qCAAqC,MAAM,CAAC,MAAM,aAAa;aACrG,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1C,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,YAAY,CAAC;gBACpB,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAID;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAiB,MAAM,eAAe,CAAC;AAEnE,uEAAuE;AACvE,MAAM,cAAc,GAClB,qLAAqL,CAAC;AAExL,mDAAmD;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,kDAAkD,CAAC;AAExF,2EAA2E;AAC3E,MAAM,qBAAqB,GACzB,2EAA2E,CAAC;AAE9E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAExE,SAAS,UAAU,CAAC,QAAkB,EAAE,IAAiC;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,YAAY,CAAC,CAAC;IACnF,OAAO,CAAC,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAsB,IAAO,EAAE,GAAG,GAAG,CAAC;IACxD,OAAO,CAAC;SACL,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,GAAG,CAAC;SACR,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,OAAO,CAAC;SACL,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpB,IAAI;QACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,4BAA4B,CAAC;QACvE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;QAClC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;QAC3F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACpC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzD,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzD,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/D,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC;QAClD,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvD,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;aACP,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;aACzE,QAAQ,EAAE;QACb,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC;YACN,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;SACrC,CAAC;aACD,MAAM,EAAE;aACR,QAAQ,EAAE;QACb,cAAc,EAAE,WAAW,CACzB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,8CAA8C,CAAC,CACxF,CAAC,QAAQ,EAAE;QACZ,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC1C,CAAC;SACD,MAAM,EAAE,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACtC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,CAAC;gBACjB,OAAO,EAAE,WAAW,iBAAiB,qCAAqC,MAAM,CAAC,MAAM,aAAa;aACrG,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1C,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,YAAY,CAAC;gBACpB,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAID;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;AAC7D,CAAC"}
package/dist/paths.d.ts CHANGED
@@ -9,6 +9,7 @@ export declare const repoPaths: {
9
9
  blueprintsDir: (root: string) => string;
10
10
  blueprintDir: (root: string, slug: string) => string;
11
11
  index: (root: string) => string;
12
+ requests: (root: string) => string;
12
13
  codeowners: (root: string) => string;
13
14
  };
14
15
  /** Files every blueprint folder must contain. */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAYrE;AAED,eAAO,MAAM,SAAS;qBACH,MAAM,KAAG,MAAM;2BACT,MAAM,KAAG,MAAM;0BAChB,MAAM,KAAG,MAAM;yBAChB,MAAM,QAAQ,MAAM,KAAG,MAAM;kBACpC,MAAM,KAAG,MAAM;uBACV,MAAM,KAAG,MAAM;CACnC,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,oFAM3B,CAAC"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAYrE;AAED,eAAO,MAAM,SAAS;qBACH,MAAM,KAAG,MAAM;2BACT,MAAM,KAAG,MAAM;0BAChB,MAAM,KAAG,MAAM;yBAChB,MAAM,QAAQ,MAAM,KAAG,MAAM;kBACpC,MAAM,KAAG,MAAM;qBACZ,MAAM,KAAG,MAAM;uBACb,MAAM,KAAG,MAAM;CACnC,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,oFAM3B,CAAC"}
package/dist/paths.js CHANGED
@@ -24,6 +24,7 @@ export const repoPaths = {
24
24
  blueprintsDir: (root) => join(root, 'blueprints'),
25
25
  blueprintDir: (root, slug) => join(root, 'blueprints', slug),
26
26
  index: (root) => join(root, 'docs', 'index.json'),
27
+ requests: (root) => join(root, 'docs', 'requests.json'),
27
28
  codeowners: (root) => join(root, '.github', 'CODEOWNERS'),
28
29
  };
29
30
  /** Files every blueprint folder must contain. */
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,2DAA2D;AAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC3D,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,sBAAsB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAC/F,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC;IACzE,cAAc,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,CAAC;IACtF,aAAa,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;IACjE,YAAY,EAAE,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC;IACpF,KAAK,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC;IACjE,UAAU,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;CAC1E,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,eAAe;IACf,WAAW;IACX,aAAa;IACb,UAAU;IACV,cAAc;CACN,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,2DAA2D;AAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC3D,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,sBAAsB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAC/F,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC;IACzE,cAAc,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,CAAC;IACtF,aAAa,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;IACjE,YAAY,EAAE,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC;IACpF,KAAK,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC;IACjE,QAAQ,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC;IACvE,UAAU,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;CAC1E,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,eAAe;IACf,WAAW;IACX,aAAa;IACb,UAAU;IACV,cAAc;CACN,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Turning a `setup.md` into something executable.
3
+ *
4
+ * The recipe is written for a reader, and it has to run. Both work because a
5
+ * step is exactly one action: either a command, or a file written from a fenced
6
+ * block. `lint-setup` enforces that shape, so this parser can be strict rather
7
+ * than clever — anything ambiguous is reported, never guessed.
8
+ */
9
+ export type RecipeAction = {
10
+ readonly kind: 'run';
11
+ readonly command: string;
12
+ } | {
13
+ readonly kind: 'write';
14
+ readonly path: string;
15
+ readonly contents: string;
16
+ };
17
+ export interface RecipeStep {
18
+ readonly number: number;
19
+ /** Line in `setup.md`, for error messages. */
20
+ readonly line: number;
21
+ /** The step's own words, for progress output. */
22
+ readonly title: string;
23
+ readonly action: RecipeAction;
24
+ /** The command that proves the step worked. */
25
+ readonly verify: string;
26
+ }
27
+ export interface RecipeProblem {
28
+ readonly line: number;
29
+ readonly message: string;
30
+ }
31
+ export interface Recipe {
32
+ readonly steps: readonly RecipeStep[];
33
+ /** Reasons the recipe could not be read as a script. */
34
+ readonly problems: readonly RecipeProblem[];
35
+ }
36
+ /**
37
+ * Parse an option-resolved `setup.md`.
38
+ *
39
+ * Guards must already be resolved; one left in place means the caller did not
40
+ * choose an option, and a recipe with branches in it is not a script.
41
+ */
42
+ export declare function parseRecipe(markdown: string): Recipe;
43
+ //# sourceMappingURL=recipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../src/recipe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC7C;AASD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoDpD"}
package/dist/recipe.js ADDED
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Turning a `setup.md` into something executable.
3
+ *
4
+ * The recipe is written for a reader, and it has to run. Both work because a
5
+ * step is exactly one action: either a command, or a file written from a fenced
6
+ * block. `lint-setup` enforces that shape, so this parser can be strict rather
7
+ * than clever — anything ambiguous is reported, never guessed.
8
+ */
9
+ const STEP_PATTERN = /^(\d+)\.\s+(\S.*)$/;
10
+ const VERIFY_PATTERN = /^\s*(?:[-*]\s*)?Verify:\s*`([^`]+)`/;
11
+ const FENCE_PATTERN = /^(\s*)(?:```|~~~)(.*)$/;
12
+ const GUARD_PATTERN = /^\s*<!--\s*(?:if|endif)\b/;
13
+ /** A heading ends the step above it; the prose after a recipe is not a step. */
14
+ const HEADING_PATTERN = /^\s{0,3}#{1,6}\s/;
15
+ /**
16
+ * Parse an option-resolved `setup.md`.
17
+ *
18
+ * Guards must already be resolved; one left in place means the caller did not
19
+ * choose an option, and a recipe with branches in it is not a script.
20
+ */
21
+ export function parseRecipe(markdown) {
22
+ const lines = markdown.split(/\r?\n/);
23
+ const steps = [];
24
+ const problems = [];
25
+ let current = null;
26
+ let inFence = false;
27
+ const finish = () => {
28
+ if (current === null)
29
+ return;
30
+ const step = readStep(current);
31
+ if ('message' in step)
32
+ problems.push({ line: current.line, message: step.message });
33
+ else
34
+ steps.push(step);
35
+ current = null;
36
+ };
37
+ lines.forEach((text, index) => {
38
+ if (FENCE_PATTERN.test(text)) {
39
+ inFence = !inFence;
40
+ current?.body.push(text);
41
+ return;
42
+ }
43
+ if (inFence) {
44
+ current?.body.push(text);
45
+ return;
46
+ }
47
+ if (GUARD_PATTERN.test(text)) {
48
+ finish();
49
+ problems.push({
50
+ line: index + 1,
51
+ message: 'an option guard is still in the recipe; resolve the options first',
52
+ });
53
+ return;
54
+ }
55
+ if (HEADING_PATTERN.test(text)) {
56
+ finish();
57
+ return;
58
+ }
59
+ const start = STEP_PATTERN.exec(text);
60
+ if (start !== null) {
61
+ finish();
62
+ current = { number: Number(start[1]), line: index + 1, body: [start[2] ?? ''] };
63
+ return;
64
+ }
65
+ current?.body.push(text);
66
+ });
67
+ finish();
68
+ if (steps.length === 0 && problems.length === 0) {
69
+ problems.push({ line: 1, message: 'the recipe has no numbered steps' });
70
+ }
71
+ return { steps, problems };
72
+ }
73
+ function readStep(raw) {
74
+ const verifyLine = raw.body.find((text) => VERIFY_PATTERN.test(text));
75
+ const verify = verifyLine === undefined ? undefined : VERIFY_PATTERN.exec(verifyLine)?.[1];
76
+ if (verify === undefined) {
77
+ return { message: `step ${raw.number} has no "Verify: \`command\`" line` };
78
+ }
79
+ const body = raw.body.filter((text) => !VERIFY_PATTERN.test(text));
80
+ const fence = readFence(body);
81
+ if (fence === undefined) {
82
+ const command = lastCodeSpan(body.join('\n'));
83
+ if (command === undefined) {
84
+ return { message: `step ${raw.number} states no command` };
85
+ }
86
+ return {
87
+ number: raw.number,
88
+ line: raw.line,
89
+ title: summarize(body),
90
+ action: { kind: 'run', command },
91
+ verify,
92
+ };
93
+ }
94
+ const path = lastCodeSpan(body.slice(0, fence.start).join('\n'));
95
+ if (path === undefined) {
96
+ return {
97
+ message: `step ${raw.number} writes a file but does not name it; put the path in backticks before the block`,
98
+ };
99
+ }
100
+ return {
101
+ number: raw.number,
102
+ line: raw.line,
103
+ title: summarize(body.slice(0, fence.start)),
104
+ action: { kind: 'write', path, contents: fence.contents },
105
+ verify,
106
+ };
107
+ }
108
+ /** The first fenced block in a step body, dedented to the fence's own indent. */
109
+ function readFence(body) {
110
+ const start = body.findIndex((text) => FENCE_PATTERN.test(text));
111
+ if (start === -1)
112
+ return undefined;
113
+ const indent = FENCE_PATTERN.exec(body[start] ?? '')?.[1]?.length ?? 0;
114
+ const end = body.findIndex((text, at) => at > start && FENCE_PATTERN.test(text));
115
+ const inner = body.slice(start + 1, end === -1 ? undefined : end);
116
+ const contents = inner
117
+ .map((text) => (text.slice(0, indent).trim().length === 0 ? text.slice(indent) : text))
118
+ .join('\n')
119
+ .replace(/\s+$/, '');
120
+ return { start, contents: `${contents}\n` };
121
+ }
122
+ /** Code spans are how a recipe names a command or a path. The last one wins. */
123
+ function lastCodeSpan(text) {
124
+ const spans = [...text.matchAll(/`([^`]+)`/g)];
125
+ return spans.length === 0 ? undefined : spans[spans.length - 1]?.[1];
126
+ }
127
+ function summarize(body) {
128
+ const first = body.join(' ').replace(/\s+/g, ' ').trim();
129
+ return first.length > 100 ? `${first.slice(0, 97)}...` : first;
130
+ }
131
+ //# sourceMappingURL=recipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe.js","sourceRoot":"","sources":["../src/recipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * The demand signal, as data.
4
+ *
5
+ * `request_blueprint` turns "nothing fits" into a public issue, and that list
6
+ * is what decides which blueprint gets written next — the catalog grows by
7
+ * demand, not by guesswork (CLAUDE.md §3.4). The site shows it, so it has to
8
+ * exist as a file: Pages serves a branch, and a browser fetching the GitHub
9
+ * API on every page load would be a different product.
10
+ *
11
+ * It is generated and committed like the other artifacts, with one difference
12
+ * that matters: it comes from outside the repository, so `validate` cannot
13
+ * regenerate it to check for drift. Nothing depends on it being current — a
14
+ * stale list is a list, and a missing one renders as "none yet".
15
+ */
16
+ /** The label `.github/ISSUE_TEMPLATE/blueprint-request.yml` applies. */
17
+ export declare const REQUEST_LABEL = "blueprint-request";
18
+ declare const requestSchema: z.ZodObject<{
19
+ number: z.ZodNumber;
20
+ title: z.ZodString;
21
+ url: z.ZodString;
22
+ author: z.ZodString;
23
+ }, z.core.$strip>;
24
+ declare const fileSchema: z.ZodObject<{
25
+ repository: z.ZodString;
26
+ generated_on: z.ZodString;
27
+ requests: z.ZodArray<z.ZodObject<{
28
+ number: z.ZodNumber;
29
+ title: z.ZodString;
30
+ url: z.ZodString;
31
+ author: z.ZodString;
32
+ }, z.core.$strip>>;
33
+ }, z.core.$strip>;
34
+ export type BlueprintRequest = z.infer<typeof requestSchema>;
35
+ export type RequestsFile = z.infer<typeof fileSchema>;
36
+ /**
37
+ * Open blueprint requests, straight from `gh`.
38
+ *
39
+ * `gh` rather than a fetch with a token: the maintainer is already
40
+ * authenticated, and nothing here should ask anybody for a secret.
41
+ */
42
+ export declare function fetchRequests(repository: string): BlueprintRequest[];
43
+ /** True when `gh` is on this machine, which is the only thing this needs. */
44
+ export declare function hasGitHubCli(): boolean;
45
+ export declare function renderRequests(repository: string, requests: readonly BlueprintRequest[], generatedOn?: string): string;
46
+ /** The date, to the day: a rebuild an hour later is still the same snapshot. */
47
+ export declare function today(): string;
48
+ /**
49
+ * The committed list, or nothing at all. Every failure is the same answer —
50
+ * no requests — because a demand list is never worth failing a build over.
51
+ */
52
+ export declare function readRequests(root: string): RequestsFile;
53
+ export {};
54
+ //# sourceMappingURL=requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;;;;;;GAaG;AAEH,wEAAwE;AACxE,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAEjD,QAAA,MAAM,aAAa;;;;;iBAKjB,CAAC;AAEH,QAAA,MAAM,UAAU;;;;;;;;;iBAKd,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC7D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAwCpE;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,IAAI,OAAO,CAOtC;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,WAAW,GAAE,MAAgB,GAC5B,MAAM,CAER;AAED,gFAAgF;AAChF,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAMvD"}
@@ -0,0 +1,102 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ import { z } from 'zod';
4
+ import { stableJson } from './json.js';
5
+ import { repoPaths } from './paths.js';
6
+ /**
7
+ * The demand signal, as data.
8
+ *
9
+ * `request_blueprint` turns "nothing fits" into a public issue, and that list
10
+ * is what decides which blueprint gets written next — the catalog grows by
11
+ * demand, not by guesswork (CLAUDE.md §3.4). The site shows it, so it has to
12
+ * exist as a file: Pages serves a branch, and a browser fetching the GitHub
13
+ * API on every page load would be a different product.
14
+ *
15
+ * It is generated and committed like the other artifacts, with one difference
16
+ * that matters: it comes from outside the repository, so `validate` cannot
17
+ * regenerate it to check for drift. Nothing depends on it being current — a
18
+ * stale list is a list, and a missing one renders as "none yet".
19
+ */
20
+ /** The label `.github/ISSUE_TEMPLATE/blueprint-request.yml` applies. */
21
+ export const REQUEST_LABEL = 'blueprint-request';
22
+ const requestSchema = z.object({
23
+ number: z.number().int().positive(),
24
+ title: z.string().min(1),
25
+ url: z.string().min(1),
26
+ author: z.string(),
27
+ });
28
+ const fileSchema = z.object({
29
+ repository: z.string(),
30
+ /** The day the snapshot was taken, so the site can date what it shows. */
31
+ generated_on: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
32
+ requests: z.array(requestSchema),
33
+ });
34
+ /**
35
+ * Open blueprint requests, straight from `gh`.
36
+ *
37
+ * `gh` rather than a fetch with a token: the maintainer is already
38
+ * authenticated, and nothing here should ask anybody for a secret.
39
+ */
40
+ export function fetchRequests(repository) {
41
+ const output = execFileSync('gh', [
42
+ 'issue',
43
+ 'list',
44
+ '--repo',
45
+ repository,
46
+ '--label',
47
+ REQUEST_LABEL,
48
+ '--state',
49
+ 'open',
50
+ '--limit',
51
+ '50',
52
+ '--json',
53
+ 'number,title,url,author',
54
+ ], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
55
+ const raw = JSON.parse(output);
56
+ const issues = z
57
+ .array(z.object({
58
+ number: z.number(),
59
+ title: z.string(),
60
+ url: z.string(),
61
+ author: z.object({ login: z.string() }).nullish(),
62
+ }))
63
+ .parse(raw);
64
+ return issues
65
+ .map((issue) => ({
66
+ number: issue.number,
67
+ title: issue.title,
68
+ url: issue.url,
69
+ author: issue.author?.login ?? '',
70
+ }))
71
+ .sort((a, b) => a.number - b.number);
72
+ }
73
+ /** True when `gh` is on this machine, which is the only thing this needs. */
74
+ export function hasGitHubCli() {
75
+ try {
76
+ execFileSync('gh', ['--version'], { stdio: 'ignore' });
77
+ return true;
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ export function renderRequests(repository, requests, generatedOn = today()) {
84
+ return stableJson({ repository, generated_on: generatedOn, requests });
85
+ }
86
+ /** The date, to the day: a rebuild an hour later is still the same snapshot. */
87
+ export function today() {
88
+ return new Date().toISOString().slice(0, 10);
89
+ }
90
+ /**
91
+ * The committed list, or nothing at all. Every failure is the same answer —
92
+ * no requests — because a demand list is never worth failing a build over.
93
+ */
94
+ export function readRequests(root) {
95
+ try {
96
+ return fileSchema.parse(JSON.parse(readFileSync(repoPaths.requests(root), 'utf8')));
97
+ }
98
+ catch {
99
+ return { repository: '', generated_on: '', requests: [] };
100
+ }
101
+ }
102
+ //# sourceMappingURL=requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface SkillProblem {
2
+ /** Repository-relative path of the SKILL.md, for the error message. */
3
+ readonly file: string;
4
+ readonly message: string;
5
+ }
6
+ export interface SkillFolder {
7
+ /** Repository-relative path of the folder, e.g. `skills/blueprint-author`. */
8
+ readonly path: string;
9
+ readonly name: string;
10
+ readonly file: string;
11
+ }
12
+ /**
13
+ * Every skill in the repository: the catalog's own, and the ones a blueprint
14
+ * ships. Both live at `<something>/skills/<name>/SKILL.md`, which is the
15
+ * layout the tools discover.
16
+ */
17
+ export declare function findSkills(root: string): SkillFolder[];
18
+ /**
19
+ * Check every skill, and the catalog-wide rule no single skill can check: a
20
+ * name is how both tools address a skill, so it has to be unique here.
21
+ */
22
+ export declare function checkSkills(root: string): SkillProblem[];
23
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAUtD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAgBxD"}