@shrkcrft/cli 0.1.0-alpha.2 → 0.1.0-alpha.21

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 (228) hide show
  1. package/dist/audit/knowledge-audit-llm.d.ts +19 -0
  2. package/dist/audit/knowledge-audit-llm.d.ts.map +1 -0
  3. package/dist/audit/knowledge-audit-llm.js +164 -0
  4. package/dist/audit/knowledge-audit.d.ts +61 -0
  5. package/dist/audit/knowledge-audit.d.ts.map +1 -0
  6. package/dist/audit/knowledge-audit.js +203 -0
  7. package/dist/audit/knowledge-fix-plan-llm.d.ts +11 -0
  8. package/dist/audit/knowledge-fix-plan-llm.d.ts.map +1 -0
  9. package/dist/audit/knowledge-fix-plan-llm.js +141 -0
  10. package/dist/audit/knowledge-fix-plan.d.ts +41 -0
  11. package/dist/audit/knowledge-fix-plan.d.ts.map +1 -0
  12. package/dist/audit/knowledge-fix-plan.js +125 -0
  13. package/dist/audit/pipeline-audit-llm.d.ts +11 -0
  14. package/dist/audit/pipeline-audit-llm.d.ts.map +1 -0
  15. package/dist/audit/pipeline-audit-llm.js +134 -0
  16. package/dist/audit/pipeline-audit.d.ts +69 -0
  17. package/dist/audit/pipeline-audit.d.ts.map +1 -0
  18. package/dist/audit/pipeline-audit.js +166 -0
  19. package/dist/audit/templates-audit-llm.d.ts +19 -0
  20. package/dist/audit/templates-audit-llm.d.ts.map +1 -0
  21. package/dist/audit/templates-audit-llm.js +207 -0
  22. package/dist/audit/templates-audit.d.ts +63 -0
  23. package/dist/audit/templates-audit.d.ts.map +1 -0
  24. package/dist/audit/templates-audit.js +171 -0
  25. package/dist/audit/templates-fix-plan-llm.d.ts +19 -0
  26. package/dist/audit/templates-fix-plan-llm.d.ts.map +1 -0
  27. package/dist/audit/templates-fix-plan-llm.js +162 -0
  28. package/dist/audit/templates-fix-plan.d.ts +37 -0
  29. package/dist/audit/templates-fix-plan.d.ts.map +1 -0
  30. package/dist/audit/templates-fix-plan.js +174 -0
  31. package/dist/command-registry.d.ts +28 -0
  32. package/dist/command-registry.d.ts.map +1 -1
  33. package/dist/command-registry.js +91 -1
  34. package/dist/commands/ai-status.command.d.ts +19 -0
  35. package/dist/commands/ai-status.command.d.ts.map +1 -0
  36. package/dist/commands/ai-status.command.js +94 -0
  37. package/dist/commands/api-diff.command.d.ts +11 -0
  38. package/dist/commands/api-diff.command.d.ts.map +1 -0
  39. package/dist/commands/api-diff.command.js +144 -0
  40. package/dist/commands/apply.command.d.ts.map +1 -1
  41. package/dist/commands/apply.command.js +10 -2
  42. package/dist/commands/arch.command.d.ts +9 -0
  43. package/dist/commands/arch.command.d.ts.map +1 -0
  44. package/dist/commands/arch.command.js +186 -0
  45. package/dist/commands/ask.command.d.ts.map +1 -1
  46. package/dist/commands/ask.command.js +10 -9
  47. package/dist/commands/cache-align.command.d.ts +12 -0
  48. package/dist/commands/cache-align.command.d.ts.map +1 -0
  49. package/dist/commands/cache-align.command.js +78 -0
  50. package/dist/commands/check.command.d.ts.map +1 -1
  51. package/dist/commands/check.command.js +26 -2
  52. package/dist/commands/code-intel.command.d.ts +18 -0
  53. package/dist/commands/code-intel.command.d.ts.map +1 -0
  54. package/dist/commands/code-intel.command.js +146 -0
  55. package/dist/commands/codemod.command.d.ts.map +1 -1
  56. package/dist/commands/codemod.command.js +27 -6
  57. package/dist/commands/command-catalog.d.ts +15 -3
  58. package/dist/commands/command-catalog.d.ts.map +1 -1
  59. package/dist/commands/command-catalog.js +407 -34
  60. package/dist/commands/commands.command.d.ts.map +1 -1
  61. package/dist/commands/commands.command.js +4 -4
  62. package/dist/commands/completion.command.d.ts +10 -0
  63. package/dist/commands/completion.command.d.ts.map +1 -0
  64. package/dist/commands/completion.command.js +121 -0
  65. package/dist/commands/compress.command.d.ts +8 -0
  66. package/dist/commands/compress.command.d.ts.map +1 -0
  67. package/dist/commands/compress.command.js +147 -0
  68. package/dist/commands/constructs.command.d.ts.map +1 -1
  69. package/dist/commands/constructs.command.js +89 -23
  70. package/dist/commands/context.command.d.ts.map +1 -1
  71. package/dist/commands/context.command.js +121 -1
  72. package/dist/commands/contract-gate.command.d.ts.map +1 -1
  73. package/dist/commands/contract-gate.command.js +5 -1
  74. package/dist/commands/delegate.command.d.ts +65 -0
  75. package/dist/commands/delegate.command.d.ts.map +1 -0
  76. package/dist/commands/delegate.command.js +657 -0
  77. package/dist/commands/deps-audit.command.d.ts +23 -0
  78. package/dist/commands/deps-audit.command.d.ts.map +1 -0
  79. package/dist/commands/deps-audit.command.js +270 -0
  80. package/dist/commands/dev.command.d.ts.map +1 -1
  81. package/dist/commands/dev.command.js +5 -2
  82. package/dist/commands/diff-check.command.d.ts +30 -0
  83. package/dist/commands/diff-check.command.d.ts.map +1 -0
  84. package/dist/commands/diff-check.command.js +210 -0
  85. package/dist/commands/doctor.command.d.ts.map +1 -1
  86. package/dist/commands/doctor.command.js +162 -10
  87. package/dist/commands/export.command.d.ts.map +1 -1
  88. package/dist/commands/export.command.js +76 -3
  89. package/dist/commands/framework.command.d.ts +12 -0
  90. package/dist/commands/framework.command.d.ts.map +1 -0
  91. package/dist/commands/framework.command.js +180 -0
  92. package/dist/commands/gate.command.d.ts +15 -0
  93. package/dist/commands/gate.command.d.ts.map +1 -0
  94. package/dist/commands/gate.command.js +300 -0
  95. package/dist/commands/gen.command.d.ts.map +1 -1
  96. package/dist/commands/gen.command.js +13 -1
  97. package/dist/commands/graph-code-subverbs.d.ts +33 -0
  98. package/dist/commands/graph-code-subverbs.d.ts.map +1 -0
  99. package/dist/commands/graph-code-subverbs.js +1385 -0
  100. package/dist/commands/graph.command.d.ts.map +1 -1
  101. package/dist/commands/graph.command.js +31 -2
  102. package/dist/commands/help.command.d.ts +4 -3
  103. package/dist/commands/help.command.d.ts.map +1 -1
  104. package/dist/commands/help.command.js +86 -18
  105. package/dist/commands/helper.command.js +1 -1
  106. package/dist/commands/impact.command.d.ts.map +1 -1
  107. package/dist/commands/impact.command.js +171 -1
  108. package/dist/commands/import.command.d.ts.map +1 -1
  109. package/dist/commands/import.command.js +121 -5
  110. package/dist/commands/ingest.command.d.ts.map +1 -1
  111. package/dist/commands/ingest.command.js +5 -1
  112. package/dist/commands/init.command.d.ts.map +1 -1
  113. package/dist/commands/init.command.js +174 -7
  114. package/dist/commands/knowledge-author.command.d.ts.map +1 -1
  115. package/dist/commands/knowledge-author.command.js +9 -0
  116. package/dist/commands/knowledge-propose.command.d.ts.map +1 -1
  117. package/dist/commands/knowledge-propose.command.js +4 -2
  118. package/dist/commands/knowledge.command.d.ts.map +1 -1
  119. package/dist/commands/knowledge.command.js +26 -3
  120. package/dist/commands/migrate.command.d.ts +13 -0
  121. package/dist/commands/migrate.command.d.ts.map +1 -0
  122. package/dist/commands/migrate.command.js +152 -0
  123. package/dist/commands/move-plan.command.d.ts +23 -0
  124. package/dist/commands/move-plan.command.d.ts.map +1 -0
  125. package/dist/commands/move-plan.command.js +360 -0
  126. package/dist/commands/packs-new.d.ts +1 -1
  127. package/dist/commands/packs-new.d.ts.map +1 -1
  128. package/dist/commands/packs-new.js +5 -36
  129. package/dist/commands/packs.command.d.ts.map +1 -1
  130. package/dist/commands/packs.command.js +2 -10
  131. package/dist/commands/plan-context.command.d.ts +11 -0
  132. package/dist/commands/plan-context.command.d.ts.map +1 -0
  133. package/dist/commands/plan-context.command.js +85 -0
  134. package/dist/commands/preflight.command.d.ts.map +1 -1
  135. package/dist/commands/preflight.command.js +15 -0
  136. package/dist/commands/profiles.command.js +4 -4
  137. package/dist/commands/recommend.command.d.ts +6 -0
  138. package/dist/commands/recommend.command.d.ts.map +1 -1
  139. package/dist/commands/recommend.command.js +119 -5
  140. package/dist/commands/release.command.js +13 -13
  141. package/dist/commands/rule-graph-subverbs.d.ts +3 -0
  142. package/dist/commands/rule-graph-subverbs.d.ts.map +1 -0
  143. package/dist/commands/rule-graph-subverbs.js +132 -0
  144. package/dist/commands/rules.command.d.ts.map +1 -1
  145. package/dist/commands/rules.command.js +20 -3
  146. package/dist/commands/scaffold-validate.command.d.ts +22 -0
  147. package/dist/commands/scaffold-validate.command.d.ts.map +1 -0
  148. package/dist/commands/scaffold-validate.command.js +215 -0
  149. package/dist/commands/search-structural.command.d.ts +18 -0
  150. package/dist/commands/search-structural.command.d.ts.map +1 -0
  151. package/dist/commands/search-structural.command.js +376 -0
  152. package/dist/commands/search.command.js +1 -1
  153. package/dist/commands/smart-context.command.d.ts +67 -0
  154. package/dist/commands/smart-context.command.d.ts.map +1 -0
  155. package/dist/commands/smart-context.command.js +4728 -0
  156. package/dist/commands/spike.command.d.ts +22 -0
  157. package/dist/commands/spike.command.d.ts.map +1 -0
  158. package/dist/commands/spike.command.js +235 -0
  159. package/dist/commands/surface.command.d.ts +1 -0
  160. package/dist/commands/surface.command.d.ts.map +1 -1
  161. package/dist/commands/surface.command.js +10 -3
  162. package/dist/commands/task-context.command.d.ts.map +1 -1
  163. package/dist/commands/task-context.command.js +5 -17
  164. package/dist/commands/task.command.d.ts.map +1 -1
  165. package/dist/commands/task.command.js +8 -2
  166. package/dist/commands/template-quality.command.d.ts.map +1 -1
  167. package/dist/commands/template-quality.command.js +39 -3
  168. package/dist/commands/templates.command.d.ts.map +1 -1
  169. package/dist/commands/templates.command.js +37 -2
  170. package/dist/commands/tests.command.d.ts.map +1 -1
  171. package/dist/commands/tests.command.js +13 -2
  172. package/dist/commands/watch.command.d.ts +26 -0
  173. package/dist/commands/watch.command.d.ts.map +1 -0
  174. package/dist/commands/watch.command.js +456 -0
  175. package/dist/dashboard/code-intelligence-data.d.ts +33 -0
  176. package/dist/dashboard/code-intelligence-data.d.ts.map +1 -0
  177. package/dist/dashboard/code-intelligence-data.js +329 -0
  178. package/dist/dashboard/dashboard-api-server.d.ts.map +1 -1
  179. package/dist/dashboard/dashboard-api-server.js +256 -2
  180. package/dist/dashboard/knowledge-ask.d.ts +4 -0
  181. package/dist/dashboard/knowledge-ask.d.ts.map +1 -0
  182. package/dist/dashboard/knowledge-ask.js +112 -0
  183. package/dist/env/load-dotenv.d.ts +15 -0
  184. package/dist/env/load-dotenv.d.ts.map +1 -0
  185. package/dist/env/load-dotenv.js +70 -0
  186. package/dist/export/claude-commands-export.d.ts +60 -0
  187. package/dist/export/claude-commands-export.d.ts.map +1 -0
  188. package/dist/export/claude-commands-export.js +276 -0
  189. package/dist/export/export-formats.d.ts +1 -1
  190. package/dist/export/export-formats.d.ts.map +1 -1
  191. package/dist/export/export-formats.js +139 -12
  192. package/dist/index.d.ts +3 -0
  193. package/dist/index.d.ts.map +1 -1
  194. package/dist/index.js +3 -0
  195. package/dist/init/init-templates.d.ts.map +1 -1
  196. package/dist/init/init-templates.js +133 -113
  197. package/dist/init/paths-advisory.d.ts +20 -0
  198. package/dist/init/paths-advisory.d.ts.map +1 -0
  199. package/dist/init/paths-advisory.js +88 -0
  200. package/dist/main.d.ts.map +1 -1
  201. package/dist/main.js +331 -17
  202. package/dist/output/ccr-store-config.d.ts +18 -0
  203. package/dist/output/ccr-store-config.d.ts.map +1 -0
  204. package/dist/output/ccr-store-config.js +41 -0
  205. package/dist/output/format-output.d.ts.map +1 -1
  206. package/dist/output/format-output.js +6 -1
  207. package/dist/output/output-compression.d.ts +15 -0
  208. package/dist/output/output-compression.d.ts.map +1 -0
  209. package/dist/output/output-compression.js +60 -0
  210. package/dist/output/resolve-compress-type.d.ts +22 -0
  211. package/dist/output/resolve-compress-type.d.ts.map +1 -0
  212. package/dist/output/resolve-compress-type.js +21 -0
  213. package/dist/output/watch-loop.d.ts +9 -1
  214. package/dist/output/watch-loop.d.ts.map +1 -1
  215. package/dist/output/watch-loop.js +13 -3
  216. package/dist/schemas/json-schemas.d.ts +384 -36
  217. package/dist/schemas/json-schemas.d.ts.map +1 -1
  218. package/dist/schemas/json-schemas.js +247 -36
  219. package/dist/surface/profiles.d.ts.map +1 -1
  220. package/dist/surface/profiles.js +54 -10
  221. package/dist/surface/surface-config-writer.d.ts.map +1 -1
  222. package/dist/surface/surface-config-writer.js +23 -11
  223. package/dist/validation/run-validation-loop.d.ts.map +1 -1
  224. package/dist/validation/run-validation-loop.js +5 -1
  225. package/package.json +35 -21
  226. package/dist/commands/plugin.command.d.ts +0 -11
  227. package/dist/commands/plugin.command.d.ts.map +0 -1
  228. package/dist/commands/plugin.command.js +0 -394
@@ -8,23 +8,41 @@
8
8
  import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
9
9
  import * as nodePath from 'node:path';
10
10
  import { affectedFromCheckReport, buildCodemodAssistReport, inspectSharkcraft, parseCustomCheckReportFromFile, renderCodemodAssistMarkdown, } from '@shrkcrft/inspector';
11
- import { flagBool, flagString, flagList, resolveCwd, } from "../command-registry.js";
11
+ import { formatRuleCompact } from '@shrkcrft/rules';
12
+ import { flagBool, flagNumber, flagString, flagList, resolveCwd, } from "../command-registry.js";
12
13
  import { asJson, header } from "../output/format-output.js";
13
14
  async function loadRule(args) {
14
15
  const ruleId = flagString(args, 'rule');
15
16
  if (!ruleId) {
16
- process.stderr.write('Missing --rule <ruleId>\n');
17
+ process.stderr.write('Missing --rule <ruleId>. Run `shrk codemod list` to see available rule ids.\n');
17
18
  return null;
18
19
  }
19
20
  const cwd = resolveCwd(args);
20
21
  const inspection = await inspectSharkcraft({ cwd });
21
22
  const rule = inspection.ruleService.get(ruleId);
22
23
  if (!rule) {
23
- process.stderr.write(`No rule with id "${ruleId}".\n`);
24
+ process.stderr.write(`No rule with id "${ruleId}". Run \`shrk codemod list\` to see available rule ids.\n`);
24
25
  return null;
25
26
  }
26
27
  return { rule, cwd };
27
28
  }
29
+ /** `shrk codemod list` — enumerate the rule ids codemod-assist accepts. */
30
+ async function listRules(args) {
31
+ const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
32
+ let rules = inspection.ruleService.list();
33
+ const top = flagNumber(args, 'top');
34
+ if (top !== undefined && top > 0) {
35
+ rules = [...rules].sort((a, b) => a.id.localeCompare(b.id)).slice(0, top);
36
+ }
37
+ if (flagBool(args, 'json')) {
38
+ process.stdout.write(asJson(rules.map((r) => ({ id: r.id, type: r.type, priority: r.priority, title: r.title }))) + '\n');
39
+ return 0;
40
+ }
41
+ process.stdout.write(header(`Codemod rules (${rules.length})`));
42
+ for (const r of rules)
43
+ process.stdout.write(formatRuleCompact(r) + '\n');
44
+ return 0;
45
+ }
28
46
  async function gatherAffected(args) {
29
47
  const fromReport = flagString(args, 'from-report');
30
48
  const out = [];
@@ -57,14 +75,17 @@ function writeAssistOutputs(cwd, ruleId, markdown, scriptTemplate) {
57
75
  export const codemodCommand = {
58
76
  name: 'codemod',
59
77
  description: 'Codemod-assist (NOT a codemod engine). Inventory + risk grouping + checklist + project-script template. Never rewrites source.',
60
- usage: 'shrk codemod <inventory|plan|checklist> --rule <ruleId> [--from-report <path>] [--targets a,b,c] [--write-preview] [--json]',
78
+ usage: 'shrk codemod <list|inventory|plan|checklist> --rule <ruleId> [--from-report <path>] [--targets a,b,c] [--write-preview] [--json]',
61
79
  async run(args) {
62
80
  const sub = args.positional[0] ?? 'plan';
63
- if (!['inventory', 'plan', 'checklist'].includes(sub)) {
64
- process.stderr.write('Usage: shrk codemod <inventory|plan|checklist> --rule <ruleId>\n');
81
+ if (!['list', 'inventory', 'plan', 'checklist'].includes(sub)) {
82
+ process.stderr.write('Usage: shrk codemod <list|inventory|plan|checklist> --rule <ruleId>\n');
65
83
  return 2;
66
84
  }
67
85
  const inner = { ...args, positional: args.positional.slice(1) };
86
+ // `list` enumerates rule ids and needs no --rule.
87
+ if (sub === 'list')
88
+ return listRules(inner);
68
89
  const loaded = await loadRule(inner);
69
90
  if (!loaded)
70
91
  return 1;
@@ -236,9 +236,13 @@ export declare function commandLifecycle(e: ICommandCatalogEntry): CommandLifecy
236
236
  /**
237
237
  * Default-help visibility rule. Honors an explicit
238
238
  * {@link ICommandCatalogEntry.showInDefaultHelp} when set; otherwise
239
- * primary + common are visible and advanced / machine / internal / legacy
240
- * are hidden. Deprecated and retired commands are always hidden by
241
- * default regardless of surface.
239
+ * the {@link PRIMARY_VERBS_ALLOWLIST} gates membership in the visible
240
+ * surface (primary + common entries whose top-level verb pays rent
241
+ * make the cut; everything else is hidden from `--full-help`).
242
+ *
243
+ * Deprecated, retired, aliased commands and anything in the
244
+ * {@link R46_OVERLAY} are always hidden regardless of allowlist
245
+ * membership.
242
246
  */
243
247
  export declare function defaultShowInHelp(e: ICommandCatalogEntry): boolean;
244
248
  /**
@@ -262,4 +266,12 @@ export interface ICommandSafetyMatrixRow {
262
266
  }
263
267
  export declare function buildCommandSafetyMatrix(): readonly ICommandSafetyMatrixRow[];
264
268
  export declare function renderCommandSafetyMatrixMarkdown(rows: readonly ICommandSafetyMatrixRow[]): string;
269
+ /**
270
+ * The set of TOP-LEVEL command verbs in the catalogue (the first token of each
271
+ * entry's `command`). The single source of truth for "is `shrk <verb>` a real
272
+ * command" checks — e.g. the contradictions doc-vs-CLI scan, which lives in the
273
+ * inspector layer and so receives this set by injection rather than importing
274
+ * the CLI.
275
+ */
276
+ export declare function cliCommandNameSet(): Set<string>;
265
277
  //# sourceMappingURL=command-catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-catalog.d.ts","sourceRoot":"","sources":["../../src/commands/command-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-catalog.d.ts","sourceRoot":"","sources":["../../src/commands/command-catalog.ts"],"names":[],"mappings":"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"}
@@ -115,6 +115,16 @@ export const COMMAND_CATALOG = Object.freeze([
115
115
  intendedAudience: [CommandAudience.Human, CommandAudience.Agent, CommandAudience.Ci],
116
116
  taskRole: CommandTaskRole.Diagnose,
117
117
  }),
118
+ entry({
119
+ command: 'ai-status',
120
+ description: 'Report which AI provider shrk would use right now, with setup or upgrade hints. `--ping` verifies the provider actually responds.',
121
+ category: 'core',
122
+ safetyLevel: SafetyLevel.ReadOnly,
123
+ mcpAvailable: false,
124
+ surface: CommandSurface.Common,
125
+ intendedAudience: [CommandAudience.Human, CommandAudience.Agent],
126
+ taskRole: CommandTaskRole.Diagnose,
127
+ }),
118
128
  entry({
119
129
  command: 'context',
120
130
  description: 'Focused context for a task (rules / paths / templates). For "what should I do?" prefer `shrk recommend "<task>"`.',
@@ -256,13 +266,94 @@ export const COMMAND_CATALOG = Object.freeze([
256
266
  }),
257
267
  entry({
258
268
  command: 'graph',
259
- description: 'Knowledge graph nodes, edges, and shortest-path explanations.',
269
+ description: 'Knowledge graph plus code-intelligence subverbs (`index`, `status`, `search`, `context`, `impact`, `callers`, `cycles`, `unresolved`, `deps`, `why`, `export`).',
260
270
  category: 'core',
261
271
  safetyLevel: SafetyLevel.ReadOnly,
262
272
  mcpAvailable: true,
263
273
  surface: CommandSurface.Common,
264
274
  taskRole: CommandTaskRole.Inspect,
265
275
  }),
276
+ entry({
277
+ command: 'rule-graph',
278
+ description: 'Bridge the code graph to asset registries (boundary rules, path conventions, templates). Sub-verbs: index, status, for <file>.',
279
+ category: 'core',
280
+ safetyLevel: SafetyLevel.WritesSessionOnly,
281
+ mcpAvailable: true,
282
+ surface: CommandSurface.Common,
283
+ taskRole: CommandTaskRole.Inspect,
284
+ }),
285
+ entry({
286
+ command: 'search-structural',
287
+ description: 'Declarative AST pattern search over the project. Read-only; no rewrites in this round.',
288
+ category: 'core',
289
+ safetyLevel: SafetyLevel.ReadOnly,
290
+ mcpAvailable: true,
291
+ surface: CommandSurface.Common,
292
+ taskRole: CommandTaskRole.Inspect,
293
+ }),
294
+ entry({
295
+ command: 'plan-context',
296
+ description: 'Produce a deterministic, token-budgeted context pack (`sharkcraft.context-pack/v1`) for an AI coding agent.',
297
+ category: 'core',
298
+ safetyLevel: SafetyLevel.ReadOnly,
299
+ mcpAvailable: true,
300
+ surface: CommandSurface.Common,
301
+ taskRole: CommandTaskRole.Context,
302
+ }),
303
+ entry({
304
+ command: 'arch',
305
+ description: 'Architecture-guard checks (public-API misuse, barrel risks, cycle severity, project contracts).',
306
+ category: 'core',
307
+ safetyLevel: SafetyLevel.ReadOnly,
308
+ mcpAvailable: true,
309
+ surface: CommandSurface.Common,
310
+ taskRole: CommandTaskRole.Validate,
311
+ }),
312
+ entry({
313
+ command: 'framework',
314
+ description: 'Framework-aware extractors: NestJS controllers/modules/providers/routes, React components/hook usages. Sub-verbs: index, status, list, routes.',
315
+ category: 'core',
316
+ safetyLevel: SafetyLevel.WritesSessionOnly,
317
+ mcpAvailable: true,
318
+ surface: CommandSurface.Common,
319
+ taskRole: CommandTaskRole.Inspect,
320
+ }),
321
+ entry({
322
+ command: 'api-diff',
323
+ description: 'Compare the current public API surface to a baseline. Reports added / removed / kind-changed / moved symbols with breaking-change severity.',
324
+ category: 'core',
325
+ safetyLevel: SafetyLevel.ReadOnly,
326
+ mcpAvailable: true,
327
+ surface: CommandSurface.Common,
328
+ taskRole: CommandTaskRole.Validate,
329
+ }),
330
+ entry({
331
+ command: 'gate',
332
+ description: 'Aggregator quality-gate: graph freshness + architecture + impact-since-ref → one pass/fail. The pre-merge gate for AI-agent-authored changes.',
333
+ category: 'core',
334
+ safetyLevel: SafetyLevel.ReadOnly,
335
+ mcpAvailable: true,
336
+ surface: CommandSurface.Common,
337
+ taskRole: CommandTaskRole.Validate,
338
+ }),
339
+ entry({
340
+ command: 'migrate',
341
+ description: 'Run a multi-step migration: structural rewrites + shell + checks orchestrated as one replayable plan.',
342
+ category: 'core',
343
+ safetyLevel: SafetyLevel.WritesSource,
344
+ mcpAvailable: false,
345
+ surface: CommandSurface.Common,
346
+ taskRole: CommandTaskRole.Generate,
347
+ }),
348
+ entry({
349
+ command: 'code-intel',
350
+ description: 'One-shot view of code-intelligence doctor checks (graph, rule-graph, api-surface, quality-gate, migrations, architecture, impact, framework, structural-search, context-planner). Read-only.',
351
+ category: 'core',
352
+ safetyLevel: SafetyLevel.ReadOnly,
353
+ mcpAvailable: true,
354
+ surface: CommandSurface.Common,
355
+ taskRole: CommandTaskRole.Diagnose,
356
+ }),
266
357
  entry({
267
358
  command: 'check',
268
359
  description: 'Run validation checks across registries / packs / boundaries.',
@@ -291,6 +382,15 @@ export const COMMAND_CATALOG = Object.freeze([
291
382
  surface: CommandSurface.Common,
292
383
  taskRole: CommandTaskRole.Validate,
293
384
  }),
385
+ entry({
386
+ command: 'diff-check',
387
+ description: 'Self-check current git diff against boundary + import-hygiene rules. Single-call composite for agents to validate edits before declaring done. Read-only.',
388
+ category: 'core',
389
+ safetyLevel: SafetyLevel.ReadOnly,
390
+ mcpAvailable: true,
391
+ surface: CommandSurface.Common,
392
+ taskRole: CommandTaskRole.Validate,
393
+ }),
294
394
  entry({
295
395
  command: 'review',
296
396
  description: 'PR-review packet — changed files, affected rules, missing tests heuristic.',
@@ -338,6 +438,18 @@ export const COMMAND_CATALOG = Object.freeze([
338
438
  surface: CommandSurface.Common,
339
439
  taskRole: CommandTaskRole.Apply,
340
440
  }),
441
+ entry({
442
+ command: 'delegate',
443
+ description: 'Hand a mechanical edit to a local-LLM worker; the engine verifies the result and auto-reverts on failure (run|brief). Writes source only via --apply through the signed-plan + verify gate.',
444
+ category: 'core',
445
+ safetyLevel: SafetyLevel.WritesSource,
446
+ writesFiles: true,
447
+ writesSource: true,
448
+ requiresReview: true,
449
+ surface: CommandSurface.Advanced,
450
+ intendedAudience: [CommandAudience.Human, CommandAudience.Agent],
451
+ taskRole: CommandTaskRole.Apply,
452
+ }),
341
453
  // `shrk spec` intent artifact over plan/review/apply.
342
454
  entry({
343
455
  command: 'spec',
@@ -464,6 +576,26 @@ export const COMMAND_CATALOG = Object.freeze([
464
576
  safetyLevel: SafetyLevel.WritesSessionOnly,
465
577
  writesFiles: true,
466
578
  }),
579
+ entry({
580
+ command: 'dev status',
581
+ description: 'Show session phase, progress, and next action. Read-only.',
582
+ category: 'dev',
583
+ safetyLevel: SafetyLevel.ReadOnly,
584
+ }),
585
+ entry({
586
+ command: 'dev next',
587
+ description: 'Show (and persist) the next recommended action for a session.',
588
+ category: 'dev',
589
+ safetyLevel: SafetyLevel.WritesSessionOnly,
590
+ writesFiles: true,
591
+ }),
592
+ entry({
593
+ command: 'dev continue',
594
+ description: 'Alias of dev next — advance the session to its next action.',
595
+ category: 'dev',
596
+ safetyLevel: SafetyLevel.WritesSessionOnly,
597
+ writesFiles: true,
598
+ }),
467
599
  entry({
468
600
  command: 'dev mark-applied',
469
601
  description: 'Metadata-only: mark a session plan applied. No source writes.',
@@ -634,6 +766,11 @@ export const COMMAND_CATALOG = Object.freeze([
634
766
  category: 'task-context',
635
767
  safetyLevel: SafetyLevel.ReadOnly,
636
768
  mcpAvailable: true,
769
+ // Overlaps with `shrk task` (machine packet) and `shrk recommend`
770
+ // (human routing). Pointing at `task` as canonical so users who
771
+ // hit this via tab-complete see the canonical machine-pipe form.
772
+ overlapsWith: ['task', 'recommend'],
773
+ preferredCommand: 'shrk task "<task>"',
637
774
  }),
638
775
  entry({
639
776
  command: 'validate-change',
@@ -943,6 +1080,13 @@ export const COMMAND_CATALOG = Object.freeze([
943
1080
  safetyLevel: SafetyLevel.ReadOnly,
944
1081
  surface: CommandSurface.Common,
945
1082
  }),
1083
+ entry({
1084
+ command: 'completion',
1085
+ description: 'Print a sourcable shell-completion script for the `shrk` CLI (bash | zsh | fish). Pipe into your shell rc.',
1086
+ category: 'meta',
1087
+ safetyLevel: SafetyLevel.ReadOnly,
1088
+ surface: CommandSurface.Common,
1089
+ }),
946
1090
  entry({
947
1091
  command: 'explain',
948
1092
  description: 'Universal explainer: knowledge entry, rule, template, command id, or stderr blob.',
@@ -1007,7 +1151,7 @@ export const COMMAND_CATALOG = Object.freeze([
1007
1151
  // `commands doctor` is honest.
1008
1152
  entry({
1009
1153
  command: 'profiles',
1010
- description: 'List / inspect pack-contributed profiles (plugin-lifecycle, migration, conventions, …). Subcommands: list, get, doctor, search.',
1154
+ description: 'List / inspect pack-contributed profiles (migration, conventions, …). Subcommands: list, get, doctor, search.',
1011
1155
  category: 'core',
1012
1156
  safetyLevel: SafetyLevel.ReadOnly,
1013
1157
  mcpAvailable: true,
@@ -1080,6 +1224,104 @@ export const COMMAND_CATALOG = Object.freeze([
1080
1224
  category: 'core',
1081
1225
  safetyLevel: SafetyLevel.ReadOnly,
1082
1226
  }),
1227
+ entry({
1228
+ command: 'smart-context',
1229
+ description: 'Build deterministic context and ask an AI provider to synthesise an enriched brief (default), structured plan (--plan), or two-stage development plan (--ai-plan). Opt-in; defaults to Gemini. CLAUDE.md is auto-included in the seed.',
1230
+ category: 'core',
1231
+ safetyLevel: SafetyLevel.ReadOnly,
1232
+ taskRole: CommandTaskRole.Context,
1233
+ }),
1234
+ entry({
1235
+ command: 'smart-context plan-ahead',
1236
+ description: 'Batch-generate AI-backed plans for a queue of upcoming tasks and save each under .sharkcraft/smart-context/.',
1237
+ category: 'core',
1238
+ safetyLevel: SafetyLevel.ReadOnly,
1239
+ taskRole: CommandTaskRole.Context,
1240
+ }),
1241
+ entry({
1242
+ command: 'smart-context list',
1243
+ description: 'List saved smart-context entries under .sharkcraft/smart-context/.',
1244
+ category: 'core',
1245
+ safetyLevel: SafetyLevel.ReadOnly,
1246
+ taskRole: CommandTaskRole.Inspect,
1247
+ }),
1248
+ entry({
1249
+ command: 'smart-context show',
1250
+ description: 'Print a saved smart-context entry by slug.',
1251
+ category: 'core',
1252
+ safetyLevel: SafetyLevel.ReadOnly,
1253
+ taskRole: CommandTaskRole.Inspect,
1254
+ }),
1255
+ entry({
1256
+ command: 'smart-context embeddings-build',
1257
+ description: 'Build or incrementally refresh the semantic file index used by smart-context. Downloads the embedding model on first run.',
1258
+ category: 'core',
1259
+ safetyLevel: SafetyLevel.WritesSessionOnly,
1260
+ taskRole: CommandTaskRole.Context,
1261
+ }),
1262
+ entry({
1263
+ command: 'smart-context embeddings-status',
1264
+ description: 'Report semantic index freshness without loading the embedding model.',
1265
+ category: 'core',
1266
+ safetyLevel: SafetyLevel.ReadOnly,
1267
+ taskRole: CommandTaskRole.Inspect,
1268
+ }),
1269
+ entry({
1270
+ command: 'spike',
1271
+ description: 'Scaffold starter files for a saved smart-context plan\'s recommended MVP. Reads .sharkcraft/smart-context/<slug>.plan.json.',
1272
+ category: 'core',
1273
+ safetyLevel: SafetyLevel.WritesSource,
1274
+ taskRole: CommandTaskRole.Generate,
1275
+ }),
1276
+ entry({
1277
+ command: 'deps-audit',
1278
+ description: 'Compare declared package dependencies (package.json) with actually imported specifiers (graph). Reports missing + unused deps. Read-only.',
1279
+ category: 'core',
1280
+ safetyLevel: SafetyLevel.ReadOnly,
1281
+ taskRole: CommandTaskRole.Inspect,
1282
+ }),
1283
+ entry({
1284
+ command: 'scaffold-validate',
1285
+ description: 'Validate that the files in a saved generation plan exist on disk and look intact (size envelope + type match). Read-only.',
1286
+ category: 'core',
1287
+ safetyLevel: SafetyLevel.ReadOnly,
1288
+ taskRole: CommandTaskRole.Validate,
1289
+ }),
1290
+ entry({
1291
+ command: 'move-plan',
1292
+ description: 'Plan a file move: graph-traced importer rewrites, export touch-ups, cross-package warnings, rollback steps. Read-only.',
1293
+ category: 'core',
1294
+ safetyLevel: SafetyLevel.ReadOnly,
1295
+ taskRole: CommandTaskRole.Generate,
1296
+ }),
1297
+ entry({
1298
+ command: 'watch',
1299
+ description: 'Emit a focused-context packet on stdout JSONL each time the workspace changes. Designed to feed a parallel Claude agent.',
1300
+ category: 'core',
1301
+ safetyLevel: SafetyLevel.WritesSessionOnly,
1302
+ taskRole: CommandTaskRole.Context,
1303
+ }),
1304
+ entry({
1305
+ command: 'watch list',
1306
+ description: 'List active shrk-watch daemons (one per task slug).',
1307
+ category: 'core',
1308
+ safetyLevel: SafetyLevel.ReadOnly,
1309
+ taskRole: CommandTaskRole.Inspect,
1310
+ }),
1311
+ entry({
1312
+ command: 'watch stop',
1313
+ description: 'Stop a running shrk-watch daemon by slug.',
1314
+ category: 'core',
1315
+ safetyLevel: SafetyLevel.WritesSessionOnly,
1316
+ taskRole: CommandTaskRole.Config,
1317
+ }),
1318
+ entry({
1319
+ command: 'watch prune',
1320
+ description: 'Remove stale shrk-watch manifests whose owning processes are no longer alive.',
1321
+ category: 'core',
1322
+ safetyLevel: SafetyLevel.WritesSessionOnly,
1323
+ taskRole: CommandTaskRole.Config,
1324
+ }),
1083
1325
  entry({
1084
1326
  command: 'safety audit',
1085
1327
  description: 'Audit the SharkCraft safety model (commands, MCP, packs, plan signing).',
@@ -1285,6 +1527,48 @@ export const COMMAND_CATALOG = Object.freeze([
1285
1527
  intendedAudience: [CommandAudience.Human, CommandAudience.Ci],
1286
1528
  taskRole: CommandTaskRole.Inspect,
1287
1529
  }),
1530
+ entry({
1531
+ command: 'compress',
1532
+ description: 'Deterministically compress a blob (file or stdin) to cut tokens — JSON→table, logs/search/diffs→signal. Reversible via `shrk expand`.',
1533
+ category: 'core',
1534
+ safetyLevel: SafetyLevel.WritesSessionOnly,
1535
+ writesFiles: true,
1536
+ mcpAvailable: true,
1537
+ surface: CommandSurface.Common,
1538
+ intendedAudience: [CommandAudience.Agent, CommandAudience.Human],
1539
+ taskRole: CommandTaskRole.Context,
1540
+ }),
1541
+ entry({
1542
+ command: 'expand',
1543
+ description: 'Retrieve the full original a `shrk compress` run cached, by its `<<ccr:KEY>>` key.',
1544
+ category: 'core',
1545
+ safetyLevel: SafetyLevel.ReadOnly,
1546
+ mcpAvailable: true,
1547
+ surface: CommandSurface.Common,
1548
+ intendedAudience: [CommandAudience.Agent, CommandAudience.Human],
1549
+ taskRole: CommandTaskRole.Context,
1550
+ }),
1551
+ entry({
1552
+ command: 'align',
1553
+ description: 'Replace volatile tokens (UUIDs/JWTs/timestamps/hashes) with stable placeholders for KV-cache prefix stability; reversible via `shrk unalign`.',
1554
+ category: 'core',
1555
+ safetyLevel: SafetyLevel.WritesSessionOnly,
1556
+ writesFiles: true,
1557
+ mcpAvailable: true,
1558
+ surface: CommandSurface.Advanced,
1559
+ intendedAudience: [CommandAudience.Agent, CommandAudience.Human],
1560
+ taskRole: CommandTaskRole.Context,
1561
+ }),
1562
+ entry({
1563
+ command: 'unalign',
1564
+ description: 'Restore the original volatile tokens in aligned text using its `--map`.',
1565
+ category: 'core',
1566
+ safetyLevel: SafetyLevel.ReadOnly,
1567
+ mcpAvailable: true,
1568
+ surface: CommandSurface.Advanced,
1569
+ intendedAudience: [CommandAudience.Agent, CommandAudience.Human],
1570
+ taskRole: CommandTaskRole.Context,
1571
+ }),
1288
1572
  // ── Backend feature expansion ─────────────────────────────────────────
1289
1573
  entry({
1290
1574
  command: 'bundle create',
@@ -2316,7 +2600,7 @@ export const COMMAND_CATALOG = Object.freeze([
2316
2600
  }),
2317
2601
  entry({
2318
2602
  command: 'release smoke --matrix',
2319
- description: 'Run smoke scenarios across multiple repo targets (sharkcraft/dogfood/synthetic/adopter).',
2603
+ description: 'Run smoke scenarios across multiple repo targets (sharkcraft/dogfood/synthetic/consumer).',
2320
2604
  category: 'release',
2321
2605
  safetyLevel: SafetyLevel.WritesDraftsOnly,
2322
2606
  writesFiles: true,
@@ -2708,34 +2992,6 @@ export const COMMAND_CATALOG = Object.freeze([
2708
2992
  safetyLevel: SafetyLevel.ReadOnly,
2709
2993
  mcpAvailable: true,
2710
2994
  }),
2711
- entry({
2712
- command: 'plugin rename',
2713
- description: 'Plan-only plugin rename (profile-driven) — emits replace ops + manual folder rename checklist.',
2714
- category: 'lifecycle',
2715
- safetyLevel: SafetyLevel.WritesDraftsOnly,
2716
- mcpAvailable: true,
2717
- }),
2718
- entry({
2719
- command: 'plugin remove',
2720
- description: 'Plan-only destructive plugin remove (profile-driven) — destructive; requires human approval.',
2721
- category: 'lifecycle',
2722
- safetyLevel: SafetyLevel.WritesDraftsOnly,
2723
- mcpAvailable: true,
2724
- }),
2725
- entry({
2726
- command: 'plugin lifecycle list',
2727
- description: 'List plugins detected under the active profile roots and key-table. Read-only.',
2728
- category: 'lifecycle',
2729
- safetyLevel: SafetyLevel.ReadOnly,
2730
- mcpAvailable: false,
2731
- }),
2732
- entry({
2733
- command: 'plugin lifecycle inspect',
2734
- description: 'Inspect references to a plugin across the profile layers + key-table. Read-only.',
2735
- category: 'lifecycle',
2736
- safetyLevel: SafetyLevel.ReadOnly,
2737
- mcpAvailable: false,
2738
- }),
2739
2995
  entry({
2740
2996
  command: 'helper list',
2741
2997
  description: 'List available helper plan generators. Read-only.',
@@ -3137,12 +3393,102 @@ export function commandLifecycle(e) {
3137
3393
  return CommandLifecycle.Deprecated;
3138
3394
  return CommandLifecycle.Active;
3139
3395
  }
3396
+ /**
3397
+ * The "Primary verbs" allowlist — top-level commands that pay rent in
3398
+ * the default help surface. Everything else stays callable but is
3399
+ * hidden from `--full-help` and from MCP tool advertising; users find
3400
+ * them via `shrk surface list`, `shrk help <cmd>`, or `--full-help`.
3401
+ *
3402
+ * Picked to cover the canonical agent-flow journeys:
3403
+ * - bootstrap a repo, verify it
3404
+ * - get a brief / context / task packet for an agent
3405
+ * - generate safely (plan → apply → check)
3406
+ * - browse what shrk knows (rules / paths / templates / presets)
3407
+ * - inline the rules into the agent's prompt (export, mcp, dashboard)
3408
+ * - daily operations (review, impact, search, explain, why, surface)
3409
+ *
3410
+ * Anything not in this set falls back to the legacy
3411
+ * surface-tier-based visibility, with deprecated / retired / aliased
3412
+ * commands hidden regardless. Adding a verb here is the explicit
3413
+ * "this is rent-paying" decision.
3414
+ */
3415
+ const PRIMARY_VERBS_ALLOWLIST = new Set([
3416
+ // Bootstrap
3417
+ 'init',
3418
+ 'doctor',
3419
+ 'inspect',
3420
+ 'onboard',
3421
+ 'version',
3422
+ 'help',
3423
+ 'preflight',
3424
+ 'self-config',
3425
+ // Per-task
3426
+ 'brief',
3427
+ 'recommend',
3428
+ 'context',
3429
+ 'task',
3430
+ 'coverage',
3431
+ 'explain',
3432
+ 'why',
3433
+ 'search',
3434
+ 'impact',
3435
+ 'graph',
3436
+ 'code-intel',
3437
+ 'compress',
3438
+ 'expand',
3439
+ // Generate code safely
3440
+ 'gen',
3441
+ 'apply',
3442
+ 'check',
3443
+ 'quality',
3444
+ 'plan',
3445
+ 'fix',
3446
+ // Browse / inline
3447
+ 'knowledge',
3448
+ 'rules',
3449
+ 'templates',
3450
+ 'paths',
3451
+ 'import',
3452
+ 'export',
3453
+ // Architecture & quality gates
3454
+ 'drift',
3455
+ 'safety',
3456
+ // Run for an agent
3457
+ 'mcp',
3458
+ 'dashboard',
3459
+ // Ops
3460
+ 'surface',
3461
+ 'presets',
3462
+ 'review',
3463
+ 'packs',
3464
+ 'ci',
3465
+ 'commands',
3466
+ ]);
3467
+ function topLevelVerb(command) {
3468
+ // Strip leading `--cwd <dir>` / `--<flag>` tokens and angle-bracket
3469
+ // placeholders; the canonical first verb is whatever leads.
3470
+ const tokens = command.split(/\s+/);
3471
+ for (const t of tokens) {
3472
+ if (!t)
3473
+ continue;
3474
+ if (t.startsWith('--') || t.startsWith('-'))
3475
+ continue;
3476
+ if (t.startsWith('<') || t.startsWith('"'))
3477
+ continue;
3478
+ return t;
3479
+ }
3480
+ return command;
3481
+ }
3140
3482
  /**
3141
3483
  * Default-help visibility rule. Honors an explicit
3142
3484
  * {@link ICommandCatalogEntry.showInDefaultHelp} when set; otherwise
3143
- * primary + common are visible and advanced / machine / internal / legacy
3144
- * are hidden. Deprecated and retired commands are always hidden by
3145
- * default regardless of surface.
3485
+ * the {@link PRIMARY_VERBS_ALLOWLIST} gates membership in the visible
3486
+ * surface (primary + common entries whose top-level verb pays rent
3487
+ * make the cut; everything else is hidden from `--full-help`).
3488
+ *
3489
+ * Deprecated, retired, aliased commands and anything in the
3490
+ * {@link R46_OVERLAY} are always hidden regardless of allowlist
3491
+ * membership.
3146
3492
  */
3147
3493
  export function defaultShowInHelp(e) {
3148
3494
  if (e.showInDefaultHelp !== undefined)
@@ -3155,6 +3501,12 @@ export function defaultShowInHelp(e) {
3155
3501
  return false;
3156
3502
  if (lc === CommandLifecycle.Alias)
3157
3503
  return false;
3504
+ // Allowlist gate — the top-level verb must be one of the ~30
3505
+ // rent-paying verbs. Subcommands of an allowlisted verb inherit
3506
+ // visibility (so `check boundaries` shows under `check`).
3507
+ const verb = topLevelVerb(e.command);
3508
+ if (!PRIMARY_VERBS_ALLOWLIST.has(verb))
3509
+ return false;
3158
3510
  const surface = commandSurface(e);
3159
3511
  return surface === CommandSurface.Primary || surface === CommandSurface.Common;
3160
3512
  }
@@ -3240,3 +3592,24 @@ export function renderCommandSafetyMatrixMarkdown(rows) {
3240
3592
  }
3241
3593
  return lines.join('\n') + '\n';
3242
3594
  }
3595
+ /**
3596
+ * The set of TOP-LEVEL command verbs in the catalogue (the first token of each
3597
+ * entry's `command`). The single source of truth for "is `shrk <verb>` a real
3598
+ * command" checks — e.g. the contradictions doc-vs-CLI scan, which lives in the
3599
+ * inspector layer and so receives this set by injection rather than importing
3600
+ * the CLI.
3601
+ */
3602
+ export function cliCommandNameSet() {
3603
+ const out = new Set();
3604
+ for (const entry of COMMAND_CATALOG) {
3605
+ const top = entry.command.split(/\s+/)[0];
3606
+ if (top)
3607
+ out.add(top);
3608
+ for (const alias of entry.aliases) {
3609
+ const aliasTop = alias.split(/\s+/)[0];
3610
+ if (aliasTop)
3611
+ out.add(aliasTop);
3612
+ }
3613
+ }
3614
+ return out;
3615
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"commands.command.d.ts","sourceRoot":"","sources":["../../src/commands/commands.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.command.d.ts","sourceRoot":"","sources":["../../src/commands/commands.command.ts"],"names":[],"mappings":"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"}