@trespies-source/dojo-genesis-plugin 1.0.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 (209) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +204 -0
  4. package/dist/hooks/after-tool-call/handler.d.ts +4 -0
  5. package/dist/hooks/after-tool-call/handler.d.ts.map +1 -0
  6. package/dist/hooks/after-tool-call/handler.js +37 -0
  7. package/dist/hooks/after-tool-call/handler.js.map +1 -0
  8. package/dist/hooks/agent-end/handler.d.ts +4 -0
  9. package/dist/hooks/agent-end/handler.d.ts.map +1 -0
  10. package/dist/hooks/agent-end/handler.js +16 -0
  11. package/dist/hooks/agent-end/handler.js.map +1 -0
  12. package/dist/hooks/before-agent-start/handler.d.ts +4 -0
  13. package/dist/hooks/before-agent-start/handler.d.ts.map +1 -0
  14. package/dist/hooks/before-agent-start/handler.js +81 -0
  15. package/dist/hooks/before-agent-start/handler.js.map +1 -0
  16. package/dist/index.d.ts +18 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +35 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/src/commands/archive.d.ts +4 -0
  21. package/dist/src/commands/archive.d.ts.map +1 -0
  22. package/dist/src/commands/archive.js +20 -0
  23. package/dist/src/commands/archive.js.map +1 -0
  24. package/dist/src/commands/init.d.ts +4 -0
  25. package/dist/src/commands/init.d.ts.map +1 -0
  26. package/dist/src/commands/init.js +57 -0
  27. package/dist/src/commands/init.js.map +1 -0
  28. package/dist/src/commands/list.d.ts +4 -0
  29. package/dist/src/commands/list.d.ts.map +1 -0
  30. package/dist/src/commands/list.js +9 -0
  31. package/dist/src/commands/list.js.map +1 -0
  32. package/dist/src/commands/router.d.ts +3 -0
  33. package/dist/src/commands/router.d.ts.map +1 -0
  34. package/dist/src/commands/router.js +83 -0
  35. package/dist/src/commands/router.js.map +1 -0
  36. package/dist/src/commands/skill-invoke.d.ts +4 -0
  37. package/dist/src/commands/skill-invoke.d.ts.map +1 -0
  38. package/dist/src/commands/skill-invoke.js +26 -0
  39. package/dist/src/commands/skill-invoke.js.map +1 -0
  40. package/dist/src/commands/status.d.ts +4 -0
  41. package/dist/src/commands/status.d.ts.map +1 -0
  42. package/dist/src/commands/status.js +42 -0
  43. package/dist/src/commands/status.js.map +1 -0
  44. package/dist/src/commands/switch.d.ts +4 -0
  45. package/dist/src/commands/switch.d.ts.map +1 -0
  46. package/dist/src/commands/switch.js +20 -0
  47. package/dist/src/commands/switch.js.map +1 -0
  48. package/dist/src/orchestration/tool-registry.d.ts +18 -0
  49. package/dist/src/orchestration/tool-registry.d.ts.map +1 -0
  50. package/dist/src/orchestration/tool-registry.js +153 -0
  51. package/dist/src/orchestration/tool-registry.js.map +1 -0
  52. package/dist/src/skills/catalog.d.ts +9 -0
  53. package/dist/src/skills/catalog.d.ts.map +1 -0
  54. package/dist/src/skills/catalog.js +251 -0
  55. package/dist/src/skills/catalog.js.map +1 -0
  56. package/dist/src/state/manager.d.ts +19 -0
  57. package/dist/src/state/manager.d.ts.map +1 -0
  58. package/dist/src/state/manager.js +114 -0
  59. package/dist/src/state/manager.js.map +1 -0
  60. package/dist/src/state/migrations.d.ts +3 -0
  61. package/dist/src/state/migrations.d.ts.map +1 -0
  62. package/dist/src/state/migrations.js +8 -0
  63. package/dist/src/state/migrations.js.map +1 -0
  64. package/dist/src/state/types.d.ts +62 -0
  65. package/dist/src/state/types.d.ts.map +1 -0
  66. package/dist/src/state/types.js +2 -0
  67. package/dist/src/state/types.js.map +1 -0
  68. package/dist/src/ui/chat-formatter.d.ts +11 -0
  69. package/dist/src/ui/chat-formatter.d.ts.map +1 -0
  70. package/dist/src/ui/chat-formatter.js +39 -0
  71. package/dist/src/ui/chat-formatter.js.map +1 -0
  72. package/dist/src/utils/file-ops.d.ts +6 -0
  73. package/dist/src/utils/file-ops.d.ts.map +1 -0
  74. package/dist/src/utils/file-ops.js +38 -0
  75. package/dist/src/utils/file-ops.js.map +1 -0
  76. package/dist/src/utils/markdown.d.ts +2 -0
  77. package/dist/src/utils/markdown.d.ts.map +1 -0
  78. package/dist/src/utils/markdown.js +11 -0
  79. package/dist/src/utils/markdown.js.map +1 -0
  80. package/dist/src/utils/validation.d.ts +7 -0
  81. package/dist/src/utils/validation.d.ts.map +1 -0
  82. package/dist/src/utils/validation.js +29 -0
  83. package/dist/src/utils/validation.js.map +1 -0
  84. package/dist/tests/__mocks__/openclaw-types.d.ts +54 -0
  85. package/dist/tests/__mocks__/openclaw-types.d.ts.map +1 -0
  86. package/dist/tests/__mocks__/openclaw-types.js +29 -0
  87. package/dist/tests/__mocks__/openclaw-types.js.map +1 -0
  88. package/hooks/after-tool-call/HOOK.md +7 -0
  89. package/hooks/after-tool-call/handler.ts +41 -0
  90. package/hooks/agent-end/HOOK.md +7 -0
  91. package/hooks/agent-end/handler.ts +18 -0
  92. package/hooks/before-agent-start/HOOK.md +7 -0
  93. package/hooks/before-agent-start/handler.ts +133 -0
  94. package/openclaw.plugin.json +19 -0
  95. package/package.json +61 -0
  96. package/skills/agent-teaching/SKILL.md +583 -0
  97. package/skills/agent-teaching/claw.json +12 -0
  98. package/skills/compression-ritual/SKILL.md +136 -0
  99. package/skills/compression-ritual/claw.json +12 -0
  100. package/skills/context-ingestion/SKILL.md +109 -0
  101. package/skills/context-ingestion/claw.json +12 -0
  102. package/skills/decision-propagation/SKILL.md +130 -0
  103. package/skills/decision-propagation/claw.json +12 -0
  104. package/skills/documentation-audit/SKILL.md +146 -0
  105. package/skills/documentation-audit/claw.json +12 -0
  106. package/skills/era-architecture/SKILL.md +166 -0
  107. package/skills/era-architecture/claw.json +12 -0
  108. package/skills/file-management/SKILL.md +127 -0
  109. package/skills/file-management/claw.json +12 -0
  110. package/skills/frontend-from-backend/SKILL.md +127 -0
  111. package/skills/frontend-from-backend/claw.json +12 -0
  112. package/skills/handoff-protocol/SKILL.md +168 -0
  113. package/skills/handoff-protocol/claw.json +12 -0
  114. package/skills/health-audit/SKILL.md +123 -0
  115. package/skills/health-audit/claw.json +12 -0
  116. package/skills/implementation-prompt/SKILL.md +361 -0
  117. package/skills/implementation-prompt/claw.json +12 -0
  118. package/skills/iterative-scouting/SKILL.md +106 -0
  119. package/skills/iterative-scouting/claw.json +12 -0
  120. package/skills/memory-garden/SKILL.md +470 -0
  121. package/skills/memory-garden/claw.json +12 -0
  122. package/skills/multi-surface-strategy/SKILL.md +288 -0
  123. package/skills/multi-surface-strategy/claw.json +12 -0
  124. package/skills/parallel-tracks/SKILL.md +152 -0
  125. package/skills/parallel-tracks/claw.json +12 -0
  126. package/skills/patient-learning-protocol/SKILL.md +438 -0
  127. package/skills/patient-learning-protocol/claw.json +12 -0
  128. package/skills/planning-with-files/SKILL.md +139 -0
  129. package/skills/planning-with-files/claw.json +12 -0
  130. package/skills/pre-implementation-checklist/SKILL.md +156 -0
  131. package/skills/pre-implementation-checklist/claw.json +12 -0
  132. package/skills/process-extraction/SKILL.md +148 -0
  133. package/skills/process-extraction/claw.json +12 -0
  134. package/skills/process-extraction/references/process_example_template.md +40 -0
  135. package/skills/product-positioning/SKILL.md +293 -0
  136. package/skills/product-positioning/claw.json +12 -0
  137. package/skills/project-exploration/SKILL.md +168 -0
  138. package/skills/project-exploration/claw.json +12 -0
  139. package/skills/release-specification/SKILL.md +645 -0
  140. package/skills/release-specification/claw.json +12 -0
  141. package/skills/repo-context-sync/SKILL.md +362 -0
  142. package/skills/repo-context-sync/claw.json +12 -0
  143. package/skills/repo-context-sync/references/file_hierarchy_patterns.md +186 -0
  144. package/skills/repo-context-sync/references/zenflow_repo_patterns.md +328 -0
  145. package/skills/repo-context-sync/scripts/context_mapper.py +251 -0
  146. package/skills/repo-context-sync/scripts/diff_tracker.py +187 -0
  147. package/skills/repo-context-sync/scripts/smart_clone.sh +52 -0
  148. package/skills/repo-context-sync/templates/context_summary.md +58 -0
  149. package/skills/repo-status/SKILL.md +240 -0
  150. package/skills/repo-status/claw.json +12 -0
  151. package/skills/repo-status/references/semantic-clusters.md +159 -0
  152. package/skills/repo-status/references/status-template.md +214 -0
  153. package/skills/research-modes/SKILL.md +515 -0
  154. package/skills/research-modes/claw.json +12 -0
  155. package/skills/research-synthesis/SKILL.md +110 -0
  156. package/skills/research-synthesis/claw.json +12 -0
  157. package/skills/retrospective/SKILL.md +152 -0
  158. package/skills/retrospective/claw.json +12 -0
  159. package/skills/seed-extraction/SKILL.md +419 -0
  160. package/skills/seed-extraction/claw.json +12 -0
  161. package/skills/seed-library/SKILL.md +424 -0
  162. package/skills/seed-library/claw.json +12 -0
  163. package/skills/seed-library/references/seed_catalog.md +171 -0
  164. package/skills/seed-library/scripts/apply_seed.py +129 -0
  165. package/skills/seed-library/scripts/suggest_seeds.py +183 -0
  166. package/skills/seed-library/seeds/01_three_tiered_governance.md +90 -0
  167. package/skills/seed-library/seeds/02_harness_trace.md +135 -0
  168. package/skills/seed-library/seeds/03_context_iceberg.md +120 -0
  169. package/skills/seed-library/seeds/04_agent_connect.md +106 -0
  170. package/skills/seed-library/seeds/05_go_live_bundles.md +40 -0
  171. package/skills/seed-library/seeds/06_cost_guard.md +40 -0
  172. package/skills/seed-library/seeds/07_safety_switch.md +41 -0
  173. package/skills/seed-library/seeds/08_implicit_perspective_extraction.md +41 -0
  174. package/skills/seed-library/seeds/09_mode_based_complexity_gating.md +46 -0
  175. package/skills/seed-library/seeds/10_shared_infrastructure.md +75 -0
  176. package/skills/seed-library/seeds/11_voice_before_structure.md +74 -0
  177. package/skills/seed-library/seeds/12_pointer_directories.md +81 -0
  178. package/skills/seed-library/seeds/13_granular_visibility.md +82 -0
  179. package/skills/seed-library/seeds/meta_governance_multiplies_velocity.md +43 -0
  180. package/skills/seed-to-skill-converter/SKILL.md +113 -0
  181. package/skills/seed-to-skill-converter/claw.json +12 -0
  182. package/skills/semantic-clusters/SKILL.md +246 -0
  183. package/skills/semantic-clusters/claw.json +12 -0
  184. package/skills/semantic-clusters/references/verb-catalog.md +267 -0
  185. package/skills/skill-audit-upgrade/SKILL.md +427 -0
  186. package/skills/skill-audit-upgrade/claw.json +12 -0
  187. package/skills/skill-creation/LICENSE.txt +202 -0
  188. package/skills/skill-creation/SKILL.md +252 -0
  189. package/skills/skill-creation/claw.json +12 -0
  190. package/skills/skill-creation/references/output-patterns.md +82 -0
  191. package/skills/skill-creation/references/progressive-disclosure-patterns.md +79 -0
  192. package/skills/skill-creation/references/workflows.md +28 -0
  193. package/skills/skill-creation/scripts/init_skill.py +305 -0
  194. package/skills/skill-creation/scripts/quick_validate.py +134 -0
  195. package/skills/skill-maintenance/SKILL.md +413 -0
  196. package/skills/skill-maintenance/claw.json +12 -0
  197. package/skills/spec-constellation-to-prompt-suite/SKILL.md +174 -0
  198. package/skills/spec-constellation-to-prompt-suite/claw.json +12 -0
  199. package/skills/status-template/SKILL.md +211 -0
  200. package/skills/status-template/claw.json +12 -0
  201. package/skills/status-template/references/complete-template.md +191 -0
  202. package/skills/status-writing/SKILL.md +161 -0
  203. package/skills/status-writing/claw.json +12 -0
  204. package/skills/strategic-scout/SKILL.md +163 -0
  205. package/skills/strategic-scout/claw.json +12 -0
  206. package/skills/strategic-to-tactical-workflow/SKILL.md +391 -0
  207. package/skills/strategic-to-tactical-workflow/claw.json +12 -0
  208. package/skills/workspace-navigation/SKILL.md +622 -0
  209. package/skills/workspace-navigation/claw.json +12 -0
@@ -0,0 +1,251 @@
1
+ export const SKILL_CATALOG = {
2
+ // Pipeline (also available as /dojo scout, spec, tracks, commission, retro)
3
+ "strategic-scout": {
4
+ name: "strategic-scout",
5
+ category: "pipeline",
6
+ description: "Explore strategic tensions and scout multiple routes",
7
+ },
8
+ "release-specification": {
9
+ name: "release-specification",
10
+ category: "pipeline",
11
+ description: "Write a production-ready release specification",
12
+ },
13
+ "parallel-tracks": {
14
+ name: "parallel-tracks",
15
+ category: "pipeline",
16
+ description: "Decompose specs into independent parallel tracks",
17
+ },
18
+ "implementation-prompt": {
19
+ name: "implementation-prompt",
20
+ category: "pipeline",
21
+ description: "Generate structured implementation prompts",
22
+ },
23
+ "retrospective": {
24
+ name: "retrospective",
25
+ category: "pipeline",
26
+ description: "Reflect on what went well, what was hard, what to improve",
27
+ },
28
+ // Workflow
29
+ "iterative-scouting": {
30
+ name: "iterative-scouting",
31
+ category: "workflow",
32
+ description: "Iterate scout cycles with reframes",
33
+ },
34
+ "strategic-to-tactical-workflow": {
35
+ name: "strategic-to-tactical-workflow",
36
+ category: "workflow",
37
+ description: "Full scout → spec → commission pipeline",
38
+ },
39
+ "pre-implementation-checklist": {
40
+ name: "pre-implementation-checklist",
41
+ category: "workflow",
42
+ description: "Verify specs are ready before commissioning",
43
+ },
44
+ "context-ingestion": {
45
+ name: "context-ingestion",
46
+ category: "workflow",
47
+ description: "Create plans grounded in uploaded files",
48
+ },
49
+ "frontend-from-backend": {
50
+ name: "frontend-from-backend",
51
+ category: "workflow",
52
+ description: "Write frontend specs from backend architecture",
53
+ },
54
+ "spec-constellation-to-prompt-suite": {
55
+ name: "spec-constellation-to-prompt-suite",
56
+ category: "workflow",
57
+ description: "Convert multiple specs into coordinated prompts",
58
+ },
59
+ "planning-with-files": {
60
+ name: "planning-with-files",
61
+ category: "workflow",
62
+ description: "Route file-based planning to specialized modes",
63
+ },
64
+ // Research
65
+ "research-modes": {
66
+ name: "research-modes",
67
+ category: "research",
68
+ description: "Deep and wide research with structured approaches",
69
+ },
70
+ "research-synthesis": {
71
+ name: "research-synthesis",
72
+ category: "research",
73
+ description: "Synthesize multiple sources into actionable insights",
74
+ },
75
+ "project-exploration": {
76
+ name: "project-exploration",
77
+ category: "research",
78
+ description: "Explore new projects to assess collaboration potential",
79
+ },
80
+ "era-architecture": {
81
+ name: "era-architecture",
82
+ category: "research",
83
+ description: "Architect multi-release eras with shared vocabulary",
84
+ },
85
+ "repo-context-sync": {
86
+ name: "repo-context-sync",
87
+ category: "research",
88
+ description: "Sync and extract context from repositories",
89
+ },
90
+ "documentation-audit": {
91
+ name: "documentation-audit",
92
+ category: "research",
93
+ description: "Audit documentation for drift and accuracy",
94
+ },
95
+ "health-audit": {
96
+ name: "health-audit",
97
+ category: "research",
98
+ description: "Comprehensive repository health check",
99
+ },
100
+ // Forge
101
+ "skill-creation": {
102
+ name: "skill-creation",
103
+ category: "forge",
104
+ description: "Create new reusable skills",
105
+ },
106
+ "skill-maintenance": {
107
+ name: "skill-maintenance",
108
+ category: "forge",
109
+ description: "Maintain skill health through systematic review",
110
+ },
111
+ "skill-audit-upgrade": {
112
+ name: "skill-audit-upgrade",
113
+ category: "forge",
114
+ description: "Audit and upgrade skills to quality standards",
115
+ },
116
+ "process-extraction": {
117
+ name: "process-extraction",
118
+ category: "forge",
119
+ description: "Transform workflows into reusable skills",
120
+ },
121
+ // Garden
122
+ "memory-garden": {
123
+ name: "memory-garden",
124
+ category: "garden",
125
+ description: "Write structured memory entries for context management",
126
+ },
127
+ "seed-extraction": {
128
+ name: "seed-extraction",
129
+ category: "garden",
130
+ description: "Extract reusable patterns from experiences",
131
+ },
132
+ "seed-library": {
133
+ name: "seed-library",
134
+ category: "garden",
135
+ description: "Access and apply Dojo Seed Patches",
136
+ },
137
+ "compression-ritual": {
138
+ name: "compression-ritual",
139
+ category: "garden",
140
+ description: "Distill conversation history into memory artifacts",
141
+ },
142
+ "seed-to-skill-converter": {
143
+ name: "seed-to-skill-converter",
144
+ category: "garden",
145
+ description: "Elevate proven seeds into full skills",
146
+ },
147
+ // Orchestration
148
+ "handoff-protocol": {
149
+ name: "handoff-protocol",
150
+ category: "orchestration",
151
+ description: "Hand off work between agents cleanly",
152
+ },
153
+ "decision-propagation": {
154
+ name: "decision-propagation",
155
+ category: "orchestration",
156
+ description: "Propagate decisions across document ecosystem",
157
+ },
158
+ "workspace-navigation": {
159
+ name: "workspace-navigation",
160
+ category: "orchestration",
161
+ description: "Navigate shared agent workspaces",
162
+ },
163
+ "agent-teaching": {
164
+ name: "agent-teaching",
165
+ category: "orchestration",
166
+ description: "Teach peers through shared practice",
167
+ },
168
+ // System
169
+ "semantic-clusters": {
170
+ name: "semantic-clusters",
171
+ category: "system",
172
+ description: "Map system capabilities with action-verb clusters",
173
+ },
174
+ "repo-status": {
175
+ name: "repo-status",
176
+ category: "system",
177
+ description: "Generate comprehensive repo status documents",
178
+ },
179
+ "status-template": {
180
+ name: "status-template",
181
+ category: "system",
182
+ description: "Write status docs using 10-section template",
183
+ },
184
+ "status-writing": {
185
+ name: "status-writing",
186
+ category: "system",
187
+ description: "Write and update STATUS.md files",
188
+ },
189
+ // Tools
190
+ "patient-learning-protocol": {
191
+ name: "patient-learning-protocol",
192
+ category: "tools",
193
+ description: "Learn at the pace of understanding",
194
+ },
195
+ "file-management": {
196
+ name: "file-management",
197
+ category: "tools",
198
+ description: "Organize files and directories flexibly",
199
+ },
200
+ "product-positioning": {
201
+ name: "product-positioning",
202
+ category: "tools",
203
+ description: "Reframe binary product decisions",
204
+ },
205
+ "multi-surface-strategy": {
206
+ name: "multi-surface-strategy",
207
+ category: "tools",
208
+ description: "Design coherent multi-surface strategies",
209
+ },
210
+ };
211
+ export const CATEGORIES = [
212
+ "pipeline",
213
+ "workflow",
214
+ "research",
215
+ "forge",
216
+ "garden",
217
+ "orchestration",
218
+ "system",
219
+ "tools",
220
+ ];
221
+ export function listSkills(category) {
222
+ const entries = Object.values(SKILL_CATALOG);
223
+ const filtered = category
224
+ ? entries.filter((e) => e.category === category)
225
+ : entries;
226
+ if (filtered.length === 0) {
227
+ return category
228
+ ? `No skills in category "${category}". Available: ${CATEGORIES.join(", ")}`
229
+ : "No skills found.";
230
+ }
231
+ const grouped = {};
232
+ for (const entry of filtered) {
233
+ (grouped[entry.category] ??= []).push(entry);
234
+ }
235
+ const lines = ["**Dojo Genesis Skill Catalog**\n"];
236
+ for (const cat of CATEGORIES) {
237
+ if (!grouped[cat])
238
+ continue;
239
+ const label = cat === "pipeline"
240
+ ? `${cat} (shorthand: /dojo scout|spec|tracks|commission|retro)`
241
+ : cat;
242
+ lines.push(`**${label}:**`);
243
+ for (const s of grouped[cat]) {
244
+ lines.push(` \`${s.name}\` — ${s.description}`);
245
+ }
246
+ lines.push("");
247
+ }
248
+ lines.push("Run any skill with: `/dojo run <skill-name> [args]`");
249
+ return lines.join("\n");
250
+ }
251
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/skills/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { GlobalState, ProjectState, ProjectMetadata } from "./types.js";
2
+ export declare class DojoStateManager {
3
+ private basePath;
4
+ private globalCache;
5
+ private projectCache;
6
+ constructor(configDir: string);
7
+ getBasePath(): string;
8
+ getGlobalState(): Promise<GlobalState>;
9
+ setActiveProject(projectId: string | null): Promise<void>;
10
+ addProject(meta: ProjectMetadata): Promise<void>;
11
+ getProjectState(projectId?: string): Promise<ProjectState | null>;
12
+ updateProjectState(projectId: string, update: Partial<ProjectState>): Promise<void>;
13
+ archiveProject(projectId: string): Promise<boolean>;
14
+ addActivity(projectId: string, action: string, summary: string): Promise<void>;
15
+ private saveGlobalState;
16
+ }
17
+ export declare let stateManager: DojoStateManager;
18
+ export declare function initStateManager(configDir: string): DojoStateManager;
19
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/state/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAM7E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,YAAY,CAAwC;gBAEhD,SAAS,EAAE,MAAM;IAI7B,WAAW,IAAI,MAAM;IAIf,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAiBtC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzD,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAgBjE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBnD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAWtE,eAAe;CAI9B;AAED,eAAO,IAAI,YAAY,EAAE,gBAAgB,CAAC;AAE1C,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAGpE"}
@@ -0,0 +1,114 @@
1
+ import { readJsonFile, writeJsonFile, ensureDir } from "../utils/file-ops.js";
2
+ import { checkSchemaVersion } from "./migrations.js";
3
+ const SCHEMA_VERSION = "1.0.0";
4
+ const MAX_ACTIVITY_LOG = 50;
5
+ export class DojoStateManager {
6
+ basePath;
7
+ globalCache = null;
8
+ projectCache = new Map();
9
+ constructor(configDir) {
10
+ this.basePath = `${configDir}/dojo-genesis-plugin`;
11
+ }
12
+ getBasePath() {
13
+ return this.basePath;
14
+ }
15
+ async getGlobalState() {
16
+ if (!this.globalCache) {
17
+ await ensureDir(this.basePath);
18
+ const loaded = await readJsonFile(`${this.basePath}/global-state.json`, {
19
+ version: SCHEMA_VERSION,
20
+ activeProjectId: null,
21
+ projects: [],
22
+ lastUpdated: new Date().toISOString(),
23
+ });
24
+ this.globalCache = checkSchemaVersion(loaded);
25
+ }
26
+ return this.globalCache;
27
+ }
28
+ async setActiveProject(projectId) {
29
+ const state = await this.getGlobalState();
30
+ state.activeProjectId = projectId;
31
+ state.lastUpdated = new Date().toISOString();
32
+ if (projectId) {
33
+ const meta = state.projects.find((p) => p.id === projectId);
34
+ if (meta)
35
+ meta.lastAccessedAt = state.lastUpdated;
36
+ }
37
+ await this.saveGlobalState(state);
38
+ }
39
+ async addProject(meta) {
40
+ const state = await this.getGlobalState();
41
+ state.projects.push(meta);
42
+ state.activeProjectId = meta.id;
43
+ state.lastUpdated = new Date().toISOString();
44
+ await this.saveGlobalState(state);
45
+ }
46
+ async getProjectState(projectId) {
47
+ const global = await this.getGlobalState();
48
+ const id = projectId || global.activeProjectId;
49
+ if (!id)
50
+ return null;
51
+ if (!this.projectCache.has(id)) {
52
+ const state = await readJsonFile(`${this.basePath}/projects/${id}/state.json`, null);
53
+ if (state)
54
+ this.projectCache.set(id, state);
55
+ return state;
56
+ }
57
+ return this.projectCache.get(id) || null;
58
+ }
59
+ async updateProjectState(projectId, update) {
60
+ const current = await this.getProjectState(projectId);
61
+ if (!current)
62
+ throw new Error(`Project not found: ${projectId}`);
63
+ const updated = {
64
+ ...current,
65
+ ...update,
66
+ lastUpdated: new Date().toISOString(),
67
+ };
68
+ await writeJsonFile(`${this.basePath}/projects/${projectId}/state.json`, updated);
69
+ this.projectCache.set(projectId, updated);
70
+ const global = await this.getGlobalState();
71
+ const meta = global.projects.find((p) => p.id === projectId);
72
+ if (meta) {
73
+ meta.phase = updated.phase;
74
+ meta.lastAccessedAt = updated.lastUpdated;
75
+ await this.saveGlobalState(global);
76
+ }
77
+ }
78
+ async archiveProject(projectId) {
79
+ const state = await this.getGlobalState();
80
+ const meta = state.projects.find((p) => p.id === projectId);
81
+ if (!meta)
82
+ return false;
83
+ if (meta.archived)
84
+ return false;
85
+ meta.archived = true;
86
+ meta.lastAccessedAt = new Date().toISOString();
87
+ if (state.activeProjectId === projectId) {
88
+ state.activeProjectId = null;
89
+ }
90
+ state.lastUpdated = new Date().toISOString();
91
+ await this.saveGlobalState(state);
92
+ return true;
93
+ }
94
+ async addActivity(projectId, action, summary) {
95
+ const state = await this.getProjectState(projectId);
96
+ if (!state)
97
+ return;
98
+ state.activityLog = [
99
+ { timestamp: new Date().toISOString(), action, summary },
100
+ ...state.activityLog.slice(0, MAX_ACTIVITY_LOG - 1),
101
+ ];
102
+ await this.updateProjectState(projectId, { activityLog: state.activityLog });
103
+ }
104
+ async saveGlobalState(state) {
105
+ await writeJsonFile(`${this.basePath}/global-state.json`, state);
106
+ this.globalCache = state;
107
+ }
108
+ }
109
+ export let stateManager;
110
+ export function initStateManager(configDir) {
111
+ stateManager = new DojoStateManager(configDir);
112
+ return stateManager;
113
+ }
114
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/state/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GlobalState } from "./types.js";
2
+ export declare function checkSchemaVersion(state: GlobalState): GlobalState;
3
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/state/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAOlE"}
@@ -0,0 +1,8 @@
1
+ const CURRENT_VERSION = "1.0.0";
2
+ export function checkSchemaVersion(state) {
3
+ if (state.version !== CURRENT_VERSION) {
4
+ throw new Error(`Unsupported schema version: ${state.version}. Expected ${CURRENT_VERSION}.`);
5
+ }
6
+ return state;
7
+ }
8
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/state/migrations.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,IAAI,KAAK,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,CAAC,OAAO,cAAc,eAAe,GAAG,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,62 @@
1
+ export type DojoPhase = "initialized" | "scouting" | "specifying" | "decomposing" | "commissioning" | "implementing" | "retrospective";
2
+ export interface GlobalState {
3
+ version: string;
4
+ activeProjectId: string | null;
5
+ projects: ProjectMetadata[];
6
+ lastUpdated: string;
7
+ }
8
+ export interface ProjectMetadata {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ phase: DojoPhase;
13
+ createdAt: string;
14
+ lastAccessedAt: string;
15
+ archived: boolean;
16
+ }
17
+ export interface PendingAction {
18
+ skill: string;
19
+ args: string;
20
+ requestedAt: string;
21
+ }
22
+ export interface ProjectState {
23
+ projectId: string;
24
+ phase: DojoPhase;
25
+ tracks: Track[];
26
+ decisions: DecisionRef[];
27
+ specs: SpecRef[];
28
+ artifacts: ArtifactRef[];
29
+ currentTrack: string | null;
30
+ lastSkill: string;
31
+ pendingAction: PendingAction | null;
32
+ activityLog: ActivityEntry[];
33
+ lastUpdated: string;
34
+ }
35
+ export interface Track {
36
+ id: string;
37
+ name: string;
38
+ status: "pending" | "in-progress" | "completed" | "blocked";
39
+ dependencies: string[];
40
+ promptFile: string | null;
41
+ }
42
+ export interface DecisionRef {
43
+ date: string;
44
+ topic: string;
45
+ file: string;
46
+ }
47
+ export interface SpecRef {
48
+ version: string;
49
+ file: string;
50
+ }
51
+ export interface ArtifactRef {
52
+ category: string;
53
+ filename: string;
54
+ createdAt: string;
55
+ skill: string;
56
+ }
57
+ export interface ActivityEntry {
58
+ timestamp: string;
59
+ action: string;
60
+ summary: string;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/state/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,UAAU,GACV,YAAY,GACZ,aAAa,GACb,eAAe,GACf,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/state/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { Track, DojoPhase } from "../state/types.js";
2
+ export declare function formatPhase(phase: DojoPhase): string;
3
+ export declare function formatDate(iso: string): string;
4
+ export declare function formatTrackTable(tracks: Track[]): string;
5
+ export declare function formatProjectList(projects: Array<{
6
+ id: string;
7
+ phase: string;
8
+ lastAccessedAt: string;
9
+ archived: boolean;
10
+ }>, showArchived: boolean, activeId: string | null): string;
11
+ //# sourceMappingURL=chat-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-formatter.d.ts","sourceRoot":"","sources":["../../../src/ui/chat-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAY1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAUxD;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,EACzF,YAAY,EAAE,OAAO,EACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAWR"}
@@ -0,0 +1,39 @@
1
+ const PHASE_INDICATOR = {
2
+ initialized: "[ ]",
3
+ scouting: "[~]",
4
+ specifying: "[~]",
5
+ decomposing: "[~]",
6
+ commissioning: "[~]",
7
+ implementing: "[>]",
8
+ retrospective: "[*]",
9
+ };
10
+ export function formatPhase(phase) {
11
+ return `${PHASE_INDICATOR[phase] || "[ ]"} ${phase}`;
12
+ }
13
+ export function formatDate(iso) {
14
+ return iso.split("T")[0];
15
+ }
16
+ export function formatTrackTable(tracks) {
17
+ if (tracks.length === 0)
18
+ return "_No tracks defined._";
19
+ let table = "| Track | Name | Status | Dependencies |\n";
20
+ table += "|-------|------|--------|-------------|\n";
21
+ for (const t of tracks) {
22
+ const deps = t.dependencies.length > 0 ? t.dependencies.join(", ") : "none";
23
+ table += `| ${t.id} | ${t.name} | ${t.status} | ${deps} |\n`;
24
+ }
25
+ return table;
26
+ }
27
+ export function formatProjectList(projects, showArchived, activeId) {
28
+ const visible = projects.filter(p => showArchived || !p.archived);
29
+ if (visible.length === 0)
30
+ return "_No projects. Run `/dojo init <name>` to create one._";
31
+ let table = "| Project | Phase | Last Active | Active |\n";
32
+ table += "|---------|-------|-------------|--------|\n";
33
+ for (const p of visible) {
34
+ const active = p.id === activeId ? ">>>" : "";
35
+ table += `| ${p.id} | ${p.phase} | ${formatDate(p.lastAccessedAt)} | ${active} |\n`;
36
+ }
37
+ return table;
38
+ }
39
+ //# sourceMappingURL=chat-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-formatter.js","sourceRoot":"","sources":["../../../src/ui/chat-formatter.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAA8B;IACjD,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,KAAK;IACpB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC;IAEvD,IAAI,KAAK,GAAG,4CAA4C,CAAC;IACzD,KAAK,IAAI,2CAA2C,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5E,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,MAAM,IAAI,MAAM,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAyF,EACzF,YAAqB,EACrB,QAAuB;IAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,uDAAuD,CAAC;IAEzF,IAAI,KAAK,GAAG,8CAA8C,CAAC;IAC3D,KAAK,IAAI,8CAA8C,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,MAAM,MAAM,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function readJsonFile<T>(path: string, defaultValue: T): Promise<T>;
2
+ export declare function writeJsonFile(path: string, data: unknown): Promise<void>;
3
+ export declare function writeTextFile(path: string, content: string): Promise<void>;
4
+ export declare function ensureDir(dir: string): Promise<void>;
5
+ export declare function fileExists(path: string): Promise<boolean>;
6
+ //# sourceMappingURL=file-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-ops.d.ts","sourceRoot":"","sources":["../../../src/utils/file-ops.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ/E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhF;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D"}
@@ -0,0 +1,38 @@
1
+ import { promises as fs } from "fs";
2
+ import { dirname } from "path";
3
+ export async function readJsonFile(path, defaultValue) {
4
+ try {
5
+ const raw = await fs.readFile(path, "utf-8");
6
+ return JSON.parse(raw);
7
+ }
8
+ catch (err) {
9
+ if (err.code === "ENOENT")
10
+ return defaultValue;
11
+ throw err;
12
+ }
13
+ }
14
+ export async function writeJsonFile(path, data) {
15
+ await ensureDir(dirname(path));
16
+ const tmp = `${path}.tmp`;
17
+ await fs.writeFile(tmp, JSON.stringify(data, null, 2), "utf-8");
18
+ await fs.rename(tmp, path);
19
+ }
20
+ export async function writeTextFile(path, content) {
21
+ await ensureDir(dirname(path));
22
+ const tmp = `${path}.tmp`;
23
+ await fs.writeFile(tmp, content, "utf-8");
24
+ await fs.rename(tmp, path);
25
+ }
26
+ export async function ensureDir(dir) {
27
+ await fs.mkdir(dir, { recursive: true });
28
+ }
29
+ export async function fileExists(path) {
30
+ try {
31
+ await fs.access(path);
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ //# sourceMappingURL=file-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-ops.js","sourceRoot":"","sources":["../../../src/utils/file-ops.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,IAAY,EAAE,YAAe;IACjE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;QAC1E,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,IAAa;IAC7D,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IAC/D,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateProjectMd(name: string, description: string, date: string): string;
2
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWzF"}
@@ -0,0 +1,11 @@
1
+ export function generateProjectMd(name, description, date) {
2
+ const descBlock = description ? `${description}\n\n` : "";
3
+ return (`# ${name}\n\n` +
4
+ descBlock +
5
+ `**Phase:** initialized\n` +
6
+ `**Created:** ${date}\n\n` +
7
+ `---\n\n` +
8
+ `## Activity Log\n\n` +
9
+ `- ${date} — Project created\n`);
10
+ }
11
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,WAAmB,EAAE,IAAY;IAC/E,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,OAAO,CACL,KAAK,IAAI,MAAM;QACf,SAAS;QACT,0BAA0B;QAC1B,gBAAgB,IAAI,MAAM;QAC1B,SAAS;QACT,qBAAqB;QACrB,KAAK,IAAI,sBAAsB,CAChC,CAAC;AACJ,CAAC"}