@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,149 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
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';
5
+ const getTargetFileSubjects = async (filePath) => {
6
+ try {
7
+ const content = await readFile(filePath, 'utf8');
8
+ return [
9
+ 'target-state:exists',
10
+ `target-content-sha256:${hashOperationContent(content)}`,
11
+ `target-content-length:${content.length}`,
12
+ ];
13
+ }
14
+ catch (error) {
15
+ return error.code === 'ENOENT'
16
+ ? ['target-state:missing']
17
+ : ['target-state:unreadable'];
18
+ }
19
+ };
20
+ export const handlePluginList = async (_args, context) => {
21
+ const listed = await listPlugins({ cwd: context.cwd });
22
+ const human = [
23
+ 'ZaoWu Plugin List',
24
+ '',
25
+ `Directory: ${listed.pluginDir}`,
26
+ '',
27
+ listed.plugins.length > 0
28
+ ? listed.plugins.map((plugin) => `- ${plugin.id} (${plugin.source})`).join('\n')
29
+ : 'No plugins installed.',
30
+ ].join('\n');
31
+ return result(context, listed, human);
32
+ };
33
+ export const handlePluginInstall = async (args, context) => {
34
+ const id = requireTarget(args, 'zw plugin install');
35
+ const source = getValue(context.parsed, '--source');
36
+ const preview = await installPlugin(id, {
37
+ cwd: context.cwd,
38
+ source,
39
+ });
40
+ const pluginPath = path.join(preview.pluginDir, `${preview.plugin.id}.json`);
41
+ const previewManifestContent = `${JSON.stringify(preview.plugin, null, 2)}\n`;
42
+ const targetFileSubjects = await getTargetFileSubjects(pluginPath);
43
+ const operationPlan = createOperationPlan({
44
+ risk: 'medium',
45
+ confirmationRequired: !context.yes,
46
+ subjects: [
47
+ `plugin:${preview.plugin.id}`,
48
+ `source:${preview.plugin.source}`,
49
+ ...createContentOperationSubjects(previewManifestContent),
50
+ ...targetFileSubjects,
51
+ ],
52
+ reads: preview.plugin.source === preview.plugin.id ? [] : [preview.plugin.source],
53
+ writes: [pluginPath],
54
+ notes: ['Plugin installation writes a local manifest only when --yes is provided.'],
55
+ });
56
+ assertOperationPlanFingerprint(context, operationPlan);
57
+ const installed = context.yes
58
+ ? await installPlugin(id, {
59
+ cwd: context.cwd,
60
+ source,
61
+ yes: true,
62
+ })
63
+ : preview;
64
+ const confirmCommand = formatConfirmCommand([
65
+ 'zw',
66
+ 'plugin',
67
+ 'install',
68
+ id,
69
+ ...(source ? ['--source', source] : []),
70
+ '--yes',
71
+ '--plan-fingerprint',
72
+ operationPlan.fingerprint,
73
+ ]);
74
+ const human = [
75
+ 'ZaoWu Plugin Install',
76
+ '',
77
+ `Status: ${installed.status}`,
78
+ `Plugin: ${installed.plugin.id}`,
79
+ `Source: ${installed.plugin.source}`,
80
+ `Wrote file: ${installed.wroteFile ? 'yes' : 'no'}`,
81
+ '',
82
+ formatOperationPlan(operationPlan),
83
+ ...(context.yes
84
+ ? []
85
+ : ['', 'To execute this plugin install plan, run:', ` ${confirmCommand}`]),
86
+ ].join('\n');
87
+ return result(context, withOperationPlan(installed, operationPlan), human);
88
+ };
89
+ export const handlePluginRemove = async (args, context) => {
90
+ const id = requireTarget(args, 'zw plugin remove');
91
+ const preview = await removePlugin(id, {
92
+ cwd: context.cwd,
93
+ });
94
+ const pluginPath = path.join(preview.pluginDir, `${preview.plugin.id}.json`);
95
+ const targetFileSubjects = await getTargetFileSubjects(pluginPath);
96
+ const operationPlan = createOperationPlan({
97
+ risk: 'medium',
98
+ confirmationRequired: !context.yes,
99
+ subjects: [`plugin:${preview.plugin.id}`, ...targetFileSubjects],
100
+ reads: [pluginPath],
101
+ deletes: [pluginPath],
102
+ notes: ['Plugin removal deletes a local manifest only when --yes is provided.'],
103
+ });
104
+ assertOperationPlanFingerprint(context, operationPlan);
105
+ const removed = context.yes
106
+ ? await removePlugin(id, {
107
+ cwd: context.cwd,
108
+ yes: true,
109
+ })
110
+ : preview;
111
+ const human = [
112
+ 'ZaoWu Plugin Remove',
113
+ '',
114
+ `Status: ${removed.status}`,
115
+ `Plugin: ${removed.plugin.id}`,
116
+ `Removed file: ${removed.removedFile ? 'yes' : 'no'}`,
117
+ '',
118
+ formatOperationPlan(operationPlan),
119
+ ...(context.yes
120
+ ? []
121
+ : [
122
+ '',
123
+ 'To execute this plugin removal plan, run:',
124
+ ` zw plugin remove ${id} --yes --plan-fingerprint ${operationPlan.fingerprint}`,
125
+ ]),
126
+ ].join('\n');
127
+ return result(context, withOperationPlan(removed, operationPlan), human);
128
+ };
129
+ export const handlePluginValidate = async (args, context) => {
130
+ const target = requireTarget(args, 'zw plugin validate');
131
+ const validation = await validatePluginSource(target);
132
+ const human = [
133
+ 'ZaoWu Plugin Validate',
134
+ '',
135
+ `Status: ${validation.status}`,
136
+ `Target: ${validation.target}`,
137
+ `Manifest: ${validation.manifestPath ?? 'none'}`,
138
+ '',
139
+ validation.errors.length > 0
140
+ ? ['Errors:', ...validation.errors.map((error) => `- ${error}`)].join('\n')
141
+ : 'Errors: none',
142
+ '',
143
+ validation.warnings.length > 0
144
+ ? ['Warnings:', ...validation.warnings.map((warning) => `- ${warning}`)].join('\n')
145
+ : 'Warnings: none',
146
+ ].join('\n');
147
+ return result(context, validation, human);
148
+ };
149
+ //# sourceMappingURL=plugin-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-handlers.js","sourceRoot":"","sources":["../../src/handlers/plugin-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type DomainActionHandler } from '../handler-utils.js';
2
+ export declare const handleTeachPlan: DomainActionHandler;
3
+ export declare const handleTeachQuiz: DomainActionHandler;
4
+ //# sourceMappingURL=teach-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/teach-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,eAAe,EAAE,mBAW7B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBAiB7B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { createTeachingPlan, createTeachingQuiz } from '@zaowu-labs/teach';
2
+ import { getValue, parsePositiveInteger, result, } from '../handler-utils.js';
3
+ export const handleTeachPlan = async (args, context) => {
4
+ const plan = await createTeachingPlan(args.join(' '));
5
+ const human = [
6
+ 'ZaoWu Teach Plan',
7
+ '',
8
+ `Topic: ${plan.topic}`,
9
+ '',
10
+ ...plan.outline.map((item) => `- ${item}`),
11
+ ].join('\n');
12
+ return result(context, plan, human);
13
+ };
14
+ export const handleTeachQuiz = async (args, context) => {
15
+ const format = getValue(context.parsed, '--format');
16
+ const count = parsePositiveInteger(getValue(context.parsed, '--count'), 3);
17
+ const quiz = await createTeachingQuiz(args.join(' '), { format, count });
18
+ const human = quiz.format === 'canvas-csv'
19
+ ? (quiz.content ?? '')
20
+ : [
21
+ 'ZaoWu Teach Quiz',
22
+ '',
23
+ `Topic: ${quiz.topic}`,
24
+ `Questions: ${quiz.questionCount}`,
25
+ '',
26
+ ...quiz.questions,
27
+ ].join('\n');
28
+ return result(context, quiz, human);
29
+ };
30
+ //# sourceMappingURL=teach-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teach-handlers.js","sourceRoot":"","sources":["../../src/handlers/teach-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,MAAM,GAEP,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,eAAe,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC1E,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG;QACZ,kBAAkB;QAClB,EAAE;QACF,UAAU,IAAI,CAAC,KAAK,EAAE;QACtB,EAAE;QACF,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,KAAK,YAAY;QAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC;YACE,kBAAkB;YAClB,EAAE;YACF,UAAU,IAAI,CAAC,KAAK,EAAE;YACtB,cAAc,IAAI,CAAC,aAAa,EAAE;YAClC,EAAE;YACF,GAAG,IAAI,CAAC,SAAS;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnB,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type DomainActionHandler } from '../handler-utils.js';
2
+ export declare const handleWebInspect: DomainActionHandler;
3
+ export declare const handleWebFetch: DomainActionHandler;
4
+ //# sourceMappingURL=web-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/web-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,gBAAgB,EAAE,mBAwC9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,mBAiD5B,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { fetchWebTarget, inspectWebTarget } from '@zaowu-labs/web';
2
+ import { assertOperationPlanFingerprint, createOperationPlan, formatConfirmCommand, formatObject, formatOperationPlan, requireTarget, result, withOperationPlan, } from '../handler-utils.js';
3
+ export const handleWebInspect = async (args, context) => {
4
+ const target = requireTarget(args, 'zw web inspect');
5
+ const preview = await inspectWebTarget(target);
6
+ const operationPlan = createOperationPlan({
7
+ risk: 'medium',
8
+ confirmationRequired: !context.yes,
9
+ subjects: [`web:${preview.url}`],
10
+ network: [preview.url],
11
+ notes: ['Web inspect sends a HEAD request only when --yes is provided.'],
12
+ });
13
+ assertOperationPlanFingerprint(context, operationPlan);
14
+ const inspected = context.yes ? await inspectWebTarget(target, { yes: true }) : preview;
15
+ const confirmCommand = !context.yes
16
+ ? formatConfirmCommand([
17
+ 'zw',
18
+ 'web',
19
+ 'inspect',
20
+ target,
21
+ '--yes',
22
+ '--plan-fingerprint',
23
+ operationPlan.fingerprint,
24
+ ])
25
+ : undefined;
26
+ const human = [
27
+ 'ZaoWu Web Inspect',
28
+ '',
29
+ `Status: ${inspected.status}`,
30
+ `URL: ${inspected.url}`,
31
+ inspected.statusCode
32
+ ? `HTTP: ${inspected.statusCode} ${inspected.statusText ?? ''}`
33
+ : 'HTTP: not requested',
34
+ '',
35
+ formatOperationPlan(operationPlan),
36
+ ...(confirmCommand ? ['', 'To inspect exactly this URL, run:', ` ${confirmCommand}`] : []),
37
+ '',
38
+ Object.keys(inspected.headers).length > 0 ? formatObject(inspected.headers) : 'Headers: none',
39
+ ].join('\n');
40
+ return result(context, withOperationPlan(inspected, operationPlan), human);
41
+ };
42
+ export const handleWebFetch = async (args, context) => {
43
+ const target = requireTarget(args, 'zw web fetch');
44
+ const preview = await fetchWebTarget(target);
45
+ const operationPlan = createOperationPlan({
46
+ risk: 'medium',
47
+ confirmationRequired: !context.yes,
48
+ subjects: [`web:${preview.url}`],
49
+ network: [preview.url],
50
+ notes: ['Web fetch sends a GET request only when --yes is provided.'],
51
+ });
52
+ assertOperationPlanFingerprint(context, operationPlan);
53
+ const fetched = context.yes ? await fetchWebTarget(target, { yes: true }) : preview;
54
+ const confirmCommand = !context.yes
55
+ ? formatConfirmCommand([
56
+ 'zw',
57
+ 'web',
58
+ 'fetch',
59
+ target,
60
+ '--yes',
61
+ '--plan-fingerprint',
62
+ operationPlan.fingerprint,
63
+ ])
64
+ : undefined;
65
+ const bodyLengthPrefix = fetched.bodyLengthExact === false ? 'at least ' : '';
66
+ const bodyTruncation = fetched.bodyTruncated
67
+ ? ` (preview truncated to ${fetched.maxBodyLength ?? 0})`
68
+ : '';
69
+ const bodySummary = `Body: ${bodyLengthPrefix}${fetched.bodyLength ?? 0} characters${bodyTruncation}`;
70
+ const human = [
71
+ 'ZaoWu Web Fetch',
72
+ '',
73
+ `Status: ${fetched.status}`,
74
+ `URL: ${fetched.url}`,
75
+ fetched.statusCode
76
+ ? `HTTP: ${fetched.statusCode} ${fetched.statusText ?? ''}`
77
+ : 'HTTP: not requested',
78
+ fetched.status === 'ok' ? bodySummary : 'Body: not requested',
79
+ ...(fetched.bodyLengthExact === false
80
+ ? [`Download: stopped at the ${fetched.maxResponseBytes ?? 0}-byte safety limit`]
81
+ : []),
82
+ '',
83
+ formatOperationPlan(operationPlan),
84
+ ...(confirmCommand ? ['', 'To fetch exactly this URL, run:', ` ${confirmCommand}`] : []),
85
+ '',
86
+ fetched.body ?? '',
87
+ ].join('\n');
88
+ return result(context, withOperationPlan(fetched, operationPlan), human);
89
+ };
90
+ //# sourceMappingURL=web-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-handlers.js","sourceRoot":"","sources":["../../src/handlers/web-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,iBAAiB,GAElB,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,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,CAAC,OAAO,CAAC,GAAG;QAClC,QAAQ,EAAE,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACtB,KAAK,EAAE,CAAC,+DAA+D,CAAC;KACzE,CAAC,CAAC;IACH,8BAA8B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACxF,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,GAAG;QACjC,CAAC,CAAC,oBAAoB,CAAC;YACnB,IAAI;YACJ,KAAK;YACL,SAAS;YACT,MAAM;YACN,OAAO;YACP,oBAAoB;YACpB,aAAa,CAAC,WAAW;SAC1B,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,EAAE;QACF,WAAW,SAAS,CAAC,MAAM,EAAE;QAC7B,QAAQ,SAAS,CAAC,GAAG,EAAE;QACvB,SAAS,CAAC,UAAU;YAClB,CAAC,CAAC,SAAS,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE;YAC/D,CAAC,CAAC,qBAAqB;QACzB,EAAE;QACF,mBAAmB,CAAC,aAAa,CAAC;QAClC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,mCAAmC,EAAE,KAAK,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,EAAE;QACF,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe;KAC9F,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;AAEF,MAAM,CAAC,MAAM,cAAc,GAAwB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACzE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,CAAC,OAAO,CAAC,GAAG;QAClC,QAAQ,EAAE,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACtB,KAAK,EAAE,CAAC,4DAA4D,CAAC;KACtE,CAAC,CAAC;IACH,8BAA8B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACpF,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,GAAG;QACjC,CAAC,CAAC,oBAAoB,CAAC;YACnB,IAAI;YACJ,KAAK;YACL,OAAO;YACP,MAAM;YACN,OAAO;YACP,oBAAoB;YACpB,aAAa,CAAC,WAAW;SAC1B,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa;QAC1C,CAAC,CAAC,0BAA0B,OAAO,CAAC,aAAa,IAAI,CAAC,GAAG;QACzD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,SAAS,gBAAgB,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,cAAc,cAAc,EAAE,CAAC;IACtG,MAAM,KAAK,GAAG;QACZ,iBAAiB;QACjB,EAAE;QACF,WAAW,OAAO,CAAC,MAAM,EAAE;QAC3B,QAAQ,OAAO,CAAC,GAAG,EAAE;QACrB,OAAO,CAAC,UAAU;YAChB,CAAC,CAAC,SAAS,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE;YAC3D,CAAC,CAAC,qBAAqB;QACzB,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB;QAC7D,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,KAAK;YACnC,CAAC,CAAC,CAAC,4BAA4B,OAAO,CAAC,gBAAgB,IAAI,CAAC,oBAAoB,CAAC;YACjF,CAAC,CAAC,EAAE,CAAC;QACP,EAAE;QACF,mBAAmB,CAAC,aAAa,CAAC;QAClC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,iCAAiC,EAAE,KAAK,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,EAAE;QACF,OAAO,CAAC,IAAI,IAAI,EAAE;KACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ACTION_HELP: Record<string, Record<string, string>>;
2
+ //# sourceMappingURL=help-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-text.d.ts","sourceRoot":"","sources":["../src/help-text.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqb9D,CAAC"}