@zaowu-labs/cli 1.0.1 → 1.0.5

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 (62) hide show
  1. package/LICENSE +201 -0
  2. package/dist/args.d.ts.map +1 -1
  3. package/dist/args.js +10 -13
  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 +34 -1
  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 +28 -20
  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 +12 -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 +6 -9
  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 +12 -8
  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/index.js +0 -0
  35. package/dist/option-registry.d.ts +16 -0
  36. package/dist/option-registry.d.ts.map +1 -0
  37. package/dist/option-registry.js +84 -0
  38. package/dist/option-registry.js.map +1 -0
  39. package/dist/option-validation.d.ts.map +1 -1
  40. package/dist/option-validation.js +1 -48
  41. package/dist/option-validation.js.map +1 -1
  42. package/dist/root-doctor.d.ts.map +1 -1
  43. package/dist/root-doctor.js +2 -3
  44. package/dist/root-doctor.js.map +1 -1
  45. package/dist/root-help.d.ts +1 -2
  46. package/dist/root-help.d.ts.map +1 -1
  47. package/dist/root-help.js +7 -13
  48. package/dist/root-help.js.map +1 -1
  49. package/dist/root-init.d.ts +2 -1
  50. package/dist/root-init.d.ts.map +1 -1
  51. package/dist/root-init.js +7 -8
  52. package/dist/root-init.js.map +1 -1
  53. package/dist/run.d.ts +0 -1
  54. package/dist/run.d.ts.map +1 -1
  55. package/dist/run.js +42 -24
  56. package/dist/run.js.map +1 -1
  57. package/dist/system-command.d.ts +2 -0
  58. package/dist/system-command.d.ts.map +1 -1
  59. package/dist/system-command.js +2 -1
  60. package/dist/system-command.js.map +1 -1
  61. package/dist/version.js +1 -1
  62. package/package.json +20 -20
@@ -1,153 +1,153 @@
1
- import { askAI, resolveAIModel, resolveAIProviderNetworkTarget, validateAIProviderConfig, } from '@zaowu-labs/ai';
2
- import { loadResolvedConfig } from '@zaowu-labs/config';
3
- import { getDevStatus, isDevFindingCategory, isDevFindingPriority, isDevFindingSeverity, previewDevCommit, reviewDevChanges, syncDevRepo, } from '@zaowu-labs/dev';
4
- import { assertOperationPlanFingerprint, createOperationPlan, formatCounts, formatFinding, formatList, formatOperationPlan, getValue, hasFlag, result, withOperationPlan, ZaoWuError, } from '../handler-utils.js';
5
- const getAiReviewOrCommit = async (context, prompt) => {
6
- let providerId = getValue(context.parsed, '--provider');
7
- if (!providerId) {
8
- try {
9
- const config = await loadResolvedConfig(context.cwd);
10
- providerId = config.config.ai.provider ?? undefined;
11
- }
12
- catch {
13
- // ignore — fall back to default provider
14
- }
15
- }
16
- const requestedModel = getValue(context.parsed, '--model');
17
- const providerValidation = validateAIProviderConfig(providerId);
18
- const provider = providerValidation.provider;
19
- const resolvedModel = resolveAIModel(provider, { model: requestedModel });
20
- if (provider.network && !context.yes) {
21
- throw new ZaoWuError({
22
- code: 'AI_NETWORK_CONFIRMATION_REQUIRED',
23
- message: 'Network AI request requires confirmation.',
24
- why: `The AI-assisted dev command sends diff context to the network provider \`${provider.id}\`.`,
25
- fix: 'Run the command with the `--yes` flag to confirm sending the diff context.',
26
- });
27
- }
28
- const response = await askAI({
29
- prompt,
30
- provider: providerId,
31
- model: requestedModel,
32
- allowNetwork: context.yes,
33
- });
34
- return {
35
- output: response.output,
36
- providerId: provider.id,
37
- modelName: resolvedModel,
38
- };
39
- };
40
- const getGitDiffText = (commandRunner, cwd, gitArgs) => {
41
- let diffText = '';
1
+ import { askAI } from '@zaowu-labs/ai';
2
+ import { applyDevAiCommitSuggestion, buildDevAiCommitPrompt, buildDevAiReviewPrompt, getDevStatus, parseDevAiReviewFindings, previewDevCommit, reviewDevChanges, syncDevRepo, } from '@zaowu-labs/dev';
3
+ import { assertOperationPlanFingerprint, createContentOperationSubjects, createOperationPlan, formatConfirmCommand, formatCounts, formatFinding, formatList, formatOperationPlan, hasFlag, resolveAiProvider, result, withOperationPlan, ZaoWuError, } from '../handler-utils.js';
4
+ const getGitDiffText = (context, gitArgs) => {
42
5
  try {
43
- diffText = commandRunner('git', gitArgs, { cwd });
6
+ return context.commandRunner('git', gitArgs, { cwd: context.cwd });
44
7
  }
45
8
  catch {
46
9
  // ignore — diff may be empty
10
+ return '';
47
11
  }
48
- if (diffText.length > 100000) {
49
- diffText = diffText.slice(0, 100000) + '\n... [truncated] ...';
50
- }
51
- return diffText;
52
12
  };
53
- const buildAiOperationPlan = (providerId, reviewUsesWorktree, isReview) => {
54
- const provider = validateAIProviderConfig(providerId).provider;
55
- const networkTarget = provider.network ? resolveAIProviderNetworkTarget(providerId) : undefined;
56
- const actionName = isReview ? 'review' : 'suggestion';
13
+ /**
14
+ * Operation plan for an AI-assisted dev command. The exact prompt (instructions
15
+ * plus the truncated diff) is folded into the plan subjects, so the preview
16
+ * fingerprint only authorizes a confirmed run that sends identical content —
17
+ * a diff staged between preview and confirm invalidates the plan.
18
+ */
19
+ const buildAiOperationPlan = (ai, prompt, context, options) => {
20
+ const actionName = options.isReview ? 'review' : 'suggestion';
57
21
  return createOperationPlan({
58
- risk: provider.network ? 'medium' : 'low',
59
- reads: isReview
60
- ? reviewUsesWorktree
22
+ risk: ai.provider.network ? 'medium' : 'low',
23
+ confirmationRequired: ai.provider.network && !context.yes,
24
+ subjects: [
25
+ `ai:${ai.providerId}`,
26
+ `model:${ai.resolvedModel}`,
27
+ ...createContentOperationSubjects(prompt),
28
+ ],
29
+ reads: options.isReview
30
+ ? options.reviewUsesWorktree
61
31
  ? ['working-tree git diff', 'untracked git file list']
62
32
  : ['staged git diff']
63
33
  : ['staged git diff', 'staged git diff hunks'],
64
- executes: isReview
65
- ? reviewUsesWorktree
34
+ executes: options.isReview
35
+ ? options.reviewUsesWorktree
66
36
  ? ['git diff', 'git ls-files --others --exclude-standard']
67
37
  : ['git diff --cached']
68
38
  : ['git diff --cached'],
69
- network: networkTarget ? [networkTarget] : [],
70
- secrets: provider.requiredEnv,
71
- notes: [`AI ${actionName} was generated using the ${providerId} provider.`],
39
+ network: ai.networkTarget ? [ai.networkTarget] : [],
40
+ secrets: ai.provider.requiredEnv,
41
+ notes: [
42
+ ai.provider.network
43
+ ? `AI ${actionName} sends the diff context to the ${ai.providerId} provider and requires --yes.`
44
+ : `AI ${actionName} was generated using the ${ai.providerId} provider.`,
45
+ ],
72
46
  });
73
47
  };
48
+ const buildAiConfirmCommand = (commandParts, ai, operationPlan) => formatConfirmCommand([
49
+ ...commandParts,
50
+ '--ai',
51
+ '--provider',
52
+ ai.providerId,
53
+ ...(ai.requestedModel ? ['--model', ai.requestedModel] : []),
54
+ '--yes',
55
+ '--plan-fingerprint',
56
+ operationPlan.fingerprint,
57
+ ]);
58
+ const formatAiPreviewHuman = (title, ai, operationPlan, confirmCommand) => [
59
+ title,
60
+ '',
61
+ 'Status: preview',
62
+ `Provider: ${ai.providerId} (${ai.provider.name})`,
63
+ `Model: ${ai.resolvedModel}`,
64
+ `Endpoint: ${ai.networkTarget ?? 'local'}`,
65
+ '',
66
+ formatOperationPlan(operationPlan),
67
+ '',
68
+ 'No provider request was sent.',
69
+ '',
70
+ 'To send exactly this AI request, run:',
71
+ ` ${confirmCommand}`,
72
+ ].join('\n');
74
73
  export const handleDevCommit = async (_args, context) => {
75
74
  const preview = previewDevCommit(context.commandRunner, { cwd: context.cwd });
75
+ let payload = preview;
76
76
  let operationPlan = createOperationPlan({
77
77
  risk: 'low',
78
78
  reads: ['staged git diff', 'staged git diff hunks'],
79
79
  executes: ['git diff --cached'],
80
80
  notes: ['No Git state is modified.'],
81
81
  });
82
- if (context.parsed.flags.has('--ai')) {
83
- const diffText = getGitDiffText(context.commandRunner, context.cwd, ['diff', '--cached']);
84
- const prompt = [
85
- 'Generate a Conventional Commit message for the following staged changes.',
86
- 'Follow the Conventional Commits specification (e.g. feat(scope): message).',
87
- 'Respond ONLY with the commit message, including a title and an optional body/footer.',
88
- '',
89
- 'Changes:',
90
- diffText,
91
- ].join('\n');
92
- const aiResponse = await getAiReviewOrCommit(context, prompt);
93
- const lines = aiResponse.output
94
- .split(/\r?\n/)
95
- .map((l) => l.trim())
96
- .filter(Boolean);
97
- const title = lines[0] || preview.suggestion.title;
98
- const body = lines.slice(1);
99
- const match = /^([a-z0-9]+)(?:\(([^)]+)\))?:\s*(.+)$/i.exec(title);
100
- const type = match?.[1] || preview.suggestion.type;
101
- const scope = match?.[2] || preview.suggestion.scope;
102
- const subject = match?.[3] || preview.suggestion.subject;
103
- preview.suggestion = {
104
- type,
105
- scope,
106
- subject,
107
- title,
108
- body: body.length > 0 ? body : preview.suggestion.body,
109
- };
110
- preview.message = title;
111
- operationPlan = buildAiOperationPlan(aiResponse.providerId, false, false);
82
+ if (hasFlag(context.parsed, '--ai')) {
83
+ const diffText = getGitDiffText(context, ['diff', '--cached']);
84
+ const prompt = buildDevAiCommitPrompt(diffText);
85
+ const ai = await resolveAiProvider(context);
86
+ operationPlan = buildAiOperationPlan(ai, prompt, context, {
87
+ isReview: false,
88
+ reviewUsesWorktree: false,
89
+ });
90
+ if (ai.provider.network && !context.yes) {
91
+ const confirmCommand = buildAiConfirmCommand(['zw', 'dev', 'commit'], ai, operationPlan);
92
+ const human = formatAiPreviewHuman('ZaoWu Dev Commit', ai, operationPlan, confirmCommand);
93
+ return result(context, withOperationPlan({ ...preview, status: 'preview' }, operationPlan), human);
94
+ }
95
+ // The fingerprint must be verified before any provider request is sent.
96
+ assertOperationPlanFingerprint(context, operationPlan);
97
+ const response = await askAI({
98
+ prompt,
99
+ provider: ai.providerId,
100
+ model: ai.requestedModel,
101
+ allowNetwork: context.yes,
102
+ });
103
+ payload = applyDevAiCommitSuggestion(preview, response.output);
104
+ }
105
+ else {
106
+ assertOperationPlanFingerprint(context, operationPlan);
112
107
  }
113
- assertOperationPlanFingerprint(context, operationPlan);
114
108
  const human = [
115
109
  'ZaoWu Dev Commit',
116
110
  '',
117
111
  'No Git state was modified.',
118
112
  '',
119
- `Files: ${preview.summary.files.length}`,
120
- `Changes: +${preview.summary.additions}/-${preview.summary.deletions}`,
113
+ `Files: ${payload.summary.files.length}`,
114
+ `Changes: +${payload.summary.additions}/-${payload.summary.deletions}`,
121
115
  '',
122
116
  'Categories:',
123
- formatCounts(preview.summary.categories),
117
+ formatCounts(payload.summary.categories),
124
118
  '',
125
119
  'Suggested commit:',
126
- preview.message,
120
+ payload.message,
127
121
  '',
128
122
  'Suggested body:',
129
- formatList(preview.suggestion.body),
123
+ formatList(payload.suggestion.body),
130
124
  '',
131
125
  'Findings:',
132
- ...(preview.findings.length > 0
133
- ? preview.findings.map((finding) => formatFinding(finding))
126
+ ...(payload.findings.length > 0
127
+ ? payload.findings.map((finding) => formatFinding(finding))
134
128
  : ['- none']),
135
129
  '',
136
130
  'Recommended checks:',
137
- formatList(preview.recommendedChecks),
131
+ formatList(payload.recommendedChecks),
138
132
  '',
139
133
  formatOperationPlan(operationPlan),
140
134
  ].join('\n');
141
- return result(context, withOperationPlan(preview, operationPlan), human);
135
+ return result(context, withOperationPlan(payload, operationPlan), human);
136
+ };
137
+ const resolveReviewMode = (context) => {
138
+ if (hasFlag(context.parsed, '--staged')) {
139
+ return { mode: 'staged', modeFlags: ['--staged'] };
140
+ }
141
+ if (hasFlag(context.parsed, '--worktree')) {
142
+ return { mode: 'worktree', modeFlags: ['--worktree'] };
143
+ }
144
+ return { mode: 'auto', modeFlags: [] };
142
145
  };
143
146
  export const handleDevReview = async (_args, context) => {
144
- const mode = context.parsed.flags.has('--staged')
145
- ? 'staged'
146
- : context.parsed.flags.has('--worktree')
147
- ? 'worktree'
148
- : 'auto';
147
+ const { mode, modeFlags } = resolveReviewMode(context);
149
148
  const review = reviewDevChanges(context.commandRunner, { cwd: context.cwd, mode });
150
149
  const reviewUsesWorktree = review.source === 'working-tree';
150
+ let payload = review;
151
151
  let operationPlan = createOperationPlan({
152
152
  risk: 'low',
153
153
  reads: reviewUsesWorktree
@@ -158,100 +158,60 @@ export const handleDevReview = async (_args, context) => {
158
158
  : ['git diff --cached'],
159
159
  notes: ['No Git state is modified.'],
160
160
  });
161
- if (context.parsed.flags.has('--ai')) {
161
+ if (hasFlag(context.parsed, '--ai')) {
162
162
  const gitArgs = reviewUsesWorktree ? ['diff'] : ['diff', '--cached'];
163
- const diffText = getGitDiffText(context.commandRunner, context.cwd, gitArgs);
164
- const prompt = [
165
- 'Perform a code review of the following Git changes.',
166
- 'Find potential security vulnerabilities, performance issues, architectural flaws, bugs, or test gaps.',
167
- 'Format your review as a JSON array of finding objects, like this:',
168
- '[',
169
- ' {',
170
- ' "severity": "info" | "warning",',
171
- ' "priority": "low" | "medium" | "high",',
172
- ' "category": "security" | "performance" | "quality" | "test" | "filesystem" | "network" | "git",',
173
- ' "title": "Short title",',
174
- ' "detail": "Detailed explanation of the issue and fix.",',
175
- ' "filePath": "relative/path/to/file",',
176
- ' "line": 123,',
177
- ' "hunkHeader": "@@ ... @@"',
178
- ' }',
179
- ']',
180
- 'Respond ONLY with the JSON array. Do not wrap in markdown code blocks.',
181
- '',
182
- 'Changes:',
183
- diffText,
184
- ].join('\n');
185
- const aiResponse = await getAiReviewOrCommit(context, prompt);
186
- let cleanOutput = aiResponse.output.trim();
187
- if (cleanOutput.startsWith('```')) {
188
- cleanOutput = cleanOutput.replace(/^```[a-z]*\r?\n/, '').replace(/\r?\n```$/, '');
189
- }
190
- let aiFindings = [];
191
- let isParsedArray = false;
192
- try {
193
- const parsed = JSON.parse(cleanOutput);
194
- if (Array.isArray(parsed)) {
195
- aiFindings = parsed;
196
- isParsedArray = true;
197
- }
198
- }
199
- catch {
200
- // Fall back to wrapping the raw AI output as a plain-text summary finding.
201
- }
202
- if (!isParsedArray) {
203
- aiFindings = [
204
- {
205
- severity: 'info',
206
- priority: 'medium',
207
- category: 'quality',
208
- title: 'AI Code Review Summary',
209
- detail: aiResponse.output.trim(),
210
- },
211
- ];
212
- }
213
- for (const item of aiFindings) {
214
- const finding = item && typeof item === 'object' ? item : {};
215
- review.findings.push({
216
- severity: isDevFindingSeverity(finding.severity) ? finding.severity : 'info',
217
- priority: isDevFindingPriority(finding.priority) ? finding.priority : 'medium',
218
- category: isDevFindingCategory(finding.category) ? finding.category : 'quality',
219
- title: typeof finding.title === 'string' ? finding.title : 'AI Review',
220
- detail: typeof finding.detail === 'string' ? finding.detail : '',
221
- filePath: typeof finding.filePath === 'string' ? finding.filePath : undefined,
222
- line: Number.isInteger(finding.line) && Number(finding.line) > 0
223
- ? Number(finding.line)
224
- : undefined,
225
- hunkHeader: typeof finding.hunkHeader === 'string' ? finding.hunkHeader : undefined,
226
- });
163
+ const diffText = getGitDiffText(context, gitArgs);
164
+ const prompt = buildDevAiReviewPrompt(diffText);
165
+ const ai = await resolveAiProvider(context);
166
+ operationPlan = buildAiOperationPlan(ai, prompt, context, {
167
+ isReview: true,
168
+ reviewUsesWorktree,
169
+ });
170
+ if (ai.provider.network && !context.yes) {
171
+ const confirmCommand = buildAiConfirmCommand(['zw', 'dev', 'review', ...modeFlags], ai, operationPlan);
172
+ const human = formatAiPreviewHuman('ZaoWu Dev Review', ai, operationPlan, confirmCommand);
173
+ return result(context, withOperationPlan({ ...review, status: 'preview' }, operationPlan), human);
227
174
  }
228
- operationPlan = buildAiOperationPlan(aiResponse.providerId, reviewUsesWorktree, true);
175
+ // The fingerprint must be verified before any provider request is sent.
176
+ assertOperationPlanFingerprint(context, operationPlan);
177
+ const response = await askAI({
178
+ prompt,
179
+ provider: ai.providerId,
180
+ model: ai.requestedModel,
181
+ allowNetwork: context.yes,
182
+ });
183
+ payload = {
184
+ ...review,
185
+ findings: [...review.findings, ...parseDevAiReviewFindings(response.output)],
186
+ };
187
+ }
188
+ else {
189
+ assertOperationPlanFingerprint(context, operationPlan);
229
190
  }
230
- assertOperationPlanFingerprint(context, operationPlan);
231
191
  const human = [
232
192
  'ZaoWu Dev Review',
233
193
  '',
234
- `Source: ${review.source}`,
235
- `Files: ${review.summary.files.length}`,
236
- `Changes: +${review.summary.additions}/-${review.summary.deletions}`,
194
+ `Source: ${payload.source}`,
195
+ `Files: ${payload.summary.files.length}`,
196
+ `Changes: +${payload.summary.additions}/-${payload.summary.deletions}`,
237
197
  '',
238
198
  'Categories:',
239
- formatCounts(review.summary.categories),
199
+ formatCounts(payload.summary.categories),
240
200
  '',
241
201
  'Findings:',
242
- ...review.findings.map((finding) => formatFinding(finding)),
202
+ ...payload.findings.map((finding) => formatFinding(finding)),
243
203
  '',
244
204
  'Diff hunks:',
245
- ...(review.diffHunks.length > 0
246
- ? review.diffHunks.map((hunk) => `- ${hunk.filePath} ${hunk.header}: +${hunk.addedLines}/-${hunk.removedLines}`)
205
+ ...(payload.diffHunks.length > 0
206
+ ? payload.diffHunks.map((hunk) => `- ${hunk.filePath} ${hunk.header}: +${hunk.addedLines}/-${hunk.removedLines}`)
247
207
  : ['- none']),
248
208
  '',
249
209
  'Recommended checks:',
250
- formatList(review.recommendedChecks),
210
+ formatList(payload.recommendedChecks),
251
211
  '',
252
212
  formatOperationPlan(operationPlan),
253
213
  ].join('\n');
254
- return result(context, withOperationPlan(review, operationPlan), human);
214
+ return result(context, withOperationPlan(payload, operationPlan), human);
255
215
  };
256
216
  export const handleDevStatus = async (_args, context) => {
257
217
  const status = getDevStatus(context.commandRunner, { cwd: context.cwd });
@@ -297,13 +257,15 @@ export const handleDevSync = async (_args, context) => {
297
257
  : preview;
298
258
  const operationPlan = syncResult.operationPlan ?? preview.operationPlan;
299
259
  const requiresDiscardLocal = operationPlan.notes.some((note) => note.includes('Confirmed sync requires both --yes and --discard-local'));
300
- const confirmCommand = [
301
- 'zw dev sync',
260
+ const confirmCommand = formatConfirmCommand([
261
+ 'zw',
262
+ 'dev',
263
+ 'sync',
302
264
  '--yes',
303
265
  ...(requiresDiscardLocal ? ['--discard-local'] : []),
304
266
  '--plan-fingerprint',
305
267
  operationPlan.fingerprint,
306
- ].join(' ');
268
+ ]);
307
269
  const human = [
308
270
  'ZaoWu Dev Sync',
309
271
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"dev-handlers.js","sourceRoot":"","sources":["../../src/handlers/dev-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev-handlers.js","sourceRoot":"","sources":["../../src/handlers/dev-handlers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doc-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/doc-handlers.ts"],"names":[],"mappings":"AAOA,OAAO,EAYL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,gBAAgB,EAAE,mBAe9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAkB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAgB9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBA0B7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBA8D9B,CAAC"}
1
+ {"version":3,"file":"doc-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/doc-handlers.ts"],"names":[],"mappings":"AAOA,OAAO,EAYL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,gBAAgB,EAAE,mBAe9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAkB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAgB9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBA0B7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAmE9B,CAAC"}
@@ -75,10 +75,18 @@ export const handleDocConvert = async (args, context) => {
75
75
  const target = requireTarget(args, 'zw doc convert');
76
76
  const outputPath = getValue(context.parsed, '--output');
77
77
  const format = getValue(context.parsed, '--format');
78
- const preview = await convertDocument(target, {
78
+ // One options object for both the preview and the confirmed call: the
79
+ // fingerprint the user confirms is computed from the preview, so the two
80
+ // calls must be structurally unable to drift apart.
81
+ const convertOptions = {
79
82
  outputPath,
80
- format: format === 'text' ? 'text' : format === 'markdown' ? 'markdown' : undefined,
81
- });
83
+ format: format === 'text'
84
+ ? 'text'
85
+ : format === 'markdown'
86
+ ? 'markdown'
87
+ : undefined,
88
+ };
89
+ const preview = await convertDocument(target, convertOptions);
82
90
  const operationPlan = createOperationPlan({
83
91
  risk: preview.outputPath ? 'medium' : 'low',
84
92
  confirmationRequired: Boolean(preview.outputPath && !context.yes),
@@ -93,11 +101,7 @@ export const handleDocConvert = async (args, context) => {
93
101
  });
94
102
  assertOperationPlanFingerprint(context, operationPlan);
95
103
  const converted = context.yes && preview.outputPath
96
- ? await convertDocument(target, {
97
- outputPath,
98
- format: format === 'text' ? 'text' : format === 'markdown' ? 'markdown' : undefined,
99
- yes: true,
100
- })
104
+ ? await convertDocument(target, { ...convertOptions, yes: true })
101
105
  : preview;
102
106
  const confirmCommand = preview.outputPath && !context.yes
103
107
  ? formatConfirmCommand([
@@ -1 +1 @@
1
- {"version":3,"file":"doc-handlers.js","sourceRoot":"","sources":["../../src/handlers/doc-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-handlers.js","sourceRoot":"","sources":["../../src/handlers/doc-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,UAAU,GAEX,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,gBAAgB,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,EAAE;QACF,SAAS,OAAO,CAAC,QAAQ,EAAE;QAC3B,UAAU,OAAO,CAAC,KAAK,EAAE;QACzB,UAAU,OAAO,CAAC,SAAS,EAAE;QAC7B,UAAU,OAAO,CAAC,SAAS,EAAE;QAC7B,EAAE;QACF,OAAO,CAAC,OAAO;KAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,EAAE;QACF,SAAS,SAAS,CAAC,QAAQ,EAAE;QAC7B,aAAa,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;QACxC,UAAU,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;QAClC,gBAAgB,SAAS,CAAC,cAAc,EAAE;QAC1C,EAAE;QACF,YAAY,CAAC;YACX,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;SACvB,CAAC;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,EAAE;QACF,SAAS,OAAO,CAAC,QAAQ,EAAE;QAC3B,EAAE;QACF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CACjB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CACzE;YACH,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC1E,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC;YACnB,IAAI,EAAE,kCAAkC;YACxC,OAAO,EAAE,6BAA6B;YACtC,GAAG,EAAE,4CAA4C;YACjD,GAAG,EAAE,wCAAwC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG;QACZ,kBAAkB;QAClB,EAAE;QACF,SAAS,QAAQ,CAAC,QAAQ,EAAE;QAC5B,YAAY,QAAQ,CAAC,OAAO,EAAE;QAC9B,YAAY,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;QACrC,EAAE;QACF,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;KACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpD,sEAAsE;IACtE,yEAAyE;IACzE,oDAAoD;IACpD,MAAM,cAAc,GAAG;QACrB,UAAU;QACV,MAAM,EACJ,MAAM,KAAK,MAAM;YACf,CAAC,CAAE,MAAgB;YACnB,CAAC,CAAC,MAAM,KAAK,UAAU;gBACrB,CAAC,CAAE,UAAoB;gBACvB,CAAC,CAAC,SAAS;KAClB,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;QAC3C,oBAAoB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QACjE,QAAQ,EAAE;YACR,OAAO,OAAO,CAAC,SAAS,EAAE;YAC1B,UAAU,OAAO,CAAC,MAAM,EAAE;YAC1B,GAAG,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC;SACnD;QACD,KAAK,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;QACtD,KAAK,EAAE,CAAC,iEAAiE,CAAC;KAC3E,CAAC,CAAC;IACH,8BAA8B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEvD,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,UAAU;QAC/B,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACjE,CAAC,CAAC,OAAO,CAAC;IACd,MAAM,cAAc,GAClB,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG;QAChC,CAAC,CAAC,oBAAoB,CAAC;YACnB,IAAI;YACJ,KAAK;YACL,SAAS;YACT,MAAM;YACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,UAAU;YACV,OAAO,CAAC,UAAU;YAClB,OAAO;YACP,oBAAoB;YACpB,aAAa,CAAC,WAAW;SAC1B,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,EAAE;QACF,WAAW,SAAS,CAAC,MAAM,EAAE;QAC7B,UAAU,SAAS,CAAC,SAAS,EAAE;QAC/B,WAAW,SAAS,CAAC,UAAU,IAAI,QAAQ,EAAE;QAC7C,eAAe,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACnD,EAAE;QACF,mBAAmB,CAAC,aAAa,CAAC;QAClC,GAAG,CAAC,cAAc;YAChB,CAAC,CAAC,CAAC,EAAE,EAAE,8CAA8C,EAAE,KAAK,cAAc,EAAE,CAAC;YAC7E,CAAC,CAAC,EAAE,CAAC;QACP,EAAE;QACF,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO;KACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7E,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/plugin-handlers.ts"],"names":[],"mappings":"AAGA,OAAO,EAWL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAkB7B,eAAO,MAAM,gBAAgB,EAAE,mBAa9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,mBAyDjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,mBAyChC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,mBAoBlC,CAAC"}
1
+ {"version":3,"file":"plugin-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/plugin-handlers.ts"],"names":[],"mappings":"AAGA,OAAO,EAYL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAkB7B,eAAO,MAAM,gBAAgB,EAAE,mBAa9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,mBAsDjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,mBA2ChC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,mBAgBlC,CAAC"}
@@ -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
  };