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,243 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { ensureDir, writeTextFile, writeJsonFile, computeTypesHash } from "./fs.js";
4
+ import { getConfiguredPaths } from "./memory.js";
5
+ import { UI } from "./ui.js";
6
+
7
+ const targetDir = process.cwd();
8
+
9
+ export function buildSharedTypesContent(existingContent: string): string {
10
+ const marker = "// --- Generated Application Contract ---";
11
+ const generated = [
12
+ marker,
13
+ "export type RoleID = Brand<string, \"RoleID\">;",
14
+ "export type ReportID = Brand<string, \"ReportID\">;",
15
+ "export type CustomerID = Brand<string, \"CustomerID\">;",
16
+ "",
17
+ "export interface AuthSession {",
18
+ " user: User;",
19
+ " token: string;",
20
+ " expiresAt: string;",
21
+ "}",
22
+ "",
23
+ "export interface Role {",
24
+ " id: RoleID;",
25
+ " name: string;",
26
+ " permissions: string[];",
27
+ "}",
28
+ "",
29
+ "export interface Customer {",
30
+ " id: CustomerID;",
31
+ " name: string;",
32
+ " ownerId: UserID;",
33
+ " status: \"LEAD\" | \"ACTIVE\" | \"AT_RISK\";",
34
+ " annualValue: number;",
35
+ " createdAt: string;",
36
+ "}",
37
+ "",
38
+ "export interface ReportMetric {",
39
+ " id: ReportID;",
40
+ " label: string;",
41
+ " value: number;",
42
+ " trend: \"UP\" | \"DOWN\" | \"FLAT\";",
43
+ "}",
44
+ "",
45
+ "export interface DashboardSummary {",
46
+ " customers: Customer[];",
47
+ " users: User[];",
48
+ " roles: Role[];",
49
+ " reports: ReportMetric[];",
50
+ "}",
51
+ ].join("\n");
52
+
53
+ if (existingContent.includes(marker)) return existingContent;
54
+ return `${existingContent.trim()}\n\n${generated}\n`;
55
+ }
56
+
57
+ export function updateContractHashFile(): void {
58
+ const pathsMap = getConfiguredPaths();
59
+ const sharedDir = path.join(targetDir, pathsMap.backend, "src/types");
60
+ const contractPath = path.join(targetDir, pathsMap.backend, "contract.version.json");
61
+ if (!fs.existsSync(sharedDir) || !fs.existsSync(contractPath)) return;
62
+
63
+ const currentHash = computeTypesHash(targetDir, sharedDir);
64
+
65
+ const contract = JSON.parse(fs.readFileSync(contractPath, "utf8"));
66
+ contract.contract_hash = currentHash;
67
+ contract.last_updated = new Date().toISOString();
68
+ fs.writeFileSync(contractPath, JSON.stringify(contract, null, 2));
69
+ }
70
+
71
+ export function createBaseTypeFiles(baseDir: string): void {
72
+ const typesDir = path.join(baseDir, "types");
73
+ ensureDir(typesDir);
74
+
75
+ writeTextFile(path.join(typesDir, "api.ts"), `import { TraceID } from "./brands.js";
76
+
77
+ /**
78
+ * API Response Wrappers
79
+ */
80
+ export interface ApiResponse<T> {
81
+ data: T;
82
+ meta?: {
83
+ requestId: TraceID;
84
+ timestamp: string;
85
+ };
86
+ }
87
+
88
+ export interface ApiError {
89
+ error: {
90
+ code: string;
91
+ message: string;
92
+ details?: unknown;
93
+ };
94
+ }
95
+ `);
96
+
97
+ writeTextFile(path.join(typesDir, "brands.ts"), `/**
98
+ * Branded Type Utility
99
+ */
100
+ export type Brand<K, T> = K & { __brand: T };
101
+
102
+ /**
103
+ * Entity IDs (Branded)
104
+ */
105
+ export type TraceID = Brand<string, "TraceID">;
106
+ export type AgentID = Brand<string, "AgentID">;
107
+ export type ProjectID = Brand<string, "ProjectID">;
108
+ export type UserID = Brand<string, "UserID">;
109
+ `);
110
+
111
+ writeTextFile(path.join(typesDir, "constants.ts"), `import { TraceID } from "./brands.js";
112
+
113
+ /**
114
+ * Project Phases
115
+ */
116
+ export const PROJECT_PHASES = ["PHASE_0", "PHASE_1", "PHASE_2", "PHASE_3", "PHASE_4"] as const;
117
+ export type ProjectPhase = (typeof PROJECT_PHASES)[number];
118
+
119
+ /**
120
+ * Execution Profiles
121
+ */
122
+ export const EXECUTION_PROFILES = ["Lightweight", "Full"] as const;
123
+ export type ExecutionProfile = (typeof EXECUTION_PROFILES)[number];
124
+
125
+ /**
126
+ * Task Priorities
127
+ */
128
+ export const TASK_PRIORITIES = ["P0", "P1", "P2", "P3"] as const;
129
+ export type TaskPriority = (typeof TASK_PRIORITIES)[number];
130
+
131
+ /**
132
+ * Task Statuses
133
+ */
134
+ export const TASK_STATUSES = ["PENDING", "IN_PROGRESS", "BLOCKED", "COMPLETED", "FAILED"] as const;
135
+ export type TaskStatus = (typeof TASK_STATUSES)[number];
136
+
137
+ /**
138
+ * Action Types & Status
139
+ */
140
+ export const ACTION_TYPES = ["CREATE", "MODIFY", "DELETE", "RESEARCH", "ORCHESTRATE"] as const;
141
+ export type ActionType = (typeof ACTION_TYPES)[number];
142
+
143
+ export const ACTION_STATUSES = ["SUCCESS", "FAILURE", "WAITING"] as const;
144
+ export type ActionStatus = (typeof ACTION_STATUSES)[number];
145
+ `);
146
+
147
+ writeTextFile(path.join(typesDir, "index.ts"), `/**
148
+ * Agent Enderun — App-Local Types (Modular)
149
+ */
150
+
151
+ export * from "./brands.js";
152
+ export * from "./constants.js";
153
+ export * from "./models.js";
154
+ export * from "./api.js";
155
+ export * from "./logs.js";
156
+ `);
157
+
158
+ writeTextFile(path.join(typesDir, "logs.ts"), `import { TraceID, AgentID } from "./brands.js";
159
+ import { ActionType, ActionStatus } from "./constants.js";
160
+
161
+ /**
162
+ * Audit & Agent Logging Types
163
+ */
164
+ export interface AgentActionLog {
165
+ timestamp: string;
166
+ agent: AgentID;
167
+ action: ActionType;
168
+ requestId: TraceID | "—";
169
+ status: ActionStatus;
170
+ summary: string;
171
+ files?: string[];
172
+ details?: Record<string, unknown>;
173
+ }
174
+ `);
175
+
176
+ writeTextFile(path.join(typesDir, "models.ts"), `import { UserID, TraceID, AgentID } from "./brands.js";
177
+ import { ProjectPhase, ExecutionProfile, TaskPriority, TaskStatus } from "./constants.js";
178
+
179
+ /**
180
+ * Base Entity Fields
181
+ */
182
+ export interface BaseEntity {
183
+ id: string; // Usually ULID
184
+ createdAt: string;
185
+ updatedAt: string;
186
+ deletedAt?: string | null;
187
+ }
188
+
189
+ /**
190
+ * Audit Log Model
191
+ */
192
+ export interface AuditLog extends BaseEntity {
193
+ entityName: string;
194
+ entityId: string;
195
+ action: "CREATE" | "UPDATE" | "DELETE" | "RESTORE";
196
+ userId: UserID;
197
+ previousState?: Record<string, unknown> | null;
198
+ newState?: Record<string, unknown> | null;
199
+ traceId: TraceID;
200
+ }
201
+
202
+ /**
203
+ * User Model
204
+ */
205
+ export interface User extends BaseEntity {
206
+ id: UserID;
207
+ email: string;
208
+ fullName: string;
209
+ role: "ADMIN" | "DEVELOPER" | "VIEWER";
210
+ }
211
+
212
+ export interface UserProfile extends User {
213
+ avatarUrl?: string;
214
+ bio?: string;
215
+ preferences: Record<string, unknown>;
216
+ }
217
+
218
+ /**
219
+ * Project Status
220
+ */
221
+ export interface ProjectStatus {
222
+ phase: ProjectPhase;
223
+ profile: ExecutionProfile;
224
+ lastUpdate: string;
225
+ activeTraceId: TraceID | null;
226
+ blockers: string[];
227
+ }
228
+
229
+ /**
230
+ * Task Model
231
+ */
232
+ export interface Task {
233
+ id: TraceID;
234
+ description: string;
235
+ agent: AgentID;
236
+ priority: TaskPriority;
237
+ status: TaskStatus;
238
+ createdAt: string;
239
+ updatedAt: string;
240
+ }
241
+ `);
242
+ UI.success(`Base types created in ${path.relative(targetDir, typesDir)}`);
243
+ }