@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.
- package/dist/args.d.ts +1 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +20 -15
- package/dist/args.js.map +1 -1
- package/dist/command-contracts.d.ts +7 -0
- package/dist/command-contracts.d.ts.map +1 -1
- package/dist/command-contracts.js +57 -36
- package/dist/command-contracts.js.map +1 -1
- package/dist/handler-utils.d.ts +17 -2
- package/dist/handler-utils.d.ts.map +1 -1
- package/dist/handler-utils.js +54 -2
- package/dist/handler-utils.js.map +1 -1
- package/dist/handlers/ai-handlers.d.ts.map +1 -1
- package/dist/handlers/ai-handlers.js +30 -21
- package/dist/handlers/ai-handlers.js.map +1 -1
- package/dist/handlers/auto-handlers.d.ts.map +1 -1
- package/dist/handlers/auto-handlers.js +3 -7
- package/dist/handlers/auto-handlers.js.map +1 -1
- package/dist/handlers/config-handlers.d.ts.map +1 -1
- package/dist/handlers/config-handlers.js +37 -21
- package/dist/handlers/config-handlers.js.map +1 -1
- package/dist/handlers/data-handlers.d.ts.map +1 -1
- package/dist/handlers/data-handlers.js +8 -10
- package/dist/handlers/data-handlers.js.map +1 -1
- package/dist/handlers/dev-handlers.d.ts.map +1 -1
- package/dist/handlers/dev-handlers.js +144 -182
- package/dist/handlers/dev-handlers.js.map +1 -1
- package/dist/handlers/doc-handlers.d.ts.map +1 -1
- package/dist/handlers/doc-handlers.js +14 -9
- package/dist/handlers/doc-handlers.js.map +1 -1
- package/dist/handlers/plugin-handlers.d.ts.map +1 -1
- package/dist/handlers/plugin-handlers.js +21 -26
- package/dist/handlers/plugin-handlers.js.map +1 -1
- package/dist/help-text.d.ts.map +1 -1
- package/dist/help-text.js +3 -2
- package/dist/help-text.js.map +1 -1
- package/dist/input-validation.d.ts +6 -0
- package/dist/input-validation.d.ts.map +1 -0
- package/dist/input-validation.js +68 -0
- package/dist/input-validation.js.map +1 -0
- package/dist/option-registry.d.ts +16 -0
- package/dist/option-registry.d.ts.map +1 -0
- package/dist/option-registry.js +84 -0
- package/dist/option-registry.js.map +1 -0
- package/dist/option-validation.d.ts.map +1 -1
- package/dist/option-validation.js +3 -53
- package/dist/option-validation.js.map +1 -1
- package/dist/root-doctor.d.ts +1 -0
- package/dist/root-doctor.d.ts.map +1 -1
- package/dist/root-doctor.js +37 -13
- package/dist/root-doctor.js.map +1 -1
- package/dist/root-help.d.ts +1 -2
- package/dist/root-help.d.ts.map +1 -1
- package/dist/root-help.js +23 -18
- package/dist/root-help.js.map +1 -1
- package/dist/root-init.d.ts +2 -1
- package/dist/root-init.d.ts.map +1 -1
- package/dist/root-init.js +34 -19
- package/dist/root-init.js.map +1 -1
- package/dist/run.d.ts +0 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +51 -27
- package/dist/run.js.map +1 -1
- package/dist/system-command.d.ts +2 -0
- package/dist/system-command.d.ts.map +1 -1
- package/dist/system-command.js +4 -1
- package/dist/system-command.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.js +1 -1
- 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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
|
92
|
-
|
|
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
|
-
`
|
|
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
|
|
140
|
-
? ['Errors:', ...validation.errors.map((error) => `- ${error}`)].join('\n')
|
|
141
|
-
: 'Errors: none',
|
|
138
|
+
formatLabeledList('Errors', validation.errors),
|
|
142
139
|
'',
|
|
143
|
-
validation.warnings
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,QAAQ,EACR,oBAAoB,EACpB,aAAa,EACb,MAAM,EACN,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,qBAAqB,GAAG,KAAK,EAAE,QAAgB,EAAqB,EAAE;IAC1E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEjD,OAAO;YACL,qBAAqB;YACrB,yBAAyB,oBAAoB,CAAC,OAAO,CAAC,EAAE;YACxD,yBAAyB,OAAO,CAAC,MAAM,EAAE;SAC1C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAQ,KAA2B,CAAC,IAAI,KAAK,QAAQ;YACnD,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAC1B,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;IAClC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAwB,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAC5E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,EAAE;QACF,cAAc,MAAM,CAAC,SAAS,EAAE;QAChC,EAAE;QACF,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAChF,CAAC,CAAC,uBAAuB;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9E,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpD,
|
|
1
|
+
{"version":3,"file":"plugin-handlers.js","sourceRoot":"","sources":["../../src/handlers/plugin-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/help-text.d.ts.map
CHANGED
|
@@ -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,
|
|
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>
|
|
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
|
|
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
|
package/dist/help-text.js.map
CHANGED
|
@@ -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
|
|
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;
|
|
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
|
-
|
|
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]
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAA8B,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"option-validation.js","sourceRoot":"","sources":["../src/option-validation.ts"],"names":[],"mappings":"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"}
|
package/dist/root-doctor.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root-doctor.d.ts","sourceRoot":"","sources":["../src/root-doctor.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/root-doctor.js
CHANGED
|
@@ -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
|
|
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 +
|
|
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
|
-
|
|
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.
|
|
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: [
|
|
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
|
};
|