@xenonbyte/da-vinci-workflow 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/commands/claude/da-vinci.md +2 -3
- package/commands/claude/dv/breakdown.md +1 -1
- package/commands/claude/dv/build.md +1 -1
- package/commands/claude/dv/design.md +1 -1
- package/commands/claude/dv/tasks.md +1 -1
- package/commands/claude/dv/verify.md +1 -1
- package/commands/gemini/da-vinci.toml +1 -1
- package/commands/gemini/dv/breakdown.toml +1 -1
- package/commands/gemini/dv/build.toml +1 -1
- package/commands/gemini/dv/design.toml +1 -1
- package/commands/gemini/dv/tasks.toml +1 -1
- package/commands/gemini/dv/verify.toml +1 -1
- package/lib/install.js +69 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,14 +27,14 @@ This workflow is intended for:
|
|
|
27
27
|
|
|
28
28
|
Current npm release target:
|
|
29
29
|
|
|
30
|
-
- `@xenonbyte/da-vinci-workflow@0.1.
|
|
30
|
+
- `@xenonbyte/da-vinci-workflow@0.1.5`
|
|
31
31
|
|
|
32
32
|
Release highlights:
|
|
33
33
|
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- Node-first install, uninstall, status, and asset validation commands
|
|
37
|
-
- repo-local forward-test example for a `greenfield-spec` workflow
|
|
34
|
+
- `da-vinci status` now validates full installed asset sets across Codex, Claude, and Gemini
|
|
35
|
+
- Claude and Gemini command adapters now use self-contained workflow wording after installation
|
|
36
|
+
- Node-first install, uninstall, status, and asset validation commands remain the supported distribution path
|
|
37
|
+
- repo-local forward-test example for a `greenfield-spec` workflow remains included
|
|
38
38
|
|
|
39
39
|
## Supported workflow modes
|
|
40
40
|
|
|
@@ -365,5 +365,5 @@ The repository currently contains:
|
|
|
365
365
|
|
|
366
366
|
Next natural work for the repository:
|
|
367
367
|
|
|
368
|
-
1. add install
|
|
369
|
-
2. forward-test the workflow on a real project
|
|
368
|
+
1. add automated regression coverage for install, uninstall, and status integrity checks
|
|
369
|
+
2. forward-test the workflow on a real project with a committed `.pen` source
|
|
@@ -3,7 +3,7 @@ description: Da Vinci workflow command index for Claude
|
|
|
3
3
|
---
|
|
4
4
|
# Da Vinci
|
|
5
5
|
|
|
6
|
-
Use the
|
|
6
|
+
Use the Da Vinci workflow for this request.
|
|
7
7
|
|
|
8
8
|
Platform: Claude
|
|
9
9
|
Default workflow entry: `/da-vinci <request>`
|
|
@@ -19,5 +19,4 @@ Notes:
|
|
|
19
19
|
- Requirements decide behavior.
|
|
20
20
|
- Pencil decides presentation.
|
|
21
21
|
- Code must follow both.
|
|
22
|
-
-
|
|
23
|
-
- Use `references/checkpoints.md` when running workflow checkpoints.
|
|
22
|
+
- Keep workflow semantics shared across Codex, Claude, and Gemini.
|
package/lib/install.js
CHANGED
|
@@ -37,6 +37,56 @@ const REQUIRED_FILES = [
|
|
|
37
37
|
"references/platform-adapters.md"
|
|
38
38
|
];
|
|
39
39
|
|
|
40
|
+
const CODEX_PROMPT_TARGETS = listFiles(path.join(REPO_ROOT, "commands", "codex", "prompts")).map(
|
|
41
|
+
(filePath) => path.join(".codex", "prompts", path.basename(filePath))
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const CODEX_SKILL_TARGETS = [
|
|
45
|
+
path.join(".codex", "skills", "da-vinci", "SKILL.md"),
|
|
46
|
+
...listFiles(path.join(REPO_ROOT, "agents")).map((filePath) =>
|
|
47
|
+
path.join(".codex", "skills", "da-vinci", "agents", path.relative(path.join(REPO_ROOT, "agents"), filePath))
|
|
48
|
+
),
|
|
49
|
+
...listFiles(path.join(REPO_ROOT, "references")).map((filePath) =>
|
|
50
|
+
path.join(
|
|
51
|
+
".codex",
|
|
52
|
+
"skills",
|
|
53
|
+
"da-vinci",
|
|
54
|
+
"references",
|
|
55
|
+
path.relative(path.join(REPO_ROOT, "references"), filePath)
|
|
56
|
+
)
|
|
57
|
+
),
|
|
58
|
+
...listFiles(path.join(REPO_ROOT, "docs")).map((filePath) =>
|
|
59
|
+
path.join(".codex", "skills", "da-vinci", "docs", path.relative(path.join(REPO_ROOT, "docs"), filePath))
|
|
60
|
+
),
|
|
61
|
+
...listFiles(path.join(REPO_ROOT, "examples")).map((filePath) =>
|
|
62
|
+
path.join(
|
|
63
|
+
".codex",
|
|
64
|
+
"skills",
|
|
65
|
+
"da-vinci",
|
|
66
|
+
"examples",
|
|
67
|
+
path.relative(path.join(REPO_ROOT, "examples"), filePath)
|
|
68
|
+
)
|
|
69
|
+
)
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
const CLAUDE_TARGETS = [
|
|
73
|
+
path.join(".claude", "commands", "da-vinci.md"),
|
|
74
|
+
path.join(".claude", "commands", "dv", "breakdown.md"),
|
|
75
|
+
path.join(".claude", "commands", "dv", "build.md"),
|
|
76
|
+
path.join(".claude", "commands", "dv", "design.md"),
|
|
77
|
+
path.join(".claude", "commands", "dv", "tasks.md"),
|
|
78
|
+
path.join(".claude", "commands", "dv", "verify.md")
|
|
79
|
+
];
|
|
80
|
+
|
|
81
|
+
const GEMINI_TARGETS = [
|
|
82
|
+
path.join(".gemini", "commands", "da-vinci.toml"),
|
|
83
|
+
path.join(".gemini", "commands", "dv", "breakdown.toml"),
|
|
84
|
+
path.join(".gemini", "commands", "dv", "build.toml"),
|
|
85
|
+
path.join(".gemini", "commands", "dv", "design.toml"),
|
|
86
|
+
path.join(".gemini", "commands", "dv", "tasks.toml"),
|
|
87
|
+
path.join(".gemini", "commands", "dv", "verify.toml")
|
|
88
|
+
];
|
|
89
|
+
|
|
40
90
|
function resolveHome(homeDir) {
|
|
41
91
|
return homeDir || process.env.HOME || os.homedir();
|
|
42
92
|
}
|
|
@@ -107,6 +157,10 @@ function listFiles(dirPath) {
|
|
|
107
157
|
});
|
|
108
158
|
}
|
|
109
159
|
|
|
160
|
+
function getMissingTargets(homeDir, relativePaths) {
|
|
161
|
+
return relativePaths.filter((relativePath) => !fs.existsSync(path.join(homeDir, relativePath)));
|
|
162
|
+
}
|
|
163
|
+
|
|
110
164
|
function installCodex(homeDir) {
|
|
111
165
|
const promptsTarget = path.join(homeDir, ".codex", "prompts");
|
|
112
166
|
const skillTarget = path.join(homeDir, ".codex", "skills", "da-vinci");
|
|
@@ -244,20 +298,29 @@ function uninstallPlatforms(platforms, options = {}) {
|
|
|
244
298
|
|
|
245
299
|
function getStatus(options = {}) {
|
|
246
300
|
const homeDir = resolveHome(options.homeDir);
|
|
301
|
+
const codexPromptMissing = getMissingTargets(homeDir, CODEX_PROMPT_TARGETS);
|
|
302
|
+
const codexSkillMissing = getMissingTargets(homeDir, CODEX_SKILL_TARGETS);
|
|
303
|
+
const claudeMissing = getMissingTargets(homeDir, CLAUDE_TARGETS);
|
|
304
|
+
const geminiMissing = getMissingTargets(homeDir, GEMINI_TARGETS);
|
|
305
|
+
|
|
247
306
|
return {
|
|
248
307
|
version: VERSION,
|
|
249
308
|
homeDir,
|
|
250
309
|
codex: {
|
|
251
|
-
prompt:
|
|
252
|
-
skill:
|
|
310
|
+
prompt: codexPromptMissing.length === 0,
|
|
311
|
+
skill: codexSkillMissing.length === 0,
|
|
312
|
+
promptMissing: codexPromptMissing,
|
|
313
|
+
skillMissing: codexSkillMissing
|
|
253
314
|
},
|
|
254
315
|
claude: {
|
|
255
|
-
command:
|
|
256
|
-
actionSet:
|
|
316
|
+
command: claudeMissing.length === 0,
|
|
317
|
+
actionSet: claudeMissing.length === 0,
|
|
318
|
+
missing: claudeMissing
|
|
257
319
|
},
|
|
258
320
|
gemini: {
|
|
259
|
-
command:
|
|
260
|
-
actionSet:
|
|
321
|
+
command: geminiMissing.length === 0,
|
|
322
|
+
actionSet: geminiMissing.length === 0,
|
|
323
|
+
missing: geminiMissing
|
|
261
324
|
}
|
|
262
325
|
};
|
|
263
326
|
}
|