@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/index.cjs CHANGED
@@ -1224,6 +1224,216 @@ async function checkCommand(options = {}) {
1224
1224
  }
1225
1225
  __name(checkCommand, "checkCommand");
1226
1226
 
1227
+ // packages/cli/src/commands/agent-doc.ts
1228
+ var import_node_fs5 = require("fs");
1229
+ var import_node_path7 = require("path");
1230
+
1231
+ // packages/cli/src/templates/agent-contract.ts
1232
+ var AGENT_CONTRACT = `# vobs \u6846\u67B6\u5951\u7EA6\uFF08\u5199\u4EE3\u7801\u524D\u5FC5\u8BFB\uFF09
1233
+
1234
+ 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
1235
+ \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
1236
+
1237
+ > \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
1238
+ > \u6BCF\u6761\u540E\u9762\u62EC\u53F7\u91CC\u662F**\u8FDD\u53CD\u65F6\u6846\u67B6\u4F1A\u62A5\u7684\u8BCA\u65AD\u7801**\u3002
1239
+
1240
+ ## \u4E00\u3001\u7EC4\u4EF6\u4F53\u53EA\u6267\u884C\u4E00\u6B21\uFF08run-once\uFF09
1241
+
1242
+ **\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
1243
+
1244
+ - \u274C \`const filtered = list.value.filter(...)\` \u2014\u2014 \u4E00\u6B21\u5FEB\u7167\uFF0C\u4E4B\u540E\u6C38\u4E0D\u66F4\u65B0
1245
+ - \u2705 \u6D3E\u751F\u653E\u8FDB JSX\uFF1A\`<div>{list.value.filter(...).map(render)}</div>\`
1246
+ - \u274C \u7EC4\u4EF6\u4F53\u91CC\u53D6\u5FEB\u7167\u7ED9\u56DE\u8C03\u7528\uFF1A\`const v = name.value; onClick={() => save(v)}\`
1247
+ - \u2705 \u56DE\u8C03\u5185\u91CD\u8BFB\uFF1A\`onClick={() => save(name.value)}\`
1248
+ - \u52A8\u6001 props \u7528 getter \u5F62\u6001\uFF0C\u4E0D\u8981\u4F20\u6C42\u503C\u540E\u7684\u503C
1249
+
1250
+ ## \u4E8C\u3001\u6761\u4EF6\u6E32\u67D3\uFF1A**\u4E0D\u8981\u5728\u7EC4\u4EF6\u4F53\u91CC \`return\` \u5206\u652F**\uFF08\`VOBS_C107\` / \`VOBS_C104\`\uFF09
1251
+
1252
+ \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
1253
+
1254
+ \`\`\`tsx
1255
+ return cond.value ? <A/> : <B/> // \u274C \u51BB\u7ED3
1256
+ if (cond.value) return <A/> // \u274C \u51BB\u7ED3
1257
+ return cond.value ? <A/> : null // \u274C \u51BB\u7ED3
1258
+ \`\`\`
1259
+
1260
+ \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
1261
+
1262
+ | \u573A\u666F | \u7528\u4EC0\u4E48 |
1263
+ |---|---|
1264
+ | **\u8DEF\u7531\u5206\u652F** | **\`<RouterView/>\`**\uFF08\u58F0\u660E\u5F0F\uFF0C\u5185\u90E8 \`insertDynamic\` + \`resetKey\`\uFF09 |
1265
+ | \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 |
1266
+ | \u53EA\u5207\u7C7B\u540D | \`class="base" classList={{ 'is-on': cond.value }}\` |
1267
+ | \u666E\u901A\u6761\u4EF6\u6E32\u67D3 | \u653E\u8FDB **JSX \u5B50\u8282\u70B9\u4F4D\u7F6E**\uFF1A\`<div>{cond.value ? <A/> : <B/>}</div>\` |
1268
+
1269
+ ## \u4E09\u3001effect \u91CC\u4E0D\u8981\u5199\u81EA\u5DF1\u8BFB\u8FC7\u7684\u4FE1\u53F7\uFF08\`VOBS_C210\` / \`VOBS_C211\`\uFF09
1270
+
1271
+ **\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
1272
+
1273
+ - \u274C \`effect(() => { count.value++ })\` \u2014\u2014 \u8BFB+\u5199\u540C\u4E00\u4E2A\u4FE1\u53F7 = \u81EA\u8BA2\u9605\u5FAA\u73AF
1274
+ - \u274C \`effect(() => { if (session.value) void sync() })\` \u2014\u2014 **\u300C\u53EA\u8C03\u4E86\u4E2A\u51FD\u6570\u300D\u4E0D\u7B49\u4E8E\u6CA1\u4F9D\u8D56**\uFF1A
1275
+ \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
1276
+ - \u2705 \u53EA\u60F3\u58F0\u660E\u4F9D\u8D56\uFF1A**\`effect(on(deps, () => { \u2026 }))\`** \u2014\u2014 \u56DE\u8C03\u5728 untrack \u4F5C\u7528\u57DF\u91CC\u8DD1\uFF0C
1277
+ \u5B83\u8C03\u7528\u7684\u51FD\u6570\u78B0\u4EC0\u4E48\u4FE1\u53F7\u90FD\u4E0D\u4F1A\u53CD\u5411\u8BA2\u9605
1278
+ - \u2705 \u6D3E\u751F\u503C\u7528 \`memo\`\uFF0C\u4E0D\u8981"\u8BFB A \u5199 B"
1279
+ - \u515C\u5E95\u624D\u662F \`untrack(() => { X.value = next })\`
1280
+
1281
+ **\u522B\u5728 effect \u91CC\u8C03 async \u51FD\u6570**\uFF08\`VOBS_C106\`\uFF09\uFF1A\`effect\` \u4E0D\u7B49\u5B83\uFF0C
1282
+ \u4E14\u9996\u4E2A \`await\` \u4E4B\u524D\u7684\u90E8\u5206\u662F\u540C\u6B65\u7684\u3002\u5F02\u6B65\u53D6\u6570\u7528 **\`@vobs/resource\`**\u3002
1283
+
1284
+ ## \u56DB\u3001\u5BA2\u6237\u7AEF\u526F\u4F5C\u7528\u4E0E SSR
1285
+
1286
+ - \u5B9A\u65F6\u5668 / \u76D1\u542C / \`matchMedia\` / \`localStorage\` \u2192 **\`onMount\` \u542F\u52A8\u3001\`onDestroy\` \u6E05\u7406**
1287
+ \uFF08**\u4E0D\u8981\u624B\u5199 \`typeof window\` \u5B88\u536B**\uFF09
1288
+ - **\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
1289
+ \u2192 **\`<ClientOnly fallback={\u2026}>\`**\uFF08\u9996\u8F6E\u4E24\u4FA7\u90FD\u6E32\u67D3 fallback\uFF0C\u6C34\u5408\u5BF9\u5F97\u4E0A\uFF09
1290
+ - \u6A21\u5757\u9876\u5C42**\u7981\u6B62** JSX\uFF08\`VOBS_C105\`\uFF09\uFF1Aimport \u6C42\u503C\u65E9\u4E8E\u6E32\u67D3\u5668\u5B89\u88C5
1291
+
1292
+ ## \u4E94\u3001\u5217\u8868\u4E0E\u6570\u636E
1293
+
1294
+ - **\u6570\u7EC4\u66F4\u65B0\u5FC5\u987B\u6362\u5F15\u7528**\uFF1A\`list.value = [...list.value, item]\`\uFF1B
1295
+ \u539F\u5730 \`push\` / \u6539\u5B57\u6BB5**\u4E0D\u89E6\u53D1\u66F4\u65B0**
1296
+ - 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()\`
1297
+ - \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**
1298
+ \uFF08SSG \u5E8F\u5217\u5316\u4F1A\u70B8\uFF0C\u4EA7\u7269\u51FA\u73B0 \`[object Xxx]\` \u65F6\u6846\u67B6\u4F1A\u76F4\u63A5\u62A5\u9519\uFF09
1299
+
1300
+ ## \u516D\u3001\u8F93\u5165
1301
+
1302
+ - **\u6570\u5B57\u8F93\u5165\u8D70 \`parseNumber\`**\uFF08\`<Field type="number">\` \u5DF2\u5185\u7F6E\uFF09\uFF1A
1303
+ \u7A7A\u4E32 / \u975E\u6CD5 / \u8D85\u754C**\u4E0D\u63D0\u4EA4**\uFF0C\u4FDD\u6301\u539F\u503C
1304
+ \u2014\u2014 \`Number('') === 0\` \u4F1A\u628A\u8F93\u5165\u6E05\u6210 0 \u5E76\u6CBF\u8054\u52A8\u94FE\u8DEF\u6E05\u96F6\u5144\u5F1F\u7EF4\u5EA6
1305
+ - \`<select>\` \u7684 value \u76F4\u63A5\u7ED1\uFF0C**\u4E0D\u8981\u5199 ref \u515C\u5E95**\uFF081.5.1+ \u5DF2\u4FEE\u65F6\u5E8F\uFF09
1306
+
1307
+ ## \u4E03\u3001\u56FE\u6807\u4E0E SVG
1308
+
1309
+ - **SVG \u76F4\u63A5\u5199 JSX**\uFF08\`<svg><path/></svg>\`\uFF0C1.7.4+ \u6309 namespace \u521B\u5EFA\u4E0E\u6C34\u5408\uFF09
1310
+ - \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
1311
+
1312
+ ## \u516B\u3001\u63D0\u4EA4\u524D\u81EA\u6D4B
1313
+
1314
+ \`\`\`bash
1315
+ pnpm run check:source # = vobs check\uFF0C\u5168\u4ED3\u4E00\u6B21\u5217\u51FA\u5168\u90E8\u8BCA\u65AD
1316
+ pnpm run check:runtime # \u771F\u5B9E\u6D4F\u89C8\u5668\u9010\u8DEF\u7531\u8DD1\u62A4\u680F\uFF08\u9700 Chrome\uFF09
1317
+ pnpm run check:runtime:interact # \u518D\u70B9\u6240\u6709\u6309\u94AE\u3001\u89E6\u53D1\u6240\u6709\u8F93\u5165
1318
+ \`\`\`
1319
+
1320
+ \`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
1321
+ \`check:source\` \u624D\u662F\u5168\u4ED3\u5165\u53E3\u3002
1322
+
1323
+ ---
1324
+
1325
+ ## \u4E00\u53E5\u8BDD\u901F\u8BB0
1326
+
1327
+ | \u4E3B\u9898 | \u4E00\u53E5\u8BDD |
1328
+ |---|---|
1329
+ | \u7EC4\u4EF6\u4F53 | \u53EA\u8DD1\u4E00\u6B21\uFF0C\u6D3E\u751F\u8FDB JSX |
1330
+ | \u56DE\u8C03 | \u89E6\u53D1\u65F6\u91CD\u8BFB \`.value\` |
1331
+ | \u6761\u4EF6\u6E32\u67D3 | \u8DEF\u7531\u7528 \`RouterView\`\uFF0C\u663E\u9690\u7528 \`Show\`\uFF0C\u522B\u5728\u7EC4\u4EF6\u4F53 return \u5206\u652F |
1332
+ | effect | \u522B\u5199\u81EA\u5DF1\u8BFB\u7684\u4FE1\u53F7\uFF0C\u7528 \`on(deps, fn)\` |
1333
+ | async | \u522B\u585E\u8FDB effect\uFF0C\u7528 \`@vobs/resource\` |
1334
+ | \u5BA2\u6237\u7AEF | \`onMount\`/\`onDestroy\`/\`ClientOnly\`\uFF0C\u522B\u624B\u5199 \`typeof window\` |
1335
+ | \u5217\u8868 | \u6362\u5F15\u7528 |
1336
+ | \u6570\u5B57 | \`parseNumber\` |
1337
+ | SVG | \u76F4\u63A5\u5199 |
1338
+ | \u81EA\u6D4B | \`check:source\` + \`check:runtime\` |
1339
+ `;
1340
+
1341
+ // packages/cli/src/commands/agent-doc.ts
1342
+ var BEGIN = "<!-- vobs:begin \u7531 `vobs agent-doc --write` \u751F\u6210\uFF0C\u8BF7\u52FF\u624B\u6539 -->";
1343
+ var END = "<!-- vobs:end -->";
1344
+ function readContract() {
1345
+ return AGENT_CONTRACT.trim();
1346
+ }
1347
+ __name(readContract, "readContract");
1348
+ function buildAgentsDoc(contract) {
1349
+ return [
1350
+ BEGIN,
1351
+ "",
1352
+ contract,
1353
+ "",
1354
+ END,
1355
+ "",
1356
+ "<!-- \u4EE5\u4E0B\u662F\u672C\u9879\u76EE\u7684\u81EA\u6709\u7EA6\u5B9A\uFF0C`vobs agent-doc --write` \u4E0D\u4F1A\u8986\u76D6\u3002 -->",
1357
+ "",
1358
+ "## \u672C\u9879\u76EE\u7EA6\u5B9A",
1359
+ "",
1360
+ "\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",
1361
+ ""
1362
+ ].join("\n");
1363
+ }
1364
+ __name(buildAgentsDoc, "buildAgentsDoc");
1365
+ function extractBlock(text5) {
1366
+ const start2 = text5.indexOf(BEGIN);
1367
+ const end = text5.indexOf(END);
1368
+ if (start2 < 0 || end < 0 || end < start2) return null;
1369
+ return text5.slice(start2, end + END.length);
1370
+ }
1371
+ __name(extractBlock, "extractBlock");
1372
+ function mergeAgentsDoc(existing, generated) {
1373
+ if (existing === null) return generated;
1374
+ const block = extractBlock(generated);
1375
+ if (block === null) return generated;
1376
+ if (extractBlock(existing) === null) return `${existing.trimEnd()}
1377
+
1378
+ ${block}
1379
+ `;
1380
+ return existing.replace(extractBlock(existing), block);
1381
+ }
1382
+ __name(mergeAgentsDoc, "mergeAgentsDoc");
1383
+ async function agentDocCommand(options = {}) {
1384
+ const root = (0, import_node_path7.resolve)(options.dir ?? process.cwd());
1385
+ const contract = readContract();
1386
+ if (options.body === true) {
1387
+ process.stdout.write(`${contract}
1388
+ `);
1389
+ return;
1390
+ }
1391
+ const generated = buildAgentsDoc(contract);
1392
+ const agentsPath = (0, import_node_path7.resolve)(root, "AGENTS.md");
1393
+ const claudePath = (0, import_node_path7.resolve)(root, "CLAUDE.md");
1394
+ const claudeDoc = "@AGENTS.md\n";
1395
+ if (options.check === true) {
1396
+ const problems = [];
1397
+ if (!(0, import_node_fs5.existsSync)(agentsPath)) {
1398
+ problems.push("AGENTS.md \u4E0D\u5B58\u5728 \u2014\u2014 \u8DD1 `vobs agent-doc --write` \u751F\u6210");
1399
+ } else {
1400
+ const existing = (0, import_node_fs5.readFileSync)(agentsPath, "utf8");
1401
+ const block = extractBlock(existing);
1402
+ if (block === null) {
1403
+ problems.push("AGENTS.md \u91CC\u627E\u4E0D\u5230 vobs \u6807\u8BB0\u5757 \u2014\u2014 \u8DD1 `vobs agent-doc --write` \u8865\u4E0A");
1404
+ } else if (block !== extractBlock(generated)) {
1405
+ 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");
1406
+ }
1407
+ }
1408
+ if (!(0, import_node_fs5.existsSync)(claudePath)) {
1409
+ 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");
1410
+ } else if (!(0, import_node_fs5.readFileSync)(claudePath, "utf8").includes("@AGENTS.md")) {
1411
+ problems.push("CLAUDE.md \u6CA1\u6709\u6307\u5411 @AGENTS.md");
1412
+ }
1413
+ if (problems.length > 0) {
1414
+ console.error("[agent-doc] \u5951\u7EA6\u4E0E\u6846\u67B6\u7248\u672C\u4E0D\u540C\u6B65\uFF1A");
1415
+ for (const problem of problems) console.error(` - ${problem}`);
1416
+ process.exitCode = 1;
1417
+ return;
1418
+ }
1419
+ console.log("[agent-doc] \u5951\u7EA6\u4E0E\u5F53\u524D\u6846\u67B6\u7248\u672C\u4E00\u81F4 \u2713");
1420
+ return;
1421
+ }
1422
+ if (options.write !== true) {
1423
+ process.stdout.write(generated);
1424
+ return;
1425
+ }
1426
+ const existingAgents = (0, import_node_fs5.existsSync)(agentsPath) ? (0, import_node_fs5.readFileSync)(agentsPath, "utf8") : null;
1427
+ (0, import_node_fs5.writeFileSync)(agentsPath, mergeAgentsDoc(existingAgents, generated), "utf8");
1428
+ (0, import_node_fs5.writeFileSync)(claudePath, claudeDoc, "utf8");
1429
+ console.log(`[agent-doc] \u5DF2\u5199\u5165 ${agentsPath}`);
1430
+ console.log(`[agent-doc] \u5DF2\u5199\u5165 ${claudePath}\uFF08\u5185\u5BB9\u4E3A @AGENTS.md\uFF09`);
1431
+ if (existingAgents !== null && extractBlock(existingAgents) === null) {
1432
+ console.log("[agent-doc] \u4F60\u539F\u6709\u7684 AGENTS.md \u5185\u5BB9\u5DF2\u4FDD\u7559\uFF0Cvobs \u5951\u7EA6\u5757\u8FFD\u52A0\u5728\u540E\u3002");
1433
+ }
1434
+ }
1435
+ __name(agentDocCommand, "agentDocCommand");
1436
+
1227
1437
  // packages/cli/src/banner.ts
1228
1438
  var BANNER_LINE1 = "\u{1D5E9}\u{1D5E2}\u{1D5D5}\u{1D5E6} \u{1D5D6}\u{1D5DF}\u{1D5DC}";
1229
1439
  var BANNER_TAGLINE = "Signals First \xB7 Zero Re-renders \xB7 Ultra Lightweight";
@@ -1308,6 +1518,14 @@ function createCLI() {
1308
1518
  includeTests: options.includeTests === true
1309
1519
  });
1310
1520
  });
1521
+ 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) => {
1522
+ await agentDocCommand({
1523
+ dir: options.dir,
1524
+ write: options.write === true,
1525
+ check: options.check === true,
1526
+ body: options.body === true
1527
+ });
1528
+ });
1311
1529
  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) => {
1312
1530
  await dshCommand(action, target, {
1313
1531
  dir: options.dir,
@@ -1343,6 +1561,7 @@ var KNOWN_SUBCOMMANDS = [
1343
1561
  "add",
1344
1562
  "check",
1345
1563
  "dsh",
1564
+ "agent-doc",
1346
1565
  "logo"
1347
1566
  ];
1348
1567