@zigrivers/scaffold 3.12.0 → 3.14.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 (157) hide show
  1. package/README.md +3 -3
  2. package/dist/cli/commands/adopt.d.ts.map +1 -1
  3. package/dist/cli/commands/adopt.js +8 -7
  4. package/dist/cli/commands/adopt.js.map +1 -1
  5. package/dist/cli/commands/adopt.serialization.test.js +8 -0
  6. package/dist/cli/commands/adopt.serialization.test.js.map +1 -1
  7. package/dist/cli/commands/adopt.test.js +8 -0
  8. package/dist/cli/commands/adopt.test.js.map +1 -1
  9. package/dist/cli/commands/build.d.ts.map +1 -1
  10. package/dist/cli/commands/build.js +191 -180
  11. package/dist/cli/commands/build.js.map +1 -1
  12. package/dist/cli/commands/build.test.js +1 -0
  13. package/dist/cli/commands/build.test.js.map +1 -1
  14. package/dist/cli/commands/complete.d.ts.map +1 -1
  15. package/dist/cli/commands/complete.js +16 -12
  16. package/dist/cli/commands/complete.js.map +1 -1
  17. package/dist/cli/commands/complete.test.js +14 -5
  18. package/dist/cli/commands/complete.test.js.map +1 -1
  19. package/dist/cli/commands/init.d.ts.map +1 -1
  20. package/dist/cli/commands/init.js +120 -115
  21. package/dist/cli/commands/init.js.map +1 -1
  22. package/dist/cli/commands/init.test.js +40 -4
  23. package/dist/cli/commands/init.test.js.map +1 -1
  24. package/dist/cli/commands/knowledge.test.js +1 -0
  25. package/dist/cli/commands/knowledge.test.js.map +1 -1
  26. package/dist/cli/commands/reset.d.ts.map +1 -1
  27. package/dist/cli/commands/reset.js +44 -40
  28. package/dist/cli/commands/reset.js.map +1 -1
  29. package/dist/cli/commands/reset.test.js +42 -20
  30. package/dist/cli/commands/reset.test.js.map +1 -1
  31. package/dist/cli/commands/rework.d.ts.map +1 -1
  32. package/dist/cli/commands/rework.js +16 -12
  33. package/dist/cli/commands/rework.js.map +1 -1
  34. package/dist/cli/commands/rework.test.js +12 -3
  35. package/dist/cli/commands/rework.test.js.map +1 -1
  36. package/dist/cli/commands/run.d.ts.map +1 -1
  37. package/dist/cli/commands/run.js +318 -298
  38. package/dist/cli/commands/run.js.map +1 -1
  39. package/dist/cli/commands/run.test.js +93 -120
  40. package/dist/cli/commands/run.test.js.map +1 -1
  41. package/dist/cli/commands/skip.d.ts.map +1 -1
  42. package/dist/cli/commands/skip.js +19 -15
  43. package/dist/cli/commands/skip.js.map +1 -1
  44. package/dist/cli/commands/skip.test.js +23 -11
  45. package/dist/cli/commands/skip.test.js.map +1 -1
  46. package/dist/cli/commands/update.d.ts.map +1 -1
  47. package/dist/cli/commands/update.js +3 -1
  48. package/dist/cli/commands/update.js.map +1 -1
  49. package/dist/cli/commands/update.test.js +8 -4
  50. package/dist/cli/commands/update.test.js.map +1 -1
  51. package/dist/cli/commands/version.d.ts.map +1 -1
  52. package/dist/cli/commands/version.js +3 -1
  53. package/dist/cli/commands/version.js.map +1 -1
  54. package/dist/cli/commands/version.test.js +9 -5
  55. package/dist/cli/commands/version.test.js.map +1 -1
  56. package/dist/cli/index.d.ts.map +1 -1
  57. package/dist/cli/index.js +2 -0
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/output/auto.d.ts +19 -6
  60. package/dist/cli/output/auto.d.ts.map +1 -1
  61. package/dist/cli/output/auto.js +10 -6
  62. package/dist/cli/output/auto.js.map +1 -1
  63. package/dist/cli/output/context.d.ts +23 -5
  64. package/dist/cli/output/context.d.ts.map +1 -1
  65. package/dist/cli/output/context.js.map +1 -1
  66. package/dist/cli/output/context.test.js +585 -0
  67. package/dist/cli/output/context.test.js.map +1 -1
  68. package/dist/cli/output/error-display.test.js +1 -0
  69. package/dist/cli/output/error-display.test.js.map +1 -1
  70. package/dist/cli/output/interactive.d.ts +20 -6
  71. package/dist/cli/output/interactive.d.ts.map +1 -1
  72. package/dist/cli/output/interactive.js +170 -59
  73. package/dist/cli/output/interactive.js.map +1 -1
  74. package/dist/cli/output/json.d.ts +19 -6
  75. package/dist/cli/output/json.d.ts.map +1 -1
  76. package/dist/cli/output/json.js +10 -6
  77. package/dist/cli/output/json.js.map +1 -1
  78. package/dist/cli/shutdown.d.ts +51 -0
  79. package/dist/cli/shutdown.d.ts.map +1 -0
  80. package/dist/cli/shutdown.js +199 -0
  81. package/dist/cli/shutdown.js.map +1 -0
  82. package/dist/cli/shutdown.test.d.ts +2 -0
  83. package/dist/cli/shutdown.test.d.ts.map +1 -0
  84. package/dist/cli/shutdown.test.js +316 -0
  85. package/dist/cli/shutdown.test.js.map +1 -0
  86. package/dist/core/assembly/overlay-state-resolver.test.js +1 -0
  87. package/dist/core/assembly/overlay-state-resolver.test.js.map +1 -1
  88. package/dist/e2e/game-pipeline.test.js +1 -0
  89. package/dist/e2e/game-pipeline.test.js.map +1 -1
  90. package/dist/e2e/init.test.js +6 -4
  91. package/dist/e2e/init.test.js.map +1 -1
  92. package/dist/e2e/project-type-overlays.test.js +1 -0
  93. package/dist/e2e/project-type-overlays.test.js.map +1 -1
  94. package/dist/state/lock-manager.d.ts +1 -0
  95. package/dist/state/lock-manager.d.ts.map +1 -1
  96. package/dist/state/lock-manager.js +1 -1
  97. package/dist/state/lock-manager.js.map +1 -1
  98. package/dist/wizard/copy/backend.d.ts +3 -0
  99. package/dist/wizard/copy/backend.d.ts.map +1 -0
  100. package/dist/wizard/copy/backend.js +49 -0
  101. package/dist/wizard/copy/backend.js.map +1 -0
  102. package/dist/wizard/copy/browser-extension.d.ts +3 -0
  103. package/dist/wizard/copy/browser-extension.d.ts.map +1 -0
  104. package/dist/wizard/copy/browser-extension.js +35 -0
  105. package/dist/wizard/copy/browser-extension.js.map +1 -0
  106. package/dist/wizard/copy/cli.d.ts +3 -0
  107. package/dist/wizard/copy/cli.d.ts.map +1 -0
  108. package/dist/wizard/copy/cli.js +40 -0
  109. package/dist/wizard/copy/cli.js.map +1 -0
  110. package/dist/wizard/copy/core.d.ts +3 -0
  111. package/dist/wizard/copy/core.d.ts.map +1 -0
  112. package/dist/wizard/copy/core.js +52 -0
  113. package/dist/wizard/copy/core.js.map +1 -0
  114. package/dist/wizard/copy/data-pipeline.d.ts +3 -0
  115. package/dist/wizard/copy/data-pipeline.d.ts.map +1 -0
  116. package/dist/wizard/copy/data-pipeline.js +66 -0
  117. package/dist/wizard/copy/data-pipeline.js.map +1 -0
  118. package/dist/wizard/copy/game.d.ts +3 -0
  119. package/dist/wizard/copy/game.d.ts.map +1 -0
  120. package/dist/wizard/copy/game.js +115 -0
  121. package/dist/wizard/copy/game.js.map +1 -0
  122. package/dist/wizard/copy/index.d.ts +8 -0
  123. package/dist/wizard/copy/index.d.ts.map +1 -0
  124. package/dist/wizard/copy/index.js +32 -0
  125. package/dist/wizard/copy/index.js.map +1 -0
  126. package/dist/wizard/copy/library.d.ts +3 -0
  127. package/dist/wizard/copy/library.d.ts.map +1 -0
  128. package/dist/wizard/copy/library.js +44 -0
  129. package/dist/wizard/copy/library.js.map +1 -0
  130. package/dist/wizard/copy/ml.d.ts +3 -0
  131. package/dist/wizard/copy/ml.d.ts.map +1 -0
  132. package/dist/wizard/copy/ml.js +45 -0
  133. package/dist/wizard/copy/ml.js.map +1 -0
  134. package/dist/wizard/copy/mobile-app.d.ts +3 -0
  135. package/dist/wizard/copy/mobile-app.d.ts.map +1 -0
  136. package/dist/wizard/copy/mobile-app.js +45 -0
  137. package/dist/wizard/copy/mobile-app.js.map +1 -0
  138. package/dist/wizard/copy/types.d.ts +60 -0
  139. package/dist/wizard/copy/types.d.ts.map +1 -0
  140. package/dist/wizard/copy/types.js +2 -0
  141. package/dist/wizard/copy/types.js.map +1 -0
  142. package/dist/wizard/copy/types.test-d.d.ts +2 -0
  143. package/dist/wizard/copy/types.test-d.d.ts.map +1 -0
  144. package/dist/wizard/copy/types.test-d.js +36 -0
  145. package/dist/wizard/copy/types.test-d.js.map +1 -0
  146. package/dist/wizard/copy/web-app.d.ts +3 -0
  147. package/dist/wizard/copy/web-app.d.ts.map +1 -0
  148. package/dist/wizard/copy/web-app.js +46 -0
  149. package/dist/wizard/copy/web-app.js.map +1 -0
  150. package/dist/wizard/questions.d.ts.map +1 -1
  151. package/dist/wizard/questions.js +87 -53
  152. package/dist/wizard/questions.js.map +1 -1
  153. package/dist/wizard/questions.test.js +3 -2
  154. package/dist/wizard/questions.test.js.map +1 -1
  155. package/dist/wizard/wizard.test.js +70 -0
  156. package/dist/wizard/wizard.test.js.map +1 -1
  157. package/package.json +1 -1
@@ -0,0 +1,66 @@
1
+ export const dataPipelineCopy = {
2
+ processingModel: {
3
+ short: 'How data moves through the pipeline.',
4
+ long: 'Batch processes data in scheduled chunks; streaming handles records as they arrive; '
5
+ + 'hybrid uses both depending on the stage.',
6
+ options: {
7
+ batch: { label: 'Batch', short: 'Processes data in scheduled chunks (hourly, daily, etc.).' },
8
+ streaming: { label: 'Streaming', short: 'Processes records continuously as they arrive.' },
9
+ hybrid: { label: 'Hybrid', short: 'Combines batch and streaming stages in the same pipeline.' },
10
+ },
11
+ },
12
+ orchestration: {
13
+ short: 'How pipeline steps are coordinated and triggered.',
14
+ long: 'None is fine for a single script; DAG-based manages complex task dependencies; '
15
+ + 'event-driven reacts to data arrivals; scheduled runs on a fixed timer.',
16
+ options: {
17
+ none: {
18
+ label: 'None',
19
+ short: 'Simple script or single-step pipeline — no orchestrator needed.',
20
+ },
21
+ 'dag-based': {
22
+ label: 'DAG-based',
23
+ short: 'Directed acyclic graph of tasks with dependency tracking (e.g. Airflow, Dagster).',
24
+ },
25
+ 'event-driven': {
26
+ label: 'Event-driven',
27
+ short: 'Steps trigger automatically when new data arrives.',
28
+ },
29
+ scheduled: { label: 'Scheduled', short: 'Runs on a fixed cron-like schedule.' },
30
+ },
31
+ },
32
+ dataQualityStrategy: {
33
+ short: 'How the pipeline validates and monitors data correctness.',
34
+ long: 'Validation checks rows at ingestion; testing adds assertion suites; '
35
+ + 'observability tracks drift and anomalies over time.',
36
+ options: {
37
+ none: { label: 'None', short: 'No automated data quality checks.' },
38
+ validation: { label: 'Validation', short: 'Schema and constraint checks on incoming data.' },
39
+ testing: {
40
+ label: 'Testing',
41
+ short: 'Assertion suites that run against data between stages (e.g. Great Expectations).',
42
+ },
43
+ observability: { label: 'Observability', short: 'Ongoing monitoring for drift, anomalies, and freshness.' },
44
+ },
45
+ },
46
+ schemaManagement: {
47
+ short: 'How data schemas are tracked and evolved.',
48
+ long: 'A schema registry stores versioned schemas centrally; '
49
+ + 'contracts define producer/consumer agreements.',
50
+ options: {
51
+ none: { label: 'None', short: 'Schemas are implicit or managed manually.' },
52
+ 'schema-registry': {
53
+ label: 'Schema registry',
54
+ short: 'Centralized store for versioned schemas (e.g. Confluent Schema Registry).',
55
+ },
56
+ contracts: {
57
+ label: 'Contracts',
58
+ short: 'Explicit producer/consumer schema agreements enforced at boundaries.',
59
+ },
60
+ },
61
+ },
62
+ hasDataCatalog: {
63
+ short: 'Maintain a searchable catalog of datasets, lineage, and metadata.',
64
+ },
65
+ };
66
+ //# sourceMappingURL=data-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-pipeline.js","sourceRoot":"","sources":["../../../src/wizard/copy/data-pipeline.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,eAAe,EAAE;QACf,KAAK,EAAE,sCAAsC;QAC7C,IAAI,EAAE,sFAAsF;cACxF,0CAA0C;QAC9C,OAAO,EAAE;YACP,KAAK,EAAM,EAAE,KAAK,EAAE,OAAO,EAAM,KAAK,EAAE,2DAA2D,EAAE;YACrG,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,gDAAgD,EAAE;YAC1F,MAAM,EAAK,EAAE,KAAK,EAAE,QAAQ,EAAK,KAAK,EAAE,2DAA2D,EAAE;SACtG;KACF;IACD,aAAa,EAAE;QACb,KAAK,EAAE,mDAAmD;QAC1D,IAAI,EAAE,iFAAiF;cACnF,wEAAwE;QAC5E,OAAO,EAAE;YACP,IAAI,EAAE;gBACJ,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,iEAAiE;aACzE;YACD,WAAW,EAAE;gBACX,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,mFAAmF;aAC3F;YACD,cAAc,EAAE;gBACd,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,oDAAoD;aAC5D;YACD,SAAS,EAAO,EAAE,KAAK,EAAE,WAAW,EAAK,KAAK,EAAE,qCAAqC,EAAE;SACxF;KACF;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,2DAA2D;QAClE,IAAI,EAAE,sEAAsE;cACxE,qDAAqD;QACzD,OAAO,EAAE;YACP,IAAI,EAAW,EAAE,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,mCAAmC,EAAE;YACrF,UAAU,EAAK,EAAE,KAAK,EAAE,YAAY,EAAK,KAAK,EAAE,gDAAgD,EAAE;YAClG,OAAO,EAAE;gBACP,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,kFAAkF;aAC1F;YACD,aAAa,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,yDAAyD,EAAE;SAC5G;KACF;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,wDAAwD;cAC1D,gDAAgD;QACpD,OAAO,EAAE;YACP,IAAI,EAAe,EAAE,KAAK,EAAE,MAAM,EAAa,KAAK,EAAE,2CAA2C,EAAE;YACnG,iBAAiB,EAAE;gBACjB,KAAK,EAAE,iBAAiB;gBACxB,KAAK,EAAE,2EAA2E;aACnF;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,sEAAsE;aAC9E;SACF;KACF;IACD,cAAc,EAAE;QACd,KAAK,EAAE,mEAAmE;KAC3E;CACF,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { GameCopy } from './types.js';
2
+ export declare const gameCopy: GameCopy;
3
+ //# sourceMappingURL=game.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/game.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,eAAO,MAAM,QAAQ,EAAE,QAiHtB,CAAA"}
@@ -0,0 +1,115 @@
1
+ export const gameCopy = {
2
+ engine: {
3
+ short: 'The game engine or framework powering the project.',
4
+ long: 'Each engine has different strengths — Unity for broad platform support, '
5
+ + 'Unreal for high-fidelity 3D, Godot for open-source flexibility.',
6
+ options: {
7
+ unity: { label: 'Unity', short: 'Cross-platform engine with C# scripting — strong 2D and 3D support.' },
8
+ unreal: { label: 'Unreal', short: 'High-fidelity 3D engine with C++ and Blueprints visual scripting.' },
9
+ godot: { label: 'Godot', short: 'Open-source engine with GDScript — lightweight and beginner-friendly.' },
10
+ custom: { label: 'Custom', short: 'A custom or niche engine — you\'ll configure the toolchain yourself.' },
11
+ },
12
+ },
13
+ multiplayerMode: {
14
+ short: 'Whether and how multiple players interact.',
15
+ long: 'Local shares one device or LAN; online connects over the internet; hybrid supports both.',
16
+ options: {
17
+ none: { label: 'None', short: 'Single-player only — no multiplayer features.' },
18
+ local: { label: 'Local', short: 'Same-device or LAN multiplayer (couch co-op, split screen).' },
19
+ online: { label: 'Online', short: 'Internet-based multiplayer with server infrastructure.' },
20
+ hybrid: { label: 'Hybrid', short: 'Supports both local and online multiplayer.' },
21
+ },
22
+ },
23
+ narrative: {
24
+ short: 'How much story and dialogue the game includes.',
25
+ long: 'Light means flavor text and brief cutscenes; '
26
+ + 'heavy means branching dialogue, quest logs, and narrative systems.',
27
+ options: {
28
+ none: { label: 'None', short: 'No story — gameplay-driven experience.' },
29
+ light: { label: 'Light', short: 'Flavor text, brief cutscenes, or contextual lore.' },
30
+ heavy: { label: 'Heavy', short: 'Branching dialogue, quest systems, and deep narrative.' },
31
+ },
32
+ },
33
+ contentStructure: {
34
+ short: 'How game content is organized and delivered to the player.',
35
+ options: {
36
+ discrete: { label: 'Discrete levels', short: 'Self-contained stages or levels loaded one at a time.' },
37
+ 'open-world': { label: 'Open world', short: 'Large continuous world the player explores freely.' },
38
+ procedural: {
39
+ label: 'Procedural',
40
+ short: 'Content generated algorithmically at runtime.',
41
+ },
42
+ endless: {
43
+ label: 'Endless',
44
+ short: 'Infinite or repeating gameplay with increasing difficulty.',
45
+ },
46
+ 'mission-based': { label: 'Mission-based', short: 'Structured objectives within a larger game world.' },
47
+ },
48
+ },
49
+ economy: {
50
+ short: 'Whether the game has an in-game economy or monetization.',
51
+ long: 'Progression uses earned currency for upgrades; monetized adds real-money purchases; both combines the two.',
52
+ options: {
53
+ none: { label: 'None', short: 'No in-game currency or economy.' },
54
+ progression: { label: 'Progression', short: 'Earned currency and rewards for player upgrades.' },
55
+ monetized: { label: 'Monetized', short: 'Real-money transactions (in-app purchases, DLC).' },
56
+ both: { label: 'Both', short: 'Earned progression plus real-money purchases.' },
57
+ },
58
+ },
59
+ onlineServices: {
60
+ short: 'Backend services the game connects to.',
61
+ long: 'Select any that apply. Each adds integration scaffolding for the corresponding service.',
62
+ options: {
63
+ leaderboards: { label: 'Leaderboards', short: 'Global or friends-list score rankings.' },
64
+ accounts: { label: 'Accounts', short: 'Player identity, profiles, and authentication.' },
65
+ matchmaking: { label: 'Matchmaking', short: 'Automated pairing of players for online sessions.' },
66
+ 'live-ops': {
67
+ label: 'Live Ops',
68
+ short: 'Seasonal events, daily challenges, and remote content updates.',
69
+ },
70
+ },
71
+ },
72
+ persistence: {
73
+ short: 'What player data is saved between sessions.',
74
+ long: 'Settings-only saves preferences; profile adds player identity; '
75
+ + 'progression tracks unlocks and progress; cloud syncs across devices.',
76
+ options: {
77
+ none: { label: 'None', short: 'Nothing persists — each session starts fresh.' },
78
+ 'settings-only': { label: 'Settings only', short: 'Only user preferences (volume, controls) are saved.' },
79
+ profile: { label: 'Profile', short: 'Player name, avatar, and basic identity data.' },
80
+ progression: { label: 'Progression', short: 'Save files, unlocked content, and player progress.' },
81
+ cloud: { label: 'Cloud', short: 'Progress synced to the cloud for cross-device play.' },
82
+ },
83
+ },
84
+ targetPlatforms: {
85
+ short: 'Which platforms the game will ship on.',
86
+ long: 'Select all target platforms. Each adds platform-specific build configuration and SDK setup.',
87
+ options: {
88
+ pc: { label: 'PC', short: 'Windows, macOS, or Linux desktop.' },
89
+ web: { label: 'Web', short: 'Browser-based via WebGL or WebGPU.' },
90
+ ios: { label: 'iOS', short: 'iPhone and iPad via the App Store.' },
91
+ android: { label: 'Android', short: 'Android phones and tablets via Google Play.' },
92
+ ps5: { label: 'PlayStation 5', short: 'Sony PS5 — requires a developer license.' },
93
+ xbox: { label: 'Xbox', short: 'Xbox Series X|S — requires ID@Xbox or a publisher.' },
94
+ switch: { label: 'Nintendo Switch', short: 'Nintendo Switch — requires a developer agreement.' },
95
+ vr: { label: 'VR', short: 'Virtual reality headsets (Meta Quest, PCVR, etc.).' },
96
+ ar: { label: 'AR', short: 'Augmented reality devices (ARKit, ARCore, HoloLens).' },
97
+ },
98
+ },
99
+ supportedLocales: {
100
+ short: 'Locale codes for languages the game will support (e.g. "en", "ja", "fr-FR").',
101
+ },
102
+ hasModding: {
103
+ short: 'Expose modding APIs so players can create and share custom content.',
104
+ },
105
+ npcAiComplexity: {
106
+ short: 'How sophisticated NPC behavior needs to be.',
107
+ long: 'Simple covers basic state machines; complex adds behavior trees, pathfinding, and dynamic decision-making.',
108
+ options: {
109
+ none: { label: 'None', short: 'No NPCs or no autonomous behavior needed.' },
110
+ simple: { label: 'Simple', short: 'Basic state machines and scripted behavior patterns.' },
111
+ complex: { label: 'Complex', short: 'Behavior trees, advanced pathfinding, and dynamic decision-making.' },
112
+ },
113
+ },
114
+ };
115
+ //# sourceMappingURL=game.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../../../src/wizard/copy/game.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,MAAM,EAAE;QACN,KAAK,EAAE,oDAAoD;QAC3D,IAAI,EAAE,0EAA0E;cAC5E,iEAAiE;QACrE,OAAO,EAAE;YACP,KAAK,EAAG,EAAE,KAAK,EAAE,OAAO,EAAG,KAAK,EAAE,qEAAqE,EAAE;YACzG,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,mEAAmE,EAAE;YACvG,KAAK,EAAG,EAAE,KAAK,EAAE,OAAO,EAAG,KAAK,EAAE,uEAAuE,EAAE;YAC3G,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,sEAAsE,EAAE;SAC3G;KACF;IACD,eAAe,EAAE;QACf,KAAK,EAAE,4CAA4C;QACnD,IAAI,EAAE,0FAA0F;QAChG,OAAO,EAAE;YACP,IAAI,EAAI,EAAE,KAAK,EAAE,MAAM,EAAI,KAAK,EAAE,+CAA+C,EAAE;YACnF,KAAK,EAAG,EAAE,KAAK,EAAE,OAAO,EAAG,KAAK,EAAE,6DAA6D,EAAE;YACjG,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,wDAAwD,EAAE;YAC5F,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,6CAA6C,EAAE;SAClF;KACF;IACD,SAAS,EAAE;QACT,KAAK,EAAE,gDAAgD;QACvD,IAAI,EAAE,+CAA+C;cACjD,oEAAoE;QACxE,OAAO,EAAE;YACP,IAAI,EAAG,EAAE,KAAK,EAAE,MAAM,EAAG,KAAK,EAAE,wCAAwC,EAAE;YAC1E,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,mDAAmD,EAAE;YACrF,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,wDAAwD,EAAE;SAC3F;KACF;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,4DAA4D;QACnE,OAAO,EAAE;YACP,QAAQ,EAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,uDAAuD,EAAE;YAC7G,YAAY,EAAK,EAAE,KAAK,EAAE,YAAY,EAAO,KAAK,EAAE,oDAAoD,EAAE;YAC1G,UAAU,EAAE;gBACV,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,+CAA+C;aACvD;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,4DAA4D;aACpE;YACD,eAAe,EAAE,EAAE,KAAK,EAAE,eAAe,EAAI,KAAK,EAAE,mDAAmD,EAAE;SAC1G;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,0DAA0D;QACjE,IAAI,EAAE,4GAA4G;QAClH,OAAO,EAAE;YACP,IAAI,EAAS,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,iCAAiC,EAAE;YAC/E,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,kDAAkD,EAAE;YAChG,SAAS,EAAI,EAAE,KAAK,EAAE,WAAW,EAAI,KAAK,EAAE,kDAAkD,EAAE;YAChG,IAAI,EAAS,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,+CAA+C,EAAE;SAC9F;KACF;IACD,cAAc,EAAE;QACd,KAAK,EAAE,wCAAwC;QAC/C,IAAI,EAAE,yFAAyF;QAC/F,OAAO,EAAE;YACP,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,wCAAwC,EAAE;YACzF,QAAQ,EAAM,EAAE,KAAK,EAAE,UAAU,EAAQ,KAAK,EAAE,gDAAgD,EAAE;YAClG,WAAW,EAAG,EAAE,KAAK,EAAE,aAAa,EAAK,KAAK,EAAE,mDAAmD,EAAE;YACrG,UAAU,EAAE;gBACV,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,gEAAgE;aACxE;SACF;KACF;IACD,WAAW,EAAE;QACX,KAAK,EAAE,6CAA6C;QACpD,IAAI,EAAE,iEAAiE;cACnE,sEAAsE;QAC1E,OAAO,EAAE;YACP,IAAI,EAAa,EAAE,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,+CAA+C,EAAE;YACnG,eAAe,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,qDAAqD,EAAE;YACzG,OAAO,EAAU,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,+CAA+C,EAAE;YACnG,WAAW,EAAM,EAAE,KAAK,EAAE,aAAa,EAAI,KAAK,EAAE,oDAAoD,EAAE;YACxG,KAAK,EAAY,EAAE,KAAK,EAAE,OAAO,EAAU,KAAK,EAAE,qDAAqD,EAAE;SAC1G;KACF;IACD,eAAe,EAAE;QACf,KAAK,EAAE,wCAAwC;QAC/C,IAAI,EAAE,6FAA6F;QACnG,OAAO,EAAE;YACP,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAgB,KAAK,EAAE,mCAAmC,EAAE;YAClF,GAAG,EAAM,EAAE,KAAK,EAAE,KAAK,EAAe,KAAK,EAAE,oCAAoC,EAAE;YACnF,GAAG,EAAM,EAAE,KAAK,EAAE,KAAK,EAAe,KAAK,EAAE,oCAAoC,EAAE;YACnF,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAW,KAAK,EAAE,6CAA6C,EAAE;YAC5F,GAAG,EAAM,EAAE,KAAK,EAAE,eAAe,EAAK,KAAK,EAAE,0CAA0C,EAAE;YACzF,IAAI,EAAK,EAAE,KAAK,EAAE,MAAM,EAAc,KAAK,EAAE,oDAAoD,EAAE;YACnG,MAAM,EAAG,EAAE,KAAK,EAAE,iBAAiB,EAAG,KAAK,EAAE,mDAAmD,EAAE;YAClG,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAe,KAAK,EAAE,oDAAoD,EAAE;YAClG,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAe,KAAK,EAAE,sDAAsD,EAAE;SACrG;KACF;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,8EAA8E;KACtF;IACD,UAAU,EAAE;QACV,KAAK,EAAE,qEAAqE;KAC7E;IACD,eAAe,EAAE;QACf,KAAK,EAAE,6CAA6C;QACpD,IAAI,EAAE,4GAA4G;QAClH,OAAO,EAAE;YACP,IAAI,EAAK,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,2CAA2C,EAAE;YACjF,MAAM,EAAG,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,sDAAsD,EAAE;YAC5F,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oEAAoE,EAAE;SAC3G;KACF;CACF,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { ProjectType } from '../../types/index.js';
2
+ import type { SelectOption } from '../../cli/output/context.js';
3
+ import type { OptionCopy, ProjectCopyMap } from './types.js';
4
+ import { coreCopy } from './core.js';
5
+ export declare function getCopyForType<T extends ProjectType>(type: T): ProjectCopyMap[T];
6
+ export declare function optionsFromCopy<T extends string>(copy: Record<T, OptionCopy> | undefined, values: readonly T[]): SelectOption[];
7
+ export { coreCopy };
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAuBpC,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAEhF;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAC9C,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,SAAS,EACvC,MAAM,EAAE,SAAS,CAAC,EAAE,GACnB,YAAY,EAAE,CAOhB;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { coreCopy } from './core.js';
2
+ import { webAppCopy } from './web-app.js';
3
+ import { backendCopy } from './backend.js';
4
+ import { cliCopy } from './cli.js';
5
+ import { libraryCopy } from './library.js';
6
+ import { mobileAppCopy } from './mobile-app.js';
7
+ import { dataPipelineCopy } from './data-pipeline.js';
8
+ import { mlCopy } from './ml.js';
9
+ import { browserExtensionCopy } from './browser-extension.js';
10
+ import { gameCopy } from './game.js';
11
+ const PROJECT_COPY = {
12
+ 'web-app': webAppCopy,
13
+ 'backend': backendCopy,
14
+ 'cli': cliCopy,
15
+ 'library': libraryCopy,
16
+ 'mobile-app': mobileAppCopy,
17
+ 'data-pipeline': dataPipelineCopy,
18
+ 'ml': mlCopy,
19
+ 'browser-extension': browserExtensionCopy,
20
+ 'game': gameCopy,
21
+ };
22
+ export function getCopyForType(type) {
23
+ return PROJECT_COPY[type];
24
+ }
25
+ export function optionsFromCopy(copy, values) {
26
+ if (!copy) {
27
+ throw new Error('optionsFromCopy called with undefined copy — check that the copy file defines options for this field');
28
+ }
29
+ return values.map(v => ({ value: v, label: copy[v].label, short: copy[v].short }));
30
+ }
31
+ export { coreCopy };
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wizard/copy/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,YAAY,GAAmB;IACnC,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,gBAAgB;IACjC,IAAI,EAAE,MAAM;IACZ,mBAAmB,EAAE,oBAAoB;IACzC,MAAM,EAAE,QAAQ;CACjB,CAAA;AAED,MAAM,UAAU,cAAc,CAAwB,IAAO;IAC3D,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAuC,EACvC,MAAoB;IAEpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { LibraryCopy } from './types.js';
2
+ export declare const libraryCopy: LibraryCopy;
3
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/library.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,eAAO,MAAM,WAAW,EAAE,WA0CzB,CAAA"}
@@ -0,0 +1,44 @@
1
+ export const libraryCopy = {
2
+ visibility: {
3
+ short: 'Who can install and use this library.',
4
+ long: 'Public libraries are published to a registry; internal libraries stay within your organization.',
5
+ options: {
6
+ public: { label: 'Public', short: 'Published to a public registry (npm, PyPI, etc.).' },
7
+ internal: { label: 'Internal', short: 'Private package shared within your organization.' },
8
+ },
9
+ },
10
+ runtimeTarget: {
11
+ short: 'Where the library code will execute.',
12
+ long: 'Determines which APIs are available and how the code is bundled.',
13
+ options: {
14
+ node: { label: 'Node.js', short: 'Runs only in Node.js — can use fs, net, etc.' },
15
+ browser: { label: 'Browser', short: 'Runs only in the browser — can use DOM and Web APIs.' },
16
+ isomorphic: { label: 'Isomorphic', short: 'Works in both Node.js and browsers.' },
17
+ edge: { label: 'Edge runtime', short: 'Targets edge runtimes (Cloudflare Workers, Deno Deploy).' },
18
+ },
19
+ },
20
+ bundleFormat: {
21
+ short: 'The module format(s) for the published package.',
22
+ long: 'ESM is modern import/export; CJS is require(); dual ships both for maximum compatibility.',
23
+ options: {
24
+ esm: { label: 'ESM only', short: 'ES modules — modern import/export syntax.' },
25
+ cjs: { label: 'CJS only', short: 'CommonJS — require() for legacy Node.js projects.' },
26
+ dual: { label: 'Dual (ESM + CJS)', short: 'Ships both formats for maximum compatibility.' },
27
+ unbundled: { label: 'Unbundled', short: 'Source files published as-is — consumers handle bundling.' },
28
+ },
29
+ },
30
+ hasTypeDefinitions: {
31
+ short: 'Generate and ship TypeScript type declarations (.d.ts).',
32
+ },
33
+ documentationLevel: {
34
+ short: 'How much documentation to generate.',
35
+ long: 'Public libraries should have at least a README; more docs lower the adoption barrier.',
36
+ options: {
37
+ none: { label: 'None', short: 'No generated docs — code comments only.' },
38
+ readme: { label: 'README', short: 'A single README with usage examples.' },
39
+ 'api-docs': { label: 'API reference', short: 'Auto-generated API docs from source comments.' },
40
+ 'full-site': { label: 'Documentation site', short: 'Full docs site with guides, examples, and API reference.' },
41
+ },
42
+ },
43
+ };
44
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/wizard/copy/library.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,UAAU,EAAE;QACV,KAAK,EAAE,uCAAuC;QAC9C,IAAI,EAAE,iGAAiG;QACvG,OAAO,EAAE;YACP,MAAM,EAAI,EAAE,KAAK,EAAE,QAAQ,EAAI,KAAK,EAAE,mDAAmD,EAAE;YAC3F,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,kDAAkD,EAAE;SAC3F;KACF;IACD,aAAa,EAAE;QACb,KAAK,EAAE,sCAAsC;QAC7C,IAAI,EAAE,kEAAkE;QACxE,OAAO,EAAE;YACP,IAAI,EAAQ,EAAE,KAAK,EAAE,SAAS,EAAM,KAAK,EAAE,8CAA8C,EAAE;YAC3F,OAAO,EAAK,EAAE,KAAK,EAAE,SAAS,EAAM,KAAK,EAAE,sDAAsD,EAAE;YACnG,UAAU,EAAE,EAAE,KAAK,EAAE,YAAY,EAAG,KAAK,EAAE,qCAAqC,EAAE;YAClF,IAAI,EAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,0DAA0D,EAAE;SACzG;KACF;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,iDAAiD;QACxD,IAAI,EAAE,2FAA2F;QACjG,OAAO,EAAE;YACP,GAAG,EAAQ,EAAE,KAAK,EAAE,UAAU,EAAI,KAAK,EAAE,2CAA2C,EAAE;YACtF,GAAG,EAAQ,EAAE,KAAK,EAAE,UAAU,EAAI,KAAK,EAAE,mDAAmD,EAAE;YAC9F,IAAI,EAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,+CAA+C,EAAE;YAChG,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAI,KAAK,EAAE,2DAA2D,EAAE;SACxG;KACF;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,yDAAyD;KACjE;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,uFAAuF;QAC7F,OAAO,EAAE;YACP,IAAI,EAAQ,EAAE,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,yCAAyC,EAAE;YACxF,MAAM,EAAM,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,sCAAsC,EAAE;YACrF,UAAU,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,+CAA+C,EAAE;YAC9F,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,0DAA0D,EAAE;SAChH;KACF;CACF,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { MlCopy } from './types.js';
2
+ export declare const mlCopy: MlCopy;
3
+ //# sourceMappingURL=ml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ml.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/ml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,MAAM,EAAE,MA2CpB,CAAA"}
@@ -0,0 +1,45 @@
1
+ export const mlCopy = {
2
+ projectPhase: {
3
+ short: 'Which part of the ML lifecycle this project covers.',
4
+ long: 'Training builds the model; inference serves predictions; both includes the full train-to-serve pipeline.',
5
+ options: {
6
+ training: { label: 'Training', short: 'Building and evaluating models — experiment-focused.' },
7
+ inference: { label: 'Inference', short: 'Serving a trained model for predictions in production.' },
8
+ both: { label: 'Both', short: 'Full pipeline from training through production serving.' },
9
+ },
10
+ },
11
+ modelType: {
12
+ short: 'The category of model being used.',
13
+ long: 'Classical ML uses traditional algorithms; deep learning uses neural networks; '
14
+ + 'LLM covers large language models and foundation models.',
15
+ options: {
16
+ classical: {
17
+ label: 'Classical ML',
18
+ short: 'Traditional algorithms like random forests, SVMs, or gradient boosting.',
19
+ },
20
+ 'deep-learning': {
21
+ label: 'Deep learning',
22
+ short: 'Neural networks (CNNs, transformers, etc.) trained on large datasets.',
23
+ },
24
+ llm: {
25
+ label: 'LLM',
26
+ short: 'Large language models — fine-tuning or prompt-engineering foundation models.',
27
+ },
28
+ },
29
+ },
30
+ servingPattern: {
31
+ short: 'How the model delivers predictions.',
32
+ long: 'Batch scores datasets offline; realtime responds to individual requests; '
33
+ + 'edge runs on-device for lowest latency.',
34
+ options: {
35
+ none: { label: 'None', short: 'No serving — training and evaluation only.' },
36
+ batch: { label: 'Batch', short: 'Scores large datasets on a schedule (e.g. nightly predictions).' },
37
+ realtime: { label: 'Realtime', short: 'Responds to individual requests via an API endpoint.' },
38
+ edge: { label: 'Edge', short: 'Runs on-device or at the edge for ultra-low latency.' },
39
+ },
40
+ },
41
+ hasExperimentTracking: {
42
+ short: 'Track hyperparameters, metrics, and artifacts across training runs (e.g. MLflow, W&B).',
43
+ },
44
+ };
45
+ //# sourceMappingURL=ml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ml.js","sourceRoot":"","sources":["../../../src/wizard/copy/ml.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,YAAY,EAAE;QACZ,KAAK,EAAE,qDAAqD;QAC5D,IAAI,EAAE,0GAA0G;QAChH,OAAO,EAAE;YACP,QAAQ,EAAG,EAAE,KAAK,EAAE,UAAU,EAAG,KAAK,EAAE,sDAAsD,EAAE;YAChG,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,wDAAwD,EAAE;YAClG,IAAI,EAAO,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,yDAAyD,EAAE;SACpG;KACF;IACD,SAAS,EAAE;QACT,KAAK,EAAE,mCAAmC;QAC1C,IAAI,EAAE,gFAAgF;cAClF,yDAAyD;QAC7D,OAAO,EAAE;YACP,SAAS,EAAE;gBACT,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,yEAAyE;aACjF;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,uEAAuE;aAC/E;YACD,GAAG,EAAE;gBACH,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,8EAA8E;aACtF;SACF;KACF;IACD,cAAc,EAAE;QACd,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,2EAA2E;cAC7E,yCAAyC;QAC7C,OAAO,EAAE;YACP,IAAI,EAAM,EAAE,KAAK,EAAE,MAAM,EAAM,KAAK,EAAE,4CAA4C,EAAE;YACpF,KAAK,EAAK,EAAE,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,iEAAiE,EAAE;YACzG,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,sDAAsD,EAAE;YAC9F,IAAI,EAAM,EAAE,KAAK,EAAE,MAAM,EAAM,KAAK,EAAE,sDAAsD,EAAE;SAC/F;KACF;IACD,qBAAqB,EAAE;QACrB,KAAK,EAAE,wFAAwF;KAChG;CACF,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { MobileAppCopy } from './types.js';
2
+ export declare const mobileAppCopy: MobileAppCopy;
3
+ //# sourceMappingURL=mobile-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile-app.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/mobile-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,aAAa,EAAE,aA2C3B,CAAA"}
@@ -0,0 +1,45 @@
1
+ export const mobileAppCopy = {
2
+ platform: {
3
+ short: 'Which mobile platform(s) the app targets.',
4
+ long: 'Single-platform gives native performance; cross-platform shares code across iOS and Android.',
5
+ options: {
6
+ ios: { label: 'iOS only', short: 'Native iOS app using Swift/SwiftUI.' },
7
+ android: { label: 'Android only', short: 'Native Android app using Kotlin/Jetpack Compose.' },
8
+ 'cross-platform': {
9
+ label: 'Cross-platform',
10
+ short: 'Shared codebase for iOS and Android (React Native, Flutter, etc.).',
11
+ },
12
+ },
13
+ },
14
+ distributionModel: {
15
+ short: 'How the app reaches its users.',
16
+ long: 'Public apps go through app stores; private apps use enterprise distribution or MDM.',
17
+ options: {
18
+ public: {
19
+ label: 'Public (App Store / Google Play)',
20
+ short: 'Listed on public app stores for anyone to download.',
21
+ },
22
+ private: {
23
+ label: 'Private / Enterprise',
24
+ short: 'Distributed internally via MDM or enterprise signing.',
25
+ },
26
+ mixed: {
27
+ label: 'Mixed',
28
+ short: 'Both public store listing and private enterprise builds.',
29
+ },
30
+ },
31
+ },
32
+ offlineSupport: {
33
+ short: 'How the app behaves without a network connection.',
34
+ long: 'Cache keeps recent data available; offline-first treats local storage as the primary data source.',
35
+ options: {
36
+ none: { label: 'None', short: 'Requires an active network connection to function.' },
37
+ cache: { label: 'Cache', short: 'Caches recent data for temporary offline access.' },
38
+ 'offline-first': { label: 'Offline-first', short: 'Works fully offline — syncs data when connectivity returns.' },
39
+ },
40
+ },
41
+ hasPushNotifications: {
42
+ short: 'Enable push notification support (APNs / FCM).',
43
+ },
44
+ };
45
+ //# sourceMappingURL=mobile-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile-app.js","sourceRoot":"","sources":["../../../src/wizard/copy/mobile-app.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,QAAQ,EAAE;QACR,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,8FAA8F;QACpG,OAAO,EAAE;YACP,GAAG,EAAe,EAAE,KAAK,EAAE,UAAU,EAAS,KAAK,EAAE,qCAAqC,EAAE;YAC5F,OAAO,EAAW,EAAE,KAAK,EAAE,cAAc,EAAK,KAAK,EAAE,kDAAkD,EAAE;YACzG,gBAAgB,EAAE;gBAChB,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,oEAAoE;aAC5E;SACF;KACF;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,gCAAgC;QACvC,IAAI,EAAE,qFAAqF;QAC3F,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,KAAK,EAAE,kCAAkC;gBACzC,KAAK,EAAE,qDAAqD;aAC7D;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,sBAAsB;gBAC7B,KAAK,EAAE,uDAAuD;aAC/D;YACD,KAAK,EAAE;gBACL,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,0DAA0D;aAClE;SACF;KACF;IACD,cAAc,EAAE;QACd,KAAK,EAAE,mDAAmD;QAC1D,IAAI,EAAE,mGAAmG;QACzG,OAAO,EAAE;YACP,IAAI,EAAa,EAAE,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,oDAAoD,EAAE;YACxG,KAAK,EAAY,EAAE,KAAK,EAAE,OAAO,EAAU,KAAK,EAAE,kDAAkD,EAAE;YACtG,eAAe,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,6DAA6D,EAAE;SAClH;KACF;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,gDAAgD;KACxD;CACF,CAAA"}
@@ -0,0 +1,60 @@
1
+ import type { ProjectType, MethodologyName, WebAppConfig, BackendConfig, CliConfig, LibraryConfig, MobileAppConfig, DataPipelineConfig, MlConfig, BrowserExtensionConfig, GameConfig } from '../../types/index.js';
2
+ export type ValueToOptionKey<T> = T extends readonly (infer U)[] ? U : T;
3
+ export type OptionCopy = {
4
+ label: string;
5
+ short?: string;
6
+ };
7
+ export type QuestionCopy<TValue = unknown> = {
8
+ short?: string;
9
+ long?: string;
10
+ options?: Extract<ValueToOptionKey<TValue>, string> extends never ? never : string extends Extract<ValueToOptionKey<TValue>, string> ? never : Record<Extract<ValueToOptionKey<TValue>, string>, OptionCopy>;
11
+ };
12
+ export type WebAppCopy = {
13
+ [K in keyof WebAppConfig]: QuestionCopy<WebAppConfig[K]>;
14
+ };
15
+ export type BackendCopy = {
16
+ [K in keyof BackendConfig]: QuestionCopy<BackendConfig[K]>;
17
+ };
18
+ export type CliCopy = {
19
+ [K in keyof CliConfig]: QuestionCopy<CliConfig[K]>;
20
+ };
21
+ export type LibraryCopy = {
22
+ [K in keyof LibraryConfig]: QuestionCopy<LibraryConfig[K]>;
23
+ };
24
+ export type MobileAppCopy = {
25
+ [K in keyof MobileAppConfig]: QuestionCopy<MobileAppConfig[K]>;
26
+ };
27
+ export type DataPipelineCopy = {
28
+ [K in keyof DataPipelineConfig]: QuestionCopy<DataPipelineConfig[K]>;
29
+ };
30
+ export type MlCopy = {
31
+ [K in keyof MlConfig]: QuestionCopy<MlConfig[K]>;
32
+ };
33
+ export type BrowserExtensionCopy = {
34
+ [K in keyof BrowserExtensionConfig]: QuestionCopy<BrowserExtensionConfig[K]>;
35
+ };
36
+ export type GameCopy = {
37
+ [K in keyof GameConfig]: QuestionCopy<GameConfig[K]>;
38
+ };
39
+ export type CoreCopy = {
40
+ methodology: QuestionCopy<MethodologyName>;
41
+ depth: QuestionCopy<string>;
42
+ codexAdapter: QuestionCopy<string>;
43
+ geminiAdapter: QuestionCopy<string>;
44
+ webTrait: QuestionCopy<string>;
45
+ mobileTrait: QuestionCopy<string>;
46
+ projectType: QuestionCopy<ProjectType>;
47
+ advancedGameGate: QuestionCopy<string>;
48
+ };
49
+ export interface ProjectCopyMap {
50
+ 'web-app': WebAppCopy;
51
+ 'backend': BackendCopy;
52
+ 'cli': CliCopy;
53
+ 'library': LibraryCopy;
54
+ 'mobile-app': MobileAppCopy;
55
+ 'data-pipeline': DataPipelineCopy;
56
+ 'ml': MlCopy;
57
+ 'browser-extension': BrowserExtensionCopy;
58
+ 'game': GameCopy;
59
+ }
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/wizard/copy/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test-d.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/types.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, it, expectTypeOf } from 'vitest';
2
+ describe('QuestionCopy type-level tests', () => {
3
+ it('WebAppCopy.renderingStrategy.options requires exact enum keys', () => {
4
+ expectTypeOf()
5
+ .toEqualTypeOf();
6
+ });
7
+ it('BackendCopy.dataStore.options requires array element enum keys', () => {
8
+ expectTypeOf()
9
+ .toEqualTypeOf();
10
+ });
11
+ it('LibraryCopy.hasTypeDefinitions cannot have options (boolean field)', () => {
12
+ const _ = {
13
+ short: 'x',
14
+ // @ts-expect-error -- options on boolean-typed fields should be forbidden
15
+ options: { 'true': { label: 'Yes' } },
16
+ };
17
+ void _;
18
+ });
19
+ it('GameCopy.supportedLocales cannot have options (bare string[])', () => {
20
+ const _ = {
21
+ short: 'x',
22
+ // @ts-expect-error -- options on free-text string[] fields should be forbidden
23
+ options: { 'en': { label: 'English' } },
24
+ };
25
+ void _;
26
+ });
27
+ it('CoreCopy.projectType.options requires exact ProjectType enum keys', () => {
28
+ expectTypeOf()
29
+ .toEqualTypeOf();
30
+ });
31
+ it('getCopyForType narrows to the correct type', () => {
32
+ expectTypeOf().toEqualTypeOf();
33
+ expectTypeOf().toEqualTypeOf();
34
+ });
35
+ });
36
+ //# sourceMappingURL=types.test-d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test-d.js","sourceRoot":"","sources":["../../../src/wizard/copy/types.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAMnD,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,YAAY,EAA2D;aACpE,aAAa,EAAwD,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,YAAY,EAAoD;aAC7D,aAAa,EAA+D,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,GAAsC;YAC3C,KAAK,EAAE,GAAG;YACV,0EAA0E;YAC1E,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;SACtC,CAAA;QACD,KAAK,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAiC;YACtC,KAAK,EAAE,GAAG;YACV,+EAA+E;YAC/E,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;SACxC,CAAA;QACD,KAAK,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,YAAY,EAAmD;aAC5D,aAAa,EAAmC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,YAAY,EAA6B,CAAC,aAAa,EAAc,CAAA;QACrE,YAAY,EAA0B,CAAC,aAAa,EAAY,CAAA;IAClE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { WebAppCopy } from './types.js';
2
+ export declare const webAppCopy: WebAppCopy;
3
+ //# sourceMappingURL=web-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-app.d.ts","sourceRoot":"","sources":["../../../src/wizard/copy/web-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,eAAO,MAAM,UAAU,EAAE,UA4CxB,CAAA"}
@@ -0,0 +1,46 @@
1
+ export const webAppCopy = {
2
+ renderingStrategy: {
3
+ short: 'How the HTML is produced and delivered to the browser.',
4
+ long: 'SPA renders everything client-side; SSR renders on each request; '
5
+ + 'SSG pre-builds at deploy time; Hybrid mixes strategies per route.',
6
+ options: {
7
+ spa: { label: 'SPA', short: 'Single-page app — all rendering happens in the browser.' },
8
+ ssr: { label: 'SSR', short: 'Server-side rendered on every request for dynamic content.' },
9
+ ssg: { label: 'SSG', short: 'Static site generation — pages pre-built at deploy time.' },
10
+ hybrid: { label: 'Hybrid', short: 'Mix of SSR and SSG, chosen per route.' },
11
+ },
12
+ },
13
+ deployTarget: {
14
+ short: 'Where the built app will be hosted.',
15
+ long: 'Determines infrastructure assumptions like compute availability, cold starts, and scaling model.',
16
+ options: {
17
+ static: { label: 'Static hosting', short: 'CDN-served files with no server compute.' },
18
+ serverless: {
19
+ label: 'Serverless',
20
+ short: 'Functions that spin up per request (e.g. AWS Lambda, Vercel).',
21
+ },
22
+ container: { label: 'Container', short: 'Docker container running in a managed cluster.' },
23
+ edge: { label: 'Edge', short: 'Code runs at CDN edge locations for low latency.' },
24
+ 'long-running': { label: 'Long-running', short: 'Traditional always-on server process.' },
25
+ },
26
+ },
27
+ realtime: {
28
+ short: 'Whether the app needs a persistent connection for live updates.',
29
+ options: {
30
+ none: { label: 'None', short: 'Standard request/response — no live updates.' },
31
+ websocket: { label: 'WebSocket', short: 'Full-duplex persistent connection for bidirectional data.' },
32
+ sse: { label: 'SSE', short: 'Server-sent events — server pushes updates to client.' },
33
+ },
34
+ },
35
+ authFlow: {
36
+ short: 'How users prove their identity.',
37
+ long: 'Choosing "none" means the app has no login. Other options add auth scaffolding.',
38
+ options: {
39
+ none: { label: 'None', short: 'No authentication — the app is fully public.' },
40
+ session: { label: 'Session', short: 'Server-managed sessions with cookies.' },
41
+ oauth: { label: 'OAuth', short: 'Delegated login via a third-party provider.' },
42
+ passkey: { label: 'Passkey', short: 'WebAuthn / FIDO2 passwordless login.' },
43
+ },
44
+ },
45
+ };
46
+ //# sourceMappingURL=web-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-app.js","sourceRoot":"","sources":["../../../src/wizard/copy/web-app.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,iBAAiB,EAAE;QACjB,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,mEAAmE;cACrE,mEAAmE;QACvE,OAAO,EAAE;YACP,GAAG,EAAK,EAAE,KAAK,EAAE,KAAK,EAAK,KAAK,EAAE,yDAAyD,EAAE;YAC7F,GAAG,EAAK,EAAE,KAAK,EAAE,KAAK,EAAK,KAAK,EAAE,4DAA4D,EAAE;YAChG,GAAG,EAAK,EAAE,KAAK,EAAE,KAAK,EAAK,KAAK,EAAE,0DAA0D,EAAE;YAC9F,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,uCAAuC,EAAE;SAC5E;KACF;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,kGAAkG;QACxG,OAAO,EAAE;YACP,MAAM,EAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAG,KAAK,EAAE,0CAA0C,EAAE;YAC7F,UAAU,EAAE;gBACV,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,+DAA+D;aACvE;YACD,SAAS,EAAK,EAAE,KAAK,EAAE,WAAW,EAAS,KAAK,EAAE,gDAAgD,EAAE;YACpG,IAAI,EAAU,EAAE,KAAK,EAAE,MAAM,EAAc,KAAK,EAAE,kDAAkD,EAAE;YACtG,cAAc,EAAE,EAAE,KAAK,EAAE,cAAc,EAAI,KAAK,EAAE,uCAAuC,EAAE;SAC5F;KACF;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,iEAAiE;QACxE,OAAO,EAAE;YACP,IAAI,EAAO,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,8CAA8C,EAAE;YACxF,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,2DAA2D,EAAE;YACrG,GAAG,EAAQ,EAAE,KAAK,EAAE,KAAK,EAAQ,KAAK,EAAE,uDAAuD,EAAE;SAClG;KACF;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,iCAAiC;QACxC,IAAI,EAAE,iFAAiF;QACvF,OAAO,EAAE;YACP,IAAI,EAAK,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,8CAA8C,EAAE;YACpF,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uCAAuC,EAAE;YAC7E,KAAK,EAAI,EAAE,KAAK,EAAE,OAAO,EAAI,KAAK,EAAE,6CAA6C,EAAE;YACnF,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sCAAsC,EAAE;SAC7E;KACF;CACF,CAAA"}