@zaowu-labs/cli 1.0.2 → 1.0.6

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 (71) hide show
  1. package/dist/args.d.ts +1 -0
  2. package/dist/args.d.ts.map +1 -1
  3. package/dist/args.js +20 -15
  4. package/dist/args.js.map +1 -1
  5. package/dist/command-contracts.d.ts +7 -0
  6. package/dist/command-contracts.d.ts.map +1 -1
  7. package/dist/command-contracts.js +57 -36
  8. package/dist/command-contracts.js.map +1 -1
  9. package/dist/handler-utils.d.ts +17 -2
  10. package/dist/handler-utils.d.ts.map +1 -1
  11. package/dist/handler-utils.js +54 -2
  12. package/dist/handler-utils.js.map +1 -1
  13. package/dist/handlers/ai-handlers.d.ts.map +1 -1
  14. package/dist/handlers/ai-handlers.js +30 -21
  15. package/dist/handlers/ai-handlers.js.map +1 -1
  16. package/dist/handlers/auto-handlers.d.ts.map +1 -1
  17. package/dist/handlers/auto-handlers.js +3 -7
  18. package/dist/handlers/auto-handlers.js.map +1 -1
  19. package/dist/handlers/config-handlers.d.ts.map +1 -1
  20. package/dist/handlers/config-handlers.js +37 -21
  21. package/dist/handlers/config-handlers.js.map +1 -1
  22. package/dist/handlers/data-handlers.d.ts.map +1 -1
  23. package/dist/handlers/data-handlers.js +8 -10
  24. package/dist/handlers/data-handlers.js.map +1 -1
  25. package/dist/handlers/dev-handlers.d.ts.map +1 -1
  26. package/dist/handlers/dev-handlers.js +144 -182
  27. package/dist/handlers/dev-handlers.js.map +1 -1
  28. package/dist/handlers/doc-handlers.d.ts.map +1 -1
  29. package/dist/handlers/doc-handlers.js +14 -9
  30. package/dist/handlers/doc-handlers.js.map +1 -1
  31. package/dist/handlers/plugin-handlers.d.ts.map +1 -1
  32. package/dist/handlers/plugin-handlers.js +21 -26
  33. package/dist/handlers/plugin-handlers.js.map +1 -1
  34. package/dist/help-text.d.ts.map +1 -1
  35. package/dist/help-text.js +3 -2
  36. package/dist/help-text.js.map +1 -1
  37. package/dist/input-validation.d.ts +6 -0
  38. package/dist/input-validation.d.ts.map +1 -0
  39. package/dist/input-validation.js +68 -0
  40. package/dist/input-validation.js.map +1 -0
  41. package/dist/option-registry.d.ts +16 -0
  42. package/dist/option-registry.d.ts.map +1 -0
  43. package/dist/option-registry.js +84 -0
  44. package/dist/option-registry.js.map +1 -0
  45. package/dist/option-validation.d.ts.map +1 -1
  46. package/dist/option-validation.js +3 -53
  47. package/dist/option-validation.js.map +1 -1
  48. package/dist/root-doctor.d.ts +1 -0
  49. package/dist/root-doctor.d.ts.map +1 -1
  50. package/dist/root-doctor.js +37 -13
  51. package/dist/root-doctor.js.map +1 -1
  52. package/dist/root-help.d.ts +1 -2
  53. package/dist/root-help.d.ts.map +1 -1
  54. package/dist/root-help.js +23 -18
  55. package/dist/root-help.js.map +1 -1
  56. package/dist/root-init.d.ts +2 -1
  57. package/dist/root-init.d.ts.map +1 -1
  58. package/dist/root-init.js +34 -19
  59. package/dist/root-init.js.map +1 -1
  60. package/dist/run.d.ts +0 -1
  61. package/dist/run.d.ts.map +1 -1
  62. package/dist/run.js +51 -27
  63. package/dist/run.js.map +1 -1
  64. package/dist/system-command.d.ts +2 -0
  65. package/dist/system-command.d.ts.map +1 -1
  66. package/dist/system-command.js +4 -1
  67. package/dist/system-command.js.map +1 -1
  68. package/dist/types.d.ts +2 -0
  69. package/dist/types.d.ts.map +1 -1
  70. package/dist/version.js +1 -1
  71. package/package.json +11 -11
@@ -1,7 +1,7 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { installPlugin, listPlugins, removePlugin, validatePluginSource } from '@zaowu-labs/plugin';
4
- import { assertOperationPlanFingerprint, createContentOperationSubjects, createOperationPlan, formatConfirmCommand, formatOperationPlan, getValue, hashOperationContent, requireTarget, result, withOperationPlan, } from '../handler-utils.js';
4
+ import { assertOperationPlanFingerprint, createContentOperationSubjects, createOperationPlan, formatConfirmCommand, formatLabeledList, formatOperationPlan, getValue, hashOperationContent, requireTarget, result, withOperationPlan, } from '../handler-utils.js';
5
5
  const getTargetFileSubjects = async (filePath) => {
6
6
  try {
7
7
  const content = await readFile(filePath, 'utf8');
@@ -33,10 +33,11 @@ export const handlePluginList = async (_args, context) => {
33
33
  export const handlePluginInstall = async (args, context) => {
34
34
  const id = requireTarget(args, 'zw plugin install');
35
35
  const source = getValue(context.parsed, '--source');
36
- const preview = await installPlugin(id, {
37
- cwd: context.cwd,
38
- source,
39
- });
36
+ // One options object for both the preview and the confirmed call: the
37
+ // fingerprint the user confirms is computed from the preview, so the two
38
+ // calls must be structurally unable to drift apart.
39
+ const installOptions = { cwd: context.cwd, source };
40
+ const preview = await installPlugin(id, installOptions);
40
41
  const pluginPath = path.join(preview.pluginDir, `${preview.plugin.id}.json`);
41
42
  const previewManifestContent = `${JSON.stringify(preview.plugin, null, 2)}\n`;
42
43
  const targetFileSubjects = await getTargetFileSubjects(pluginPath);
@@ -55,11 +56,7 @@ export const handlePluginInstall = async (args, context) => {
55
56
  });
56
57
  assertOperationPlanFingerprint(context, operationPlan);
57
58
  const installed = context.yes
58
- ? await installPlugin(id, {
59
- cwd: context.cwd,
60
- source,
61
- yes: true,
62
- })
59
+ ? await installPlugin(id, { ...installOptions, yes: true })
63
60
  : preview;
64
61
  const confirmCommand = formatConfirmCommand([
65
62
  'zw',
@@ -88,9 +85,8 @@ export const handlePluginInstall = async (args, context) => {
88
85
  };
89
86
  export const handlePluginRemove = async (args, context) => {
90
87
  const id = requireTarget(args, 'zw plugin remove');
91
- const preview = await removePlugin(id, {
92
- cwd: context.cwd,
93
- });
88
+ const removeOptions = { cwd: context.cwd };
89
+ const preview = await removePlugin(id, removeOptions);
94
90
  const pluginPath = path.join(preview.pluginDir, `${preview.plugin.id}.json`);
95
91
  const targetFileSubjects = await getTargetFileSubjects(pluginPath);
96
92
  const operationPlan = createOperationPlan({
@@ -102,12 +98,7 @@ export const handlePluginRemove = async (args, context) => {
102
98
  notes: ['Plugin removal deletes a local manifest only when --yes is provided.'],
103
99
  });
104
100
  assertOperationPlanFingerprint(context, operationPlan);
105
- const removed = context.yes
106
- ? await removePlugin(id, {
107
- cwd: context.cwd,
108
- yes: true,
109
- })
110
- : preview;
101
+ const removed = context.yes ? await removePlugin(id, { ...removeOptions, yes: true }) : preview;
111
102
  const human = [
112
103
  'ZaoWu Plugin Remove',
113
104
  '',
@@ -121,7 +112,15 @@ export const handlePluginRemove = async (args, context) => {
121
112
  : [
122
113
  '',
123
114
  'To execute this plugin removal plan, run:',
124
- ` zw plugin remove ${id} --yes --plan-fingerprint ${operationPlan.fingerprint}`,
115
+ ` ${formatConfirmCommand([
116
+ 'zw',
117
+ 'plugin',
118
+ 'remove',
119
+ id,
120
+ '--yes',
121
+ '--plan-fingerprint',
122
+ operationPlan.fingerprint,
123
+ ])}`,
125
124
  ]),
126
125
  ].join('\n');
127
126
  return result(context, withOperationPlan(removed, operationPlan), human);
@@ -136,13 +135,9 @@ export const handlePluginValidate = async (args, context) => {
136
135
  `Target: ${validation.target}`,
137
136
  `Manifest: ${validation.manifestPath ?? 'none'}`,
138
137
  '',
139
- validation.errors.length > 0
140
- ? ['Errors:', ...validation.errors.map((error) => `- ${error}`)].join('\n')
141
- : 'Errors: none',
138
+ formatLabeledList('Errors', validation.errors),
142
139
  '',
143
- validation.warnings.length > 0
144
- ? ['Warnings:', ...validation.warnings.map((warning) => `- ${warning}`)].join('\n')
145
- : 'Warnings: none',
140
+ formatLabeledList('Warnings', validation.warnings),
146
141
  ].join('\n');
147
142
  return result(context, validation, human);
148
143
  };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-handlers.js","sourceRoot":"","sources":["../../src/handlers/plugin-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-handlers.js","sourceRoot":"","sources":["../../src/handlers/plugin-handlers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"help-text.d.ts","sourceRoot":"","sources":["../src/help-text.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqb9D,CAAC"}
1
+ {"version":3,"file":"help-text.d.ts","sourceRoot":"","sources":["../src/help-text.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsb9D,CAAC"}
package/dist/help-text.js CHANGED
@@ -10,7 +10,7 @@ Description:
10
10
 
11
11
  Options:
12
12
  --file <path> Include a readable text file as input
13
- --provider <id> Provider id, defaults to echo
13
+ --provider <id> Override project/global preferences; defaults to Echo demo
14
14
  --model <name> Provider model hint
15
15
  --dry-run Force preview mode
16
16
  --yes Confirm a network provider request
@@ -56,7 +56,8 @@ Usage:
56
56
  zw auto run <workflow.json|workflow.yml|workflow.yaml> [--yes] [options]
57
57
 
58
58
  Description:
59
- Preview a workflow by default. Confirmed runs execute supported message steps only.
59
+ Preview a workflow by default. Confirmed runs support messages and bounded file creation.
60
+ Shell steps remain blocked.
60
61
 
61
62
  Options:
62
63
  --dry-run Force preview mode
@@ -1 +1 @@
1
- {"version":3,"file":"help-text.js","sourceRoot":"","sources":["../src/help-text.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAA2C;IACjE,EAAE,EAAE;QACF,GAAG,EAAE;;;;;;;;;;;;;;;;kDAgByC;QAC9C,SAAS,EAAE;;;;;;;;;;kDAUmC;KAC/C;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE;;;;;;;;;kDASoC;QAC9C,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,GAAG,EAAE;;;;;;;;;;;;;kDAayC;KAC/C;IACD,MAAM,EAAE;QACN,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,QAAQ,EAAE;;;;;;;;;kDASoC;QAC9C,GAAG,EAAE;;;;;;;;;kDASyC;QAC9C,GAAG,EAAE;;;;;;;;;;;;;;kDAcyC;QAC9C,OAAO,EAAE;;;;;;;;;;;;;kDAaqC;KAC/C;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;;;;;;;;;;kDAUqC;QAC9C,OAAO,EAAE;;;;;;;;;;kDAUqC;QAC9C,KAAK,EAAE;;;;;;;;;;;;;;;kDAeuC;QAC9C,MAAM,EAAE;;;;;;;;;;kDAUsC;QAC9C,MAAM,EAAE;;;;;;;;;;;kDAWsC;QAC9C,MAAM,EAAE;;;;;;;;;kDASsC;KAC/C;IACD,GAAG,EAAE;QACH,MAAM,EAAE;;;;;;;;;kDASsC;QAC9C,MAAM,EAAE;;;;;;;;;;;;;;;;;;kDAkBsC;QAC9C,MAAM,EAAE;;;;;;;;;;;;;;;;kDAgBsC;QAC9C,IAAI,EAAE;;;;;;;;;;;;;;kDAcwC;KAC/C;IACD,GAAG,EAAE;QACH,OAAO,EAAE;;;;;;;;;kDASqC;QAC9C,OAAO,EAAE;;;;;;;;;kDASqC;QAC9C,OAAO,EAAE;;;;;;;;;;;;;;;kDAeqC;QAC9C,OAAO,EAAE;;;;;;;;;kDASqC;QAC9C,MAAM,EAAE;;;;;;;;;kDASsC;KAC/C;IACD,MAAM,EAAE;QACN,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,OAAO,EAAE;;;;;;;;;;;;;;kDAcqC;QAC9C,MAAM,EAAE;;;;;;;;;;;;;kDAasC;QAC9C,QAAQ,EAAE;;;;;;;;;kDASoC;KAC/C;IACD,KAAK,EAAE;QACL,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,IAAI,EAAE;;;;;;;;;;;kDAWwC;KAC/C;IACD,GAAG,EAAE;QACH,OAAO,EAAE;;;;;;;;;;;;;kDAaqC;QAC9C,KAAK,EAAE;;;;;;;;;;;;;kDAauC;KAC/C;CACF,CAAC"}
1
+ {"version":3,"file":"help-text.js","sourceRoot":"","sources":["../src/help-text.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAA2C;IACjE,EAAE,EAAE;QACF,GAAG,EAAE;;;;;;;;;;;;;;;;kDAgByC;QAC9C,SAAS,EAAE;;;;;;;;;;kDAUmC;KAC/C;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE;;;;;;;;;kDASoC;QAC9C,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,GAAG,EAAE;;;;;;;;;;;;;;kDAcyC;KAC/C;IACD,MAAM,EAAE;QACN,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,QAAQ,EAAE;;;;;;;;;kDASoC;QAC9C,GAAG,EAAE;;;;;;;;;kDASyC;QAC9C,GAAG,EAAE;;;;;;;;;;;;;;kDAcyC;QAC9C,OAAO,EAAE;;;;;;;;;;;;;kDAaqC;KAC/C;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;;;;;;;;;;kDAUqC;QAC9C,OAAO,EAAE;;;;;;;;;;kDAUqC;QAC9C,KAAK,EAAE;;;;;;;;;;;;;;;kDAeuC;QAC9C,MAAM,EAAE;;;;;;;;;;kDAUsC;QAC9C,MAAM,EAAE;;;;;;;;;;;kDAWsC;QAC9C,MAAM,EAAE;;;;;;;;;kDASsC;KAC/C;IACD,GAAG,EAAE;QACH,MAAM,EAAE;;;;;;;;;kDASsC;QAC9C,MAAM,EAAE;;;;;;;;;;;;;;;;;;kDAkBsC;QAC9C,MAAM,EAAE;;;;;;;;;;;;;;;;kDAgBsC;QAC9C,IAAI,EAAE;;;;;;;;;;;;;;kDAcwC;KAC/C;IACD,GAAG,EAAE;QACH,OAAO,EAAE;;;;;;;;;kDASqC;QAC9C,OAAO,EAAE;;;;;;;;;kDASqC;QAC9C,OAAO,EAAE;;;;;;;;;;;;;;;kDAeqC;QAC9C,OAAO,EAAE;;;;;;;;;kDASqC;QAC9C,MAAM,EAAE;;;;;;;;;kDASsC;KAC/C;IACD,MAAM,EAAE;QACN,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,OAAO,EAAE;;;;;;;;;;;;;;kDAcqC;QAC9C,MAAM,EAAE;;;;;;;;;;;;;kDAasC;QAC9C,QAAQ,EAAE;;;;;;;;;kDASoC;KAC/C;IACD,KAAK,EAAE;QACL,IAAI,EAAE;;;;;;;;;kDASwC;QAC9C,IAAI,EAAE;;;;;;;;;;;kDAWwC;KAC/C;IACD,GAAG,EAAE;QACH,OAAO,EAAE;;;;;;;;;;;;;kDAaqC;QAC9C,KAAK,EAAE;;;;;;;;;;;;;kDAauC;KAC/C;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ParsedArgs } from './args.js';
2
+ /** Maximum target count; null means free-form text. Minimums stay domain-owned. */
3
+ export declare const COMMAND_TARGET_LIMITS: Readonly<Record<string, number | null>>;
4
+ export declare const assertBooleanFlags: (parsed: ParsedArgs) => void;
5
+ export declare const assertTargetCount: (commandArgs: readonly string[]) => void;
6
+ //# sourceMappingURL=input-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-validation.d.ts","sourceRoot":"","sources":["../src/input-validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAqCzE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,UAAU,KAAG,IAUvD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,aAAa,SAAS,MAAM,EAAE,KAAG,IAelE,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { ZaoWuError } from '@zaowu-labs/core';
2
+ /** Maximum target count; null means free-form text. Minimums stay domain-owned. */
3
+ export const COMMAND_TARGET_LIMITS = {
4
+ init: 0,
5
+ doctor: 0,
6
+ 'ai:ask': null,
7
+ 'ai:providers': 0,
8
+ 'auto:plan': 1,
9
+ 'auto:run': 1,
10
+ 'auto:validate': 1,
11
+ 'config:get': 1,
12
+ 'config:migrate': 0,
13
+ 'config:path': 0,
14
+ 'config:set': 2,
15
+ 'config:show': 0,
16
+ 'config:validate': 0,
17
+ 'data:analyze': 1,
18
+ 'data:clean': 1,
19
+ 'data:inspect': 1,
20
+ 'data:sample': 1,
21
+ 'data:schema': 1,
22
+ 'data:sheets': 1,
23
+ 'dev:commit': 0,
24
+ 'dev:review': 0,
25
+ 'dev:status': 0,
26
+ 'dev:sync': 0,
27
+ 'doc:convert': 1,
28
+ 'doc:extract': 1,
29
+ 'doc:outline': 1,
30
+ 'doc:search': 2,
31
+ 'doc:summary': 1,
32
+ 'plugin:install': 1,
33
+ 'plugin:list': 0,
34
+ 'plugin:remove': 1,
35
+ 'plugin:validate': 1,
36
+ 'teach:plan': null,
37
+ 'teach:quiz': null,
38
+ 'web:fetch': 1,
39
+ 'web:inspect': 1,
40
+ };
41
+ export const assertBooleanFlags = (parsed) => {
42
+ const option = parsed.assignedBooleans[0];
43
+ if (!option)
44
+ return;
45
+ throw new ZaoWuError({
46
+ code: 'OPTION_VALUE_INVALID',
47
+ message: 'Boolean flags do not accept a value.',
48
+ why: `The option ${option} is a flag; an assigned value cannot enable or disable it.`,
49
+ fix: `Use ${option} without =value to enable it, or omit the flag. Use --dry-run to preview a sensitive action.`,
50
+ });
51
+ };
52
+ export const assertTargetCount = (commandArgs) => {
53
+ const [command, action] = commandArgs;
54
+ const isRoot = command === 'init' || command === 'doctor';
55
+ const key = isRoot ? command : `${command}:${action}`;
56
+ const maximum = COMMAND_TARGET_LIMITS[key];
57
+ const count = commandArgs.length - (isRoot ? 1 : 2);
58
+ if (maximum === undefined || maximum === null || count <= maximum)
59
+ return;
60
+ const label = isRoot ? `zw ${command}` : `zw ${command} ${action}`;
61
+ throw new ZaoWuError({
62
+ code: 'ARGUMENT_UNEXPECTED',
63
+ message: 'Unexpected positional argument.',
64
+ why: `\`${label}\` accepts at most ${maximum} target argument(s), but received ${count}.`,
65
+ fix: `Run \`${label} --help\` to check the expected targets and options. Quote text that belongs to one target.`,
66
+ });
67
+ };
68
+ //# sourceMappingURL=input-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../src/input-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAA4C;IAC5E,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC;IACf,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,CAAC;IAChB,eAAe,EAAE,CAAC;IAClB,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAkB,EAAQ,EAAE;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,IAAI,UAAU,CAAC;QACnB,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,sCAAsC;QAC/C,GAAG,EAAE,cAAc,MAAM,4DAA4D;QACrF,GAAG,EAAE,OAAO,MAAM,8FAA8F;KACjH,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAA8B,EAAQ,EAAE;IACxE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC;IACtC,MAAM,MAAM,GAAG,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,OAAO;QAAE,OAAO;IAE1E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;IACnE,MAAM,IAAI,UAAU,CAAC;QACnB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,iCAAiC;QAC1C,GAAG,EAAE,KAAK,KAAK,sBAAsB,OAAO,qCAAqC,KAAK,GAAG;QACzF,GAAG,EAAE,SAAS,KAAK,6FAA6F;KACjH,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Single source of truth for CLI options.
3
+ *
4
+ * Every option is declared exactly once as either value-taking or boolean.
5
+ * `args.ts` derives its parser behavior from VALUE_OPTIONS, and
6
+ * `option-validation.ts` builds per-command allowlists from COMMAND_OPTIONS,
7
+ * so a new option cannot end up value-taking in one layer and boolean in the
8
+ * other. A contract test asserts the registry stays internally consistent.
9
+ */
10
+ /** Options that must be followed by a value (`--option value` or `--option=value`). */
11
+ export declare const VALUE_OPTIONS: readonly ["--count", "--file", "--format", "--model", "--output", "--plan-fingerprint", "--provider", "--rows", "--sheet", "--source"];
12
+ /** Options that are plain flags and never consume a following value. */
13
+ export declare const BOOLEAN_OPTIONS: readonly ["--ai", "--discard-local", "--dry-run", "--global", "--help", "--json", "--staged", "--version", "--worktree", "--yes"];
14
+ export declare const COMMON_OPTIONS: readonly ["--help", "--json", "--version"];
15
+ export declare const COMMAND_OPTIONS: Readonly<Record<string, readonly string[]>>;
16
+ //# sourceMappingURL=option-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-registry.d.ts","sourceRoot":"","sources":["../src/option-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uFAAuF;AACvF,eAAO,MAAM,aAAa,wIAWhB,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,eAAe,mIAWlB,CAAC;AAEX,eAAO,MAAM,cAAc,4CAA6C,CAAC;AAGzE,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CA6CvE,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Single source of truth for CLI options.
3
+ *
4
+ * Every option is declared exactly once as either value-taking or boolean.
5
+ * `args.ts` derives its parser behavior from VALUE_OPTIONS, and
6
+ * `option-validation.ts` builds per-command allowlists from COMMAND_OPTIONS,
7
+ * so a new option cannot end up value-taking in one layer and boolean in the
8
+ * other. A contract test asserts the registry stays internally consistent.
9
+ */
10
+ /** Options that must be followed by a value (`--option value` or `--option=value`). */
11
+ export const VALUE_OPTIONS = [
12
+ '--count',
13
+ '--file',
14
+ '--format',
15
+ '--model',
16
+ '--output',
17
+ '--plan-fingerprint',
18
+ '--provider',
19
+ '--rows',
20
+ '--sheet',
21
+ '--source',
22
+ ];
23
+ /** Options that are plain flags and never consume a following value. */
24
+ export const BOOLEAN_OPTIONS = [
25
+ '--ai',
26
+ '--discard-local',
27
+ '--dry-run',
28
+ '--global',
29
+ '--help',
30
+ '--json',
31
+ '--staged',
32
+ '--version',
33
+ '--worktree',
34
+ '--yes',
35
+ ];
36
+ export const COMMON_OPTIONS = ['--help', '--json', '--version'];
37
+ const CONFIRMATION_OPTIONS = ['--dry-run', '--plan-fingerprint', '--yes'];
38
+ export const COMMAND_OPTIONS = {
39
+ init: [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
40
+ doctor: COMMON_OPTIONS,
41
+ 'ai:ask': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--file', '--model', '--provider'],
42
+ 'ai:providers': [...COMMON_OPTIONS, '--provider'],
43
+ 'auto:plan': COMMON_OPTIONS,
44
+ 'auto:run': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
45
+ 'auto:validate': COMMON_OPTIONS,
46
+ 'config:get': COMMON_OPTIONS,
47
+ 'config:migrate': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
48
+ 'config:path': COMMON_OPTIONS,
49
+ 'config:set': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--global'],
50
+ 'config:show': COMMON_OPTIONS,
51
+ 'config:validate': COMMON_OPTIONS,
52
+ 'data:analyze': [...COMMON_OPTIONS, '--sheet'],
53
+ 'data:clean': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--output', '--sheet'],
54
+ 'data:inspect': [...COMMON_OPTIONS, '--sheet'],
55
+ 'data:sample': [...COMMON_OPTIONS, '--rows', '--sheet'],
56
+ 'data:schema': [...COMMON_OPTIONS, '--sheet'],
57
+ 'data:sheets': COMMON_OPTIONS,
58
+ 'dev:commit': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--ai', '--model', '--provider'],
59
+ 'dev:review': [
60
+ ...COMMON_OPTIONS,
61
+ ...CONFIRMATION_OPTIONS,
62
+ '--ai',
63
+ '--model',
64
+ '--provider',
65
+ '--staged',
66
+ '--worktree',
67
+ ],
68
+ 'dev:status': COMMON_OPTIONS,
69
+ 'dev:sync': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--discard-local'],
70
+ 'doc:convert': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--format', '--output'],
71
+ 'doc:extract': COMMON_OPTIONS,
72
+ 'doc:outline': COMMON_OPTIONS,
73
+ 'doc:search': COMMON_OPTIONS,
74
+ 'doc:summary': COMMON_OPTIONS,
75
+ 'plugin:install': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--source'],
76
+ 'plugin:list': COMMON_OPTIONS,
77
+ 'plugin:remove': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
78
+ 'plugin:validate': COMMON_OPTIONS,
79
+ 'teach:plan': COMMON_OPTIONS,
80
+ 'teach:quiz': [...COMMON_OPTIONS, '--count', '--format'],
81
+ 'web:fetch': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
82
+ 'web:inspect': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
83
+ };
84
+ //# sourceMappingURL=option-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-registry.js","sourceRoot":"","sources":["../src/option-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"option-validation.d.ts","sourceRoot":"","sources":["../src/option-validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAoDjE,eAAO,MAAM,sBAAsB,GACjC,QAAQ,UAAU,EAClB,aAAa,SAAS,MAAM,EAAE,KAC7B,IA0BF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,SAAS,MAAM,EAAE,KAAG,IAaxE,CAAC;AAsBF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,UAAU,CAAC,OAAO,SAAS,CAAC,EACpC,aAAa,SAAS,MAAM,EAAE,KAC7B,IA2CF,CAAC"}
1
+ {"version":3,"file":"option-validation.d.ts","sourceRoot":"","sources":["../src/option-validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGjE,eAAO,MAAM,sBAAsB,GACjC,QAAQ,UAAU,EAClB,aAAa,SAAS,MAAM,EAAE,KAC7B,IAsBF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,SAAS,MAAM,EAAE,KAAG,IAaxE,CAAC;AAsBF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,UAAU,CAAC,OAAO,SAAS,CAAC,EACpC,aAAa,SAAS,MAAM,EAAE,KAC7B,IA2CF,CAAC"}
@@ -1,66 +1,16 @@
1
1
  import { ZaoWuError } from '@zaowu-labs/core';
2
2
  import { getValue } from './args.js';
3
- const COMMON_OPTIONS = ['--help', '--json', '--version'];
4
- const CONFIRMATION_OPTIONS = ['--dry-run', '--plan-fingerprint', '--yes'];
5
- const COMMAND_OPTIONS = {
6
- init: [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
7
- doctor: COMMON_OPTIONS,
8
- 'ai:ask': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--file', '--model', '--provider'],
9
- 'ai:providers': [...COMMON_OPTIONS, '--provider'],
10
- 'auto:plan': COMMON_OPTIONS,
11
- 'auto:run': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
12
- 'auto:validate': COMMON_OPTIONS,
13
- 'config:get': COMMON_OPTIONS,
14
- 'config:migrate': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
15
- 'config:path': COMMON_OPTIONS,
16
- 'config:set': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--global'],
17
- 'config:show': COMMON_OPTIONS,
18
- 'config:validate': COMMON_OPTIONS,
19
- 'data:analyze': [...COMMON_OPTIONS, '--sheet'],
20
- 'data:clean': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--output', '--sheet'],
21
- 'data:inspect': [...COMMON_OPTIONS, '--sheet'],
22
- 'data:sample': [...COMMON_OPTIONS, '--rows', '--sheet'],
23
- 'data:schema': [...COMMON_OPTIONS, '--sheet'],
24
- 'data:sheets': COMMON_OPTIONS,
25
- 'dev:commit': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--ai', '--model', '--provider'],
26
- 'dev:review': [
27
- ...COMMON_OPTIONS,
28
- ...CONFIRMATION_OPTIONS,
29
- '--ai',
30
- '--model',
31
- '--provider',
32
- '--staged',
33
- '--worktree',
34
- ],
35
- 'dev:status': COMMON_OPTIONS,
36
- 'dev:sync': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--discard-local'],
37
- 'doc:convert': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--format', '--output'],
38
- 'doc:extract': COMMON_OPTIONS,
39
- 'doc:outline': COMMON_OPTIONS,
40
- 'doc:search': COMMON_OPTIONS,
41
- 'doc:summary': COMMON_OPTIONS,
42
- 'plugin:install': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS, '--source'],
43
- 'plugin:list': COMMON_OPTIONS,
44
- 'plugin:remove': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
45
- 'plugin:validate': COMMON_OPTIONS,
46
- 'teach:plan': COMMON_OPTIONS,
47
- 'teach:quiz': [...COMMON_OPTIONS, '--count', '--format'],
48
- 'web:fetch': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
49
- 'web:inspect': [...COMMON_OPTIONS, ...CONFIRMATION_OPTIONS],
50
- };
3
+ import { COMMAND_OPTIONS, COMMON_OPTIONS } from './option-registry.js';
51
4
  export const assertSupportedOptions = (parsed, commandArgs) => {
52
5
  const [command, action] = commandArgs;
53
- if (!command) {
54
- return;
55
- }
56
6
  const commandKey = action ? `${command}:${action}` : command;
57
- const allowed = new Set(COMMAND_OPTIONS[commandKey] ?? COMMON_OPTIONS);
7
+ const allowed = new Set((commandKey && COMMAND_OPTIONS[commandKey]) || COMMON_OPTIONS);
58
8
  const unsupported = [...parsed.options].filter((option) => !allowed.has(option));
59
9
  if (unsupported.length === 0) {
60
10
  return;
61
11
  }
62
12
  const optionList = unsupported.join(', ');
63
- const commandName = action ? `zw ${command} ${action}` : `zw ${command}`;
13
+ const commandName = action ? `zw ${command} ${action}` : command ? `zw ${command}` : 'zw';
64
14
  throw new ZaoWuError({
65
15
  code: 'OPTION_UNSUPPORTED',
66
16
  message: 'Option is not supported by this command.',
@@ -1 +1 @@
1
- {"version":3,"file":"option-validation.js","sourceRoot":"","sources":["../src/option-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"option-validation.js","sourceRoot":"","sources":["../src/option-validation.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ interface DoctorCheck {
8
8
  version?: string;
9
9
  details?: string;
10
10
  fix?: string;
11
+ required?: boolean;
11
12
  }
12
13
  export interface DoctorResult {
13
14
  schemaVersion: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"root-doctor.d.ts","sourceRoot":"","sources":["../src/root-doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGzF,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,YAAY,CAAC;AAErE,KAAK,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;AAChD,KAAK,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;AAEtC,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B;AA4ND,eAAO,MAAM,iBAAiB,GAC5B,UAAS,mBAAwB,KAChC,OAAO,CAAC,YAAY,CAoDtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,YAAY,KAAG,MAwBxD,CAAC"}
1
+ {"version":3,"file":"root-doctor.d.ts","sourceRoot":"","sources":["../src/root-doctor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGzF,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,YAAY,CAAC;AAErE,KAAK,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;AAChD,KAAK,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;AAEtC,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B;AA0OD,eAAO,MAAM,iBAAiB,GAC5B,UAAS,mBAAwB,KAChC,OAAO,CAAC,YAAY,CAkEtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,YAAY,KAAG,MAwBxD,CAAC"}
@@ -1,16 +1,27 @@
1
1
  import path from 'node:path';
2
2
  import { validateAIProviderConfig } from '@zaowu-labs/ai';
3
- import { findConfigFile, loadResolvedConfig } from '@zaowu-labs/config';
3
+ import { findConfigFile, loadOptionalResolvedConfig, loadResolvedConfig, } from '@zaowu-labs/config';
4
4
  import { createOperationPlan, isZaoWuError } from '@zaowu-labs/core';
5
- import { COMMAND_CONTRACTS } from './command-contracts.js';
5
+ import { ADDITIONAL_ROOT_SURFACES, COMMAND_CONTRACTS } from './command-contracts.js';
6
6
  import { runSystemCommand } from './system-command.js';
7
7
  const MINIMUM_NODE_VERSION = '20.19.0';
8
8
  const MINIMUM_PNPM_VERSION = '10.34.1';
9
9
  const MAXIMUM_PNPM_MAJOR = 11;
10
- const ADDITIONAL_ROOT_SURFACES_IN_CAPABILITY_MATRIX = 3;
11
10
  const PNPM_MISSING_FIX = 'Run `corepack enable` or install pnpm.';
12
11
  const PNPM_VERSION_FIX = `Use pnpm ${MINIMUM_PNPM_VERSION} through Corepack: ` +
13
12
  `corepack prepare pnpm@${MINIMUM_PNPM_VERSION} --activate.`;
13
+ const diagnosticOptions = (command) => ({
14
+ timeout: 5_000,
15
+ ...(command === 'corepack' || command === 'pnpm'
16
+ ? {
17
+ env: {
18
+ COREPACK_ENABLE_NETWORK: '0',
19
+ COREPACK_ENABLE_DOWNLOAD_PROMPT: '0',
20
+ COREPACK_ENABLE_AUTO_PIN: '0',
21
+ },
22
+ }
23
+ : {}),
24
+ });
14
25
  const satisfiesMinimumVersion = (version, minimum) => {
15
26
  const parse = (value) => value
16
27
  .replace(/^v/, '')
@@ -41,7 +52,7 @@ const satisfiesPnpmVersion = (version) => Boolean(version &&
41
52
  getMajorVersion(version) < MAXIMUM_PNPM_MAJOR);
42
53
  const checkCommand = (name, command, args, fix, commandRunner, details) => {
43
54
  try {
44
- const output = commandRunner(command, args);
55
+ const output = commandRunner(command, args, diagnosticOptions(command));
45
56
  return {
46
57
  name,
47
58
  status: 'ok',
@@ -59,7 +70,7 @@ const checkCommand = (name, command, args, fix, commandRunner, details) => {
59
70
  };
60
71
  const checkPnpmCommand = (command, args, commandRunner, details) => {
61
72
  try {
62
- const output = commandRunner(command, args);
73
+ const output = commandRunner(command, args, diagnosticOptions(command));
63
74
  const version = extractVersion(output);
64
75
  const isSupported = satisfiesPnpmVersion(version);
65
76
  return {
@@ -130,7 +141,7 @@ const getConfigCheck = async (cwd) => {
130
141
  };
131
142
  }
132
143
  };
133
- const checkAIProvider = (resolvedConfig, checkedInvalidConfig) => {
144
+ const checkAIProvider = async (resolvedConfig, checkedInvalidConfig, cwd) => {
134
145
  if (!resolvedConfig && checkedInvalidConfig) {
135
146
  return {
136
147
  name: 'AI provider',
@@ -140,7 +151,8 @@ const checkAIProvider = (resolvedConfig, checkedInvalidConfig) => {
140
151
  };
141
152
  }
142
153
  try {
143
- const validation = validateAIProviderConfig(resolvedConfig?.config.ai.provider);
154
+ const effectiveConfig = resolvedConfig ?? (await loadOptionalResolvedConfig(cwd));
155
+ const validation = validateAIProviderConfig(effectiveConfig?.config.ai.provider);
144
156
  const provider = validation.provider;
145
157
  const location = provider.network ? 'network' : 'local';
146
158
  const configStatus = provider.configured ? 'configured' : 'missing config';
@@ -165,7 +177,7 @@ const checkAIProvider = (resolvedConfig, checkedInvalidConfig) => {
165
177
  const checkCommandMatrix = () => ({
166
178
  name: 'Command matrix',
167
179
  status: 'ok',
168
- details: `${COMMAND_CONTRACTS.length + ADDITIONAL_ROOT_SURFACES_IN_CAPABILITY_MATRIX} command surface(s) tracked`,
180
+ details: `${COMMAND_CONTRACTS.length + ADDITIONAL_ROOT_SURFACES.length} command surface(s) tracked`,
169
181
  });
170
182
  export const buildDoctorResult = async (options = {}) => {
171
183
  const cwd = options.cwd ?? process.cwd();
@@ -181,17 +193,26 @@ export const buildDoctorResult = async (options = {}) => {
181
193
  : `Install Node.js ${MINIMUM_NODE_VERSION} or newer.`,
182
194
  });
183
195
  checks.push(checkCommand('Git', 'git', ['--version'], 'Install Git and make sure it is on PATH.', commandRunner));
184
- checks.push(checkPnpm(commandRunner));
196
+ const pnpm = checkPnpm(commandRunner);
197
+ checks.push({
198
+ ...pnpm,
199
+ required: false,
200
+ details: [pnpm.details, 'optional for CLI use; required for repository development']
201
+ .filter(Boolean)
202
+ .join('; '),
203
+ });
185
204
  const config = await getConfigCheck(cwd);
186
205
  checks.push(config.check);
187
- checks.push(checkAIProvider(config.resolvedConfig, config.checkedInvalidConfig ?? false));
206
+ checks.push(await checkAIProvider(config.resolvedConfig, config.checkedInvalidConfig ?? false, cwd));
188
207
  checks.push(checkCommandMatrix());
189
208
  const nextSteps = checks
190
- .filter((check) => check.status !== 'ok' && check.fix)
209
+ .filter((check) => check.required !== false && check.status !== 'ok' && check.fix)
191
210
  .map((check) => check.fix);
192
211
  return {
193
212
  schemaVersion: 1,
194
- status: checks.some((check) => check.status !== 'ok') ? 'warning' : 'ok',
213
+ status: checks.some((check) => check.required !== false && check.status !== 'ok')
214
+ ? 'warning'
215
+ : 'ok',
195
216
  checks,
196
217
  nextSteps,
197
218
  operationPlan: createOperationPlan({
@@ -203,7 +224,10 @@ export const buildDoctorResult = async (options = {}) => {
203
224
  'command contract registry',
204
225
  ],
205
226
  executes: ['git --version', 'pnpm --version', 'corepack pnpm --version'],
206
- notes: ['Doctor runs fixed local diagnostics and does not write files.'],
227
+ notes: [
228
+ 'Doctor runs fixed local diagnostics and does not write files.',
229
+ 'Each diagnostic has a five-second timeout; Corepack network access, download prompts, and auto-pinning are disabled.',
230
+ ],
207
231
  }),
208
232
  };
209
233
  };