@vobs/cli 1.8.5 → 1.8.6

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/dist/start.cjs CHANGED
@@ -1206,6 +1206,216 @@ async function checkCommand(options = {}) {
1206
1206
  }
1207
1207
  __name(checkCommand, "checkCommand");
1208
1208
 
1209
+ // packages/cli/src/commands/agent-doc.ts
1210
+ var import_node_fs5 = require("fs");
1211
+ var import_node_path7 = require("path");
1212
+
1213
+ // packages/cli/src/templates/agent-contract.ts
1214
+ var AGENT_CONTRACT = `# vobs \u6846\u67B6\u5951\u7EA6\uFF08\u5199\u4EE3\u7801\u524D\u5FC5\u8BFB\uFF09
1215
+
1216
+ vobs \u662F**\u7F16\u8BD1\u578B / \u7EC6\u7C92\u5EA6 / \u54CD\u5E94\u5F0F**\u6846\u67B6\uFF0C\u4E0E React \u7684\u5FC3\u667A\u6A21\u578B\u6709\u51E0\u5904**\u6839\u672C\u4E0D\u540C**\u3002
1217
+ \u4E0B\u9762\u7684\u6BCF\u4E00\u6761\u90FD\u6765\u81EA\u771F\u5B9E\u4E8B\u6545\uFF0C**\u8FDD\u53CD\u65F6\u901A\u5E38\u7F16\u8BD1\u901A\u8FC7\u3001\u8FD0\u884C\u671F\u624D\u9519**\u3002
1218
+
1219
+ > \u672C\u6587\u6863\u7531 \`vobs agent-doc\` \u4ECE\u6846\u67B6\u7248\u672C\u751F\u6210 \u2014\u2014 \u4E0D\u8981\u624B\u6539\u751F\u6210\u7684\u5757\u3002
1220
+ > \u6BCF\u6761\u540E\u9762\u62EC\u53F7\u91CC\u662F**\u8FDD\u53CD\u65F6\u6846\u67B6\u4F1A\u62A5\u7684\u8BCA\u65AD\u7801**\u3002
1221
+
1222
+ ## \u4E00\u3001\u7EC4\u4EF6\u4F53\u53EA\u6267\u884C\u4E00\u6B21\uFF08run-once\uFF09
1223
+
1224
+ **\u7EC4\u4EF6\u51FD\u6570\u4F53\u53EA\u5728\u521B\u5EFA\u65F6\u8DD1\u4E00\u6B21**\uFF0C\u4E4B\u540E\u53EA\u6709 JSX \u91CC\u8BA2\u9605\u7684\u4F4D\u7F6E\u66F4\u65B0\u3002
1225
+
1226
+ - \u274C \`const filtered = list.value.filter(...)\` \u2014\u2014 \u4E00\u6B21\u5FEB\u7167\uFF0C\u4E4B\u540E\u6C38\u4E0D\u66F4\u65B0
1227
+ - \u2705 \u6D3E\u751F\u653E\u8FDB JSX\uFF1A\`<div>{list.value.filter(...).map(render)}</div>\`
1228
+ - \u274C \u7EC4\u4EF6\u4F53\u91CC\u53D6\u5FEB\u7167\u7ED9\u56DE\u8C03\u7528\uFF1A\`const v = name.value; onClick={() => save(v)}\`
1229
+ - \u2705 \u56DE\u8C03\u5185\u91CD\u8BFB\uFF1A\`onClick={() => save(name.value)}\`
1230
+ - \u52A8\u6001 props \u7528 getter \u5F62\u6001\uFF0C\u4E0D\u8981\u4F20\u6C42\u503C\u540E\u7684\u503C
1231
+
1232
+ ## \u4E8C\u3001\u6761\u4EF6\u6E32\u67D3\uFF1A**\u4E0D\u8981\u5728\u7EC4\u4EF6\u4F53\u91CC \`return\` \u5206\u652F**\uFF08\`VOBS_C107\` / \`VOBS_C104\`\uFF09
1233
+
1234
+ \u7EC4\u4EF6\u4F53\u91CC\u8BFB\u4FE1\u53F7\u7684 \`return\` \u5728\u6302\u8F7D\u65F6\u56FA\u5316\uFF0C**\u4E09\u79CD\u5199\u6CD5\u574F\u5F97\u4E00\u6A21\u4E00\u6837**\uFF1A
1235
+
1236
+ \`\`\`tsx
1237
+ return cond.value ? <A/> : <B/> // \u274C \u51BB\u7ED3
1238
+ if (cond.value) return <A/> // \u274C \u51BB\u7ED3
1239
+ return cond.value ? <A/> : null // \u274C \u51BB\u7ED3
1240
+ \`\`\`
1241
+
1242
+ \u9876\u5C42 \`return\` \u5904**\u6CA1\u6709 parent/anchor**\uFF0C\u6240\u4EE5\u4E24\u652F\u90FD\u662F JSX \u4E5F\u4E00\u6837\u4E0D\u4F1A\u91CD\u5206\u652F\u3002
1243
+
1244
+ | \u573A\u666F | \u7528\u4EC0\u4E48 |
1245
+ |---|---|
1246
+ | **\u8DEF\u7531\u5206\u652F** | **\`<RouterView/>\`**\uFF08\u58F0\u660E\u5F0F\uFF0C\u5185\u90E8 \`insertDynamic\` + \`resetKey\`\uFF09 |
1247
+ | \u4FDD\u7559\u6302\u8F7D\u3001\u53EA\u5207\u663E\u9690 | **\`<Show when={cond}>\`**\uFF08\u5207 \`hidden\` + \`inert\`\uFF0C\u7126\u70B9/\u6EDA\u52A8/\u5185\u90E8\u72B6\u6001\u4E0D\u4E22\uFF09 |
1248
+ | \u53EA\u5207\u7C7B\u540D | \`class="base" classList={{ 'is-on': cond.value }}\` |
1249
+ | \u666E\u901A\u6761\u4EF6\u6E32\u67D3 | \u653E\u8FDB **JSX \u5B50\u8282\u70B9\u4F4D\u7F6E**\uFF1A\`<div>{cond.value ? <A/> : <B/>}</div>\` |
1250
+
1251
+ ## \u4E09\u3001effect \u91CC\u4E0D\u8981\u5199\u81EA\u5DF1\u8BFB\u8FC7\u7684\u4FE1\u53F7\uFF08\`VOBS_C210\` / \`VOBS_C211\`\uFF09
1252
+
1253
+ **\u4F9D\u8D56\u662F\u81EA\u52A8\u6536\u96C6\u7684**\uFF1Aeffect \u8FD0\u884C\u671F\u95F4\u8BFB\u5230\u7684**\u4EFB\u4F55**\u4FE1\u53F7\u90FD\u4F1A\u53D8\u6210\u4F9D\u8D56\u3002
1254
+
1255
+ - \u274C \`effect(() => { count.value++ })\` \u2014\u2014 \u8BFB+\u5199\u540C\u4E00\u4E2A\u4FE1\u53F7 = \u81EA\u8BA2\u9605\u5FAA\u73AF
1256
+ - \u274C \`effect(() => { if (session.value) void sync() })\` \u2014\u2014 **\u300C\u53EA\u8C03\u4E86\u4E2A\u51FD\u6570\u300D\u4E0D\u7B49\u4E8E\u6CA1\u4F9D\u8D56**\uFF1A
1257
+ \u88AB\u8C03\u51FD\u6570\u5728**\u9996\u4E2A \`await\` \u4E4B\u524D**\u7684\u4EE3\u7801\u662F**\u540C\u6B65\u6267\u884C**\u7684\uFF0C\u5B83\u8BFB\u7684\u4FE1\u53F7\u7B97\u5728 effect \u5934\u4E0A
1258
+ - \u2705 \u53EA\u60F3\u58F0\u660E\u4F9D\u8D56\uFF1A**\`effect(on(deps, () => { \u2026 }))\`** \u2014\u2014 \u56DE\u8C03\u5728 untrack \u4F5C\u7528\u57DF\u91CC\u8DD1\uFF0C
1259
+ \u5B83\u8C03\u7528\u7684\u51FD\u6570\u78B0\u4EC0\u4E48\u4FE1\u53F7\u90FD\u4E0D\u4F1A\u53CD\u5411\u8BA2\u9605
1260
+ - \u2705 \u6D3E\u751F\u503C\u7528 \`memo\`\uFF0C\u4E0D\u8981"\u8BFB A \u5199 B"
1261
+ - \u515C\u5E95\u624D\u662F \`untrack(() => { X.value = next })\`
1262
+
1263
+ **\u522B\u5728 effect \u91CC\u8C03 async \u51FD\u6570**\uFF08\`VOBS_C106\`\uFF09\uFF1A\`effect\` \u4E0D\u7B49\u5B83\uFF0C
1264
+ \u4E14\u9996\u4E2A \`await\` \u4E4B\u524D\u7684\u90E8\u5206\u662F\u540C\u6B65\u7684\u3002\u5F02\u6B65\u53D6\u6570\u7528 **\`@vobs/resource\`**\u3002
1265
+
1266
+ ## \u56DB\u3001\u5BA2\u6237\u7AEF\u526F\u4F5C\u7528\u4E0E SSR
1267
+
1268
+ - \u5B9A\u65F6\u5668 / \u76D1\u542C / \`matchMedia\` / \`localStorage\` \u2192 **\`onMount\` \u542F\u52A8\u3001\`onDestroy\` \u6E05\u7406**
1269
+ \uFF08**\u4E0D\u8981\u624B\u5199 \`typeof window\` \u5B88\u536B**\uFF09
1270
+ - **\u6E32\u67D3\u8F93\u51FA\u672C\u8EAB**\u4F9D\u8D56\u6D4F\u89C8\u5668\uFF08\u7A97\u53E3\u5C3A\u5BF8 / \`localStorage\` \u56DE\u586B / \`Date.now\` / \u968F\u673A\u503C\uFF09
1271
+ \u2192 **\`<ClientOnly fallback={\u2026}>\`**\uFF08\u9996\u8F6E\u4E24\u4FA7\u90FD\u6E32\u67D3 fallback\uFF0C\u6C34\u5408\u5BF9\u5F97\u4E0A\uFF09
1272
+ - \u6A21\u5757\u9876\u5C42**\u7981\u6B62** JSX\uFF08\`VOBS_C105\`\uFF09\uFF1Aimport \u6C42\u503C\u65E9\u4E8E\u6E32\u67D3\u5668\u5B89\u88C5
1273
+
1274
+ ## \u4E94\u3001\u5217\u8868\u4E0E\u6570\u636E
1275
+
1276
+ - **\u6570\u7EC4\u66F4\u65B0\u5FC5\u987B\u6362\u5F15\u7528**\uFF1A\`list.value = [...list.value, item]\`\uFF1B
1277
+ \u539F\u5730 \`push\` / \u6539\u5B57\u6BB5**\u4E0D\u89E6\u53D1\u66F4\u65B0**
1278
+ - JSX **\u5B50\u8282\u70B9\u4F4D\u7F6E**\u53EA\u653E\u56DB\u79CD\u5F62\u6001\uFF1A\u7EC4\u4EF6\u6807\u7B7E / \u5143\u7D20 / \u4E24\u5206\u652F\u4E09\u5143 / \`.map()\`
1279
+ - \u6570\u636E\u7ED3\u6784\u91CC**\u53EA\u5B58\u7EAF\u63CF\u8FF0**\uFF08\u5B57\u7B26\u4E32/\u6837\u5F0F/\u7ED3\u6784\u5B57\u6BB5\uFF09\uFF0C**\u8282\u70B9\u5BF9\u8C61\u522B\u8FDB\u6570\u636E\u5E38\u91CF**
1280
+ \uFF08SSG \u5E8F\u5217\u5316\u4F1A\u70B8\uFF0C\u4EA7\u7269\u51FA\u73B0 \`[object Xxx]\` \u65F6\u6846\u67B6\u4F1A\u76F4\u63A5\u62A5\u9519\uFF09
1281
+
1282
+ ## \u516D\u3001\u8F93\u5165
1283
+
1284
+ - **\u6570\u5B57\u8F93\u5165\u8D70 \`parseNumber\`**\uFF08\`<Field type="number">\` \u5DF2\u5185\u7F6E\uFF09\uFF1A
1285
+ \u7A7A\u4E32 / \u975E\u6CD5 / \u8D85\u754C**\u4E0D\u63D0\u4EA4**\uFF0C\u4FDD\u6301\u539F\u503C
1286
+ \u2014\u2014 \`Number('') === 0\` \u4F1A\u628A\u8F93\u5165\u6E05\u6210 0 \u5E76\u6CBF\u8054\u52A8\u94FE\u8DEF\u6E05\u96F6\u5144\u5F1F\u7EF4\u5EA6
1287
+ - \`<select>\` \u7684 value \u76F4\u63A5\u7ED1\uFF0C**\u4E0D\u8981\u5199 ref \u515C\u5E95**\uFF081.5.1+ \u5DF2\u4FEE\u65F6\u5E8F\uFF09
1288
+
1289
+ ## \u4E03\u3001\u56FE\u6807\u4E0E SVG
1290
+
1291
+ - **SVG \u76F4\u63A5\u5199 JSX**\uFF08\`<svg><path/></svg>\`\uFF0C1.7.4+ \u6309 namespace \u521B\u5EFA\u4E0E\u6C34\u5408\uFF09
1292
+ - \u56FE\u6807\u8981**\u767B\u8BB0\u8FDB\u767D\u540D\u5355**\uFF1B\u67E5\u8868 miss \u65F6 \`@vobs/icon-core\` \u4F1A\u8B66\u544A\u70B9\u540D\uFF08\u4F46\u4ECD\u5E94\u767B\u8BB0\uFF09
1293
+
1294
+ ## \u516B\u3001\u63D0\u4EA4\u524D\u81EA\u6D4B
1295
+
1296
+ \`\`\`bash
1297
+ pnpm run check:source # = vobs check\uFF0C\u5168\u4ED3\u4E00\u6B21\u5217\u51FA\u5168\u90E8\u8BCA\u65AD
1298
+ pnpm run check:runtime # \u771F\u5B9E\u6D4F\u89C8\u5668\u9010\u8DEF\u7531\u8DD1\u62A4\u680F\uFF08\u9700 Chrome\uFF09
1299
+ pnpm run check:runtime:interact # \u518D\u70B9\u6240\u6709\u6309\u94AE\u3001\u89E6\u53D1\u6240\u6709\u8F93\u5165
1300
+ \`\`\`
1301
+
1302
+ \`vite build\` **\u4F1A**\u6253\u5370\u7F16\u8BD1\u671F\u8B66\u544A\uFF08\`C104\`/\`C105\`/\`C106\`/\`C107\`\uFF09\uFF0C\u4F46\u53EA\u8986\u76D6\u5B83\u7F16\u8BD1\u5230\u7684\u6587\u4EF6\uFF1B
1303
+ \`check:source\` \u624D\u662F\u5168\u4ED3\u5165\u53E3\u3002
1304
+
1305
+ ---
1306
+
1307
+ ## \u4E00\u53E5\u8BDD\u901F\u8BB0
1308
+
1309
+ | \u4E3B\u9898 | \u4E00\u53E5\u8BDD |
1310
+ |---|---|
1311
+ | \u7EC4\u4EF6\u4F53 | \u53EA\u8DD1\u4E00\u6B21\uFF0C\u6D3E\u751F\u8FDB JSX |
1312
+ | \u56DE\u8C03 | \u89E6\u53D1\u65F6\u91CD\u8BFB \`.value\` |
1313
+ | \u6761\u4EF6\u6E32\u67D3 | \u8DEF\u7531\u7528 \`RouterView\`\uFF0C\u663E\u9690\u7528 \`Show\`\uFF0C\u522B\u5728\u7EC4\u4EF6\u4F53 return \u5206\u652F |
1314
+ | effect | \u522B\u5199\u81EA\u5DF1\u8BFB\u7684\u4FE1\u53F7\uFF0C\u7528 \`on(deps, fn)\` |
1315
+ | async | \u522B\u585E\u8FDB effect\uFF0C\u7528 \`@vobs/resource\` |
1316
+ | \u5BA2\u6237\u7AEF | \`onMount\`/\`onDestroy\`/\`ClientOnly\`\uFF0C\u522B\u624B\u5199 \`typeof window\` |
1317
+ | \u5217\u8868 | \u6362\u5F15\u7528 |
1318
+ | \u6570\u5B57 | \`parseNumber\` |
1319
+ | SVG | \u76F4\u63A5\u5199 |
1320
+ | \u81EA\u6D4B | \`check:source\` + \`check:runtime\` |
1321
+ `;
1322
+
1323
+ // packages/cli/src/commands/agent-doc.ts
1324
+ var BEGIN = "<!-- vobs:begin \u7531 `vobs agent-doc --write` \u751F\u6210\uFF0C\u8BF7\u52FF\u624B\u6539 -->";
1325
+ var END = "<!-- vobs:end -->";
1326
+ function readContract() {
1327
+ return AGENT_CONTRACT.trim();
1328
+ }
1329
+ __name(readContract, "readContract");
1330
+ function buildAgentsDoc(contract) {
1331
+ return [
1332
+ BEGIN,
1333
+ "",
1334
+ contract,
1335
+ "",
1336
+ END,
1337
+ "",
1338
+ "<!-- \u4EE5\u4E0B\u662F\u672C\u9879\u76EE\u7684\u81EA\u6709\u7EA6\u5B9A\uFF0C`vobs agent-doc --write` \u4E0D\u4F1A\u8986\u76D6\u3002 -->",
1339
+ "",
1340
+ "## \u672C\u9879\u76EE\u7EA6\u5B9A",
1341
+ "",
1342
+ "\uFF08\u5728\u8FD9\u91CC\u5199\u4F60\u81EA\u5DF1\u7684\u76EE\u5F55\u7ED3\u6784\u3001\u547D\u540D\u3001\u4E1A\u52A1\u6D41\u7A0B\u7B49\u89C4\u5219\u3002\uFF09",
1343
+ ""
1344
+ ].join("\n");
1345
+ }
1346
+ __name(buildAgentsDoc, "buildAgentsDoc");
1347
+ function extractBlock(text5) {
1348
+ const start2 = text5.indexOf(BEGIN);
1349
+ const end = text5.indexOf(END);
1350
+ if (start2 < 0 || end < 0 || end < start2) return null;
1351
+ return text5.slice(start2, end + END.length);
1352
+ }
1353
+ __name(extractBlock, "extractBlock");
1354
+ function mergeAgentsDoc(existing, generated) {
1355
+ if (existing === null) return generated;
1356
+ const block = extractBlock(generated);
1357
+ if (block === null) return generated;
1358
+ if (extractBlock(existing) === null) return `${existing.trimEnd()}
1359
+
1360
+ ${block}
1361
+ `;
1362
+ return existing.replace(extractBlock(existing), block);
1363
+ }
1364
+ __name(mergeAgentsDoc, "mergeAgentsDoc");
1365
+ async function agentDocCommand(options = {}) {
1366
+ const root = (0, import_node_path7.resolve)(options.dir ?? process.cwd());
1367
+ const contract = readContract();
1368
+ if (options.body === true) {
1369
+ process.stdout.write(`${contract}
1370
+ `);
1371
+ return;
1372
+ }
1373
+ const generated = buildAgentsDoc(contract);
1374
+ const agentsPath = (0, import_node_path7.resolve)(root, "AGENTS.md");
1375
+ const claudePath = (0, import_node_path7.resolve)(root, "CLAUDE.md");
1376
+ const claudeDoc = "@AGENTS.md\n";
1377
+ if (options.check === true) {
1378
+ const problems = [];
1379
+ if (!(0, import_node_fs5.existsSync)(agentsPath)) {
1380
+ problems.push("AGENTS.md \u4E0D\u5B58\u5728 \u2014\u2014 \u8DD1 `vobs agent-doc --write` \u751F\u6210");
1381
+ } else {
1382
+ const existing = (0, import_node_fs5.readFileSync)(agentsPath, "utf8");
1383
+ const block = extractBlock(existing);
1384
+ if (block === null) {
1385
+ problems.push("AGENTS.md \u91CC\u627E\u4E0D\u5230 vobs \u6807\u8BB0\u5757 \u2014\u2014 \u8DD1 `vobs agent-doc --write` \u8865\u4E0A");
1386
+ } else if (block !== extractBlock(generated)) {
1387
+ problems.push("AGENTS.md \u7684 vobs \u5951\u7EA6\u5757\u4E0E\u5F53\u524D\u6846\u67B6\u7248\u672C\u4E0D\u4E00\u81F4 \u2014\u2014 \u8DD1 `vobs agent-doc --write` \u540C\u6B65");
1388
+ }
1389
+ }
1390
+ if (!(0, import_node_fs5.existsSync)(claudePath)) {
1391
+ problems.push("CLAUDE.md \u4E0D\u5B58\u5728 \u2014\u2014 \u8DD1 `vobs agent-doc --write` \u751F\u6210\uFF08\u5185\u5BB9\u53EA\u9700\u4E00\u884C `@AGENTS.md`\uFF09");
1392
+ } else if (!(0, import_node_fs5.readFileSync)(claudePath, "utf8").includes("@AGENTS.md")) {
1393
+ problems.push("CLAUDE.md \u6CA1\u6709\u6307\u5411 @AGENTS.md");
1394
+ }
1395
+ if (problems.length > 0) {
1396
+ console.error("[agent-doc] \u5951\u7EA6\u4E0E\u6846\u67B6\u7248\u672C\u4E0D\u540C\u6B65\uFF1A");
1397
+ for (const problem of problems) console.error(` - ${problem}`);
1398
+ process.exitCode = 1;
1399
+ return;
1400
+ }
1401
+ console.log("[agent-doc] \u5951\u7EA6\u4E0E\u5F53\u524D\u6846\u67B6\u7248\u672C\u4E00\u81F4 \u2713");
1402
+ return;
1403
+ }
1404
+ if (options.write !== true) {
1405
+ process.stdout.write(generated);
1406
+ return;
1407
+ }
1408
+ const existingAgents = (0, import_node_fs5.existsSync)(agentsPath) ? (0, import_node_fs5.readFileSync)(agentsPath, "utf8") : null;
1409
+ (0, import_node_fs5.writeFileSync)(agentsPath, mergeAgentsDoc(existingAgents, generated), "utf8");
1410
+ (0, import_node_fs5.writeFileSync)(claudePath, claudeDoc, "utf8");
1411
+ console.log(`[agent-doc] \u5DF2\u5199\u5165 ${agentsPath}`);
1412
+ console.log(`[agent-doc] \u5DF2\u5199\u5165 ${claudePath}\uFF08\u5185\u5BB9\u4E3A @AGENTS.md\uFF09`);
1413
+ if (existingAgents !== null && extractBlock(existingAgents) === null) {
1414
+ console.log("[agent-doc] \u4F60\u539F\u6709\u7684 AGENTS.md \u5185\u5BB9\u5DF2\u4FDD\u7559\uFF0Cvobs \u5951\u7EA6\u5757\u8FFD\u52A0\u5728\u540E\u3002");
1415
+ }
1416
+ }
1417
+ __name(agentDocCommand, "agentDocCommand");
1418
+
1209
1419
  // packages/cli/src/banner.ts
1210
1420
  var BANNER_LINE1 = "\u{1D5E9}\u{1D5E2}\u{1D5D5}\u{1D5E6} \u{1D5D6}\u{1D5DF}\u{1D5DC}";
1211
1421
  var BANNER_TAGLINE = "Signals First \xB7 Zero Re-renders \xB7 Ultra Lightweight";
@@ -1290,6 +1500,14 @@ function createCLI() {
1290
1500
  includeTests: options.includeTests === true
1291
1501
  });
1292
1502
  });
1503
+ cli.command("agent-doc", "\u751F\u6210/\u6821\u9A8C\u7ED9 LLM \u8BFB\u7684\u6846\u67B6\u5951\u7EA6\uFF08AGENTS.md + CLAUDE.md\uFF09").option("--dir <dir>", "\u76EE\u6807\u76EE\u5F55", { default: process.cwd() }).option("--write", "\u5199\u5165\u6587\u4EF6\uFF08\u9ED8\u8BA4\u6253\u5230 stdout\uFF09").option("--check", "\u6821\u9A8C\u9879\u76EE\u91CC\u90A3\u4EFD\u662F\u5426\u4E0E\u5F53\u524D\u6846\u67B6\u7248\u672C\u4E00\u81F4\uFF08\u53EF\u8FDB CI\uFF09").option("--body", "\u53EA\u8F93\u51FA\u5951\u7EA6\u6B63\u6587\uFF08\u4E0D\u542B\u6807\u8BB0\u5757\u5916\u8BF4\u660E\uFF09").action(async (options) => {
1504
+ await agentDocCommand({
1505
+ dir: options.dir,
1506
+ write: options.write === true,
1507
+ check: options.check === true,
1508
+ body: options.body === true
1509
+ });
1510
+ });
1293
1511
  cli.command("dsh [action] [target]", "DSH \u63D2\u4EF6\u5DE5\u5177\u94FE\uFF08init / dev / build / check / install\uFF09").option("--dir <dir>", "init\uFF1A\u76EE\u6807\u76EE\u5F55").option("--pm <pm>", "init\uFF1A\u5305\u7BA1\u7406\u5668\uFF08pnpm/npm\uFF09").option("--port <port>", "dev\uFF1A\u9884\u89C8\u7AEF\u53E3", { default: 5199 }).option("--profile <name>", "install\uFF1ADSH profile \u540D", { default: "desktop" }).option("--spec <spec>", "install\uFF1A\u5B8C\u6574\u5B89\u88C5 spec").option("--repo <owner/name>", "install\uFF1AGitHub owner/name").option("--tag <ref>", "install\uFF1AGit tag / \u5206\u652F / commit").option("--subpath <path>", "install\uFF1A\u4ED3\u5E93\u5185\u5B50\u76EE\u5F55").option("--from <path>", "install\uFF1A\u4ECE\u672C\u5730\u76EE\u5F55\u5B89\u88C5").option("--dry", "install\uFF1A\u53EA\u6253\u5370\u547D\u4EE4\uFF0C\u4E0D\u6267\u884C").action(async (action, target, options) => {
1294
1512
  await dshCommand(action, target, {
1295
1513
  dir: options.dir,
@@ -1325,6 +1543,7 @@ var KNOWN_SUBCOMMANDS = [
1325
1543
  "add",
1326
1544
  "check",
1327
1545
  "dsh",
1546
+ "agent-doc",
1328
1547
  "logo"
1329
1548
  ];
1330
1549