@zaowu-labs/cli 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +16 -0
  2. package/dist/args.d.ts +11 -0
  3. package/dist/args.d.ts.map +1 -0
  4. package/dist/args.js +65 -0
  5. package/dist/args.js.map +1 -0
  6. package/dist/command-contracts.d.ts +11 -0
  7. package/dist/command-contracts.d.ts.map +1 -0
  8. package/dist/command-contracts.js +74 -0
  9. package/dist/command-contracts.js.map +1 -0
  10. package/dist/domain-handlers.d.ts +4 -0
  11. package/dist/domain-handlers.d.ts.map +1 -0
  12. package/dist/domain-handlers.js +65 -0
  13. package/dist/domain-handlers.js.map +1 -0
  14. package/dist/domains.d.ts +4 -0
  15. package/dist/domains.d.ts.map +1 -0
  16. package/dist/domains.js +22 -0
  17. package/dist/domains.js.map +1 -0
  18. package/dist/handler-utils.d.ts +59 -0
  19. package/dist/handler-utils.d.ts.map +1 -0
  20. package/dist/handler-utils.js +113 -0
  21. package/dist/handler-utils.js.map +1 -0
  22. package/dist/handlers/ai-handlers.d.ts +4 -0
  23. package/dist/handlers/ai-handlers.d.ts.map +1 -0
  24. package/dist/handlers/ai-handlers.js +159 -0
  25. package/dist/handlers/ai-handlers.js.map +1 -0
  26. package/dist/handlers/auto-handlers.d.ts +5 -0
  27. package/dist/handlers/auto-handlers.d.ts.map +1 -0
  28. package/dist/handlers/auto-handlers.js +132 -0
  29. package/dist/handlers/auto-handlers.js.map +1 -0
  30. package/dist/handlers/config-handlers.d.ts +8 -0
  31. package/dist/handlers/config-handlers.d.ts.map +1 -0
  32. package/dist/handlers/config-handlers.js +140 -0
  33. package/dist/handlers/config-handlers.js.map +1 -0
  34. package/dist/handlers/data-handlers.d.ts +8 -0
  35. package/dist/handlers/data-handlers.d.ts.map +1 -0
  36. package/dist/handlers/data-handlers.js +135 -0
  37. package/dist/handlers/data-handlers.js.map +1 -0
  38. package/dist/handlers/dev-handlers.d.ts +6 -0
  39. package/dist/handlers/dev-handlers.d.ts.map +1 -0
  40. package/dist/handlers/dev-handlers.js +322 -0
  41. package/dist/handlers/dev-handlers.js.map +1 -0
  42. package/dist/handlers/doc-handlers.d.ts +7 -0
  43. package/dist/handlers/doc-handlers.d.ts.map +1 -0
  44. package/dist/handlers/doc-handlers.js +133 -0
  45. package/dist/handlers/doc-handlers.js.map +1 -0
  46. package/dist/handlers/plugin-handlers.d.ts +6 -0
  47. package/dist/handlers/plugin-handlers.d.ts.map +1 -0
  48. package/dist/handlers/plugin-handlers.js +149 -0
  49. package/dist/handlers/plugin-handlers.js.map +1 -0
  50. package/dist/handlers/teach-handlers.d.ts +4 -0
  51. package/dist/handlers/teach-handlers.d.ts.map +1 -0
  52. package/dist/handlers/teach-handlers.js +30 -0
  53. package/dist/handlers/teach-handlers.js.map +1 -0
  54. package/dist/handlers/web-handlers.d.ts +4 -0
  55. package/dist/handlers/web-handlers.d.ts.map +1 -0
  56. package/dist/handlers/web-handlers.js +90 -0
  57. package/dist/handlers/web-handlers.js.map +1 -0
  58. package/dist/help-text.d.ts +2 -0
  59. package/dist/help-text.d.ts.map +1 -0
  60. package/dist/help-text.js +439 -0
  61. package/dist/help-text.js.map +1 -0
  62. package/dist/index.d.ts +3 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +5 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/option-validation.d.ts +5 -0
  67. package/dist/option-validation.d.ts.map +1 -0
  68. package/dist/option-validation.js +111 -0
  69. package/dist/option-validation.js.map +1 -0
  70. package/dist/output.d.ts +5 -0
  71. package/dist/output.d.ts.map +1 -0
  72. package/dist/output.js +11 -0
  73. package/dist/output.js.map +1 -0
  74. package/dist/root-doctor.d.ts +22 -0
  75. package/dist/root-doctor.d.ts.map +1 -0
  76. package/dist/root-doctor.js +231 -0
  77. package/dist/root-doctor.js.map +1 -0
  78. package/dist/root-help.d.ts +8 -0
  79. package/dist/root-help.d.ts.map +1 -0
  80. package/dist/root-help.js +130 -0
  81. package/dist/root-help.js.map +1 -0
  82. package/dist/root-init.d.ts +4 -0
  83. package/dist/root-init.d.ts.map +1 -0
  84. package/dist/root-init.js +87 -0
  85. package/dist/root-init.js.map +1 -0
  86. package/dist/run.d.ts +8 -0
  87. package/dist/run.d.ts.map +1 -0
  88. package/dist/run.js +152 -0
  89. package/dist/run.js.map +1 -0
  90. package/dist/system-command.d.ts +3 -0
  91. package/dist/system-command.d.ts.map +1 -0
  92. package/dist/system-command.js +27 -0
  93. package/dist/system-command.js.map +1 -0
  94. package/dist/types.d.ts +16 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +2 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/version.d.ts +2 -0
  99. package/dist/version.d.ts.map +1 -0
  100. package/dist/version.js +14 -0
  101. package/dist/version.js.map +1 -0
  102. package/package.json +54 -0
@@ -0,0 +1,159 @@
1
+ import { askAI, listAIProviders, previewAIRequest, resolveAIProviderNetworkTarget, resolveAIModel, validateAIProviderConfig, } from '@zaowu-labs/ai';
2
+ import { assertOperationPlanFingerprint, createOperationPlan, formatConfirmCommand, formatOperationPlan, getValue, result, withOperationPlan, } from '../handler-utils.js';
3
+ export const handleAiAsk = async (args, context) => {
4
+ const prompt = args.join(' ').trim();
5
+ const filePath = getValue(context.parsed, '--file');
6
+ const requestedProvider = getValue(context.parsed, '--provider');
7
+ const requestedModel = getValue(context.parsed, '--model');
8
+ const providerValidation = validateAIProviderConfig(requestedProvider);
9
+ const provider = providerValidation.provider;
10
+ const resolvedModel = resolveAIModel(provider, { model: requestedModel });
11
+ const networkTarget = provider.network ? resolveAIProviderNetworkTarget(provider.id) : undefined;
12
+ const operationPlan = createOperationPlan({
13
+ risk: provider.network ? 'medium' : 'low',
14
+ confirmationRequired: provider.network && !context.yes,
15
+ subjects: [`ai:${provider.id}`, `model:${resolvedModel}`],
16
+ reads: filePath ? [filePath] : [],
17
+ network: networkTarget ? [networkTarget] : [],
18
+ secrets: provider.requiredEnv,
19
+ notes: [
20
+ provider.network
21
+ ? 'Network AI providers preview by default and require --yes to send a request.'
22
+ : 'The local echo provider does not call external services.',
23
+ ],
24
+ });
25
+ if (provider.network && !context.yes) {
26
+ const preview = await previewAIRequest({
27
+ prompt,
28
+ filePath,
29
+ provider: requestedProvider,
30
+ model: requestedModel,
31
+ });
32
+ const payload = {
33
+ schemaVersion: preview.schemaVersion,
34
+ status: 'preview',
35
+ provider,
36
+ model: preview.model,
37
+ endpoint: preview.endpoint,
38
+ input: preview.input,
39
+ output: null,
40
+ usage: null,
41
+ validation: preview.validation,
42
+ };
43
+ const confirmCommand = formatConfirmCommand([
44
+ 'zw',
45
+ 'ai',
46
+ 'ask',
47
+ ...args,
48
+ ...(filePath ? ['--file', filePath] : []),
49
+ ...(requestedProvider ? ['--provider', requestedProvider] : []),
50
+ ...(requestedModel ? ['--model', requestedModel] : []),
51
+ '--yes',
52
+ '--plan-fingerprint',
53
+ operationPlan.fingerprint,
54
+ ]);
55
+ const human = [
56
+ 'ZaoWu AI Ask',
57
+ '',
58
+ 'Status: preview',
59
+ `Provider: ${provider.id} (${provider.name})`,
60
+ `Model: ${preview.model}`,
61
+ `Endpoint: ${preview.endpoint ?? 'local'}`,
62
+ '',
63
+ formatOperationPlan(operationPlan),
64
+ '',
65
+ 'No provider request was sent.',
66
+ '',
67
+ 'To send exactly this AI request, run:',
68
+ ` ${confirmCommand}`,
69
+ ].join('\n');
70
+ return result(context, withOperationPlan(payload, operationPlan), human);
71
+ }
72
+ assertOperationPlanFingerprint(context, operationPlan);
73
+ if (context.onChunk && !context.json) {
74
+ const onChunk = context.onChunk;
75
+ const plannedEndpoint = operationPlan.network[0] ?? null;
76
+ const header = [
77
+ 'ZaoWu AI Ask',
78
+ '',
79
+ `Provider: ${provider.id} (${provider.name})`,
80
+ `Model: ${resolvedModel}`,
81
+ `Endpoint: ${plannedEndpoint ?? 'local'}`,
82
+ '',
83
+ formatOperationPlan(operationPlan),
84
+ '',
85
+ 'Output:',
86
+ '',
87
+ ].join('\n');
88
+ onChunk(header);
89
+ let streamedAnyChunk = false;
90
+ const response = await askAI({
91
+ prompt,
92
+ filePath,
93
+ provider: requestedProvider,
94
+ model: requestedModel,
95
+ allowNetwork: context.yes,
96
+ onChunk: (chunk) => {
97
+ streamedAnyChunk = true;
98
+ onChunk(chunk);
99
+ },
100
+ });
101
+ // Providers that do not support streaming (echo, OpenAI, non-stream paths)
102
+ // never call onChunk. Print their full output so the human-readable
103
+ // command does not silently produce an empty result.
104
+ if (!streamedAnyChunk) {
105
+ onChunk(response.output);
106
+ }
107
+ onChunk('\n');
108
+ return result(context, withOperationPlan(response, operationPlan), '');
109
+ }
110
+ const response = await askAI({
111
+ prompt,
112
+ filePath,
113
+ provider: requestedProvider,
114
+ model: requestedModel,
115
+ allowNetwork: context.yes,
116
+ });
117
+ const payload = response;
118
+ const human = [
119
+ 'ZaoWu AI Ask',
120
+ '',
121
+ `Provider: ${response.provider.id} (${response.provider.name})`,
122
+ `Model: ${response.model}`,
123
+ `Endpoint: ${response.endpoint ?? 'local'}`,
124
+ '',
125
+ formatOperationPlan(operationPlan),
126
+ '',
127
+ 'Output:',
128
+ response.output,
129
+ ].join('\n');
130
+ return result(context, withOperationPlan(payload, operationPlan), human);
131
+ };
132
+ export const handleAiProviders = async (_args, context) => {
133
+ const providers = listAIProviders();
134
+ const activeProvider = getValue(context.parsed, '--provider');
135
+ const validation = activeProvider ? validateAIProviderConfig(activeProvider) : undefined;
136
+ const payload = {
137
+ schemaVersion: 1,
138
+ status: validation?.status ?? 'ok',
139
+ providers,
140
+ validation,
141
+ };
142
+ const human = [
143
+ 'ZaoWu AI Providers',
144
+ '',
145
+ ...providers.map((provider) => {
146
+ const flags = [
147
+ provider.network ? 'network' : 'local',
148
+ provider.configured ? 'configured' : 'missing config',
149
+ ];
150
+ return `- ${provider.id}: ${provider.name} (${flags.join(', ')})`;
151
+ }),
152
+ '',
153
+ validation?.warnings.length
154
+ ? ['Warnings:', ...validation.warnings.map((warning) => `- ${warning}`)].join('\n')
155
+ : 'Warnings: none',
156
+ ].join('\n');
157
+ return result(context, payload, human);
158
+ };
159
+ //# sourceMappingURL=ai-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-handlers.js","sourceRoot":"","sources":["../../src/handlers/ai-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type DomainActionHandler } from '../handler-utils.js';
2
+ export declare const handleAutoValidate: DomainActionHandler;
3
+ export declare const handleAutoRun: DomainActionHandler;
4
+ export declare const handleAutoPlan: DomainActionHandler;
5
+ //# sourceMappingURL=auto-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/auto-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,kBAAkB,EAAE,mBAuBhC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,mBA4E3B,CAAC;AAkBF,eAAO,MAAM,cAAc,EAAE,mBAwB5B,CAAC"}
@@ -0,0 +1,132 @@
1
+ import { planWorkflowFile, runWorkflowPlan, validateWorkflowFile } from '@zaowu-labs/auto';
2
+ import { assertOperationPlanFingerprint, createOperationPlan, formatOperationPlan, formatPolicy, formatSandbox, requireTarget, result, withOperationPlan, } from '../handler-utils.js';
3
+ export const handleAutoValidate = async (args, context) => {
4
+ const target = requireTarget(args, 'zw auto validate');
5
+ const validation = await validateWorkflowFile(target);
6
+ const human = [
7
+ 'ZaoWu Auto Validate',
8
+ '',
9
+ `File: ${validation.filePath}`,
10
+ `Workflow: ${validation.workflow.name}`,
11
+ `Version: ${validation.workflow.version}`,
12
+ `Steps: ${validation.workflow.steps.length}`,
13
+ '',
14
+ 'Policy:',
15
+ formatPolicy(validation.policy),
16
+ '',
17
+ 'Sandbox:',
18
+ formatSandbox(validation.sandbox),
19
+ '',
20
+ validation.warnings.length > 0
21
+ ? ['Warnings:', ...validation.warnings.map((warning) => `- ${warning}`)].join('\n')
22
+ : 'Warnings: none',
23
+ ].join('\n');
24
+ return result(context, validation, human);
25
+ };
26
+ export const handleAutoRun = async (args, context) => {
27
+ const target = requireTarget(args, 'zw auto run');
28
+ const plan = await planWorkflowFile(target);
29
+ const readySteps = plan.steps
30
+ .filter((step) => (step.action === 'message' || step.action === 'shell' || step.action === 'writeFile') &&
31
+ !step.blocked)
32
+ .map((step) => step.name);
33
+ const writeTargets = plan.steps
34
+ .filter((step) => step.action === 'writeFile' && !step.blocked && step.targetPath)
35
+ .map((step) => step.targetPath);
36
+ const writeSubjects = plan.steps
37
+ .filter((step) => step.action === 'writeFile' && !step.blocked && step.contentSha256)
38
+ .flatMap((step) => [
39
+ `step:${step.name}`,
40
+ `content-sha256:${step.contentSha256}`,
41
+ `content-length:${step.contentLength ?? 0}`,
42
+ ]);
43
+ const blockedSteps = plan.steps
44
+ .filter((step) => step.blocked)
45
+ .map((step) => `${step.name}: ${step.reason ?? 'blocked'}`);
46
+ const operationPlan = createOperationPlan({
47
+ risk: writeTargets.length > 0 ? 'high' : 'medium',
48
+ confirmationRequired: !context.yes,
49
+ subjects: [`workflow:${plan.filePath}`, ...writeSubjects],
50
+ reads: [plan.filePath],
51
+ writes: writeTargets,
52
+ notes: [
53
+ 'Workflow runs preview by default.',
54
+ `Policy shell: ${plan.policy.shell}.`,
55
+ `Policy fileWrites: ${plan.policy.fileWrites}.`,
56
+ `Sandbox shellCommands: ${plan.sandbox.shellCommands}.`,
57
+ `Sandbox fileWrites: ${plan.sandbox.fileWrites}.`,
58
+ `Ready steps: ${readySteps.length > 0 ? readySteps.join(', ') : 'none'}.`,
59
+ `Blocked steps: ${blockedSteps.length > 0 ? blockedSteps.join('; ') : 'none'}.`,
60
+ 'Shell steps remain blocked in this foundation version, including with --yes.',
61
+ 'writeFile steps can only create new files inside the workflow directory.',
62
+ ],
63
+ });
64
+ assertOperationPlanFingerprint(context, operationPlan);
65
+ const run = await runWorkflowPlan(plan, { yes: context.yes });
66
+ const human = [
67
+ 'ZaoWu Auto Run',
68
+ '',
69
+ `Status: ${run.status}`,
70
+ `Workflow: ${run.workflow.name}`,
71
+ `Version: ${run.workflow.version}`,
72
+ '',
73
+ 'Sandbox:',
74
+ formatSandbox(run.sandbox),
75
+ '',
76
+ formatOperationPlan(operationPlan),
77
+ '',
78
+ 'Executed:',
79
+ ...(run.executed.length > 0 ? run.executed.map((item) => `- ${item}`) : ['- none']),
80
+ '',
81
+ 'Skipped:',
82
+ ...(run.skipped.length > 0 ? run.skipped.map((item) => `- ${item}`) : ['- none']),
83
+ '',
84
+ 'Receipts:',
85
+ ...(run.receipts.length > 0
86
+ ? run.receipts.map((receipt) => {
87
+ const target = receipt.targetPath ? `; target: ${receipt.targetPath}` : '';
88
+ const hash = receipt.contentSha256 ? `; sha256: ${receipt.contentSha256}` : '';
89
+ const length = receipt.contentLength !== undefined ? `; length: ${receipt.contentLength}` : '';
90
+ return `- ${receipt.index}. ${receipt.name} [${receipt.action}] ${receipt.status}: ${receipt.detail}${target}${hash}${length}`;
91
+ })
92
+ : ['- none']),
93
+ ].join('\n');
94
+ return result(context, withOperationPlan(run, operationPlan), human);
95
+ };
96
+ const formatAutoPlanStep = (step) => {
97
+ const state = step.blocked ? 'blocked' : 'ready';
98
+ const confirmation = step.operationPlan.confirmationRequired ? 'yes' : 'no';
99
+ const details = [
100
+ step.targetPath ? `target: ${step.targetPath}` : undefined,
101
+ step.contentSha256 ? `sha256: ${step.contentSha256}` : undefined,
102
+ step.contentLength !== undefined ? `length: ${step.contentLength}` : undefined,
103
+ step.reason ? `reason: ${step.reason}` : undefined,
104
+ ].filter((item) => Boolean(item));
105
+ const suffix = details.length > 0 ? `; ${details.join('; ')}` : '';
106
+ return `${step.index}. ${step.name} [${step.action}] ${state} (${step.policyDecision}; risk: ${step.operationPlan.risk}; confirmation: ${confirmation}${suffix}) - ${step.preview}`;
107
+ };
108
+ export const handleAutoPlan = async (args, context) => {
109
+ const target = requireTarget(args, 'zw auto plan');
110
+ const plan = await planWorkflowFile(target);
111
+ const human = [
112
+ 'ZaoWu Auto Plan',
113
+ '',
114
+ `File: ${plan.filePath}`,
115
+ `Workflow: ${plan.workflow.name}`,
116
+ `Version: ${plan.workflow.version}`,
117
+ '',
118
+ 'Policy:',
119
+ formatPolicy(plan.policy),
120
+ '',
121
+ 'Sandbox:',
122
+ formatSandbox(plan.sandbox),
123
+ '',
124
+ ...plan.steps.map((step) => formatAutoPlanStep(step)),
125
+ '',
126
+ plan.warnings.length > 0
127
+ ? ['Warnings:', ...plan.warnings.map((warning) => `- ${warning}`)].join('\n')
128
+ : 'Warnings: none',
129
+ ].join('\n');
130
+ return result(context, plan, human);
131
+ };
132
+ //# sourceMappingURL=auto-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-handlers.js","sourceRoot":"","sources":["../../src/handlers/auto-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type DomainActionHandler } from '../handler-utils.js';
2
+ export declare const handleConfigPath: DomainActionHandler;
3
+ export declare const handleConfigShow: DomainActionHandler;
4
+ export declare const handleConfigValidate: DomainActionHandler;
5
+ export declare const handleConfigGet: DomainActionHandler;
6
+ export declare const handleConfigSet: DomainActionHandler;
7
+ export declare const handleConfigMigrate: DomainActionHandler;
8
+ //# sourceMappingURL=config-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/config-handlers.ts"],"names":[],"mappings":"AAQA,OAAO,EAUL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,gBAAgB,EAAE,mBAS9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAoB9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,mBAclC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBAW7B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBA8C7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,mBAwCjC,CAAC"}
@@ -0,0 +1,140 @@
1
+ import { findConfigPathOrThrow, getResolvedConfigValue, loadResolvedConfig, migrateResolvedConfig, setResolvedConfigValue, validateResolvedConfig, } from '@zaowu-labs/config';
2
+ import { assertOperationPlanFingerprint, createContentOperationSubjects, createOperationPlan, formatOperationPlan, hasFlag, requireSecondTarget, requireTarget, result, withOperationPlan, } from '../handler-utils.js';
3
+ export const handleConfigPath = async (_args, context) => {
4
+ const filePath = await findConfigPathOrThrow(context.cwd);
5
+ const payload = {
6
+ schemaVersion: 1,
7
+ status: 'ok',
8
+ path: filePath,
9
+ };
10
+ return result(context, payload, `ZaoWu Config Path\n\n${filePath}`);
11
+ };
12
+ export const handleConfigShow = async (_args, context) => {
13
+ const resolved = await loadResolvedConfig(context.cwd);
14
+ const payload = {
15
+ schemaVersion: resolved.schemaVersion,
16
+ status: 'ok',
17
+ filePath: resolved.filePath,
18
+ config: resolved.config,
19
+ };
20
+ const human = [
21
+ 'ZaoWu Config',
22
+ '',
23
+ `File: ${resolved.filePath}`,
24
+ `Project: ${resolved.config.project.name}`,
25
+ `AI provider: ${resolved.config.ai.provider ?? 'none'}`,
26
+ `Default output: ${resolved.config.defaults.output}`,
27
+ `Workspace: ${resolved.config.paths.workspace}`,
28
+ `Cache: ${resolved.config.paths.cache}`,
29
+ ].join('\n');
30
+ return result(context, payload, human);
31
+ };
32
+ export const handleConfigValidate = async (_args, context) => {
33
+ const validation = await validateResolvedConfig(context.cwd);
34
+ const human = [
35
+ 'ZaoWu Config Validate',
36
+ '',
37
+ `Status: ${validation.status}`,
38
+ `File: ${validation.filePath}`,
39
+ '',
40
+ validation.warnings.length > 0
41
+ ? ['Warnings:', ...validation.warnings.map((warning) => `- ${warning}`)].join('\n')
42
+ : 'Warnings: none',
43
+ ].join('\n');
44
+ return result(context, validation, human);
45
+ };
46
+ export const handleConfigGet = async (args, context) => {
47
+ const key = requireTarget(args, 'zw config get');
48
+ const value = await getResolvedConfigValue(key, context.cwd);
49
+ const human = [
50
+ 'ZaoWu Config Get',
51
+ '',
52
+ `File: ${value.filePath}`,
53
+ `${value.key}: ${value.value ?? 'null'}`,
54
+ ].join('\n');
55
+ return result(context, value, human);
56
+ };
57
+ export const handleConfigSet = async (args, context) => {
58
+ const key = requireTarget(args, 'zw config set');
59
+ const value = requireSecondTarget(args, 'zw config set', 'value');
60
+ const isGlobal = hasFlag(context.parsed, '--global');
61
+ const preview = await setResolvedConfigValue(key, value, {
62
+ cwd: context.cwd,
63
+ global: isGlobal,
64
+ });
65
+ const operationPlan = createOperationPlan({
66
+ risk: 'medium',
67
+ confirmationRequired: !context.yes,
68
+ subjects: [
69
+ `config:${preview.key}`,
70
+ `old-value:${JSON.stringify(preview.oldValue)}`,
71
+ `new-value:${JSON.stringify(preview.newValue)}`,
72
+ ...createContentOperationSubjects(preview.content),
73
+ ],
74
+ reads: [preview.filePath],
75
+ writes: [preview.filePath],
76
+ notes: ['Config writes are previewed unless --yes is provided.'],
77
+ });
78
+ assertOperationPlanFingerprint(context, operationPlan);
79
+ const updated = context.yes
80
+ ? await setResolvedConfigValue(key, value, {
81
+ cwd: context.cwd,
82
+ yes: true,
83
+ global: isGlobal,
84
+ })
85
+ : preview;
86
+ const human = [
87
+ 'ZaoWu Config Set',
88
+ '',
89
+ `Status: ${updated.status}`,
90
+ `File: ${updated.filePath}`,
91
+ `Key: ${updated.key}`,
92
+ `Old: ${updated.oldValue ?? 'null'}`,
93
+ `New: ${updated.newValue ?? 'null'}`,
94
+ `Wrote file: ${updated.wroteFile ? 'yes' : 'no'}`,
95
+ '',
96
+ formatOperationPlan(operationPlan),
97
+ '',
98
+ updated.wroteFile ? 'Config updated.' : updated.content,
99
+ ].join('\n');
100
+ return result(context, withOperationPlan(updated, operationPlan), human);
101
+ };
102
+ export const handleConfigMigrate = async (_args, context) => {
103
+ const preview = await migrateResolvedConfig({
104
+ cwd: context.cwd,
105
+ });
106
+ const operationPlan = createOperationPlan({
107
+ risk: 'medium',
108
+ confirmationRequired: preview.changed && !context.yes,
109
+ subjects: [
110
+ `config:${preview.filePath}`,
111
+ ...(preview.changed ? createContentOperationSubjects(preview.content) : []),
112
+ ],
113
+ reads: [preview.filePath],
114
+ writes: preview.changed ? [preview.filePath] : [],
115
+ notes: ['Config migrations are previewed unless --yes is provided.'],
116
+ });
117
+ assertOperationPlanFingerprint(context, operationPlan);
118
+ const migrated = context.yes && preview.changed
119
+ ? await migrateResolvedConfig({
120
+ cwd: context.cwd,
121
+ yes: true,
122
+ })
123
+ : preview;
124
+ const human = [
125
+ 'ZaoWu Config Migrate',
126
+ '',
127
+ `Status: ${migrated.status}`,
128
+ `File: ${migrated.filePath}`,
129
+ `From: ${migrated.fromVersion ?? 'legacy'}`,
130
+ `To: ${migrated.toVersion}`,
131
+ `Changed: ${migrated.changed ? 'yes' : 'no'}`,
132
+ `Wrote file: ${migrated.wroteFile ? 'yes' : 'no'}`,
133
+ '',
134
+ formatOperationPlan(operationPlan),
135
+ '',
136
+ migrated.wroteFile || !migrated.changed ? 'Migration complete.' : migrated.content,
137
+ ].join('\n');
138
+ return result(context, withOperationPlan(migrated, operationPlan), human);
139
+ };
140
+ //# sourceMappingURL=config-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-handlers.js","sourceRoot":"","sources":["../../src/handlers/config-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type DomainActionHandler } from '../handler-utils.js';
2
+ export declare const handleDataInspect: DomainActionHandler;
3
+ export declare const handleDataAnalyze: DomainActionHandler;
4
+ export declare const handleDataClean: DomainActionHandler;
5
+ export declare const handleDataSchema: DomainActionHandler;
6
+ export declare const handleDataSample: DomainActionHandler;
7
+ export declare const handleDataSheets: DomainActionHandler;
8
+ //# sourceMappingURL=data-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/data-handlers.ts"],"names":[],"mappings":"AAQA,OAAO,EAYL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,iBAAiB,EAAE,mBAgB/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,mBAkB/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBA8D7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAgB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAgB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,mBAY9B,CAAC"}
@@ -0,0 +1,135 @@
1
+ import { analyzeData, cleanData, inferDataSchema, inspectData, sampleData, listSheets, } from '@zaowu-labs/data';
2
+ import { assertOperationPlanFingerprint, createContentOperationSubjects, createOperationPlan, formatConfirmCommand, formatObject, formatOperationPlan, getValue, parsePositiveInteger, requireTarget, result, withOperationPlan, } from '../handler-utils.js';
3
+ export const handleDataInspect = async (args, context) => {
4
+ const target = requireTarget(args, 'zw data inspect');
5
+ const inspected = await inspectData(target, {
6
+ sheet: getValue(context.parsed, '--sheet'),
7
+ });
8
+ const human = [
9
+ 'ZaoWu Data Inspect',
10
+ '',
11
+ `File: ${inspected.filePath}`,
12
+ `Rows: ${inspected.rowCount}`,
13
+ `Columns: ${inspected.columnCount}`,
14
+ '',
15
+ `Columns: ${inspected.columns.join(', ')}`,
16
+ ].join('\n');
17
+ return result(context, inspected, human);
18
+ };
19
+ export const handleDataAnalyze = async (args, context) => {
20
+ const target = requireTarget(args, 'zw data analyze');
21
+ const analysis = await analyzeData(target, {
22
+ sheet: getValue(context.parsed, '--sheet'),
23
+ });
24
+ const human = [
25
+ 'ZaoWu Data Analyze',
26
+ '',
27
+ `File: ${analysis.filePath}`,
28
+ `Numeric columns: ${analysis.numericColumns.length}`,
29
+ '',
30
+ ...analysis.numericColumns.map((column) => `- ${column.column}: count ${column.count}, min ${column.min}, max ${column.max}, avg ${column.average}`),
31
+ ].join('\n');
32
+ return result(context, analysis, human);
33
+ };
34
+ export const handleDataClean = async (args, context) => {
35
+ const target = requireTarget(args, 'zw data clean');
36
+ const outputPath = getValue(context.parsed, '--output');
37
+ const sheet = getValue(context.parsed, '--sheet');
38
+ const preview = await cleanData(target, {
39
+ outputPath,
40
+ sheet,
41
+ });
42
+ const operationPlan = createOperationPlan({
43
+ risk: preview.outputPath ? 'medium' : 'low',
44
+ confirmationRequired: Boolean(preview.outputPath && !context.yes),
45
+ subjects: [
46
+ `data:${preview.inputPath}`,
47
+ ...(preview.sheetName ? [`sheet:${preview.sheetName}`] : []),
48
+ ...createContentOperationSubjects(preview.content),
49
+ ],
50
+ reads: [preview.inputPath],
51
+ writes: preview.outputPath ? [preview.outputPath] : [],
52
+ notes: ['Data cleaning writes require --yes when --output is used.'],
53
+ });
54
+ assertOperationPlanFingerprint(context, operationPlan);
55
+ const cleaned = context.yes && preview.outputPath
56
+ ? await cleanData(target, {
57
+ outputPath,
58
+ sheet,
59
+ yes: true,
60
+ })
61
+ : preview;
62
+ const confirmCommand = preview.outputPath && !context.yes
63
+ ? formatConfirmCommand([
64
+ 'zw',
65
+ 'data',
66
+ 'clean',
67
+ target,
68
+ ...(sheet ? ['--sheet', sheet] : []),
69
+ '--output',
70
+ preview.outputPath,
71
+ '--yes',
72
+ '--plan-fingerprint',
73
+ operationPlan.fingerprint,
74
+ ])
75
+ : undefined;
76
+ const human = [
77
+ 'ZaoWu Data Clean',
78
+ '',
79
+ `Status: ${cleaned.status}`,
80
+ `Input: ${cleaned.inputPath}`,
81
+ `Output: ${cleaned.outputPath ?? 'stdout'}`,
82
+ `Wrote file: ${cleaned.wroteFile ? 'yes' : 'no'}`,
83
+ '',
84
+ formatOperationPlan(operationPlan),
85
+ ...(confirmCommand
86
+ ? ['', 'To write exactly this cleaned output, run:', ` ${confirmCommand}`]
87
+ : []),
88
+ '',
89
+ cleaned.wroteFile ? 'Clean complete.' : cleaned.content,
90
+ ].join('\n');
91
+ return result(context, withOperationPlan(cleaned, operationPlan), human);
92
+ };
93
+ export const handleDataSchema = async (args, context) => {
94
+ const target = requireTarget(args, 'zw data schema');
95
+ const schema = await inferDataSchema(target, {
96
+ sheet: getValue(context.parsed, '--sheet'),
97
+ });
98
+ const human = [
99
+ 'ZaoWu Data Schema',
100
+ '',
101
+ `File: ${schema.filePath}`,
102
+ '',
103
+ ...schema.columns.map((column) => `- ${column.column}: ${column.type}${column.nullable ? ', nullable' : ''}`),
104
+ ].join('\n');
105
+ return result(context, schema, human);
106
+ };
107
+ export const handleDataSample = async (args, context) => {
108
+ const target = requireTarget(args, 'zw data sample');
109
+ const sampled = await sampleData(target, {
110
+ rows: parsePositiveInteger(getValue(context.parsed, '--rows'), 5),
111
+ sheet: getValue(context.parsed, '--sheet'),
112
+ });
113
+ const human = [
114
+ 'ZaoWu Data Sample',
115
+ '',
116
+ `File: ${sampled.filePath}`,
117
+ `Rows: ${sampled.rowCount}`,
118
+ '',
119
+ formatObject(sampled.rows),
120
+ ].join('\n');
121
+ return result(context, sampled, human);
122
+ };
123
+ export const handleDataSheets = async (args, context) => {
124
+ const target = requireTarget(args, 'zw data sheets');
125
+ const sheetsResult = await listSheets(target);
126
+ const human = [
127
+ 'ZaoWu Data Sheets',
128
+ '',
129
+ `File: ${sheetsResult.filePath}`,
130
+ `Sheets (${sheetsResult.sheets.length}):`,
131
+ ...sheetsResult.sheets.map((sheet) => `- ${sheet}`),
132
+ ].join('\n');
133
+ return result(context, sheetsResult, human);
134
+ };
135
+ //# sourceMappingURL=data-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-handlers.js","sourceRoot":"","sources":["../../src/handlers/data-handlers.ts"],"names":[],"mappings":"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"}