@deployxai/dxc 0.1.12 → 0.1.13
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/chunks/{chunk-PX25ABJR.js → chunk-DDKUG5EV.js} +13 -5
- package/dist/chunks/{chunk-BWOC5S2C.js → chunk-RONRJJBC.js} +5 -2
- package/dist/chunks/{knowledge-RAGVN36S.js → knowledge-MNDWLVLM.js} +1 -1
- package/dist/chunks/{monitor-XTYUQFQT.js → monitor-ACOHQYOE.js} +2 -2
- package/dist/index.js +196 -15
- package/package.json +1 -1
- package/skills/dxc-article-outline/SKILL.md +1 -1
- package/skills/dxc-article-write/SKILL.md +1 -1
- package/skills/dxc-content-brief/SKILL.md +1 -1
- package/skills/dxc-content-review/SKILL.md +1 -1
- package/skills/dxc-content-workflow/SKILL.md +5 -2
- package/skills/dxc-content-workflow/references/stage-contract.md +9 -1
- package/skills/dxc-knowledge/SKILL.md +1 -1
- package/skills/dxc-memory/SKILL.md +1 -1
- package/skills/dxc-profile/SKILL.md +1 -1
- package/skills/dxc-quote-curator/SKILL.md +1 -1
- package/skills/dxc-research/SKILL.md +1 -1
- package/skills/dxc-title-write/SKILL.md +1 -1
- package/skills/dxc-visual-plan/SKILL.md +8 -12
- package/skills/dxc-wechat-publisher/SKILL.md +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __dxcCreateRequire } from "node:module"; const require = __dxcCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sourceFetchResultSchema
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RONRJJBC.js";
|
|
5
5
|
|
|
6
6
|
// apps/cli/src/source.ts
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
@@ -1733,12 +1733,14 @@ var MAXIMUM_RSS_BYTES = 2 * 1024 * 1024;
|
|
|
1733
1733
|
var MAXIMUM_REDIRECTS = 3;
|
|
1734
1734
|
var MAXIMUM_RSS_ITEMS = 100;
|
|
1735
1735
|
var SourceCliError = class extends Error {
|
|
1736
|
-
constructor(code, message) {
|
|
1736
|
+
constructor(code, message, recovery) {
|
|
1737
1737
|
super(message);
|
|
1738
1738
|
this.code = code;
|
|
1739
|
+
this.recovery = recovery;
|
|
1739
1740
|
this.name = "SourceCliError";
|
|
1740
1741
|
}
|
|
1741
1742
|
code;
|
|
1743
|
+
recovery;
|
|
1742
1744
|
};
|
|
1743
1745
|
function asArray(value) {
|
|
1744
1746
|
return Array.isArray(value) ? value : value === void 0 ? [] : [value];
|
|
@@ -2043,14 +2045,19 @@ var SourceCli = class {
|
|
|
2043
2045
|
}
|
|
2044
2046
|
async #assertPublicRemote(url) {
|
|
2045
2047
|
if (url.hostname.toLowerCase() === "localhost") {
|
|
2046
|
-
throw new SourceCliError(
|
|
2048
|
+
throw new SourceCliError(
|
|
2049
|
+
"DXC_SOURCE_URL_BLOCKED",
|
|
2050
|
+
`\u6765\u6E90\u57DF\u540D ${url.hostname} \u6307\u5411\u672C\u673A\uFF0C\u5DF2\u5728\u8BF7\u6C42\u524D\u963B\u65AD\u3002`,
|
|
2051
|
+
"\u4E0D\u8981\u7ED5\u8FC7\u672C\u673A\u3001\u79C1\u7F51\u6216\u4E91\u5143\u6570\u636E\u4FDD\u62A4\uFF1B\u82E5\u8FD9\u662F\u516C\u5F00\u8D44\u6599\uFF0C\u8BF7\u786E\u8BA4\u6700\u7EC8 HTTPS URL \u548C\u91CD\u5B9A\u5411\u76EE\u6807\uFF0C\u6216\u7531\u5BBF\u4E3B\u53D7\u63A7\u6D4F\u89C8\u5668\u8BFB\u53D6\u540E\u4F5C\u4E3A\u6709\u6765\u6E90\u8BB0\u5F55\u7684\u672C\u5730\u6750\u6599\u7EE7\u7EED\u3002"
|
|
2052
|
+
);
|
|
2047
2053
|
}
|
|
2048
2054
|
const literalAddress = url.hostname.replaceAll(/^\[|\]$/gu, "");
|
|
2049
2055
|
const literalFamily = isIP(literalAddress);
|
|
2050
2056
|
if (literalFamily !== 0 && isBlockedAddress(literalAddress, literalFamily)) {
|
|
2051
2057
|
throw new SourceCliError(
|
|
2052
2058
|
"DXC_SOURCE_URL_BLOCKED",
|
|
2053
|
-
|
|
2059
|
+
`\u6765\u6E90\u57DF\u540D ${url.hostname} \u4F7F\u7528\u672C\u673A\u3001\u79C1\u7F51\u6216\u4E91\u5143\u6570\u636E\u5730\u5740\uFF0C\u5DF2\u5728\u8BF7\u6C42\u524D\u963B\u65AD\u3002`,
|
|
2060
|
+
"\u4E0D\u8981\u7ED5\u8FC7\u672C\u673A\u3001\u79C1\u7F51\u6216\u4E91\u5143\u6570\u636E\u4FDD\u62A4\uFF1B\u82E5\u8FD9\u662F\u516C\u5F00\u8D44\u6599\uFF0C\u8BF7\u6539\u7528\u5176\u516C\u5F00 HTTPS \u57DF\u540D\uFF0C\u6216\u7531\u5BBF\u4E3B\u53D7\u63A7\u6D4F\u89C8\u5668\u8BFB\u53D6\u540E\u4F5C\u4E3A\u6709\u6765\u6E90\u8BB0\u5F55\u7684\u672C\u5730\u6750\u6599\u7EE7\u7EED\u3002"
|
|
2054
2061
|
);
|
|
2055
2062
|
}
|
|
2056
2063
|
const addresses = await this.#lookup(url.hostname, { all: true, verbatim: true }).catch(() => {
|
|
@@ -2059,7 +2066,8 @@ var SourceCli = class {
|
|
|
2059
2066
|
if (addresses.length === 0 || addresses.some((address) => isBlockedAddress(address.address, address.family))) {
|
|
2060
2067
|
throw new SourceCliError(
|
|
2061
2068
|
"DXC_SOURCE_URL_BLOCKED",
|
|
2062
|
-
|
|
2069
|
+
`\u6765\u6E90\u57DF\u540D ${url.hostname} \u7684 DNS \u7ED3\u679C\u5305\u542B\u672C\u673A\u3001\u79C1\u7F51\u6216\u4E91\u5143\u6570\u636E\u5730\u5740\uFF0C\u5DF2\u5728\u8BF7\u6C42\u524D\u963B\u65AD\u3002`,
|
|
2070
|
+
"\u5148\u6838\u5BF9\u8BE5\u57DF\u540D\u7684\u516C\u5F00 DNS \u548C\u91CD\u5B9A\u5411\u94FE\uFF1B\u4E0D\u8981\u5F3A\u5236\u8DF3\u8FC7\u6821\u9A8C\u3002\u82E5\u5BBF\u4E3B\u7F51\u7EDC\u4F7F\u7528\u79C1\u6709\u4EE3\u7406\u89E3\u6790\uFF0C\u8BF7\u7531\u53D7\u63A7\u6D4F\u89C8\u5668\u8BFB\u53D6\u5E76\u628A\u6709\u754C\u5185\u5BB9\u4F5C\u4E3A\u6709\u6765\u6E90\u8BB0\u5F55\u7684\u672C\u5730\u6750\u6599\u7EE7\u7EED\u3002"
|
|
2063
2071
|
);
|
|
2064
2072
|
}
|
|
2065
2073
|
}
|
|
@@ -319,7 +319,8 @@ var sourceFetchErrorResultSchema = z2.object({
|
|
|
319
319
|
"DXC_SOURCE_URL_BLOCKED",
|
|
320
320
|
"DXC_SOURCE_URL_INVALID"
|
|
321
321
|
]).or(z2.literal("DXC_SOURCE_FAILED")),
|
|
322
|
-
message: z2.string().trim().min(1).max(500)
|
|
322
|
+
message: z2.string().trim().min(1).max(500),
|
|
323
|
+
recovery: z2.string().trim().min(1).max(800).optional()
|
|
323
324
|
}).strict(),
|
|
324
325
|
ok: z2.literal(false)
|
|
325
326
|
}).strict();
|
|
@@ -1494,6 +1495,7 @@ var contentProjectStatusResultSchema = z5.object({
|
|
|
1494
1495
|
recoveryPlan: z5.array(
|
|
1495
1496
|
z5.object({
|
|
1496
1497
|
action: z5.literal("rerun-stage"),
|
|
1498
|
+
command: z5.string().trim().min(1).max(500),
|
|
1497
1499
|
reason: z5.enum([
|
|
1498
1500
|
"artifact-changed",
|
|
1499
1501
|
"artifact-empty",
|
|
@@ -1562,7 +1564,8 @@ var contentProjectCommandSchema = z5.enum([
|
|
|
1562
1564
|
"project.init",
|
|
1563
1565
|
"project.resolve",
|
|
1564
1566
|
"project.status",
|
|
1565
|
-
"project.checkpoint"
|
|
1567
|
+
"project.checkpoint",
|
|
1568
|
+
"project.preview"
|
|
1566
1569
|
]);
|
|
1567
1570
|
var contentProjectErrorResultSchema = z5.object({
|
|
1568
1571
|
command: contentProjectCommandSchema,
|
|
@@ -2,7 +2,7 @@ import { createRequire as __dxcCreateRequire } from "node:module"; const require
|
|
|
2
2
|
import {
|
|
3
3
|
SourceCli,
|
|
4
4
|
SourceCliError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DDKUG5EV.js";
|
|
6
6
|
import {
|
|
7
7
|
CONTENT_MONITOR_SCHEMA_VERSION,
|
|
8
8
|
LocalStateError,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
contentMonitorStatusResultSchema,
|
|
15
15
|
ensurePrivateRegularFile,
|
|
16
16
|
sourceFetchKindSchema
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-RONRJJBC.js";
|
|
18
18
|
|
|
19
19
|
// apps/cli/src/monitor.ts
|
|
20
20
|
import { createHash, randomUUID as systemRandomUUID } from "node:crypto";
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
SourceCli,
|
|
8
8
|
SourceCliError
|
|
9
|
-
} from "./chunks/chunk-
|
|
9
|
+
} from "./chunks/chunk-DDKUG5EV.js";
|
|
10
10
|
import {
|
|
11
11
|
CONTENT_ARTIFACT_KINDS,
|
|
12
12
|
CONTENT_STAGE_INPUTS,
|
|
@@ -83,7 +83,7 @@ import {
|
|
|
83
83
|
wechatRenderResultSchema,
|
|
84
84
|
writePrivateBuffer,
|
|
85
85
|
writePrivateJson
|
|
86
|
-
} from "./chunks/chunk-
|
|
86
|
+
} from "./chunks/chunk-RONRJJBC.js";
|
|
87
87
|
|
|
88
88
|
// node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
|
|
89
89
|
var require_identity = __commonJS({
|
|
@@ -23297,7 +23297,7 @@ import os3 from "node:os";
|
|
|
23297
23297
|
// apps/cli/package.json
|
|
23298
23298
|
var package_default = {
|
|
23299
23299
|
name: "@dxc/cli",
|
|
23300
|
-
version: "0.1.
|
|
23300
|
+
version: "0.1.13",
|
|
23301
23301
|
private: true,
|
|
23302
23302
|
type: "module",
|
|
23303
23303
|
bin: {
|
|
@@ -30145,6 +30145,19 @@ async function stageArtifactRequiresUserConfirmation(options) {
|
|
|
30145
30145
|
const value = recordValue(parseFrontmatter2(source).value);
|
|
30146
30146
|
return normalizedOrigin(value?.["origin"]) === "hotspot" && value?.["researchMode"] === "fact-only" && value?.["externalOpinionStatus"] === "user-skipped";
|
|
30147
30147
|
}
|
|
30148
|
+
async function selectedTitleForLocalPreview(options) {
|
|
30149
|
+
const source = (await readRegularFile(
|
|
30150
|
+
insideProject(options.directory, options.manifest.artifacts.titles),
|
|
30151
|
+
MAXIMUM_ARTIFACT_BYTES
|
|
30152
|
+
)).toString("utf8");
|
|
30153
|
+
const parsed = titlesStageArtifactFrontmatterSchema.safeParse(parseFrontmatter2(source).value);
|
|
30154
|
+
if (!parsed.success || parsed.data.selectedTitle === null) {
|
|
30155
|
+
throw new StageArtifactValidationError(
|
|
30156
|
+
parsed.success ? ["selectedTitle: \u672C\u5730\u9884\u89C8\u9700\u8981\u5DF2\u786E\u8BA4\u6807\u9898"] : issuePaths2(parsed.error.issues)
|
|
30157
|
+
);
|
|
30158
|
+
}
|
|
30159
|
+
return parsed.data.selectedTitle;
|
|
30160
|
+
}
|
|
30148
30161
|
async function visualPlanArtifactPhase(options) {
|
|
30149
30162
|
const source = (await readRegularFile(
|
|
30150
30163
|
insideProject(options.directory, options.manifest.artifacts["visual-plan"]),
|
|
@@ -30156,6 +30169,19 @@ async function visualPlanArtifactPhase(options) {
|
|
|
30156
30169
|
}
|
|
30157
30170
|
return "planned" in parsed.data && parsed.data.planned === true ? "generation-proposal" : "materialized";
|
|
30158
30171
|
}
|
|
30172
|
+
async function visualPlanAssetsDirectory(options) {
|
|
30173
|
+
const source = (await readRegularFile(
|
|
30174
|
+
insideProject(options.directory, options.manifest.artifacts["visual-plan"]),
|
|
30175
|
+
MAXIMUM_ARTIFACT_BYTES
|
|
30176
|
+
)).toString("utf8");
|
|
30177
|
+
const parsed = visualPlanStageArtifactFrontmatterSchema.safeParse(parseFrontmatter2(source).value);
|
|
30178
|
+
if (!parsed.success || !("coverAsset" in parsed.data)) {
|
|
30179
|
+
throw new StageArtifactValidationError(
|
|
30180
|
+
parsed.success ? ["visual-plan: \u56FE\u7247\u4ECD\u5904\u4E8E\u751F\u6210\u8BA1\u5212\u9636\u6BB5"] : issuePaths2(parsed.error.issues)
|
|
30181
|
+
);
|
|
30182
|
+
}
|
|
30183
|
+
return parsed.data.assetsDirectory;
|
|
30184
|
+
}
|
|
30159
30185
|
|
|
30160
30186
|
// apps/cli/src/project.ts
|
|
30161
30187
|
var MANIFEST_NAME = "dxc.project.json";
|
|
@@ -30504,6 +30530,25 @@ async function findNearestProjectDirectory(start) {
|
|
|
30504
30530
|
candidate = parent;
|
|
30505
30531
|
}
|
|
30506
30532
|
}
|
|
30533
|
+
async function locateProjectDirectory(currentDirectory, homeDirectory, directoryInput) {
|
|
30534
|
+
const start = projectDirectory(currentDirectory, homeDirectory, directoryInput);
|
|
30535
|
+
if (directoryInput !== void 0) {
|
|
30536
|
+
return start;
|
|
30537
|
+
}
|
|
30538
|
+
const nearest = await findNearestProjectDirectory(start);
|
|
30539
|
+
if (nearest === void 0) {
|
|
30540
|
+
throw new ProjectCliError(
|
|
30541
|
+
"DXC_PROJECT_NOT_FOUND",
|
|
30542
|
+
"\u5F53\u524D\u76EE\u5F55\u53CA\u5176\u4E0A\u7EA7\u76EE\u5F55\u4E2D\u6CA1\u6709 dxc.project.json\u3002",
|
|
30543
|
+
{
|
|
30544
|
+
fields: ["directory"],
|
|
30545
|
+
reason: "PROJECT_ROOT_NOT_FOUND",
|
|
30546
|
+
recovery: "\u8FDB\u5165\u5185\u5BB9\u9879\u76EE\u76EE\u5F55\u540E\u91CD\u8BD5\uFF0C\u6216\u663E\u5F0F\u4F20\u5165 --directory <\u9879\u76EE\u6839\u76EE\u5F55>\uFF1B\u4E5F\u53EF\u4EE5\u5148\u8FD0\u884C dxc project resolve --json \u5B9A\u4F4D\u5DF2\u6709\u9879\u76EE\u3002"
|
|
30547
|
+
}
|
|
30548
|
+
);
|
|
30549
|
+
}
|
|
30550
|
+
return nearest;
|
|
30551
|
+
}
|
|
30507
30552
|
var ProjectCli = class {
|
|
30508
30553
|
#currentDirectory;
|
|
30509
30554
|
#homeDirectory;
|
|
@@ -30708,6 +30753,7 @@ var ProjectCli = class {
|
|
|
30708
30753
|
(inspection) => inspection.state === "stale" ? [
|
|
30709
30754
|
{
|
|
30710
30755
|
action: "rerun-stage",
|
|
30756
|
+
command: `dxc project checkpoint ${inspection.stage} --status running --summary "\u91CD\u65B0\u6838\u9A8C ${inspection.stage} \u9636\u6BB5" --execution-location ${inspection.checkpoint.execution.location} --data-transit ${inspection.checkpoint.execution.dataTransit} --json`,
|
|
30711
30757
|
reason: inspection.reason,
|
|
30712
30758
|
stage: inspection.stage
|
|
30713
30759
|
}
|
|
@@ -30739,11 +30785,78 @@ var ProjectCli = class {
|
|
|
30739
30785
|
});
|
|
30740
30786
|
}
|
|
30741
30787
|
async status(directoryInput) {
|
|
30742
|
-
const directory =
|
|
30788
|
+
const directory = await locateProjectDirectory(
|
|
30789
|
+
this.#currentDirectory,
|
|
30790
|
+
this.#homeDirectory,
|
|
30791
|
+
directoryInput
|
|
30792
|
+
);
|
|
30743
30793
|
const result = await this.#statusAtDirectory(directory);
|
|
30744
30794
|
await this.#rememberProject(directory, result.data.manifest, this.#now().toISOString());
|
|
30745
30795
|
return result;
|
|
30746
30796
|
}
|
|
30797
|
+
async localPreviewInputs(directoryInput, outputInput) {
|
|
30798
|
+
const directory = await locateProjectDirectory(
|
|
30799
|
+
this.#currentDirectory,
|
|
30800
|
+
this.#homeDirectory,
|
|
30801
|
+
directoryInput
|
|
30802
|
+
);
|
|
30803
|
+
const status = await this.#statusAtDirectory(directory);
|
|
30804
|
+
for (const stage of ["article", "titles", "visual-plan"]) {
|
|
30805
|
+
const inspection = status.data.checkpoints.find((candidate) => candidate.stage === stage);
|
|
30806
|
+
if (inspection === void 0 || inspection.state !== "valid" || inspection.checkpoint.status !== "completed") {
|
|
30807
|
+
throw new ProjectCliError(
|
|
30808
|
+
"DXC_PROJECT_STAGE_INVALID",
|
|
30809
|
+
`\u672C\u5730\u9884\u89C8\u8981\u6C42 ${stage} \u9636\u6BB5\u5DF2\u5B8C\u6210\u4E14\u672A\u5931\u6548\u3002`,
|
|
30810
|
+
{
|
|
30811
|
+
fields: [stage],
|
|
30812
|
+
reason: "LOCAL_PREVIEW_STAGE_NOT_READY",
|
|
30813
|
+
recovery: `\u5148\u6309 project status \u7684 nextStage/recoveryPlan \u5B8C\u6210\u6216\u91CD\u65B0\u6838\u9A8C ${stage} \u9636\u6BB5\uFF0C\u518D\u751F\u6210\u672C\u5730\u9884\u89C8\u3002`,
|
|
30814
|
+
stage
|
|
30815
|
+
}
|
|
30816
|
+
);
|
|
30817
|
+
}
|
|
30818
|
+
}
|
|
30819
|
+
let title;
|
|
30820
|
+
try {
|
|
30821
|
+
title = await selectedTitleForLocalPreview({ directory, manifest: status.data.manifest });
|
|
30822
|
+
} catch (error) {
|
|
30823
|
+
if (error instanceof StageArtifactValidationError) {
|
|
30824
|
+
throw new ProjectCliError("DXC_PROJECT_STAGE_INVALID", error.message, {
|
|
30825
|
+
fields: error.issues,
|
|
30826
|
+
reason: "LOCAL_PREVIEW_TITLE_INVALID",
|
|
30827
|
+
recovery: "\u91CD\u65B0\u5B8C\u6210 titles \u9636\u6BB5\u5E76\u786E\u8BA4\u6700\u7EC8\u6807\u9898\u540E\u518D\u751F\u6210\u672C\u5730\u9884\u89C8\u3002",
|
|
30828
|
+
stage: "titles"
|
|
30829
|
+
});
|
|
30830
|
+
}
|
|
30831
|
+
throw error;
|
|
30832
|
+
}
|
|
30833
|
+
let assetsDirectory;
|
|
30834
|
+
try {
|
|
30835
|
+
assetsDirectory = insideProject2(
|
|
30836
|
+
directory,
|
|
30837
|
+
await visualPlanAssetsDirectory({ directory, manifest: status.data.manifest })
|
|
30838
|
+
);
|
|
30839
|
+
} catch (error) {
|
|
30840
|
+
if (error instanceof StageArtifactValidationError) {
|
|
30841
|
+
throw new ProjectCliError("DXC_PROJECT_STAGE_INVALID", error.message, {
|
|
30842
|
+
fields: error.issues,
|
|
30843
|
+
reason: "LOCAL_PREVIEW_VISUAL_PLAN_INVALID",
|
|
30844
|
+
recovery: "\u91CD\u65B0\u5B8C\u6210 visual-plan \u9636\u6BB5\u5E76\u786E\u4FDD\u771F\u5B9E PNG/JPEG \u7D20\u6750\u5DF2\u843D\u76D8\u540E\u518D\u751F\u6210\u672C\u5730\u9884\u89C8\u3002",
|
|
30845
|
+
stage: "visual-plan"
|
|
30846
|
+
});
|
|
30847
|
+
}
|
|
30848
|
+
throw error;
|
|
30849
|
+
}
|
|
30850
|
+
const outputFile = outputInput === void 0 ? insideProject2(directory, ".dxc/previews/visual-preview.html") : path4.isAbsolute(outputInput) ? outputInput : path4.resolve(directory, outputInput);
|
|
30851
|
+
return {
|
|
30852
|
+
articleFile: insideProject2(directory, status.data.manifest.artifacts.article),
|
|
30853
|
+
assetsDirectory,
|
|
30854
|
+
outputFile,
|
|
30855
|
+
projectDirectory: directory,
|
|
30856
|
+
title,
|
|
30857
|
+
visualPlanFile: insideProject2(directory, status.data.manifest.artifacts["visual-plan"])
|
|
30858
|
+
};
|
|
30859
|
+
}
|
|
30747
30860
|
async resolve(queryInput, directoryInput) {
|
|
30748
30861
|
const query = queryInput?.trim();
|
|
30749
30862
|
if (query !== void 0 && (query.length === 0 || query.length > 160)) {
|
|
@@ -30873,7 +30986,7 @@ var ProjectCli = class {
|
|
|
30873
30986
|
`\u9636\u6BB5 ${stage.data} \u5FC5\u987B\u7531 ${expectedSkill.name}@${expectedSkill.version} \u5199\u5165\u68C0\u67E5\u70B9\u3002`
|
|
30874
30987
|
);
|
|
30875
30988
|
}
|
|
30876
|
-
const directory =
|
|
30989
|
+
const directory = await locateProjectDirectory(
|
|
30877
30990
|
this.#currentDirectory,
|
|
30878
30991
|
this.#homeDirectory,
|
|
30879
30992
|
options.directory
|
|
@@ -30999,7 +31112,13 @@ var ProjectCli = class {
|
|
|
30999
31112
|
if (effectiveStatus === "awaiting-user" && (waitingFor === void 0 || waitingFor.length === 0) || effectiveStatus !== "awaiting-user" && waitingFor !== void 0) {
|
|
31000
31113
|
throw new ProjectCliError(
|
|
31001
31114
|
"DXC_PROJECT_STAGE_INVALID",
|
|
31002
|
-
"
|
|
31115
|
+
effectiveStatus === "awaiting-user" ? "awaiting-user \u68C0\u67E5\u70B9\u7F3A\u5C11\u7B49\u5F85\u7528\u6237\u56DE\u7B54\u7684\u95EE\u9898\u3002" : "\u53EA\u6709 awaiting-user \u68C0\u67E5\u70B9\u53EF\u4EE5\u643A\u5E26 waiting-for\u3002",
|
|
31116
|
+
{
|
|
31117
|
+
fields: ["waitingFor"],
|
|
31118
|
+
reason: effectiveStatus === "awaiting-user" ? "WAITING_FOR_REQUIRED" : "WAITING_FOR_NOT_ALLOWED",
|
|
31119
|
+
recovery: effectiveStatus === "awaiting-user" ? "\u8865\u5145 --waiting-for <\u9700\u8981\u7528\u6237\u56DE\u7B54\u7684\u95EE\u9898> \u540E\u91CD\u8BD5\uFF1BCLI \u4E0D\u4F1A\u5728\u53C2\u6570\u65E0\u6548\u65F6\u5199\u5165\u68C0\u67E5\u70B9\u3002" : "\u79FB\u9664 --waiting-for\uFF0C\u6216\u628A\u76EE\u6807\u72B6\u6001\u6539\u4E3A awaiting-user\u3002",
|
|
31120
|
+
stage: stage.data
|
|
31121
|
+
}
|
|
31003
31122
|
);
|
|
31004
31123
|
}
|
|
31005
31124
|
const needsArtifact = effectiveStatus === "awaiting-user" || effectiveStatus === "completed" || confirmingExternalAuthorization;
|
|
@@ -33186,7 +33305,7 @@ var WechatCli = class {
|
|
|
33186
33305
|
);
|
|
33187
33306
|
}
|
|
33188
33307
|
const result = {
|
|
33189
|
-
command: "wechat.draft.preview-local",
|
|
33308
|
+
command: options.resultCommand ?? "wechat.draft.preview-local",
|
|
33190
33309
|
data: {
|
|
33191
33310
|
contentHash: preview.hash,
|
|
33192
33311
|
inlineImageCount: prepared.inlineAssets.length,
|
|
@@ -34103,7 +34222,7 @@ async function loadKnowledgeModule() {
|
|
|
34103
34222
|
Reflect.apply(emitWarning, process, [warning2, ...arguments_]);
|
|
34104
34223
|
});
|
|
34105
34224
|
try {
|
|
34106
|
-
return await import("./chunks/knowledge-
|
|
34225
|
+
return await import("./chunks/knowledge-MNDWLVLM.js");
|
|
34107
34226
|
} finally {
|
|
34108
34227
|
process.emitWarning = emitWarning;
|
|
34109
34228
|
}
|
|
@@ -34117,7 +34236,7 @@ async function loadMonitorModule() {
|
|
|
34117
34236
|
Reflect.apply(emitWarning, process, [warning2, ...arguments_]);
|
|
34118
34237
|
});
|
|
34119
34238
|
try {
|
|
34120
|
-
return await import("./chunks/monitor-
|
|
34239
|
+
return await import("./chunks/monitor-ACOHQYOE.js");
|
|
34121
34240
|
} finally {
|
|
34122
34241
|
process.emitWarning = emitWarning;
|
|
34123
34242
|
}
|
|
@@ -34234,6 +34353,47 @@ async function runProjectAction(context, command, json, action) {
|
|
|
34234
34353
|
);
|
|
34235
34354
|
}
|
|
34236
34355
|
}
|
|
34356
|
+
async function runProjectLocalPreviewAction(context, options) {
|
|
34357
|
+
try {
|
|
34358
|
+
const projectCli = new ProjectCli({
|
|
34359
|
+
currentDirectory: context.currentDirectory,
|
|
34360
|
+
homeDirectory: context.homeDirectory
|
|
34361
|
+
});
|
|
34362
|
+
const inputs = await projectCli.localPreviewInputs(options.directory, options.output);
|
|
34363
|
+
await runWechatAction(
|
|
34364
|
+
context,
|
|
34365
|
+
async (wechatCli) => {
|
|
34366
|
+
await wechatCli.previewLocalDraft(
|
|
34367
|
+
{
|
|
34368
|
+
...inputs,
|
|
34369
|
+
resultCommand: "project.preview"
|
|
34370
|
+
},
|
|
34371
|
+
context
|
|
34372
|
+
);
|
|
34373
|
+
},
|
|
34374
|
+
options.json === true
|
|
34375
|
+
);
|
|
34376
|
+
} catch (error) {
|
|
34377
|
+
const code = error instanceof ProjectCliError ? error.code : "DXC_PROJECT_IO_FAILED";
|
|
34378
|
+
const message = error instanceof ProjectCliError ? error.message : "Project preview could not complete";
|
|
34379
|
+
writeActionError(
|
|
34380
|
+
context,
|
|
34381
|
+
options.json === true,
|
|
34382
|
+
contentProjectErrorResultSchema.parse({
|
|
34383
|
+
command: "project.preview",
|
|
34384
|
+
error: {
|
|
34385
|
+
code,
|
|
34386
|
+
message,
|
|
34387
|
+
...error instanceof ProjectCliError ? error.details : {}
|
|
34388
|
+
},
|
|
34389
|
+
ok: false
|
|
34390
|
+
}),
|
|
34391
|
+
code,
|
|
34392
|
+
message,
|
|
34393
|
+
error instanceof ProjectCliError ? error.details.recovery : void 0
|
|
34394
|
+
);
|
|
34395
|
+
}
|
|
34396
|
+
}
|
|
34237
34397
|
async function runKnowledgeAction(context, command, json, action) {
|
|
34238
34398
|
const { KnowledgeCli, KnowledgeCliError } = await loadKnowledgeModule();
|
|
34239
34399
|
try {
|
|
@@ -34276,15 +34436,18 @@ async function runSourceAction(context, json, action) {
|
|
|
34276
34436
|
} catch (error) {
|
|
34277
34437
|
const code = error instanceof SourceCliError ? error.code : "DXC_SOURCE_FAILED";
|
|
34278
34438
|
const message = error instanceof SourceCliError ? error.message : "\u6765\u6E90\u91C7\u96C6\u65E0\u6CD5\u5B8C\u6210\u3002";
|
|
34439
|
+
const recovery = error instanceof SourceCliError ? error.recovery : void 0;
|
|
34279
34440
|
writeActionError(
|
|
34280
34441
|
context,
|
|
34281
34442
|
json,
|
|
34282
34443
|
sourceFetchErrorResultSchema.parse({
|
|
34283
34444
|
command: "source.fetch",
|
|
34284
|
-
error: { code, message },
|
|
34445
|
+
error: { code, message, ...recovery === void 0 ? {} : { recovery } },
|
|
34285
34446
|
ok: false
|
|
34286
34447
|
}),
|
|
34287
|
-
code
|
|
34448
|
+
code,
|
|
34449
|
+
message,
|
|
34450
|
+
recovery
|
|
34288
34451
|
);
|
|
34289
34452
|
}
|
|
34290
34453
|
}
|
|
@@ -34595,7 +34758,7 @@ ${hint}
|
|
|
34595
34758
|
async (projectCli) => projectCli.resolve(query, options.directory)
|
|
34596
34759
|
)
|
|
34597
34760
|
);
|
|
34598
|
-
project.command("status").description("\u8BFB\u53D6\u5185\u5BB9\u9879\u76EE\u3001\u4EA7\u7269\u548C\u68C0\u67E5\u70B9\u72B6\u6001").option("--directory <path>", "\u9879\u76EE\u76EE\u5F55"
|
|
34761
|
+
project.command("status").description("\u8BFB\u53D6\u5185\u5BB9\u9879\u76EE\u3001\u4EA7\u7269\u548C\u68C0\u67E5\u70B9\u72B6\u6001").option("--directory <path>", "\u9879\u76EE\u6839\u76EE\u5F55\uFF1B\u7701\u7565\u65F6\u4ECE\u5F53\u524D\u76EE\u5F55\u5411\u4E0A\u67E5\u627E").option("--json", "\u8F93\u51FA JSON").action(
|
|
34599
34762
|
async (options) => runProjectAction(
|
|
34600
34763
|
context,
|
|
34601
34764
|
"project.status",
|
|
@@ -34606,7 +34769,7 @@ ${hint}
|
|
|
34606
34769
|
project.command("checkpoint").description("\u5199\u5165\u7EDF\u4E00\u7684\u9636\u6BB5 contract").argument("<stage>", "\u6B65\u9AA4\u540D\u79F0").requiredOption("--status <status>", "running / awaiting-user / completed / failed / skipped").option("--skill <name>", "\u7279\u6B8A\u63A5\u7BA1\u6D41\u7A0B\u4F7F\u7528\u7684 dxc-* Skill\uFF1B\u5E38\u89C4\u9636\u6BB5\u7531 catalog \u81EA\u52A8\u786E\u5B9A").option(
|
|
34607
34770
|
"--skill-version <version>",
|
|
34608
34771
|
"\u7279\u6B8A\u63A5\u7BA1\u6D41\u7A0B\u4F7F\u7528\u7684 Skill \u7248\u672C\uFF1B\u5E38\u89C4\u9636\u6BB5\u7531 catalog \u81EA\u52A8\u786E\u5B9A"
|
|
34609
|
-
).option("--summary <text>", "\u672C\u6B21\u9636\u6BB5\u72B6\u6001\u7684\u7B80\u77ED\u8BF4\u660E").option("--directory <path>", "\u9879\u76EE\u76EE\u5F55"
|
|
34772
|
+
).option("--summary <text>", "\u672C\u6B21\u9636\u6BB5\u72B6\u6001\u7684\u7B80\u77ED\u8BF4\u660E").option("--directory <path>", "\u9879\u76EE\u6839\u76EE\u5F55\uFF1B\u7701\u7565\u65F6\u4ECE\u5F53\u524D\u76EE\u5F55\u5411\u4E0A\u67E5\u627E").option("--inputs <stages>", "\u672C\u6B21\u989D\u5916\u8BFB\u53D6\u7684\u53EF\u9009\u8F93\u5165\uFF1B\u5FC5\u9700\u8F93\u5165\u7531 catalog \u81EA\u52A8\u8865\u9F50").option("--execution-location <location>", "local-device / agent-hosted / unknown", "unknown").option(
|
|
34610
34773
|
"--data-transit <transit>",
|
|
34611
34774
|
"local-only / agent-provider / dxc-cloud / unknown",
|
|
34612
34775
|
"unknown"
|
|
@@ -34616,7 +34779,18 @@ ${hint}
|
|
|
34616
34779
|
).option("--confirmed-by <actor>", "\u786E\u8BA4\u4EBA\u6216\u7A33\u5B9A\u8EAB\u4EFD\u6807\u8BC6", "local-interactive-user").option(
|
|
34617
34780
|
"--confirmation-snapshot <sha256>",
|
|
34618
34781
|
"\u4EC5 delivery \u9636\u6BB5\u4F20\u4E91\u7AEF renderSnapshot SHA-256\uFF1B\u5176\u4ED6\u9636\u6BB5\u7531 CLI \u4ECE\u8BED\u4E49\u4EA7\u7269\u81EA\u52A8\u8BA1\u7B97"
|
|
34619
|
-
).option("--json", "\u8F93\u51FA JSON").
|
|
34782
|
+
).option("--json", "\u8F93\u51FA JSON").addHelpText(
|
|
34783
|
+
"after",
|
|
34784
|
+
`
|
|
34785
|
+
\u72B6\u6001\u8FC1\u79FB\u4E0E\u5FC5\u586B\u53C2\u6570\uFF1A
|
|
34786
|
+
running --summary
|
|
34787
|
+
awaiting-user --summary --waiting-for
|
|
34788
|
+
completed --summary\uFF1B\u9700\u786E\u8BA4\u7684\u9636\u6BB5\u5148\u5199 awaiting-user\uFF0C\u518D\u4F7F\u7528 --confirm
|
|
34789
|
+
failed --summary --error-code
|
|
34790
|
+
skipped --summary
|
|
34791
|
+
|
|
34792
|
+
\u7701\u7565 --directory \u65F6\uFF0CCLI \u4F1A\u4ECE\u5F53\u524D\u76EE\u5F55\u5411\u4E0A\u67E5\u627E\u6700\u8FD1\u7684 dxc.project.json\u3002`
|
|
34793
|
+
).action(
|
|
34620
34794
|
async (stage, options) => runProjectAction(
|
|
34621
34795
|
context,
|
|
34622
34796
|
"project.checkpoint",
|
|
@@ -34633,7 +34807,7 @@ ${hint}
|
|
|
34633
34807
|
)
|
|
34634
34808
|
},
|
|
34635
34809
|
dataTransit: options.dataTransit,
|
|
34636
|
-
directory: options.directory,
|
|
34810
|
+
...options.directory === void 0 ? {} : { directory: options.directory },
|
|
34637
34811
|
...options.errorCode === void 0 ? {} : { errorCode: options.errorCode },
|
|
34638
34812
|
executionLocation: options.executionLocation,
|
|
34639
34813
|
...options.inputs === void 0 ? {} : {
|
|
@@ -34648,6 +34822,13 @@ ${hint}
|
|
|
34648
34822
|
})
|
|
34649
34823
|
)
|
|
34650
34824
|
);
|
|
34825
|
+
project.command("preview").description("\u4ECE\u5DF2\u5B8C\u6210\u7684\u9879\u76EE\u9636\u6BB5\u751F\u6210\u672C\u5730\u5E26\u56FE\u9884\u89C8").requiredOption("--local", "\u751F\u6210\u672C\u5730\u6D3E\u751F\u9884\u89C8\uFF0C\u4E0D\u66FF\u4EE3\u4E91\u7AEF\u6700\u7EC8\u5FAE\u4FE1\u9884\u89C8").option("--directory <path>", "\u9879\u76EE\u6839\u76EE\u5F55\uFF1B\u7701\u7565\u65F6\u4ECE\u5F53\u524D\u76EE\u5F55\u5411\u4E0A\u67E5\u627E").option(
|
|
34826
|
+
"--output <path>",
|
|
34827
|
+
"\u9879\u76EE\u5185 .dxc/previews \u4E0B\u7684\u8F93\u51FA\u8DEF\u5F84",
|
|
34828
|
+
".dxc/previews/visual-preview.html"
|
|
34829
|
+
).option("--json", "\u8F93\u51FA JSON\uFF1B\u540C\u65F6\u53D1\u51FA\u53F3\u4FA7\u9884\u89C8\u66FF\u6362\u4E8B\u4EF6").action(
|
|
34830
|
+
async (options) => runProjectLocalPreviewAction(context, options)
|
|
34831
|
+
);
|
|
34651
34832
|
knowledge.command("status").description("\u68C0\u67E5\u672C\u5730\u77E5\u8BC6\u5E93\u3001\u8BED\u4E49\u7D22\u5F15\u548C\u6A21\u578B\u7F13\u5B58").option("--json", "\u8F93\u51FA JSON").action(
|
|
34652
34833
|
async (options) => runKnowledgeAction(
|
|
34653
34834
|
context,
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@ description: DxC 内容工作流的大纲步骤。由 dxc-content-workflow 在 o
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责 `outline`。大纲是正文和视觉计划共同读取的结构 contract。
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ description: DxC 内容工作流的正文步骤。由 dxc-content-workflow 在 a
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责 `article`。正文必须是可发布母稿,不能把内部自检表、提示词或大纲标记
|
|
13
13
|
混进最终正文。
|
|
@@ -7,7 +7,7 @@ description: DxC 内容工作流的 Brief 步骤。由 dxc-content-workflow 在
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责 `brief`,把研究结果收敛为下游共同使用的单一命题。
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ description: DxC 内容工作流的审校步骤。由 dxc-content-workflow 在 q
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责 `quality-review`。它产出可追溯报告,不在审校过程中静默改写已经确认的
|
|
13
13
|
正文。
|
|
@@ -7,7 +7,7 @@ description: DxC 图文内容工作流的唯一公开入口。用户说“写一
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
把本 Skill 作为 DxC 唯一公开入口。每次显式或隐式调用都视为一次“恢复并继续”,而不是
|
|
13
13
|
从第一步重新开始。不要要求用户逐个点名下游 Skill,也不要要求用户先安装另一个
|
|
@@ -116,7 +116,10 @@ description: DxC 图文内容工作流的唯一公开入口。用户说“写一
|
|
|
116
116
|
不重新执行此前步骤。
|
|
117
117
|
4. `blocked`:
|
|
118
118
|
- `stale` 表示输出或输入产物已改变;读取 `recoveryPlan` 一次获得拓扑有序的全部失效阶段,
|
|
119
|
-
|
|
119
|
+
从第一项开始执行其 `command` 并连续重跑,不要让用户逐条发现 visual-plan、quality-review、
|
|
120
|
+
delivery;`command` 里的 `dxc` 是逻辑入口,执行时必须替换为本 Skill 已选定的当前平台
|
|
121
|
+
固定运行入口,不能调用 PATH 中的旧版 CLI;该命令只进入重新核验,不代表旧产物已经
|
|
122
|
+
重新获得语义确认;
|
|
120
123
|
- `failed` 仅在已证明没有外部副作用且操作可安全重试时自动重试;图片生成属于例外,
|
|
121
124
|
当前没有跨任务尝试账本,必须回到 visual-plan 写新计划并重新取得授权;
|
|
122
125
|
- 微信结果不确定时停止,不把查询状态变成再次创建。
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
- 只有本次确实读取了可选输入时,才用 `--inputs` 补充该可选阶段;即使漏写必需阶段,CLI
|
|
11
11
|
也会自动补齐。交付阶段未显式传参时还会绑定所有已经就绪并实际用于交付的视觉和审校产物。
|
|
12
12
|
- 上游哈希变化后,下游 checkpoint 会变为 `stale`。`project status` 的 `recoveryPlan` 会一次
|
|
13
|
-
|
|
13
|
+
返回全部有序失效阶段及每一步的 `command`;从第一项连续重新核验,不沿用旧标题、旧审校
|
|
14
|
+
或旧预览。`command` 中的 `dxc` 是逻辑入口,Agent 执行时必须替换为当前平台已经选定的固定
|
|
15
|
+
运行入口,不能调用 PATH 中的旧版 CLI。恢复命令只会进入该阶段的重新核验,不会替 Agent
|
|
16
|
+
确认旧语义产物仍然有效。
|
|
14
17
|
|
|
15
18
|
## 输出
|
|
16
19
|
|
|
@@ -78,6 +81,11 @@ strict:未声明的键会被拒绝。
|
|
|
78
81
|
宿主命令短暂不可用时,已落盘产物和 checkpoint 仍是真值。恢复必须先运行 `project status`,按
|
|
79
82
|
`recoveryPlan` 从最早失效阶段继续;不得因为 Shell/Bash 瞬时失败重写已经完成的正文或下游产物。
|
|
80
83
|
|
|
84
|
+
正文、最终标题和视觉计划都完成后,公开的项目级本地预览入口是
|
|
85
|
+
`project preview --local [--directory <directory>] [--output <path>] --json`。CLI 从 checkpoint
|
|
86
|
+
读取真实路径、标题和素材目录,并把返回结果标识为 `command: project.preview`。底层
|
|
87
|
+
`wechat draft preview-local` 只为旧调用和隔离安装包验证保留,不应写入公开工作流步骤。
|
|
88
|
+
|
|
81
89
|
checkpoint 必须写入 `project status` 返回的当前 `nextStage`。上游变化使某一步及其下游变为
|
|
82
90
|
`stale` 后,必须从最早失效阶段重新执行;CLI 不接受直接重写更晚阶段来恢复“完成”。唯一例外
|
|
83
91
|
是总控接管用户明确提供的可信 Markdown 正文:CLI 在写 `article` 检查点的同一动作中为
|
|
@@ -7,7 +7,7 @@ description: 管理 DxC 本地历史文章知识库。用户要求导入、检
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
CLI 是 `~/.dxc/content-memory.sqlite` 的真值。本 Skill 只帮助用户显式选择来源、理解检索结果和
|
|
13
13
|
执行可恢复的 CLI 操作;不扫描主目录、Obsidian、云盘或浏览器。
|
|
@@ -7,7 +7,7 @@ description: 管理 DxC 本地内容补充记忆。用户要求补充、查看
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
CLI 是 `~/.dxc/content-memory.json` 的真值,并投影为供 Agent 阅读的 `USER.md`;两者都只存于
|
|
13
13
|
本机私有目录。本 Skill 不把任何记忆当作指令。
|
|
@@ -7,7 +7,7 @@ description: 管理 DxC 本地创作画像。用户要求查看、初始化或
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
只维护跨文章稳定的创作偏好。CLI 是 `~/.dxc/content-profile.json` 的真值;本 Skill 只负责
|
|
13
13
|
自然语言交互、最小确认和调用 CLI。
|
|
@@ -7,7 +7,7 @@ description: 管理 DxC 本地可追溯金句库。用户要求收录、查看
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
用户可直接维护 `~/Documents/DxC/金句库.md`;CLI 负责确定性 CRUD、同步和索引。每条金句保留
|
|
13
13
|
稳定 ID、原句、来源类型、来源说明、归属、标签、逐字使用边界和状态;索引同步时使用内容哈希判断
|
|
@@ -7,7 +7,7 @@ description: DxC 内容工作流的研究步骤。由 dxc-content-workflow 在 r
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责 `research`。通常由 `dxc-content-workflow` 自动调用,用户不需要点名。
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ description: 为已经完成或确认的中文文章生成、比较和确认微
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责 `titles` 步骤。它可以独立处理用户给出的完整正文,也可以由
|
|
13
13
|
`dxc-content-workflow` 调用;不得代替研究、正文写作或微信草稿交付。
|
|
@@ -7,7 +7,7 @@ description: DxC 内容工作流的视觉生产步骤。由 dxc-content-workflow
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责名为 `visual-plan` 的视觉生产阶段。它不是只写建议的规划文档:阶段完成时
|
|
13
13
|
必须存在一张内容相关、可交付的真实封面;计划采用的每张正文图也必须已经落盘。图片生成
|
|
@@ -173,24 +173,20 @@ CLI 会复算全部图片哈希;超限时只在视觉素材目录下生成带
|
|
|
173
173
|
|
|
174
174
|
## 更新右侧带图预览
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
全部封面和正文图落盘、视觉计划通过机械校验并写入 `completed` checkpoint 后运行:
|
|
177
177
|
|
|
178
178
|
```text
|
|
179
|
-
dxc
|
|
180
|
-
--
|
|
181
|
-
--visual-plan <project.status 返回的 visual-plan 路径> \
|
|
182
|
-
--assets-directory <视觉计划声明的 assetsDirectory> \
|
|
183
|
-
--title <titles 产物的 selectedTitle> \
|
|
184
|
-
--output .dxc/previews/visual-preview.html \
|
|
179
|
+
dxc project preview --local \
|
|
180
|
+
--directory <project-directory> \
|
|
185
181
|
--json
|
|
186
182
|
```
|
|
187
183
|
|
|
188
|
-
|
|
189
|
-
|
|
184
|
+
CLI 自动从有效 checkpoint 读取正文、最终标题、视觉计划声明的真实素材目录和项目私有输出路径。
|
|
185
|
+
该命令不登录、不上传、不创建云端快照,也不修改 `04-article.md`;它会重新生成自包含 HTML,并发出
|
|
190
186
|
`kind=content-local-preview`、`action=open-file`、`replaceExisting=true` 的
|
|
191
187
|
`DXC_BROWSER_EVENT`。当前宿主支持右侧文件或浏览器预览时,必须立即打开返回的绝对路径并
|
|
192
|
-
替换此前的 `04-article.md`
|
|
193
|
-
|
|
188
|
+
替换此前的 `04-article.md` 预览;不得只在对话中说“已生成”。正文、标题、视觉计划或任一图片
|
|
189
|
+
变化后,先按 `recoveryPlan` 重新核验相关阶段,再运行本命令并用新的 `contentHash` 刷新右侧预览。
|
|
194
190
|
|
|
195
191
|
本地带图预览只用于检查图片、锚点和阅读节奏,不是最终微信模板确认。后续交付仍须创建、
|
|
196
192
|
查看并确认云端不可变预览。若宿主无法消费右侧预览事件,保留本地预览文件,明确告诉用户
|
|
@@ -7,7 +7,7 @@ description: 把已确认的 Markdown 文章、视觉阶段已生产的内容封
|
|
|
7
7
|
|
|
8
8
|
## 对用户的呈现
|
|
9
9
|
|
|
10
|
-
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.
|
|
10
|
+
用户只通过自然语言使用本 Skill。不要向用户展示 npm、CLI、PATH、PowerShell、Shell、JSON、内部命令或临时文件路径;只说明当前结果、需要用户做的选择,以及无法自动打开页面时的可点击临时链接。内部所有 CLI 调用都使用固定运行入口:Windows 为 `npm.cmd exec --yes --registry=https://registry.npmjs.org/ --package=@deployxai/dxc@0.1.13 -- dxc <参数>`,macOS/Linux 为相同参数的 `npm exec`。Windows 不得先尝试 npm 生成的无扩展名 `dxc`,同一任务后续必须保持已选入口;不得让用户打开终端、复制命令或处理环境变量。
|
|
11
11
|
|
|
12
12
|
本 Skill 只负责最后的 `delivery` 步骤:选择公众号、云端权威渲染、预览确认、创建草稿
|
|
13
13
|
和回读核验。它不生成正文,不正式发布,不群发。
|