@engramm/dev-workflow 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 (234) hide show
  1. package/dist/agents/context-builder.d.ts +11 -0
  2. package/dist/agents/context-builder.d.ts.map +1 -0
  3. package/dist/agents/context-builder.js +62 -0
  4. package/dist/agents/context-builder.js.map +1 -0
  5. package/dist/agents/loader.d.ts +3 -0
  6. package/dist/agents/loader.d.ts.map +1 -0
  7. package/dist/agents/loader.js +54 -0
  8. package/dist/agents/loader.js.map +1 -0
  9. package/dist/agents/registry.d.ts +10 -0
  10. package/dist/agents/registry.d.ts.map +1 -0
  11. package/dist/agents/registry.js +35 -0
  12. package/dist/agents/registry.js.map +1 -0
  13. package/dist/agents/types.d.ts +20 -0
  14. package/dist/agents/types.d.ts.map +1 -0
  15. package/dist/agents/types.js +2 -0
  16. package/dist/agents/types.js.map +1 -0
  17. package/dist/cli/agent.d.ts +2 -0
  18. package/dist/cli/agent.d.ts.map +1 -0
  19. package/dist/cli/agent.js +101 -0
  20. package/dist/cli/agent.js.map +1 -0
  21. package/dist/cli/config.d.ts +2 -0
  22. package/dist/cli/config.d.ts.map +1 -0
  23. package/dist/cli/config.js +100 -0
  24. package/dist/cli/config.js.map +1 -0
  25. package/dist/cli/doctor.d.ts +2 -0
  26. package/dist/cli/doctor.d.ts.map +1 -0
  27. package/dist/cli/doctor.js +123 -0
  28. package/dist/cli/doctor.js.map +1 -0
  29. package/dist/cli/index.d.ts +3 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +94 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/cli/init.d.ts +7 -0
  34. package/dist/cli/init.d.ts.map +1 -0
  35. package/dist/cli/init.js +177 -0
  36. package/dist/cli/init.js.map +1 -0
  37. package/dist/cli/run.d.ts +4 -0
  38. package/dist/cli/run.d.ts.map +1 -0
  39. package/dist/cli/run.js +191 -0
  40. package/dist/cli/run.js.map +1 -0
  41. package/dist/cli/search.d.ts +2 -0
  42. package/dist/cli/search.d.ts.map +1 -0
  43. package/dist/cli/search.js +75 -0
  44. package/dist/cli/search.js.map +1 -0
  45. package/dist/cli/serve.d.ts +2 -0
  46. package/dist/cli/serve.d.ts.map +1 -0
  47. package/dist/cli/serve.js +34 -0
  48. package/dist/cli/serve.js.map +1 -0
  49. package/dist/cli/status.d.ts +2 -0
  50. package/dist/cli/status.d.ts.map +1 -0
  51. package/dist/cli/status.js +89 -0
  52. package/dist/cli/status.js.map +1 -0
  53. package/dist/cli/task.d.ts +2 -0
  54. package/dist/cli/task.d.ts.map +1 -0
  55. package/dist/cli/task.js +153 -0
  56. package/dist/cli/task.js.map +1 -0
  57. package/dist/cli/vault-io.d.ts +3 -0
  58. package/dist/cli/vault-io.d.ts.map +1 -0
  59. package/dist/cli/vault-io.js +75 -0
  60. package/dist/cli/vault-io.js.map +1 -0
  61. package/dist/hooks/post-edit.d.ts +3 -0
  62. package/dist/hooks/post-edit.d.ts.map +1 -0
  63. package/dist/hooks/post-edit.js +43 -0
  64. package/dist/hooks/post-edit.js.map +1 -0
  65. package/dist/hooks/post-task.d.ts +3 -0
  66. package/dist/hooks/post-task.d.ts.map +1 -0
  67. package/dist/hooks/post-task.js +25 -0
  68. package/dist/hooks/post-task.js.map +1 -0
  69. package/dist/hooks/pre-compact.d.ts +7 -0
  70. package/dist/hooks/pre-compact.d.ts.map +1 -0
  71. package/dist/hooks/pre-compact.js +34 -0
  72. package/dist/hooks/pre-compact.js.map +1 -0
  73. package/dist/hooks/session-end.d.ts +3 -0
  74. package/dist/hooks/session-end.d.ts.map +1 -0
  75. package/dist/hooks/session-end.js +80 -0
  76. package/dist/hooks/session-end.js.map +1 -0
  77. package/dist/hooks/session-start.d.ts +3 -0
  78. package/dist/hooks/session-start.d.ts.map +1 -0
  79. package/dist/hooks/session-start.js +108 -0
  80. package/dist/hooks/session-start.js.map +1 -0
  81. package/dist/index.d.ts +33 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +27 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/intelligence/collector.d.ts +12 -0
  86. package/dist/intelligence/collector.d.ts.map +1 -0
  87. package/dist/intelligence/collector.js +93 -0
  88. package/dist/intelligence/collector.js.map +1 -0
  89. package/dist/intelligence/ranker.d.ts +5 -0
  90. package/dist/intelligence/ranker.d.ts.map +1 -0
  91. package/dist/intelligence/ranker.js +107 -0
  92. package/dist/intelligence/ranker.js.map +1 -0
  93. package/dist/intelligence/store.d.ts +17 -0
  94. package/dist/intelligence/store.d.ts.map +1 -0
  95. package/dist/intelligence/store.js +75 -0
  96. package/dist/intelligence/store.js.map +1 -0
  97. package/dist/intelligence/sync.d.ts +3 -0
  98. package/dist/intelligence/sync.d.ts.map +1 -0
  99. package/dist/intelligence/sync.js +83 -0
  100. package/dist/intelligence/sync.js.map +1 -0
  101. package/dist/intelligence/types.d.ts +35 -0
  102. package/dist/intelligence/types.d.ts.map +1 -0
  103. package/dist/intelligence/types.js +2 -0
  104. package/dist/intelligence/types.js.map +1 -0
  105. package/dist/lib/context.d.ts +3 -0
  106. package/dist/lib/context.d.ts.map +1 -0
  107. package/dist/lib/context.js +56 -0
  108. package/dist/lib/context.js.map +1 -0
  109. package/dist/lib/conventions-detect.d.ts +12 -0
  110. package/dist/lib/conventions-detect.d.ts.map +1 -0
  111. package/dist/lib/conventions-detect.js +337 -0
  112. package/dist/lib/conventions-detect.js.map +1 -0
  113. package/dist/lib/frontmatter.d.ts +7 -0
  114. package/dist/lib/frontmatter.d.ts.map +1 -0
  115. package/dist/lib/frontmatter.js +45 -0
  116. package/dist/lib/frontmatter.js.map +1 -0
  117. package/dist/lib/fs-helpers.d.ts +6 -0
  118. package/dist/lib/fs-helpers.d.ts.map +1 -0
  119. package/dist/lib/fs-helpers.js +24 -0
  120. package/dist/lib/fs-helpers.js.map +1 -0
  121. package/dist/lib/interpolate.d.ts +2 -0
  122. package/dist/lib/interpolate.d.ts.map +1 -0
  123. package/dist/lib/interpolate.js +4 -0
  124. package/dist/lib/interpolate.js.map +1 -0
  125. package/dist/lib/output.d.ts +27 -0
  126. package/dist/lib/output.d.ts.map +1 -0
  127. package/dist/lib/output.js +85 -0
  128. package/dist/lib/output.js.map +1 -0
  129. package/dist/lib/reader.d.ts +14 -0
  130. package/dist/lib/reader.d.ts.map +1 -0
  131. package/dist/lib/reader.js +75 -0
  132. package/dist/lib/reader.js.map +1 -0
  133. package/dist/lib/stack-detect.d.ts +12 -0
  134. package/dist/lib/stack-detect.d.ts.map +1 -0
  135. package/dist/lib/stack-detect.js +302 -0
  136. package/dist/lib/stack-detect.js.map +1 -0
  137. package/dist/lib/statusline.d.ts +3 -0
  138. package/dist/lib/statusline.d.ts.map +1 -0
  139. package/dist/lib/statusline.js +40 -0
  140. package/dist/lib/statusline.js.map +1 -0
  141. package/dist/lib/templates.d.ts +3 -0
  142. package/dist/lib/templates.d.ts.map +1 -0
  143. package/dist/lib/templates.js +174 -0
  144. package/dist/lib/templates.js.map +1 -0
  145. package/dist/lib/types.d.ts +44 -0
  146. package/dist/lib/types.d.ts.map +1 -0
  147. package/dist/lib/types.js +2 -0
  148. package/dist/lib/types.js.map +1 -0
  149. package/dist/lib/writer.d.ts +13 -0
  150. package/dist/lib/writer.d.ts.map +1 -0
  151. package/dist/lib/writer.js +97 -0
  152. package/dist/lib/writer.js.map +1 -0
  153. package/dist/mcp/handlers.d.ts +34 -0
  154. package/dist/mcp/handlers.d.ts.map +1 -0
  155. package/dist/mcp/handlers.js +256 -0
  156. package/dist/mcp/handlers.js.map +1 -0
  157. package/dist/mcp/server.d.ts +20 -0
  158. package/dist/mcp/server.d.ts.map +1 -0
  159. package/dist/mcp/server.js +89 -0
  160. package/dist/mcp/server.js.map +1 -0
  161. package/dist/mcp/tools.d.ts +11 -0
  162. package/dist/mcp/tools.d.ts.map +1 -0
  163. package/dist/mcp/tools.js +148 -0
  164. package/dist/mcp/tools.js.map +1 -0
  165. package/dist/tasks/manager.d.ts +14 -0
  166. package/dist/tasks/manager.d.ts.map +1 -0
  167. package/dist/tasks/manager.js +151 -0
  168. package/dist/tasks/manager.js.map +1 -0
  169. package/dist/tasks/tracker.d.ts +11 -0
  170. package/dist/tasks/tracker.d.ts.map +1 -0
  171. package/dist/tasks/tracker.js +31 -0
  172. package/dist/tasks/tracker.js.map +1 -0
  173. package/dist/tasks/types.d.ts +19 -0
  174. package/dist/tasks/types.d.ts.map +1 -0
  175. package/dist/tasks/types.js +2 -0
  176. package/dist/tasks/types.js.map +1 -0
  177. package/dist/workflow/builtin.d.ts +4 -0
  178. package/dist/workflow/builtin.d.ts.map +1 -0
  179. package/dist/workflow/builtin.js +93 -0
  180. package/dist/workflow/builtin.js.map +1 -0
  181. package/dist/workflow/engine.d.ts +38 -0
  182. package/dist/workflow/engine.d.ts.map +1 -0
  183. package/dist/workflow/engine.js +217 -0
  184. package/dist/workflow/engine.js.map +1 -0
  185. package/dist/workflow/loader.d.ts +4 -0
  186. package/dist/workflow/loader.d.ts.map +1 -0
  187. package/dist/workflow/loader.js +106 -0
  188. package/dist/workflow/loader.js.map +1 -0
  189. package/dist/workflow/state.d.ts +11 -0
  190. package/dist/workflow/state.d.ts.map +1 -0
  191. package/dist/workflow/state.js +49 -0
  192. package/dist/workflow/state.js.map +1 -0
  193. package/dist/workflow/types.d.ts +36 -0
  194. package/dist/workflow/types.d.ts.map +1 -0
  195. package/dist/workflow/types.js +2 -0
  196. package/dist/workflow/types.js.map +1 -0
  197. package/package.json +54 -0
  198. package/templates/agents/architect.md +46 -0
  199. package/templates/agents/coder.md +46 -0
  200. package/templates/agents/committer.md +29 -0
  201. package/templates/agents/debugger.md +54 -0
  202. package/templates/agents/planner.md +45 -0
  203. package/templates/agents/reader.md +48 -0
  204. package/templates/agents/reviewer.md +48 -0
  205. package/templates/agents/tester.md +41 -0
  206. package/templates/claude/agents/researcher.md +47 -0
  207. package/templates/claude/agents/writer.md +29 -0
  208. package/templates/claude/commands/git/changelog.md +41 -0
  209. package/templates/claude/commands/git/merge.md +37 -0
  210. package/templates/claude/commands/git/new-branch.md +34 -0
  211. package/templates/claude/commands/git/pr-review.md +64 -0
  212. package/templates/claude/commands/session/handover.md +49 -0
  213. package/templates/claude/commands/session/resume.md +43 -0
  214. package/templates/claude/commands/session/review.md +81 -0
  215. package/templates/claude/commands/task.md +52 -0
  216. package/templates/claude/commands/vault/adr.md +39 -0
  217. package/templates/claude/commands/vault/analyze.md +110 -0
  218. package/templates/claude/commands/vault/bug.md +31 -0
  219. package/templates/claude/commands/vault/debt.md +28 -0
  220. package/templates/claude/commands/vault/deps.md +36 -0
  221. package/templates/claude/commands/vault/from-spec.md +306 -0
  222. package/templates/claude/commands/vault/search.md +31 -0
  223. package/templates/claude/commands/vault/security-scan.md +50 -0
  224. package/templates/claude/commands/vault/test-gaps.md +38 -0
  225. package/templates/claude/commands/workflow/dev.md +913 -0
  226. package/templates/claude/commands/workflow.md +47 -0
  227. package/templates/claude/settings.json +52 -0
  228. package/templates/claude/skills/obsidian-markdown/SKILL.md +196 -0
  229. package/templates/claude/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
  230. package/templates/claude/skills/obsidian-markdown/references/EMBEDS.md +63 -0
  231. package/templates/claude/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
  232. package/templates/workflows/deploy.yaml +21 -0
  233. package/templates/workflows/release.yaml +26 -0
  234. package/templates/workflows/spike.yaml +14 -0
@@ -0,0 +1,34 @@
1
+ import { join, dirname } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { detectContext } from "../lib/context.js";
4
+ import { VaultReader } from "../lib/reader.js";
5
+ import { VaultWriter } from "../lib/writer.js";
6
+ import { AgentRegistry } from "../agents/registry.js";
7
+ import { AgentContextBuilder } from "../agents/context-builder.js";
8
+ import { TaskManager } from "../tasks/manager.js";
9
+ import { TaskTracker } from "../tasks/tracker.js";
10
+ import { IntelligenceStore } from "../intelligence/store.js";
11
+ import { ToolHandlers } from "../mcp/handlers.js";
12
+ import { McpServer } from "../mcp/server.js";
13
+ const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
14
+ export function serve() {
15
+ const context = detectContext();
16
+ if (!context) {
17
+ process.stderr.write("Not a git repository.\n");
18
+ process.exitCode = 1;
19
+ return;
20
+ }
21
+ const vaultReader = new VaultReader(context);
22
+ const vaultWriter = new VaultWriter(context);
23
+ const agentsDir = join(PACKAGE_ROOT, "templates", "agents");
24
+ const customAgentsDir = join(context.vaultPath, "agents");
25
+ const registry = new AgentRegistry(agentsDir, customAgentsDir);
26
+ const contextBuilder = new AgentContextBuilder(vaultReader, context);
27
+ const taskManager = new TaskManager(context.vaultPath);
28
+ const taskTracker = new TaskTracker(context.projectRoot, taskManager);
29
+ const intelligenceStore = new IntelligenceStore(context.vaultPath);
30
+ const handlers = new ToolHandlers(vaultReader, vaultWriter, context, registry, contextBuilder, taskManager, intelligenceStore, taskTracker);
31
+ const server = new McpServer(handlers);
32
+ server.start();
33
+ }
34
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/cli/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE/E,MAAM,UAAU,KAAK;IACnB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,IAAI,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAC/B,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EACxE,iBAAiB,EAAE,WAAW,CAC/B,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function status(): void;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAcA,wBAAgB,MAAM,IAAI,IAAI,CAsF7B"}
@@ -0,0 +1,89 @@
1
+ import { detectContext } from "../lib/context.js";
2
+ import { VaultReader } from "../lib/reader.js";
3
+ import { TaskManager } from "../tasks/manager.js";
4
+ import { TaskTracker } from "../tasks/tracker.js";
5
+ import { WorkflowState } from "../workflow/state.js";
6
+ import { icon, progressBar, statusIcon } from "../lib/output.js";
7
+ function contentScore(content) {
8
+ if (!content)
9
+ return { label: "missing", filled: 0 };
10
+ const lines = content.split("\n").length;
11
+ if (lines <= 8)
12
+ return { label: "empty", filled: 0 };
13
+ return { label: `${lines} lines`, filled: 1 };
14
+ }
15
+ export function status() {
16
+ const context = detectContext();
17
+ if (!context) {
18
+ console.error(`${icon.error} Not a git repository.`);
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ const reader = new VaultReader(context);
23
+ console.log(`\n\u250C\u2500 ${context.projectName} ${"\u2500".repeat(Math.max(0, 30 - context.projectName.length))} ${context.branch} \u2500\u2510`);
24
+ if (!reader.exists()) {
25
+ console.log(`\u2502 ${icon.warning} No vault. Run 'dev-workflow init'`);
26
+ console.log(`\u2514${"\u2500".repeat(45)}\u2518`);
27
+ return;
28
+ }
29
+ const files = {
30
+ stack: reader.readStack(),
31
+ conventions: reader.readConventions(),
32
+ knowledge: reader.readKnowledge(),
33
+ gameplan: reader.readGameplan(),
34
+ };
35
+ const scores = Object.entries(files).map(([name, content]) => {
36
+ const score = contentScore(content);
37
+ return { name, ...score };
38
+ });
39
+ console.log(`\u2502`);
40
+ for (const s of scores) {
41
+ const bar = progressBar(s.filled, 1, 10);
42
+ const pad = s.name.padEnd(16);
43
+ console.log(`\u2502 ${pad}${bar} ${s.label}`);
44
+ }
45
+ const logs = reader.readRecentDailyLogs(3);
46
+ console.log(`\u2502`);
47
+ const taskManager = new TaskManager(context.vaultPath);
48
+ const allTasks = taskManager.list();
49
+ if (allTasks.length > 0) {
50
+ const statusCounts = {};
51
+ for (const t of allTasks) {
52
+ statusCounts[t.status] = (statusCounts[t.status] ?? 0) + 1;
53
+ }
54
+ const summary = Object.entries(statusCounts)
55
+ .map(([s, c]) => `${statusIcon(s)} ${s}: ${c}`)
56
+ .join(" ");
57
+ console.log(`\u2502 ${icon.task} Tasks ${allTasks.length} total`);
58
+ console.log(`\u2502 ${summary}`);
59
+ }
60
+ else {
61
+ console.log(`\u2502 ${icon.task} Tasks none`);
62
+ }
63
+ const tracker = new TaskTracker(context.projectRoot, taskManager);
64
+ const currentTask = tracker.findByBranch(context.branch);
65
+ if (currentTask) {
66
+ console.log(`\u2502`);
67
+ console.log(`\u2502 ${statusIcon(currentTask.status)} Current: ${currentTask.id} "${currentTask.title}"`);
68
+ }
69
+ const workflowState = new WorkflowState(context.vaultPath);
70
+ const currentRun = workflowState.loadCurrent();
71
+ if (currentRun) {
72
+ const totalSteps = Object.keys(currentRun.steps).length;
73
+ const completedSteps = Object.values(currentRun.steps).filter((s) => s.status === "completed").length;
74
+ console.log(`\u2502`);
75
+ console.log(`\u2502 ${icon.workflow} Workflow ${currentRun.workflowName} (${currentRun.id})`);
76
+ console.log(`\u2502 Step: ${currentRun.currentStep} (${completedSteps}/${totalSteps})`);
77
+ console.log(`\u2502 Status: ${statusIcon(currentRun.status)} ${currentRun.status}`);
78
+ }
79
+ if (logs.length > 0) {
80
+ console.log(`\u2502`);
81
+ console.log(`\u2502 \uD83D\uDCC5 Sessions ${logs.length} recent`);
82
+ for (const log of logs) {
83
+ console.log(`\u2502 ${log.date}`);
84
+ }
85
+ }
86
+ console.log(`\u2502`);
87
+ console.log(`\u2514${"\u2500".repeat(45)}\u2518`);
88
+ }
89
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function task(args: string[]): void;
2
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/cli/task.ts"],"names":[],"mappings":"AAYA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwCzC"}
@@ -0,0 +1,153 @@
1
+ import { detectContext } from "../lib/context.js";
2
+ import { TaskManager } from "../tasks/manager.js";
3
+ import { TaskTracker } from "../tasks/tracker.js";
4
+ import { icon, statusIcon, table } from "../lib/output.js";
5
+ function parseFlag(args, flag) {
6
+ const index = args.indexOf(flag);
7
+ if (index === -1 || index >= args.length - 1)
8
+ return undefined;
9
+ return args[index + 1];
10
+ }
11
+ export function task(args) {
12
+ const context = detectContext();
13
+ if (!context) {
14
+ console.error("Not a git repository.");
15
+ process.exitCode = 1;
16
+ return;
17
+ }
18
+ const manager = new TaskManager(context.vaultPath);
19
+ const subcommand = args[0];
20
+ switch (subcommand) {
21
+ case "create":
22
+ taskCreate(manager, args.slice(1));
23
+ break;
24
+ case "list":
25
+ taskList(manager, args.slice(1));
26
+ break;
27
+ case "show":
28
+ taskShow(manager, args[1]);
29
+ break;
30
+ case "start":
31
+ taskStart(manager, context.projectRoot, args[1]);
32
+ break;
33
+ case "done":
34
+ taskDone(manager, args[1]);
35
+ break;
36
+ case "block":
37
+ taskBlock(manager, args[1]);
38
+ break;
39
+ default:
40
+ console.error("Usage: dev-workflow task create|list|show|start|done|block");
41
+ console.error(" task create \"title\" [\"description\"]");
42
+ console.error(" task list [--status <status>]");
43
+ console.error(" task show <id>");
44
+ console.error(" task start <id>");
45
+ console.error(" task done <id>");
46
+ console.error(" task block <id>");
47
+ process.exitCode = 1;
48
+ }
49
+ }
50
+ function taskCreate(manager, args) {
51
+ const title = args[0];
52
+ if (!title) {
53
+ console.error("Usage: dev-workflow task create \"title\" [\"description\"]");
54
+ process.exitCode = 1;
55
+ return;
56
+ }
57
+ const description = args[1] ?? "";
58
+ const created = manager.create(title, description);
59
+ console.log(`Created ${created.id}: ${created.title}`);
60
+ }
61
+ function taskList(manager, args) {
62
+ const status = parseFlag(args, "--status");
63
+ const tasks = manager.list(status ? { status } : undefined);
64
+ if (tasks.length === 0) {
65
+ console.log(`${icon.task} No tasks found.`);
66
+ return;
67
+ }
68
+ console.log(`\n${icon.task} Tasks\n`);
69
+ const rows = tasks.map((t) => [
70
+ t.id,
71
+ t.title,
72
+ `${statusIcon(t.status)} ${t.status}`,
73
+ t.priority,
74
+ ]);
75
+ console.log(table(["ID", "Title", "Status", "Priority"], rows));
76
+ }
77
+ function taskShow(manager, id) {
78
+ if (!id) {
79
+ console.error("Usage: dev-workflow task show <id>");
80
+ process.exitCode = 1;
81
+ return;
82
+ }
83
+ try {
84
+ const t = manager.get(id);
85
+ console.log(`ID: ${t.id}`);
86
+ console.log(`Title: ${t.title}`);
87
+ console.log(`Status: ${t.status}`);
88
+ console.log(`Branch: ${t.branch ?? "none"}`);
89
+ console.log(`Workflow: ${t.workflowRun ?? "none"}`);
90
+ console.log(`Created: ${t.created}`);
91
+ console.log(`Updated: ${t.updated}`);
92
+ if (t.description) {
93
+ console.log(`\n${t.description}`);
94
+ }
95
+ }
96
+ catch (error) {
97
+ console.error(error instanceof Error ? error.message : "Task not found");
98
+ process.exitCode = 1;
99
+ }
100
+ }
101
+ function taskStart(manager, projectRoot, id) {
102
+ if (!id) {
103
+ console.error("Usage: dev-workflow task start <id>");
104
+ process.exitCode = 1;
105
+ return;
106
+ }
107
+ try {
108
+ const t = manager.get(id);
109
+ const slug = t.title
110
+ .toLowerCase()
111
+ .replace(/\s+/g, "-")
112
+ .replace(/[^a-z0-9-]/g, "");
113
+ const branchName = `task/${slug}`;
114
+ const tracker = new TaskTracker(projectRoot, manager);
115
+ tracker.linkBranch(id, branchName);
116
+ console.log(`Task ${id} started on branch ${branchName}`);
117
+ }
118
+ catch (error) {
119
+ console.error(error instanceof Error ? error.message : "Task not found");
120
+ process.exitCode = 1;
121
+ }
122
+ }
123
+ function taskDone(manager, id) {
124
+ if (!id) {
125
+ console.error("Usage: dev-workflow task done <id>");
126
+ process.exitCode = 1;
127
+ return;
128
+ }
129
+ try {
130
+ manager.update(id, { status: "done" });
131
+ console.log(`Task ${id} marked as done`);
132
+ }
133
+ catch (error) {
134
+ console.error(error instanceof Error ? error.message : "Task not found");
135
+ process.exitCode = 1;
136
+ }
137
+ }
138
+ function taskBlock(manager, id) {
139
+ if (!id) {
140
+ console.error("Usage: dev-workflow task block <id>");
141
+ process.exitCode = 1;
142
+ return;
143
+ }
144
+ try {
145
+ manager.update(id, { status: "blocked" });
146
+ console.log(`Task ${id} marked as blocked`);
147
+ }
148
+ catch (error) {
149
+ console.error(error instanceof Error ? error.message : "Task not found");
150
+ process.exitCode = 1;
151
+ }
152
+ }
153
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/cli/task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function exportVault(args: string[]): void;
2
+ export declare function importVault(args: string[]): void;
3
+ //# sourceMappingURL=vault-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-io.d.ts","sourceRoot":"","sources":["../../src/cli/vault-io.ts"],"names":[],"mappings":"AAgCA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0BhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgChD"}
@@ -0,0 +1,75 @@
1
+ import { existsSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
2
+ import { join, relative } from "node:path";
3
+ import { detectContext } from "../lib/context.js";
4
+ import { writeFileSafe } from "../lib/fs-helpers.js";
5
+ function collectFiles(directory, basePath) {
6
+ const files = {};
7
+ if (!existsSync(directory))
8
+ return files;
9
+ function scan(dir) {
10
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
11
+ const fullPath = join(dir, entry.name);
12
+ if (entry.isDirectory()) {
13
+ scan(fullPath);
14
+ }
15
+ else if (entry.name.endsWith(".md") || entry.name.endsWith(".json")) {
16
+ const relativePath = relative(basePath, fullPath);
17
+ files[relativePath] = readFileSync(fullPath, "utf-8");
18
+ }
19
+ }
20
+ }
21
+ scan(directory);
22
+ return files;
23
+ }
24
+ export function exportVault(args) {
25
+ const context = detectContext();
26
+ if (!context) {
27
+ console.error("Not a git repository.");
28
+ process.exitCode = 1;
29
+ return;
30
+ }
31
+ if (!existsSync(context.vaultPath)) {
32
+ console.error("No vault found. Run 'dev-workflow init'.");
33
+ process.exitCode = 1;
34
+ return;
35
+ }
36
+ const outputPath = args[0] ?? "vault-export.json";
37
+ const files = collectFiles(context.vaultPath, context.vaultPath);
38
+ const exportData = {
39
+ version: 1,
40
+ projectName: context.projectName,
41
+ exportedAt: new Date().toISOString(),
42
+ files,
43
+ };
44
+ writeFileSync(outputPath, JSON.stringify(exportData, null, 2), "utf-8");
45
+ console.log(`Exported ${Object.keys(files).length} files → ${outputPath}`);
46
+ }
47
+ export function importVault(args) {
48
+ const context = detectContext();
49
+ if (!context) {
50
+ console.error("Not a git repository.");
51
+ process.exitCode = 1;
52
+ return;
53
+ }
54
+ const inputPath = args[0];
55
+ if (!inputPath || !existsSync(inputPath)) {
56
+ console.error("Usage: dev-workflow import <vault-export.json>");
57
+ process.exitCode = 1;
58
+ return;
59
+ }
60
+ const raw = readFileSync(inputPath, "utf-8");
61
+ const exportData = JSON.parse(raw);
62
+ if (exportData.version !== 1) {
63
+ console.error(`Unsupported export version: ${exportData.version}`);
64
+ process.exitCode = 1;
65
+ return;
66
+ }
67
+ let imported = 0;
68
+ for (const [relativePath, content] of Object.entries(exportData.files)) {
69
+ const targetPath = join(context.vaultPath, relativePath);
70
+ writeFileSafe(targetPath, content);
71
+ imported++;
72
+ }
73
+ console.log(`Imported ${imported} files from ${exportData.projectName} (${exportData.exportedAt})`);
74
+ }
75
+ //# sourceMappingURL=vault-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-io.js","sourceRoot":"","sources":["../../src/cli/vault-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=post-edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-edit.d.ts","sourceRoot":"","sources":["../../src/hooks/post-edit.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { detectContext } from "../lib/context.js";
5
+ import { writeFileSafe } from "../lib/fs-helpers.js";
6
+ import { IntelligenceStore } from "../intelligence/store.js";
7
+ import { Collector } from "../intelligence/collector.js";
8
+ function run() {
9
+ const context = detectContext();
10
+ if (!context) {
11
+ output({ status: "ok", message: "Skipping post-edit." });
12
+ return;
13
+ }
14
+ if (!existsSync(context.vaultPath)) {
15
+ output({ status: "ok", message: "No vault." });
16
+ return;
17
+ }
18
+ const editLogPath = join(context.vaultPath, ".edit-log.json");
19
+ let editLog = [];
20
+ if (existsSync(editLogPath)) {
21
+ try {
22
+ editLog = JSON.parse(readFileSync(editLogPath, "utf-8"));
23
+ }
24
+ catch {
25
+ editLog = [];
26
+ }
27
+ }
28
+ const filePath = process.env["CLAUDE_FILE_PATH"] ?? "unknown";
29
+ if (!editLog.includes(filePath)) {
30
+ editLog.push(filePath);
31
+ }
32
+ writeFileSafe(editLogPath, JSON.stringify(editLog, null, 2));
33
+ const intelligenceStore = new IntelligenceStore(context.vaultPath);
34
+ const collector = new Collector(intelligenceStore);
35
+ collector.recordFileEdit(filePath);
36
+ intelligenceStore.save();
37
+ output({ status: "ok", message: `Tracked: ${filePath} (${editLog.length} files this session)` });
38
+ }
39
+ function output(result) {
40
+ process.stdout.write(JSON.stringify(result));
41
+ }
42
+ run();
43
+ //# sourceMappingURL=post-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-edit.js","sourceRoot":"","sources":["../../src/hooks/post-edit.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,SAAS,GAAG;IACV,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAE9D,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAa,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,SAAS,CAAC;IAC9D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACnD,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACnC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAEzB,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,QAAQ,KAAK,OAAO,CAAC,MAAM,sBAAsB,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,MAAM,CAAC,MAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,GAAG,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=post-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-task.d.ts","sourceRoot":"","sources":["../../src/hooks/post-task.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ import { detectContext } from "../lib/context.js";
3
+ import { VaultWriter } from "../lib/writer.js";
4
+ import { existsSync } from "node:fs";
5
+ function run() {
6
+ const context = detectContext();
7
+ if (!context) {
8
+ output({ status: "ok", message: "Skipping post-task." });
9
+ return;
10
+ }
11
+ if (!existsSync(context.vaultPath)) {
12
+ output({ status: "ok", message: "No vault." });
13
+ return;
14
+ }
15
+ const today = new Date().toISOString().slice(0, 10);
16
+ const time = new Date().toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" });
17
+ const writer = new VaultWriter(context);
18
+ writer.writeDailyLog(`> Task completed at ${time} on branch ${context.branch}`, today);
19
+ output({ status: "ok", message: "Post-task recorded." });
20
+ }
21
+ function output(result) {
22
+ process.stdout.write(JSON.stringify(result));
23
+ }
24
+ run();
25
+ //# sourceMappingURL=post-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-task.js","sourceRoot":"","sources":["../../src/hooks/post-task.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,SAAS,GAAG;IACV,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAE5F,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,CAAC,aAAa,CAClB,uBAAuB,IAAI,cAAc,OAAO,CAAC,MAAM,EAAE,EACzD,KAAK,CACN,CAAC;IAEF,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,MAAM,CAAC,MAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,GAAG,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PreCompact hook — save context before Claude Code compresses history.
4
+ * Delegates to session-end logic.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=pre-compact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-compact.d.ts","sourceRoot":"","sources":["../../src/hooks/pre-compact.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PreCompact hook — save context before Claude Code compresses history.
4
+ * Delegates to session-end logic.
5
+ */
6
+ import { detectContext } from "../lib/context.js";
7
+ import { VaultReader } from "../lib/reader.js";
8
+ import { VaultWriter } from "../lib/writer.js";
9
+ function run() {
10
+ const context = detectContext();
11
+ if (!context) {
12
+ output({ status: "ok", message: "Skipping pre-compact save." });
13
+ return;
14
+ }
15
+ const reader = new VaultReader(context);
16
+ if (!reader.exists()) {
17
+ output({ status: "ok", message: "No vault, skipping." });
18
+ return;
19
+ }
20
+ const writer = new VaultWriter(context);
21
+ const today = new Date().toISOString().slice(0, 10);
22
+ const time = new Date().toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" });
23
+ const marker = [
24
+ `> [!note] Pre-compact auto-save — ${time}`,
25
+ `> Context was compressed. Use /resume to reload full vault context.`,
26
+ ].join("\n");
27
+ writer.writeDailyLog(marker, today);
28
+ output({ status: "ok", message: "Pre-compact save done." });
29
+ }
30
+ function output(result) {
31
+ process.stdout.write(JSON.stringify(result));
32
+ }
33
+ run();
34
+ //# sourceMappingURL=pre-compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-compact.js","sourceRoot":"","sources":["../../src/hooks/pre-compact.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,SAAS,GAAG;IACV,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAE5F,MAAM,MAAM,GAAG;QACb,qCAAqC,IAAI,EAAE;QAC3C,qEAAqE;KACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEpC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,MAAM,CAAC,MAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,GAAG,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=session-end.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../src/hooks/session-end.ts"],"names":[],"mappings":""}