aspectcode 0.4.1 → 1.0.1

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 (248) hide show
  1. package/README.md +2 -2
  2. package/dist/agentsMdRenderer.d.ts +16 -0
  3. package/dist/agentsMdRenderer.d.ts.map +1 -0
  4. package/dist/agentsMdRenderer.js +137 -0
  5. package/dist/agentsMdRenderer.js.map +1 -0
  6. package/dist/auth.d.ts +31 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +386 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/autoResolve.d.ts +41 -0
  11. package/dist/autoResolve.d.ts.map +1 -0
  12. package/dist/autoResolve.js +196 -0
  13. package/dist/autoResolve.js.map +1 -0
  14. package/dist/changeEvaluator.d.ts +56 -0
  15. package/dist/changeEvaluator.d.ts.map +1 -0
  16. package/dist/changeEvaluator.js +674 -0
  17. package/dist/changeEvaluator.js.map +1 -0
  18. package/dist/cli.d.ts +3 -1
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +1 -1
  21. package/dist/cli.js.map +1 -1
  22. package/dist/config.d.ts +37 -17
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js +50 -2
  25. package/dist/config.js.map +1 -1
  26. package/dist/dreamCycle.d.ts +57 -0
  27. package/dist/dreamCycle.d.ts.map +1 -0
  28. package/dist/dreamCycle.js +334 -0
  29. package/dist/dreamCycle.js.map +1 -0
  30. package/dist/kbBuilder.d.ts +1 -2
  31. package/dist/kbBuilder.d.ts.map +1 -1
  32. package/dist/kbBuilder.js +1 -2
  33. package/dist/kbBuilder.js.map +1 -1
  34. package/dist/main.d.ts +2 -1
  35. package/dist/main.d.ts.map +1 -1
  36. package/dist/main.js +148 -7
  37. package/dist/main.js.map +1 -1
  38. package/dist/optimize.d.ts +13 -6
  39. package/dist/optimize.d.ts.map +1 -1
  40. package/dist/optimize.js +433 -142
  41. package/dist/optimize.js.map +1 -1
  42. package/dist/pipeline.d.ts +19 -21
  43. package/dist/pipeline.d.ts.map +1 -1
  44. package/dist/pipeline.js +1093 -160
  45. package/dist/pipeline.js.map +1 -1
  46. package/dist/preferences.d.ts +80 -0
  47. package/dist/preferences.d.ts.map +1 -0
  48. package/dist/preferences.js +238 -0
  49. package/dist/preferences.js.map +1 -0
  50. package/dist/runtimeState.d.ts +30 -0
  51. package/dist/runtimeState.d.ts.map +1 -0
  52. package/dist/runtimeState.js +39 -0
  53. package/dist/runtimeState.js.map +1 -0
  54. package/dist/scopedRules.d.ts +84 -0
  55. package/dist/scopedRules.d.ts.map +1 -0
  56. package/dist/scopedRules.js +449 -0
  57. package/dist/scopedRules.js.map +1 -0
  58. package/dist/ui/Dashboard.d.ts +4 -16
  59. package/dist/ui/Dashboard.d.ts.map +1 -1
  60. package/dist/ui/Dashboard.js +339 -140
  61. package/dist/ui/Dashboard.js.map +1 -1
  62. package/dist/ui/MemoryMap.d.ts +16 -0
  63. package/dist/ui/MemoryMap.d.ts.map +1 -0
  64. package/dist/ui/MemoryMap.js +266 -0
  65. package/dist/ui/MemoryMap.js.map +1 -0
  66. package/dist/ui/SettingsPanel.d.ts +18 -0
  67. package/dist/ui/SettingsPanel.d.ts.map +1 -0
  68. package/dist/ui/SettingsPanel.js +241 -0
  69. package/dist/ui/SettingsPanel.js.map +1 -0
  70. package/dist/ui/prompts.d.ts +7 -0
  71. package/dist/ui/prompts.d.ts.map +1 -1
  72. package/dist/ui/prompts.js +63 -0
  73. package/dist/ui/prompts.js.map +1 -1
  74. package/dist/ui/store.d.ts +154 -18
  75. package/dist/ui/store.d.ts.map +1 -1
  76. package/dist/ui/store.js +154 -24
  77. package/dist/ui/store.js.map +1 -1
  78. package/dist/ui/theme.d.ts +1 -8
  79. package/dist/ui/theme.d.ts.map +1 -1
  80. package/dist/ui/theme.js +2 -21
  81. package/dist/ui/theme.js.map +1 -1
  82. package/dist/updateChecker.d.ts +13 -0
  83. package/dist/updateChecker.d.ts.map +1 -0
  84. package/dist/updateChecker.js +66 -0
  85. package/dist/updateChecker.js.map +1 -0
  86. package/dist/usageTracker.d.ts +12 -0
  87. package/dist/usageTracker.d.ts.map +1 -0
  88. package/dist/usageTracker.js +89 -0
  89. package/dist/usageTracker.js.map +1 -0
  90. package/dist/writer.d.ts +1 -7
  91. package/dist/writer.d.ts.map +1 -1
  92. package/dist/writer.js +1 -11
  93. package/dist/writer.js.map +1 -1
  94. package/node_modules/@aspectcode/core/dist/analysis/repo.d.ts.map +1 -1
  95. package/node_modules/@aspectcode/core/dist/analysis/repo.js +13 -2
  96. package/node_modules/@aspectcode/core/dist/analysis/repo.js.map +1 -1
  97. package/node_modules/@aspectcode/core/dist/index.d.ts +1 -3
  98. package/node_modules/@aspectcode/core/dist/index.d.ts.map +1 -1
  99. package/node_modules/@aspectcode/core/dist/index.js +1 -3
  100. package/node_modules/@aspectcode/core/dist/index.js.map +1 -1
  101. package/node_modules/@aspectcode/core/dist/parsers/genericExtractors.d.ts +14 -0
  102. package/node_modules/@aspectcode/core/dist/parsers/genericExtractors.d.ts.map +1 -0
  103. package/node_modules/@aspectcode/core/dist/parsers/genericExtractors.js +191 -0
  104. package/node_modules/@aspectcode/core/dist/parsers/genericExtractors.js.map +1 -0
  105. package/node_modules/@aspectcode/core/dist/parsers/index.d.ts +1 -0
  106. package/node_modules/@aspectcode/core/dist/parsers/index.d.ts.map +1 -1
  107. package/node_modules/@aspectcode/core/dist/parsers/index.js +6 -1
  108. package/node_modules/@aspectcode/core/dist/parsers/index.js.map +1 -1
  109. package/node_modules/@aspectcode/core/dist/parsers/languages.d.ts +20 -0
  110. package/node_modules/@aspectcode/core/dist/parsers/languages.d.ts.map +1 -1
  111. package/node_modules/@aspectcode/core/dist/parsers/languages.js +25 -0
  112. package/node_modules/@aspectcode/core/dist/parsers/languages.js.map +1 -1
  113. package/node_modules/@aspectcode/core/dist/parsers/tsJsExtractors.d.ts.map +1 -1
  114. package/node_modules/@aspectcode/core/dist/parsers/tsJsExtractors.js +4 -1
  115. package/node_modules/@aspectcode/core/dist/parsers/tsJsExtractors.js.map +1 -1
  116. package/node_modules/@aspectcode/core/package.json +2 -2
  117. package/node_modules/@aspectcode/core/parsers/cpp.wasm +0 -0
  118. package/node_modules/@aspectcode/core/parsers/go.wasm +0 -0
  119. package/node_modules/@aspectcode/core/parsers/php.wasm +0 -0
  120. package/node_modules/@aspectcode/core/parsers/ruby.wasm +0 -0
  121. package/node_modules/@aspectcode/core/parsers/rust.wasm +0 -0
  122. package/node_modules/@aspectcode/emitters/dist/index.d.ts +1 -17
  123. package/node_modules/@aspectcode/emitters/dist/index.d.ts.map +1 -1
  124. package/node_modules/@aspectcode/emitters/dist/index.js +2 -90
  125. package/node_modules/@aspectcode/emitters/dist/index.js.map +1 -1
  126. package/node_modules/@aspectcode/emitters/dist/instructions/index.d.ts +0 -2
  127. package/node_modules/@aspectcode/emitters/dist/instructions/index.d.ts.map +1 -1
  128. package/node_modules/@aspectcode/emitters/dist/instructions/index.js +1 -7
  129. package/node_modules/@aspectcode/emitters/dist/instructions/index.js.map +1 -1
  130. package/node_modules/@aspectcode/emitters/dist/kb/analyzers.d.ts +0 -18
  131. package/node_modules/@aspectcode/emitters/dist/kb/analyzers.d.ts.map +1 -1
  132. package/node_modules/@aspectcode/emitters/dist/kb/analyzers.js +0 -57
  133. package/node_modules/@aspectcode/emitters/dist/kb/analyzers.js.map +1 -1
  134. package/node_modules/@aspectcode/emitters/dist/kb/conventions.d.ts +0 -18
  135. package/node_modules/@aspectcode/emitters/dist/kb/conventions.d.ts.map +1 -1
  136. package/node_modules/@aspectcode/emitters/dist/kb/conventions.js +0 -130
  137. package/node_modules/@aspectcode/emitters/dist/kb/conventions.js.map +1 -1
  138. package/node_modules/@aspectcode/emitters/dist/kb/index.d.ts +2 -4
  139. package/node_modules/@aspectcode/emitters/dist/kb/index.d.ts.map +1 -1
  140. package/node_modules/@aspectcode/emitters/dist/kb/index.js +1 -11
  141. package/node_modules/@aspectcode/emitters/dist/kb/index.js.map +1 -1
  142. package/node_modules/@aspectcode/emitters/package.json +3 -3
  143. package/node_modules/@aspectcode/evaluator/dist/apply.d.ts +55 -0
  144. package/node_modules/@aspectcode/evaluator/dist/apply.d.ts.map +1 -0
  145. package/node_modules/@aspectcode/evaluator/dist/apply.js +368 -0
  146. package/node_modules/@aspectcode/evaluator/dist/apply.js.map +1 -0
  147. package/node_modules/@aspectcode/evaluator/dist/diagnosis.d.ts +16 -25
  148. package/node_modules/@aspectcode/evaluator/dist/diagnosis.d.ts.map +1 -1
  149. package/node_modules/@aspectcode/evaluator/dist/diagnosis.js +115 -138
  150. package/node_modules/@aspectcode/evaluator/dist/diagnosis.js.map +1 -1
  151. package/node_modules/@aspectcode/evaluator/dist/index.d.ts +8 -43
  152. package/node_modules/@aspectcode/evaluator/dist/index.d.ts.map +1 -1
  153. package/node_modules/@aspectcode/evaluator/dist/index.js +15 -61
  154. package/node_modules/@aspectcode/evaluator/dist/index.js.map +1 -1
  155. package/node_modules/@aspectcode/evaluator/dist/judge.d.ts +32 -0
  156. package/node_modules/@aspectcode/evaluator/dist/judge.d.ts.map +1 -0
  157. package/node_modules/@aspectcode/evaluator/dist/judge.js +165 -0
  158. package/node_modules/@aspectcode/evaluator/dist/judge.js.map +1 -0
  159. package/node_modules/@aspectcode/evaluator/dist/llmUtil.d.ts +15 -0
  160. package/node_modules/@aspectcode/evaluator/dist/llmUtil.d.ts.map +1 -0
  161. package/node_modules/@aspectcode/evaluator/dist/llmUtil.js +41 -0
  162. package/node_modules/@aspectcode/evaluator/dist/llmUtil.js.map +1 -0
  163. package/node_modules/@aspectcode/evaluator/dist/probes.d.ts +20 -47
  164. package/node_modules/@aspectcode/evaluator/dist/probes.d.ts.map +1 -1
  165. package/node_modules/@aspectcode/evaluator/dist/probes.js +188 -278
  166. package/node_modules/@aspectcode/evaluator/dist/probes.js.map +1 -1
  167. package/node_modules/@aspectcode/evaluator/dist/runner.d.ts +7 -32
  168. package/node_modules/@aspectcode/evaluator/dist/runner.d.ts.map +1 -1
  169. package/node_modules/@aspectcode/evaluator/dist/runner.js +21 -146
  170. package/node_modules/@aspectcode/evaluator/dist/runner.js.map +1 -1
  171. package/node_modules/@aspectcode/evaluator/dist/types.d.ts +141 -99
  172. package/node_modules/@aspectcode/evaluator/dist/types.d.ts.map +1 -1
  173. package/node_modules/@aspectcode/evaluator/dist/types.js +10 -2
  174. package/node_modules/@aspectcode/evaluator/dist/types.js.map +1 -1
  175. package/node_modules/@aspectcode/evaluator/package.json +4 -4
  176. package/node_modules/@aspectcode/optimizer/dist/index.d.ts +3 -10
  177. package/node_modules/@aspectcode/optimizer/dist/index.d.ts.map +1 -1
  178. package/node_modules/@aspectcode/optimizer/dist/index.js +1 -19
  179. package/node_modules/@aspectcode/optimizer/dist/index.js.map +1 -1
  180. package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.d.ts.map +1 -1
  181. package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js +40 -0
  182. package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js.map +1 -1
  183. package/node_modules/@aspectcode/optimizer/dist/providers/aspectcode.d.ts +9 -0
  184. package/node_modules/@aspectcode/optimizer/dist/providers/aspectcode.d.ts.map +1 -0
  185. package/node_modules/@aspectcode/optimizer/dist/providers/aspectcode.js +83 -0
  186. package/node_modules/@aspectcode/optimizer/dist/providers/aspectcode.js.map +1 -0
  187. package/node_modules/@aspectcode/optimizer/dist/providers/index.d.ts +4 -3
  188. package/node_modules/@aspectcode/optimizer/dist/providers/index.d.ts.map +1 -1
  189. package/node_modules/@aspectcode/optimizer/dist/providers/index.js +24 -10
  190. package/node_modules/@aspectcode/optimizer/dist/providers/index.js.map +1 -1
  191. package/node_modules/@aspectcode/optimizer/dist/providers/openai.d.ts.map +1 -1
  192. package/node_modules/@aspectcode/optimizer/dist/providers/openai.js +22 -0
  193. package/node_modules/@aspectcode/optimizer/dist/providers/openai.js.map +1 -1
  194. package/node_modules/@aspectcode/optimizer/dist/providers/retry.d.ts +14 -0
  195. package/node_modules/@aspectcode/optimizer/dist/providers/retry.d.ts.map +1 -1
  196. package/node_modules/@aspectcode/optimizer/dist/providers/retry.js +1 -0
  197. package/node_modules/@aspectcode/optimizer/dist/providers/retry.js.map +1 -1
  198. package/node_modules/@aspectcode/optimizer/dist/types.d.ts +14 -0
  199. package/node_modules/@aspectcode/optimizer/dist/types.d.ts.map +1 -1
  200. package/node_modules/@aspectcode/optimizer/dist/types.js.map +1 -1
  201. package/node_modules/@aspectcode/optimizer/package.json +2 -2
  202. package/node_modules/web-tree-sitter/LICENSE +21 -0
  203. package/node_modules/web-tree-sitter/README.md +198 -0
  204. package/node_modules/web-tree-sitter/package.json +36 -0
  205. package/node_modules/web-tree-sitter/tree-sitter-web.d.ts +204 -0
  206. package/node_modules/web-tree-sitter/tree-sitter.js +1 -0
  207. package/node_modules/web-tree-sitter/tree-sitter.wasm +0 -0
  208. package/package.json +8 -8
  209. package/dist/complaintProcessor.d.ts +0 -16
  210. package/dist/complaintProcessor.d.ts.map +0 -1
  211. package/dist/complaintProcessor.js +0 -134
  212. package/dist/complaintProcessor.js.map +0 -1
  213. package/node_modules/@aspectcode/emitters/dist/emitter.d.ts +0 -72
  214. package/node_modules/@aspectcode/emitters/dist/emitter.d.ts.map +0 -1
  215. package/node_modules/@aspectcode/emitters/dist/emitter.js +0 -10
  216. package/node_modules/@aspectcode/emitters/dist/emitter.js.map +0 -1
  217. package/node_modules/@aspectcode/emitters/dist/instructions/content.d.ts +0 -26
  218. package/node_modules/@aspectcode/emitters/dist/instructions/content.d.ts.map +0 -1
  219. package/node_modules/@aspectcode/emitters/dist/instructions/content.js +0 -501
  220. package/node_modules/@aspectcode/emitters/dist/instructions/content.js.map +0 -1
  221. package/node_modules/@aspectcode/emitters/dist/instructions/detection.d.ts +0 -13
  222. package/node_modules/@aspectcode/emitters/dist/instructions/detection.d.ts.map +0 -1
  223. package/node_modules/@aspectcode/emitters/dist/instructions/detection.js +0 -55
  224. package/node_modules/@aspectcode/emitters/dist/instructions/detection.js.map +0 -1
  225. package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.d.ts +0 -9
  226. package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.d.ts.map +0 -1
  227. package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.js +0 -30
  228. package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.js.map +0 -1
  229. package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.d.ts +0 -21
  230. package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.d.ts.map +0 -1
  231. package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.js +0 -125
  232. package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.js.map +0 -1
  233. package/node_modules/@aspectcode/emitters/dist/manifest.d.ts +0 -37
  234. package/node_modules/@aspectcode/emitters/dist/manifest.d.ts.map +0 -1
  235. package/node_modules/@aspectcode/emitters/dist/manifest.js +0 -50
  236. package/node_modules/@aspectcode/emitters/dist/manifest.js.map +0 -1
  237. package/node_modules/@aspectcode/emitters/dist/report.d.ts +0 -22
  238. package/node_modules/@aspectcode/emitters/dist/report.d.ts.map +0 -1
  239. package/node_modules/@aspectcode/emitters/dist/report.js +0 -3
  240. package/node_modules/@aspectcode/emitters/dist/report.js.map +0 -1
  241. package/node_modules/@aspectcode/emitters/dist/stableJson.d.ts +0 -14
  242. package/node_modules/@aspectcode/emitters/dist/stableJson.d.ts.map +0 -1
  243. package/node_modules/@aspectcode/emitters/dist/stableJson.js +0 -40
  244. package/node_modules/@aspectcode/emitters/dist/stableJson.js.map +0 -1
  245. package/node_modules/@aspectcode/emitters/dist/transaction.d.ts +0 -29
  246. package/node_modules/@aspectcode/emitters/dist/transaction.d.ts.map +0 -1
  247. package/node_modules/@aspectcode/emitters/dist/transaction.js +0 -104
  248. package/node_modules/@aspectcode/emitters/dist/transaction.js.map +0 -1
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Scoped rule generation — deterministic, analysis-driven rules for
3
+ * Claude Code, Cursor, and Copilot.
4
+ *
5
+ * Extracts path-specific guidance from the AnalysisModel and writes
6
+ * platform-specific rule files. AGENTS.md stays broad; scoped rules
7
+ * activate only when relevant files are touched.
8
+ */
9
+ import type { AnalysisModel } from '@aspectcode/core';
10
+ import type { EmitterHost } from '@aspectcode/emitters';
11
+ import type { AiToolId } from '@aspectcode/emitters';
12
+ export interface ScopedRule {
13
+ /** Unique slug for file naming, e.g. "src-core" */
14
+ slug: string;
15
+ /** Human-readable description for frontmatter */
16
+ description: string;
17
+ /** Glob patterns this rule applies to */
18
+ globs: string[];
19
+ /** Markdown body (no frontmatter) */
20
+ content: string;
21
+ /** Which extractor generated this */
22
+ source: 'hub' | 'convention' | 'circular-dep' | 'dream' | 'probe';
23
+ }
24
+ export interface ManifestEntry {
25
+ slug: string;
26
+ platform: string;
27
+ path: string;
28
+ hash: string;
29
+ source: ScopedRule['source'] | 'probe';
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ }
33
+ /**
34
+ * Extract all scoped rules from the analysis model.
35
+ */
36
+ export declare function extractScopedRules(model: AnalysisModel): ScopedRule[];
37
+ /**
38
+ * Hub directory rules — for directories containing high-connectivity files.
39
+ */
40
+ export declare function extractHubRules(model: AnalysisModel): ScopedRule[];
41
+ /**
42
+ * Convention cluster rules — for directories with naming patterns
43
+ * that differ from the repo-wide dominant.
44
+ */
45
+ export declare function extractConventionRules(model: AnalysisModel): ScopedRule[];
46
+ /**
47
+ * Circular dependency zone rules — for directories involved in cycles.
48
+ */
49
+ export declare function extractCircularDepRules(model: AnalysisModel): ScopedRule[];
50
+ export declare function serializeForClaudeCode(rule: ScopedRule): {
51
+ path: string;
52
+ content: string;
53
+ };
54
+ export declare function serializeForCursor(rule: ScopedRule): {
55
+ path: string;
56
+ content: string;
57
+ };
58
+ /**
59
+ * Resolve the active platform. Returns null if ambiguous (needs survey).
60
+ * Priority: flag → config → auto-detect (single match) → null.
61
+ */
62
+ export declare function resolvePlatform(host: EmitterHost, root: string, flagPlatform?: string, configPlatform?: string): Promise<AiToolId | null>;
63
+ /** Map AiToolId back to user-facing name. */
64
+ export declare function platformLabel(id: AiToolId | null): string;
65
+ /**
66
+ * Write scoped rules for a single platform. Manages manifest
67
+ * to track owned files and clean up stale ones.
68
+ */
69
+ export declare function writeScopedRules(host: EmitterHost, root: string, rules: ScopedRule[], platform: AiToolId): Promise<string[]>;
70
+ /**
71
+ * Delete scoped rules by slug. Removes files and updates manifest.
72
+ */
73
+ export declare function deleteScopedRules(host: EmitterHost, root: string, slugs: string[]): Promise<void>;
74
+ /**
75
+ * Write a single instruction file for platforms that don't support scoped rules.
76
+ * Concatenates all rules into one markdown file.
77
+ */
78
+ export declare function writeSingleInstructionFile(host: EmitterHost, root: string, rules: ScopedRule[], platformId: string): Promise<string | null>;
79
+ /**
80
+ * Write rules for all selected platforms. Handles both scoped (Claude/Cursor)
81
+ * and single-file (Copilot/Windsurf/Cline/Gemini/Aider) platforms.
82
+ */
83
+ export declare function writeRulesForPlatforms(host: EmitterHost, root: string, rules: ScopedRule[], platforms: string[]): Promise<string[]>;
84
+ //# sourceMappingURL=scopedRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopedRules.d.ts","sourceRoot":"","sources":["../src/scopedRules.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC;CACnE;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,CAMrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,CAmDlE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,CA4DzE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,CAuC1E;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAI1F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAItF;AAUD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA2B1B;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAIzD;AAID;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EAAE,EACnB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CA6CnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,IAAI,CAAC,CAcf;AAYD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBxB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB"}
@@ -0,0 +1,449 @@
1
+ "use strict";
2
+ /**
3
+ * Scoped rule generation — deterministic, analysis-driven rules for
4
+ * Claude Code, Cursor, and Copilot.
5
+ *
6
+ * Extracts path-specific guidance from the AnalysisModel and writes
7
+ * platform-specific rule files. AGENTS.md stays broad; scoped rules
8
+ * activate only when relevant files are touched.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.extractScopedRules = extractScopedRules;
45
+ exports.extractHubRules = extractHubRules;
46
+ exports.extractConventionRules = extractConventionRules;
47
+ exports.extractCircularDepRules = extractCircularDepRules;
48
+ exports.serializeForClaudeCode = serializeForClaudeCode;
49
+ exports.serializeForCursor = serializeForCursor;
50
+ exports.resolvePlatform = resolvePlatform;
51
+ exports.platformLabel = platformLabel;
52
+ exports.writeScopedRules = writeScopedRules;
53
+ exports.deleteScopedRules = deleteScopedRules;
54
+ exports.writeSingleInstructionFile = writeSingleInstructionFile;
55
+ exports.writeRulesForPlatforms = writeRulesForPlatforms;
56
+ const crypto = __importStar(require("crypto"));
57
+ const path = __importStar(require("path"));
58
+ const emitters_1 = require("@aspectcode/emitters");
59
+ // ── Supported platforms ──────────────────────────────────────
60
+ const SUPPORTED_PLATFORMS = ['claudeCode', 'cursor', 'copilot'];
61
+ // ── Extractors ───────────────────────────────────────────────
62
+ /**
63
+ * Extract all scoped rules from the analysis model.
64
+ */
65
+ function extractScopedRules(model) {
66
+ return [
67
+ ...extractHubRules(model),
68
+ ...extractConventionRules(model),
69
+ ...extractCircularDepRules(model),
70
+ ];
71
+ }
72
+ /**
73
+ * Hub directory rules — for directories containing high-connectivity files.
74
+ */
75
+ function extractHubRules(model) {
76
+ const hubs = model.metrics.hubs.filter((h) => h.inDegree >= 3);
77
+ if (hubs.length === 0)
78
+ return [];
79
+ // Group hubs by directory
80
+ const dirHubs = new Map();
81
+ for (const hub of hubs) {
82
+ const dir = path.posix.dirname(hub.file);
83
+ const existing = dirHubs.get(dir) ?? [];
84
+ existing.push(hub);
85
+ dirHubs.set(dir, existing);
86
+ }
87
+ const rules = [];
88
+ for (const [dir, hubsInDir] of dirHubs) {
89
+ // Find top dependents across all hubs in this directory
90
+ const dependents = new Set();
91
+ for (const hub of hubsInDir) {
92
+ for (const edge of model.graph.edges) {
93
+ if (edge.target === hub.file && edge.source !== hub.file) {
94
+ dependents.add(edge.source);
95
+ }
96
+ }
97
+ }
98
+ const hubList = hubsInDir
99
+ .sort((a, b) => b.inDegree - a.inDegree)
100
+ .map((h) => `\`${path.posix.basename(h.file)}\` (${h.inDegree} dependents)`)
101
+ .join(', ');
102
+ const topDeps = [...dependents].slice(0, 5).map((d) => `\`${d}\``).join(', ');
103
+ const slug = dirToSlug(dir);
104
+ rules.push({
105
+ slug: `hub-${slug}`,
106
+ description: `High-impact hub files in ${dir}/`,
107
+ globs: [`${dir}/**`],
108
+ content: [
109
+ `## High-Impact Hubs`,
110
+ ``,
111
+ `This directory contains hub files with many dependents: ${hubList}.`,
112
+ ``,
113
+ `- Read the hub file and trace callers before editing.`,
114
+ `- Changes here ripple widely. Verify dependent files after modifications.`,
115
+ ...(topDeps ? [`- Key dependents: ${topDeps}`] : []),
116
+ ].join('\n') + '\n',
117
+ source: 'hub',
118
+ });
119
+ }
120
+ return rules;
121
+ }
122
+ /**
123
+ * Convention cluster rules — for directories with naming patterns
124
+ * that differ from the repo-wide dominant.
125
+ */
126
+ function extractConventionRules(model) {
127
+ // Determine repo-wide dominant naming pattern
128
+ const allFiles = model.files.map((f) => f.relativePath);
129
+ const repoDominant = detectDominantNaming(allFiles);
130
+ // Group files by directory
131
+ const dirFiles = new Map();
132
+ for (const file of model.files) {
133
+ const dir = path.posix.dirname(file.relativePath);
134
+ const existing = dirFiles.get(dir) ?? [];
135
+ existing.push(file.relativePath);
136
+ dirFiles.set(dir, existing);
137
+ }
138
+ const rules = [];
139
+ const ruledDirs = new Set();
140
+ // Sort directories by depth (shallowest first) to skip children with same convention
141
+ const sortedDirs = [...dirFiles.entries()].sort((a, b) => {
142
+ const depthA = a[0].split('/').length;
143
+ const depthB = b[0].split('/').length;
144
+ return depthA - depthB;
145
+ });
146
+ for (const [dir, files] of sortedDirs) {
147
+ if (files.length < 2)
148
+ continue; // need at least 2 files to detect a pattern
149
+ const dirDominant = detectDominantNaming(files);
150
+ if (!dirDominant || dirDominant === repoDominant)
151
+ continue;
152
+ // Skip if parent directory already has a rule with the same convention
153
+ const parentHasRule = [...ruledDirs].some((ruled) => dir.startsWith(ruled + '/'));
154
+ if (parentHasRule)
155
+ continue;
156
+ // Check for test co-location
157
+ const hasTests = files.some((f) => {
158
+ const base = path.posix.basename(f).toLowerCase();
159
+ return /\.(test|spec)\.[^.]+$/.test(base);
160
+ });
161
+ const lines = [`## Directory Conventions`, ``];
162
+ lines.push(`- Files in this directory use **${dirDominant}** naming.`);
163
+ if (hasTests) {
164
+ lines.push(`- Tests are co-located alongside source files.`);
165
+ }
166
+ const slug = dirToSlug(dir);
167
+ rules.push({
168
+ slug: `conv-${slug}`,
169
+ description: `Naming conventions for ${dir}/`,
170
+ globs: [`${dir}/**`],
171
+ content: lines.join('\n') + '\n',
172
+ source: 'convention',
173
+ });
174
+ ruledDirs.add(dir);
175
+ }
176
+ return rules;
177
+ }
178
+ /**
179
+ * Circular dependency zone rules — for directories involved in cycles.
180
+ */
181
+ function extractCircularDepRules(model) {
182
+ const circularEdges = model.graph.edges.filter((e) => e.type === 'circular');
183
+ if (circularEdges.length === 0)
184
+ return [];
185
+ // Group by directory of source file
186
+ const dirCycles = new Map();
187
+ for (const edge of circularEdges) {
188
+ const dir = path.posix.dirname(edge.source);
189
+ const existing = dirCycles.get(dir) ?? new Set();
190
+ existing.add(edge.source);
191
+ existing.add(edge.target);
192
+ dirCycles.set(dir, existing);
193
+ }
194
+ const rules = [];
195
+ for (const [dir, involvedFiles] of dirCycles) {
196
+ const fileList = [...involvedFiles]
197
+ .map((f) => `\`${f}\``)
198
+ .join(', ');
199
+ const slug = dirToSlug(dir);
200
+ rules.push({
201
+ slug: `circular-${slug}`,
202
+ description: `Circular dependency warning for ${dir}/`,
203
+ globs: [`${dir}/**`],
204
+ content: [
205
+ `## Circular Dependencies`,
206
+ ``,
207
+ `This directory has circular import chains involving: ${fileList}.`,
208
+ ``,
209
+ `- Avoid adding new imports between these files.`,
210
+ `- When modifying, check if the change deepens the cycle.`,
211
+ `- Consider extracting shared types to break the cycle.`,
212
+ ].join('\n') + '\n',
213
+ source: 'circular-dep',
214
+ });
215
+ }
216
+ return rules;
217
+ }
218
+ // ── Platform serializers ─────────────────────────────────────
219
+ function serializeForClaudeCode(rule) {
220
+ const globs = rule.globs.map((g) => ` - "${g}"`).join('\n');
221
+ const content = `---\ndescription: "${escapeYaml(rule.description)}"\nglobs:\n${globs}\n---\n\n${rule.content}`;
222
+ return { path: `.claude/rules/ac-${rule.slug}.md`, content };
223
+ }
224
+ function serializeForCursor(rule) {
225
+ const globs = rule.globs.map((g) => ` - "${g}"`).join('\n');
226
+ const content = `---\ndescription: "${escapeYaml(rule.description)}"\nglobs:\n${globs}\nalwaysApply: false\n---\n\n${rule.content}`;
227
+ return { path: `.cursor/rules/ac-${rule.slug}.mdc`, content };
228
+ }
229
+ // ── Platform resolution ──────────────────────────────────────
230
+ /** User-facing platform names mapped to internal AiToolId. */
231
+ const PLATFORM_MAP = {
232
+ claude: 'claudeCode',
233
+ cursor: 'cursor',
234
+ };
235
+ /**
236
+ * Resolve the active platform. Returns null if ambiguous (needs survey).
237
+ * Priority: flag → config → auto-detect (single match) → null.
238
+ */
239
+ async function resolvePlatform(host, root, flagPlatform, configPlatform) {
240
+ // 1. CLI flag
241
+ if (flagPlatform) {
242
+ const mapped = PLATFORM_MAP[flagPlatform];
243
+ if (mapped)
244
+ return mapped;
245
+ }
246
+ // 2. Config
247
+ if (configPlatform) {
248
+ const mapped = PLATFORM_MAP[configPlatform];
249
+ if (mapped)
250
+ return mapped;
251
+ }
252
+ // 3. Auto-detect from filesystem
253
+ const detected = [];
254
+ for (const entry of emitters_1.AI_TOOL_DETECTION_PATHS) {
255
+ if (!SUPPORTED_PLATFORMS.includes(entry.id))
256
+ continue;
257
+ for (const p of entry.paths) {
258
+ if (await host.exists(host.join(root, p))) {
259
+ detected.push(entry.id);
260
+ break;
261
+ }
262
+ }
263
+ }
264
+ if (detected.length === 1)
265
+ return detected[0];
266
+ return null; // ambiguous or none — caller should survey
267
+ }
268
+ /** Map AiToolId back to user-facing name. */
269
+ function platformLabel(id) {
270
+ if (id === 'claudeCode')
271
+ return 'claude';
272
+ if (id === 'cursor')
273
+ return 'cursor';
274
+ return '';
275
+ }
276
+ // ── Writer ───────────────────────────────────────────────────
277
+ /**
278
+ * Write scoped rules for a single platform. Manages manifest
279
+ * to track owned files and clean up stale ones.
280
+ */
281
+ async function writeScopedRules(host, root, rules, platform) {
282
+ const manifest = await loadManifest(host, root);
283
+ const oldBySlug = new Map(manifest.rules.map((e) => [e.slug, e]));
284
+ const newEntries = [];
285
+ const written = [];
286
+ const now = new Date().toISOString();
287
+ for (const rule of rules) {
288
+ const serialized = platform === 'claudeCode'
289
+ ? serializeForClaudeCode(rule)
290
+ : serializeForCursor(rule);
291
+ const absPath = host.join(root, serialized.path);
292
+ const dir = host.join(root, path.posix.dirname(serialized.path));
293
+ await host.mkdirp(dir);
294
+ await host.writeFile(absPath, serialized.content);
295
+ const hash = crypto.createHash('md5').update(serialized.content).digest('hex').slice(0, 8);
296
+ const old = oldBySlug.get(rule.slug);
297
+ const contentChanged = !old || old.hash !== hash;
298
+ newEntries.push({
299
+ slug: rule.slug,
300
+ platform,
301
+ path: serialized.path,
302
+ hash,
303
+ source: rule.source,
304
+ createdAt: old?.createdAt ?? now,
305
+ updatedAt: contentChanged ? now : (old?.updatedAt ?? now),
306
+ });
307
+ written.push(serialized.path);
308
+ }
309
+ // Clean up stale files (in old manifest but not in new)
310
+ const newPaths = new Set(newEntries.map((e) => e.path));
311
+ for (const old of manifest.rules) {
312
+ if (!newPaths.has(old.path)) {
313
+ try {
314
+ await host.rmrf(host.join(root, old.path));
315
+ }
316
+ catch { /* file may already be gone */ }
317
+ }
318
+ }
319
+ await saveManifest(host, root, { version: 1, rules: newEntries });
320
+ return written;
321
+ }
322
+ /**
323
+ * Delete scoped rules by slug. Removes files and updates manifest.
324
+ */
325
+ async function deleteScopedRules(host, root, slugs) {
326
+ const manifest = await loadManifest(host, root);
327
+ const slugSet = new Set(slugs);
328
+ for (const entry of manifest.rules) {
329
+ if (slugSet.has(entry.slug)) {
330
+ try {
331
+ await host.rmrf(host.join(root, entry.path));
332
+ }
333
+ catch { /* file may already be gone */ }
334
+ }
335
+ }
336
+ const remaining = manifest.rules.filter((e) => !slugSet.has(e.slug));
337
+ await saveManifest(host, root, { version: 1, rules: remaining });
338
+ }
339
+ // ── Single instruction file for non-scoped platforms ────────
340
+ const SINGLE_FILE_PATHS = {
341
+ copilot: '.github/copilot-instructions.md',
342
+ windsurf: '.windsurfrules',
343
+ cline: '.clinerules',
344
+ gemini: 'GEMINI.md',
345
+ aider: 'CONVENTIONS.md',
346
+ };
347
+ /**
348
+ * Write a single instruction file for platforms that don't support scoped rules.
349
+ * Concatenates all rules into one markdown file.
350
+ */
351
+ async function writeSingleInstructionFile(host, root, rules, platformId) {
352
+ const filePath = SINGLE_FILE_PATHS[platformId];
353
+ if (!filePath)
354
+ return null;
355
+ const header = `<!-- Generated by Aspect Code. Do not edit manually. -->\n\n`;
356
+ const sections = rules.map((r) => {
357
+ const globLine = r.globs.length > 0 ? `*Applies to: ${r.globs.join(', ')}*\n\n` : '';
358
+ return `## ${r.description}\n\n${globLine}${r.content}`;
359
+ }).join('\n---\n\n');
360
+ const content = header + sections;
361
+ const absPath = host.join(root, filePath);
362
+ const dir = host.join(root, path.posix.dirname(filePath));
363
+ await host.mkdirp(dir);
364
+ await host.writeFile(absPath, content);
365
+ return filePath;
366
+ }
367
+ /**
368
+ * Write rules for all selected platforms. Handles both scoped (Claude/Cursor)
369
+ * and single-file (Copilot/Windsurf/Cline/Gemini/Aider) platforms.
370
+ */
371
+ async function writeRulesForPlatforms(host, root, rules, platforms) {
372
+ const written = [];
373
+ for (const p of platforms) {
374
+ if (p === 'claude') {
375
+ const paths = await writeScopedRules(host, root, rules, 'claudeCode');
376
+ written.push(...paths);
377
+ }
378
+ else if (p === 'cursor') {
379
+ const paths = await writeScopedRules(host, root, rules, 'cursor');
380
+ written.push(...paths);
381
+ }
382
+ else if (SINGLE_FILE_PATHS[p]) {
383
+ const path = await writeSingleInstructionFile(host, root, rules, p);
384
+ if (path)
385
+ written.push(path);
386
+ }
387
+ // codex: reads AGENTS.md directly, no extra files needed
388
+ }
389
+ return written;
390
+ }
391
+ // ── Manifest ─────────────────────────────────────────────────
392
+ const MANIFEST_PATH = '.aspectcode/scoped-rules.json';
393
+ async function loadManifest(host, root) {
394
+ try {
395
+ const raw = await host.readFile(host.join(root, MANIFEST_PATH));
396
+ const parsed = JSON.parse(raw);
397
+ if (parsed.version === 1 && Array.isArray(parsed.rules))
398
+ return parsed;
399
+ }
400
+ catch { /* missing or malformed */ }
401
+ return { version: 1, rules: [] };
402
+ }
403
+ async function saveManifest(host, root, manifest) {
404
+ const dir = host.join(root, '.aspectcode');
405
+ await host.mkdirp(dir);
406
+ await host.writeFile(host.join(root, MANIFEST_PATH), JSON.stringify(manifest, null, 2) + '\n');
407
+ }
408
+ // ── Helpers ──────────────────────────────────────────────────
409
+ /** Convert a directory path to a slug for file naming. */
410
+ function dirToSlug(dir) {
411
+ return dir
412
+ .replace(/^\.?\/?/, '')
413
+ .replace(/\//g, '-')
414
+ .replace(/[^a-z0-9-]/gi, '')
415
+ .toLowerCase()
416
+ || 'root';
417
+ }
418
+ /** Escape a string for YAML double-quoted value. */
419
+ function escapeYaml(s) {
420
+ return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
421
+ }
422
+ /** Detect the dominant naming pattern in a list of file paths. */
423
+ function detectDominantNaming(files) {
424
+ const counts = {};
425
+ for (const file of files) {
426
+ const basename = path.posix.basename(file).replace(/\.[^.]+$/, '');
427
+ // Skip index files and test files
428
+ if (basename === 'index' || /test|spec/i.test(basename))
429
+ continue;
430
+ let pattern = null;
431
+ if (basename.includes('-'))
432
+ pattern = 'kebab-case';
433
+ else if (basename.includes('_'))
434
+ pattern = 'snake_case';
435
+ else if (/^[A-Z]/.test(basename))
436
+ pattern = 'PascalCase';
437
+ else if (/[a-z][A-Z]/.test(basename))
438
+ pattern = 'camelCase';
439
+ if (pattern)
440
+ counts[pattern] = (counts[pattern] ?? 0) + 1;
441
+ }
442
+ const entries = Object.entries(counts);
443
+ if (entries.length === 0)
444
+ return null;
445
+ entries.sort((a, b) => b[1] - a[1]);
446
+ const total = entries.reduce((sum, [, c]) => sum + c, 0);
447
+ return entries[0][1] / total > 0.5 ? entries[0][0] : null;
448
+ }
449
+ //# sourceMappingURL=scopedRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopedRules.js","sourceRoot":"","sources":["../src/scopedRules.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,9 @@
1
1
  /**
2
- * Dashboard — condensed ink-based CLI dashboard.
2
+ * Dashboard — ink-based CLI dashboard with memory map and real-time assessments.
3
3
  *
4
- * Layout (full mode):
5
- * Banner (hidden in compact mode)
6
- * First-run message (only on first run, early phases)
7
- * Input bar (watching/done only)
8
- * Setup notes (compact single line)
9
- * Status line (spinner/icon + phase + stats)
10
- * Eval progress (harvest → probes → diagnosis)
11
- * Token usage (after LLM generation)
12
- * Summary card (after writing — sections, rules, paths)
13
- * Diff summary (watch-mode: +N lines, -M lines)
14
- * [Detail] (change trigger, warning, reasoning)
15
- * Applied changes (after refinement)
16
- *
17
- * Layout (compact mode):
18
- * Same but no banner, no reasoning, setup only if warning.
4
+ * Layout:
5
+ * Header → Memory Map → (Working status | Eval progress)
6
+ * Assessment area Status bar
19
7
  */
20
8
  import React from 'react';
21
9
  declare const Dashboard: React.FC;
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/ui/Dashboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAkHnD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAkMtB,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/ui/Dashboard.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AA+KnD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAmZtB,CAAC;AAEF,eAAe,SAAS,CAAC"}