@deployxai/dxc 0.3.1 → 0.3.2
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 +6 -3
- package/dist/index.js +94 -26
- package/package.json +1 -1
- package/skills/dxc-article-outline/SKILL.md +2 -2
- package/skills/dxc-article-write/SKILL.md +2 -2
- package/skills/dxc-content-brief/SKILL.md +2 -2
- package/skills/dxc-content-review/SKILL.md +2 -2
- package/skills/dxc-content-workflow/SKILL.md +2 -2
- package/skills/dxc-knowledge/SKILL.md +2 -2
- package/skills/dxc-memory/SKILL.md +2 -2
- package/skills/dxc-profile/SKILL.md +2 -2
- package/skills/dxc-project-overview/SKILL.md +2 -2
- package/skills/dxc-quote-curator/SKILL.md +2 -2
- package/skills/dxc-research/SKILL.md +2 -2
- package/skills/dxc-title-write/SKILL.md +2 -2
- package/skills/dxc-visual-plan/SKILL.md +2 -2
- package/skills/dxc-wechat-publisher/SKILL.md +9 -7
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DeployX 内容工作台(DxC)
|
|
2
2
|
|
|
3
|
-
这是 DxC 0.3.
|
|
3
|
+
这是 DxC 0.3.2 的官方 CLI 与 14 个领域 Skill。MVP 只支持微信公众号草稿,不正式发布或群发。
|
|
4
4
|
|
|
5
5
|
## 包含内容
|
|
6
6
|
|
|
@@ -17,10 +17,13 @@
|
|
|
17
17
|
安装 14 个 Skill:
|
|
18
18
|
|
|
19
19
|
```text
|
|
20
|
-
dxc skills install --target
|
|
20
|
+
dxc skills install --target codex --json
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
上例是 Codex。WorkBuddy 使用 `--target workbuddy`;只有把 `~/.agents/skills/` 作为一等目录的
|
|
24
|
+
宿主才使用 `--target agents`,其他宿主必须显式提供 `--directory`。安装命令没有默认 target。
|
|
25
|
+
产品说明:https://deployxai.com/dxc/ ,面向宿主 Agent 的安装 Markdown:
|
|
26
|
+
https://deployxai.com/dxc/install.md
|
|
24
27
|
|
|
25
28
|
安装本包不会自动登录微信、绑定公众号、读取历史文章、上传内容或创建草稿。每项敏感操作
|
|
26
29
|
均需要用户在后续流程中明确确认。
|
package/dist/index.js
CHANGED
|
@@ -23266,7 +23266,7 @@ import os3 from "node:os";
|
|
|
23266
23266
|
// apps/cli/package.json
|
|
23267
23267
|
var package_default = {
|
|
23268
23268
|
name: "@dxc/cli",
|
|
23269
|
-
version: "0.3.
|
|
23269
|
+
version: "0.3.2",
|
|
23270
23270
|
private: true,
|
|
23271
23271
|
type: "module",
|
|
23272
23272
|
bin: {
|
|
@@ -27655,7 +27655,33 @@ async function renderCliInvocation(sourceRoot, stagedSkill) {
|
|
|
27655
27655
|
await writeFile(skillFile, rendered, { mode: 384 });
|
|
27656
27656
|
}
|
|
27657
27657
|
function defaultTargetDirectory(homeDirectory, target) {
|
|
27658
|
-
|
|
27658
|
+
const hostDirectory = {
|
|
27659
|
+
agents: ".agents",
|
|
27660
|
+
codex: ".codex",
|
|
27661
|
+
workbuddy: ".workbuddy"
|
|
27662
|
+
}[target];
|
|
27663
|
+
return path4.join(homeDirectory, hostDirectory, "skills");
|
|
27664
|
+
}
|
|
27665
|
+
function resolveInstallDestination(homeDirectory, options) {
|
|
27666
|
+
if (options.directory !== void 0 && options.target !== void 0) {
|
|
27667
|
+
throw new SkillInstallerError(
|
|
27668
|
+
"DXC_SKILL_TARGET_CONFLICT",
|
|
27669
|
+
"Use either --target or --directory, not both"
|
|
27670
|
+
);
|
|
27671
|
+
}
|
|
27672
|
+
if (options.directory !== void 0) {
|
|
27673
|
+
return { input: options.directory, target: "custom" };
|
|
27674
|
+
}
|
|
27675
|
+
if (options.target !== void 0) {
|
|
27676
|
+
return {
|
|
27677
|
+
input: defaultTargetDirectory(homeDirectory, options.target),
|
|
27678
|
+
target: options.target
|
|
27679
|
+
};
|
|
27680
|
+
}
|
|
27681
|
+
throw new SkillInstallerError(
|
|
27682
|
+
"DXC_SKILL_TARGET_REQUIRED",
|
|
27683
|
+
"Specify --target agents|codex|workbuddy, or provide --directory for this host"
|
|
27684
|
+
);
|
|
27659
27685
|
}
|
|
27660
27686
|
var SkillInstaller = class {
|
|
27661
27687
|
constructor(homeDirectory = os.homedir(), currentDirectory = process.cwd(), remove = rm) {
|
|
@@ -27667,11 +27693,12 @@ var SkillInstaller = class {
|
|
|
27667
27693
|
currentDirectory;
|
|
27668
27694
|
remove;
|
|
27669
27695
|
async install(options) {
|
|
27696
|
+
const destination = resolveInstallDestination(this.homeDirectory, options);
|
|
27670
27697
|
const sourceRoot = await findBundledSkills();
|
|
27671
27698
|
const targetRoot = resolveUserPath({
|
|
27672
27699
|
currentDirectory: this.currentDirectory,
|
|
27673
27700
|
homeDirectory: this.homeDirectory,
|
|
27674
|
-
input:
|
|
27701
|
+
input: destination.input
|
|
27675
27702
|
});
|
|
27676
27703
|
await mkdir2(targetRoot, { mode: 448, recursive: true });
|
|
27677
27704
|
const installed = [];
|
|
@@ -27679,9 +27706,9 @@ var SkillInstaller = class {
|
|
|
27679
27706
|
const cleanupWarnings = [];
|
|
27680
27707
|
for (const skill of OFFICIAL_SKILLS) {
|
|
27681
27708
|
const source = path4.join(sourceRoot, skill);
|
|
27682
|
-
const
|
|
27709
|
+
const destination2 = path4.join(targetRoot, skill);
|
|
27683
27710
|
await assertRegularSkillTree(source);
|
|
27684
|
-
const destinationExists = await isDirectory(
|
|
27711
|
+
const destinationExists = await isDirectory(destination2);
|
|
27685
27712
|
if (destinationExists) {
|
|
27686
27713
|
if (!options.force) {
|
|
27687
27714
|
skipped.push(skill);
|
|
@@ -27698,9 +27725,9 @@ var SkillInstaller = class {
|
|
|
27698
27725
|
});
|
|
27699
27726
|
await renderCliInvocation(sourceRoot, stagedSkill);
|
|
27700
27727
|
if (destinationExists) {
|
|
27701
|
-
await rename(
|
|
27728
|
+
await rename(destination2, backup);
|
|
27702
27729
|
}
|
|
27703
|
-
await rename(stagedSkill,
|
|
27730
|
+
await rename(stagedSkill, destination2);
|
|
27704
27731
|
installed.push(skill);
|
|
27705
27732
|
if (destinationExists) {
|
|
27706
27733
|
try {
|
|
@@ -27710,8 +27737,8 @@ var SkillInstaller = class {
|
|
|
27710
27737
|
}
|
|
27711
27738
|
}
|
|
27712
27739
|
} catch (error) {
|
|
27713
|
-
if (!await isDirectory(
|
|
27714
|
-
await rename(backup,
|
|
27740
|
+
if (!await isDirectory(destination2) && await isDirectory(backup)) {
|
|
27741
|
+
await rename(backup, destination2);
|
|
27715
27742
|
}
|
|
27716
27743
|
throw error;
|
|
27717
27744
|
} finally {
|
|
@@ -27727,7 +27754,7 @@ var SkillInstaller = class {
|
|
|
27727
27754
|
directory: targetRoot,
|
|
27728
27755
|
installed,
|
|
27729
27756
|
skipped,
|
|
27730
|
-
target:
|
|
27757
|
+
target: destination.target
|
|
27731
27758
|
};
|
|
27732
27759
|
}
|
|
27733
27760
|
};
|
|
@@ -30079,7 +30106,7 @@ function portablePath(value, label) {
|
|
|
30079
30106
|
}
|
|
30080
30107
|
function isWithin(target, directory) {
|
|
30081
30108
|
const relative = path5.relative(directory, target);
|
|
30082
|
-
return relative === "" || !relative.startsWith(`..${path5.sep}`) && relative !== "..";
|
|
30109
|
+
return relative === "" || !path5.isAbsolute(relative) && !relative.startsWith(`..${path5.sep}`) && relative !== "..";
|
|
30083
30110
|
}
|
|
30084
30111
|
async function regularImage(target) {
|
|
30085
30112
|
let handle;
|
|
@@ -30528,7 +30555,7 @@ function safeFileName(value) {
|
|
|
30528
30555
|
}
|
|
30529
30556
|
function isWithinDirectory(target, directory) {
|
|
30530
30557
|
const relative = path6.relative(directory, target);
|
|
30531
|
-
return relative === "" || !relative.startsWith(`..${path6.sep}`) && relative !== "..";
|
|
30558
|
+
return relative === "" || !path6.isAbsolute(relative) && !relative.startsWith(`..${path6.sep}`) && relative !== "..";
|
|
30532
30559
|
}
|
|
30533
30560
|
function commonDirectory(left, right) {
|
|
30534
30561
|
let directory = path6.resolve(left);
|
|
@@ -31226,7 +31253,9 @@ function writeAgentBrowserEvent(output, event) {
|
|
|
31226
31253
|
output.writeStderr(
|
|
31227
31254
|
`DXC_BROWSER_EVENT ${JSON.stringify({
|
|
31228
31255
|
action: "open-url",
|
|
31256
|
+
dataTransit: "dxc-cloud-to-local-device",
|
|
31229
31257
|
...event,
|
|
31258
|
+
executionLocation: "local-device",
|
|
31230
31259
|
surface: "agent-side-panel"
|
|
31231
31260
|
})}
|
|
31232
31261
|
`
|
|
@@ -31306,6 +31335,8 @@ function writeLocalPreviewBrowserEvent(output, event) {
|
|
|
31306
31335
|
`DXC_BROWSER_EVENT ${JSON.stringify({
|
|
31307
31336
|
action: "open-file",
|
|
31308
31337
|
contentHash: event.contentHash,
|
|
31338
|
+
dataTransit: "local-only",
|
|
31339
|
+
executionLocation: "local-device",
|
|
31309
31340
|
kind: "content-local-preview",
|
|
31310
31341
|
path: event.path,
|
|
31311
31342
|
replaceExisting: true,
|
|
@@ -31384,8 +31415,8 @@ async function safeLocalPreviewOutput(options) {
|
|
|
31384
31415
|
}
|
|
31385
31416
|
return outputFile;
|
|
31386
31417
|
}
|
|
31387
|
-
async function presentDraftPreview(output, openExternal, preview,
|
|
31388
|
-
if (
|
|
31418
|
+
async function presentDraftPreview(output, openExternal, preview, browserMode2) {
|
|
31419
|
+
if (browserMode2 === "agent") {
|
|
31389
31420
|
writeAgentBrowserEvent(output, {
|
|
31390
31421
|
expiresAt: preview.expiresAt,
|
|
31391
31422
|
kind: "wechat-draft-preview",
|
|
@@ -32084,7 +32115,7 @@ var WechatCli = class {
|
|
|
32084
32115
|
}
|
|
32085
32116
|
);
|
|
32086
32117
|
const preview = publishingPreviewLinkSchema.parse(await checkedJson(previewResponse.response));
|
|
32087
|
-
const
|
|
32118
|
+
const browserMode2 = options.browserMode ?? "system";
|
|
32088
32119
|
const templateWarnings = prepared.bundle.templateHint !== void 0 && prepared.bundle.templateHint !== snapshot.templateId ? [
|
|
32089
32120
|
{
|
|
32090
32121
|
code: "DXC_PUBLISHING_TEMPLATE_HINT_MISMATCH",
|
|
@@ -32095,8 +32126,10 @@ var WechatCli = class {
|
|
|
32095
32126
|
const result = {
|
|
32096
32127
|
account,
|
|
32097
32128
|
presentation: {
|
|
32098
|
-
|
|
32099
|
-
|
|
32129
|
+
dataTransit: "dxc-cloud-to-local-device",
|
|
32130
|
+
executionLocation: "local-device",
|
|
32131
|
+
instruction: browserMode2 === "agent" ? "\u8BF7\u5728\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u67E5\u770B\u9884\u89C8\uFF1B\u5BBF\u4E3B\u4E0D\u652F\u6301\u65F6\u56DE\u9000\u7CFB\u7EDF\u9ED8\u8BA4\u6D4F\u89C8\u5668\u3002" : "\u8BF7\u5728\u7CFB\u7EDF\u9ED8\u8BA4\u6D4F\u89C8\u5668\u67E5\u770B\u9884\u89C8\u3002",
|
|
32132
|
+
surface: browserMode2 === "agent" ? "agent-side-panel" : "system-browser"
|
|
32100
32133
|
},
|
|
32101
32134
|
preview,
|
|
32102
32135
|
snapshot,
|
|
@@ -32126,7 +32159,7 @@ var WechatCli = class {
|
|
|
32126
32159
|
`
|
|
32127
32160
|
);
|
|
32128
32161
|
output.writeStderr("\u9884\u89C8\u5DF2\u51C6\u5907\u597D\uFF1B\u4E0D\u8981\u5728\u5BF9\u8BDD\u4E2D\u53D1\u9001\u77ED\u65F6\u94FE\u63A5\u3002\n");
|
|
32129
|
-
await presentDraftPreview(output, this.#openExternal, preview,
|
|
32162
|
+
await presentDraftPreview(output, this.#openExternal, preview, browserMode2);
|
|
32130
32163
|
return result;
|
|
32131
32164
|
}
|
|
32132
32165
|
async refreshDraftPreview(options, output) {
|
|
@@ -33670,6 +33703,9 @@ function deliveryState(value) {
|
|
|
33670
33703
|
if (value["intentId"] !== void 0 && typeof value["intentId"] !== "string") {
|
|
33671
33704
|
return void 0;
|
|
33672
33705
|
}
|
|
33706
|
+
if (value["previewWorkItemId"] !== void 0 && typeof value["previewWorkItemId"] !== "string") {
|
|
33707
|
+
return void 0;
|
|
33708
|
+
}
|
|
33673
33709
|
if (value["version"] === 2 && (typeof value["selectedSnapshotHash"] !== "string" || typeof value["selectedSnapshotId"] !== "string" || !Number.isInteger(value["selectionRevision"]) || typeof value["templateId"] !== "string")) {
|
|
33674
33710
|
return void 0;
|
|
33675
33711
|
}
|
|
@@ -33853,6 +33889,29 @@ var WorkflowDeliveryCli = class {
|
|
|
33853
33889
|
ok: true
|
|
33854
33890
|
};
|
|
33855
33891
|
}
|
|
33892
|
+
if (existingState?.projectId === inputs.project.projectId && existingState.intentId === void 0 && existingState.previewWorkItemId === options.workItemId && existingState.accountId === account.id) {
|
|
33893
|
+
const selected = await this.#selectState(inputs.projectDirectory, existingState);
|
|
33894
|
+
const refreshed = await this.#wechat.refreshDraftPreview(
|
|
33895
|
+
{
|
|
33896
|
+
browserMode: options.browserMode ?? "system",
|
|
33897
|
+
snapshotHash: selected.rootSnapshotHash,
|
|
33898
|
+
snapshotId: selected.rootSnapshotId
|
|
33899
|
+
},
|
|
33900
|
+
this.#output
|
|
33901
|
+
);
|
|
33902
|
+
const refreshedState = { ...selected, previewExpiresAt: refreshed.expiresAt };
|
|
33903
|
+
await this.#writeState(inputs.projectDirectory, refreshedState);
|
|
33904
|
+
const confirmation2 = await this.#workflow.issueDeliveryConfirmation(
|
|
33905
|
+
options.workItemId,
|
|
33906
|
+
deliveryBindingFingerprint(refreshedState),
|
|
33907
|
+
refreshed.expiresAt
|
|
33908
|
+
);
|
|
33909
|
+
return {
|
|
33910
|
+
command: "workflow.preview",
|
|
33911
|
+
data: { ...confirmation2.data, status: "ready" },
|
|
33912
|
+
ok: true
|
|
33913
|
+
};
|
|
33914
|
+
}
|
|
33856
33915
|
await this.#wechat.optimizeDraftImages(
|
|
33857
33916
|
{ projectDirectory: inputs.projectDirectory, visualPlanFile: inputs.visualPlanFile },
|
|
33858
33917
|
this.#output
|
|
@@ -33862,7 +33921,7 @@ var WorkflowDeliveryCli = class {
|
|
|
33862
33921
|
accountId: account.id,
|
|
33863
33922
|
articleFile: inputs.articleFile,
|
|
33864
33923
|
assetsDirectory: inputs.assetsDirectory,
|
|
33865
|
-
browserMode: "
|
|
33924
|
+
browserMode: options.browserMode ?? "system",
|
|
33866
33925
|
coverFile: "auto",
|
|
33867
33926
|
title: inputs.title,
|
|
33868
33927
|
visualPlanFile: inputs.visualPlanFile
|
|
@@ -33873,6 +33932,7 @@ var WorkflowDeliveryCli = class {
|
|
|
33873
33932
|
accountId: account.id,
|
|
33874
33933
|
idempotencyKey: `dxc:${inputs.project.projectId}:${preview.snapshot.snapshotHash}`,
|
|
33875
33934
|
previewExpiresAt: preview.preview.expiresAt,
|
|
33935
|
+
previewWorkItemId: options.workItemId,
|
|
33876
33936
|
projectId: inputs.project.projectId,
|
|
33877
33937
|
retryAttempt: 0,
|
|
33878
33938
|
rootSnapshotHash: preview.snapshot.snapshotHash,
|
|
@@ -33962,7 +34022,7 @@ var WorkflowDeliveryCli = class {
|
|
|
33962
34022
|
if (!preview.viewed) {
|
|
33963
34023
|
const refreshed = await this.#wechat.refreshDraftPreview(
|
|
33964
34024
|
{
|
|
33965
|
-
browserMode: "
|
|
34025
|
+
browserMode: options.browserMode ?? "system",
|
|
33966
34026
|
snapshotHash: state.rootSnapshotHash,
|
|
33967
34027
|
snapshotId: state.rootSnapshotId
|
|
33968
34028
|
},
|
|
@@ -34099,8 +34159,14 @@ function positiveInteger(value, name = "value") {
|
|
|
34099
34159
|
return parsed;
|
|
34100
34160
|
}
|
|
34101
34161
|
function skillInstallTarget(value) {
|
|
34102
|
-
if (value !== "codex" && value !== "workbuddy") {
|
|
34103
|
-
throw new CommanderError(1, "DXC_OPTION_INVALID", "target must be codex or workbuddy");
|
|
34162
|
+
if (value !== "agents" && value !== "codex" && value !== "workbuddy") {
|
|
34163
|
+
throw new CommanderError(1, "DXC_OPTION_INVALID", "target must be agents, codex, or workbuddy");
|
|
34164
|
+
}
|
|
34165
|
+
return value;
|
|
34166
|
+
}
|
|
34167
|
+
function browserMode(value) {
|
|
34168
|
+
if (value !== "agent" && value !== "system") {
|
|
34169
|
+
throw new CommanderError(1, "DXC_OPTION_INVALID", "browser must be agent or system");
|
|
34104
34170
|
}
|
|
34105
34171
|
return value;
|
|
34106
34172
|
}
|
|
@@ -34292,19 +34358,21 @@ function createProgram(context) {
|
|
|
34292
34358
|
})
|
|
34293
34359
|
);
|
|
34294
34360
|
});
|
|
34295
|
-
workflow.command("preview").description("\u51C6\u5907\u5E76\u6253\u5F00\u5F53\u524D\u6587\u7AE0\u7684\u5FAE\u4FE1\u9884\u89C8").requiredOption("--work-item <id>", "\u5F53\u524D delivery \u5DE5\u4F5C\u9879 ID").option("--choice <id>", "\u516C\u4F17\u53F7\u5019\u9009 choiceId").option("--json", "\u8F93\u51FA JSON").action(
|
|
34361
|
+
workflow.command("preview").description("\u51C6\u5907\u5E76\u6253\u5F00\u5F53\u524D\u6587\u7AE0\u7684\u5FAE\u4FE1\u9884\u89C8").requiredOption("--work-item <id>", "\u5F53\u524D delivery \u5DE5\u4F5C\u9879 ID").option("--choice <id>", "\u516C\u4F17\u53F7\u5019\u9009 choiceId").option("--browser <agent|system>", "\u9884\u89C8\u627F\u8F7D\u9762", browserMode, "system").option("--json", "\u8F93\u51FA JSON").action(
|
|
34296
34362
|
async (options) => deliveryAction(
|
|
34297
34363
|
options.json === true,
|
|
34298
34364
|
(delivery) => delivery.preview({
|
|
34365
|
+
browserMode: options.browser,
|
|
34299
34366
|
...options.choice === void 0 ? {} : { choiceId: options.choice },
|
|
34300
34367
|
workItemId: options.workItem
|
|
34301
34368
|
})
|
|
34302
34369
|
)
|
|
34303
34370
|
);
|
|
34304
|
-
workflow.command("deliver").description("\u786E\u8BA4\u5F53\u524D\u9884\u89C8\u5E76\u521B\u5EFA\u5FAE\u4FE1\u516C\u4F17\u53F7\u8349\u7A3F").requiredOption("--work-item <id>", "\u6700\u7EC8\u9884\u89C8\u7ED1\u5B9A\u5DE5\u4F5C\u9879 ID").option("--confirm", "\u786E\u8BA4\u5DF2\u7ECF\u67E5\u770B\u9884\u89C8\u5E76\u521B\u5EFA\u8349\u7A3F").option("--json", "\u8F93\u51FA JSON").action(
|
|
34371
|
+
workflow.command("deliver").description("\u786E\u8BA4\u5F53\u524D\u9884\u89C8\u5E76\u521B\u5EFA\u5FAE\u4FE1\u516C\u4F17\u53F7\u8349\u7A3F").requiredOption("--work-item <id>", "\u6700\u7EC8\u9884\u89C8\u7ED1\u5B9A\u5DE5\u4F5C\u9879 ID").option("--confirm", "\u786E\u8BA4\u5DF2\u7ECF\u67E5\u770B\u9884\u89C8\u5E76\u521B\u5EFA\u8349\u7A3F").option("--browser <agent|system>", "\u9884\u89C8\u5237\u65B0\u627F\u8F7D\u9762", browserMode, "system").option("--json", "\u8F93\u51FA JSON").action(
|
|
34305
34372
|
async (options) => deliveryAction(
|
|
34306
34373
|
options.json === true,
|
|
34307
34374
|
(delivery) => delivery.deliver({
|
|
34375
|
+
browserMode: options.browser,
|
|
34308
34376
|
confirmed: options.confirm === true,
|
|
34309
34377
|
workItemId: options.workItem
|
|
34310
34378
|
})
|
|
@@ -34322,7 +34390,7 @@ function createProgram(context) {
|
|
|
34322
34390
|
)
|
|
34323
34391
|
);
|
|
34324
34392
|
const skills = program2.command("skills").description("\u5B89\u88C5 DxC \u5B98\u65B9 Skills");
|
|
34325
|
-
skills.command("install").description("\u5B89\u88C5 14 \u4E2A\u5B98\u65B9 Skill").option("--target <codex|workbuddy>", "\
|
|
34393
|
+
skills.command("install").description("\u5B89\u88C5 14 \u4E2A\u5B98\u65B9 Skill").option("--target <agents|codex|workbuddy>", "\u660E\u786E\u9009\u62E9\u5BBF\u4E3B Skill \u76EE\u5F55", skillInstallTarget).option("--directory <path>", "\u81EA\u5B9A\u4E49\u5B89\u88C5\u76EE\u5F55").option("--force", "\u66FF\u6362\u540C\u540D DxC Skill").option("--json", "\u8F93\u51FA JSON").action(
|
|
34326
34394
|
async (options) => runAction(context, options.json === true, async () => {
|
|
34327
34395
|
const result = await new SkillInstaller(
|
|
34328
34396
|
context.homeDirectory,
|
|
@@ -34330,7 +34398,7 @@ function createProgram(context) {
|
|
|
34330
34398
|
).install({
|
|
34331
34399
|
...options.directory === void 0 ? {} : { directory: options.directory },
|
|
34332
34400
|
force: options.force === true,
|
|
34333
|
-
target: options.target
|
|
34401
|
+
...options.target === void 0 ? {} : { target: options.target }
|
|
34334
34402
|
});
|
|
34335
34403
|
if (options.json !== true) {
|
|
34336
34404
|
context.writeStderr(`\u5DF2\u5B89\u88C5 ${result.installed.length} \u4E2A DxC Skill\u3002
|
package/package.json
CHANGED
|
@@ -7,8 +7,8 @@ description: 完成 DxC 文章大纲阶段。设计章节逻辑、论证顺序
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
设计大纲前完整读取 [大纲结构方法](references/outline-methods.md),根据内容选择主结构并用自然语言交代章节职责。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 完成 DxC 微信文章正文阶段。结合命名研究、Brief
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
写作前完整读取 [正文写作方法](references/writing-methods.md),落实大纲的自然语言意图,同时保持事实、案例和表达边界。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 完成 DxC 文章 Brief 阶段。判断目标读者、核心问题
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
收敛命题前完整读取 [Brief 方法](references/brief-method.md),把其中的要素当作语义检查清单,不得改造成下游机器 schema(模式)。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 完成 DxC 审校阶段。检查事实、结构、逻辑、表达
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
开始审校前完整读取 [内容审校清单](references/review-checklist.md),只检查当前命名输入能够证明的内容,不推断未提供的画像或真实素材状态。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: DxC 八阶段微信公众号文章总控。用户要从主题创建
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
面向用户只说文章标题、当前要解决的问题、需要选择或确认的内容和最终结果,不展示 npm、CLI、JSON、内部 ID 或本地路径。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 管理 DxC 本地历史文章知识库。只导入用户明确选
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
导入时先向用户说明:内容只在本机建立 SQLite、关键词和中文语义索引,返回 Agent 的有界片段可能被宿主处理;不会上传历史全文。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 管理用户明确陈述的 DxC 本地补充记忆。可新增、
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
- 列出:`dxc memory list --json`。
|
|
14
14
|
- 新增:从用户原话判断领域类型、范围和必要的过期时间,调用 `dxc memory add --content <正文> --kind <类型> --scope <范围> [--expires-at <时间>] --json`。
|
|
@@ -7,8 +7,8 @@ description: 创建、查看或更新 DxC 本地创作画像。通过 CLI 会话
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
用户查看画像时调用 `dxc profile status --json`,用自然语言展示当前值和未设置项,不展示本地路径。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 查看本机 DxC 内容项目总览,帮助用户按项目 ID 选
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
调用 `dxc project list --json`,按标题、当前阶段、是否完成和可用性向用户概括。用户要继续某篇文章时,把选定的 `projectId` 交给 `dxc-content-workflow`;不要按标题模糊猜测,不直接调用完成、预览或交付。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 管理 DxC 本地可追溯金句库。新增、查看、更新、
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
- 查看使用 `dxc knowledge quotes list --json`。
|
|
14
14
|
- 新增使用 `dxc knowledge quotes add --text <正文> ... --json`;按用户提供的信息填写标签、来源、署名、原创/第三方归属和逐字使用规则。
|
|
@@ -7,8 +7,8 @@ description: 完成 DxC 文章的研究阶段。核验来源、比较观点并
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
执行研究前完整读取 [研究方法](references/research-method.md),并按其中的证据边界、来源优先级和安全要求工作。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 完成 DxC 标题阶段。基于正文生成差异化候选并选
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
生成候选前完整读取 [标题方法](references/title-methods.md),只选择正文能够兑现的方法与承诺。
|
|
14
14
|
|
|
@@ -7,8 +7,8 @@ description: 完成 DxC 视觉计划与真实素材阶段。决定封面和正
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
制定计划前完整读取 [视觉计划方法](references/visual-methods.md),先判断视觉是否帮助理解,再选择真实素材的生产方式。
|
|
14
14
|
|
|
@@ -7,15 +7,17 @@ description: 完成 DxC 微信草稿交付阶段。只使用 delivery 工作项
|
|
|
7
7
|
|
|
8
8
|
内部调用 DxC CLI 时固定使用以下入口,不依赖全局 PATH:
|
|
9
9
|
|
|
10
|
-
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
11
|
-
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.
|
|
10
|
+
- Windows:`npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
11
|
+
- macOS/Linux:`npm exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.3.2 -- dxc <参数>`
|
|
12
12
|
|
|
13
13
|
只接受当前 delivery `workItemId`,不得调用底层微信、素材、快照、重试或状态命令。
|
|
14
14
|
|
|
15
|
-
1. `
|
|
16
|
-
2.
|
|
17
|
-
3.
|
|
18
|
-
4. `
|
|
19
|
-
5. `
|
|
15
|
+
1. 先判断当前宿主是否已经验证能实时消费同一运行任务的 `DXC_BROWSER_EVENT`,并在侧边栏内置浏览器打开和继续导航。具备该能力时使用 `agent`;否则使用 `system`。不得仅凭宿主名称猜测能力。
|
|
16
|
+
2. `preview` 动作调用 `dxc workflow preview --work-item <ID> --browser <agent|system> --json`。
|
|
17
|
+
3. 多个公众号时,只向用户展示返回的标签;把用户选择的 `choiceId` 原样传给同一 `workflow preview`,不记忆或猜测账号。
|
|
18
|
+
4. `agent` 模式无法消费或打开事件时,对同一工作项和同一 `choiceId` 改用 `--browser system`;CLI 只刷新同一不可变快照的短时链接。系统浏览器也无法打开时,只向用户提供 CLI 返回的单个短时链接,不写入项目、日志或长期记忆。
|
|
19
|
+
5. CLI 打开最终云端不可变预览后,明确询问用户是否按当前预览创建草稿。只有用户看过并明确同意,才调用 `dxc workflow deliver --work-item <预览绑定ID> --browser <agent|system> --confirm --json`,沿用当前可用浏览器模式。
|
|
20
|
+
6. `completed` 只有在标题、作者、摘要、正文文本、封面和有序正文图片回读全部通过时才报告完成。
|
|
21
|
+
7. `needs-attention` 明确报告“草稿结果待核验,尚未完成”,转述 CLI 给出的字段或素材诊断。始终保留原 intent(意图),不再次创建草稿。
|
|
20
22
|
|
|
21
23
|
预览过期、内容或选择变化时按 CLI 返回的新动作重新预览,不复用旧确认。
|