@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.
- package/README.md +16 -0
- package/dist/args.d.ts +11 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +65 -0
- package/dist/args.js.map +1 -0
- package/dist/command-contracts.d.ts +11 -0
- package/dist/command-contracts.d.ts.map +1 -0
- package/dist/command-contracts.js +74 -0
- package/dist/command-contracts.js.map +1 -0
- package/dist/domain-handlers.d.ts +4 -0
- package/dist/domain-handlers.d.ts.map +1 -0
- package/dist/domain-handlers.js +65 -0
- package/dist/domain-handlers.js.map +1 -0
- package/dist/domains.d.ts +4 -0
- package/dist/domains.d.ts.map +1 -0
- package/dist/domains.js +22 -0
- package/dist/domains.js.map +1 -0
- package/dist/handler-utils.d.ts +59 -0
- package/dist/handler-utils.d.ts.map +1 -0
- package/dist/handler-utils.js +113 -0
- package/dist/handler-utils.js.map +1 -0
- package/dist/handlers/ai-handlers.d.ts +4 -0
- package/dist/handlers/ai-handlers.d.ts.map +1 -0
- package/dist/handlers/ai-handlers.js +159 -0
- package/dist/handlers/ai-handlers.js.map +1 -0
- package/dist/handlers/auto-handlers.d.ts +5 -0
- package/dist/handlers/auto-handlers.d.ts.map +1 -0
- package/dist/handlers/auto-handlers.js +132 -0
- package/dist/handlers/auto-handlers.js.map +1 -0
- package/dist/handlers/config-handlers.d.ts +8 -0
- package/dist/handlers/config-handlers.d.ts.map +1 -0
- package/dist/handlers/config-handlers.js +140 -0
- package/dist/handlers/config-handlers.js.map +1 -0
- package/dist/handlers/data-handlers.d.ts +8 -0
- package/dist/handlers/data-handlers.d.ts.map +1 -0
- package/dist/handlers/data-handlers.js +135 -0
- package/dist/handlers/data-handlers.js.map +1 -0
- package/dist/handlers/dev-handlers.d.ts +6 -0
- package/dist/handlers/dev-handlers.d.ts.map +1 -0
- package/dist/handlers/dev-handlers.js +322 -0
- package/dist/handlers/dev-handlers.js.map +1 -0
- package/dist/handlers/doc-handlers.d.ts +7 -0
- package/dist/handlers/doc-handlers.d.ts.map +1 -0
- package/dist/handlers/doc-handlers.js +133 -0
- package/dist/handlers/doc-handlers.js.map +1 -0
- package/dist/handlers/plugin-handlers.d.ts +6 -0
- package/dist/handlers/plugin-handlers.d.ts.map +1 -0
- package/dist/handlers/plugin-handlers.js +149 -0
- package/dist/handlers/plugin-handlers.js.map +1 -0
- package/dist/handlers/teach-handlers.d.ts +4 -0
- package/dist/handlers/teach-handlers.d.ts.map +1 -0
- package/dist/handlers/teach-handlers.js +30 -0
- package/dist/handlers/teach-handlers.js.map +1 -0
- package/dist/handlers/web-handlers.d.ts +4 -0
- package/dist/handlers/web-handlers.d.ts.map +1 -0
- package/dist/handlers/web-handlers.js +90 -0
- package/dist/handlers/web-handlers.js.map +1 -0
- package/dist/help-text.d.ts +2 -0
- package/dist/help-text.d.ts.map +1 -0
- package/dist/help-text.js +439 -0
- package/dist/help-text.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/option-validation.d.ts +5 -0
- package/dist/option-validation.d.ts.map +1 -0
- package/dist/option-validation.js +111 -0
- package/dist/option-validation.js.map +1 -0
- package/dist/output.d.ts +5 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +11 -0
- package/dist/output.js.map +1 -0
- package/dist/root-doctor.d.ts +22 -0
- package/dist/root-doctor.d.ts.map +1 -0
- package/dist/root-doctor.js +231 -0
- package/dist/root-doctor.js.map +1 -0
- package/dist/root-help.d.ts +8 -0
- package/dist/root-help.d.ts.map +1 -0
- package/dist/root-help.js +130 -0
- package/dist/root-help.js.map +1 -0
- package/dist/root-init.d.ts +4 -0
- package/dist/root-init.d.ts.map +1 -0
- package/dist/root-init.js +87 -0
- package/dist/root-init.js.map +1 -0
- package/dist/run.d.ts +8 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +152 -0
- package/dist/run.js.map +1 -0
- package/dist/system-command.d.ts +3 -0
- package/dist/system-command.d.ts.map +1 -0
- package/dist/system-command.js +27 -0
- package/dist/system-command.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +14 -0
- package/dist/version.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|