@dv.nghiem/flowdeck 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/bin/flowdeck.js +108 -0
  4. package/dist/agents/architect.d.ts +3 -0
  5. package/dist/agents/architect.d.ts.map +1 -0
  6. package/dist/agents/code-explorer.d.ts +3 -0
  7. package/dist/agents/code-explorer.d.ts.map +1 -0
  8. package/dist/agents/coder.d.ts +3 -0
  9. package/dist/agents/coder.d.ts.map +1 -0
  10. package/dist/agents/debug.d.ts +4 -0
  11. package/dist/agents/debug.d.ts.map +1 -0
  12. package/dist/agents/doc-updater.d.ts +3 -0
  13. package/dist/agents/doc-updater.d.ts.map +1 -0
  14. package/dist/agents/flowdeck.d.ts +5 -0
  15. package/dist/agents/flowdeck.d.ts.map +1 -0
  16. package/dist/agents/index.d.ts +38 -0
  17. package/dist/agents/index.d.ts.map +1 -0
  18. package/dist/agents/mapper.d.ts +3 -0
  19. package/dist/agents/mapper.d.ts.map +1 -0
  20. package/dist/agents/orchestrator.d.ts +10 -0
  21. package/dist/agents/orchestrator.d.ts.map +1 -0
  22. package/dist/agents/performance.d.ts +4 -0
  23. package/dist/agents/performance.d.ts.map +1 -0
  24. package/dist/agents/planner.d.ts +3 -0
  25. package/dist/agents/planner.d.ts.map +1 -0
  26. package/dist/agents/policy-enforcer.d.ts +3 -0
  27. package/dist/agents/policy-enforcer.d.ts.map +1 -0
  28. package/dist/agents/researcher.d.ts +3 -0
  29. package/dist/agents/researcher.d.ts.map +1 -0
  30. package/dist/agents/reviewer.d.ts +3 -0
  31. package/dist/agents/reviewer.d.ts.map +1 -0
  32. package/dist/agents/risk-analyst.d.ts +3 -0
  33. package/dist/agents/risk-analyst.d.ts.map +1 -0
  34. package/dist/agents/security-auditor.d.ts +3 -0
  35. package/dist/agents/security-auditor.d.ts.map +1 -0
  36. package/dist/agents/specialist.d.ts +5 -0
  37. package/dist/agents/specialist.d.ts.map +1 -0
  38. package/dist/agents/tester.d.ts +3 -0
  39. package/dist/agents/tester.d.ts.map +1 -0
  40. package/dist/agents/types.d.ts +20 -0
  41. package/dist/agents/types.d.ts.map +1 -0
  42. package/dist/agents/writer.d.ts +3 -0
  43. package/dist/agents/writer.d.ts.map +1 -0
  44. package/dist/commands/analysis/analysis.test.d.ts +2 -0
  45. package/dist/commands/analysis/analysis.test.d.ts.map +1 -0
  46. package/dist/commands/analysis/analyze-change.d.ts +148 -0
  47. package/dist/commands/analysis/analyze-change.d.ts.map +1 -0
  48. package/dist/commands/analysis/evaluate-risk.d.ts +77 -0
  49. package/dist/commands/analysis/evaluate-risk.d.ts.map +1 -0
  50. package/dist/commands/analysis/guarded-edit.d.ts +72 -0
  51. package/dist/commands/analysis/guarded-edit.d.ts.map +1 -0
  52. package/dist/commands/execution/deploy-check.d.ts +91 -0
  53. package/dist/commands/execution/deploy-check.d.ts.map +1 -0
  54. package/dist/commands/execution/fix-bug.d.ts +187 -0
  55. package/dist/commands/execution/fix-bug.d.ts.map +1 -0
  56. package/dist/commands/execution/new-feature.d.ts +171 -0
  57. package/dist/commands/execution/new-feature.d.ts.map +1 -0
  58. package/dist/commands/execution/review-code.d.ts +130 -0
  59. package/dist/commands/execution/review-code.d.ts.map +1 -0
  60. package/dist/commands/execution/write-docs.d.ts +94 -0
  61. package/dist/commands/execution/write-docs.d.ts.map +1 -0
  62. package/dist/commands/governance/approve.d.ts +80 -0
  63. package/dist/commands/governance/approve.d.ts.map +1 -0
  64. package/dist/commands/intelligence/blast-radius.d.ts +67 -0
  65. package/dist/commands/intelligence/blast-radius.d.ts.map +1 -0
  66. package/dist/commands/intelligence/impact-radar.d.ts +71 -0
  67. package/dist/commands/intelligence/impact-radar.d.ts.map +1 -0
  68. package/dist/commands/intelligence/intelligence.test.d.ts +2 -0
  69. package/dist/commands/intelligence/intelligence.test.d.ts.map +1 -0
  70. package/dist/commands/intelligence/regression-predict.d.ts +75 -0
  71. package/dist/commands/intelligence/regression-predict.d.ts.map +1 -0
  72. package/dist/commands/intelligence/review-route.d.ts +65 -0
  73. package/dist/commands/intelligence/review-route.d.ts.map +1 -0
  74. package/dist/commands/intelligence/test-gap.d.ts +73 -0
  75. package/dist/commands/intelligence/test-gap.d.ts.map +1 -0
  76. package/dist/commands/intelligence/translate-intent.d.ts +87 -0
  77. package/dist/commands/intelligence/translate-intent.d.ts.map +1 -0
  78. package/dist/commands/intelligence/volatility-map-cmd.d.ts +68 -0
  79. package/dist/commands/intelligence/volatility-map-cmd.d.ts.map +1 -0
  80. package/dist/commands/planning/ask.d.ts +62 -0
  81. package/dist/commands/planning/ask.d.ts.map +1 -0
  82. package/dist/commands/planning/ask.test.d.ts +2 -0
  83. package/dist/commands/planning/ask.test.d.ts.map +1 -0
  84. package/dist/commands/planning/dashboard.d.ts +30 -0
  85. package/dist/commands/planning/dashboard.d.ts.map +1 -0
  86. package/dist/commands/planning/discuss.d.ts +39 -0
  87. package/dist/commands/planning/discuss.d.ts.map +1 -0
  88. package/dist/commands/planning/plan.d.ts +67 -0
  89. package/dist/commands/planning/plan.d.ts.map +1 -0
  90. package/dist/commands/planning/roadmap.d.ts +105 -0
  91. package/dist/commands/planning/roadmap.d.ts.map +1 -0
  92. package/dist/commands/setup/doctor.d.ts +10 -0
  93. package/dist/commands/setup/doctor.d.ts.map +1 -0
  94. package/dist/commands/setup/map-codebase.d.ts +62 -0
  95. package/dist/commands/setup/map-codebase.d.ts.map +1 -0
  96. package/dist/commands/setup/new-project.d.ts +19 -0
  97. package/dist/commands/setup/new-project.d.ts.map +1 -0
  98. package/dist/commands/setup/settings.d.ts +57 -0
  99. package/dist/commands/setup/settings.d.ts.map +1 -0
  100. package/dist/commands/state/checkpoint.d.ts +27 -0
  101. package/dist/commands/state/checkpoint.d.ts.map +1 -0
  102. package/dist/commands/state/multi-repo.d.ts +63 -0
  103. package/dist/commands/state/multi-repo.d.ts.map +1 -0
  104. package/dist/commands/state/progress.d.ts +57 -0
  105. package/dist/commands/state/progress.d.ts.map +1 -0
  106. package/dist/commands/state/resume.d.ts +11 -0
  107. package/dist/commands/state/resume.d.ts.map +1 -0
  108. package/dist/commands/state/workspace-commands.d.ts +207 -0
  109. package/dist/commands/state/workspace-commands.d.ts.map +1 -0
  110. package/dist/dashboard/lib/port-finder.d.ts +10 -0
  111. package/dist/dashboard/lib/port-finder.d.ts.map +1 -0
  112. package/dist/dashboard/lib/port-finder.test.d.ts +2 -0
  113. package/dist/dashboard/lib/port-finder.test.d.ts.map +1 -0
  114. package/dist/dashboard/lib/state-reader.d.ts +3 -0
  115. package/dist/dashboard/lib/state-reader.d.ts.map +1 -0
  116. package/dist/dashboard/server.d.ts +2 -0
  117. package/dist/dashboard/server.d.ts.map +1 -0
  118. package/dist/dashboard/server.mjs +13649 -0
  119. package/dist/dashboard/types.d.ts +72 -0
  120. package/dist/dashboard/types.d.ts.map +1 -0
  121. package/dist/dashboard/views/index.ejs +391 -0
  122. package/dist/dashboard/views/partials/blockers.ejs +10 -0
  123. package/dist/dashboard/views/partials/header.ejs +20 -0
  124. package/dist/dashboard/views/partials/phase-timeline.ejs +40 -0
  125. package/dist/dashboard/views/partials/progress.ejs +12 -0
  126. package/dist/hooks/approval-hook.d.ts +13 -0
  127. package/dist/hooks/approval-hook.d.ts.map +1 -0
  128. package/dist/hooks/compaction-hook.d.ts +23 -0
  129. package/dist/hooks/compaction-hook.d.ts.map +1 -0
  130. package/dist/hooks/context-window-monitor.d.ts +21 -0
  131. package/dist/hooks/context-window-monitor.d.ts.map +1 -0
  132. package/dist/hooks/decision-trace-hook.d.ts +13 -0
  133. package/dist/hooks/decision-trace-hook.d.ts.map +1 -0
  134. package/dist/hooks/file-tracker.d.ts +29 -0
  135. package/dist/hooks/file-tracker.d.ts.map +1 -0
  136. package/dist/hooks/guard-rails.d.ts +33 -0
  137. package/dist/hooks/guard-rails.d.ts.map +1 -0
  138. package/dist/hooks/index.d.ts +5 -0
  139. package/dist/hooks/index.d.ts.map +1 -0
  140. package/dist/hooks/notifications.d.ts +21 -0
  141. package/dist/hooks/notifications.d.ts.map +1 -0
  142. package/dist/hooks/patch-trust.d.ts +27 -0
  143. package/dist/hooks/patch-trust.d.ts.map +1 -0
  144. package/dist/hooks/patch-trust.test.d.ts +2 -0
  145. package/dist/hooks/patch-trust.test.d.ts.map +1 -0
  146. package/dist/hooks/session-events.d.ts +8 -0
  147. package/dist/hooks/session-events.d.ts.map +1 -0
  148. package/dist/hooks/session-idle-hook.d.ts +21 -0
  149. package/dist/hooks/session-idle-hook.d.ts.map +1 -0
  150. package/dist/hooks/session-start.d.ts +10 -0
  151. package/dist/hooks/session-start.d.ts.map +1 -0
  152. package/dist/hooks/shell-env-hook.d.ts +21 -0
  153. package/dist/hooks/shell-env-hook.d.ts.map +1 -0
  154. package/dist/hooks/telemetry-hook.d.ts +25 -0
  155. package/dist/hooks/telemetry-hook.d.ts.map +1 -0
  156. package/dist/hooks/todo-hook.d.ts +25 -0
  157. package/dist/hooks/todo-hook.d.ts.map +1 -0
  158. package/dist/hooks/tool-guard.d.ts +41 -0
  159. package/dist/hooks/tool-guard.d.ts.map +1 -0
  160. package/dist/hooks/tool-guard.test.d.ts +2 -0
  161. package/dist/hooks/tool-guard.test.d.ts.map +1 -0
  162. package/dist/index.d.ts +4 -0
  163. package/dist/index.d.ts.map +1 -0
  164. package/dist/index.js +6639 -0
  165. package/dist/lib/confirmation.d.ts +20 -0
  166. package/dist/lib/confirmation.d.ts.map +1 -0
  167. package/dist/lib/impact-radar.d.ts +35 -0
  168. package/dist/lib/impact-radar.d.ts.map +1 -0
  169. package/dist/lib/signatures.d.ts +12 -0
  170. package/dist/lib/signatures.d.ts.map +1 -0
  171. package/dist/lib/timestamps.d.ts +23 -0
  172. package/dist/lib/timestamps.d.ts.map +1 -0
  173. package/dist/mcp/index.d.ts +20 -0
  174. package/dist/mcp/index.d.ts.map +1 -0
  175. package/dist/services/agent-performance.d.ts +29 -0
  176. package/dist/services/agent-performance.d.ts.map +1 -0
  177. package/dist/services/approval-manager.d.ts +30 -0
  178. package/dist/services/approval-manager.d.ts.map +1 -0
  179. package/dist/services/index.d.ts +7 -0
  180. package/dist/services/index.d.ts.map +1 -0
  181. package/dist/services/model-router.d.ts +35 -0
  182. package/dist/services/model-router.d.ts.map +1 -0
  183. package/dist/services/policy-compiler.d.ts +27 -0
  184. package/dist/services/policy-compiler.d.ts.map +1 -0
  185. package/dist/services/run-trace.d.ts +34 -0
  186. package/dist/services/run-trace.d.ts.map +1 -0
  187. package/dist/services/services.test.d.ts +2 -0
  188. package/dist/services/services.test.d.ts.map +1 -0
  189. package/dist/services/telemetry.d.ts +34 -0
  190. package/dist/services/telemetry.d.ts.map +1 -0
  191. package/dist/tools/agent-dispatch.test.d.ts +2 -0
  192. package/dist/tools/agent-dispatch.test.d.ts.map +1 -0
  193. package/dist/tools/codebase-state.d.ts +4 -0
  194. package/dist/tools/codebase-state.d.ts.map +1 -0
  195. package/dist/tools/context-generator.d.ts +3 -0
  196. package/dist/tools/context-generator.d.ts.map +1 -0
  197. package/dist/tools/council.d.ts +4 -0
  198. package/dist/tools/council.d.ts.map +1 -0
  199. package/dist/tools/decision-trace.d.ts +16 -0
  200. package/dist/tools/decision-trace.d.ts.map +1 -0
  201. package/dist/tools/delegate.d.ts +4 -0
  202. package/dist/tools/delegate.d.ts.map +1 -0
  203. package/dist/tools/failure-replay.d.ts +19 -0
  204. package/dist/tools/failure-replay.d.ts.map +1 -0
  205. package/dist/tools/failure-replay.test.d.ts +2 -0
  206. package/dist/tools/failure-replay.test.d.ts.map +1 -0
  207. package/dist/tools/hash-edit.d.ts +3 -0
  208. package/dist/tools/hash-edit.d.ts.map +1 -0
  209. package/dist/tools/planning-state-lib.d.ts +65 -0
  210. package/dist/tools/planning-state-lib.d.ts.map +1 -0
  211. package/dist/tools/planning-state.d.ts +3 -0
  212. package/dist/tools/planning-state.d.ts.map +1 -0
  213. package/dist/tools/policy-engine.d.ts +19 -0
  214. package/dist/tools/policy-engine.d.ts.map +1 -0
  215. package/dist/tools/repo-memory.d.ts +20 -0
  216. package/dist/tools/repo-memory.d.ts.map +1 -0
  217. package/dist/tools/repo-memory.test.d.ts +2 -0
  218. package/dist/tools/repo-memory.test.d.ts.map +1 -0
  219. package/dist/tools/run-parallel.d.ts +4 -0
  220. package/dist/tools/run-parallel.d.ts.map +1 -0
  221. package/dist/tools/run-pipeline.d.ts +4 -0
  222. package/dist/tools/run-pipeline.d.ts.map +1 -0
  223. package/dist/tools/volatility-map.d.ts +18 -0
  224. package/dist/tools/volatility-map.d.ts.map +1 -0
  225. package/dist/tools/volatility-map.test.d.ts +2 -0
  226. package/dist/tools/volatility-map.test.d.ts.map +1 -0
  227. package/dist/tools/workspace-state.d.ts +3 -0
  228. package/dist/tools/workspace-state.d.ts.map +1 -0
  229. package/docs/USER_GUIDE.md +20 -0
  230. package/docs/agents.md +562 -0
  231. package/docs/best-practices.md +47 -0
  232. package/docs/command-migration.md +175 -0
  233. package/docs/commands/fd-analyze-change.md +107 -0
  234. package/docs/commands/fd-ask.md +51 -0
  235. package/docs/commands/fd-checkpoint.md +10 -0
  236. package/docs/commands/fd-dashboard.md +11 -0
  237. package/docs/commands/fd-deploy-check.md +11 -0
  238. package/docs/commands/fd-discuss.md +28 -0
  239. package/docs/commands/fd-evaluate-risk.md +134 -0
  240. package/docs/commands/fd-fix-bug.md +24 -0
  241. package/docs/commands/fd-guarded-edit.md +105 -0
  242. package/docs/commands/fd-map-codebase.md +27 -0
  243. package/docs/commands/fd-multi-repo.md +63 -0
  244. package/docs/commands/fd-new-feature.md +25 -0
  245. package/docs/commands/fd-new-project.md +24 -0
  246. package/docs/commands/fd-plan.md +33 -0
  247. package/docs/commands/fd-progress.md +11 -0
  248. package/docs/commands/fd-resume.md +10 -0
  249. package/docs/commands/fd-review-code.md +29 -0
  250. package/docs/commands/fd-roadmap.md +10 -0
  251. package/docs/commands/fd-settings.md +10 -0
  252. package/docs/commands/fd-write-docs.md +10 -0
  253. package/docs/commands.md +476 -0
  254. package/docs/configuration.md +211 -0
  255. package/docs/feature-integration-architecture.md +255 -0
  256. package/docs/index.md +75 -0
  257. package/docs/installation.md +134 -0
  258. package/docs/intelligence.md +294 -0
  259. package/docs/multi-repo.md +201 -0
  260. package/docs/notifications.md +170 -0
  261. package/docs/parallel-execution.md +227 -0
  262. package/docs/quick-start.md +174 -0
  263. package/docs/rules.md +459 -0
  264. package/docs/skills.md +408 -0
  265. package/docs/workflows.md +376 -0
  266. package/package.json +58 -0
  267. package/postinstall.mjs +102 -0
  268. package/src/rules/README.md +37 -0
  269. package/src/rules/common/agent-orchestration.md +86 -0
  270. package/src/rules/common/coding-style.md +120 -0
  271. package/src/rules/common/git-workflow.md +77 -0
  272. package/src/rules/common/security.md +94 -0
  273. package/src/rules/common/testing.md +105 -0
  274. package/src/rules/golang/patterns.md +187 -0
  275. package/src/rules/java/patterns.md +204 -0
  276. package/src/rules/python/patterns.md +141 -0
  277. package/src/rules/rust/patterns.md +210 -0
  278. package/src/rules/typescript/patterns.md +168 -0
  279. package/src/skills/api-design/SKILL.md +143 -0
  280. package/src/skills/arch-constraint-guard/SKILL.md +61 -0
  281. package/src/skills/blast-radius-preview/SKILL.md +65 -0
  282. package/src/skills/change-impact-radar/SKILL.md +63 -0
  283. package/src/skills/code-review/SKILL.md +108 -0
  284. package/src/skills/code-tour/SKILL.md +101 -0
  285. package/src/skills/codebase-mapping/SKILL.md +87 -0
  286. package/src/skills/codebase-onboarding/SKILL.md +133 -0
  287. package/src/skills/confidence-aware-planning/SKILL.md +67 -0
  288. package/src/skills/context-load/SKILL.md +63 -0
  289. package/src/skills/debug-flow/SKILL.md +75 -0
  290. package/src/skills/decision-trace/SKILL.md +72 -0
  291. package/src/skills/dependency-audit/SKILL.md +126 -0
  292. package/src/skills/deploy-check/SKILL.md +87 -0
  293. package/src/skills/documentation-writer/SKILL.md +154 -0
  294. package/src/skills/failure-replay-engine/SKILL.md +59 -0
  295. package/src/skills/git-release/SKILL.md +94 -0
  296. package/src/skills/git-workflow/SKILL.md +177 -0
  297. package/src/skills/golang-patterns/SKILL.md +511 -0
  298. package/src/skills/human-review-routing/SKILL.md +65 -0
  299. package/src/skills/intent-translator/SKILL.md +57 -0
  300. package/src/skills/java-patterns/SKILL.md +479 -0
  301. package/src/skills/multi-repo/SKILL.md +187 -0
  302. package/src/skills/parallel-execute/SKILL.md +92 -0
  303. package/src/skills/patch-trust-score/SKILL.md +44 -0
  304. package/src/skills/performance-profiling/SKILL.md +153 -0
  305. package/src/skills/plan-task/SKILL.md +101 -0
  306. package/src/skills/python-patterns/SKILL.md +529 -0
  307. package/src/skills/refactor-guide/SKILL.md +117 -0
  308. package/src/skills/regression-prediction/SKILL.md +57 -0
  309. package/src/skills/repo-memory-graph/SKILL.md +49 -0
  310. package/src/skills/rust-patterns/SKILL.md +492 -0
  311. package/src/skills/security-scan/SKILL.md +91 -0
  312. package/src/skills/self-healing-policies/SKILL.md +76 -0
  313. package/src/skills/tdd-workflow/SKILL.md +126 -0
  314. package/src/skills/test-coverage/SKILL.md +94 -0
  315. package/src/skills/test-gap-detector/SKILL.md +58 -0
  316. package/src/skills/volatility-map/SKILL.md +52 -0
  317. package/src/workflows/debug-flow.md +119 -0
  318. package/src/workflows/deploy-check-flow.md +98 -0
  319. package/src/workflows/discuss-flow.md +97 -0
  320. package/src/workflows/execute-flow.md +233 -0
  321. package/src/workflows/execute-phase.md +142 -0
  322. package/src/workflows/fix-bug-flow.md +210 -0
  323. package/src/workflows/map-codebase-flow.md +92 -0
  324. package/src/workflows/multi-repo-flow.md +226 -0
  325. package/src/workflows/parallel-execution-flow.md +236 -0
  326. package/src/workflows/plan-flow.md +126 -0
  327. package/src/workflows/plan-phase.md +101 -0
  328. package/src/workflows/refactor-flow.md +122 -0
  329. package/src/workflows/review-code-flow.md +105 -0
  330. package/src/workflows/spec-driven-flow.md +43 -0
  331. package/src/workflows/write-docs-flow.md +95 -0
@@ -0,0 +1,72 @@
1
+ export interface Phase {
2
+ number: number;
3
+ name: string;
4
+ status: "complete" | "in_progress" | "pending";
5
+ stepsComplete: number;
6
+ stepsPending: number;
7
+ dependsOn?: string;
8
+ }
9
+ export interface TelemetrySummary {
10
+ command: string;
11
+ total_runs: number;
12
+ successes: number;
13
+ failures: number;
14
+ avg_duration_ms: number;
15
+ last_run: string;
16
+ }
17
+ export interface RecentRun {
18
+ run_id: string;
19
+ command: string;
20
+ started_at: string;
21
+ ended_at?: string;
22
+ status: string;
23
+ risk_score: number;
24
+ files_touched: number;
25
+ outcome?: string;
26
+ }
27
+ export interface PendingApproval {
28
+ id: string;
29
+ trigger: string;
30
+ reason: string;
31
+ risk_score: number;
32
+ file_path?: string;
33
+ requested_at: string;
34
+ }
35
+ export interface AgentPerfSummary {
36
+ agent: string;
37
+ model: string;
38
+ task_type: string;
39
+ success_rate: number;
40
+ runs: number;
41
+ avg_duration_ms: number;
42
+ }
43
+ export interface TDDDashboardState {
44
+ stage: string;
45
+ cycle: number;
46
+ failing_tests: number;
47
+ passing_tests: number;
48
+ behaviors_completed: number;
49
+ behaviors_pending: number;
50
+ bugs_missing_regression: number;
51
+ overrides_used: number;
52
+ }
53
+ export interface DashboardData {
54
+ project: string;
55
+ milestone: string;
56
+ milestone_name: string;
57
+ phases: Phase[];
58
+ blockers: string[];
59
+ progress: {
60
+ total: number;
61
+ completed: number;
62
+ percent: number;
63
+ };
64
+ currentPhase: number;
65
+ telemetrySummary: TelemetrySummary[];
66
+ recentRuns: RecentRun[];
67
+ pendingApprovals: PendingApproval[];
68
+ agentPerf: AgentPerfSummary[];
69
+ toolFailureCount: number;
70
+ tdd?: TDDDashboardState;
71
+ }
72
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAA;IAC9C,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,YAAY,EAAE,MAAM,CAAA;IAEpB,gBAAgB,EAAE,gBAAgB,EAAE,CAAA;IACpC,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,SAAS,EAAE,gBAAgB,EAAE,CAAA;IAC7B,gBAAgB,EAAE,MAAM,CAAA;IAExB,GAAG,CAAC,EAAE,iBAAiB,CAAA;CACxB"}
@@ -0,0 +1,391 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title><%= project %> — Dashboard</title>
7
+ <style>
8
+ /* === Design Tokens === */
9
+ :root {
10
+ --color-bg: #111827;
11
+ --color-surface: #1F2937;
12
+ --color-border: #374151;
13
+ --color-accent: #3B82F6;
14
+ --color-accent-hover: #2563eb;
15
+ --color-text-primary: #f9fafb;
16
+ --color-text-secondary: #d1d5db;
17
+ --color-text-muted: #9ca3af;
18
+ --color-success: #10b981;
19
+ --color-danger: #ef4444;
20
+ --color-pending: #6b7280;
21
+
22
+ --space-xs: 4px;
23
+ --space-sm: 8px;
24
+ --space-md: 16px;
25
+ --space-lg: 24px;
26
+ --space-xl: 32px;
27
+ --space-2xl: 48px;
28
+ --space-3xl: 64px;
29
+
30
+ --font-display: 28px;
31
+ --font-heading: 20px;
32
+ --font-body: 14px;
33
+ --font-label: 12px;
34
+
35
+ --radius-sm: 4px;
36
+ --radius-md: 8px;
37
+ --radius-lg: 12px;
38
+ }
39
+
40
+ /* === Reset & Base === */
41
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
42
+
43
+ body {
44
+ background: var(--color-bg);
45
+ color: var(--color-text-primary);
46
+ font-family: system-ui, -apple-system, sans-serif;
47
+ font-size: var(--font-body);
48
+ line-height: 1.5;
49
+ min-height: 100vh;
50
+ }
51
+
52
+ /* === Typography === */
53
+ .display {
54
+ font-size: var(--font-display);
55
+ font-weight: 700;
56
+ line-height: 1.1;
57
+ color: var(--color-text-primary);
58
+ }
59
+ .heading {
60
+ font-size: var(--font-heading);
61
+ font-weight: 600;
62
+ line-height: 1.2;
63
+ color: var(--color-text-primary);
64
+ }
65
+ .label {
66
+ font-size: var(--font-label);
67
+ font-weight: 500;
68
+ color: var(--color-text-muted);
69
+ text-transform: uppercase;
70
+ letter-spacing: 0.05em;
71
+ }
72
+ .body {
73
+ font-size: var(--font-body);
74
+ font-weight: 400;
75
+ color: var(--color-text-secondary);
76
+ }
77
+
78
+ /* === Layout === */
79
+ .page {
80
+ max-width: 800px;
81
+ margin: 0 auto;
82
+ padding: var(--space-xl) var(--space-md);
83
+ }
84
+
85
+ /* === Header === */
86
+ .header {
87
+ background: var(--color-surface);
88
+ border: 1px solid var(--color-border);
89
+ border-radius: var(--radius-lg);
90
+ padding: var(--space-lg);
91
+ margin-bottom: var(--space-lg);
92
+ }
93
+ .header-top {
94
+ display: flex;
95
+ align-items: flex-start;
96
+ justify-content: space-between;
97
+ gap: var(--space-md);
98
+ }
99
+ .header-milestone {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: var(--space-sm);
103
+ margin-top: var(--space-xs);
104
+ }
105
+ .refresh-link {
106
+ display: inline-flex;
107
+ align-items: center;
108
+ gap: var(--space-xs);
109
+ background: var(--color-accent);
110
+ color: white;
111
+ padding: var(--space-sm) var(--space-md);
112
+ border-radius: var(--radius-md);
113
+ font-size: var(--font-body);
114
+ font-weight: 500;
115
+ text-decoration: none;
116
+ white-space: nowrap;
117
+ flex-shrink: 0;
118
+ transition: background 150ms;
119
+ }
120
+ .refresh-link:hover { background: var(--color-accent-hover); }
121
+
122
+ /* === Section Card === */
123
+ .section-card {
124
+ background: var(--color-surface);
125
+ border: 1px solid var(--color-border);
126
+ border-radius: var(--radius-lg);
127
+ padding: var(--space-lg);
128
+ margin-bottom: var(--space-lg);
129
+ }
130
+
131
+ /* === Phase Timeline === */
132
+ .phase-list { display: flex; flex-direction: column; gap: var(--space-xs); margin-top: var(--space-md); }
133
+ .phase-item {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: var(--space-md);
137
+ padding: var(--space-sm) var(--space-md);
138
+ border-radius: var(--radius-md);
139
+ transition: background 150ms;
140
+ }
141
+ .phase-item:last-child { border-bottom: none; }
142
+ .phase-item.phase-complete { background: rgba(16, 185, 129, 0.05); }
143
+ .phase-item.phase-in_progress { background: rgba(59, 130, 246, 0.1); border: 1px solid rgba(59, 130, 246, 0.3); }
144
+ .phase-item.phase-pending { opacity: 0.6; }
145
+
146
+ .phase-indicator {
147
+ width: 24px;
148
+ height: 24px;
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ flex-shrink: 0;
153
+ }
154
+ .icon-check { color: var(--color-success); }
155
+ .phase-pulse {
156
+ width: 10px;
157
+ height: 10px;
158
+ background: var(--color-accent);
159
+ border-radius: 50%;
160
+ animation: pulse 2s ease-in-out infinite;
161
+ }
162
+ @keyframes pulse {
163
+ 0%, 100% { opacity: 1; transform: scale(1); }
164
+ 50% { opacity: 0.6; transform: scale(0.85); }
165
+ }
166
+ .phase-dot {
167
+ width: 8px;
168
+ height: 8px;
169
+ background: var(--color-pending);
170
+ border-radius: 50%;
171
+ }
172
+
173
+ .phase-content { flex: 1; min-width: 0; }
174
+ .phase-number { font-size: var(--font-label); color: var(--color-text-muted); font-weight: 500; }
175
+ .phase-name { font-size: var(--font-body); color: var(--color-text-primary); font-weight: 400; }
176
+
177
+ .phase-status { flex-shrink: 0; }
178
+ .status-complete { font-size: var(--font-label); color: var(--color-success); font-weight: 500; }
179
+ .status-in-progress { font-size: var(--font-label); color: var(--color-accent); font-weight: 600; }
180
+ .status-pending { font-size: var(--font-label); color: var(--color-pending); font-weight: 500; }
181
+
182
+ /* === Blockers === */
183
+ .blockers-list { list-style: none; padding: 0; margin-top: var(--space-sm); display: flex; flex-direction: column; gap: var(--space-xs); }
184
+ .blocker-item {
185
+ font-size: var(--font-body);
186
+ color: var(--color-danger);
187
+ padding: var(--space-sm) var(--space-md);
188
+ background: rgba(239, 68, 68, 0.08);
189
+ border-radius: var(--radius-sm);
190
+ border-left: 3px solid var(--color-danger);
191
+ }
192
+
193
+ /* === Progress === */
194
+ .progress-section { }
195
+ .progress-header {
196
+ display: flex;
197
+ justify-content: space-between;
198
+ align-items: center;
199
+ margin-bottom: var(--space-sm);
200
+ }
201
+ .progress-percent {
202
+ font-size: var(--font-heading);
203
+ font-weight: 700;
204
+ color: var(--color-accent);
205
+ }
206
+ .progress-bar-track {
207
+ height: 8px;
208
+ background: var(--color-border);
209
+ border-radius: 4px;
210
+ overflow: hidden;
211
+ }
212
+ .progress-bar-fill {
213
+ height: 100%;
214
+ background: var(--color-accent);
215
+ border-radius: 4px;
216
+ transition: width 300ms ease-out;
217
+ }
218
+ .progress-detail { margin-top: var(--space-sm); }
219
+
220
+ /* === Empty State === */
221
+ .empty-state { text-align: center; padding: var(--space-xl) var(--space-md); }
222
+ .empty-state-heading { font-size: var(--font-heading); font-weight: 600; color: var(--color-text-muted); margin-bottom: var(--space-xs); }
223
+ .empty-state-body { font-size: var(--font-body); color: var(--color-pending); }
224
+
225
+ /* === Spacing Utilities === */
226
+ .space-sm { height: var(--space-sm); }
227
+ .space-md { height: var(--space-md); }
228
+ .space-lg { height: var(--space-lg); }
229
+
230
+ /* === Telemetry / Ops === */
231
+ .ops-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-md); margin-top: var(--space-md); }
232
+ @media (max-width: 640px) { .ops-grid { grid-template-columns: 1fr; } }
233
+ .stat-card {
234
+ background: rgba(59, 130, 246, 0.05);
235
+ border: 1px solid rgba(59, 130, 246, 0.15);
236
+ border-radius: var(--radius-md);
237
+ padding: var(--space-md);
238
+ }
239
+ .stat-value { font-size: 22px; font-weight: 700; color: var(--color-accent); }
240
+ .stat-label { font-size: var(--font-label); color: var(--color-text-muted); margin-top: 2px; }
241
+
242
+ .table { width: 100%; border-collapse: collapse; margin-top: var(--space-md); }
243
+ .table th { font-size: var(--font-label); color: var(--color-text-muted); text-align: left; padding: var(--space-xs) var(--space-sm); border-bottom: 1px solid var(--color-border); }
244
+ .table td { font-size: var(--font-body); color: var(--color-text-secondary); padding: var(--space-xs) var(--space-sm); border-bottom: 1px solid rgba(55, 65, 81, 0.4); vertical-align: top; }
245
+ .table tr:last-child td { border-bottom: none; }
246
+
247
+ .badge { display: inline-block; padding: 2px 8px; border-radius: 99px; font-size: 11px; font-weight: 600; }
248
+ .badge-ok { background: rgba(16,185,129,0.15); color: #10b981; }
249
+ .badge-fail { background: rgba(239,68,68,0.15); color: #ef4444; }
250
+ .badge-running { background: rgba(59,130,246,0.15); color: #3b82f6; }
251
+ .badge-pending { background: rgba(107,114,128,0.15); color: #9ca3af; }
252
+ .badge-risk-high { background: rgba(239,68,68,0.15); color: #ef4444; }
253
+ .badge-risk-med { background: rgba(251,146,60,0.15); color: #f97316; }
254
+ .badge-risk-low { background: rgba(16,185,129,0.15); color: #10b981; }
255
+
256
+ .approval-item {
257
+ padding: var(--space-sm) var(--space-md);
258
+ background: rgba(251, 146, 60, 0.08);
259
+ border-left: 3px solid #f97316;
260
+ border-radius: var(--radius-sm);
261
+ margin-bottom: var(--space-xs);
262
+ }
263
+ .approval-trigger { font-size: var(--font-label); color: #f97316; font-weight: 600; }
264
+ .approval-reason { font-size: var(--font-body); color: var(--color-text-secondary); }
265
+
266
+ /* === Responsive === */
267
+ @media (max-width: 640px) {
268
+ .header-top { flex-direction: column; }
269
+ .refresh-link { align-self: flex-start; }
270
+ .phase-item { gap: var(--space-sm); }
271
+ .phase-status { display: none; }
272
+ }
273
+ </style>
274
+ </head>
275
+ <body>
276
+ <main class="page">
277
+ <%- include('partials/header.ejs') %>
278
+
279
+ <div class="space-lg"></div>
280
+
281
+ <%- include('partials/progress.ejs') %>
282
+
283
+ <div class="space-lg"></div>
284
+
285
+ <div class="section-card">
286
+ <%- include('partials/phase-timeline.ejs') %>
287
+ </div>
288
+
289
+ <%- include('partials/blockers.ejs') %>
290
+
291
+ <% if (pendingApprovals && pendingApprovals.length > 0) { %>
292
+ <div class="space-lg"></div>
293
+ <div class="section-card">
294
+ <p class="label">⚠ Pending Approvals (<%= pendingApprovals.length %>)</p>
295
+ <div class="space-sm"></div>
296
+ <% for (const a of pendingApprovals) { %>
297
+ <div class="approval-item">
298
+ <div class="approval-trigger"><%= a.trigger %> — risk: <%= a.risk_score %></div>
299
+ <div class="approval-reason"><%= a.reason %></div>
300
+ <% if (a.file_path) { %><div style="font-size:11px;color:#9ca3af;margin-top:2px"><%= a.file_path %></div><% } %>
301
+ </div>
302
+ <% } %>
303
+ </div>
304
+ <% } %>
305
+
306
+ <% if (recentRuns && recentRuns.length > 0) { %>
307
+ <div class="space-lg"></div>
308
+ <div class="section-card">
309
+ <p class="label">Recent Runs</p>
310
+ <table class="table">
311
+ <thead>
312
+ <tr>
313
+ <th>Command</th><th>Status</th><th>Risk</th><th>Files</th><th>Started</th>
314
+ </tr>
315
+ </thead>
316
+ <tbody>
317
+ <% for (const r of recentRuns) { %>
318
+ <tr>
319
+ <td><code style="font-size:12px"><%= r.command %></code></td>
320
+ <td>
321
+ <span class="badge badge-<%= r.status === 'complete' ? 'ok' : r.status === 'failed' ? 'fail' : r.status === 'running' ? 'running' : 'pending' %>">
322
+ <%= r.status %>
323
+ </span>
324
+ </td>
325
+ <td>
326
+ <span class="badge badge-risk-<%= r.risk_score < 40 ? 'high' : r.risk_score < 70 ? 'med' : 'low' %>">
327
+ <%= r.risk_score %>
328
+ </span>
329
+ </td>
330
+ <td><%= r.files_touched %></td>
331
+ <td style="color:var(--color-text-muted);font-size:11px"><%= r.started_at.slice(0, 16).replace('T', ' ') %></td>
332
+ </tr>
333
+ <% } %>
334
+ </tbody>
335
+ </table>
336
+ </div>
337
+ <% } %>
338
+
339
+ <% if (telemetrySummary && telemetrySummary.length > 0) { %>
340
+ <div class="space-lg"></div>
341
+ <div class="section-card">
342
+ <p class="label">Command Telemetry</p>
343
+ <div class="ops-grid">
344
+ <% for (const s of telemetrySummary.slice(0, 4)) { %>
345
+ <div class="stat-card">
346
+ <div class="stat-value"><%= s.total_runs %></div>
347
+ <div class="stat-label"><%= s.command %></div>
348
+ <div style="font-size:11px;color:var(--color-text-muted);margin-top:4px">
349
+ ✓ <%= s.successes %> &nbsp; ✗ <%= s.failures %> &nbsp; ~<%= s.avg_duration_ms %>ms
350
+ </div>
351
+ </div>
352
+ <% } %>
353
+ </div>
354
+ <% if (toolFailureCount > 0) { %>
355
+ <div style="margin-top:var(--space-sm);font-size:var(--font-label);color:#ef4444">
356
+ ⚠ <%= toolFailureCount %> tool failures in recent session
357
+ </div>
358
+ <% } %>
359
+ </div>
360
+ <% } %>
361
+
362
+ <% if (agentPerf && agentPerf.length > 0) { %>
363
+ <div class="space-lg"></div>
364
+ <div class="section-card">
365
+ <p class="label">Agent Performance</p>
366
+ <table class="table">
367
+ <thead>
368
+ <tr><th>Agent</th><th>Model</th><th>Task</th><th>Success</th><th>Runs</th><th>Avg ms</th></tr>
369
+ </thead>
370
+ <tbody>
371
+ <% for (const p of agentPerf.slice(0, 8)) { %>
372
+ <tr>
373
+ <td><%= p.agent %></td>
374
+ <td style="font-size:11px;color:var(--color-text-muted)"><%= p.model.split('-').slice(-2).join('-') %></td>
375
+ <td><%= p.task_type %></td>
376
+ <td>
377
+ <span class="badge badge-<%= p.success_rate >= 80 ? 'ok' : p.success_rate >= 50 ? 'running' : 'fail' %>">
378
+ <%= p.success_rate %>%
379
+ </span>
380
+ </td>
381
+ <td><%= p.runs %></td>
382
+ <td><%= p.avg_duration_ms %></td>
383
+ </tr>
384
+ <% } %>
385
+ </tbody>
386
+ </table>
387
+ </div>
388
+ <% } %>
389
+ </main>
390
+ </body>
391
+ </html>
@@ -0,0 +1,10 @@
1
+ <% if (blockers && blockers.length > 0) { %>
2
+ <section class="blockers-panel">
3
+ <div class="heading">Pending Blockers</div>
4
+ <ul class="blockers-list">
5
+ <% blockers.forEach(function(blocker) { %>
6
+ <li class="blocker-item"><%= blocker %></li>
7
+ <% }); %>
8
+ </ul>
9
+ </section>
10
+ <% } %>
@@ -0,0 +1,20 @@
1
+ <header class="header">
2
+ <div class="header-top">
3
+ <div>
4
+ <div class="display"><%= project %></div>
5
+ <div class="header-milestone">
6
+ <span class="label">Milestone</span>
7
+ <span class="heading"><%= milestone %></span>
8
+ </div>
9
+ </div>
10
+ <a href="/refresh" class="refresh-link" aria-label="Refresh dashboard">
11
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
12
+ <path d="M21 2v6h-6"/>
13
+ <path d="M3 12a9 9 0 0 1 15-6.7L21 8"/>
14
+ <path d="M3 22v-6h6"/>
15
+ <path d="M21 12a9 9 0 0 1-15 6.7L3 16"/>
16
+ </svg>
17
+ <span>Refresh</span>
18
+ </a>
19
+ </div>
20
+ </header>
@@ -0,0 +1,40 @@
1
+ <section class="phase-timeline">
2
+ <div class="heading">Phase Timeline</div>
3
+ <div class="phase-list">
4
+ <% if (phases.length === 0) { %>
5
+ <div class="empty-state">
6
+ <p class="empty-state-heading">No phases yet</p>
7
+ <p class="empty-state-body">Phases will appear here once they are defined in the roadmap.</p>
8
+ </div>
9
+ <% } else { %>
10
+ <% phases.forEach(function(phase) { %>
11
+ <div class="phase-item phase-<%= phase.status %>">
12
+ <div class="phase-indicator">
13
+ <% if (phase.status === 'complete') { %>
14
+ <svg class="icon-check" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
15
+ <polyline points="20 6 9 17 4 12"/>
16
+ </svg>
17
+ <% } else if (phase.status === 'in_progress') { %>
18
+ <span class="phase-pulse"></span>
19
+ <% } else { %>
20
+ <span class="phase-dot"></span>
21
+ <% } %>
22
+ </div>
23
+ <div class="phase-content">
24
+ <div class="phase-number">Phase <%= phase.number %></div>
25
+ <div class="phase-name"><%= phase.name %></div>
26
+ </div>
27
+ <div class="phase-status">
28
+ <% if (phase.status === 'complete') { %>
29
+ <span class="status-complete">Complete</span>
30
+ <% } else if (phase.status === 'in_progress') { %>
31
+ <span class="status-in-progress">In Progress</span>
32
+ <% } else { %>
33
+ <span class="status-pending">Pending</span>
34
+ <% } %>
35
+ </div>
36
+ </div>
37
+ <% }); %>
38
+ <% } %>
39
+ </div>
40
+ </section>
@@ -0,0 +1,12 @@
1
+ <section class="progress-section">
2
+ <div class="progress-header">
3
+ <span class="label">Overall Progress</span>
4
+ <span class="progress-percent"><%= progress.percent %>%</span>
5
+ </div>
6
+ <div class="progress-bar-track">
7
+ <div class="progress-bar-fill" style="width: <%= progress.percent %>"></div>
8
+ </div>
9
+ <div class="progress-detail">
10
+ <span class="body"><%= progress.completed %> of <%= progress.total %> phases complete</span>
11
+ </div>
12
+ </section>
@@ -0,0 +1,13 @@
1
+ export declare function approvalHook(context: {
2
+ directory?: string;
3
+ }, toolInput: {
4
+ name?: string;
5
+ tool?: string;
6
+ parameters?: Record<string, unknown>;
7
+ }, _output: {
8
+ parts?: Array<{
9
+ type: string;
10
+ text: string;
11
+ }>;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=approval-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/approval-hook.ts"],"names":[],"mappings":"AAUA,wBAAsB,YAAY,CAChC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,SAAS,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EACjF,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GACzD,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Compaction Hook
3
+ * Fires on `experimental.session.compacting` to inject structured context
4
+ * so the LLM summarization preserves FlowDeck's planning state and recent work.
5
+ *
6
+ * Context includes:
7
+ * 1. FlowDeck planning state (phase, status, pending steps)
8
+ * 2. Recently edited files (from SessionFileTracker)
9
+ * 3. Structured 8-section summary prompt
10
+ *
11
+ * Inspired by oh-my-openagent's compaction-context-injector and
12
+ * ECC's experimental.session.compacting handler.
13
+ */
14
+ import type { SessionFileTracker } from "./file-tracker";
15
+ export declare function createCompactionHook(ctx: {
16
+ directory: string;
17
+ }, tracker: SessionFileTracker): (_input: {
18
+ sessionID: string;
19
+ }, output: {
20
+ context: string[];
21
+ prompt?: string;
22
+ }) => Promise<void>;
23
+ //# sourceMappingURL=compaction-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/compaction-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAoDxD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,OAAO,EAAE,kBAAkB,IAGzB,QAAQ;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7B,QAAQ;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,mBA8BjD"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Context Window Monitor
3
+ * Warns when session token usage exceeds 70% of the context limit.
4
+ * Appends a reminder to the next tool.execute.after output — once per session.
5
+ *
6
+ * Inspired by oh-my-openagent's context-window-monitor.ts.
7
+ */
8
+ export declare function createContextWindowMonitorHook(): {
9
+ "tool.execute.after": (input: {
10
+ sessionID: string;
11
+ }, output: {
12
+ output: string;
13
+ }) => Promise<void>;
14
+ event: ({ event }: {
15
+ event: {
16
+ type: string;
17
+ properties?: unknown;
18
+ };
19
+ }) => Promise<void>;
20
+ };
21
+ //# sourceMappingURL=context-window-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-window-monitor.d.ts","sourceRoot":"","sources":["../../src/hooks/context-window-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0BH,wBAAgB,8BAA8B;kCAKnC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,UACpB;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;uBAwBI;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE;EAsBlF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Decision Trace Hook
3
+ * Auto-records a concise decision entry whenever the agent applies a write or edit.
4
+ * Writes to .codebase/DECISIONS.jsonl for fast human review.
5
+ */
6
+ export declare function decisionTraceHook(ctx: {
7
+ directory: string;
8
+ }, input: {
9
+ tool: string;
10
+ }, output: {
11
+ args: any;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=decision-trace-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-trace-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/decision-trace-hook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * File Watcher + File Edited Hooks
3
+ * Tracks files modified during a session.
4
+ * Used by the compaction hook to include recently edited files in context.
5
+ *
6
+ * Ported/adapted from ECC's file.watcher.updated and file.edited handlers.
7
+ */
8
+ export type ChangeType = "added" | "modified" | "deleted";
9
+ export interface FileChange {
10
+ path: string;
11
+ type: ChangeType;
12
+ }
13
+ export declare class SessionFileTracker {
14
+ private changes;
15
+ record(path: string, type: ChangeType): void;
16
+ getChanges(): FileChange[];
17
+ getEditedPaths(): string[];
18
+ clear(): void;
19
+ }
20
+ export declare function createFileTrackerHooks(tracker: SessionFileTracker): {
21
+ fileEdited: (event: {
22
+ path: string;
23
+ }) => void;
24
+ fileWatcherUpdated: (event: {
25
+ path: string;
26
+ type: string;
27
+ }) => void;
28
+ };
29
+ //# sourceMappingURL=file-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tracker.d.ts","sourceRoot":"","sources":["../../src/hooks/file-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;AAEzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAgC;IAE/C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAI5C,UAAU,IAAI,UAAU,EAAE;IAI1B,cAAc,IAAI,MAAM,EAAE;IAM1B,KAAK,IAAI,IAAI;CAGd;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB;wBACrC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;gCAIR;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;EAQlE"}