@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 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.4`
30
+ - `@xenonbyte/da-vinci-workflow@0.1.5`
31
31
 
32
32
  Release highlights:
33
33
 
34
- - project-level visual contract support through `DA-VINCI.md`
35
- - redesign-from-code now prefers redesign-slice specs over one oversized `ui-refresh/spec.md`
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/distribution helpers
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 `da-vinci` skill for this request.
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
- - Use `references/platform-adapters.md` for shared invocation rules.
23
- - Use `references/checkpoints.md` when running workflow checkpoints.
22
+ - Keep workflow semantics shared across Codex, Claude, and Gemini.
@@ -3,7 +3,7 @@ description: Break requirements into scope, flows, states, and specs for Da Vinc
3
3
  ---
4
4
  # Da Vinci Breakdown
5
5
 
6
- Use the `da-vinci` skill for this request.
6
+ Use the Da Vinci workflow for this request.
7
7
 
8
8
  Action: `breakdown`
9
9
 
@@ -3,7 +3,7 @@ description: Build software from requirements and Pencil design data for Da Vinc
3
3
  ---
4
4
  # Da Vinci Build
5
5
 
6
- Use the `da-vinci` skill for this request.
6
+ Use the Da Vinci workflow for this request.
7
7
 
8
8
  Action: `build`
9
9
 
@@ -3,7 +3,7 @@ description: Create or refine Pencil-backed design plans for Da Vinci.
3
3
  ---
4
4
  # Da Vinci Design
5
5
 
6
- Use the `da-vinci` skill for this request.
6
+ Use the Da Vinci workflow for this request.
7
7
 
8
8
  Action: `design`
9
9
 
@@ -3,7 +3,7 @@ description: Generate implementation tasks from requirements and Pencil designs
3
3
  ---
4
4
  # Da Vinci Tasks
5
5
 
6
- Use the `da-vinci` skill for this request.
6
+ Use the Da Vinci workflow for this request.
7
7
 
8
8
  Action: `tasks`
9
9
 
@@ -3,7 +3,7 @@ description: Verify requirement coverage, Pencil coverage, and drift for Da Vinc
3
3
  ---
4
4
  # Da Vinci Verify
5
5
 
6
- Use the `da-vinci` skill for this request.
6
+ Use the Da Vinci workflow for this request.
7
7
 
8
8
  Action: `verify`
9
9
 
@@ -5,7 +5,7 @@ description: Da Vinci workflow command index for Gemini
5
5
  ---
6
6
  # Da Vinci
7
7
 
8
- Use the `da-vinci` skill for this request.
8
+ Use the Da Vinci workflow for this request.
9
9
 
10
10
  Platform: Gemini
11
11
  Default workflow entry: `/da-vinci <request>`
@@ -2,7 +2,7 @@ description = "Break requirements into scope, flows, states, and specs for Da Vi
2
2
  prompt = """
3
3
  # Da Vinci Breakdown
4
4
 
5
- Use the `da-vinci` skill for this request.
5
+ Use the Da Vinci workflow for this request.
6
6
 
7
7
  Action: `breakdown`
8
8
 
@@ -2,7 +2,7 @@ description = "Build software from requirements and Pencil design data for Da Vi
2
2
  prompt = """
3
3
  # Da Vinci Build
4
4
 
5
- Use the `da-vinci` skill for this request.
5
+ Use the Da Vinci workflow for this request.
6
6
 
7
7
  Action: `build`
8
8
 
@@ -2,7 +2,7 @@ description = "Create or refine Pencil-backed design plans for Da Vinci."
2
2
  prompt = """
3
3
  # Da Vinci Design
4
4
 
5
- Use the `da-vinci` skill for this request.
5
+ Use the Da Vinci workflow for this request.
6
6
 
7
7
  Action: `design`
8
8
 
@@ -2,7 +2,7 @@ description = "Generate implementation tasks from requirements and Pencil design
2
2
  prompt = """
3
3
  # Da Vinci Tasks
4
4
 
5
- Use the `da-vinci` skill for this request.
5
+ Use the Da Vinci workflow for this request.
6
6
 
7
7
  Action: `tasks`
8
8
 
@@ -2,7 +2,7 @@ description = "Verify requirement coverage, Pencil coverage, and drift for Da Vi
2
2
  prompt = """
3
3
  # Da Vinci Verify
4
4
 
5
- Use the `da-vinci` skill for this request.
5
+ Use the Da Vinci workflow for this request.
6
6
 
7
7
  Action: `verify`
8
8
 
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: fs.existsSync(path.join(homeDir, ".codex", "prompts", "da-vinci.md")),
252
- skill: fs.existsSync(path.join(homeDir, ".codex", "skills", "da-vinci", "SKILL.md"))
310
+ prompt: codexPromptMissing.length === 0,
311
+ skill: codexSkillMissing.length === 0,
312
+ promptMissing: codexPromptMissing,
313
+ skillMissing: codexSkillMissing
253
314
  },
254
315
  claude: {
255
- command: fs.existsSync(path.join(homeDir, ".claude", "commands", "da-vinci.md")),
256
- actionSet: fs.existsSync(path.join(homeDir, ".claude", "commands", "dv", "design.md"))
316
+ command: claudeMissing.length === 0,
317
+ actionSet: claudeMissing.length === 0,
318
+ missing: claudeMissing
257
319
  },
258
320
  gemini: {
259
- command: fs.existsSync(path.join(homeDir, ".gemini", "commands", "da-vinci.toml")),
260
- actionSet: fs.existsSync(path.join(homeDir, ".gemini", "commands", "dv", "design.toml"))
321
+ command: geminiMissing.length === 0,
322
+ actionSet: geminiMissing.length === 0,
323
+ missing: geminiMissing
261
324
  }
262
325
  };
263
326
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xenonbyte/da-vinci-workflow",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Requirement-to-design-to-code workflow skill for Codex, Claude, and Gemini",
5
5
  "bin": {
6
6
  "da-vinci": "bin/da-vinci.js"