agent-enderun 1.1.5 → 1.1.7

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 (253) hide show
  1. package/ENDERUN.md +13 -10
  2. package/README.md +14 -31
  3. package/bin/run-multi-test.js +77 -0
  4. package/dist/framework-mcp/src/tools/dashboard/start_dashboard.d.ts +5 -0
  5. package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js +30 -0
  6. package/dist/framework-mcp/src/tools/dashboard/start_dashboard.js.map +1 -0
  7. package/dist/framework-mcp/src/tools/definitions.js +118 -0
  8. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  9. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.d.ts +5 -0
  10. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +51 -0
  11. package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -0
  12. package/dist/framework-mcp/src/tools/file_system/replace_text.js +8 -4
  13. package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
  14. package/dist/framework-mcp/src/tools/file_system/write_file.js +3 -0
  15. package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
  16. package/dist/framework-mcp/src/tools/framework/audit_deps.d.ts +6 -0
  17. package/dist/framework-mcp/src/tools/framework/audit_deps.js +42 -0
  18. package/dist/framework-mcp/src/tools/framework/audit_deps.js.map +1 -0
  19. package/dist/framework-mcp/src/tools/framework/run_tests.d.ts +5 -0
  20. package/dist/framework-mcp/src/tools/framework/run_tests.js +26 -0
  21. package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -0
  22. package/dist/framework-mcp/src/tools/index.js +24 -0
  23. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  24. package/dist/framework-mcp/src/tools/memory/get_insights.d.ts +6 -0
  25. package/dist/framework-mcp/src/tools/memory/get_insights.js +35 -0
  26. package/dist/framework-mcp/src/tools/memory/get_insights.js.map +1 -0
  27. package/dist/framework-mcp/src/tools/memory/read_memory.d.ts +6 -0
  28. package/dist/framework-mcp/src/tools/memory/read_memory.js +29 -0
  29. package/dist/framework-mcp/src/tools/memory/read_memory.js.map +1 -0
  30. package/dist/framework-mcp/src/tools/messaging/send_message.js +1 -1
  31. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  32. package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +5 -0
  33. package/dist/framework-mcp/src/tools/observability/check_ports.js +27 -0
  34. package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -0
  35. package/dist/framework-mcp/src/tools/observability/get_health.d.ts +5 -0
  36. package/dist/framework-mcp/src/tools/observability/get_health.js +21 -0
  37. package/dist/framework-mcp/src/tools/observability/get_health.js.map +1 -0
  38. package/dist/framework-mcp/src/tools/search/get_gaps.d.ts +6 -0
  39. package/dist/framework-mcp/src/tools/search/get_gaps.js +49 -0
  40. package/dist/framework-mcp/src/tools/search/get_gaps.js.map +1 -0
  41. package/dist/framework-mcp/src/tools/search/get_map.d.ts +6 -0
  42. package/dist/framework-mcp/src/tools/search/get_map.js +45 -0
  43. package/dist/framework-mcp/src/tools/search/get_map.js.map +1 -0
  44. package/dist/framework-mcp/src/tools/search/grep_search.d.ts +5 -0
  45. package/dist/framework-mcp/src/tools/search/grep_search.js +60 -0
  46. package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -0
  47. package/dist/framework-mcp/src/tools/search/list_dir.d.ts +5 -0
  48. package/dist/framework-mcp/src/tools/search/list_dir.js +29 -0
  49. package/dist/framework-mcp/src/tools/search/list_dir.js.map +1 -0
  50. package/dist/framework-mcp/src/tools/types.d.ts +10 -5
  51. package/dist/framework-mcp/src/utils/compliance.d.ts +5 -0
  52. package/dist/framework-mcp/src/utils/compliance.js +30 -0
  53. package/dist/framework-mcp/src/utils/compliance.js.map +1 -0
  54. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +5 -5
  55. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  56. package/dist/src/cli/adapters/types.d.ts +2 -2
  57. package/dist/src/cli/adapters.d.ts +1 -1
  58. package/dist/src/cli/adapters.js +45 -77
  59. package/dist/src/cli/adapters.js.map +1 -1
  60. package/dist/src/cli/commands/check.js +52 -6
  61. package/dist/src/cli/commands/check.js.map +1 -1
  62. package/dist/src/cli/commands/init.d.ts +5 -1
  63. package/dist/src/cli/commands/init.js +184 -106
  64. package/dist/src/cli/commands/init.js.map +1 -1
  65. package/dist/src/cli/commands/orchestrate.d.ts +3 -3
  66. package/dist/src/cli/commands/orchestrate.js +14 -8
  67. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  68. package/dist/src/cli/commands/status.js +3 -2
  69. package/dist/src/cli/commands/status.js.map +1 -1
  70. package/dist/src/cli/index.js +4 -3
  71. package/dist/src/cli/index.js.map +1 -1
  72. package/dist/src/cli/shims.js +6 -6
  73. package/dist/src/cli/utils/app-backend.d.ts +2 -0
  74. package/dist/src/cli/utils/app-backend.js +236 -0
  75. package/dist/src/cli/utils/app-backend.js.map +1 -0
  76. package/dist/src/cli/utils/app-docs.d.ts +3 -0
  77. package/dist/src/cli/utils/app-docs.js +59 -0
  78. package/dist/src/cli/utils/app-docs.js.map +1 -0
  79. package/dist/src/cli/utils/app-frontend.d.ts +2 -0
  80. package/dist/src/cli/utils/app-frontend.js +248 -0
  81. package/dist/src/cli/utils/app-frontend.js.map +1 -0
  82. package/dist/src/cli/utils/app-inferrer.d.ts +14 -0
  83. package/dist/src/cli/utils/app-inferrer.js +39 -0
  84. package/dist/src/cli/utils/app-inferrer.js.map +1 -0
  85. package/dist/src/cli/utils/app-types.d.ts +3 -0
  86. package/dist/src/cli/utils/app-types.js +233 -0
  87. package/dist/src/cli/utils/app-types.js.map +1 -0
  88. package/dist/src/cli/utils/app.d.ts +5 -32
  89. package/dist/src/cli/utils/app.js +5 -794
  90. package/dist/src/cli/utils/app.js.map +1 -1
  91. package/dist/src/cli/utils/memory.js +8 -4
  92. package/dist/src/cli/utils/memory.js.map +1 -1
  93. package/dist/src/modules/adapters/antigravity-cli.js +3 -3
  94. package/dist/src/modules/adapters/antigravity-cli.js.map +1 -1
  95. package/dist/src/modules/adapters/claude.js +1 -1
  96. package/dist/src/modules/adapters/claude.js.map +1 -1
  97. package/dist/src/modules/adapters/codex.js +2 -2
  98. package/dist/src/modules/adapters/codex.js.map +1 -1
  99. package/dist/src/modules/adapters/cursor.js +1 -1
  100. package/dist/src/modules/adapters/cursor.js.map +1 -1
  101. package/dist/src/modules/adapters/definitions.d.ts +9 -0
  102. package/dist/src/modules/adapters/definitions.js +124 -0
  103. package/dist/src/modules/adapters/definitions.js.map +1 -0
  104. package/dist/src/modules/adapters/gemini.js +2 -2
  105. package/dist/src/modules/adapters/gemini.js.map +1 -1
  106. package/dist/src/modules/adapters/grok.js +1 -1
  107. package/dist/src/modules/adapters/grok.js.map +1 -1
  108. package/dist/src/modules/agents/definitions.js +26 -27
  109. package/dist/src/modules/agents/definitions.js.map +1 -1
  110. package/dist/src/shared/config.d.ts +3 -3
  111. package/dist/src/shared/logger.js +8 -5
  112. package/dist/src/shared/logger.js.map +1 -1
  113. package/dist/tests/adapter.test.d.ts +1 -0
  114. package/dist/tests/adapter.test.js +129 -0
  115. package/dist/tests/adapter.test.js.map +1 -0
  116. package/dist/tests/agents-definitions.test.d.ts +1 -0
  117. package/dist/tests/agents-definitions.test.js +54 -0
  118. package/dist/tests/agents-definitions.test.js.map +1 -0
  119. package/dist/tests/approve.test.d.ts +1 -0
  120. package/dist/tests/approve.test.js +88 -0
  121. package/dist/tests/approve.test.js.map +1 -0
  122. package/dist/tests/config.test.d.ts +1 -0
  123. package/dist/tests/config.test.js +58 -0
  124. package/dist/tests/config.test.js.map +1 -0
  125. package/dist/tests/container.runner.d.ts +1 -0
  126. package/dist/tests/container.runner.js +68 -0
  127. package/dist/tests/container.runner.js.map +1 -0
  128. package/dist/tests/container.test.d.ts +1 -0
  129. package/dist/tests/container.test.js +73 -0
  130. package/dist/tests/container.test.js.map +1 -0
  131. package/dist/tests/errors.test.d.ts +1 -0
  132. package/dist/tests/errors.test.js +64 -0
  133. package/dist/tests/errors.test.js.map +1 -0
  134. package/dist/tests/fs-utils.test.d.ts +1 -0
  135. package/dist/tests/fs-utils.test.js +101 -0
  136. package/dist/tests/fs-utils.test.js.map +1 -0
  137. package/dist/tests/logger.test.d.ts +1 -0
  138. package/dist/tests/logger.test.js +81 -0
  139. package/dist/tests/logger.test.js.map +1 -0
  140. package/dist/tests/memory-utils.test.d.ts +1 -0
  141. package/dist/tests/memory-utils.test.js +173 -0
  142. package/dist/tests/memory-utils.test.js.map +1 -0
  143. package/dist/tests/orchestrate.test.d.ts +1 -0
  144. package/dist/tests/orchestrate.test.js +131 -0
  145. package/dist/tests/orchestrate.test.js.map +1 -0
  146. package/dist/tests/skills-definitions.test.d.ts +1 -0
  147. package/dist/tests/skills-definitions.test.js +34 -0
  148. package/dist/tests/skills-definitions.test.js.map +1 -0
  149. package/dist/tests/status.test.d.ts +1 -0
  150. package/dist/tests/status.test.js +105 -0
  151. package/dist/tests/status.test.js.map +1 -0
  152. package/dist/tests/string.test.d.ts +1 -0
  153. package/dist/tests/string.test.js +89 -0
  154. package/dist/tests/string.test.js.map +1 -0
  155. package/dist/tests/time.test.d.ts +1 -0
  156. package/dist/tests/time.test.js +48 -0
  157. package/dist/tests/time.test.js.map +1 -0
  158. package/dist/tests/trace.test.d.ts +1 -0
  159. package/dist/tests/trace.test.js +61 -0
  160. package/dist/tests/trace.test.js.map +1 -0
  161. package/dist/vitest.config.js +1 -0
  162. package/dist/vitest.config.js.map +1 -1
  163. package/docs/getting-started.md +4 -0
  164. package/docs/user/corporate-governance.md +25 -0
  165. package/framework-mcp/dist/tools/dashboard/start_dashboard.js +29 -0
  166. package/framework-mcp/dist/tools/definitions.js +118 -0
  167. package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +50 -0
  168. package/framework-mcp/dist/tools/file_system/replace_text.js +8 -4
  169. package/framework-mcp/dist/tools/file_system/write_file.js +3 -0
  170. package/framework-mcp/dist/tools/framework/audit_deps.js +41 -0
  171. package/framework-mcp/dist/tools/framework/run_tests.js +25 -0
  172. package/framework-mcp/dist/tools/index.js +24 -0
  173. package/framework-mcp/dist/tools/memory/get_insights.js +34 -0
  174. package/framework-mcp/dist/tools/memory/read_memory.js +28 -0
  175. package/framework-mcp/dist/tools/messaging/send_message.js +1 -1
  176. package/framework-mcp/dist/tools/observability/check_ports.js +26 -0
  177. package/framework-mcp/dist/tools/observability/get_health.js +20 -0
  178. package/framework-mcp/dist/tools/search/get_gaps.js +48 -0
  179. package/framework-mcp/dist/tools/search/get_map.js +44 -0
  180. package/framework-mcp/dist/tools/search/grep_search.js +59 -0
  181. package/framework-mcp/dist/tools/search/list_dir.js +28 -0
  182. package/framework-mcp/dist/utils/compliance.js +29 -0
  183. package/framework-mcp/package.json +1 -1
  184. package/framework-mcp/src/tools/dashboard/start_dashboard.ts +33 -0
  185. package/framework-mcp/src/tools/definitions.ts +118 -0
  186. package/framework-mcp/src/tools/file_system/batch_surgical_edit.ts +70 -0
  187. package/framework-mcp/src/tools/file_system/replace_text.ts +10 -4
  188. package/framework-mcp/src/tools/file_system/write_file.ts +5 -0
  189. package/framework-mcp/src/tools/framework/audit_deps.ts +49 -0
  190. package/framework-mcp/src/tools/framework/run_tests.ts +28 -0
  191. package/framework-mcp/src/tools/index.ts +24 -0
  192. package/framework-mcp/src/tools/memory/get_insights.ts +41 -0
  193. package/framework-mcp/src/tools/memory/read_memory.ts +31 -0
  194. package/framework-mcp/src/tools/messaging/send_message.ts +1 -1
  195. package/framework-mcp/src/tools/observability/check_ports.ts +30 -0
  196. package/framework-mcp/src/tools/observability/get_health.ts +25 -0
  197. package/framework-mcp/src/tools/search/get_gaps.ts +54 -0
  198. package/framework-mcp/src/tools/search/get_map.ts +50 -0
  199. package/framework-mcp/src/tools/search/grep_search.ts +66 -0
  200. package/framework-mcp/src/tools/search/list_dir.ts +34 -0
  201. package/framework-mcp/src/tools/types.ts +11 -1
  202. package/framework-mcp/src/utils/compliance.ts +37 -0
  203. package/framework-mcp/tests/tools/messaging/send_message.test.ts +5 -5
  204. package/package.json +3 -3
  205. package/src/cli/adapters/types.ts +2 -2
  206. package/src/cli/adapters.ts +45 -80
  207. package/src/cli/commands/check.ts +52 -6
  208. package/src/cli/commands/init.ts +193 -114
  209. package/src/cli/commands/orchestrate.ts +14 -8
  210. package/src/cli/commands/status.ts +3 -2
  211. package/src/cli/index.ts +4 -3
  212. package/src/cli/shims.ts +6 -6
  213. package/src/cli/utils/app-backend.ts +249 -0
  214. package/src/cli/utils/app-docs.ts +65 -0
  215. package/src/cli/utils/app-frontend.ts +257 -0
  216. package/src/cli/utils/app-inferrer.ts +53 -0
  217. package/src/cli/utils/app-types.ts +243 -0
  218. package/src/cli/utils/app.ts +5 -849
  219. package/src/cli/utils/memory.ts +8 -4
  220. package/src/modules/adapters/definitions.ts +125 -0
  221. package/src/modules/agents/definitions.ts +26 -27
  222. package/src/shared/logger.ts +8 -5
  223. package/templates/prompts/bug-fix-recipe.md +20 -0
  224. package/templates/prompts/new-feature-recipe.md +19 -0
  225. package/templates/prompts/refactoring-recipe.md +21 -0
  226. package/templates/standards/architecture-standards.md +23 -0
  227. package/templates/standards/crud-governance.md +21 -0
  228. package/templates/standards/frontend-standards.md +38 -0
  229. package/templates/standards/i18n-standards.md +17 -0
  230. package/templates/standards/logging-and-secrets.md +29 -0
  231. package/templates/standards/mobile-standards.md +24 -0
  232. package/templates/standards/quality-standards.md +31 -0
  233. package/templates/standards/security-standards.md +21 -0
  234. package/templates/standards/tailwind-standards.md +20 -0
  235. package/templates/standards/testing-standards.md +31 -0
  236. package/src/modules/adapters/antigravity-cli.ts +0 -25
  237. package/src/modules/adapters/claude.ts +0 -36
  238. package/src/modules/adapters/codex.ts +0 -22
  239. package/src/modules/adapters/cursor.ts +0 -22
  240. package/src/modules/adapters/gemini.ts +0 -27
  241. package/src/modules/adapters/grok.ts +0 -20
  242. package/templates/architecture/agents-manifest.md +0 -79
  243. package/templates/architecture/approval-flows.md +0 -61
  244. package/templates/architecture/enterprise-architecture.md +0 -69
  245. package/templates/architecture/standards/crud-governance.md +0 -46
  246. package/templates/architecture/standards/data-fetching-patterns.md +0 -13
  247. package/templates/architecture/standards/design-system.md +0 -31
  248. package/templates/architecture/standards/documentation-ownership.md +0 -21
  249. package/templates/architecture/standards/logging.md +0 -7
  250. package/templates/architecture/standards/mobile-standards.md +0 -48
  251. package/templates/architecture/standards/tech-stack.md +0 -9
  252. package/templates/backend/error-handling.md +0 -74
  253. package/templates/frontend/component-patterns.md +0 -91
@@ -0,0 +1,248 @@
1
+ import path from "path";
2
+ import { writeJsonFile, writeTextFile } from "./fs.js";
3
+ import { getConfiguredPaths } from "./memory.js";
4
+ import { getDependencyVersions } from "./pkg.js";
5
+ import { createBaseTypeFiles } from "./app-types.js";
6
+ const targetDir = process.cwd();
7
+ export function createWebFiles(spec) {
8
+ const pathsMap = getConfiguredPaths();
9
+ const frontendDir = pathsMap.frontend;
10
+ const { "@vitejs/plugin-react": vitePluginReact, vite, react, "react-dom": reactDom, "lucide-react": lucideReact, "@types/react": typesReact, "@types/react-dom": typesReactDom, typescript, "vitest-frontend": vitest } = getDependencyVersions();
11
+ createBaseTypeFiles(path.join(targetDir, frontendDir, "src"));
12
+ writeJsonFile(path.join(targetDir, frontendDir, "package.json"), {
13
+ name: "@agent-enderun/web",
14
+ version: "0.1.0",
15
+ private: true,
16
+ type: "module",
17
+ scripts: {
18
+ dev: "vite --host 0.0.0.0",
19
+ build: "tsc -p tsconfig.json && vite build",
20
+ preview: "vite preview",
21
+ test: "vitest run",
22
+ },
23
+ dependencies: {
24
+ "@vitejs/plugin-react": vitePluginReact,
25
+ vite: vite,
26
+ react: react,
27
+ "react-dom": reactDom,
28
+ "lucide-react": lucideReact,
29
+ },
30
+ devDependencies: {
31
+ "@types/react": typesReact,
32
+ "@types/react-dom": typesReactDom,
33
+ typescript: typescript,
34
+ vitest: vitest,
35
+ },
36
+ });
37
+ writeJsonFile(path.join(targetDir, frontendDir, "tsconfig.json"), {
38
+ extends: "../../tsconfig.json",
39
+ compilerOptions: {
40
+ jsx: "react-jsx",
41
+ module: "NodeNext",
42
+ moduleResolution: "NodeNext",
43
+ target: "ES2022",
44
+ strict: true,
45
+ skipLibCheck: true,
46
+ },
47
+ include: ["src/**/*.ts", "src/**/*.tsx"],
48
+ });
49
+ writeTextFile(path.join(targetDir, frontendDir, "index.html"), [
50
+ "<div id=\"root\"></div>",
51
+ "<script type=\"module\" src=\"/src/main.tsx\"></script>",
52
+ ].join("\n"));
53
+ writeTextFile(path.join(targetDir, frontendDir, "src/main.tsx"), [
54
+ "import React from \"react\";",
55
+ "import { createRoot } from \"react-dom/client\";",
56
+ "import { App } from \"./App.js\";",
57
+ "import \"./styles.css\";",
58
+ "",
59
+ "createRoot(document.getElementById(\"root\") as HTMLElement).render(",
60
+ " <React.StrictMode>",
61
+ " <App />",
62
+ " </React.StrictMode>,",
63
+ ");",
64
+ ].join("\n"));
65
+ writeTextFile(path.join(targetDir, frontendDir, "src/App.tsx"), [
66
+ "import { BarChart3, ShieldCheck, UsersRound } from \"lucide-react\";",
67
+ "",
68
+ "const metrics = [",
69
+ " { label: \"Pipeline\", value: \"$261K\", tone: \"green\" },",
70
+ " { label: \"Active customers\", value: \"18\", tone: \"blue\" },",
71
+ " { label: \"At risk\", value: \"3\", tone: \"red\" },",
72
+ "];",
73
+ "",
74
+ "const customers = [",
75
+ " { name: \"Northwind\", status: \"Active\", owner: \"Sales Manager\", value: \"$125K\" },",
76
+ " { name: \"Acme Corp\", status: \"Lead\", owner: \"Sales Manager\", value: \"$82K\" },",
77
+ " { name: \"Globex\", status: \"At risk\", owner: \"Admin User\", value: \"$54K\" },",
78
+ "];",
79
+ "",
80
+ "export function App() {",
81
+ " return (",
82
+ " <main className=\"shell\">",
83
+ " <aside className=\"sidebar\" aria-label=\"Primary navigation\">",
84
+ " <div className=\"brand\">AE</div>",
85
+ " <nav>",
86
+ " <a className=\"active\" href=\"#dashboard\"><BarChart3 size={18} /> Dashboard</a>",
87
+ " <a href=\"#users\"><UsersRound size={18} /> Users</a>",
88
+ " <a href=\"#roles\"><ShieldCheck size={18} /> Roles</a>",
89
+ " </nav>",
90
+ " </aside>",
91
+ "",
92
+ " <section className=\"workspace\">",
93
+ " <header className=\"topbar\">",
94
+ " <div>",
95
+ " <p>{spec.domain}</p>",
96
+ " <h1>{spec.title}</h1>",
97
+ " </div>",
98
+ " <button type=\"button\">New customer</button>",
99
+ " </header>",
100
+ "",
101
+ " <section className=\"metrics\" aria-label=\"Report metrics\">",
102
+ " {metrics.map((metric) => (",
103
+ " <article className={`metric ${metric.tone}`} key={metric.label}>",
104
+ " <span>{metric.label}</span>",
105
+ " <strong>{metric.value}</strong>",
106
+ " </article>",
107
+ " ))}",
108
+ " </section>",
109
+ "",
110
+ " <section className=\"panel\">",
111
+ " <div>",
112
+ " <h2>Customers</h2>",
113
+ " <p>Ownership, value and status at a glance.</p>",
114
+ " </div>",
115
+ " <div className=\"table\">",
116
+ " {customers.map((customer) => (",
117
+ " <div className=\"row\" key={customer.name}>",
118
+ " <strong>{customer.name}</strong>",
119
+ " <span>{customer.status}</span>",
120
+ " <span>{customer.owner}</span>",
121
+ " <b>{customer.value}</b>",
122
+ " </div>",
123
+ " ))}",
124
+ " </div>",
125
+ " </section>",
126
+ " </section>",
127
+ " </main>",
128
+ " );",
129
+ "}",
130
+ ].join("\n"));
131
+ writeTextFile(path.join(targetDir, frontendDir, "src/styles.css"), [
132
+ ":root {",
133
+ " color: #172026;",
134
+ " background: #f4f7f6;",
135
+ " font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;",
136
+ "}",
137
+ "",
138
+ "* { box-sizing: border-box; }",
139
+ "body { margin: 0; }",
140
+ "button { font: inherit; }",
141
+ "",
142
+ ".shell {",
143
+ " min-height: 100vh;",
144
+ " display: grid;",
145
+ " grid-template-columns: 240px 1fr;",
146
+ "}",
147
+ "",
148
+ ".sidebar {",
149
+ " background: #102022;",
150
+ " color: #eef6f2;",
151
+ " padding: 24px;",
152
+ "}",
153
+ "",
154
+ ".brand {",
155
+ " width: 40px;",
156
+ " height: 40px;",
157
+ " display: grid;",
158
+ " place-items: center;",
159
+ " background: #d8f36a;",
160
+ " color: #102022;",
161
+ " font-weight: 800;",
162
+ " border-radius: 8px;",
163
+ " margin-bottom: 32px;",
164
+ "}",
165
+ "",
166
+ "nav { display: grid; gap: 8px; }",
167
+ "nav a {",
168
+ " color: inherit;",
169
+ " text-decoration: none;",
170
+ " display: flex;",
171
+ " gap: 10px;",
172
+ " align-items: center;",
173
+ " padding: 10px 12px;",
174
+ " border-radius: 8px;",
175
+ "}",
176
+ "nav a.active, nav a:hover { background: rgba(255,255,255,0.12); }",
177
+ "",
178
+ ".workspace { padding: 32px; }",
179
+ ".topbar {",
180
+ " display: flex;",
181
+ " justify-content: space-between;",
182
+ " align-items: center;",
183
+ " gap: 24px;",
184
+ " margin-bottom: 24px;",
185
+ "}",
186
+ ".topbar p { margin: 0 0 4px; color: #58666a; font-size: 14px; }",
187
+ ".topbar h1 { margin: 0; font-size: 32px; letter-spacing: 0; }",
188
+ ".topbar button {",
189
+ " border: 0;",
190
+ " border-radius: 8px;",
191
+ " background: #176b5d;",
192
+ " color: white;",
193
+ " padding: 10px 14px;",
194
+ "}",
195
+ "",
196
+ ".metrics {",
197
+ " display: grid;",
198
+ " grid-template-columns: repeat(3, minmax(0, 1fr));",
199
+ " gap: 16px;",
200
+ " margin-bottom: 24px;",
201
+ "}",
202
+ ".metric, .panel {",
203
+ " background: white;",
204
+ " border: 1px solid #d9e3e0;",
205
+ " border-radius: 8px;",
206
+ "}",
207
+ ".metric { padding: 18px; }",
208
+ ".metric span { display: block; color: #58666a; margin-bottom: 8px; }",
209
+ ".metric strong { font-size: 28px; }",
210
+ ".metric.green { border-top: 4px solid #49a078; }",
211
+ ".metric.blue { border-top: 4px solid #3f7cac; }",
212
+ ".metric.red { border-top: 4px solid #d95d39; }",
213
+ "",
214
+ ".panel { padding: 20px; }",
215
+ ".panel h2 { margin: 0 0 4px; font-size: 20px; }",
216
+ ".panel p { margin: 0 0 18px; color: #58666a; }",
217
+ ".table { display: grid; gap: 8px; }",
218
+ ".row {",
219
+ " display: grid;",
220
+ " grid-template-columns: 1.4fr 0.8fr 1fr 0.6fr;",
221
+ " gap: 16px;",
222
+ " align-items: center;",
223
+ " padding: 12px;",
224
+ " border-radius: 8px;",
225
+ " background: #f7faf9;",
226
+ "}",
227
+ "",
228
+ "@media (max-width: 760px) {",
229
+ " .shell { grid-template-columns: 1fr; }",
230
+ " .sidebar { position: static; }",
231
+ " .metrics { grid-template-columns: 1fr; }",
232
+ " .topbar { align-items: flex-start; flex-direction: column; }",
233
+ " .row { grid-template-columns: 1fr; }",
234
+ "}",
235
+ ].join("\n"));
236
+ writeTextFile(path.join(targetDir, frontendDir, "README.md"), [
237
+ `# ${spec.title} Web`,
238
+ "",
239
+ "React dashboard generated by Agent Enderun.",
240
+ "",
241
+ "## Commands",
242
+ "",
243
+ "- \`npm run dev\` strings",
244
+ "- \`npm run build\` strings",
245
+ "- \`npm run test\` strings",
246
+ ].join("\n"));
247
+ }
248
+ //# sourceMappingURL=app-frontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-frontend.js","sourceRoot":"","sources":["../../../../src/cli/utils/app-frontend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface AppSpec {
2
+ rawDescription: string;
3
+ appName: string;
4
+ title: string;
5
+ domain: string;
6
+ modules: {
7
+ auth: boolean;
8
+ users: boolean;
9
+ roles: boolean;
10
+ reports: boolean;
11
+ };
12
+ }
13
+ export declare function inferAppSpec(description: string): AppSpec;
14
+ export declare function collectCreateAppDescription(args: string[]): Promise<string>;
@@ -0,0 +1,39 @@
1
+ import { slugifyName, titleCase } from "./string.js";
2
+ export function inferAppSpec(description) {
3
+ const normalized = String(description || "").toLowerCase();
4
+ const isCrm = /\bcrm\b|customer|musteri|müşteri/.test(normalized);
5
+ const hasAuth = /auth|login|giris|giriş|signin|sign in|user|kullanici|kullanıcı|role|rol/.test(normalized);
6
+ const hasRoles = /role|rol|permission|yetki|admin/.test(normalized);
7
+ const hasReports = /report|rapor|analytics|dashboard|chart|metric/.test(normalized);
8
+ const appName = isCrm ? "crm-dashboard" : slugifyName(description).split("-").slice(0, 4).join("-");
9
+ return {
10
+ rawDescription: description,
11
+ appName,
12
+ title: isCrm ? "CRM Dashboard" : titleCase(appName),
13
+ domain: isCrm ? "CRM" : "Business",
14
+ modules: {
15
+ auth: hasAuth || isCrm,
16
+ users: hasAuth || hasRoles || isCrm,
17
+ roles: hasRoles || isCrm,
18
+ reports: hasReports || isCrm,
19
+ },
20
+ };
21
+ }
22
+ export async function collectCreateAppDescription(args) {
23
+ const initial = args.join(" ").trim();
24
+ if (initial)
25
+ return initial;
26
+ const readline = await import("readline/promises");
27
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
28
+ try {
29
+ const idea = await rl.question("What do you want to build? ");
30
+ const platform = await rl.question("Platform? (full-stack/web/backend) ");
31
+ const auth = await rl.question("Auth and roles? (yes/no) ");
32
+ const reports = await rl.question("Reports/dashboard? (yes/no) ");
33
+ return [idea, platform, auth.includes("y") ? "with auth and roles" : "", reports.includes("y") ? "with reports dashboard" : ""].filter(Boolean).join(" ");
34
+ }
35
+ finally {
36
+ rl.close();
37
+ }
38
+ }
39
+ //# sourceMappingURL=app-inferrer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-inferrer.js","sourceRoot":"","sources":["../../../../src/cli/utils/app-inferrer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAerD,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,yEAAyE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAG,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,+CAA+C,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpG,OAAO;QACH,cAAc,EAAE,WAAW;QAC3B,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;QACnD,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU;QAClC,OAAO,EAAE;YACL,IAAI,EAAE,OAAO,IAAI,KAAK;YACtB,KAAK,EAAE,OAAO,IAAI,QAAQ,IAAI,KAAK;YACnC,KAAK,EAAE,QAAQ,IAAI,KAAK;YACxB,OAAO,EAAE,UAAU,IAAI,KAAK;SAC/B;KACJ,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAAc;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9J,CAAC;YAAS,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function buildSharedTypesContent(existingContent: string): string;
2
+ export declare function updateContractHashFile(): void;
3
+ export declare function createBaseTypeFiles(baseDir: string): void;
@@ -0,0 +1,233 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { ensureDir, writeTextFile, computeTypesHash } from "./fs.js";
4
+ import { getConfiguredPaths } from "./memory.js";
5
+ import { UI } from "./ui.js";
6
+ const targetDir = process.cwd();
7
+ export function buildSharedTypesContent(existingContent) {
8
+ const marker = "// --- Generated Application Contract ---";
9
+ const generated = [
10
+ marker,
11
+ "export type RoleID = Brand<string, \"RoleID\">;",
12
+ "export type ReportID = Brand<string, \"ReportID\">;",
13
+ "export type CustomerID = Brand<string, \"CustomerID\">;",
14
+ "",
15
+ "export interface AuthSession {",
16
+ " user: User;",
17
+ " token: string;",
18
+ " expiresAt: string;",
19
+ "}",
20
+ "",
21
+ "export interface Role {",
22
+ " id: RoleID;",
23
+ " name: string;",
24
+ " permissions: string[];",
25
+ "}",
26
+ "",
27
+ "export interface Customer {",
28
+ " id: CustomerID;",
29
+ " name: string;",
30
+ " ownerId: UserID;",
31
+ " status: \"LEAD\" | \"ACTIVE\" | \"AT_RISK\";",
32
+ " annualValue: number;",
33
+ " createdAt: string;",
34
+ "}",
35
+ "",
36
+ "export interface ReportMetric {",
37
+ " id: ReportID;",
38
+ " label: string;",
39
+ " value: number;",
40
+ " trend: \"UP\" | \"DOWN\" | \"FLAT\";",
41
+ "}",
42
+ "",
43
+ "export interface DashboardSummary {",
44
+ " customers: Customer[];",
45
+ " users: User[];",
46
+ " roles: Role[];",
47
+ " reports: ReportMetric[];",
48
+ "}",
49
+ ].join("\n");
50
+ if (existingContent.includes(marker))
51
+ return existingContent;
52
+ return `${existingContent.trim()}\n\n${generated}\n`;
53
+ }
54
+ export function updateContractHashFile() {
55
+ const pathsMap = getConfiguredPaths();
56
+ const sharedDir = path.join(targetDir, pathsMap.backend, "src/types");
57
+ const contractPath = path.join(targetDir, pathsMap.backend, "contract.version.json");
58
+ if (!fs.existsSync(sharedDir) || !fs.existsSync(contractPath))
59
+ return;
60
+ const currentHash = computeTypesHash(targetDir, sharedDir);
61
+ const contract = JSON.parse(fs.readFileSync(contractPath, "utf8"));
62
+ contract.contract_hash = currentHash;
63
+ contract.last_updated = new Date().toISOString();
64
+ fs.writeFileSync(contractPath, JSON.stringify(contract, null, 2));
65
+ }
66
+ export function createBaseTypeFiles(baseDir) {
67
+ const typesDir = path.join(baseDir, "types");
68
+ ensureDir(typesDir);
69
+ writeTextFile(path.join(typesDir, "api.ts"), `import { TraceID } from "./brands.js";
70
+
71
+ /**
72
+ * API Response Wrappers
73
+ */
74
+ export interface ApiResponse<T> {
75
+ data: T;
76
+ meta?: {
77
+ requestId: TraceID;
78
+ timestamp: string;
79
+ };
80
+ }
81
+
82
+ export interface ApiError {
83
+ error: {
84
+ code: string;
85
+ message: string;
86
+ details?: unknown;
87
+ };
88
+ }
89
+ `);
90
+ writeTextFile(path.join(typesDir, "brands.ts"), `/**
91
+ * Branded Type Utility
92
+ */
93
+ export type Brand<K, T> = K & { __brand: T };
94
+
95
+ /**
96
+ * Entity IDs (Branded)
97
+ */
98
+ export type TraceID = Brand<string, "TraceID">;
99
+ export type AgentID = Brand<string, "AgentID">;
100
+ export type ProjectID = Brand<string, "ProjectID">;
101
+ export type UserID = Brand<string, "UserID">;
102
+ `);
103
+ writeTextFile(path.join(typesDir, "constants.ts"), `import { TraceID } from "./brands.js";
104
+
105
+ /**
106
+ * Project Phases
107
+ */
108
+ export const PROJECT_PHASES = ["PHASE_0", "PHASE_1", "PHASE_2", "PHASE_3", "PHASE_4"] as const;
109
+ export type ProjectPhase = (typeof PROJECT_PHASES)[number];
110
+
111
+ /**
112
+ * Execution Profiles
113
+ */
114
+ export const EXECUTION_PROFILES = ["Lightweight", "Full"] as const;
115
+ export type ExecutionProfile = (typeof EXECUTION_PROFILES)[number];
116
+
117
+ /**
118
+ * Task Priorities
119
+ */
120
+ export const TASK_PRIORITIES = ["P0", "P1", "P2", "P3"] as const;
121
+ export type TaskPriority = (typeof TASK_PRIORITIES)[number];
122
+
123
+ /**
124
+ * Task Statuses
125
+ */
126
+ export const TASK_STATUSES = ["PENDING", "IN_PROGRESS", "BLOCKED", "COMPLETED", "FAILED"] as const;
127
+ export type TaskStatus = (typeof TASK_STATUSES)[number];
128
+
129
+ /**
130
+ * Action Types & Status
131
+ */
132
+ export const ACTION_TYPES = ["CREATE", "MODIFY", "DELETE", "RESEARCH", "ORCHESTRATE"] as const;
133
+ export type ActionType = (typeof ACTION_TYPES)[number];
134
+
135
+ export const ACTION_STATUSES = ["SUCCESS", "FAILURE", "WAITING"] as const;
136
+ export type ActionStatus = (typeof ACTION_STATUSES)[number];
137
+ `);
138
+ writeTextFile(path.join(typesDir, "index.ts"), `/**
139
+ * Agent Enderun — App-Local Types (Modular)
140
+ */
141
+
142
+ export * from "./brands.js";
143
+ export * from "./constants.js";
144
+ export * from "./models.js";
145
+ export * from "./api.js";
146
+ export * from "./logs.js";
147
+ `);
148
+ writeTextFile(path.join(typesDir, "logs.ts"), `import { TraceID, AgentID } from "./brands.js";
149
+ import { ActionType, ActionStatus } from "./constants.js";
150
+
151
+ /**
152
+ * Audit & Agent Logging Types
153
+ */
154
+ export interface AgentActionLog {
155
+ timestamp: string;
156
+ agent: AgentID;
157
+ action: ActionType;
158
+ requestId: TraceID | "—";
159
+ status: ActionStatus;
160
+ summary: string;
161
+ files?: string[];
162
+ details?: Record<string, unknown>;
163
+ }
164
+ `);
165
+ writeTextFile(path.join(typesDir, "models.ts"), `import { UserID, TraceID, AgentID } from "./brands.js";
166
+ import { ProjectPhase, ExecutionProfile, TaskPriority, TaskStatus } from "./constants.js";
167
+
168
+ /**
169
+ * Base Entity Fields
170
+ */
171
+ export interface BaseEntity {
172
+ id: string; // Usually ULID
173
+ createdAt: string;
174
+ updatedAt: string;
175
+ deletedAt?: string | null;
176
+ }
177
+
178
+ /**
179
+ * Audit Log Model
180
+ */
181
+ export interface AuditLog extends BaseEntity {
182
+ entityName: string;
183
+ entityId: string;
184
+ action: "CREATE" | "UPDATE" | "DELETE" | "RESTORE";
185
+ userId: UserID;
186
+ previousState?: Record<string, unknown> | null;
187
+ newState?: Record<string, unknown> | null;
188
+ traceId: TraceID;
189
+ }
190
+
191
+ /**
192
+ * User Model
193
+ */
194
+ export interface User extends BaseEntity {
195
+ id: UserID;
196
+ email: string;
197
+ fullName: string;
198
+ role: "ADMIN" | "DEVELOPER" | "VIEWER";
199
+ }
200
+
201
+ export interface UserProfile extends User {
202
+ avatarUrl?: string;
203
+ bio?: string;
204
+ preferences: Record<string, unknown>;
205
+ }
206
+
207
+ /**
208
+ * Project Status
209
+ */
210
+ export interface ProjectStatus {
211
+ phase: ProjectPhase;
212
+ profile: ExecutionProfile;
213
+ lastUpdate: string;
214
+ activeTraceId: TraceID | null;
215
+ blockers: string[];
216
+ }
217
+
218
+ /**
219
+ * Task Model
220
+ */
221
+ export interface Task {
222
+ id: TraceID;
223
+ description: string;
224
+ agent: AgentID;
225
+ priority: TaskPriority;
226
+ status: TaskStatus;
227
+ createdAt: string;
228
+ updatedAt: string;
229
+ }
230
+ `);
231
+ UI.success(`Base types created in ${path.relative(targetDir, typesDir)}`);
232
+ }
233
+ //# sourceMappingURL=app-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-types.js","sourceRoot":"","sources":["../../../../src/cli/utils/app-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAiB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAEhC,MAAM,UAAU,uBAAuB,CAAC,eAAuB;IAC3D,MAAM,MAAM,GAAG,2CAA2C,CAAC;IAC3D,MAAM,SAAS,GAAG;QACd,MAAM;QACN,iDAAiD;QACjD,qDAAqD;QACrD,yDAAyD;QACzD,EAAE;QACF,gCAAgC;QAChC,eAAe;QACf,kBAAkB;QAClB,sBAAsB;QACtB,GAAG;QACH,EAAE;QACF,yBAAyB;QACzB,eAAe;QACf,iBAAiB;QACjB,0BAA0B;QAC1B,GAAG;QACH,EAAE;QACF,6BAA6B;QAC7B,mBAAmB;QACnB,iBAAiB;QACjB,oBAAoB;QACpB,gDAAgD;QAChD,wBAAwB;QACxB,sBAAsB;QACtB,GAAG;QACH,EAAE;QACF,iCAAiC;QACjC,iBAAiB;QACjB,kBAAkB;QAClB,kBAAkB;QAClB,wCAAwC;QACxC,GAAG;QACH,EAAE;QACF,qCAAqC;QACrC,0BAA0B;QAC1B,kBAAkB;QAClB,kBAAkB;QAClB,4BAA4B;QAC5B,GAAG;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,eAAe,CAAC;IAC7D,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,SAAS,IAAI,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,sBAAsB;IAClC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACrF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO;IAEtE,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,aAAa,GAAG,WAAW,CAAC;IACrC,QAAQ,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEpB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;CAoBhD,CAAC,CAAC;IAEC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;;;;;;;;;;;;CAYnD,CAAC,CAAC;IAEC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCtD,CAAC,CAAC;IAEC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;;;;;;;;;CASlD,CAAC,CAAC;IAEC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;;;;;;;;;;;;;;;;CAgBjD,CAAC,CAAC;IAEC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEnD,CAAC,CAAC;IACC,EAAE,CAAC,OAAO,CAAC,yBAAyB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -1,32 +1,5 @@
1
- export declare function inferAppSpec(description: string): {
2
- rawDescription: string;
3
- appName: string;
4
- title: string;
5
- domain: string;
6
- modules: {
7
- auth: boolean;
8
- users: boolean;
9
- roles: boolean;
10
- reports: boolean;
11
- };
12
- };
13
- export declare function buildSharedTypesContent(existingContent: string): string;
14
- export declare function updateContractHashFile(): void;
15
- export declare function createBaseTypeFiles(baseDir: string): void;
16
- export interface AppSpec {
17
- rawDescription: string;
18
- appName: string;
19
- title: string;
20
- domain: string;
21
- modules: {
22
- auth: boolean;
23
- users: boolean;
24
- roles: boolean;
25
- reports: boolean;
26
- };
27
- }
28
- export declare function createBackendFiles(spec: AppSpec): void;
29
- export declare function createWebFiles(spec: AppSpec): void;
30
- export declare function updateProjectDocs(spec: AppSpec): void;
31
- export declare function updateMemoryForGeneratedApp(spec: AppSpec, traceId: string): void;
32
- export declare function collectCreateAppDescription(args: string[]): Promise<string>;
1
+ export * from "./app-inferrer.js";
2
+ export * from "./app-types.js";
3
+ export * from "./app-backend.js";
4
+ export * from "./app-frontend.js";
5
+ export * from "./app-docs.js";