@zmice/zc 0.2.1 → 0.2.4
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/LICENSE +21 -0
- package/README.md +242 -55
- package/dist/cli/__tests__/platform.test.js +573 -34
- package/dist/cli/__tests__/platform.test.js.map +1 -1
- package/dist/cli/__tests__/toolkit.test.js +35 -0
- package/dist/cli/__tests__/toolkit.test.js.map +1 -1
- package/dist/cli/platform.d.ts +15 -1
- package/dist/cli/platform.d.ts.map +1 -1
- package/dist/cli/platform.js +1195 -87
- package/dist/cli/platform.js.map +1 -1
- package/dist/cli/toolkit.d.ts.map +1 -1
- package/dist/cli/toolkit.js +26 -1
- package/dist/cli/toolkit.js.map +1 -1
- package/dist/node_modules/@zmice/platform-core/dist/index.d.ts +54 -1
- package/dist/node_modules/@zmice/platform-core/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@zmice/platform-core/dist/index.js +53 -0
- package/dist/node_modules/@zmice/platform-core/dist/index.js.map +1 -1
- package/dist/node_modules/@zmice/platform-core/dist/index.test.js +1 -1
- package/dist/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
- package/dist/node_modules/@zmice/platform-core/package.json +1 -1
- package/dist/platform-state/doctor.d.ts +3 -0
- package/dist/platform-state/doctor.d.ts.map +1 -0
- package/dist/platform-state/doctor.js +96 -0
- package/dist/platform-state/doctor.js.map +1 -0
- package/dist/platform-state/index.d.ts +2 -1
- package/dist/platform-state/index.d.ts.map +1 -1
- package/dist/platform-state/index.js +1 -0
- package/dist/platform-state/index.js.map +1 -1
- package/dist/platform-state/receipt.d.ts +5 -0
- package/dist/platform-state/receipt.d.ts.map +1 -1
- package/dist/platform-state/receipt.js +5 -0
- package/dist/platform-state/receipt.js.map +1 -1
- package/dist/platform-state/types.d.ts +16 -0
- package/dist/platform-state/types.d.ts.map +1 -1
- package/dist/utils/install-target.d.ts +1 -1
- package/dist/utils/install-target.d.ts.map +1 -1
- package/dist/utils/install-target.js +16 -6
- package/dist/utils/install-target.js.map +1 -1
- package/dist/utils/install-target.test.js +19 -10
- package/dist/utils/install-target.test.js.map +1 -1
- package/dist/utils/platform-install-cleanup.d.ts +7 -0
- package/dist/utils/platform-install-cleanup.d.ts.map +1 -0
- package/dist/utils/platform-install-cleanup.js +34 -0
- package/dist/utils/platform-install-cleanup.js.map +1 -0
- package/dist/utils/platform-install-cleanup.test.d.ts +2 -0
- package/dist/utils/platform-install-cleanup.test.d.ts.map +1 -0
- package/dist/utils/platform-install-cleanup.test.js +30 -0
- package/dist/utils/platform-install-cleanup.test.js.map +1 -0
- package/dist/utils/platform-install-receipt.d.ts +1 -0
- package/dist/utils/platform-install-receipt.d.ts.map +1 -1
- package/dist/utils/platform-install-receipt.js +10 -2
- package/dist/utils/platform-install-receipt.js.map +1 -1
- package/dist/utils/platform-install-receipt.test.js +30 -2
- package/dist/utils/platform-install-receipt.test.js.map +1 -1
- package/dist/utils/qwen-extension-cli.d.ts +52 -0
- package/dist/utils/qwen-extension-cli.d.ts.map +1 -0
- package/dist/utils/qwen-extension-cli.js +169 -0
- package/dist/utils/qwen-extension-cli.js.map +1 -0
- package/dist/utils/qwen-extension-cli.test.d.ts +2 -0
- package/dist/utils/qwen-extension-cli.test.d.ts.map +1 -0
- package/dist/utils/qwen-extension-cli.test.js +100 -0
- package/dist/utils/qwen-extension-cli.test.js.map +1 -0
- package/package.json +22 -8
- package/vendor/node_modules/@zmice/platform-core/dist/index.d.ts +54 -1
- package/vendor/node_modules/@zmice/platform-core/dist/index.d.ts.map +1 -1
- package/vendor/node_modules/@zmice/platform-core/dist/index.js +53 -0
- package/vendor/node_modules/@zmice/platform-core/dist/index.js.map +1 -1
- package/vendor/node_modules/@zmice/platform-core/dist/index.test.js +1 -1
- package/vendor/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
- package/vendor/node_modules/@zmice/platform-core/package.json +1 -1
- package/vendor/packages/platform-claude/dist/generate.d.ts +2 -0
- package/vendor/packages/platform-claude/dist/generate.d.ts.map +1 -0
- package/vendor/packages/platform-claude/dist/generate.js +2 -0
- package/vendor/packages/platform-claude/dist/generate.js.map +1 -0
- package/vendor/packages/platform-claude/dist/index.d.ts +50 -0
- package/vendor/packages/platform-claude/dist/index.d.ts.map +1 -0
- package/vendor/packages/platform-claude/dist/index.js +250 -0
- package/vendor/packages/platform-claude/dist/index.js.map +1 -0
- package/vendor/packages/platform-claude/dist/index.test.js +81 -0
- package/vendor/packages/platform-claude/dist/index.test.js.map +1 -0
- package/vendor/packages/platform-claude/dist/install.d.ts +2 -0
- package/vendor/packages/platform-claude/dist/install.d.ts.map +1 -0
- package/vendor/packages/platform-claude/dist/install.js +2 -0
- package/vendor/packages/platform-claude/dist/install.js.map +1 -0
- package/vendor/packages/platform-claude/package.json +46 -0
- package/vendor/packages/platform-claude/templates/.gitkeep +1 -0
- package/vendor/packages/platform-claude/templates/CLAUDE.md +1 -0
- package/vendor/packages/platform-codex/dist/index.d.ts +36 -2
- package/vendor/packages/platform-codex/dist/index.d.ts.map +1 -1
- package/vendor/packages/platform-codex/dist/index.js +231 -6
- package/vendor/packages/platform-codex/dist/index.js.map +1 -1
- package/vendor/packages/platform-codex/dist/index.test.js +40 -10
- package/vendor/packages/platform-codex/dist/index.test.js.map +1 -1
- package/vendor/packages/platform-opencode/dist/generate.d.ts +2 -0
- package/vendor/packages/platform-opencode/dist/generate.d.ts.map +1 -0
- package/vendor/packages/platform-opencode/dist/generate.js +2 -0
- package/vendor/packages/platform-opencode/dist/generate.js.map +1 -0
- package/vendor/packages/platform-opencode/dist/index.d.ts +46 -0
- package/vendor/packages/platform-opencode/dist/index.d.ts.map +1 -0
- package/vendor/packages/platform-opencode/dist/index.js +308 -0
- package/vendor/packages/platform-opencode/dist/index.js.map +1 -0
- package/vendor/packages/platform-opencode/dist/index.test.d.ts +2 -0
- package/vendor/packages/platform-opencode/dist/index.test.d.ts.map +1 -0
- package/vendor/packages/platform-opencode/dist/index.test.js +106 -0
- package/vendor/packages/platform-opencode/dist/index.test.js.map +1 -0
- package/vendor/packages/platform-opencode/dist/install.d.ts +2 -0
- package/vendor/packages/platform-opencode/dist/install.d.ts.map +1 -0
- package/vendor/packages/platform-opencode/dist/install.js +2 -0
- package/vendor/packages/platform-opencode/dist/install.js.map +1 -0
- package/vendor/packages/{platform-qoder → platform-opencode}/package.json +2 -2
- package/vendor/packages/platform-opencode/templates/AGENTS.md +1 -0
- package/vendor/packages/platform-qwen/dist/index.d.ts +55 -2
- package/vendor/packages/platform-qwen/dist/index.d.ts.map +1 -1
- package/vendor/packages/platform-qwen/dist/index.js +229 -11
- package/vendor/packages/platform-qwen/dist/index.js.map +1 -1
- package/vendor/packages/platform-qwen/dist/index.test.js +54 -16
- package/vendor/packages/platform-qwen/dist/index.test.js.map +1 -1
- package/vendor/packages/toolkit/dist/loaders.test.js +1 -1
- package/vendor/packages/toolkit/dist/loaders.test.js.map +1 -1
- package/vendor/packages/toolkit/dist/manifests.test.js +29 -2
- package/vendor/packages/toolkit/dist/manifests.test.js.map +1 -1
- package/vendor/packages/toolkit/dist/query/toolkit-query.d.ts +4 -6
- package/vendor/packages/toolkit/dist/query/toolkit-query.d.ts.map +1 -1
- package/vendor/packages/toolkit/dist/query/toolkit-query.js +99 -1
- package/vendor/packages/toolkit/dist/query/toolkit-query.js.map +1 -1
- package/vendor/packages/toolkit/dist/query.test.js +209 -0
- package/vendor/packages/toolkit/dist/query.test.js.map +1 -1
- package/vendor/packages/toolkit/dist/schema/asset-meta.d.ts.map +1 -1
- package/vendor/packages/toolkit/dist/schema/asset-meta.js +105 -1
- package/vendor/packages/toolkit/dist/schema/asset-meta.js.map +1 -1
- package/vendor/packages/toolkit/dist/types.d.ts +41 -1
- package/vendor/packages/toolkit/dist/types.d.ts.map +1 -1
- package/vendor/packages/toolkit/dist/types.js +26 -1
- package/vendor/packages/toolkit/dist/types.js.map +1 -1
- package/vendor/packages/toolkit/package.json +1 -1
- package/vendor/packages/toolkit/src/content/agents/architect/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/agents/backend-specialist/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/agents/code-reviewer/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/agents/frontend-specialist/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/agents/performance-engineer/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/agents/product-owner/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/agents/security-auditor/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/agents/test-engineer/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/api/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/build/body.md +15 -20
- package/vendor/packages/toolkit/src/content/commands/build/meta.yaml +12 -1
- package/vendor/packages/toolkit/src/content/commands/careful/body.md +21 -11
- package/vendor/packages/toolkit/src/content/commands/careful/meta.yaml +16 -1
- package/vendor/packages/toolkit/src/content/commands/ci/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/commit/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/ctx-health/body.md +16 -16
- package/vendor/packages/toolkit/src/content/commands/ctx-health/meta.yaml +11 -1
- package/vendor/packages/toolkit/src/content/commands/debug/body.md +16 -17
- package/vendor/packages/toolkit/src/content/commands/debug/meta.yaml +12 -1
- package/vendor/packages/toolkit/src/content/commands/doc/body.md +15 -16
- package/vendor/packages/toolkit/src/content/commands/doc/meta.yaml +11 -1
- package/vendor/packages/toolkit/src/content/commands/freeze/body.md +20 -9
- package/vendor/packages/toolkit/src/content/commands/freeze/meta.yaml +16 -1
- package/vendor/packages/toolkit/src/content/commands/guard/body.md +21 -10
- package/vendor/packages/toolkit/src/content/commands/guard/meta.yaml +16 -1
- package/vendor/packages/toolkit/src/content/commands/idea/body.md +15 -16
- package/vendor/packages/toolkit/src/content/commands/idea/meta.yaml +12 -1
- package/vendor/packages/toolkit/src/content/commands/learn/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/migrate/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/onboard/body.md +15 -17
- package/vendor/packages/toolkit/src/content/commands/onboard/meta.yaml +11 -1
- package/vendor/packages/toolkit/src/content/commands/perf/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/plan-review/body.md +21 -20
- package/vendor/packages/toolkit/src/content/commands/plan-review/meta.yaml +12 -1
- package/vendor/packages/toolkit/src/content/commands/product-analysis/body.md +52 -0
- package/vendor/packages/toolkit/src/content/commands/product-analysis/meta.yaml +35 -0
- package/vendor/packages/toolkit/src/content/commands/qa/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/quality-review/body.md +13 -18
- package/vendor/packages/toolkit/src/content/commands/quality-review/meta.yaml +13 -1
- package/vendor/packages/toolkit/src/content/commands/retro/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/sdd-tdd/body.md +29 -29
- package/vendor/packages/toolkit/src/content/commands/sdd-tdd/meta.yaml +11 -1
- package/vendor/packages/toolkit/src/content/commands/secure/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/ship/body.md +16 -11
- package/vendor/packages/toolkit/src/content/commands/ship/meta.yaml +11 -1
- package/vendor/packages/toolkit/src/content/commands/simplify/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/spec/body.md +16 -21
- package/vendor/packages/toolkit/src/content/commands/spec/meta.yaml +12 -1
- package/vendor/packages/toolkit/src/content/commands/start/body.md +148 -0
- package/vendor/packages/toolkit/src/content/commands/start/meta.yaml +55 -0
- package/vendor/packages/toolkit/src/content/commands/task-plan/body.md +13 -18
- package/vendor/packages/toolkit/src/content/commands/task-plan/meta.yaml +12 -1
- package/vendor/packages/toolkit/src/content/commands/ui/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/commands/verify/body.md +12 -17
- package/vendor/packages/toolkit/src/content/commands/verify/meta.yaml +15 -1
- package/vendor/packages/toolkit/src/content/skills/api-and-interface-design/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/brainstorming-and-design/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/branch-finish-and-cleanup/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/browser-qa-testing/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/ci-cd-and-automation/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/code-review-and-quality/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/code-simplification/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/codebase-onboarding/body.md +6 -3
- package/vendor/packages/toolkit/src/content/skills/codebase-onboarding/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/context-budget-audit/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/context-engineering/body.md +7 -5
- package/vendor/packages/toolkit/src/content/skills/context-engineering/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/continuous-learning/body.md +15 -15
- package/vendor/packages/toolkit/src/content/skills/continuous-learning/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/debugging-and-error-recovery/body.md +9 -6
- package/vendor/packages/toolkit/src/content/skills/debugging-and-error-recovery/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/deprecation-and-migration/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/developer-experience-audit/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/documentation-and-adrs/body.md +7 -11
- package/vendor/packages/toolkit/src/content/skills/documentation-and-adrs/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/engineering-principles/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/frontend-ui-engineering/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/git-workflow-and-versioning/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/idea-refine/body.md +31 -160
- package/vendor/packages/toolkit/src/content/skills/idea-refine/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/incremental-implementation/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/multi-perspective-review/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/parallel-agent-dispatch/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/performance-optimization/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/planning-and-task-breakdown/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/release-documentation-sync/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/review-response-and-resolution/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/safety-guardrails/body.md +6 -2
- package/vendor/packages/toolkit/src/content/skills/safety-guardrails/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/sdd-tdd-workflow/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/security-and-hardening/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/shipping-and-launch/body.md +7 -11
- package/vendor/packages/toolkit/src/content/skills/shipping-and-launch/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/source-driven-development/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/spec-driven-development/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/sprint-retrospective/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/subagent-driven-development/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/team-orchestration/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/test-driven-development/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/using-agent-skills/meta.yaml +2 -1
- package/vendor/packages/toolkit/src/content/skills/verification-before-completion/meta.yaml +2 -1
- package/vendor/packages/platform-qoder/dist/generate.d.ts +0 -2
- package/vendor/packages/platform-qoder/dist/generate.d.ts.map +0 -1
- package/vendor/packages/platform-qoder/dist/generate.js +0 -2
- package/vendor/packages/platform-qoder/dist/generate.js.map +0 -1
- package/vendor/packages/platform-qoder/dist/index.d.ts +0 -15
- package/vendor/packages/platform-qoder/dist/index.d.ts.map +0 -1
- package/vendor/packages/platform-qoder/dist/index.js +0 -46
- package/vendor/packages/platform-qoder/dist/index.js.map +0 -1
- package/vendor/packages/platform-qoder/dist/index.test.js +0 -38
- package/vendor/packages/platform-qoder/dist/index.test.js.map +0 -1
- package/vendor/packages/platform-qoder/dist/install.d.ts +0 -2
- package/vendor/packages/platform-qoder/dist/install.d.ts.map +0 -1
- package/vendor/packages/platform-qoder/dist/install.js +0 -2
- package/vendor/packages/platform-qoder/dist/install.js.map +0 -1
- package/vendor/packages/platform-qoder/templates/instructions.md +0 -7
- /package/vendor/packages/{platform-qoder → platform-claude}/dist/index.test.d.ts +0 -0
- /package/vendor/packages/{platform-qoder → platform-claude}/dist/index.test.d.ts.map +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type GeneratedArtifact } from "./workspace.js";
|
|
2
|
+
export declare class QwenOfficialCliUnavailableError extends Error {
|
|
3
|
+
constructor(message?: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class QwenExtensionsCommandError extends Error {
|
|
6
|
+
readonly command: string;
|
|
7
|
+
readonly exitCode: number | null;
|
|
8
|
+
readonly signal: NodeJS.Signals | null;
|
|
9
|
+
readonly stdout: string;
|
|
10
|
+
readonly stderr: string;
|
|
11
|
+
constructor(options: {
|
|
12
|
+
command: string;
|
|
13
|
+
exitCode: number | null;
|
|
14
|
+
signal: NodeJS.Signals | null;
|
|
15
|
+
stdout: string;
|
|
16
|
+
stderr: string;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export declare const qwenOfficialExtensionRepoUrl: "https://github.com/zmice/zc-qwen-extension.git";
|
|
20
|
+
export interface QwenExtensionCapabilityLike {
|
|
21
|
+
readonly relativeDir: string;
|
|
22
|
+
readonly name: string;
|
|
23
|
+
}
|
|
24
|
+
export interface QwenInstallPlanLike {
|
|
25
|
+
readonly destinationRoot: string;
|
|
26
|
+
readonly artifacts: readonly GeneratedArtifact[];
|
|
27
|
+
readonly capability?: {
|
|
28
|
+
readonly extension?: QwenExtensionCapabilityLike;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface QwenOfficialCliSourceBundle {
|
|
32
|
+
readonly sourceDir: string;
|
|
33
|
+
readonly extensionName: string;
|
|
34
|
+
readonly artifactCount: number;
|
|
35
|
+
}
|
|
36
|
+
export interface QwenOfficialCliReleaseBundle {
|
|
37
|
+
readonly bundleDir: string;
|
|
38
|
+
readonly extensionName: string;
|
|
39
|
+
readonly artifactCount: number;
|
|
40
|
+
}
|
|
41
|
+
export declare function resolveQwenOfficialCliSourceDir(plan: QwenInstallPlanLike): string;
|
|
42
|
+
export declare function resolveQwenOfficialCliReleaseBundleDir(plan: QwenInstallPlanLike): string;
|
|
43
|
+
export declare function toQwenOfficialCliSourceArtifacts(plan: QwenInstallPlanLike): readonly GeneratedArtifact[];
|
|
44
|
+
export declare function syncQwenOfficialCliSourceBundle(plan: QwenInstallPlanLike): Promise<QwenOfficialCliSourceBundle>;
|
|
45
|
+
export declare function syncQwenOfficialCliReleaseBundle(plan: QwenInstallPlanLike, bundleDirOverride?: string): Promise<QwenOfficialCliReleaseBundle>;
|
|
46
|
+
export declare function toQwenOfficialCliReleaseArtifacts(plan: QwenInstallPlanLike, bundleDirOverride?: string): readonly GeneratedArtifact[];
|
|
47
|
+
export declare function installQwenExtensionWithOfficialCli(sourceDir: string): Promise<void>;
|
|
48
|
+
export declare function installQwenExtensionFromOfficialRepoWithCli(repoUrl: string): Promise<void>;
|
|
49
|
+
export declare function updateQwenExtensionWithOfficialCli(extensionName: string): Promise<void>;
|
|
50
|
+
export declare function uninstallQwenExtensionWithOfficialCli(extensionName: string): Promise<void>;
|
|
51
|
+
export declare function relinkQwenExtensionWithOfficialCli(sourceDir: string): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=qwen-extension-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen-extension-cli.d.ts","sourceRoot":"","sources":["../../src/utils/qwen-extension-cli.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExE,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,OAAO,GAAE,MAAsC;CAI5D;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB;CAaF;AAED,eAAO,MAAM,4BAA4B,EAAG,gDAAyD,CAAC;AAEtG,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,2BAA2B,CAAC;KAClD,CAAC;CACH;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAiBD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAGjF;AAED,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAGxF;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,mBAAmB,GAAG,SAAS,iBAAiB,EAAE,CAmBxG;AAED,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,2BAA2B,CAAC,CAgBtC;AAED,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,mBAAmB,EACzB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,4BAA4B,CAAC,CAgBvC;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,mBAAmB,EACzB,iBAAiB,CAAC,EAAE,MAAM,GACzB,SAAS,iBAAiB,EAAE,CAS9B;AAkDD,wBAAsB,mCAAmC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1F;AAED,wBAAsB,2CAA2C,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED,wBAAsB,kCAAkC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;AAED,wBAAsB,qCAAqC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAahG;AAED,wBAAsB,kCAAkC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { rm } from "node:fs/promises";
|
|
3
|
+
import { join, relative, resolve } from "node:path";
|
|
4
|
+
import { writeArtifacts } from "./workspace.js";
|
|
5
|
+
export class QwenOfficialCliUnavailableError extends Error {
|
|
6
|
+
constructor(message = "未检测到 qwen CLI,无法通过官方扩展命令安装。") {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "QwenOfficialCliUnavailableError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class QwenExtensionsCommandError extends Error {
|
|
12
|
+
command;
|
|
13
|
+
exitCode;
|
|
14
|
+
signal;
|
|
15
|
+
stdout;
|
|
16
|
+
stderr;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
super(options.signal
|
|
19
|
+
? `${options.command} 被信号 ${options.signal} 中断。`
|
|
20
|
+
: `${options.command} 退出码为 ${options.exitCode ?? "unknown"}。`);
|
|
21
|
+
this.name = "QwenExtensionsCommandError";
|
|
22
|
+
this.command = options.command;
|
|
23
|
+
this.exitCode = options.exitCode;
|
|
24
|
+
this.signal = options.signal;
|
|
25
|
+
this.stdout = options.stdout;
|
|
26
|
+
this.stderr = options.stderr;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export const qwenOfficialExtensionRepoUrl = "https://github.com/zmice/zc-qwen-extension.git";
|
|
30
|
+
function getExtensionCapability(plan) {
|
|
31
|
+
const extension = plan.capability?.extension;
|
|
32
|
+
if (!extension) {
|
|
33
|
+
throw new Error("Qwen 安装计划缺少 extension 能力描述。");
|
|
34
|
+
}
|
|
35
|
+
return extension;
|
|
36
|
+
}
|
|
37
|
+
function resolveInstalledExtensionRoot(plan) {
|
|
38
|
+
const extension = getExtensionCapability(plan);
|
|
39
|
+
return resolve(plan.destinationRoot, extension.relativeDir, extension.name);
|
|
40
|
+
}
|
|
41
|
+
export function resolveQwenOfficialCliSourceDir(plan) {
|
|
42
|
+
const extension = getExtensionCapability(plan);
|
|
43
|
+
return resolve(plan.destinationRoot, ".zc", "platform-sources", "qwen", extension.name);
|
|
44
|
+
}
|
|
45
|
+
export function resolveQwenOfficialCliReleaseBundleDir(plan) {
|
|
46
|
+
const extension = getExtensionCapability(plan);
|
|
47
|
+
return resolve(plan.destinationRoot, ".zc", "platform-bundles", "qwen", extension.name);
|
|
48
|
+
}
|
|
49
|
+
export function toQwenOfficialCliSourceArtifacts(plan) {
|
|
50
|
+
const installedExtensionRoot = resolveInstalledExtensionRoot(plan);
|
|
51
|
+
const normalizedRoot = `${installedExtensionRoot}/`;
|
|
52
|
+
const sourceDir = resolveQwenOfficialCliSourceDir(plan);
|
|
53
|
+
return plan.artifacts.map((artifact) => {
|
|
54
|
+
const artifactPath = resolve(artifact.path);
|
|
55
|
+
const insideExtensionRoot = artifactPath === installedExtensionRoot || artifactPath.startsWith(normalizedRoot);
|
|
56
|
+
if (!insideExtensionRoot) {
|
|
57
|
+
throw new Error(`Qwen 安装计划产物不在 extension 根目录内:${artifact.path}`);
|
|
58
|
+
}
|
|
59
|
+
const relativePath = relative(installedExtensionRoot, artifactPath);
|
|
60
|
+
return {
|
|
61
|
+
path: join(sourceDir, relativePath),
|
|
62
|
+
content: artifact.content,
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export async function syncQwenOfficialCliSourceBundle(plan) {
|
|
67
|
+
const extension = getExtensionCapability(plan);
|
|
68
|
+
const sourceDir = resolveQwenOfficialCliSourceDir(plan);
|
|
69
|
+
const sourceArtifacts = toQwenOfficialCliSourceArtifacts(plan);
|
|
70
|
+
await rm(sourceDir, { recursive: true, force: true });
|
|
71
|
+
await writeArtifacts(sourceArtifacts, {
|
|
72
|
+
overwrite: "force",
|
|
73
|
+
dryRun: false,
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
sourceDir,
|
|
77
|
+
extensionName: extension.name,
|
|
78
|
+
artifactCount: sourceArtifacts.length,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export async function syncQwenOfficialCliReleaseBundle(plan, bundleDirOverride) {
|
|
82
|
+
const extension = getExtensionCapability(plan);
|
|
83
|
+
const bundleDir = bundleDirOverride ? resolve(bundleDirOverride) : resolveQwenOfficialCliReleaseBundleDir(plan);
|
|
84
|
+
const releaseArtifacts = toQwenOfficialCliReleaseArtifacts(plan, bundleDir);
|
|
85
|
+
await rm(bundleDir, { recursive: true, force: true });
|
|
86
|
+
await writeArtifacts(releaseArtifacts, {
|
|
87
|
+
overwrite: "force",
|
|
88
|
+
dryRun: false,
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
bundleDir,
|
|
92
|
+
extensionName: extension.name,
|
|
93
|
+
artifactCount: releaseArtifacts.length,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function toQwenOfficialCliReleaseArtifacts(plan, bundleDirOverride) {
|
|
97
|
+
const bundleDir = bundleDirOverride ? resolve(bundleDirOverride) : resolveQwenOfficialCliReleaseBundleDir(plan);
|
|
98
|
+
const sourceArtifacts = toQwenOfficialCliSourceArtifacts(plan);
|
|
99
|
+
const sourceDir = resolveQwenOfficialCliSourceDir(plan);
|
|
100
|
+
return sourceArtifacts.map((artifact) => ({
|
|
101
|
+
path: artifact.path.replace(sourceDir, bundleDir),
|
|
102
|
+
content: artifact.content,
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
async function runQwenExtensionsCommand(args) {
|
|
106
|
+
const command = `qwen ${args.join(" ")}`;
|
|
107
|
+
await new Promise((resolvePromise, rejectPromise) => {
|
|
108
|
+
const child = spawn("qwen", args, {
|
|
109
|
+
stdio: "pipe",
|
|
110
|
+
});
|
|
111
|
+
let stdout = "";
|
|
112
|
+
let stderr = "";
|
|
113
|
+
child.stdout.on("data", (chunk) => {
|
|
114
|
+
const text = typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
115
|
+
stdout += text;
|
|
116
|
+
process.stdout.write(text);
|
|
117
|
+
});
|
|
118
|
+
child.stderr.on("data", (chunk) => {
|
|
119
|
+
const text = typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
120
|
+
stderr += text;
|
|
121
|
+
process.stderr.write(text);
|
|
122
|
+
});
|
|
123
|
+
child.once("error", (error) => {
|
|
124
|
+
if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
|
|
125
|
+
rejectPromise(new QwenOfficialCliUnavailableError());
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
rejectPromise(new Error(`${command} 执行失败:${error instanceof Error ? error.message : "未知错误"}`));
|
|
129
|
+
});
|
|
130
|
+
child.once("close", (code, signal) => {
|
|
131
|
+
if (code === 0) {
|
|
132
|
+
resolvePromise();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
rejectPromise(new QwenExtensionsCommandError({
|
|
136
|
+
command,
|
|
137
|
+
exitCode: code,
|
|
138
|
+
signal,
|
|
139
|
+
stdout,
|
|
140
|
+
stderr,
|
|
141
|
+
}));
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
export async function installQwenExtensionWithOfficialCli(sourceDir) {
|
|
146
|
+
await runQwenExtensionsCommand(["extensions", "link", sourceDir]);
|
|
147
|
+
}
|
|
148
|
+
export async function installQwenExtensionFromOfficialRepoWithCli(repoUrl) {
|
|
149
|
+
await runQwenExtensionsCommand(["extensions", "install", repoUrl]);
|
|
150
|
+
}
|
|
151
|
+
export async function updateQwenExtensionWithOfficialCli(extensionName) {
|
|
152
|
+
await runQwenExtensionsCommand(["extensions", "update", extensionName]);
|
|
153
|
+
}
|
|
154
|
+
export async function uninstallQwenExtensionWithOfficialCli(extensionName) {
|
|
155
|
+
try {
|
|
156
|
+
await runQwenExtensionsCommand(["extensions", "uninstall", extensionName]);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (error instanceof QwenExtensionsCommandError &&
|
|
160
|
+
/extension not found/i.test(`${error.stdout}\n${error.stderr}`)) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export async function relinkQwenExtensionWithOfficialCli(sourceDir) {
|
|
167
|
+
await runQwenExtensionsCommand(["extensions", "link", sourceDir]);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=qwen-extension-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen-extension-cli.js","sourceRoot":"","sources":["../../src/utils/qwen-extension-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen-extension-cli.test.d.ts","sourceRoot":"","sources":["../../src/utils/qwen-extension-cli.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
import { PassThrough } from "node:stream";
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
+
const spawnMock = vi.fn();
|
|
6
|
+
vi.mock("node:child_process", () => ({
|
|
7
|
+
spawn: spawnMock,
|
|
8
|
+
}));
|
|
9
|
+
function createFakeChild(behavior) {
|
|
10
|
+
const child = new EventEmitter();
|
|
11
|
+
child.stdout = new PassThrough();
|
|
12
|
+
child.stderr = new PassThrough();
|
|
13
|
+
queueMicrotask(() => {
|
|
14
|
+
if (behavior.type === "not-found") {
|
|
15
|
+
const error = Object.assign(new Error("spawn qwen ENOENT"), { code: "ENOENT" });
|
|
16
|
+
child.emit("error", error);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (behavior.type === "failure") {
|
|
20
|
+
if (behavior.stdout) {
|
|
21
|
+
child.stdout.emit("data", Buffer.from(behavior.stdout));
|
|
22
|
+
}
|
|
23
|
+
if (behavior.stderr) {
|
|
24
|
+
child.stderr.emit("data", Buffer.from(behavior.stderr));
|
|
25
|
+
}
|
|
26
|
+
child.emit("close", behavior.code ?? 1, null);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
child.emit("close", 0, null);
|
|
30
|
+
});
|
|
31
|
+
return child;
|
|
32
|
+
}
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
spawnMock.mockReset();
|
|
35
|
+
});
|
|
36
|
+
const modPromise = import("./qwen-extension-cli.js");
|
|
37
|
+
describe("qwen official CLI wrapper", () => {
|
|
38
|
+
it("maps install plan artifacts into a standalone release bundle", async () => {
|
|
39
|
+
const mod = await modPromise;
|
|
40
|
+
const artifacts = mod.toQwenOfficialCliReleaseArtifacts({
|
|
41
|
+
destinationRoot: "/home/test/.qwen",
|
|
42
|
+
capability: {
|
|
43
|
+
extension: {
|
|
44
|
+
relativeDir: "extensions",
|
|
45
|
+
name: "zc-toolkit",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
artifacts: [
|
|
49
|
+
{
|
|
50
|
+
path: "/home/test/.qwen/extensions/zc-toolkit/QWEN.md",
|
|
51
|
+
content: "# context\n",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
path: "/home/test/.qwen/extensions/zc-toolkit/commands/zc/start.md",
|
|
55
|
+
content: "# start\n",
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
}, "/tmp/zc-toolkit");
|
|
59
|
+
assert.deepEqual(artifacts, [
|
|
60
|
+
{
|
|
61
|
+
path: "/tmp/zc-toolkit/QWEN.md",
|
|
62
|
+
content: "# context\n",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
path: "/tmp/zc-toolkit/commands/zc/start.md",
|
|
66
|
+
content: "# start\n",
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
});
|
|
70
|
+
it("uses the official update command for repo-managed extensions", async () => {
|
|
71
|
+
const mod = await modPromise;
|
|
72
|
+
spawnMock.mockImplementation(() => createFakeChild({
|
|
73
|
+
type: "success",
|
|
74
|
+
}));
|
|
75
|
+
await expect(mod.updateQwenExtensionWithOfficialCli("zc-toolkit")).resolves.toBeUndefined();
|
|
76
|
+
assert.equal(spawnMock.mock.calls.length, 1);
|
|
77
|
+
assert.deepEqual(spawnMock.mock.calls[0]?.[1], ["extensions", "update", "zc-toolkit"]);
|
|
78
|
+
});
|
|
79
|
+
it("treats uninstalling a missing extension as a no-op", async () => {
|
|
80
|
+
const mod = await modPromise;
|
|
81
|
+
spawnMock.mockImplementation(() => createFakeChild({
|
|
82
|
+
type: "failure",
|
|
83
|
+
code: 1,
|
|
84
|
+
stderr: "Extension not found.\n",
|
|
85
|
+
}));
|
|
86
|
+
await expect(mod.uninstallQwenExtensionWithOfficialCli("zc-toolkit")).resolves.toBeUndefined();
|
|
87
|
+
assert.equal(spawnMock.mock.calls.length, 1);
|
|
88
|
+
assert.deepEqual(spawnMock.mock.calls[0]?.[1], ["extensions", "uninstall", "zc-toolkit"]);
|
|
89
|
+
});
|
|
90
|
+
it("still throws for other qwen CLI failures", async () => {
|
|
91
|
+
const mod = await modPromise;
|
|
92
|
+
spawnMock.mockImplementation(() => createFakeChild({
|
|
93
|
+
type: "failure",
|
|
94
|
+
code: 2,
|
|
95
|
+
stderr: "Permission denied.\n",
|
|
96
|
+
}));
|
|
97
|
+
await expect(mod.updateQwenExtensionWithOfficialCli("zc-toolkit")).rejects.toThrow(/退出码为 2/);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=qwen-extension-cli.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen-extension-cli.test.js","sourceRoot":"","sources":["../../src/utils/qwen-extension-cli.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zmice/zc",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.4",
|
|
4
|
+
"description": "Unified CLI for installing, updating, and querying zc AI coding workflows across Codex, Claude Code, OpenCode, and Qwen",
|
|
5
|
+
"homepage": "https://github.com/zmice/zc-ai-coding-toolkit#readme",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/zmice/zc-ai-coding-toolkit.git",
|
|
9
|
+
"directory": "apps/cli"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/zmice/zc-ai-coding-toolkit/issues"
|
|
13
|
+
},
|
|
5
14
|
"keywords": [
|
|
6
15
|
"cli",
|
|
7
|
-
"orchestration",
|
|
8
|
-
"tmux",
|
|
9
|
-
"team",
|
|
10
16
|
"ai",
|
|
11
17
|
"codex",
|
|
12
|
-
"
|
|
18
|
+
"claude-code",
|
|
19
|
+
"opencode",
|
|
20
|
+
"qwen",
|
|
21
|
+
"workflow",
|
|
22
|
+
"agents",
|
|
23
|
+
"skills",
|
|
24
|
+
"commands",
|
|
25
|
+
"developer-tools"
|
|
13
26
|
],
|
|
14
27
|
"license": "MIT",
|
|
15
28
|
"type": "module",
|
|
@@ -28,9 +41,10 @@
|
|
|
28
41
|
"@types/node": "^22.0.0",
|
|
29
42
|
"typescript": "^5.7.0",
|
|
30
43
|
"vitest": "^3.0.0",
|
|
31
|
-
"@zmice/platform-codex": "0.1.0",
|
|
32
|
-
"@zmice/platform-qoder": "0.1.0",
|
|
33
44
|
"@zmice/platform-core": "0.1.0",
|
|
45
|
+
"@zmice/platform-codex": "0.1.0",
|
|
46
|
+
"@zmice/platform-opencode": "0.1.0",
|
|
47
|
+
"@zmice/platform-claude": "0.1.0",
|
|
34
48
|
"@zmice/platform-qwen": "0.1.0",
|
|
35
49
|
"@zmice/toolkit": "0.1.0"
|
|
36
50
|
},
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
export type PlatformName = "qwen" | "codex" | "
|
|
1
|
+
export type PlatformName = "qwen" | "codex" | "claude" | "opencode";
|
|
2
2
|
export type ToolkitAssetKind = "skill" | "command" | "agent";
|
|
3
3
|
export type OverwriteMode = "error" | "force";
|
|
4
|
+
export type InstallScope = "project" | "global" | "dir";
|
|
5
|
+
export type PlatformCapabilitySurface = "entry-file" | "skills-dir" | "commands-dir" | "agents-dir" | "extension-dir";
|
|
4
6
|
export interface ToolkitAssetLike {
|
|
5
7
|
readonly id: string;
|
|
6
8
|
readonly kind: ToolkitAssetKind;
|
|
7
9
|
readonly platforms: readonly string[];
|
|
10
|
+
readonly name?: string;
|
|
8
11
|
readonly title?: string;
|
|
9
12
|
readonly summary?: string;
|
|
10
13
|
readonly body?: string;
|
|
14
|
+
readonly tools?: readonly string[];
|
|
15
|
+
readonly requires?: readonly string[];
|
|
11
16
|
}
|
|
12
17
|
export interface ToolkitManifestLike {
|
|
13
18
|
readonly source?: string;
|
|
@@ -30,20 +35,49 @@ export interface PlatformPlanMetadata {
|
|
|
30
35
|
readonly artifactCount: number;
|
|
31
36
|
readonly fingerprint: PlatformFingerprint;
|
|
32
37
|
}
|
|
38
|
+
export interface PlatformCapability {
|
|
39
|
+
readonly platform: PlatformName;
|
|
40
|
+
readonly namespace: string;
|
|
41
|
+
readonly surfaces: readonly PlatformCapabilitySurface[];
|
|
42
|
+
readonly entryFile?: {
|
|
43
|
+
readonly fileName: string;
|
|
44
|
+
};
|
|
45
|
+
readonly commands?: {
|
|
46
|
+
readonly relativeDir: string;
|
|
47
|
+
readonly fileExtension: ".md";
|
|
48
|
+
};
|
|
49
|
+
readonly skills?: {
|
|
50
|
+
readonly relativeDir: string;
|
|
51
|
+
readonly fileName: "SKILL.md";
|
|
52
|
+
};
|
|
53
|
+
readonly agents?: {
|
|
54
|
+
readonly relativeDir: string;
|
|
55
|
+
readonly fileExtension: ".md";
|
|
56
|
+
};
|
|
57
|
+
readonly extension?: {
|
|
58
|
+
readonly relativeDir: string;
|
|
59
|
+
readonly name: string;
|
|
60
|
+
readonly manifestFile: string;
|
|
61
|
+
readonly contextFileName?: string;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
33
64
|
export interface GenerationPlan {
|
|
34
65
|
readonly platform: PlatformName;
|
|
35
66
|
readonly packageName: string;
|
|
36
67
|
readonly manifestSource: string;
|
|
37
68
|
readonly matchedAssets: readonly ToolkitAssetLike[];
|
|
69
|
+
readonly capability?: PlatformCapability;
|
|
38
70
|
readonly artifacts: readonly PlatformArtifact[];
|
|
39
71
|
readonly metadata?: PlatformPlanMetadata;
|
|
40
72
|
}
|
|
41
73
|
export interface InstallPlan extends GenerationPlan {
|
|
42
74
|
readonly destinationRoot: string;
|
|
75
|
+
readonly scope: InstallScope;
|
|
43
76
|
readonly overwrite: OverwriteMode;
|
|
44
77
|
}
|
|
45
78
|
export interface InstallPlanOptions {
|
|
46
79
|
readonly destinationRoot: string;
|
|
80
|
+
readonly scope?: InstallScope;
|
|
47
81
|
readonly overwrite?: OverwriteMode;
|
|
48
82
|
}
|
|
49
83
|
export interface GeneratedHeaderOptions {
|
|
@@ -51,6 +85,24 @@ export interface GeneratedHeaderOptions {
|
|
|
51
85
|
readonly lines: readonly string[];
|
|
52
86
|
}
|
|
53
87
|
export declare function describeAsset(asset: ToolkitAssetLike): string;
|
|
88
|
+
export declare function renderYamlFrontmatter(fields: Record<string, unknown>): string;
|
|
89
|
+
export declare function renderMarkdownCommandFile(options: {
|
|
90
|
+
readonly name: string;
|
|
91
|
+
readonly description: string;
|
|
92
|
+
readonly body: string;
|
|
93
|
+
}): string;
|
|
94
|
+
export declare function renderSkillFile(options: {
|
|
95
|
+
readonly name: string;
|
|
96
|
+
readonly description: string;
|
|
97
|
+
readonly body: string;
|
|
98
|
+
}): string;
|
|
99
|
+
export declare function renderMarkdownAgentFile(options: {
|
|
100
|
+
readonly name: string;
|
|
101
|
+
readonly description: string;
|
|
102
|
+
readonly body: string;
|
|
103
|
+
readonly tools?: readonly string[];
|
|
104
|
+
readonly skills?: readonly string[];
|
|
105
|
+
}): string;
|
|
54
106
|
export declare function createStableFingerprint(value: unknown): PlatformFingerprint;
|
|
55
107
|
export declare function createArtifactMetadata(artifact: {
|
|
56
108
|
readonly content: string;
|
|
@@ -67,6 +119,7 @@ export declare function attachPlanMetadata<T extends GenerationPlan>(plan: T): T
|
|
|
67
119
|
};
|
|
68
120
|
export declare function prependGeneratedHeader(content: string, options: GeneratedHeaderOptions): string;
|
|
69
121
|
export declare function selectMatchedAssets(manifest: ToolkitManifestLike, platform: PlatformName): readonly ToolkitAssetLike[];
|
|
122
|
+
export declare function selectMatchedAssetsByKind(manifest: ToolkitManifestLike, platform: PlatformName, kind: ToolkitAssetKind): readonly ToolkitAssetLike[];
|
|
70
123
|
export declare function prefixArtifacts(destinationRoot: string, artifacts: readonly PlatformArtifact[]): readonly PlatformArtifact[];
|
|
71
124
|
export declare function createInstallPlan(generationPlan: GenerationPlan, options: InstallPlanOptions): InstallPlan;
|
|
72
125
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAC9C,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;AACxD,MAAM,MAAM,yBAAyB,GACjC,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,eAAe,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CAC1C;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAE7D;AAMD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA0B7E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAKT;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAKT;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,GAAG,MAAM,CAOT;AAwDD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAU3E;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC,wBAAwB,CAK1B;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,gBAAgB,GACzB,gBAAgB,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAA;CAAE,CAKpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,oBAAoB,CAO7E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,cAAc,EACzD,IAAI,EAAE,CAAC,GACN,CAAC,GAAG;IACL,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,gBAAgB,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAA;KAAE,CAAC,EAAE,CAAC;IACpG,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;CACzC,CAWA;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAI/F;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,YAAY,GACrB,SAAS,gBAAgB,EAAE,CAE7B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,gBAAgB,GACrB,SAAS,gBAAgB,EAAE,CAE7B;AAED,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,SAAS,gBAAgB,EAAE,GACrC,SAAS,gBAAgB,EAAE,CAK7B;AAED,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,kBAAkB,GAC1B,WAAW,CAQb"}
|
|
@@ -3,6 +3,50 @@ import { join } from "node:path";
|
|
|
3
3
|
export function describeAsset(asset) {
|
|
4
4
|
return asset.title ?? asset.summary ?? asset.id;
|
|
5
5
|
}
|
|
6
|
+
function toYamlScalar(value) {
|
|
7
|
+
return JSON.stringify(value);
|
|
8
|
+
}
|
|
9
|
+
export function renderYamlFrontmatter(fields) {
|
|
10
|
+
const lines = ["---"];
|
|
11
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
12
|
+
if (value === undefined || value === null) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (Array.isArray(value)) {
|
|
16
|
+
if (value.length === 0) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
lines.push(`${key}:`);
|
|
20
|
+
for (const entry of value) {
|
|
21
|
+
lines.push(` - ${toYamlScalar(String(entry))}`);
|
|
22
|
+
}
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
lines.push(`${key}: ${toYamlScalar(String(value))}`);
|
|
26
|
+
}
|
|
27
|
+
lines.push("---");
|
|
28
|
+
return `${lines.join("\n")}\n`;
|
|
29
|
+
}
|
|
30
|
+
export function renderMarkdownCommandFile(options) {
|
|
31
|
+
return `${renderYamlFrontmatter({
|
|
32
|
+
name: options.name,
|
|
33
|
+
description: options.description,
|
|
34
|
+
})}\n${options.body.trim()}\n`;
|
|
35
|
+
}
|
|
36
|
+
export function renderSkillFile(options) {
|
|
37
|
+
return `${renderYamlFrontmatter({
|
|
38
|
+
name: options.name,
|
|
39
|
+
description: options.description,
|
|
40
|
+
})}\n${options.body.trim()}\n`;
|
|
41
|
+
}
|
|
42
|
+
export function renderMarkdownAgentFile(options) {
|
|
43
|
+
return `${renderYamlFrontmatter({
|
|
44
|
+
name: options.name,
|
|
45
|
+
description: options.description,
|
|
46
|
+
tools: options.tools,
|
|
47
|
+
skills: options.skills,
|
|
48
|
+
})}\n${options.body.trim()}\n`;
|
|
49
|
+
}
|
|
6
50
|
function normalizeFingerprintValue(value) {
|
|
7
51
|
if (Array.isArray(value)) {
|
|
8
52
|
return value.map((entry) => normalizeFingerprintValue(entry));
|
|
@@ -26,10 +70,14 @@ function buildPlanFingerprintInput(plan, artifacts) {
|
|
|
26
70
|
matchedAssets: plan.matchedAssets.map((asset) => ({
|
|
27
71
|
id: asset.id,
|
|
28
72
|
kind: asset.kind,
|
|
73
|
+
name: asset.name,
|
|
29
74
|
platforms: [...asset.platforms].sort(),
|
|
30
75
|
summary: asset.summary,
|
|
31
76
|
title: asset.title,
|
|
77
|
+
tools: asset.tools,
|
|
78
|
+
requires: asset.requires,
|
|
32
79
|
})),
|
|
80
|
+
capability: plan.capability,
|
|
33
81
|
artifacts: artifacts.map((artifact) => ({
|
|
34
82
|
path: artifact.path,
|
|
35
83
|
metadata: artifact.metadata ?? createArtifactMetadata(artifact),
|
|
@@ -37,6 +85,7 @@ function buildPlanFingerprintInput(plan, artifacts) {
|
|
|
37
85
|
...(isInstallPlan(plan)
|
|
38
86
|
? {
|
|
39
87
|
destinationRoot: plan.destinationRoot,
|
|
88
|
+
scope: plan.scope,
|
|
40
89
|
overwrite: plan.overwrite,
|
|
41
90
|
}
|
|
42
91
|
: {}),
|
|
@@ -88,6 +137,9 @@ export function prependGeneratedHeader(content, options) {
|
|
|
88
137
|
export function selectMatchedAssets(manifest, platform) {
|
|
89
138
|
return manifest.assets.filter((asset) => asset.platforms.includes(platform));
|
|
90
139
|
}
|
|
140
|
+
export function selectMatchedAssetsByKind(manifest, platform, kind) {
|
|
141
|
+
return selectMatchedAssets(manifest, platform).filter((asset) => asset.kind === kind);
|
|
142
|
+
}
|
|
91
143
|
export function prefixArtifacts(destinationRoot, artifacts) {
|
|
92
144
|
return artifacts.map((artifact) => ({
|
|
93
145
|
...attachArtifactMetadata(artifact),
|
|
@@ -98,6 +150,7 @@ export function createInstallPlan(generationPlan, options) {
|
|
|
98
150
|
return attachPlanMetadata({
|
|
99
151
|
...generationPlan,
|
|
100
152
|
destinationRoot: options.destinationRoot,
|
|
153
|
+
scope: options.scope ?? "project",
|
|
101
154
|
overwrite: options.overwrite ?? "error",
|
|
102
155
|
artifacts: prefixArtifacts(options.destinationRoot, generationPlan.artifacts),
|
|
103
156
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|