synarcx 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 (288) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +90 -0
  3. package/bin/synarcx.js +3 -0
  4. package/dist/cli/index.d.ts +2 -0
  5. package/dist/cli/index.js +474 -0
  6. package/dist/commands/change.d.ts +35 -0
  7. package/dist/commands/change.js +278 -0
  8. package/dist/commands/completion.d.ts +72 -0
  9. package/dist/commands/completion.js +264 -0
  10. package/dist/commands/config.d.ts +36 -0
  11. package/dist/commands/config.js +552 -0
  12. package/dist/commands/feedback.d.ts +9 -0
  13. package/dist/commands/feedback.js +170 -0
  14. package/dist/commands/schema.d.ts +6 -0
  15. package/dist/commands/schema.js +870 -0
  16. package/dist/commands/show.d.ts +14 -0
  17. package/dist/commands/show.js +132 -0
  18. package/dist/commands/spec.d.ts +15 -0
  19. package/dist/commands/spec.js +226 -0
  20. package/dist/commands/validate.d.ts +24 -0
  21. package/dist/commands/validate.js +295 -0
  22. package/dist/commands/workflow/index.d.ts +17 -0
  23. package/dist/commands/workflow/index.js +12 -0
  24. package/dist/commands/workflow/instructions.d.ts +29 -0
  25. package/dist/commands/workflow/instructions.js +327 -0
  26. package/dist/commands/workflow/new-change.d.ts +11 -0
  27. package/dist/commands/workflow/new-change.js +45 -0
  28. package/dist/commands/workflow/schemas.d.ts +10 -0
  29. package/dist/commands/workflow/schemas.js +34 -0
  30. package/dist/commands/workflow/shared.d.ts +57 -0
  31. package/dist/commands/workflow/shared.js +117 -0
  32. package/dist/commands/workflow/status.d.ts +14 -0
  33. package/dist/commands/workflow/status.js +75 -0
  34. package/dist/commands/workflow/templates.d.ts +16 -0
  35. package/dist/commands/workflow/templates.js +69 -0
  36. package/dist/commands/workspace/open.d.ts +29 -0
  37. package/dist/commands/workspace/open.js +84 -0
  38. package/dist/commands/workspace/operations.d.ts +18 -0
  39. package/dist/commands/workspace/operations.js +461 -0
  40. package/dist/commands/workspace/selection.d.ts +5 -0
  41. package/dist/commands/workspace/selection.js +90 -0
  42. package/dist/commands/workspace/types.d.ts +83 -0
  43. package/dist/commands/workspace/types.js +36 -0
  44. package/dist/commands/workspace.d.ts +3 -0
  45. package/dist/commands/workspace.js +635 -0
  46. package/dist/core/archive.d.ts +11 -0
  47. package/dist/core/archive.js +319 -0
  48. package/dist/core/artifact-graph/graph.d.ts +56 -0
  49. package/dist/core/artifact-graph/graph.js +141 -0
  50. package/dist/core/artifact-graph/index.d.ts +8 -0
  51. package/dist/core/artifact-graph/index.js +14 -0
  52. package/dist/core/artifact-graph/instruction-loader.d.ts +143 -0
  53. package/dist/core/artifact-graph/instruction-loader.js +217 -0
  54. package/dist/core/artifact-graph/outputs.d.ts +14 -0
  55. package/dist/core/artifact-graph/outputs.js +39 -0
  56. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  57. package/dist/core/artifact-graph/resolver.js +258 -0
  58. package/dist/core/artifact-graph/schema.d.ts +13 -0
  59. package/dist/core/artifact-graph/schema.js +108 -0
  60. package/dist/core/artifact-graph/state.d.ts +12 -0
  61. package/dist/core/artifact-graph/state.js +31 -0
  62. package/dist/core/artifact-graph/types.d.ts +45 -0
  63. package/dist/core/artifact-graph/types.js +43 -0
  64. package/dist/core/available-tools.d.ts +17 -0
  65. package/dist/core/available-tools.js +43 -0
  66. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  67. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  68. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  69. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  70. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  71. package/dist/core/command-generation/adapters/auggie.js +27 -0
  72. package/dist/core/command-generation/adapters/bob.d.ts +14 -0
  73. package/dist/core/command-generation/adapters/bob.js +45 -0
  74. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  75. package/dist/core/command-generation/adapters/claude.js +50 -0
  76. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  77. package/dist/core/command-generation/adapters/cline.js +27 -0
  78. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  79. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  80. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  81. package/dist/core/command-generation/adapters/codex.js +39 -0
  82. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  83. package/dist/core/command-generation/adapters/continue.js +28 -0
  84. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  85. package/dist/core/command-generation/adapters/costrict.js +27 -0
  86. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  87. package/dist/core/command-generation/adapters/crush.js +30 -0
  88. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  89. package/dist/core/command-generation/adapters/cursor.js +44 -0
  90. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  91. package/dist/core/command-generation/adapters/factory.js +27 -0
  92. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  93. package/dist/core/command-generation/adapters/gemini.js +26 -0
  94. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  95. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  96. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  97. package/dist/core/command-generation/adapters/iflow.js +29 -0
  98. package/dist/core/command-generation/adapters/index.d.ts +32 -0
  99. package/dist/core/command-generation/adapters/index.js +32 -0
  100. package/dist/core/command-generation/adapters/junie.d.ts +13 -0
  101. package/dist/core/command-generation/adapters/junie.js +26 -0
  102. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  103. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  104. package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
  105. package/dist/core/command-generation/adapters/kiro.js +26 -0
  106. package/dist/core/command-generation/adapters/lingma.d.ts +13 -0
  107. package/dist/core/command-generation/adapters/lingma.js +30 -0
  108. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  109. package/dist/core/command-generation/adapters/opencode.js +27 -0
  110. package/dist/core/command-generation/adapters/pi.d.ts +18 -0
  111. package/dist/core/command-generation/adapters/pi.js +55 -0
  112. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  113. package/dist/core/command-generation/adapters/qoder.js +30 -0
  114. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  115. package/dist/core/command-generation/adapters/qwen.js +26 -0
  116. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  117. package/dist/core/command-generation/adapters/roocode.js +27 -0
  118. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  119. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  120. package/dist/core/command-generation/generator.d.ts +21 -0
  121. package/dist/core/command-generation/generator.js +27 -0
  122. package/dist/core/command-generation/index.d.ts +22 -0
  123. package/dist/core/command-generation/index.js +24 -0
  124. package/dist/core/command-generation/registry.d.ts +36 -0
  125. package/dist/core/command-generation/registry.js +98 -0
  126. package/dist/core/command-generation/types.d.ts +56 -0
  127. package/dist/core/command-generation/types.js +8 -0
  128. package/dist/core/completions/command-registry.d.ts +7 -0
  129. package/dist/core/completions/command-registry.js +596 -0
  130. package/dist/core/completions/completion-provider.d.ts +71 -0
  131. package/dist/core/completions/completion-provider.js +129 -0
  132. package/dist/core/completions/factory.d.ts +64 -0
  133. package/dist/core/completions/factory.js +75 -0
  134. package/dist/core/completions/generators/bash-generator.d.ts +35 -0
  135. package/dist/core/completions/generators/bash-generator.js +230 -0
  136. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  137. package/dist/core/completions/generators/fish-generator.js +160 -0
  138. package/dist/core/completions/generators/powershell-generator.d.ts +36 -0
  139. package/dist/core/completions/generators/powershell-generator.js +266 -0
  140. package/dist/core/completions/generators/zsh-generator.d.ts +47 -0
  141. package/dist/core/completions/generators/zsh-generator.js +274 -0
  142. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  143. package/dist/core/completions/installers/bash-installer.js +318 -0
  144. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  145. package/dist/core/completions/installers/fish-installer.js +143 -0
  146. package/dist/core/completions/installers/powershell-installer.d.ts +102 -0
  147. package/dist/core/completions/installers/powershell-installer.js +387 -0
  148. package/dist/core/completions/installers/zsh-installer.d.ts +117 -0
  149. package/dist/core/completions/installers/zsh-installer.js +421 -0
  150. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  151. package/dist/core/completions/templates/bash-templates.js +30 -0
  152. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  153. package/dist/core/completions/templates/fish-templates.js +45 -0
  154. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  155. package/dist/core/completions/templates/powershell-templates.js +34 -0
  156. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  157. package/dist/core/completions/templates/zsh-templates.js +45 -0
  158. package/dist/core/completions/types.d.ts +101 -0
  159. package/dist/core/completions/types.js +2 -0
  160. package/dist/core/config-prompts.d.ts +9 -0
  161. package/dist/core/config-prompts.js +34 -0
  162. package/dist/core/config-schema.d.ts +86 -0
  163. package/dist/core/config-schema.js +213 -0
  164. package/dist/core/config.d.ts +19 -0
  165. package/dist/core/config.js +38 -0
  166. package/dist/core/converters/json-converter.d.ts +6 -0
  167. package/dist/core/converters/json-converter.js +51 -0
  168. package/dist/core/global-config.d.ts +49 -0
  169. package/dist/core/global-config.js +124 -0
  170. package/dist/core/index.d.ts +3 -0
  171. package/dist/core/index.js +4 -0
  172. package/dist/core/init.d.ts +37 -0
  173. package/dist/core/init.js +585 -0
  174. package/dist/core/legacy-cleanup.d.ts +169 -0
  175. package/dist/core/legacy-cleanup.js +578 -0
  176. package/dist/core/list.d.ts +9 -0
  177. package/dist/core/list.js +172 -0
  178. package/dist/core/migration.d.ts +23 -0
  179. package/dist/core/migration.js +108 -0
  180. package/dist/core/parsers/change-parser.d.ts +13 -0
  181. package/dist/core/parsers/change-parser.js +197 -0
  182. package/dist/core/parsers/markdown-parser.d.ts +26 -0
  183. package/dist/core/parsers/markdown-parser.js +227 -0
  184. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  185. package/dist/core/parsers/requirement-blocks.js +201 -0
  186. package/dist/core/parsers/spec-structure.d.ts +9 -0
  187. package/dist/core/parsers/spec-structure.js +88 -0
  188. package/dist/core/profile-sync-drift.d.ts +38 -0
  189. package/dist/core/profile-sync-drift.js +197 -0
  190. package/dist/core/profiles.d.ts +26 -0
  191. package/dist/core/profiles.js +37 -0
  192. package/dist/core/project-config.d.ts +64 -0
  193. package/dist/core/project-config.js +224 -0
  194. package/dist/core/schemas/base.schema.d.ts +13 -0
  195. package/dist/core/schemas/base.schema.js +13 -0
  196. package/dist/core/schemas/change.schema.d.ts +73 -0
  197. package/dist/core/schemas/change.schema.js +31 -0
  198. package/dist/core/schemas/index.d.ts +4 -0
  199. package/dist/core/schemas/index.js +4 -0
  200. package/dist/core/schemas/spec.schema.d.ts +18 -0
  201. package/dist/core/schemas/spec.schema.js +15 -0
  202. package/dist/core/shared/index.d.ts +8 -0
  203. package/dist/core/shared/index.js +8 -0
  204. package/dist/core/shared/skill-generation.d.ts +49 -0
  205. package/dist/core/shared/skill-generation.js +90 -0
  206. package/dist/core/shared/tool-detection.d.ts +71 -0
  207. package/dist/core/shared/tool-detection.js +152 -0
  208. package/dist/core/specs-apply.d.ts +73 -0
  209. package/dist/core/specs-apply.js +393 -0
  210. package/dist/core/styles/palette.d.ts +7 -0
  211. package/dist/core/styles/palette.js +8 -0
  212. package/dist/core/templates/index.d.ts +8 -0
  213. package/dist/core/templates/index.js +9 -0
  214. package/dist/core/templates/skill-templates.d.ts +15 -0
  215. package/dist/core/templates/skill-templates.js +14 -0
  216. package/dist/core/templates/types.d.ts +19 -0
  217. package/dist/core/templates/types.js +5 -0
  218. package/dist/core/templates/workflows/analyze.d.ts +4 -0
  219. package/dist/core/templates/workflows/analyze.js +101 -0
  220. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  221. package/dist/core/templates/workflows/apply-change.js +308 -0
  222. package/dist/core/templates/workflows/archive-change.d.ts +10 -0
  223. package/dist/core/templates/workflows/archive-change.js +271 -0
  224. package/dist/core/templates/workflows/clarify.d.ts +4 -0
  225. package/dist/core/templates/workflows/clarify.js +108 -0
  226. package/dist/core/templates/workflows/debug.d.ts +4 -0
  227. package/dist/core/templates/workflows/debug.js +117 -0
  228. package/dist/core/templates/workflows/explore.d.ts +10 -0
  229. package/dist/core/templates/workflows/explore.js +479 -0
  230. package/dist/core/templates/workflows/propose.d.ts +10 -0
  231. package/dist/core/templates/workflows/propose.js +216 -0
  232. package/dist/core/templates/workflows/sync.d.ts +4 -0
  233. package/dist/core/templates/workflows/sync.js +108 -0
  234. package/dist/core/update.d.ts +82 -0
  235. package/dist/core/update.js +555 -0
  236. package/dist/core/validation/constants.d.ts +34 -0
  237. package/dist/core/validation/constants.js +40 -0
  238. package/dist/core/validation/types.d.ts +18 -0
  239. package/dist/core/validation/types.js +2 -0
  240. package/dist/core/validation/validator.d.ts +33 -0
  241. package/dist/core/validation/validator.js +418 -0
  242. package/dist/core/view.d.ts +8 -0
  243. package/dist/core/view.js +169 -0
  244. package/dist/core/workspace/foundation.d.ts +79 -0
  245. package/dist/core/workspace/foundation.js +367 -0
  246. package/dist/core/workspace/index.d.ts +5 -0
  247. package/dist/core/workspace/index.js +5 -0
  248. package/dist/core/workspace/link-input.d.ts +9 -0
  249. package/dist/core/workspace/link-input.js +32 -0
  250. package/dist/core/workspace/open-surface.d.ts +24 -0
  251. package/dist/core/workspace/open-surface.js +137 -0
  252. package/dist/core/workspace/openers.d.ts +21 -0
  253. package/dist/core/workspace/openers.js +119 -0
  254. package/dist/index.d.ts +3 -0
  255. package/dist/index.js +3 -0
  256. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  257. package/dist/prompts/searchable-multi-select.js +159 -0
  258. package/dist/ui/ascii-patterns.d.ts +25 -0
  259. package/dist/ui/ascii-patterns.js +140 -0
  260. package/dist/ui/welcome-screen.d.ts +10 -0
  261. package/dist/ui/welcome-screen.js +144 -0
  262. package/dist/utils/change-metadata.d.ts +51 -0
  263. package/dist/utils/change-metadata.js +147 -0
  264. package/dist/utils/change-utils.d.ts +62 -0
  265. package/dist/utils/change-utils.js +122 -0
  266. package/dist/utils/command-references.d.ts +18 -0
  267. package/dist/utils/command-references.js +20 -0
  268. package/dist/utils/file-system.d.ts +41 -0
  269. package/dist/utils/file-system.js +301 -0
  270. package/dist/utils/index.d.ts +6 -0
  271. package/dist/utils/index.js +9 -0
  272. package/dist/utils/interactive.d.ts +18 -0
  273. package/dist/utils/interactive.js +21 -0
  274. package/dist/utils/item-discovery.d.ts +4 -0
  275. package/dist/utils/item-discovery.js +73 -0
  276. package/dist/utils/match.d.ts +3 -0
  277. package/dist/utils/match.js +22 -0
  278. package/dist/utils/shell-detection.d.ts +20 -0
  279. package/dist/utils/shell-detection.js +41 -0
  280. package/dist/utils/task-progress.d.ts +8 -0
  281. package/dist/utils/task-progress.js +36 -0
  282. package/package.json +76 -0
  283. package/schemas/synarcx/schema.yaml +153 -0
  284. package/schemas/synarcx/templates/design.md +19 -0
  285. package/schemas/synarcx/templates/proposal.md +23 -0
  286. package/schemas/synarcx/templates/spec.md +8 -0
  287. package/schemas/synarcx/templates/tasks.md +9 -0
  288. package/scripts/postinstall.js +83 -0
@@ -0,0 +1,108 @@
1
+ import * as fs from 'node:fs';
2
+ import { parse as parseYaml } from 'yaml';
3
+ import { SchemaYamlSchema } from './types.js';
4
+ export class SchemaValidationError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = 'SchemaValidationError';
8
+ }
9
+ }
10
+ /**
11
+ * Loads and validates an artifact schema from a YAML file.
12
+ */
13
+ export function loadSchema(filePath) {
14
+ const content = fs.readFileSync(filePath, 'utf-8');
15
+ return parseSchema(content);
16
+ }
17
+ /**
18
+ * Parses and validates an artifact schema from YAML content.
19
+ */
20
+ export function parseSchema(yamlContent) {
21
+ const parsed = parseYaml(yamlContent);
22
+ // Validate with Zod
23
+ const result = SchemaYamlSchema.safeParse(parsed);
24
+ if (!result.success) {
25
+ const errors = result.error.issues.map(e => `${e.path.join('.')}: ${e.message}`).join(', ');
26
+ throw new SchemaValidationError(`Invalid schema: ${errors}`);
27
+ }
28
+ const schema = result.data;
29
+ // Check for duplicate artifact IDs
30
+ validateNoDuplicateIds(schema.artifacts);
31
+ // Check that all requires references are valid
32
+ validateRequiresReferences(schema.artifacts);
33
+ // Check for cycles
34
+ validateNoCycles(schema.artifacts);
35
+ return schema;
36
+ }
37
+ /**
38
+ * Validates that there are no duplicate artifact IDs.
39
+ */
40
+ function validateNoDuplicateIds(artifacts) {
41
+ const seen = new Set();
42
+ for (const artifact of artifacts) {
43
+ if (seen.has(artifact.id)) {
44
+ throw new SchemaValidationError(`Duplicate artifact ID: ${artifact.id}`);
45
+ }
46
+ seen.add(artifact.id);
47
+ }
48
+ }
49
+ /**
50
+ * Validates that all `requires` references point to valid artifact IDs.
51
+ */
52
+ function validateRequiresReferences(artifacts) {
53
+ const validIds = new Set(artifacts.map(a => a.id));
54
+ for (const artifact of artifacts) {
55
+ for (const req of artifact.requires) {
56
+ if (!validIds.has(req)) {
57
+ throw new SchemaValidationError(`Invalid dependency reference in artifact '${artifact.id}': '${req}' does not exist`);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ /**
63
+ * Validates that there are no cyclic dependencies.
64
+ * Uses DFS to detect cycles and reports the full cycle path.
65
+ */
66
+ function validateNoCycles(artifacts) {
67
+ const artifactMap = new Map(artifacts.map(a => [a.id, a]));
68
+ const visited = new Set();
69
+ const inStack = new Set();
70
+ const parent = new Map();
71
+ function dfs(id) {
72
+ visited.add(id);
73
+ inStack.add(id);
74
+ const artifact = artifactMap.get(id);
75
+ if (!artifact)
76
+ return null;
77
+ for (const dep of artifact.requires) {
78
+ if (!visited.has(dep)) {
79
+ parent.set(dep, id);
80
+ const cycle = dfs(dep);
81
+ if (cycle)
82
+ return cycle;
83
+ }
84
+ else if (inStack.has(dep)) {
85
+ // Found a cycle - reconstruct the path
86
+ const cyclePath = [dep];
87
+ let current = id;
88
+ while (current !== dep) {
89
+ cyclePath.unshift(current);
90
+ current = parent.get(current);
91
+ }
92
+ cyclePath.unshift(dep);
93
+ return cyclePath.join(' → ');
94
+ }
95
+ }
96
+ inStack.delete(id);
97
+ return null;
98
+ }
99
+ for (const artifact of artifacts) {
100
+ if (!visited.has(artifact.id)) {
101
+ const cycle = dfs(artifact.id);
102
+ if (cycle) {
103
+ throw new SchemaValidationError(`Cyclic dependency detected: ${cycle}`);
104
+ }
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1,12 @@
1
+ import type { CompletedSet } from './types.js';
2
+ import type { ArtifactGraph } from './graph.js';
3
+ /**
4
+ * Detects which artifacts are completed by checking file existence in the change directory.
5
+ * Returns a Set of completed artifact IDs.
6
+ *
7
+ * @param graph - The artifact graph to check
8
+ * @param changeDir - The change directory to scan for files
9
+ * @returns Set of artifact IDs whose generated files exist
10
+ */
11
+ export declare function detectCompleted(graph: ArtifactGraph, changeDir: string): CompletedSet;
12
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1,31 @@
1
+ import * as fs from 'node:fs';
2
+ import { artifactOutputExists } from './outputs.js';
3
+ /**
4
+ * Detects which artifacts are completed by checking file existence in the change directory.
5
+ * Returns a Set of completed artifact IDs.
6
+ *
7
+ * @param graph - The artifact graph to check
8
+ * @param changeDir - The change directory to scan for files
9
+ * @returns Set of artifact IDs whose generated files exist
10
+ */
11
+ export function detectCompleted(graph, changeDir) {
12
+ const completed = new Set();
13
+ // Handle missing change directory gracefully
14
+ if (!fs.existsSync(changeDir)) {
15
+ return completed;
16
+ }
17
+ for (const artifact of graph.getAllArtifacts()) {
18
+ if (isArtifactComplete(artifact.generates, changeDir)) {
19
+ completed.add(artifact.id);
20
+ }
21
+ }
22
+ return completed;
23
+ }
24
+ /**
25
+ * Checks if an artifact is complete by checking if its generated file(s) exist.
26
+ * Supports both simple paths and glob patterns.
27
+ */
28
+ function isArtifactComplete(generates, changeDir) {
29
+ return artifactOutputExists(changeDir, generates);
30
+ }
31
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ export declare const ArtifactSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ generates: z.ZodString;
5
+ description: z.ZodString;
6
+ template: z.ZodString;
7
+ instruction: z.ZodOptional<z.ZodString>;
8
+ requires: z.ZodDefault<z.ZodArray<z.ZodString>>;
9
+ }, z.core.$strip>;
10
+ export declare const ApplyPhaseSchema: z.ZodObject<{
11
+ requires: z.ZodArray<z.ZodString>;
12
+ tracks: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ instruction: z.ZodOptional<z.ZodString>;
14
+ }, z.core.$strip>;
15
+ export declare const SchemaYamlSchema: z.ZodObject<{
16
+ name: z.ZodString;
17
+ version: z.ZodNumber;
18
+ description: z.ZodOptional<z.ZodString>;
19
+ artifacts: z.ZodArray<z.ZodObject<{
20
+ id: z.ZodString;
21
+ generates: z.ZodString;
22
+ description: z.ZodString;
23
+ template: z.ZodString;
24
+ instruction: z.ZodOptional<z.ZodString>;
25
+ requires: z.ZodDefault<z.ZodArray<z.ZodString>>;
26
+ }, z.core.$strip>>;
27
+ apply: z.ZodOptional<z.ZodObject<{
28
+ requires: z.ZodArray<z.ZodString>;
29
+ tracks: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ instruction: z.ZodOptional<z.ZodString>;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>;
33
+ export type Artifact = z.infer<typeof ArtifactSchema>;
34
+ export type ApplyPhase = z.infer<typeof ApplyPhaseSchema>;
35
+ export type SchemaYaml = z.infer<typeof SchemaYamlSchema>;
36
+ export declare const ChangeMetadataSchema: z.ZodObject<{
37
+ schema: z.ZodString;
38
+ created: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>;
40
+ export type ChangeMetadata = z.infer<typeof ChangeMetadataSchema>;
41
+ export type CompletedSet = Set<string>;
42
+ export interface BlockedArtifacts {
43
+ [artifactId: string]: string[];
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+ // Artifact definition schema
3
+ export const ArtifactSchema = z.object({
4
+ id: z.string().min(1, { error: 'Artifact ID is required' }),
5
+ generates: z.string().min(1, { error: 'generates field is required' }),
6
+ description: z.string(),
7
+ template: z.string().min(1, { error: 'template field is required' }),
8
+ instruction: z.string().optional(),
9
+ requires: z.array(z.string()).default([]),
10
+ });
11
+ // Apply phase configuration for schema-aware apply instructions
12
+ export const ApplyPhaseSchema = z.object({
13
+ // Artifact IDs that must exist before apply is available
14
+ requires: z.array(z.string()).min(1, { error: 'At least one required artifact' }),
15
+ // Path to file with checkboxes for progress (relative to change dir), or null if no tracking
16
+ tracks: z.string().nullable().optional(),
17
+ // Custom guidance for the apply phase
18
+ instruction: z.string().optional(),
19
+ });
20
+ // Full schema YAML structure
21
+ export const SchemaYamlSchema = z.object({
22
+ name: z.string().min(1, { error: 'Schema name is required' }),
23
+ version: z.number().int().positive({ error: 'Version must be a positive integer' }),
24
+ description: z.string().optional(),
25
+ artifacts: z.array(ArtifactSchema).min(1, { error: 'At least one artifact required' }),
26
+ // Optional apply phase configuration (for schema-aware apply instructions)
27
+ apply: ApplyPhaseSchema.optional(),
28
+ });
29
+ // Per-change metadata schema
30
+ // Note: schema field is validated at parse time against available schemas
31
+ // using a lazy import to avoid circular dependencies
32
+ export const ChangeMetadataSchema = z.object({
33
+ // Required: which workflow schema this change uses
34
+ schema: z.string().min(1, { message: 'schema is required' }),
35
+ // Optional: creation timestamp (ISO date string)
36
+ created: z
37
+ .string()
38
+ .regex(/^\d{4}-\d{2}-\d{2}$/, {
39
+ message: 'created must be YYYY-MM-DD format',
40
+ })
41
+ .optional(),
42
+ });
43
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Available Tools Detection
3
+ *
4
+ * Detects which AI tools are available in a project by scanning
5
+ * for their configuration directories.
6
+ */
7
+ import { type AIToolOption } from './config.js';
8
+ /**
9
+ * Scans the project path for AI tool configuration directories and returns
10
+ * the tools that are present.
11
+ *
12
+ * For tools with `detectionPaths`, checks those specific paths (files or
13
+ * directories). Otherwise checks for the tool's `skillsDir` directory at
14
+ * the project root. Only tools with a `skillsDir` property are considered.
15
+ */
16
+ export declare function getAvailableTools(projectPath: string): AIToolOption[];
17
+ //# sourceMappingURL=available-tools.d.ts.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Available Tools Detection
3
+ *
4
+ * Detects which AI tools are available in a project by scanning
5
+ * for their configuration directories.
6
+ */
7
+ import path from 'path';
8
+ import * as fs from 'fs';
9
+ import { AI_TOOLS } from './config.js';
10
+ /**
11
+ * Scans the project path for AI tool configuration directories and returns
12
+ * the tools that are present.
13
+ *
14
+ * For tools with `detectionPaths`, checks those specific paths (files or
15
+ * directories). Otherwise checks for the tool's `skillsDir` directory at
16
+ * the project root. Only tools with a `skillsDir` property are considered.
17
+ */
18
+ export function getAvailableTools(projectPath) {
19
+ return AI_TOOLS.filter((tool) => {
20
+ if (!tool.skillsDir)
21
+ return false;
22
+ if (tool.detectionPaths && tool.detectionPaths.length > 0) {
23
+ // statSync without .isDirectory() — detection paths can be files or directories
24
+ return tool.detectionPaths.some((p) => {
25
+ try {
26
+ fs.statSync(path.join(projectPath, p));
27
+ return true;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ });
33
+ }
34
+ const dirPath = path.join(projectPath, tool.skillsDir);
35
+ try {
36
+ return fs.statSync(dirPath).isDirectory();
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=available-tools.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Amazon Q Developer Command Adapter
3
+ *
4
+ * Formats commands for Amazon Q Developer following its frontmatter specification.
5
+ */
6
+ import type { ToolCommandAdapter } from '../types.js';
7
+ /**
8
+ * Amazon Q adapter for command generation.
9
+ * File path: .amazonq/prompts/syn-<id>.md
10
+ * Frontmatter: description
11
+ */
12
+ export declare const amazonQAdapter: ToolCommandAdapter;
13
+ //# sourceMappingURL=amazon-q.d.ts.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Amazon Q Developer Command Adapter
3
+ *
4
+ * Formats commands for Amazon Q Developer following its frontmatter specification.
5
+ */
6
+ import path from 'path';
7
+ /**
8
+ * Amazon Q adapter for command generation.
9
+ * File path: .amazonq/prompts/syn-<id>.md
10
+ * Frontmatter: description
11
+ */
12
+ export const amazonQAdapter = {
13
+ toolId: 'amazon-q',
14
+ getFilePath(commandId) {
15
+ return path.join('.amazonq', 'prompts', `syn-${commandId}.md`);
16
+ },
17
+ formatFile(content) {
18
+ return `---
19
+ description: ${content.description}
20
+ ---
21
+
22
+ ${content.body}
23
+ `;
24
+ },
25
+ };
26
+ //# sourceMappingURL=amazon-q.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Antigravity Command Adapter
3
+ *
4
+ * Formats commands for Antigravity following its frontmatter specification.
5
+ */
6
+ import type { ToolCommandAdapter } from '../types.js';
7
+ /**
8
+ * Antigravity adapter for command generation.
9
+ * File path: .agent/workflows/syn-<id>.md
10
+ * Frontmatter: description
11
+ */
12
+ export declare const antigravityAdapter: ToolCommandAdapter;
13
+ //# sourceMappingURL=antigravity.d.ts.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Antigravity Command Adapter
3
+ *
4
+ * Formats commands for Antigravity following its frontmatter specification.
5
+ */
6
+ import path from 'path';
7
+ /**
8
+ * Antigravity adapter for command generation.
9
+ * File path: .agent/workflows/syn-<id>.md
10
+ * Frontmatter: description
11
+ */
12
+ export const antigravityAdapter = {
13
+ toolId: 'antigravity',
14
+ getFilePath(commandId) {
15
+ return path.join('.agent', 'workflows', `syn-${commandId}.md`);
16
+ },
17
+ formatFile(content) {
18
+ return `---
19
+ description: ${content.description}
20
+ ---
21
+
22
+ ${content.body}
23
+ `;
24
+ },
25
+ };
26
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Auggie (Augment CLI) Command Adapter
3
+ *
4
+ * Formats commands for Auggie following its frontmatter specification.
5
+ */
6
+ import type { ToolCommandAdapter } from '../types.js';
7
+ /**
8
+ * Auggie adapter for command generation.
9
+ * File path: .augment/commands/syn-<id>.md
10
+ * Frontmatter: description, argument-hint
11
+ */
12
+ export declare const auggieAdapter: ToolCommandAdapter;
13
+ //# sourceMappingURL=auggie.d.ts.map
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Auggie (Augment CLI) Command Adapter
3
+ *
4
+ * Formats commands for Auggie following its frontmatter specification.
5
+ */
6
+ import path from 'path';
7
+ /**
8
+ * Auggie adapter for command generation.
9
+ * File path: .augment/commands/syn-<id>.md
10
+ * Frontmatter: description, argument-hint
11
+ */
12
+ export const auggieAdapter = {
13
+ toolId: 'auggie',
14
+ getFilePath(commandId) {
15
+ return path.join('.augment', 'commands', `syn-${commandId}.md`);
16
+ },
17
+ formatFile(content) {
18
+ return `---
19
+ description: ${content.description}
20
+ argument-hint: command arguments
21
+ ---
22
+
23
+ ${content.body}
24
+ `;
25
+ },
26
+ };
27
+ //# sourceMappingURL=auggie.js.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Bob Shell Command Adapter
3
+ *
4
+ * Formats commands for Bob Shell following its markdown specification.
5
+ * Commands are stored in .bob/commands/ directory.
6
+ */
7
+ import type { ToolCommandAdapter } from '../types.js';
8
+ /**
9
+ * Bob Shell adapter for command generation.
10
+ * File path: .bob/commands/syn-<id>.md
11
+ * Frontmatter: description, argument-hint
12
+ */
13
+ export declare const bobAdapter: ToolCommandAdapter;
14
+ //# sourceMappingURL=bob.d.ts.map
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Bob Shell Command Adapter
3
+ *
4
+ * Formats commands for Bob Shell following its markdown specification.
5
+ * Commands are stored in .bob/commands/ directory.
6
+ */
7
+ import path from 'path';
8
+ import { transformToHyphenCommands } from '../../../utils/command-references.js';
9
+ /**
10
+ * Escapes a string value for safe YAML output.
11
+ * Quotes the string if it contains special YAML characters.
12
+ */
13
+ function escapeYamlValue(value) {
14
+ // Check if value needs quoting (contains special YAML characters or starts/ends with whitespace)
15
+ const needsQuoting = /[:\n\r#{}[\],&*!|>'"%@`]|^\s|\s$/.test(value);
16
+ if (needsQuoting) {
17
+ // Use double quotes and escape internal double quotes and backslashes
18
+ const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
19
+ return `"${escaped}"`;
20
+ }
21
+ return value;
22
+ }
23
+ /**
24
+ * Bob Shell adapter for command generation.
25
+ * File path: .bob/commands/syn-<id>.md
26
+ * Frontmatter: description, argument-hint
27
+ */
28
+ export const bobAdapter = {
29
+ toolId: 'bob',
30
+ getFilePath(commandId) {
31
+ return path.join('.bob', 'commands', `syn-${commandId}.md`);
32
+ },
33
+ formatFile(content) {
34
+ // Transform command references from colon to hyphen format for Bob
35
+ const transformedBody = transformToHyphenCommands(content.body);
36
+ return `---
37
+ description: ${escapeYamlValue(content.description)}
38
+ argument-hint: command arguments
39
+ ---
40
+
41
+ ${transformedBody}
42
+ `;
43
+ },
44
+ };
45
+ //# sourceMappingURL=bob.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Claude Code Command Adapter
3
+ *
4
+ * Formats commands for Claude Code following its frontmatter specification.
5
+ */
6
+ import type { ToolCommandAdapter } from '../types.js';
7
+ /**
8
+ * Claude Code adapter for command generation.
9
+ * File path: .claude/commands/syn/<id>.md
10
+ * Frontmatter: name, description, category, tags
11
+ */
12
+ export declare const claudeAdapter: ToolCommandAdapter;
13
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Claude Code Command Adapter
3
+ *
4
+ * Formats commands for Claude Code following its frontmatter specification.
5
+ */
6
+ import path from 'path';
7
+ /**
8
+ * Escapes a string value for safe YAML output.
9
+ * Quotes the string if it contains special YAML characters.
10
+ */
11
+ function escapeYamlValue(value) {
12
+ // Check if value needs quoting (contains special YAML characters or starts/ends with whitespace)
13
+ const needsQuoting = /[:\n\r#{}[\],&*!|>'"%@`]|^\s|\s$/.test(value);
14
+ if (needsQuoting) {
15
+ // Use double quotes and escape internal double quotes and backslashes
16
+ const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
17
+ return `"${escaped}"`;
18
+ }
19
+ return value;
20
+ }
21
+ /**
22
+ * Formats a tags array as a YAML array with proper escaping.
23
+ */
24
+ function formatTagsArray(tags) {
25
+ const escapedTags = tags.map((tag) => escapeYamlValue(tag));
26
+ return `[${escapedTags.join(', ')}]`;
27
+ }
28
+ /**
29
+ * Claude Code adapter for command generation.
30
+ * File path: .claude/commands/syn/<id>.md
31
+ * Frontmatter: name, description, category, tags
32
+ */
33
+ export const claudeAdapter = {
34
+ toolId: 'claude',
35
+ getFilePath(commandId) {
36
+ return path.join('.claude', 'commands', 'syn', `${commandId}.md`);
37
+ },
38
+ formatFile(content) {
39
+ return `---
40
+ name: ${escapeYamlValue(content.name)}
41
+ description: ${escapeYamlValue(content.description)}
42
+ category: ${escapeYamlValue(content.category)}
43
+ tags: ${formatTagsArray(content.tags)}
44
+ ---
45
+
46
+ ${content.body}
47
+ `;
48
+ },
49
+ };
50
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Cline Command Adapter
3
+ *
4
+ * Formats commands for Cline following its workflow specification.
5
+ * Cline uses markdown headers instead of YAML frontmatter.
6
+ */
7
+ import type { ToolCommandAdapter } from '../types.js';
8
+ /**
9
+ * Cline adapter for command generation.
10
+ * File path: .clinerules/workflows/syn-<id>.md
11
+ * Format: Markdown header with description
12
+ */
13
+ export declare const clineAdapter: ToolCommandAdapter;
14
+ //# sourceMappingURL=cline.d.ts.map
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Cline Command Adapter
3
+ *
4
+ * Formats commands for Cline following its workflow specification.
5
+ * Cline uses markdown headers instead of YAML frontmatter.
6
+ */
7
+ import path from 'path';
8
+ /**
9
+ * Cline adapter for command generation.
10
+ * File path: .clinerules/workflows/syn-<id>.md
11
+ * Format: Markdown header with description
12
+ */
13
+ export const clineAdapter = {
14
+ toolId: 'cline',
15
+ getFilePath(commandId) {
16
+ return path.join('.clinerules', 'workflows', `syn-${commandId}.md`);
17
+ },
18
+ formatFile(content) {
19
+ return `# ${content.name}
20
+
21
+ ${content.description}
22
+
23
+ ${content.body}
24
+ `;
25
+ },
26
+ };
27
+ //# sourceMappingURL=cline.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CodeBuddy Command Adapter
3
+ *
4
+ * Formats commands for CodeBuddy following its frontmatter specification.
5
+ */
6
+ import type { ToolCommandAdapter } from '../types.js';
7
+ /**
8
+ * CodeBuddy adapter for command generation.
9
+ * File path: .codebuddy/commands/syn/<id>.md
10
+ * Frontmatter: name, description, argument-hint
11
+ */
12
+ export declare const codebuddyAdapter: ToolCommandAdapter;
13
+ //# sourceMappingURL=codebuddy.d.ts.map
@@ -0,0 +1,28 @@
1
+ /**
2
+ * CodeBuddy Command Adapter
3
+ *
4
+ * Formats commands for CodeBuddy following its frontmatter specification.
5
+ */
6
+ import path from 'path';
7
+ /**
8
+ * CodeBuddy adapter for command generation.
9
+ * File path: .codebuddy/commands/syn/<id>.md
10
+ * Frontmatter: name, description, argument-hint
11
+ */
12
+ export const codebuddyAdapter = {
13
+ toolId: 'codebuddy',
14
+ getFilePath(commandId) {
15
+ return path.join('.codebuddy', 'commands', 'syn', `${commandId}.md`);
16
+ },
17
+ formatFile(content) {
18
+ return `---
19
+ name: ${content.name}
20
+ description: "${content.description}"
21
+ argument-hint: "[command arguments]"
22
+ ---
23
+
24
+ ${content.body}
25
+ `;
26
+ },
27
+ };
28
+ //# sourceMappingURL=codebuddy.js.map
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Codex Command Adapter
3
+ *
4
+ * Formats commands for Codex following its frontmatter specification.
5
+ * Codex custom prompts live in the global home directory (~/.codex/prompts/)
6
+ * and are not shared through the repository. The CODEX_HOME env var can
7
+ * override the default ~/.codex location.
8
+ */
9
+ import type { ToolCommandAdapter } from '../types.js';
10
+ /**
11
+ * Codex adapter for command generation.
12
+ * File path: <CODEX_HOME>/prompts/syn-<id>.md (absolute, global)
13
+ * Frontmatter: description, argument-hint
14
+ */
15
+ export declare const codexAdapter: ToolCommandAdapter;
16
+ //# sourceMappingURL=codex.d.ts.map