@zaowu-labs/auto 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.
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # @zaowu-labs/auto
2
+
3
+ Automation workflow package for ZaoWu.
4
+
5
+ This package validates JSON or YAML workflow files, builds execution plans, and
6
+ previews workflow runs. It owns workflow permissions, runtime policy output, and
7
+ the foundation execution sandbox for automation commands.
8
+
9
+ Safety:
10
+
11
+ - Workflow runs preview by default.
12
+ - Shell commands are planned but blocked in this foundation version.
13
+ - Structured `writeFile` steps require `permissions.fileWrites: prompt` and
14
+ explicit confirmation.
15
+ - Confirmed writes can only create new files inside the real workflow-directory
16
+ sandbox; existing files and linked-directory escapes are refused.
17
+ - Network access remains blocked by the execution sandbox.
18
+ - The sandbox reports the resolved workflow directory and active file-write
19
+ boundary.
20
+ - Plan steps include per-step operation plans so callers can audit risk and
21
+ planned execution before running.
@@ -0,0 +1,94 @@
1
+ import type { OperationPlan } from '@zaowu-labs/core';
2
+ export interface AutomationStep {
3
+ name: string;
4
+ message?: string;
5
+ run?: string;
6
+ writeFile?: {
7
+ path: string;
8
+ content: string;
9
+ };
10
+ }
11
+ export type AutomationPermissionMode = 'blocked' | 'prompt';
12
+ export type AutomationPermissionName = 'shell' | 'fileWrites' | 'network';
13
+ export interface AutomationWorkflowPermissions {
14
+ shell: AutomationPermissionMode;
15
+ fileWrites: AutomationPermissionMode;
16
+ network: AutomationPermissionMode;
17
+ }
18
+ export interface AutomationExecutionPolicy extends AutomationWorkflowPermissions {
19
+ schemaVersion: 1;
20
+ }
21
+ export interface AutomationExecutionSandbox {
22
+ schemaVersion: 1;
23
+ root: 'workflow-directory';
24
+ workflowDirectory: string;
25
+ shellCommands: 'blocked';
26
+ fileWrites: 'blocked' | 'workflow-directory';
27
+ network: 'blocked';
28
+ }
29
+ export interface AutomationWorkflow {
30
+ version: number;
31
+ name: string;
32
+ variables: Record<string, string>;
33
+ permissions: AutomationWorkflowPermissions;
34
+ steps: AutomationStep[];
35
+ }
36
+ export interface ParsedAutomationWorkflow extends AutomationWorkflow {
37
+ versionWarning?: string;
38
+ permissionWarnings: string[];
39
+ }
40
+ export interface AutomationValidationResult {
41
+ schemaVersion: 1;
42
+ status: 'ok';
43
+ filePath: string;
44
+ workflow: AutomationWorkflow;
45
+ policy: AutomationExecutionPolicy;
46
+ sandbox: AutomationExecutionSandbox;
47
+ warnings: string[];
48
+ }
49
+ export interface AutomationRunResult {
50
+ schemaVersion: 1;
51
+ status: 'ok' | 'preview';
52
+ filePath: string;
53
+ workflow: AutomationWorkflow;
54
+ policy: AutomationExecutionPolicy;
55
+ sandbox: AutomationExecutionSandbox;
56
+ executed: string[];
57
+ skipped: string[];
58
+ receipts: AutomationExecutionReceipt[];
59
+ }
60
+ export interface AutomationExecutionReceipt {
61
+ index: number;
62
+ name: string;
63
+ action: AutomationPlanStep['action'];
64
+ status: 'executed' | 'skipped' | 'blocked';
65
+ detail: string;
66
+ targetPath?: string;
67
+ contentSha256?: string;
68
+ contentLength?: number;
69
+ }
70
+ export interface AutomationPlanStep {
71
+ index: number;
72
+ name: string;
73
+ action: 'message' | 'shell' | 'writeFile' | 'unsupported';
74
+ preview: string;
75
+ targetPath?: string;
76
+ contentLength?: number;
77
+ contentSha256?: string;
78
+ blocked: boolean;
79
+ requiredPermission?: AutomationPermissionName;
80
+ policyDecision: 'allowed' | 'blocked';
81
+ reason?: string;
82
+ operationPlan: OperationPlan;
83
+ }
84
+ export interface AutomationPlanResult {
85
+ schemaVersion: 1;
86
+ status: 'ok';
87
+ filePath: string;
88
+ workflow: AutomationWorkflow;
89
+ policy: AutomationExecutionPolicy;
90
+ sandbox: AutomationExecutionSandbox;
91
+ steps: AutomationPlanStep[];
92
+ warnings: string[];
93
+ }
94
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { type DomainDefinition } from '@zaowu-labs/core';
2
+ export declare const AUTO_DOMAIN: DomainDefinition;
3
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,eAAO,MAAM,WAAW,EAAE,gBAkBzB,CAAC"}
package/dist/domain.js ADDED
@@ -0,0 +1,21 @@
1
+ import { createCapabilityLedger } from '@zaowu-labs/core';
2
+ export const AUTO_DOMAIN = {
3
+ name: 'auto',
4
+ summary: 'Automation workflows with validation, dry-run, and confirmation',
5
+ capabilities: createCapabilityLedger({ readsFiles: true, writesFiles: true }),
6
+ commands: [
7
+ { name: 'validate', summary: 'Validate an automation workflow file', status: 'available' },
8
+ {
9
+ name: 'plan',
10
+ summary: 'Preview the execution plan for an automation workflow',
11
+ status: 'available',
12
+ },
13
+ {
14
+ name: 'run',
15
+ summary: 'Run an automation workflow with dry-run and confirmation',
16
+ status: 'available',
17
+ sensitive: true,
18
+ },
19
+ ],
20
+ };
21
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,kBAAkB,CAAC;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAqB;IAC3C,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,iEAAiE;IAC1E,YAAY,EAAE,sBAAsB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7E,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,sCAAsC,EAAE,MAAM,EAAE,WAAW,EAAE;QAC1F;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,uDAAuD;YAChE,MAAM,EAAE,WAAW;SACpB;QACD;YACE,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,0DAA0D;YACnE,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,IAAI;SAChB;KACF;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { AutomationPlanResult, AutomationRunResult, AutomationValidationResult } from './contracts.js';
2
+ export * from './contracts.js';
3
+ export { AUTO_DOMAIN } from './domain.js';
4
+ export { checkShellSafety } from './shell-safety.js';
5
+ export declare const validateWorkflowContent: (content: string, filePath?: string) => AutomationValidationResult;
6
+ export declare const validateWorkflowFile: (filePath: string) => Promise<AutomationValidationResult>;
7
+ export declare const planWorkflowContent: (content: string, filePath?: string) => AutomationPlanResult;
8
+ export declare const planWorkflowFile: (filePath: string) => Promise<AutomationPlanResult>;
9
+ export declare const runWorkflowPlan: (plan: AutomationPlanResult, options?: {
10
+ yes?: boolean;
11
+ }) => Promise<AutomationRunResult>;
12
+ export declare const runWorkflowFile: (filePath: string, options?: {
13
+ yes?: boolean;
14
+ }) => Promise<AutomationRunResult>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAMV,oBAAoB,EAEpB,mBAAmB,EAEnB,0BAA0B,EAI3B,MAAM,gBAAgB,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAuerD,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,EACf,iBAAyB,KACxB,0BAuFF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,KACf,OAAO,CAAC,0BAA0B,CAepC,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,iBAAyB,KACxB,oBAmLF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,oBAAoB,CAerF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,oBAAoB,EAC1B,UAAS;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,KAC9B,OAAO,CAAC,mBAAmB,CAyH7B,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,UAAS;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,KAC9B,OAAO,CAAC,mBAAmB,CAA+D,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,762 @@
1
+ import { readFile, realpath, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import YAML from 'yaml';
4
+ import { hashOperationContent, createOperationPlan, stripUtf8Bom, ZaoWuError, } from '@zaowu-labs/core';
5
+ import { checkShellSafety } from './shell-safety.js';
6
+ export * from './contracts.js';
7
+ export { AUTO_DOMAIN } from './domain.js';
8
+ export { checkShellSafety } from './shell-safety.js';
9
+ const SUPPORTED_WORKFLOW_VERSION = 1;
10
+ const AUTO_RESULT_SCHEMA_VERSION = 1;
11
+ const AUTO_POLICY_SCHEMA_VERSION = 1;
12
+ const MAX_WORKFLOW_CHARACTERS = 1_000_000;
13
+ const MAX_WRITE_FILE_CHARACTERS = 256 * 1024;
14
+ const DEFAULT_WORKFLOW_PERMISSIONS = {
15
+ shell: 'blocked',
16
+ fileWrites: 'blocked',
17
+ network: 'blocked',
18
+ };
19
+ const DEFAULT_EXECUTION_SANDBOX = {
20
+ schemaVersion: 1,
21
+ root: 'workflow-directory',
22
+ shellCommands: 'blocked',
23
+ fileWrites: 'blocked',
24
+ network: 'blocked',
25
+ };
26
+ const KNOWN_PERMISSIONS = ['shell', 'fileWrites', 'network'];
27
+ const createExecutionPolicy = (permissions) => ({
28
+ schemaVersion: AUTO_POLICY_SCHEMA_VERSION,
29
+ shell: 'blocked',
30
+ fileWrites: permissions.fileWrites === 'prompt' ? 'prompt' : 'blocked',
31
+ network: 'blocked',
32
+ });
33
+ const resolveWorkflowDirectory = (filePath) => path.resolve(path.dirname(filePath));
34
+ const createExecutionSandbox = (filePath, policy) => ({
35
+ ...DEFAULT_EXECUTION_SANDBOX,
36
+ fileWrites: policy.fileWrites === 'prompt' ? 'workflow-directory' : 'blocked',
37
+ workflowDirectory: resolveWorkflowDirectory(filePath),
38
+ });
39
+ const getWorkflowFormat = (filePath) => {
40
+ const extension = path.extname(filePath).toLowerCase();
41
+ if (extension === '.json') {
42
+ return 'json';
43
+ }
44
+ if (extension === '.yml' || extension === '.yaml') {
45
+ return 'yaml';
46
+ }
47
+ throw new ZaoWuError({
48
+ code: 'WORKFLOW_FORMAT_UNSUPPORTED',
49
+ message: 'Workflow format is not supported yet.',
50
+ why: `ZaoWu can read JSON and YAML workflow files. It cannot parse \`${extension || 'unknown'}\` files as workflows.`,
51
+ fix: 'Use a workflow file ending in `.json`, `.yml`, or `.yaml`.',
52
+ });
53
+ };
54
+ const parseWorkflowVersion = (value) => {
55
+ if (value === undefined || value === null || value === '') {
56
+ return {
57
+ version: SUPPORTED_WORKFLOW_VERSION,
58
+ };
59
+ }
60
+ const normalizedValue = typeof value === 'string' ? value.trim() : value;
61
+ const version = typeof normalizedValue === 'number'
62
+ ? normalizedValue
63
+ : typeof normalizedValue === 'string' && /^\d+$/.test(normalizedValue)
64
+ ? Number.parseInt(normalizedValue, 10)
65
+ : Number.NaN;
66
+ if (Number.isInteger(version) && version > 0) {
67
+ return {
68
+ version,
69
+ };
70
+ }
71
+ return {
72
+ version: SUPPORTED_WORKFLOW_VERSION,
73
+ versionWarning: `Workflow version \`${String(value)}\` is invalid; defaulting to ${SUPPORTED_WORKFLOW_VERSION}.`,
74
+ };
75
+ };
76
+ const parsePermissionMode = (value, permission) => {
77
+ if (value === undefined || value === null || value === '') {
78
+ return {
79
+ mode: DEFAULT_WORKFLOW_PERMISSIONS[permission],
80
+ };
81
+ }
82
+ if (value === 'blocked' || value === 'prompt') {
83
+ return {
84
+ mode: value,
85
+ };
86
+ }
87
+ return {
88
+ mode: DEFAULT_WORKFLOW_PERMISSIONS[permission],
89
+ warning: `Permission \`${permission}\` value \`${String(value)}\` is invalid; defaulting to blocked.`,
90
+ };
91
+ };
92
+ const parseExecutionPolicy = (value) => {
93
+ const permissionWarnings = [];
94
+ if (value !== undefined && (!value || typeof value !== 'object' || Array.isArray(value))) {
95
+ permissionWarnings.push('Permissions must be an object; defaulting to blocked.');
96
+ }
97
+ const input = value && typeof value === 'object' && !Array.isArray(value)
98
+ ? value
99
+ : {};
100
+ for (const key of Object.keys(input)) {
101
+ if (!KNOWN_PERMISSIONS.includes(key)) {
102
+ permissionWarnings.push(`Permission \`${key}\` is not supported; ignoring it.`);
103
+ }
104
+ }
105
+ const shell = parsePermissionMode(input.shell, 'shell');
106
+ const fileWrites = parsePermissionMode(input.fileWrites, 'fileWrites');
107
+ const network = parsePermissionMode(input.network, 'network');
108
+ return {
109
+ policy: {
110
+ shell: shell.mode,
111
+ fileWrites: fileWrites.mode,
112
+ network: network.mode,
113
+ },
114
+ permissionWarnings: [
115
+ ...permissionWarnings,
116
+ shell.warning,
117
+ fileWrites.warning,
118
+ network.warning,
119
+ ].filter((warning) => Boolean(warning)),
120
+ };
121
+ };
122
+ const parseWorkflowJson = (content) => {
123
+ let parsed;
124
+ try {
125
+ parsed = JSON.parse(content);
126
+ }
127
+ catch (error) {
128
+ const detail = error instanceof SyntaxError ? `: ${error.message}` : '';
129
+ throw new ZaoWuError({
130
+ code: 'WORKFLOW_PARSE_FAILED',
131
+ message: 'Could not parse workflow.',
132
+ why: `Workflow content is not valid JSON${detail}.`,
133
+ fix: 'Verify the JSON syntax and run `zw auto validate` again.',
134
+ });
135
+ }
136
+ const version = parseWorkflowVersion(parsed.version);
137
+ const { policy, permissionWarnings } = parseExecutionPolicy(parsed.permissions);
138
+ const variables = parsed.variables && typeof parsed.variables === 'object' && !Array.isArray(parsed.variables)
139
+ ? Object.fromEntries(Object.entries(parsed.variables).map(([key, value]) => [key, String(value)]))
140
+ : {};
141
+ return {
142
+ ...version,
143
+ name: typeof parsed.name === 'string' && parsed.name ? parsed.name : 'workflow',
144
+ variables,
145
+ permissions: policy,
146
+ permissionWarnings,
147
+ steps: Array.isArray(parsed.steps)
148
+ ? parsed.steps.map((step) => {
149
+ if (!step || typeof step !== 'object') {
150
+ return { name: '' };
151
+ }
152
+ const stepObj = step;
153
+ const writeFileValue = stepObj.writeFile;
154
+ const writeFileAction = writeFileValue && typeof writeFileValue === 'object' && !Array.isArray(writeFileValue)
155
+ ? writeFileValue
156
+ : undefined;
157
+ return {
158
+ name: typeof stepObj.name === 'string' ? stepObj.name : '',
159
+ ...(typeof stepObj.message === 'string' ? { message: stepObj.message } : {}),
160
+ ...(typeof stepObj.run === 'string' ? { run: stepObj.run } : {}),
161
+ ...(writeFileAction
162
+ ? {
163
+ writeFile: {
164
+ path: typeof writeFileAction.path === 'string'
165
+ ? writeFileAction.path
166
+ : String(writeFileAction.path ?? ''),
167
+ content: typeof writeFileAction.content === 'string'
168
+ ? writeFileAction.content
169
+ : String(writeFileAction.content ?? ''),
170
+ },
171
+ }
172
+ : {}),
173
+ };
174
+ })
175
+ : [],
176
+ };
177
+ };
178
+ /**
179
+ * YAML workflow parsing is intentionally schema-shaped even though it now uses
180
+ * a real parser. The foundation runtime normalizes only the fields it supports
181
+ * and reports unsupported or unsafe behavior through warnings and operation
182
+ * plans instead of executing arbitrary YAML-driven actions.
183
+ */
184
+ const parseWorkflowYaml = (content) => {
185
+ let parsedRaw;
186
+ try {
187
+ parsedRaw = YAML.parse(content);
188
+ }
189
+ catch (error) {
190
+ throw new ZaoWuError({
191
+ code: 'WORKFLOW_PARSE_FAILED',
192
+ message: 'Could not parse workflow.',
193
+ why: error instanceof Error ? error.message : 'The YAML parser rejected the file.',
194
+ fix: 'Fix the YAML syntax and run `zw auto validate` again.',
195
+ });
196
+ }
197
+ if (parsedRaw === null || parsedRaw === undefined) {
198
+ parsedRaw = {};
199
+ }
200
+ else if (typeof parsedRaw !== 'object' || Array.isArray(parsedRaw)) {
201
+ throw new ZaoWuError({
202
+ code: 'WORKFLOW_PARSE_FAILED',
203
+ message: 'Could not parse workflow.',
204
+ why: 'Workflow content is not a YAML object.',
205
+ fix: 'Verify the workflow format and run `zw auto validate` again.',
206
+ });
207
+ }
208
+ const parsed = parsedRaw;
209
+ const version = parseWorkflowVersion(parsed.version);
210
+ const name = typeof parsed.name === 'string' && parsed.name ? parsed.name.trim() : 'workflow';
211
+ const variables = {};
212
+ const rawVars = parsed.vars ?? parsed.variables;
213
+ if (rawVars && typeof rawVars === 'object' && !Array.isArray(rawVars)) {
214
+ for (const [k, v] of Object.entries(rawVars)) {
215
+ variables[k] = v === null || v === undefined ? '' : String(v).trim();
216
+ }
217
+ }
218
+ const { policy, permissionWarnings } = parseExecutionPolicy(parsed.permissions);
219
+ const steps = [];
220
+ if (Array.isArray(parsed.steps)) {
221
+ for (const step of parsed.steps) {
222
+ if (step && typeof step === 'object') {
223
+ const stepObj = step;
224
+ const stepName = typeof stepObj.name === 'string' && stepObj.name ? stepObj.name.trim() : '';
225
+ const stepMessage = typeof stepObj.message === 'string' ? stepObj.message.trim() : undefined;
226
+ const stepRun = typeof stepObj.run === 'string' ? stepObj.run.trim() : undefined;
227
+ const writeFileValue = stepObj.writeFile;
228
+ const writeFileAction = writeFileValue && typeof writeFileValue === 'object' && !Array.isArray(writeFileValue)
229
+ ? writeFileValue
230
+ : undefined;
231
+ const stepWriteFile = writeFileAction
232
+ ? {
233
+ path: typeof writeFileAction.path === 'string'
234
+ ? writeFileAction.path.trim()
235
+ : String(writeFileAction.path ?? '').trim(),
236
+ content: typeof writeFileAction.content === 'string'
237
+ ? writeFileAction.content
238
+ : String(writeFileAction.content ?? ''),
239
+ }
240
+ : undefined;
241
+ steps.push({
242
+ name: stepName,
243
+ ...(stepMessage !== undefined ? { message: stepMessage } : {}),
244
+ ...(stepRun !== undefined ? { run: stepRun } : {}),
245
+ ...(stepWriteFile !== undefined ? { writeFile: stepWriteFile } : {}),
246
+ });
247
+ }
248
+ }
249
+ }
250
+ return {
251
+ ...version,
252
+ name,
253
+ variables,
254
+ permissions: policy,
255
+ permissionWarnings,
256
+ steps,
257
+ };
258
+ };
259
+ const parseWorkflow = (content, filePath) => {
260
+ const normalizedContent = stripUtf8Bom(content);
261
+ const format = getWorkflowFormat(filePath);
262
+ try {
263
+ return format === 'json'
264
+ ? parseWorkflowJson(normalizedContent)
265
+ : parseWorkflowYaml(normalizedContent);
266
+ }
267
+ catch (error) {
268
+ if (error instanceof ZaoWuError) {
269
+ throw error;
270
+ }
271
+ throw new ZaoWuError({
272
+ code: 'WORKFLOW_PARSE_FAILED',
273
+ message: 'Could not parse workflow.',
274
+ why: 'ZaoWu supports simple JSON and YAML workflow files in this first version.',
275
+ fix: 'Use `name` and `steps` with `message` steps, then run `zw auto validate` again.',
276
+ });
277
+ }
278
+ };
279
+ const stripWorkflowMetadata = (workflow) => ({
280
+ version: workflow.version,
281
+ name: workflow.name,
282
+ variables: workflow.variables,
283
+ permissions: workflow.permissions,
284
+ steps: workflow.steps,
285
+ });
286
+ const VARIABLE_PATTERN = /\{\{\s*([A-Za-z0-9_-]+)\s*\}\}/g;
287
+ const getReferencedVariables = (value) => value ? [...value.matchAll(VARIABLE_PATTERN)].map((match) => match[1]) : [];
288
+ const getMissingVariables = (step, variables) => [
289
+ ...new Set([
290
+ ...getReferencedVariables(step.message),
291
+ ...getReferencedVariables(step.run),
292
+ ...getReferencedVariables(step.writeFile?.path),
293
+ ...getReferencedVariables(step.writeFile?.content),
294
+ ]),
295
+ ].filter((name) => !(name in variables));
296
+ const substituteVariables = (value, variables) => value.replace(VARIABLE_PATTERN, (_match, name) => variables[name] ?? `{{${name}}}`);
297
+ const getStepActionCount = (step) => [step.message, step.run, step.writeFile].filter((value) => value !== undefined).length;
298
+ const resolveWorkflowWritePath = (workflowDirectory, requestedPath) => {
299
+ const trimmedPath = requestedPath.trim();
300
+ if (!trimmedPath) {
301
+ return {
302
+ reason: 'writeFile.path is required.',
303
+ };
304
+ }
305
+ if (path.isAbsolute(trimmedPath)) {
306
+ return {
307
+ reason: 'writeFile.path must be relative to the workflow directory.',
308
+ };
309
+ }
310
+ const targetPath = path.resolve(workflowDirectory, trimmedPath);
311
+ const relativeTarget = path.relative(workflowDirectory, targetPath);
312
+ if (!relativeTarget ||
313
+ relativeTarget === '..' ||
314
+ relativeTarget.startsWith(`..${path.sep}`) ||
315
+ path.isAbsolute(relativeTarget)) {
316
+ return {
317
+ reason: 'writeFile.path must name a file inside the workflow directory.',
318
+ };
319
+ }
320
+ return { targetPath };
321
+ };
322
+ const resolveSandboxedWriteTarget = async (workflowDirectory, targetPath, stepName) => {
323
+ let realWorkflowDirectory;
324
+ let realTargetDirectory;
325
+ try {
326
+ [realWorkflowDirectory, realTargetDirectory] = await Promise.all([
327
+ realpath(workflowDirectory),
328
+ realpath(path.dirname(targetPath)),
329
+ ]);
330
+ }
331
+ catch {
332
+ throw new ZaoWuError({
333
+ code: 'WORKFLOW_STEP_FAILED',
334
+ message: `Workflow step \`${stepName}\` failed.`,
335
+ why: `ZaoWu could not resolve the real workflow or target directory for \`${targetPath}\`.`,
336
+ fix: 'Use an existing directory inside the workflow directory, then try again.',
337
+ });
338
+ }
339
+ const relativeDirectory = path.relative(realWorkflowDirectory, realTargetDirectory);
340
+ if (relativeDirectory === '..' ||
341
+ relativeDirectory.startsWith(`..${path.sep}`) ||
342
+ path.isAbsolute(relativeDirectory)) {
343
+ throw new ZaoWuError({
344
+ code: 'WORKFLOW_STEP_FAILED',
345
+ message: `Workflow step \`${stepName}\` failed.`,
346
+ why: `ZaoWu refused to follow a linked directory outside the workflow sandbox for \`${targetPath}\`.`,
347
+ fix: 'Choose a writeFile.path whose parent directory resolves inside the workflow directory.',
348
+ });
349
+ }
350
+ return path.join(realTargetDirectory, path.basename(targetPath));
351
+ };
352
+ const createStepOperationPlan = (step) => {
353
+ const blockedNote = step.blocked ? [`Step is blocked: ${step.reason ?? 'blocked'}.`] : [];
354
+ if (step.action === 'shell') {
355
+ return createOperationPlan({
356
+ risk: 'high',
357
+ confirmationRequired: true,
358
+ executes: step.preview ? [step.preview] : [],
359
+ notes: blockedNote,
360
+ });
361
+ }
362
+ if (step.action === 'message') {
363
+ return createOperationPlan({
364
+ risk: 'low',
365
+ confirmationRequired: false,
366
+ notes: [
367
+ ...blockedNote,
368
+ 'Message steps do not read files, write files, run shell commands, or use network.',
369
+ ],
370
+ });
371
+ }
372
+ if (step.action === 'writeFile') {
373
+ return createOperationPlan({
374
+ risk: 'medium',
375
+ confirmationRequired: true,
376
+ subjects: [
377
+ ...(step.contentSha256 ? [`content-sha256:${step.contentSha256}`] : []),
378
+ ...(step.contentLength !== undefined ? [`content-length:${step.contentLength}`] : []),
379
+ ],
380
+ writes: step.targetPath ? [step.targetPath] : [],
381
+ notes: [
382
+ ...blockedNote,
383
+ 'writeFile steps can only create new files inside the workflow directory.',
384
+ ],
385
+ });
386
+ }
387
+ return createOperationPlan({
388
+ risk: 'low',
389
+ confirmationRequired: false,
390
+ notes: [...blockedNote, 'Unsupported steps have no executable action.'],
391
+ });
392
+ };
393
+ export const validateWorkflowContent = (content, filePath = 'workflow.yml') => {
394
+ if (content.length > MAX_WORKFLOW_CHARACTERS) {
395
+ throw new ZaoWuError({
396
+ code: 'WORKFLOW_PARSE_FAILED',
397
+ message: 'Workflow file is too large.',
398
+ why: `ZaoWu limits workflow files to ${MAX_WORKFLOW_CHARACTERS} characters, but \`${filePath}\` contains ${content.length}.`,
399
+ fix: 'Split the workflow into smaller files and keep generated content in bounded writeFile steps.',
400
+ });
401
+ }
402
+ const parsedWorkflow = parseWorkflow(content, filePath);
403
+ const workflow = stripWorkflowMetadata(parsedWorkflow);
404
+ const warnings = [];
405
+ if (parsedWorkflow.versionWarning) {
406
+ warnings.push(parsedWorkflow.versionWarning);
407
+ }
408
+ warnings.push(...parsedWorkflow.permissionWarnings);
409
+ if (workflow.version !== SUPPORTED_WORKFLOW_VERSION) {
410
+ warnings.push(`Workflow version ${workflow.version} is not supported; this foundation version expects ${SUPPORTED_WORKFLOW_VERSION}.`);
411
+ }
412
+ if (workflow.steps.length === 0) {
413
+ warnings.push('Workflow has no steps.');
414
+ }
415
+ for (const step of workflow.steps) {
416
+ if (!step.name.trim()) {
417
+ warnings.push('A workflow step has an empty name.');
418
+ }
419
+ const actionCount = getStepActionCount(step);
420
+ if (actionCount === 0) {
421
+ warnings.push(`Step \`${step.name}\` has no supported action.`);
422
+ }
423
+ if (actionCount > 1) {
424
+ warnings.push(`Step \`${step.name}\` declares multiple actions; choose exactly one action.`);
425
+ }
426
+ if (step.run) {
427
+ const safetyError = checkShellSafety(step.run);
428
+ if (safetyError) {
429
+ warnings.push(`Step \`${step.name}\` safety violation: ${safetyError}`);
430
+ }
431
+ warnings.push(`Step \`${step.name}\` uses shell execution, which this first version will not run.`);
432
+ }
433
+ if (step.writeFile) {
434
+ if (!step.writeFile.path.trim()) {
435
+ warnings.push(`Step \`${step.name}\` writeFile.path is required.`);
436
+ }
437
+ if (workflow.permissions.fileWrites !== 'prompt') {
438
+ warnings.push(`Step \`${step.name}\` writes a file, but permissions.fileWrites is not prompt.`);
439
+ }
440
+ if (step.writeFile.content.length > MAX_WRITE_FILE_CHARACTERS) {
441
+ warnings.push(`Step \`${step.name}\` writeFile.content exceeds the ${MAX_WRITE_FILE_CHARACTERS}-character limit.`);
442
+ }
443
+ }
444
+ for (const missingVariable of getMissingVariables(step, workflow.variables)) {
445
+ warnings.push(`Step \`${step.name}\` references undefined variable \`${missingVariable}\`.`);
446
+ }
447
+ }
448
+ const policy = createExecutionPolicy(workflow.permissions);
449
+ return {
450
+ schemaVersion: AUTO_RESULT_SCHEMA_VERSION,
451
+ status: 'ok',
452
+ filePath,
453
+ workflow,
454
+ policy,
455
+ sandbox: createExecutionSandbox(filePath, policy),
456
+ warnings,
457
+ };
458
+ };
459
+ export const validateWorkflowFile = async (filePath) => {
460
+ let content;
461
+ try {
462
+ content = await readFile(filePath, 'utf8');
463
+ }
464
+ catch {
465
+ throw new ZaoWuError({
466
+ code: 'WORKFLOW_READ_FAILED',
467
+ message: 'Could not read workflow file.',
468
+ why: `ZaoWu tried to read \`${filePath}\`, but the file was not readable.`,
469
+ fix: 'Check the path and file permissions, then run the command again.',
470
+ });
471
+ }
472
+ return validateWorkflowContent(content, filePath);
473
+ };
474
+ export const planWorkflowContent = (content, filePath = 'workflow.yml') => {
475
+ const validation = validateWorkflowContent(content, filePath);
476
+ const steps = validation.workflow.steps.map((step, index) => {
477
+ const missingVariables = getMissingVariables(step, validation.workflow.variables);
478
+ const actionCount = getStepActionCount(step);
479
+ if (actionCount > 1) {
480
+ const reason = 'Step declares multiple actions; choose exactly one action.';
481
+ return {
482
+ index: index + 1,
483
+ name: step.name,
484
+ action: 'unsupported',
485
+ preview: '',
486
+ blocked: true,
487
+ policyDecision: 'blocked',
488
+ reason,
489
+ operationPlan: createStepOperationPlan({
490
+ action: 'unsupported',
491
+ preview: '',
492
+ blocked: true,
493
+ reason,
494
+ }),
495
+ };
496
+ }
497
+ if (missingVariables.length > 0) {
498
+ const action = step.run
499
+ ? 'shell'
500
+ : step.message
501
+ ? 'message'
502
+ : step.writeFile
503
+ ? 'writeFile'
504
+ : 'unsupported';
505
+ const preview = step.message ?? step.run ?? step.writeFile?.path ?? '';
506
+ const reason = `Missing variable(s): ${missingVariables.join(', ')}`;
507
+ return {
508
+ index: index + 1,
509
+ name: step.name,
510
+ action,
511
+ preview,
512
+ blocked: true,
513
+ requiredPermission: step.run ? 'shell' : step.writeFile ? 'fileWrites' : undefined,
514
+ policyDecision: 'blocked',
515
+ reason,
516
+ operationPlan: createStepOperationPlan({
517
+ action,
518
+ preview,
519
+ blocked: true,
520
+ reason,
521
+ }),
522
+ };
523
+ }
524
+ if (step.run) {
525
+ const shellPolicy = validation.policy.shell;
526
+ const preview = substituteVariables(step.run, validation.workflow.variables);
527
+ const safetyError = checkShellSafety(preview);
528
+ const isBlocked = shellPolicy === 'blocked' || !!safetyError;
529
+ const reason = safetyError
530
+ ? safetyError
531
+ : isBlocked
532
+ ? 'Shell execution is disabled in this foundation version.'
533
+ : undefined;
534
+ return {
535
+ index: index + 1,
536
+ name: step.name,
537
+ action: 'shell',
538
+ preview,
539
+ blocked: isBlocked,
540
+ requiredPermission: 'shell',
541
+ policyDecision: isBlocked ? 'blocked' : 'allowed',
542
+ reason,
543
+ operationPlan: createStepOperationPlan({
544
+ action: 'shell',
545
+ preview,
546
+ blocked: isBlocked,
547
+ reason,
548
+ }),
549
+ };
550
+ }
551
+ if (step.message) {
552
+ const preview = substituteVariables(step.message, validation.workflow.variables);
553
+ return {
554
+ index: index + 1,
555
+ name: step.name,
556
+ action: 'message',
557
+ preview,
558
+ blocked: false,
559
+ policyDecision: 'allowed',
560
+ operationPlan: createStepOperationPlan({
561
+ action: 'message',
562
+ preview,
563
+ blocked: false,
564
+ }),
565
+ };
566
+ }
567
+ if (step.writeFile) {
568
+ const requestedPath = substituteVariables(step.writeFile.path, validation.workflow.variables);
569
+ const contentPreview = substituteVariables(step.writeFile.content, validation.workflow.variables);
570
+ const contentSha256 = hashOperationContent(contentPreview);
571
+ const resolvedPath = resolveWorkflowWritePath(validation.sandbox.workflowDirectory, requestedPath);
572
+ const contentTooLarge = contentPreview.length > MAX_WRITE_FILE_CHARACTERS;
573
+ const isBlocked = validation.policy.fileWrites !== 'prompt' ||
574
+ Boolean(resolvedPath.reason) ||
575
+ contentTooLarge;
576
+ const reason = resolvedPath.reason ??
577
+ (contentTooLarge
578
+ ? `writeFile.content exceeds the ${MAX_WRITE_FILE_CHARACTERS}-character limit.`
579
+ : undefined) ??
580
+ (isBlocked ? 'File writes require permissions.fileWrites: prompt.' : undefined);
581
+ const preview = `write ${requestedPath} (${contentPreview.length} chars)`;
582
+ return {
583
+ index: index + 1,
584
+ name: step.name,
585
+ action: 'writeFile',
586
+ preview,
587
+ targetPath: resolvedPath.targetPath,
588
+ contentLength: contentPreview.length,
589
+ contentSha256,
590
+ blocked: isBlocked,
591
+ requiredPermission: 'fileWrites',
592
+ policyDecision: isBlocked ? 'blocked' : 'allowed',
593
+ reason,
594
+ operationPlan: createStepOperationPlan({
595
+ action: 'writeFile',
596
+ preview,
597
+ targetPath: resolvedPath.targetPath,
598
+ contentLength: contentPreview.length,
599
+ contentSha256,
600
+ blocked: isBlocked,
601
+ reason,
602
+ }),
603
+ };
604
+ }
605
+ const reason = 'Step has no supported action.';
606
+ return {
607
+ index: index + 1,
608
+ name: step.name,
609
+ action: 'unsupported',
610
+ preview: '',
611
+ blocked: true,
612
+ policyDecision: 'blocked',
613
+ reason,
614
+ operationPlan: createStepOperationPlan({
615
+ action: 'unsupported',
616
+ preview: '',
617
+ blocked: true,
618
+ reason,
619
+ }),
620
+ };
621
+ });
622
+ return {
623
+ schemaVersion: AUTO_RESULT_SCHEMA_VERSION,
624
+ status: 'ok',
625
+ filePath,
626
+ workflow: validation.workflow,
627
+ policy: validation.policy,
628
+ sandbox: validation.sandbox,
629
+ steps,
630
+ warnings: validation.warnings,
631
+ };
632
+ };
633
+ export const planWorkflowFile = async (filePath) => {
634
+ let content;
635
+ try {
636
+ content = await readFile(filePath, 'utf8');
637
+ }
638
+ catch {
639
+ throw new ZaoWuError({
640
+ code: 'WORKFLOW_READ_FAILED',
641
+ message: 'Could not read workflow file.',
642
+ why: `ZaoWu tried to read \`${filePath}\`, but the file was not readable.`,
643
+ fix: 'Check the path and file permissions, then run the command again.',
644
+ });
645
+ }
646
+ return planWorkflowContent(content, filePath);
647
+ };
648
+ export const runWorkflowPlan = async (plan, options = {}) => {
649
+ const executed = [];
650
+ const skipped = [];
651
+ const receipts = [];
652
+ for (const step of plan.steps) {
653
+ if (step.blocked) {
654
+ const detail = step.reason ?? 'blocked';
655
+ skipped.push(`${step.name}: ${detail}`);
656
+ receipts.push({
657
+ index: step.index,
658
+ name: step.name,
659
+ action: step.action,
660
+ status: 'blocked',
661
+ detail,
662
+ targetPath: step.targetPath,
663
+ contentSha256: step.contentSha256,
664
+ contentLength: step.contentLength,
665
+ });
666
+ continue;
667
+ }
668
+ if (!options.yes) {
669
+ skipped.push(`${step.name}: dry-run`);
670
+ receipts.push({
671
+ index: step.index,
672
+ name: step.name,
673
+ action: step.action,
674
+ status: 'skipped',
675
+ detail: 'dry-run',
676
+ targetPath: step.targetPath,
677
+ contentSha256: step.contentSha256,
678
+ contentLength: step.contentLength,
679
+ });
680
+ continue;
681
+ }
682
+ if (step.action === 'message') {
683
+ executed.push(`${step.name}: ${step.preview}`);
684
+ receipts.push({
685
+ index: step.index,
686
+ name: step.name,
687
+ action: step.action,
688
+ status: 'executed',
689
+ detail: step.preview,
690
+ });
691
+ }
692
+ else if (step.action === 'writeFile') {
693
+ const workflowStep = plan.workflow.steps[step.index - 1];
694
+ const writeFileAction = workflowStep?.writeFile;
695
+ if (!step.targetPath || !writeFileAction || !step.contentSha256) {
696
+ const detail = 'missing write target';
697
+ skipped.push(`${step.name}: ${detail}`);
698
+ receipts.push({
699
+ index: step.index,
700
+ name: step.name,
701
+ action: step.action,
702
+ status: 'skipped',
703
+ detail,
704
+ targetPath: step.targetPath,
705
+ contentSha256: step.contentSha256,
706
+ contentLength: step.contentLength,
707
+ });
708
+ continue;
709
+ }
710
+ const content = substituteVariables(writeFileAction.content, plan.workflow.variables);
711
+ if (hashOperationContent(content) !== step.contentSha256) {
712
+ throw new ZaoWuError({
713
+ code: 'WORKFLOW_STEP_FAILED',
714
+ message: `Workflow step \`${step.name}\` failed.`,
715
+ why: 'The planned file content no longer matches its content fingerprint.',
716
+ fix: 'Re-run the workflow preview and confirm the current operation plan.',
717
+ });
718
+ }
719
+ const sandboxedTarget = await resolveSandboxedWriteTarget(plan.sandbox.workflowDirectory, step.targetPath, step.name);
720
+ try {
721
+ await writeFile(sandboxedTarget, content, { encoding: 'utf8', flag: 'wx' });
722
+ }
723
+ catch (error) {
724
+ const exists = error.code === 'EEXIST';
725
+ throw new ZaoWuError({
726
+ code: 'WORKFLOW_STEP_FAILED',
727
+ message: `Workflow step \`${step.name}\` failed.`,
728
+ why: exists
729
+ ? `ZaoWu refused to overwrite existing file \`${step.targetPath}\`.`
730
+ : `ZaoWu tried to write \`${step.targetPath}\`, but the file system rejected the write.`,
731
+ fix: exists
732
+ ? 'Choose a new writeFile.path or remove the existing file yourself first.'
733
+ : 'Check the workflow directory permissions, then try again.',
734
+ });
735
+ }
736
+ executed.push(`${step.name}: wrote ${step.targetPath}`);
737
+ receipts.push({
738
+ index: step.index,
739
+ name: step.name,
740
+ action: step.action,
741
+ status: 'executed',
742
+ detail: `wrote ${step.targetPath}`,
743
+ targetPath: step.targetPath,
744
+ contentSha256: step.contentSha256,
745
+ contentLength: step.contentLength,
746
+ });
747
+ }
748
+ }
749
+ return {
750
+ schemaVersion: AUTO_RESULT_SCHEMA_VERSION,
751
+ status: options.yes ? 'ok' : 'preview',
752
+ filePath: plan.filePath,
753
+ workflow: plan.workflow,
754
+ policy: plan.policy,
755
+ sandbox: plan.sandbox,
756
+ executed,
757
+ skipped,
758
+ receipts,
759
+ };
760
+ };
761
+ export const runWorkflowFile = async (filePath, options = {}) => runWorkflowPlan(await planWorkflowFile(filePath), options);
762
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Returns a reason when a shell command matches a high-risk execution pattern. */
2
+ export declare function checkShellSafety(command: string): string | undefined;
3
+ //# sourceMappingURL=shell-safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-safety.d.ts","sourceRoot":"","sources":["../src/shell-safety.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA+CpE"}
@@ -0,0 +1,42 @@
1
+ /** Returns a reason when a shell command matches a high-risk execution pattern. */
2
+ export function checkShellSafety(command) {
3
+ const normalized = command.toLowerCase().trim();
4
+ if (/\brm\s+-[a-z]*[rf]/i.test(normalized) || /\brm\s+--(recursive|force)/i.test(normalized))
5
+ return 'Dangerous command pattern found: `rm` with recursive/force flags.';
6
+ if (/\b(del|erase|rd|rmdir)\b/i.test(normalized) &&
7
+ (/\/[a-z]*s/i.test(normalized) || /\b-(recurse|s)\b/i.test(normalized)))
8
+ return 'Dangerous command pattern found: recursive deletion (`del`, `rd`, or `rmdir` with `/s` or `-recurse`).';
9
+ if (/\bformat\s+[a-z]:/i.test(normalized))
10
+ return 'Dangerous command pattern found: disk formatting (`format`).';
11
+ if (/\bsudo\b/i.test(normalized))
12
+ return 'Dangerous command pattern found: execution with administrative privileges (`sudo`).';
13
+ if (/\bchmod\b/i.test(normalized))
14
+ return 'Dangerous command pattern found: modifying file permissions (`chmod`).';
15
+ if (/\bchown\b/i.test(normalized))
16
+ return 'Dangerous command pattern found: changing file ownership (`chown`).';
17
+ if (/\|\s*(sh|bash|zsh|fish|cmd|powershell|pwsh|iex)\b/i.test(normalized) ||
18
+ /\biex\b/i.test(normalized) ||
19
+ /\binvoke-expression\b/i.test(normalized))
20
+ return 'Dangerous command pattern found: piped shell execution or dynamic command evaluation.';
21
+ if (/\bbase64\b/i.test(normalized) &&
22
+ (/\|\s*(sh|bash|zsh|fish|cmd|powershell|pwsh|iex)\b/i.test(normalized) ||
23
+ /\b--decode\b/i.test(normalized) ||
24
+ /\b-d\b/i.test(normalized)))
25
+ return 'Dangerous command pattern found: decoding base64 payload into shell execution.';
26
+ if (/\/dev\/(tcp|udp)\//i.test(normalized))
27
+ return 'Dangerous command pattern found: network redirect / reverse shell redirection (`/dev/tcp` or `/dev/udp`).';
28
+ if (/\b(nc|netcat|ncat)\b/i.test(normalized) && /\s+-e\b/i.test(normalized))
29
+ return 'Dangerous command pattern found: netcat executable execution flag (`-e` redirection).';
30
+ if (/\b(bash|sh|zsh|dash|ksh)\s+-i\b/i.test(normalized))
31
+ return 'Dangerous command pattern found: interactive shell spawn (`-i` flag).';
32
+ if (/\b(curl|wget)\b/i.test(normalized) &&
33
+ /\b(sh|bash|zsh|cmd|powershell|pwsh)\b/i.test(normalized) &&
34
+ (/\.sh\b/i.test(normalized) || /\.ps1\b/i.test(normalized) || /\.bat\b/i.test(normalized)))
35
+ return 'Dangerous command pattern found: download and sequential script execution.';
36
+ if (/>>?\s*([/\\]etc[/\\]|c:[/\\]windows[/\\])/i.test(normalized))
37
+ return 'Dangerous command pattern found: write redirection to sensitive system directory.';
38
+ if (/\btee\b.*([/\\]etc[/\\]|c:[/\\]windows[/\\])/i.test(normalized))
39
+ return 'Dangerous command pattern found: writing to sensitive system path using tee.';
40
+ return undefined;
41
+ }
42
+ //# sourceMappingURL=shell-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-safety.js","sourceRoot":"","sources":["../src/shell-safety.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1F,OAAO,mEAAmE,CAAC;IAC7E,IACE,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC;QAC5C,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEvE,OAAO,wGAAwG,CAAC;IAClH,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC,OAAO,8DAA8D,CAAC;IACxE,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B,OAAO,qFAAqF,CAAC;IAC/F,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B,OAAO,wEAAwE,CAAC;IAClF,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B,OAAO,qEAAqE,CAAC;IAC/E,IACE,oDAAoD,CAAC,IAAI,CAAC,UAAU,CAAC;QACrE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3B,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC;QAEzC,OAAO,uFAAuF,CAAC;IACjG,IACE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B,CAAC,oDAAoD,CAAC,IAAI,CAAC,UAAU,CAAC;YACpE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7B,OAAO,gFAAgF,CAAC;IAC1F,IAAI,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;QACxC,OAAO,2GAA2G,CAAC;IACrH,IAAI,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QACzE,OAAO,uFAAuF,CAAC;IACjG,IAAI,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC;QACrD,OAAO,uEAAuE,CAAC;IACjF,IACE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC,wCAAwC,CAAC,IAAI,CAAC,UAAU,CAAC;QACzD,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1F,OAAO,4EAA4E,CAAC;IACtF,IAAI,4CAA4C,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/D,OAAO,mFAAmF,CAAC;IAC7F,IAAI,+CAA+C,CAAC,IAAI,CAAC,UAAU,CAAC;QAClE,OAAO,8EAA8E,CAAC;IACxF,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@zaowu-labs/auto",
3
+ "version": "1.0.1",
4
+ "description": "ZaoWu automation workflows",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "build": "tsc -b --pretty false",
24
+ "typecheck": "tsc -b --pretty false",
25
+ "dev": "tsc -b --watch"
26
+ },
27
+ "dependencies": {
28
+ "@zaowu-labs/core": "workspace:*",
29
+ "yaml": "^2.9.0"
30
+ },
31
+ "keywords": [
32
+ "zaowu",
33
+ "automation"
34
+ ],
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/zaowu-labs/zaowu.git",
38
+ "directory": "packages/auto"
39
+ },
40
+ "homepage": "https://github.com/zaowu-labs/zaowu",
41
+ "bugs": "https://github.com/zaowu-labs/zaowu/issues"
42
+ }