@calibrate-ds/cli 0.1.0

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.
Files changed (201) hide show
  1. package/dist/__tests__/component-slug.test.d.ts +2 -0
  2. package/dist/__tests__/component-slug.test.d.ts.map +1 -0
  3. package/dist/__tests__/component-slug.test.js +54 -0
  4. package/dist/__tests__/component-slug.test.js.map +1 -0
  5. package/dist/__tests__/lock-changes.test.d.ts +2 -0
  6. package/dist/__tests__/lock-changes.test.d.ts.map +1 -0
  7. package/dist/__tests__/lock-changes.test.js +81 -0
  8. package/dist/__tests__/lock-changes.test.js.map +1 -0
  9. package/dist/__tests__/permissions.test.d.ts +2 -0
  10. package/dist/__tests__/permissions.test.d.ts.map +1 -0
  11. package/dist/__tests__/permissions.test.js +67 -0
  12. package/dist/__tests__/permissions.test.js.map +1 -0
  13. package/dist/__tests__/stamp-in-lock.test.d.ts +2 -0
  14. package/dist/__tests__/stamp-in-lock.test.d.ts.map +1 -0
  15. package/dist/__tests__/stamp-in-lock.test.js +102 -0
  16. package/dist/__tests__/stamp-in-lock.test.js.map +1 -0
  17. package/dist/__tests__/status-logic.test.d.ts +2 -0
  18. package/dist/__tests__/status-logic.test.d.ts.map +1 -0
  19. package/dist/__tests__/status-logic.test.js +74 -0
  20. package/dist/__tests__/status-logic.test.js.map +1 -0
  21. package/dist/__tests__/team-roster.test.d.ts +2 -0
  22. package/dist/__tests__/team-roster.test.d.ts.map +1 -0
  23. package/dist/__tests__/team-roster.test.js +97 -0
  24. package/dist/__tests__/team-roster.test.js.map +1 -0
  25. package/dist/ai/claude-provider.d.ts +13 -0
  26. package/dist/ai/claude-provider.d.ts.map +1 -0
  27. package/dist/ai/claude-provider.js +335 -0
  28. package/dist/ai/claude-provider.js.map +1 -0
  29. package/dist/ai/enhance-doc.d.ts +24 -0
  30. package/dist/ai/enhance-doc.d.ts.map +1 -0
  31. package/dist/ai/enhance-doc.js +272 -0
  32. package/dist/ai/enhance-doc.js.map +1 -0
  33. package/dist/ai/openai-provider.d.ts +13 -0
  34. package/dist/ai/openai-provider.d.ts.map +1 -0
  35. package/dist/ai/openai-provider.js +345 -0
  36. package/dist/ai/openai-provider.js.map +1 -0
  37. package/dist/ai/prompt-utils.d.ts +23 -0
  38. package/dist/ai/prompt-utils.d.ts.map +1 -0
  39. package/dist/ai/prompt-utils.js +67 -0
  40. package/dist/ai/prompt-utils.js.map +1 -0
  41. package/dist/commands/ai.d.ts +8 -0
  42. package/dist/commands/ai.d.ts.map +1 -0
  43. package/dist/commands/ai.js +576 -0
  44. package/dist/commands/ai.js.map +1 -0
  45. package/dist/commands/apply.d.ts +4 -0
  46. package/dist/commands/apply.d.ts.map +1 -0
  47. package/dist/commands/apply.js +98 -0
  48. package/dist/commands/apply.js.map +1 -0
  49. package/dist/commands/assign.d.ts +5 -0
  50. package/dist/commands/assign.d.ts.map +1 -0
  51. package/dist/commands/assign.js +180 -0
  52. package/dist/commands/assign.js.map +1 -0
  53. package/dist/commands/ci.d.ts +4 -0
  54. package/dist/commands/ci.d.ts.map +1 -0
  55. package/dist/commands/ci.js +84 -0
  56. package/dist/commands/ci.js.map +1 -0
  57. package/dist/commands/context.d.ts +19 -0
  58. package/dist/commands/context.d.ts.map +1 -0
  59. package/dist/commands/context.js +297 -0
  60. package/dist/commands/context.js.map +1 -0
  61. package/dist/commands/diff.d.ts +2 -0
  62. package/dist/commands/diff.d.ts.map +1 -0
  63. package/dist/commands/diff.js +119 -0
  64. package/dist/commands/diff.js.map +1 -0
  65. package/dist/commands/doctor.d.ts +5 -0
  66. package/dist/commands/doctor.d.ts.map +1 -0
  67. package/dist/commands/doctor.js +348 -0
  68. package/dist/commands/doctor.js.map +1 -0
  69. package/dist/commands/document-system.d.ts +5 -0
  70. package/dist/commands/document-system.d.ts.map +1 -0
  71. package/dist/commands/document-system.js +84 -0
  72. package/dist/commands/document-system.js.map +1 -0
  73. package/dist/commands/document.d.ts +6 -0
  74. package/dist/commands/document.d.ts.map +1 -0
  75. package/dist/commands/document.js +276 -0
  76. package/dist/commands/document.js.map +1 -0
  77. package/dist/commands/export.d.ts +11 -0
  78. package/dist/commands/export.d.ts.map +1 -0
  79. package/dist/commands/export.js +74 -0
  80. package/dist/commands/export.js.map +1 -0
  81. package/dist/commands/generate-components.d.ts +4 -0
  82. package/dist/commands/generate-components.d.ts.map +1 -0
  83. package/dist/commands/generate-components.js +62 -0
  84. package/dist/commands/generate-components.js.map +1 -0
  85. package/dist/commands/generate-composites.d.ts +2 -0
  86. package/dist/commands/generate-composites.d.ts.map +1 -0
  87. package/dist/commands/generate-composites.js +31 -0
  88. package/dist/commands/generate-composites.js.map +1 -0
  89. package/dist/commands/generate-tokens.d.ts +2 -0
  90. package/dist/commands/generate-tokens.d.ts.map +1 -0
  91. package/dist/commands/generate-tokens.js +48 -0
  92. package/dist/commands/generate-tokens.js.map +1 -0
  93. package/dist/commands/help-topics.d.ts +2 -0
  94. package/dist/commands/help-topics.d.ts.map +1 -0
  95. package/dist/commands/help-topics.js +324 -0
  96. package/dist/commands/help-topics.js.map +1 -0
  97. package/dist/commands/implement.d.ts +5 -0
  98. package/dist/commands/implement.d.ts.map +1 -0
  99. package/dist/commands/implement.js +595 -0
  100. package/dist/commands/implement.js.map +1 -0
  101. package/dist/commands/import-tokens.d.ts +2 -0
  102. package/dist/commands/import-tokens.d.ts.map +1 -0
  103. package/dist/commands/import-tokens.js +42 -0
  104. package/dist/commands/import-tokens.js.map +1 -0
  105. package/dist/commands/init.d.ts +6 -0
  106. package/dist/commands/init.d.ts.map +1 -0
  107. package/dist/commands/init.js +410 -0
  108. package/dist/commands/init.js.map +1 -0
  109. package/dist/commands/inspect-component.d.ts +2 -0
  110. package/dist/commands/inspect-component.d.ts.map +1 -0
  111. package/dist/commands/inspect-component.js +146 -0
  112. package/dist/commands/inspect-component.js.map +1 -0
  113. package/dist/commands/log.d.ts +4 -0
  114. package/dist/commands/log.d.ts.map +1 -0
  115. package/dist/commands/log.js +109 -0
  116. package/dist/commands/log.js.map +1 -0
  117. package/dist/commands/onboarding.d.ts +9 -0
  118. package/dist/commands/onboarding.d.ts.map +1 -0
  119. package/dist/commands/onboarding.js +63 -0
  120. package/dist/commands/onboarding.js.map +1 -0
  121. package/dist/commands/plan.d.ts +3 -0
  122. package/dist/commands/plan.d.ts.map +1 -0
  123. package/dist/commands/plan.js +108 -0
  124. package/dist/commands/plan.js.map +1 -0
  125. package/dist/commands/prompt.d.ts +5 -0
  126. package/dist/commands/prompt.d.ts.map +1 -0
  127. package/dist/commands/prompt.js +77 -0
  128. package/dist/commands/prompt.js.map +1 -0
  129. package/dist/commands/prune.d.ts +2 -0
  130. package/dist/commands/prune.d.ts.map +1 -0
  131. package/dist/commands/prune.js +95 -0
  132. package/dist/commands/prune.js.map +1 -0
  133. package/dist/commands/remove.d.ts +2 -0
  134. package/dist/commands/remove.d.ts.map +1 -0
  135. package/dist/commands/remove.js +76 -0
  136. package/dist/commands/remove.js.map +1 -0
  137. package/dist/commands/scaffold.d.ts +2 -0
  138. package/dist/commands/scaffold.d.ts.map +1 -0
  139. package/dist/commands/scaffold.js +47 -0
  140. package/dist/commands/scaffold.js.map +1 -0
  141. package/dist/commands/scan.d.ts +2 -0
  142. package/dist/commands/scan.d.ts.map +1 -0
  143. package/dist/commands/scan.js +91 -0
  144. package/dist/commands/scan.js.map +1 -0
  145. package/dist/commands/stamp.d.ts +11 -0
  146. package/dist/commands/stamp.d.ts.map +1 -0
  147. package/dist/commands/stamp.js +147 -0
  148. package/dist/commands/stamp.js.map +1 -0
  149. package/dist/commands/status.d.ts +7 -0
  150. package/dist/commands/status.d.ts.map +1 -0
  151. package/dist/commands/status.js +219 -0
  152. package/dist/commands/status.js.map +1 -0
  153. package/dist/commands/team.d.ts +7 -0
  154. package/dist/commands/team.d.ts.map +1 -0
  155. package/dist/commands/team.js +173 -0
  156. package/dist/commands/team.js.map +1 -0
  157. package/dist/index.d.ts +3 -0
  158. package/dist/index.d.ts.map +1 -0
  159. package/dist/index.js +303 -0
  160. package/dist/index.js.map +1 -0
  161. package/dist/onboarding/content.d.ts +39 -0
  162. package/dist/onboarding/content.d.ts.map +1 -0
  163. package/dist/onboarding/content.js +82 -0
  164. package/dist/onboarding/content.js.map +1 -0
  165. package/dist/utils/component-slug.d.ts +10 -0
  166. package/dist/utils/component-slug.d.ts.map +1 -0
  167. package/dist/utils/component-slug.js +13 -0
  168. package/dist/utils/component-slug.js.map +1 -0
  169. package/dist/utils/framework-registry.d.ts +41 -0
  170. package/dist/utils/framework-registry.d.ts.map +1 -0
  171. package/dist/utils/framework-registry.js +82 -0
  172. package/dist/utils/framework-registry.js.map +1 -0
  173. package/dist/utils/gitignore.d.ts +4 -0
  174. package/dist/utils/gitignore.d.ts.map +1 -0
  175. package/dist/utils/gitignore.js +67 -0
  176. package/dist/utils/gitignore.js.map +1 -0
  177. package/dist/utils/lock-changes.d.ts +14 -0
  178. package/dist/utils/lock-changes.d.ts.map +1 -0
  179. package/dist/utils/lock-changes.js +26 -0
  180. package/dist/utils/lock-changes.js.map +1 -0
  181. package/dist/utils/logger.d.ts +9 -0
  182. package/dist/utils/logger.d.ts.map +1 -0
  183. package/dist/utils/logger.js +32 -0
  184. package/dist/utils/logger.js.map +1 -0
  185. package/dist/utils/permissions.d.ts +17 -0
  186. package/dist/utils/permissions.d.ts.map +1 -0
  187. package/dist/utils/permissions.js +37 -0
  188. package/dist/utils/permissions.js.map +1 -0
  189. package/dist/utils/status-logic.d.ts +16 -0
  190. package/dist/utils/status-logic.d.ts.map +1 -0
  191. package/dist/utils/status-logic.js +32 -0
  192. package/dist/utils/status-logic.js.map +1 -0
  193. package/dist/utils/storybook-setup.d.ts +5 -0
  194. package/dist/utils/storybook-setup.d.ts.map +1 -0
  195. package/dist/utils/storybook-setup.js +104 -0
  196. package/dist/utils/storybook-setup.js.map +1 -0
  197. package/dist/utils/team-roster.d.ts +35 -0
  198. package/dist/utils/team-roster.d.ts.map +1 -0
  199. package/dist/utils/team-roster.js +99 -0
  200. package/dist/utils/team-roster.js.map +1 -0
  201. package/package.json +44 -0
@@ -0,0 +1,595 @@
1
+ import { loadConfig, loadLatestSnapshot, resolveComponent, loadManifest, getComponentContext, generateComponentPrompt, generateComponentDoc, resolveAIProvider, resolveDSPaths, formatMetadataHeader, extractImplementationMetadata, updateComponentArtifacts, createNamingStrategy, normalizeIconDisplayName, isIconComponent, } from "@calibrate-ds/core";
2
+ import { enhanceDocWithAI } from "../ai/enhance-doc.js";
3
+ import { stampInLock } from "./stamp.js";
4
+ import { readRoster, getCurrentUserRole, getGitUser, toHandle } from "../utils/team-roster.js";
5
+ import { logger } from "../utils/logger.js";
6
+ import fs from "node:fs/promises";
7
+ import path from "node:path";
8
+ /**
9
+ * Writes a single file, respecting three tiers:
10
+ * 1. No PTB_METADATA → user-written, NEVER overwrite
11
+ * 2. PTB_METADATA + same contextHash → already up to date, skip
12
+ * 3. PTB_METADATA + different hash OR new file → write (design changed or first run)
13
+ * --force bypasses the hash check and always writes tier-3 files.
14
+ */
15
+ async function writeIfStale(fullPath, content, currentHash, force) {
16
+ const exists = await fs.access(fullPath).then(() => true).catch(() => false);
17
+ if (exists) {
18
+ const existingContent = await fs.readFile(fullPath, "utf8").catch(() => "");
19
+ if (!existingContent.includes("PTB_METADATA")) {
20
+ return "protected";
21
+ }
22
+ if (!force) {
23
+ const meta = await extractImplementationMetadata(fullPath);
24
+ if (meta?.contextHash === currentHash) {
25
+ return "skipped";
26
+ }
27
+ // Hash differs — design changed, fall through to write
28
+ }
29
+ }
30
+ await fs.mkdir(path.dirname(fullPath), { recursive: true });
31
+ await fs.writeFile(fullPath, content, "utf8");
32
+ return "written";
33
+ }
34
+ function buildIconFiles(codeName, component, isTs) {
35
+ const dimMatch = component.name.match(/(\d+)x(\d+)/);
36
+ const w = dimMatch?.[1] ?? "24";
37
+ const h = dimMatch?.[2] ?? "24";
38
+ let svgInner;
39
+ let viewBox;
40
+ if (component.iconKind === "vector" && component.iconSvg) {
41
+ try {
42
+ const parsed = JSON.parse(component.iconSvg);
43
+ viewBox = parsed.viewBox;
44
+ svgInner = parsed.innerContent;
45
+ }
46
+ catch {
47
+ viewBox = `0 0 ${w} ${h}`;
48
+ svgInner = `<rect width="${w}" height="${h}" rx="2" opacity="0.15" />`;
49
+ }
50
+ }
51
+ else {
52
+ // font-symbol or unknown — placeholder
53
+ viewBox = `0 0 ${w} ${h}`;
54
+ svgInner = `{/* TODO: Replace with actual icon paths from your design tool or icon library */}\n <rect width="${w}" height="${h}" rx="2" opacity="0.15" />`;
55
+ }
56
+ const propsType = isTs ? `{ className, style, ...props }: ${codeName}Props` : `{ className, style, ...props }`;
57
+ const tsx = [
58
+ `import * as React from "react";`,
59
+ isTs ? `import type { ${codeName}Props } from "./${codeName}.types.js";` : "",
60
+ `\nexport function ${codeName}(${propsType}) {\n return (\n <svg\n viewBox="${viewBox}"\n fill="currentColor"\n aria-hidden="true"\n className={className}\n style={style}\n {...props}\n >\n ${svgInner}\n </svg>\n );\n}`,
61
+ ].filter(Boolean).join("\n");
62
+ const types = isTs
63
+ ? `import type * as React from "react";\n\nexport type ${codeName}Props = React.SVGProps<SVGSVGElement>;\n`
64
+ : "";
65
+ const css = `/* ${codeName} — icon component, sized via width/height props or CSS */\n`;
66
+ const index = `export { ${codeName} } from "./${codeName}.js";\n`;
67
+ return [
68
+ { path: `${codeName}.tsx`, content: tsx },
69
+ ...(isTs ? [{ path: `${codeName}.types.ts`, content: types }] : []),
70
+ { path: `${codeName}.module.css`, content: css },
71
+ { path: `index.ts`, content: index },
72
+ ];
73
+ }
74
+ /**
75
+ * Converts default exports to named exports so every component uses the same
76
+ * import style: `import { Btn } from '...'` instead of `import Btn from '...'`.
77
+ *
78
+ * Handles the two common patterns the AI generates:
79
+ * 1. export default function/class ComponentName → export function/class ComponentName
80
+ * 2. const ComponentName = ...\nexport default ComponentName → export const ComponentName = ...
81
+ */
82
+ function normalizeToNamedExport(content, codeName) {
83
+ // Pattern 1: export default function/class ComponentName
84
+ content = content.replace(/^export default (function|class)(\s)/m, "export $1$2");
85
+ // Pattern 2: standalone "export default ComponentName;" at end of file
86
+ const defaultExportRe = new RegExp(`^export default ${codeName};\\s*$`, "m");
87
+ if (defaultExportRe.test(content)) {
88
+ content = content.replace(defaultExportRe, "");
89
+ // Add export to the matching const/let/function declaration
90
+ content = content.replace(new RegExp(`^(const|let|function) (${codeName}\\b)`, "m"), "export $1 $2");
91
+ }
92
+ return content;
93
+ }
94
+ /**
95
+ * Normalizes index.ts barrel files to use named re-exports.
96
+ * Converts `export { default } from './X'` to `export { ComponentName } from './X.js'`.
97
+ */
98
+ function normalizeIndexExport(content, codeName) {
99
+ // export { default } from './Btn' → export { Btn } from './Btn.js'
100
+ content = content.replace(/export\s*\{\s*default\s*\}\s*from\s*(['"])(\.\/[^'"]+?)(?:\.js|\.ts|\.tsx)?(['"])/g, `export { ${codeName} } from $1$2.js$3`);
101
+ // export { default as Btn } from './Btn' → export { Btn } from './Btn.js'
102
+ content = content.replace(new RegExp(`export\\s*\\{\\s*default as ${codeName}\\s*\\}\\s*from\\s*(['"])(\\.[^'"]+?)(?:\\.js|\\.ts|\\.tsx)?(['"])`, "g"), `export { ${codeName} } from $1$2.js$3`);
103
+ return content;
104
+ }
105
+ /**
106
+ * Injects `import React from 'react'` if the file uses the React namespace
107
+ * (React.FC, React.ReactNode, etc.) but doesn't already import React.
108
+ */
109
+ function injectReactImport(content) {
110
+ const hasReactNs = /\bReact\.[A-Z]/.test(content);
111
+ if (!hasReactNs)
112
+ return content;
113
+ const hasReactImport = /import\s+(?:React|\*\s+as\s+React|\{[^}]*\bReact\b[^}]*\})\s+from\s+['"]react['"]/.test(content);
114
+ if (hasReactImport)
115
+ return content;
116
+ return `import React from 'react';\n` + content;
117
+ }
118
+ /**
119
+ * Corrects icon import paths that the AI generates with the wrong relative depth.
120
+ * AI often writes `'../chevron-down-16x16/index.js'` instead of `'../../icons/chevron-down-16x16/index.js'`.
121
+ */
122
+ function fixIconImportPaths(content) {
123
+ return content.replace(/from '(\.\.\/)([\w-]+\/index\.js)'/g, (match, _dotdot, pathTail) => {
124
+ if (match.includes("/icons/"))
125
+ return match; // already correct
126
+ const folderName = pathTail.replace("/index.js", "");
127
+ // Convert kebab folder name to PascalCase for isIconComponent check
128
+ const pascalName = folderName
129
+ .split("-")
130
+ .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
131
+ .join("");
132
+ if (isIconComponent(pascalName) || isIconComponent(folderName)) {
133
+ return `from '../../icons/${pathTail}'`;
134
+ }
135
+ return match;
136
+ });
137
+ }
138
+ /**
139
+ * Extracts icon component names that are passed as props to nested dependency instances
140
+ * via INSTANCE_SWAP overrides (overrideContract.dependency) or resolved prop values.
141
+ * These icons are NOT in context.dependencies or context.slotContract.
142
+ */
143
+ function collectInstanceIconNames(dependencyInstances) {
144
+ const names = [];
145
+ for (const inst of dependencyInstances) {
146
+ const recipe = inst?.recipe;
147
+ if (!recipe)
148
+ continue;
149
+ // Source A: overrideContract.dependency — { slotName: { componentName: "ChevronDown16x16" } }
150
+ const depOverrides = recipe?.overrideContract?.dependency;
151
+ if (depOverrides && typeof depOverrides === "object") {
152
+ for (const v of Object.values(depOverrides)) {
153
+ const name = v?.componentName;
154
+ if (name && isIconComponent(name))
155
+ names.push(name);
156
+ }
157
+ }
158
+ // Source B: resolvedProps — { trailingIcon: { kind: "dependency", importName: "ChevronDown16x16" } }
159
+ const resolvedProps = recipe?.resolvedProps;
160
+ if (resolvedProps && typeof resolvedProps === "object") {
161
+ for (const v of Object.values(resolvedProps)) {
162
+ const dep = v;
163
+ if (dep?.kind !== "dependency")
164
+ continue;
165
+ const name = dep.importName || dep.componentName;
166
+ if (name && isIconComponent(name))
167
+ names.push(name);
168
+ }
169
+ }
170
+ // Source C: invocationContract.slotContract — includes HIDDEN slots (visible: false).
171
+ // This is where icons like ChevronDown16x16 live when they are the design default
172
+ // for a slot but hidden in the base variant.
173
+ const invSlotContract = recipe?.invocationContract?.slotContract;
174
+ if (invSlotContract && typeof invSlotContract === "object") {
175
+ for (const def of Object.values(invSlotContract)) {
176
+ const name = def?.dependency?.componentName;
177
+ if (name && isIconComponent(name))
178
+ names.push(name);
179
+ }
180
+ }
181
+ }
182
+ return names;
183
+ }
184
+ /**
185
+ * Builds a map of PascalCase component name → correct relative import path from currentOutputDir.
186
+ * Uses each dependency's categoryPath from the snapshot to reconstruct the real folder location.
187
+ */
188
+ function buildDepPathMap(context, snapshot, naming, currentOutputDir, componentsDir) {
189
+ const map = new Map();
190
+ for (const dep of context.dependencies) {
191
+ if (isIconComponent(dep.name))
192
+ continue;
193
+ const compName = naming.formatComponentName(dep.name);
194
+ const depComp = snapshot.components.find(c => c.name === dep.name);
195
+ if (!depComp)
196
+ continue;
197
+ const folderName = naming.formatFolderName(dep.name);
198
+ const depDir = depComp.categoryPath
199
+ ? path.join(componentsDir, naming.formatFolderName(depComp.categoryPath), folderName)
200
+ : path.join(componentsDir, folderName);
201
+ const rel = path.relative(currentOutputDir, depDir).replace(/\\/g, "/") + "/index.js";
202
+ map.set(compName, rel.startsWith(".") ? rel : "./" + rel);
203
+ }
204
+ return map;
205
+ }
206
+ /**
207
+ * Fixes relative import paths for dependency components the AI generated incorrectly.
208
+ * If a named import symbol is in depPathMap, replaces the path with the correct computed one.
209
+ */
210
+ function fixDependencyImportPaths(content, depPathMap) {
211
+ if (depPathMap.size === 0)
212
+ return content;
213
+ return content.replace(/import\s*\{([^}]+)\}\s*from\s*'([^']+)'/g, (match, imports, currentPath) => {
214
+ if (!currentPath.startsWith("."))
215
+ return match;
216
+ const symbols = imports.split(",").map((s) => s.trim().split(/\s+as\s+/)[0].trim());
217
+ for (const sym of symbols) {
218
+ if (depPathMap.has(sym)) {
219
+ return match.replace(`'${currentPath}'`, `'${depPathMap.get(sym)}'`);
220
+ }
221
+ }
222
+ return match;
223
+ });
224
+ }
225
+ function injectMissingImports(content, context, naming, depPathMap = new Map()) {
226
+ const jsxRefs = new Set();
227
+ for (const m of content.matchAll(/<([A-Z][A-Za-z0-9]*)/g))
228
+ jsxRefs.add(m[1]);
229
+ const importedSymbols = new Set();
230
+ for (const m of content.matchAll(/import[^;]*\{([^}]+)\}/g)) {
231
+ for (const s of m[1].split(","))
232
+ importedSymbols.add(s.trim().split(" as ")[0].trim());
233
+ }
234
+ for (const m of content.matchAll(/import\s+([A-Z][A-Za-z0-9]*)\s+from/g)) {
235
+ importedSymbols.add(m[1]);
236
+ }
237
+ // Source 1: direct named dependencies (nested instances in render tree)
238
+ const candidates = [];
239
+ for (const dep of context.dependencies) {
240
+ candidates.push({
241
+ compName: naming.formatComponentName(dep.name),
242
+ folderName: naming.formatFolderName(dep.name),
243
+ isIcon: isIconComponent(dep.name),
244
+ });
245
+ }
246
+ // Source 2: own slot contract (icons/components this component accepts as ReactNode props)
247
+ if (context.slotContract) {
248
+ for (const def of Object.values(context.slotContract)) {
249
+ if (def.dependency?.componentName) {
250
+ const rawName = def.dependency.componentName;
251
+ const normalized = isIconComponent(rawName) ? normalizeIconDisplayName(rawName) : rawName;
252
+ const compName = def.dependency.importName || naming.formatComponentName(normalized);
253
+ const folderName = naming.formatFolderName(normalized);
254
+ candidates.push({ compName, folderName, isIcon: isIconComponent(rawName) });
255
+ }
256
+ }
257
+ }
258
+ // Source 3: icons passed as prop values to nested dep instances (INSTANCE_SWAP overrides)
259
+ for (const rawName of collectInstanceIconNames(context.dependencyInstances ?? [])) {
260
+ const normalized = normalizeIconDisplayName(rawName);
261
+ candidates.push({
262
+ compName: naming.formatComponentName(normalized),
263
+ folderName: naming.formatFolderName(normalized),
264
+ isIcon: true,
265
+ });
266
+ }
267
+ const toInject = [];
268
+ const seen = new Set();
269
+ for (const { compName, folderName, isIcon } of candidates) {
270
+ if (seen.has(compName))
271
+ continue;
272
+ seen.add(compName);
273
+ if (jsxRefs.has(compName) && !importedSymbols.has(compName)) {
274
+ const importPath = isIcon
275
+ ? `../../icons/${folderName}/index.js`
276
+ : (depPathMap.get(compName) ?? `../${folderName}/index.js`);
277
+ toInject.push(`import { ${compName} } from '${importPath}';`);
278
+ }
279
+ }
280
+ // Universal fallback: any icon-shaped JSX ref still missing an import after the
281
+ // context-based pass (e.g. Btn's internal default icons that don't appear in
282
+ // NotificationItem's context but the AI references anyway).
283
+ for (const compName of jsxRefs) {
284
+ if (seen.has(compName) || importedSymbols.has(compName))
285
+ continue;
286
+ if (!isIconComponent(compName))
287
+ continue;
288
+ seen.add(compName);
289
+ const folderName = naming.formatFolderName(normalizeIconDisplayName(compName));
290
+ toInject.push(`import { ${compName} } from '../../icons/${folderName}/index.js';`);
291
+ }
292
+ if (toInject.length === 0)
293
+ return content;
294
+ // Insert after the last existing import line
295
+ const importMatches = [...content.matchAll(/^import .+;$/gm)];
296
+ if (importMatches.length > 0) {
297
+ const last = importMatches[importMatches.length - 1];
298
+ const insertAt = last.index + last[0].length;
299
+ return content.slice(0, insertAt) + "\n" + toInject.join("\n") + content.slice(insertAt);
300
+ }
301
+ return toInject.join("\n") + "\n" + content;
302
+ }
303
+ async function autoGenerateIconDeps(context, snapshot, config, naming, promptPackage) {
304
+ const { componentsDir } = resolveDSPaths(config);
305
+ const isTs = config.framework?.typescript !== false;
306
+ // Collect icon names from all three sources
307
+ const iconNames = new Set();
308
+ // Source 1: own slot contract
309
+ if (context.slotContract) {
310
+ for (const def of Object.values(context.slotContract)) {
311
+ const name = def.dependency?.componentName;
312
+ if (name && isIconComponent(name))
313
+ iconNames.add(name);
314
+ }
315
+ }
316
+ // Source 2: INSTANCE_SWAP icons passed as props to nested dep instances
317
+ for (const name of collectInstanceIconNames(context.dependencyInstances ?? [])) {
318
+ iconNames.add(name);
319
+ }
320
+ for (const depName of iconNames) {
321
+ const depComp = snapshot.components.find(c => c.name === depName);
322
+ if (!depComp)
323
+ continue;
324
+ const normalizedDepName = normalizeIconDisplayName(depName);
325
+ const depCodeName = naming.formatComponentName(normalizedDepName);
326
+ const depFolderName = naming.formatFolderName(normalizedDepName);
327
+ const depOutputDir = path.join(componentsDir, "icons", depFolderName);
328
+ const indexPath = path.join(depOutputDir, "index.ts");
329
+ const exists = await fs.access(indexPath).then(() => true).catch(() => false);
330
+ if (exists)
331
+ continue;
332
+ logger.dim(`Auto-generating icon dep: ${depCodeName} → icons/${depFolderName}`);
333
+ const files = buildIconFiles(depCodeName, depComp, isTs);
334
+ for (const file of files) {
335
+ const fullPath = path.resolve(depOutputDir, file.path);
336
+ const style = file.path.endsWith(".css") ? "css" : "js";
337
+ const header = formatMetadataHeader(promptPackage.metadata, style);
338
+ await fs.mkdir(path.dirname(fullPath), { recursive: true });
339
+ await fs.writeFile(fullPath, header + file.content, "utf8");
340
+ }
341
+ }
342
+ }
343
+ async function implementSingleComponent(component, options, config, snapshot, myRole, myHandle) {
344
+ // Assignment guard — members can only implement their own assigned components
345
+ const { workspaceRoot } = resolveDSPaths(config);
346
+ const lockPath = path.join(workspaceRoot, "ptb.lock");
347
+ let assignedTo;
348
+ try {
349
+ const lock = JSON.parse(await fs.readFile(lockPath, "utf-8"));
350
+ const slug = component.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
351
+ const entry = lock.components?.[slug] ?? Object.values(lock.components ?? {}).find((e) => e.displayName?.toLowerCase() === component.name.toLowerCase());
352
+ assignedTo = entry?.assignedTo;
353
+ }
354
+ catch { /* no lock yet — allow */ }
355
+ if (assignedTo && myRole !== "lead") {
356
+ if (!myHandle || assignedTo !== myHandle) {
357
+ logger.warn(` Skipping ${component.name} — assigned to ${assignedTo}.`);
358
+ return;
359
+ }
360
+ }
361
+ const manifest = await loadManifest(config);
362
+ const context = await getComponentContext(component.id, snapshot, config, manifest);
363
+ if (!context) {
364
+ logger.error(`Failed to construct context for '${component.name}'.`);
365
+ return;
366
+ }
367
+ const missingDeps = context.dependencies.filter(d => d.status === "missing");
368
+ if (missingDeps.length > 0) {
369
+ logger.warn(`Missing dependencies: ${missingDeps.map(d => d.name).join(", ")}`);
370
+ logger.info("Implement these first: \x1b[1mptb implement component <name>\x1b[0m");
371
+ }
372
+ const framework = options.framework || config.framework.name || null;
373
+ const naming = createNamingStrategy(config.naming);
374
+ const normalizedName = isIconComponent(component.name)
375
+ ? normalizeIconDisplayName(component.name)
376
+ : component.name;
377
+ const codeName = naming.formatComponentName(normalizedName);
378
+ logger.info(`Implementing component: \x1b[36m${component.name}\x1b[0m \x1b[2m(${codeName})\x1b[0m`);
379
+ const promptPackage = generateComponentPrompt(context, framework);
380
+ const currentHash = promptPackage.metadata.contextHash;
381
+ // Icon components with vector SVGs from Figma are generated deterministically — no AI needed
382
+ if (isIconComponent(component.name) && component.iconKind) {
383
+ logger.dim(`Icon component — generating deterministically (${component.iconKind})`);
384
+ const isTs = config.framework?.typescript !== false;
385
+ const result = { files: buildIconFiles(codeName, component, isTs) };
386
+ const { componentsDir, packageRoot } = resolveDSPaths(config);
387
+ const baseOutputDir = context.component.artifacts?.folder
388
+ ? path.join(packageRoot, context.component.artifacts.folder)
389
+ : path.join(componentsDir, "icons", naming.formatFolderName(component.name));
390
+ logger.info("Files:");
391
+ let iconWritten = 0;
392
+ for (const file of result.files) {
393
+ const fullPath = path.resolve(baseOutputDir, file.path);
394
+ const style = file.path.endsWith(".css") ? "css" : "js";
395
+ const header = formatMetadataHeader(promptPackage.metadata, style);
396
+ const outcome = await writeIfStale(fullPath, header + file.content, currentHash, options.force ?? false);
397
+ const rel = path.relative(process.cwd(), fullPath);
398
+ if (outcome === "written") {
399
+ logger.success(` ✔ ${rel}`);
400
+ iconWritten++;
401
+ }
402
+ if (outcome === "skipped")
403
+ logger.dim(` – ${rel} (up to date)`);
404
+ if (outcome === "protected")
405
+ logger.warn(` ⚠ ${rel} (user-written — skipped)`);
406
+ }
407
+ const relativeBaseDir = path.relative(packageRoot, baseOutputDir);
408
+ const artifactPaths = result.files.map(f => path.join(relativeBaseDir, f.path));
409
+ await updateComponentArtifacts(config, component.id, component.name, relativeBaseDir, artifactPaths, framework || "generic");
410
+ if (iconWritten > 0 && (!assignedTo || myRole === "lead" || assignedTo === myHandle)) {
411
+ const stamped = await stampInLock(config, component.name, "generated by ptb implement");
412
+ if (stamped)
413
+ logger.dim(" Stamped in ptb.lock.");
414
+ }
415
+ logger.info("Done.");
416
+ return;
417
+ }
418
+ logger.dim(`Framework: ${framework || "General"}`);
419
+ const provider = resolveAIProvider(config);
420
+ const isMock = provider.name === "Mock AI Provider";
421
+ if (isMock) {
422
+ logger.warn(`No AI provider active — generating placeholder files.`);
423
+ logger.dim(`Add an "ai" block to ptb.config.json and set your API key to enable real generation.`);
424
+ }
425
+ else {
426
+ logger.info(`AI provider: \x1b[36m${provider.name}\x1b[0m`);
427
+ }
428
+ // Resolve output directory before calling the AI so post-processing can use it.
429
+ // Uses artifacts.folder from the manifest (re-run) or categoryPath (first run).
430
+ const { componentsDir, packageRoot } = resolveDSPaths(config);
431
+ let baseOutputDir;
432
+ if (context.component.artifacts?.folder) {
433
+ baseOutputDir = path.join(packageRoot, context.component.artifacts.folder);
434
+ }
435
+ else if (component.categoryPath) {
436
+ baseOutputDir = path.join(componentsDir, naming.formatFolderName(component.categoryPath), naming.formatFolderName(normalizedName));
437
+ }
438
+ else {
439
+ baseOutputDir = path.join(componentsDir, naming.formatFolderName(normalizedName));
440
+ }
441
+ // Build a map of dep name → correct relative import path from baseOutputDir.
442
+ // This covers all non-icon dependencies regardless of their folder depth.
443
+ const depPathMap = buildDepPathMap(context, snapshot, naming, baseOutputDir, componentsDir);
444
+ // Pre-generate any icon slot dependencies that don't yet exist on disk
445
+ await autoGenerateIconDeps(context, snapshot, config, naming, promptPackage);
446
+ const result = await provider.implementComponent({ componentName: codeName, framework, promptPackage });
447
+ // Normalize exports and fix import paths on every generated file
448
+ for (const file of result.files) {
449
+ if (/\.(tsx|jsx)$/.test(file.path)) {
450
+ file.content = normalizeToNamedExport(file.content, codeName);
451
+ file.content = fixIconImportPaths(file.content);
452
+ file.content = fixDependencyImportPaths(file.content, depPathMap);
453
+ file.content = injectMissingImports(file.content, context, naming, depPathMap);
454
+ file.content = injectReactImport(file.content);
455
+ }
456
+ if (file.path === "index.ts") {
457
+ file.content = normalizeIndexExport(file.content, codeName);
458
+ }
459
+ }
460
+ // Ensure all 4 required files are present; inject stubs for anything the AI omitted
461
+ const ext = framework === "vue" ? "vue" : "tsx";
462
+ const requiredFiles = [
463
+ { path: `${codeName}.${ext}`, stub: `export function ${codeName}() {\n return null;\n}\n` },
464
+ { path: `${codeName}.types.ts`, stub: `export type ${codeName}Props = Record<string, never>;\n` },
465
+ { path: `${codeName}.module.css`, stub: `/* ${codeName} styles */\n` },
466
+ { path: `index.ts`, stub: `export { ${codeName} } from "./${codeName}.js";\n` },
467
+ ];
468
+ for (const req of requiredFiles) {
469
+ if (!result.files.some(f => f.path === req.path)) {
470
+ result.files.push({ path: req.path, content: req.stub });
471
+ }
472
+ }
473
+ logger.info("Files:");
474
+ let writtenCount = 0;
475
+ for (const file of result.files) {
476
+ const fullPath = path.resolve(baseOutputDir, file.path);
477
+ const style = file.path.endsWith(".css") ? "css" : "js";
478
+ const header = formatMetadataHeader(promptPackage.metadata, style);
479
+ const outcome = await writeIfStale(fullPath, header + file.content, currentHash, options.force ?? false);
480
+ const rel = path.relative(process.cwd(), fullPath);
481
+ if (outcome === "written") {
482
+ logger.success(` ✔ ${rel}`);
483
+ writtenCount++;
484
+ }
485
+ if (outcome === "skipped")
486
+ logger.dim(` – ${rel} (up to date)`);
487
+ if (outcome === "protected")
488
+ logger.warn(` ⚠ ${rel} (user-written — skipped)`);
489
+ }
490
+ // Generate MDX documentation alongside the component files
491
+ logger.dim("Generating docs...");
492
+ const docPackage = generateComponentDoc(context, codeName);
493
+ const enhanced = await enhanceDocWithAI(config, docPackage);
494
+ const mdxPath = path.join(baseOutputDir, `${codeName}.mdx`);
495
+ const mdxHeader = formatMetadataHeader(promptPackage.metadata, "mdx");
496
+ const mdxOutcome = await writeIfStale(mdxPath, mdxHeader + enhanced.filledMdx, currentHash, options.force ?? false);
497
+ const mdxRel = path.relative(process.cwd(), mdxPath);
498
+ if (mdxOutcome === "written")
499
+ logger.success(` ✔ ${mdxRel}`);
500
+ if (mdxOutcome === "skipped")
501
+ logger.dim(` – ${mdxRel} (up to date)`);
502
+ if (mdxOutcome === "protected")
503
+ logger.warn(` ⚠ ${mdxRel} (user-written — skipped)`);
504
+ const relativeBaseDir = path.relative(packageRoot, baseOutputDir);
505
+ const artifactPaths = [
506
+ ...result.files.map(f => path.join(relativeBaseDir, f.path)),
507
+ path.join(relativeBaseDir, `${codeName}.mdx`),
508
+ ];
509
+ await updateComponentArtifacts(config, component.id, component.name, relativeBaseDir, artifactPaths, framework || "generic");
510
+ if (writtenCount > 0 && (!assignedTo || myRole === "lead" || assignedTo === myHandle)) {
511
+ const stamped = await stampInLock(config, component.name, "generated by ptb implement");
512
+ if (stamped)
513
+ logger.dim(" Stamped in ptb.lock.");
514
+ }
515
+ logger.info("Done.");
516
+ }
517
+ function checkModelQuality(config) {
518
+ const ai = config.ai;
519
+ if (!ai)
520
+ return;
521
+ const providerName = ai.active?.toLowerCase() ?? "";
522
+ const model = ai.providers?.[providerName]?.model ?? "";
523
+ const isLow = (providerName === "claude" && /haiku/i.test(model)) ||
524
+ (providerName === "openai" && /(mini|3\.5)/i.test(model));
525
+ if (!isLow)
526
+ return;
527
+ const better = providerName === "claude" ? "claude-sonnet-4-6" : "gpt-4o";
528
+ logger.warn(` Model: \x1b[1m${model}\x1b[0m\x1b[33m may produce incomplete component code.`);
529
+ logger.warn(` Consider \x1b[1m${better}\x1b[0m\x1b[33m or higher for best results.`);
530
+ }
531
+ export async function implementComponentCommand(name, options = {}) {
532
+ try {
533
+ const config = await loadConfig();
534
+ checkModelQuality(config);
535
+ const { workspaceRoot } = resolveDSPaths(config);
536
+ const roster = await readRoster(workspaceRoot);
537
+ const myRole = getCurrentUserRole(roster);
538
+ const gitUser = getGitUser();
539
+ const me = gitUser ? roster.members[gitUser.email] : undefined;
540
+ const myHandle = me ? `@${me.handle}` : gitUser ? `@${toHandle(gitUser.name)}` : undefined;
541
+ const snapshot = await loadLatestSnapshot(config);
542
+ if (!snapshot?.components) {
543
+ logger.warn("No snapshot found. Please run 'ptb scan' first.");
544
+ return;
545
+ }
546
+ if (name === "." || name === "*") {
547
+ let components = snapshot.components;
548
+ // Members only implement components assigned to them
549
+ if (myRole !== "lead" && myHandle) {
550
+ try {
551
+ const raw = await fs.readFile(path.join(workspaceRoot, "ptb.lock"), "utf-8");
552
+ const lock = JSON.parse(raw);
553
+ components = components.filter(c => {
554
+ const slug = c.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
555
+ const entry = lock.components?.[slug];
556
+ return !entry?.assignedTo || entry.assignedTo === myHandle;
557
+ });
558
+ }
559
+ catch (e) {
560
+ if (e.code !== "ENOENT") {
561
+ logger.warn(`Could not read ptb.lock: ${e.message}`);
562
+ return;
563
+ }
564
+ // No ptb.lock yet — no assignments exist, implement unassigned only
565
+ }
566
+ if (components.length === 0) {
567
+ logger.info("No components assigned to you. Ask a lead to assign some with: ptb assign <name> @you");
568
+ return;
569
+ }
570
+ logger.info(`Implementing ${components.length} component(s) assigned to you...`);
571
+ }
572
+ else {
573
+ logger.info(`Implementing all ${components.length} components...`);
574
+ }
575
+ for (const component of components) {
576
+ logger.info(`\n→ ${component.name}`);
577
+ await implementSingleComponent(component, options, config, snapshot, myRole, myHandle);
578
+ }
579
+ logger.success("Done.");
580
+ return;
581
+ }
582
+ const resolution = resolveComponent(name, snapshot.components, config);
583
+ const component = resolution.exactMatch;
584
+ if (!component) {
585
+ logger.error(`Component '${name}' not found.`);
586
+ return;
587
+ }
588
+ await implementSingleComponent(component, options, config, snapshot, myRole, myHandle);
589
+ }
590
+ catch (error) {
591
+ logger.error(error.message || String(error));
592
+ process.exit(1);
593
+ }
594
+ }
595
+ //# sourceMappingURL=implement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/commands/implement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function importTokensCommand(filePath: string): Promise<void>;
2
+ //# sourceMappingURL=import-tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-tokens.d.ts","sourceRoot":"","sources":["../../src/commands/import-tokens.ts"],"names":[],"mappings":"AAGA,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,iBA4CzD"}