@jingyi0605/codingns 0.1.3 → 0.1.5

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 (224) hide show
  1. package/bin/codingns.mjs +47 -8
  2. package/dist/public/assets/{TerminalPage-Nq5sPc5c.js → TerminalPage-4p6EBqrR.js} +19 -19
  3. package/dist/public/assets/gemini-D4G1NbrE.png +0 -0
  4. package/dist/public/assets/index-CxeghocY.css +1 -0
  5. package/dist/public/assets/index-DXusStl0.js +108 -0
  6. package/dist/public/assets/kimi-BWNNSh7e.png +0 -0
  7. package/dist/public/index.html +2 -2
  8. package/dist/server/config/env.d.ts +7 -0
  9. package/dist/server/config/env.js +147 -1
  10. package/dist/server/config/env.js.map +1 -1
  11. package/dist/server/config/opencode-system-probe-helper-process.d.ts +24 -0
  12. package/dist/server/config/opencode-system-probe-helper-process.js +70 -5
  13. package/dist/server/config/opencode-system-probe-helper-process.js.map +1 -1
  14. package/dist/server/modules/auth/auth-service.d.ts +7 -1
  15. package/dist/server/modules/auth/auth-service.js +23 -3
  16. package/dist/server/modules/auth/auth-service.js.map +1 -1
  17. package/dist/server/modules/bootstrap/bootstrap-service.d.ts +3 -1
  18. package/dist/server/modules/bootstrap/bootstrap-service.js +7 -2
  19. package/dist/server/modules/bootstrap/bootstrap-service.js.map +1 -1
  20. package/dist/server/modules/butler/butler-action-context-service.d.ts +30 -0
  21. package/dist/server/modules/butler/butler-action-context-service.js +108 -0
  22. package/dist/server/modules/butler/butler-action-context-service.js.map +1 -0
  23. package/dist/server/modules/butler/butler-auth-service.d.ts +17 -0
  24. package/dist/server/modules/butler/butler-auth-service.js +91 -0
  25. package/dist/server/modules/butler/butler-auth-service.js.map +1 -0
  26. package/dist/server/modules/butler/butler-control-action-service.d.ts +65 -0
  27. package/dist/server/modules/butler/butler-control-action-service.js +296 -0
  28. package/dist/server/modules/butler/butler-control-action-service.js.map +1 -0
  29. package/dist/server/modules/butler/butler-control-session-service.d.ts +55 -0
  30. package/dist/server/modules/butler/butler-control-session-service.js +367 -0
  31. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -0
  32. package/dist/server/modules/butler/butler-controller.d.ts +367 -0
  33. package/dist/server/modules/butler/butler-controller.js +475 -0
  34. package/dist/server/modules/butler/butler-controller.js.map +1 -0
  35. package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.d.ts +34 -0
  36. package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js +77 -0
  37. package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js.map +1 -0
  38. package/dist/server/modules/butler/butler-follow-up-scheduler.d.ts +23 -0
  39. package/dist/server/modules/butler/butler-follow-up-scheduler.js +57 -0
  40. package/dist/server/modules/butler/butler-follow-up-scheduler.js.map +1 -0
  41. package/dist/server/modules/butler/butler-follow-up-service.d.ts +86 -0
  42. package/dist/server/modules/butler/butler-follow-up-service.js +948 -0
  43. package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -0
  44. package/dist/server/modules/butler/butler-inbox-service.d.ts +35 -0
  45. package/dist/server/modules/butler/butler-inbox-service.js +136 -0
  46. package/dist/server/modules/butler/butler-inbox-service.js.map +1 -0
  47. package/dist/server/modules/butler/butler-notification-service.d.ts +12 -0
  48. package/dist/server/modules/butler/butler-notification-service.js +45 -0
  49. package/dist/server/modules/butler/butler-notification-service.js.map +1 -0
  50. package/dist/server/modules/butler/butler-profile-service.d.ts +26 -0
  51. package/dist/server/modules/butler/butler-profile-service.js +529 -0
  52. package/dist/server/modules/butler/butler-profile-service.js.map +1 -0
  53. package/dist/server/modules/butler/butler-project-service.d.ts +48 -0
  54. package/dist/server/modules/butler/butler-project-service.js +253 -0
  55. package/dist/server/modules/butler/butler-project-service.js.map +1 -0
  56. package/dist/server/modules/butler/butler-session-service.d.ts +79 -0
  57. package/dist/server/modules/butler/butler-session-service.js +503 -0
  58. package/dist/server/modules/butler/butler-session-service.js.map +1 -0
  59. package/dist/server/modules/butler/butler-session-summary-service.d.ts +55 -0
  60. package/dist/server/modules/butler/butler-session-summary-service.js +382 -0
  61. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -0
  62. package/dist/server/modules/butler/context-aggregator.d.ts +187 -0
  63. package/dist/server/modules/butler/context-aggregator.js +807 -0
  64. package/dist/server/modules/butler/context-aggregator.js.map +1 -0
  65. package/dist/server/modules/butler/instruction-adapter.d.ts +28 -0
  66. package/dist/server/modules/butler/instruction-adapter.js +101 -0
  67. package/dist/server/modules/butler/instruction-adapter.js.map +1 -0
  68. package/dist/server/modules/butler/patrol-execution-service.d.ts +47 -0
  69. package/dist/server/modules/butler/patrol-execution-service.js +347 -0
  70. package/dist/server/modules/butler/patrol-execution-service.js.map +1 -0
  71. package/dist/server/modules/butler/patrol-plan-service.d.ts +54 -0
  72. package/dist/server/modules/butler/patrol-plan-service.js +272 -0
  73. package/dist/server/modules/butler/patrol-plan-service.js.map +1 -0
  74. package/dist/server/modules/butler/patrol-run-service.d.ts +60 -0
  75. package/dist/server/modules/butler/patrol-run-service.js +185 -0
  76. package/dist/server/modules/butler/patrol-run-service.js.map +1 -0
  77. package/dist/server/modules/butler/patrol-scheduler.d.ts +36 -0
  78. package/dist/server/modules/butler/patrol-scheduler.js +99 -0
  79. package/dist/server/modules/butler/patrol-scheduler.js.map +1 -0
  80. package/dist/server/modules/butler/project-memory-service.d.ts +30 -0
  81. package/dist/server/modules/butler/project-memory-service.js +103 -0
  82. package/dist/server/modules/butler/project-memory-service.js.map +1 -0
  83. package/dist/server/modules/butler/provider-adapter-registry.d.ts +61 -0
  84. package/dist/server/modules/butler/provider-adapter-registry.js +430 -0
  85. package/dist/server/modules/butler/provider-adapter-registry.js.map +1 -0
  86. package/dist/server/modules/butler/session-summary-instruction-adapter.d.ts +28 -0
  87. package/dist/server/modules/butler/session-summary-instruction-adapter.js +79 -0
  88. package/dist/server/modules/butler/session-summary-instruction-adapter.js.map +1 -0
  89. package/dist/server/modules/butler/session-summary-scheduler.d.ts +23 -0
  90. package/dist/server/modules/butler/session-summary-scheduler.js +57 -0
  91. package/dist/server/modules/butler/session-summary-scheduler.js.map +1 -0
  92. package/dist/server/modules/butler/verification-run-service.d.ts +73 -0
  93. package/dist/server/modules/butler/verification-run-service.js +633 -0
  94. package/dist/server/modules/butler/verification-run-service.js.map +1 -0
  95. package/dist/server/modules/demo/demo-cleanup-service.d.ts +41 -0
  96. package/dist/server/modules/demo/demo-cleanup-service.js +111 -0
  97. package/dist/server/modules/demo/demo-cleanup-service.js.map +1 -0
  98. package/dist/server/modules/preferences/profile-service.js +8 -2
  99. package/dist/server/modules/preferences/profile-service.js.map +1 -1
  100. package/dist/server/modules/sessions/claude-runtime-helper-process.js +1 -1
  101. package/dist/server/modules/sessions/claude-runtime-helper-process.js.map +1 -1
  102. package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +5 -1
  103. package/dist/server/modules/sessions/codex-app-server-helper-client.js +10 -2
  104. package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
  105. package/dist/server/modules/sessions/session-controller.d.ts +3 -1
  106. package/dist/server/modules/sessions/session-controller.js +11 -2
  107. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  108. package/dist/server/modules/sessions/session-history-service.d.ts +14 -1
  109. package/dist/server/modules/sessions/session-history-service.js +291 -30
  110. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  111. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +25 -2
  112. package/dist/server/modules/sessions/session-live-runtime-service.js +526 -158
  113. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  114. package/dist/server/modules/sessions/session-provider-error-mapper.js +28 -0
  115. package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
  116. package/dist/server/modules/terminal/terminal-service.js +2 -2
  117. package/dist/server/modules/terminal/terminal-service.js.map +1 -1
  118. package/dist/server/modules/workbench/workbench-service.d.ts +7 -1
  119. package/dist/server/modules/workbench/workbench-service.js +31 -7
  120. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  121. package/dist/server/routes/butler.d.ts +3 -0
  122. package/dist/server/routes/butler.js +54 -0
  123. package/dist/server/routes/butler.js.map +1 -0
  124. package/dist/server/routes/sessions.d.ts +1 -0
  125. package/dist/server/routes/sessions.js +12 -3
  126. package/dist/server/routes/sessions.js.map +1 -1
  127. package/dist/server/server/create-server.d.ts +61 -0
  128. package/dist/server/server/create-server.js +180 -10
  129. package/dist/server/server/create-server.js.map +1 -1
  130. package/dist/server/storage/repositories/butler-control-event-repository.d.ts +8 -0
  131. package/dist/server/storage/repositories/butler-control-event-repository.js +78 -0
  132. package/dist/server/storage/repositories/butler-control-event-repository.js.map +1 -0
  133. package/dist/server/storage/repositories/butler-control-session-repository.d.ts +11 -0
  134. package/dist/server/storage/repositories/butler-control-session-repository.js +86 -0
  135. package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -0
  136. package/dist/server/storage/repositories/butler-follow-up-task-repository.d.ts +16 -0
  137. package/dist/server/storage/repositories/butler-follow-up-task-repository.js +252 -0
  138. package/dist/server/storage/repositories/butler-follow-up-task-repository.js.map +1 -0
  139. package/dist/server/storage/repositories/butler-inbox-item-repository.d.ts +15 -0
  140. package/dist/server/storage/repositories/butler-inbox-item-repository.js +111 -0
  141. package/dist/server/storage/repositories/butler-inbox-item-repository.js.map +1 -0
  142. package/dist/server/storage/repositories/butler-notification-archive-repository.d.ts +9 -0
  143. package/dist/server/storage/repositories/butler-notification-archive-repository.js +48 -0
  144. package/dist/server/storage/repositories/butler-notification-archive-repository.js.map +1 -0
  145. package/dist/server/storage/repositories/butler-profile-repository.d.ts +9 -0
  146. package/dist/server/storage/repositories/butler-profile-repository.js +86 -0
  147. package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -0
  148. package/dist/server/storage/repositories/butler-project-repository.d.ts +14 -0
  149. package/dist/server/storage/repositories/butler-project-repository.js +140 -0
  150. package/dist/server/storage/repositories/butler-project-repository.js.map +1 -0
  151. package/dist/server/storage/repositories/butler-session-repository.d.ts +11 -0
  152. package/dist/server/storage/repositories/butler-session-repository.js +106 -0
  153. package/dist/server/storage/repositories/butler-session-repository.js.map +1 -0
  154. package/dist/server/storage/repositories/butler-session-summary-state-repository.d.ts +8 -0
  155. package/dist/server/storage/repositories/butler-session-summary-state-repository.js +62 -0
  156. package/dist/server/storage/repositories/butler-session-summary-state-repository.js.map +1 -0
  157. package/dist/server/storage/repositories/patrol-plan-repository.d.ts +27 -0
  158. package/dist/server/storage/repositories/patrol-plan-repository.js +119 -0
  159. package/dist/server/storage/repositories/patrol-plan-repository.js.map +1 -0
  160. package/dist/server/storage/repositories/patrol-run-repository.d.ts +28 -0
  161. package/dist/server/storage/repositories/patrol-run-repository.js +121 -0
  162. package/dist/server/storage/repositories/patrol-run-repository.js.map +1 -0
  163. package/dist/server/storage/repositories/project-memory-repository.d.ts +15 -0
  164. package/dist/server/storage/repositories/project-memory-repository.js +150 -0
  165. package/dist/server/storage/repositories/project-memory-repository.js.map +1 -0
  166. package/dist/server/storage/repositories/session-checkpoint-repository.d.ts +9 -0
  167. package/dist/server/storage/repositories/session-checkpoint-repository.js +72 -0
  168. package/dist/server/storage/repositories/session-checkpoint-repository.js.map +1 -0
  169. package/dist/server/storage/repositories/session-message-origin-repository.d.ts +10 -0
  170. package/dist/server/storage/repositories/session-message-origin-repository.js +93 -0
  171. package/dist/server/storage/repositories/session-message-origin-repository.js.map +1 -0
  172. package/dist/server/storage/repositories/verification-run-repository.d.ts +29 -0
  173. package/dist/server/storage/repositories/verification-run-repository.js +125 -0
  174. package/dist/server/storage/repositories/verification-run-repository.js.map +1 -0
  175. package/dist/server/storage/sqlite/client.js +39 -0
  176. package/dist/server/storage/sqlite/client.js.map +1 -1
  177. package/dist/server/storage/sqlite/schema.sql +324 -0
  178. package/dist/server/types/domain.d.ts +261 -1
  179. package/dist/server/ws/ws-server.d.ts +2 -1
  180. package/dist/server/ws/ws-server.js +2 -1
  181. package/dist/server/ws/ws-server.js.map +1 -1
  182. package/node_modules/@codingns/session-sync-core/dist/index.d.ts +4 -0
  183. package/node_modules/@codingns/session-sync-core/dist/index.js +4 -0
  184. package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
  185. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.d.ts +18 -0
  186. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js +659 -0
  187. package/node_modules/@codingns/session-sync-core/dist/kimi-message-normalizer.js.map +1 -0
  188. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.d.ts +11 -0
  189. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js +72 -0
  190. package/node_modules/@codingns/session-sync-core/dist/kimi-shared.js.map +1 -0
  191. package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +8 -0
  192. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +89 -0
  193. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +1 -1
  194. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +4 -1
  195. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  196. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +41 -0
  197. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +1086 -0
  198. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -0
  199. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +29 -0
  200. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +578 -0
  201. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -0
  202. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +2 -1
  203. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  204. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +30 -2
  205. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -1
  206. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +2 -0
  207. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +43 -5
  208. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
  209. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +2 -0
  210. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +320 -69
  211. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  212. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.d.ts +21 -0
  213. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +537 -0
  214. package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -0
  215. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.d.ts +38 -0
  216. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js +911 -0
  217. package/node_modules/@codingns/session-sync-core/dist/runtime/kimi-runtime.js.map +1 -0
  218. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.d.ts +6 -0
  219. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js +9 -0
  220. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js.map +1 -0
  221. package/node_modules/@codingns/session-sync-core/package.json +8 -0
  222. package/package.json +1 -1
  223. package/dist/public/assets/index-9hnprhO7.css +0 -1
  224. package/dist/public/assets/index-BTpmuKhG.js +0 -108
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-message-origin-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/session-message-origin-repository.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,8BAA8B;IACZ;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD,MAAM,CAAC,MAAkC;QACvC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;;;;;4CAeoC,CACrC;aACA,GAAG,CACF,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,CACjB,CAAC;IACN,CAAC;IAED,gBAAgB,CACd,SAAiB,EACjB,eAAuB,EACvB,SAAiB,EACjB,SAAiB;QAEjB,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;qCAI6B,CAC9B;aACA,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC3D,CAAC;IAED,0BAA0B,CAAC,SAAiB,EAAE,UAAoB;QAChE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;;;;;;;;gCAWwB,YAAY;kCACV,CAC3B;aACA,GAAG,CAAC,SAAS,EAAE,GAAG,UAAU,CAA8B,CAAC;QAE9D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,kCAAkC,CAAC,SAAiB,EAAE,QAAkB;QACtE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;;;;;;;;;6BAYqB,YAAY;iDACQ,CAC1C;aACA,GAAG,CAAC,SAAS,EAAE,GAAG,QAAQ,CAA8B,CAAC;QAE5D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;CACF;AAaD,SAAS,MAAM,CAAC,GAA4B;IAC1C,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,eAAe,EAAE,GAAG,CAAC,iBAAiB;QACtC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type Database from "better-sqlite3";
2
+ export interface VerificationRunRecord {
3
+ id: string;
4
+ projectId: string;
5
+ butlerSessionId: string | null;
6
+ sourcePatrolRunId: string | null;
7
+ verificationType: string;
8
+ status: string;
9
+ targetRef: string | null;
10
+ specJson: string;
11
+ artifactRefsJson: string;
12
+ resultJson: string;
13
+ summary: string | null;
14
+ startedAt: string | null;
15
+ finishedAt: string | null;
16
+ createdAt: string;
17
+ }
18
+ export declare class VerificationRunRepository {
19
+ private readonly db;
20
+ constructor(db: Database.Database);
21
+ create(record: VerificationRunRecord): VerificationRunRecord;
22
+ listByProject(projectId: string, filters?: {
23
+ status?: string;
24
+ verificationType?: string;
25
+ }): VerificationRunRecord[];
26
+ findById(id: string): VerificationRunRecord | null;
27
+ listRunningByProject(projectId: string): VerificationRunRecord[];
28
+ update(record: VerificationRunRecord): VerificationRunRecord | null;
29
+ }
@@ -0,0 +1,125 @@
1
+ export class VerificationRunRepository {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ create(record) {
7
+ this.db
8
+ .prepare(`INSERT INTO verification_runs (
9
+ id,
10
+ project_id,
11
+ butler_session_id,
12
+ source_patrol_run_id,
13
+ verification_type,
14
+ status,
15
+ target_ref,
16
+ spec_json,
17
+ artifact_refs_json,
18
+ result_json,
19
+ summary,
20
+ started_at,
21
+ finished_at,
22
+ created_at
23
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
24
+ .run(record.id, record.projectId, record.butlerSessionId, record.sourcePatrolRunId, record.verificationType, record.status, record.targetRef, record.specJson, record.artifactRefsJson, record.resultJson, record.summary, record.startedAt, record.finishedAt, record.createdAt);
25
+ return record;
26
+ }
27
+ listByProject(projectId, filters) {
28
+ const conditions = ["project_id = ?"];
29
+ const values = [projectId];
30
+ if (filters?.status) {
31
+ conditions.push("status = ?");
32
+ values.push(filters.status);
33
+ }
34
+ if (filters?.verificationType) {
35
+ conditions.push("verification_type = ?");
36
+ values.push(filters.verificationType);
37
+ }
38
+ return this.db
39
+ .prepare(`SELECT
40
+ id,
41
+ project_id,
42
+ butler_session_id,
43
+ source_patrol_run_id,
44
+ verification_type,
45
+ status,
46
+ target_ref,
47
+ spec_json,
48
+ artifact_refs_json,
49
+ result_json,
50
+ summary,
51
+ started_at,
52
+ finished_at,
53
+ created_at
54
+ FROM verification_runs
55
+ WHERE ${conditions.join(" AND ")}
56
+ ORDER BY created_at DESC`)
57
+ .all(...values)
58
+ .map((row) => row);
59
+ }
60
+ findById(id) {
61
+ const row = this.db
62
+ .prepare(`SELECT
63
+ id,
64
+ project_id,
65
+ butler_session_id,
66
+ source_patrol_run_id,
67
+ verification_type,
68
+ status,
69
+ target_ref,
70
+ spec_json,
71
+ artifact_refs_json,
72
+ result_json,
73
+ summary,
74
+ started_at,
75
+ finished_at,
76
+ created_at
77
+ FROM verification_runs
78
+ WHERE id = ?`)
79
+ .get(id);
80
+ return row ?? null;
81
+ }
82
+ listRunningByProject(projectId) {
83
+ return this.db
84
+ .prepare(`SELECT
85
+ id,
86
+ project_id,
87
+ butler_session_id,
88
+ source_patrol_run_id,
89
+ verification_type,
90
+ status,
91
+ target_ref,
92
+ spec_json,
93
+ artifact_refs_json,
94
+ result_json,
95
+ summary,
96
+ started_at,
97
+ finished_at,
98
+ created_at
99
+ FROM verification_runs
100
+ WHERE project_id = ?
101
+ AND status IN ('queued', 'running')
102
+ ORDER BY created_at DESC`)
103
+ .all(projectId)
104
+ .map((row) => row);
105
+ }
106
+ update(record) {
107
+ this.db
108
+ .prepare(`UPDATE verification_runs
109
+ SET butler_session_id = ?,
110
+ source_patrol_run_id = ?,
111
+ verification_type = ?,
112
+ status = ?,
113
+ target_ref = ?,
114
+ spec_json = ?,
115
+ artifact_refs_json = ?,
116
+ result_json = ?,
117
+ summary = ?,
118
+ started_at = ?,
119
+ finished_at = ?
120
+ WHERE id = ?`)
121
+ .run(record.butlerSessionId, record.sourcePatrolRunId, record.verificationType, record.status, record.targetRef, record.specJson, record.artifactRefsJson, record.resultJson, record.summary, record.startedAt, record.finishedAt, record.id);
122
+ return this.findById(record.id);
123
+ }
124
+ }
125
+ //# sourceMappingURL=verification-run-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-run-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/verification-run-repository.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,yBAAyB;IACP;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD,MAAM,CAAC,MAA6B;QAClC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;;;;;6DAeqD,CACtD;aACA,GAAG,CACF,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,CACjB,CAAC;QAEJ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CACX,SAAiB,EACjB,OAAwD;QAExD,MAAM,UAAU,GAAa,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,MAAM,GAAc,CAAC,SAAS,CAAC,CAAC;QAEtC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CACN;;;;;;;;;;;;;;;;iBAgBS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;kCACP,CAC3B;aACA,GAAG,CAAC,GAAG,MAAM,CAAC;aACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAA4B,CAAC,CAAC;IAChD,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;;;;;;;;;;;;;;;sBAgBc,CACf;aACA,GAAG,CAAC,EAAE,CAAsC,CAAC;QAEhD,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,oBAAoB,CAAC,SAAiB;QACpC,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CACN;;;;;;;;;;;;;;;;;;kCAkB0B,CAC3B;aACA,GAAG,CAAC,SAAS,CAAC;aACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAA4B,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,MAA6B;QAClC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;;sBAYc,CACf;aACA,GAAG,CACF,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,EAAE,CACV,CAAC;QAEJ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -21,6 +21,9 @@ export function createDatabaseClient(databasePath) {
21
21
  ensureTerminalCommandTemplatePortColumn(db);
22
22
  ensureTerminalCommandTemplateRuntimeTypeColumn(db);
23
23
  ensureTerminalCommandTemplateProxySchema(db);
24
+ ensureButlerProfileSchema(db);
25
+ ensureButlerFollowUpTaskSchema(db);
26
+ ensureButlerSessionSummarySchema(db);
24
27
  return {
25
28
  db,
26
29
  close: () => db.close()
@@ -35,6 +38,42 @@ function ensureWorkspaceRemovalColumn(db) {
35
38
  }
36
39
  db.exec("ALTER TABLE workspaces ADD COLUMN removed_at TEXT");
37
40
  }
41
+ function ensureButlerProfileSchema(db) {
42
+ const columns = db
43
+ .prepare("PRAGMA table_info(butler_profiles)")
44
+ .all();
45
+ if (columns.some((column) => column.name === "display_name")) {
46
+ return;
47
+ }
48
+ db.exec("ALTER TABLE butler_profiles ADD COLUMN display_name TEXT NOT NULL DEFAULT '代码助手'");
49
+ }
50
+ function ensureButlerFollowUpTaskSchema(db) {
51
+ const columns = db
52
+ .prepare("PRAGMA table_info(butler_follow_up_tasks)")
53
+ .all();
54
+ const columnNames = new Set(columns.map((column) => column.name));
55
+ if (columns.length === 0) {
56
+ return;
57
+ }
58
+ if (!columnNames.has("completion_criteria")) {
59
+ db.exec("ALTER TABLE butler_follow_up_tasks ADD COLUMN completion_criteria TEXT NOT NULL DEFAULT ''");
60
+ }
61
+ if (!columnNames.has("max_auto_continue_count")) {
62
+ db.exec("ALTER TABLE butler_follow_up_tasks ADD COLUMN max_auto_continue_count INTEGER NOT NULL DEFAULT 5");
63
+ }
64
+ if (!columnNames.has("rounds_json")) {
65
+ db.exec("ALTER TABLE butler_follow_up_tasks ADD COLUMN rounds_json TEXT NOT NULL DEFAULT '[]'");
66
+ }
67
+ }
68
+ function ensureButlerSessionSummarySchema(db) {
69
+ const columns = db
70
+ .prepare("PRAGMA table_info(butler_session_summary_states)")
71
+ .all();
72
+ if (columns.length === 0 || columns.some((column) => column.name === "last_summarized_sequence")) {
73
+ return;
74
+ }
75
+ db.exec("ALTER TABLE butler_session_summary_states ADD COLUMN last_summarized_sequence INTEGER");
76
+ }
38
77
  function ensureSessionProviderSchema(db) {
39
78
  const bindingSql = readTableSql(db, "session_bindings");
40
79
  const indexSql = readTableSql(db, "session_indices");
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"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"}
@@ -163,6 +163,24 @@ CREATE INDEX IF NOT EXISTS idx_session_message_attachments_message
163
163
  CREATE INDEX IF NOT EXISTS idx_session_message_attachments_client_request
164
164
  ON session_message_attachments(session_id, client_request_id);
165
165
 
166
+ CREATE TABLE IF NOT EXISTS session_message_origins (
167
+ session_id TEXT NOT NULL,
168
+ client_request_id TEXT NOT NULL,
169
+ message_id TEXT,
170
+ origin TEXT NOT NULL CHECK (origin IN ('butler_proxy', 'system')),
171
+ origin_ref TEXT,
172
+ content TEXT NOT NULL,
173
+ created_at TEXT NOT NULL,
174
+ updated_at TEXT NOT NULL,
175
+ PRIMARY KEY (session_id, client_request_id),
176
+ FOREIGN KEY (session_id) REFERENCES session_bindings(session_id)
177
+ );
178
+
179
+ CREATE INDEX IF NOT EXISTS idx_session_message_origins_message
180
+ ON session_message_origins(session_id, message_id);
181
+ CREATE INDEX IF NOT EXISTS idx_session_message_origins_origin
182
+ ON session_message_origins(session_id, origin, updated_at DESC);
183
+
166
184
  CREATE TABLE IF NOT EXISTS session_send_queue (
167
185
  id TEXT PRIMARY KEY,
168
186
  session_id TEXT NOT NULL,
@@ -367,6 +385,312 @@ CREATE TABLE IF NOT EXISTS terminal_command_templates (
367
385
  CREATE INDEX IF NOT EXISTS idx_terminal_templates_workspace_id
368
386
  ON terminal_command_templates(workspace_id);
369
387
 
388
+ CREATE TABLE IF NOT EXISTS butler_profiles (
389
+ id TEXT PRIMARY KEY CHECK (id = 'default'),
390
+ display_name TEXT NOT NULL,
391
+ provider_id TEXT NOT NULL CHECK (provider_id IN ('codex', 'claude-code')),
392
+ workspace_path TEXT NOT NULL,
393
+ agents_mode TEXT NOT NULL CHECK (agents_mode IN ('inline', 'file')),
394
+ agents_file_path TEXT,
395
+ agents_content TEXT NOT NULL,
396
+ persona_json TEXT NOT NULL,
397
+ focus_json TEXT NOT NULL,
398
+ initialized_at TEXT NOT NULL,
399
+ updated_at TEXT NOT NULL
400
+ );
401
+
402
+ CREATE TABLE IF NOT EXISTS butler_control_sessions (
403
+ id TEXT PRIMARY KEY,
404
+ provider_id TEXT NOT NULL CHECK (provider_id IN ('codex', 'claude-code')),
405
+ session_id TEXT NOT NULL UNIQUE,
406
+ status TEXT NOT NULL CHECK (status IN ('idle', 'running', 'failed', 'closed')),
407
+ last_context_version TEXT,
408
+ last_summary TEXT,
409
+ created_at TEXT NOT NULL,
410
+ updated_at TEXT NOT NULL,
411
+ FOREIGN KEY (session_id) REFERENCES session_bindings(session_id)
412
+ );
413
+
414
+ CREATE INDEX IF NOT EXISTS idx_butler_control_sessions_provider
415
+ ON butler_control_sessions(provider_id, updated_at DESC, created_at DESC);
416
+
417
+ CREATE TABLE IF NOT EXISTS butler_control_events (
418
+ id TEXT PRIMARY KEY,
419
+ control_session_id TEXT NOT NULL,
420
+ kind TEXT NOT NULL CHECK (kind IN ('action')),
421
+ action_type TEXT NOT NULL CHECK (
422
+ action_type IN ('open-project', 'resume-session', 'start-patrol', 'start-verification')
423
+ ),
424
+ status TEXT NOT NULL CHECK (status IN ('succeeded', 'failed')),
425
+ title TEXT NOT NULL,
426
+ content TEXT NOT NULL,
427
+ related_refs_json TEXT NOT NULL,
428
+ created_at TEXT NOT NULL,
429
+ FOREIGN KEY (control_session_id) REFERENCES butler_control_sessions(id) ON DELETE CASCADE
430
+ );
431
+
432
+ CREATE INDEX IF NOT EXISTS idx_butler_control_events_session_created_at
433
+ ON butler_control_events(control_session_id, created_at ASC);
434
+
435
+ CREATE TABLE IF NOT EXISTS butler_inbox_items (
436
+ id TEXT PRIMARY KEY,
437
+ project_id TEXT NOT NULL,
438
+ item_type TEXT NOT NULL CHECK (item_type IN ('bug', 'feature', 'change', 'task')),
439
+ title TEXT NOT NULL,
440
+ content TEXT NOT NULL,
441
+ priority TEXT NOT NULL CHECK (priority IN ('low', 'medium', 'high')),
442
+ status TEXT NOT NULL CHECK (status IN ('pending', 'in_progress', 'closed')),
443
+ created_at TEXT NOT NULL,
444
+ updated_at TEXT NOT NULL,
445
+ closed_at TEXT,
446
+ FOREIGN KEY (project_id) REFERENCES butler_projects(id) ON DELETE CASCADE
447
+ );
448
+
449
+ CREATE INDEX IF NOT EXISTS idx_butler_inbox_items_project_updated_at
450
+ ON butler_inbox_items(project_id, updated_at DESC, created_at DESC);
451
+ CREATE INDEX IF NOT EXISTS idx_butler_inbox_items_status_updated_at
452
+ ON butler_inbox_items(status, updated_at DESC, created_at DESC);
453
+
454
+ CREATE TABLE IF NOT EXISTS butler_notification_archives (
455
+ user_id TEXT NOT NULL,
456
+ notification_id TEXT NOT NULL,
457
+ archived_at TEXT NOT NULL,
458
+ updated_at TEXT NOT NULL,
459
+ PRIMARY KEY (user_id, notification_id),
460
+ FOREIGN KEY (user_id) REFERENCES auth_users(id) ON DELETE CASCADE
461
+ );
462
+
463
+ CREATE INDEX IF NOT EXISTS idx_butler_notification_archives_user_updated_at
464
+ ON butler_notification_archives(user_id, updated_at DESC);
465
+
466
+ CREATE TABLE IF NOT EXISTS butler_projects (
467
+ id TEXT PRIMARY KEY,
468
+ workspace_id TEXT NOT NULL,
469
+ name TEXT NOT NULL,
470
+ repo_root TEXT NOT NULL,
471
+ default_provider TEXT,
472
+ instruction_profile_id TEXT,
473
+ approval_mode TEXT NOT NULL CHECK (approval_mode IN ('readonly', 'controlled', 'auto')),
474
+ lifecycle_status TEXT NOT NULL CHECK (lifecycle_status IN ('active', 'paused', 'archived')),
475
+ risk_level TEXT NOT NULL CHECK (risk_level IN ('low', 'medium', 'high')),
476
+ config_json TEXT NOT NULL,
477
+ last_patrol_at TEXT,
478
+ last_verification_at TEXT,
479
+ created_at TEXT NOT NULL,
480
+ updated_at TEXT NOT NULL,
481
+ archived_at TEXT,
482
+ FOREIGN KEY (workspace_id) REFERENCES workspaces(id),
483
+ UNIQUE (workspace_id, repo_root)
484
+ );
485
+
486
+ CREATE INDEX IF NOT EXISTS idx_butler_projects_workspace_id
487
+ ON butler_projects(workspace_id);
488
+ CREATE INDEX IF NOT EXISTS idx_butler_projects_status
489
+ ON butler_projects(lifecycle_status, updated_at DESC);
490
+
491
+ CREATE TABLE IF NOT EXISTS butler_sessions (
492
+ id TEXT PRIMARY KEY,
493
+ project_id TEXT NOT NULL,
494
+ session_id TEXT NOT NULL UNIQUE,
495
+ role TEXT NOT NULL CHECK (role IN ('patrol', 'execution', 'verification', 'adhoc')),
496
+ ownership_mode TEXT NOT NULL CHECK (ownership_mode IN ('managed', 'observed')),
497
+ status TEXT NOT NULL CHECK (status IN ('idle', 'running', 'blocked', 'failed', 'closed')),
498
+ last_summary TEXT,
499
+ last_checkpoint_at TEXT,
500
+ created_at TEXT NOT NULL,
501
+ updated_at TEXT NOT NULL,
502
+ FOREIGN KEY (project_id) REFERENCES butler_projects(id) ON DELETE CASCADE,
503
+ FOREIGN KEY (session_id) REFERENCES session_bindings(session_id)
504
+ );
505
+
506
+ CREATE INDEX IF NOT EXISTS idx_butler_sessions_project_id
507
+ ON butler_sessions(project_id, updated_at DESC);
508
+ CREATE INDEX IF NOT EXISTS idx_butler_sessions_status
509
+ ON butler_sessions(status, updated_at DESC);
510
+
511
+ CREATE TABLE IF NOT EXISTS butler_follow_up_tasks (
512
+ id TEXT PRIMARY KEY,
513
+ project_id TEXT NOT NULL,
514
+ butler_session_id TEXT NOT NULL,
515
+ session_id TEXT NOT NULL,
516
+ created_by_user_id TEXT NOT NULL,
517
+ objective TEXT NOT NULL,
518
+ completion_criteria TEXT NOT NULL DEFAULT '',
519
+ max_auto_continue_count INTEGER NOT NULL DEFAULT 5,
520
+ status TEXT NOT NULL CHECK (
521
+ status IN ('active', 'waiting_user', 'completed', 'failed', 'cancelled')
522
+ ),
523
+ check_interval_seconds INTEGER NOT NULL,
524
+ last_checked_at TEXT,
525
+ next_check_at TEXT,
526
+ last_observed_running_state TEXT,
527
+ last_observed_message_at TEXT,
528
+ last_observed_message_count INTEGER NOT NULL DEFAULT 0,
529
+ last_automation_summary TEXT,
530
+ last_automation_at TEXT,
531
+ auto_continue_count INTEGER NOT NULL DEFAULT 0,
532
+ waiting_reason TEXT,
533
+ rounds_json TEXT NOT NULL DEFAULT '[]',
534
+ created_at TEXT NOT NULL,
535
+ updated_at TEXT NOT NULL,
536
+ completed_at TEXT,
537
+ FOREIGN KEY (project_id) REFERENCES butler_projects(id) ON DELETE CASCADE,
538
+ FOREIGN KEY (butler_session_id) REFERENCES butler_sessions(id) ON DELETE CASCADE,
539
+ FOREIGN KEY (session_id) REFERENCES session_bindings(session_id) ON DELETE CASCADE,
540
+ FOREIGN KEY (created_by_user_id) REFERENCES auth_users(id)
541
+ );
542
+
543
+ CREATE INDEX IF NOT EXISTS idx_butler_follow_up_tasks_status
544
+ ON butler_follow_up_tasks(status, next_check_at ASC, updated_at DESC);
545
+ CREATE INDEX IF NOT EXISTS idx_butler_follow_up_tasks_session
546
+ ON butler_follow_up_tasks(butler_session_id, status, updated_at DESC);
547
+
548
+ CREATE TABLE IF NOT EXISTS butler_session_summary_states (
549
+ butler_session_id TEXT PRIMARY KEY,
550
+ source_message_count INTEGER NOT NULL DEFAULT 0,
551
+ source_last_message_at TEXT,
552
+ last_summarized_at TEXT,
553
+ last_summarized_sequence INTEGER,
554
+ debounce_until TEXT,
555
+ status TEXT NOT NULL CHECK (status IN ('idle', 'scheduled', 'running', 'failed')),
556
+ error_detail TEXT,
557
+ updated_at TEXT NOT NULL,
558
+ FOREIGN KEY (butler_session_id) REFERENCES butler_sessions(id) ON DELETE CASCADE
559
+ );
560
+
561
+ CREATE INDEX IF NOT EXISTS idx_butler_session_summary_states_status
562
+ ON butler_session_summary_states(status, debounce_until ASC, updated_at ASC);
563
+
564
+ CREATE TABLE IF NOT EXISTS session_checkpoints (
565
+ id TEXT PRIMARY KEY,
566
+ butler_session_id TEXT NOT NULL,
567
+ checkpoint_seq INTEGER NOT NULL,
568
+ source_kind TEXT NOT NULL CHECK (
569
+ source_kind IN ('snapshot', 'summary', 'verification', 'manual')
570
+ ),
571
+ progress_state TEXT NOT NULL CHECK (
572
+ progress_state IN ('unknown', 'working', 'blocked', 'done')
573
+ ),
574
+ summary TEXT NOT NULL,
575
+ risk_flags_json TEXT NOT NULL,
576
+ next_action_json TEXT NOT NULL,
577
+ captured_at TEXT NOT NULL,
578
+ FOREIGN KEY (butler_session_id) REFERENCES butler_sessions(id) ON DELETE CASCADE,
579
+ UNIQUE (butler_session_id, checkpoint_seq)
580
+ );
581
+
582
+ CREATE INDEX IF NOT EXISTS idx_session_checkpoints_session_id
583
+ ON session_checkpoints(butler_session_id, checkpoint_seq DESC);
584
+ CREATE INDEX IF NOT EXISTS idx_session_checkpoints_captured_at
585
+ ON session_checkpoints(captured_at DESC);
586
+
587
+ CREATE TABLE IF NOT EXISTS project_memories (
588
+ id TEXT PRIMARY KEY,
589
+ project_id TEXT NOT NULL,
590
+ source_butler_session_id TEXT,
591
+ source_checkpoint_id TEXT,
592
+ memory_type TEXT NOT NULL CHECK (
593
+ memory_type IN ('arch', 'rule', 'decision', 'incident', 'verify', 'note')
594
+ ),
595
+ title TEXT NOT NULL,
596
+ scope_path TEXT,
597
+ content TEXT NOT NULL,
598
+ tags_json TEXT NOT NULL,
599
+ confidence REAL NOT NULL CHECK (confidence >= 0 AND confidence <= 1),
600
+ status TEXT NOT NULL CHECK (
601
+ status IN ('candidate', 'active', 'superseded', 'archived')
602
+ ),
603
+ evidence_json TEXT NOT NULL,
604
+ superseded_by TEXT,
605
+ created_at TEXT NOT NULL,
606
+ updated_at TEXT NOT NULL,
607
+ FOREIGN KEY (project_id) REFERENCES butler_projects(id) ON DELETE CASCADE,
608
+ FOREIGN KEY (source_butler_session_id) REFERENCES butler_sessions(id),
609
+ FOREIGN KEY (source_checkpoint_id) REFERENCES session_checkpoints(id)
610
+ );
611
+
612
+ CREATE INDEX IF NOT EXISTS idx_project_memories_project_id
613
+ ON project_memories(project_id, updated_at DESC);
614
+ CREATE INDEX IF NOT EXISTS idx_project_memories_project_status
615
+ ON project_memories(project_id, status, updated_at DESC);
616
+ CREATE INDEX IF NOT EXISTS idx_project_memories_project_scope
617
+ ON project_memories(project_id, scope_path, updated_at DESC);
618
+
619
+ CREATE TABLE IF NOT EXISTS patrol_plans (
620
+ id TEXT PRIMARY KEY,
621
+ project_id TEXT NOT NULL,
622
+ name TEXT NOT NULL,
623
+ trigger_type TEXT NOT NULL CHECK (trigger_type IN ('manual', 'interval', 'cron')),
624
+ trigger_config_json TEXT NOT NULL,
625
+ execution_mode TEXT NOT NULL CHECK (execution_mode IN ('readonly', 'controlled')),
626
+ patrol_scope_json TEXT NOT NULL,
627
+ enabled INTEGER NOT NULL CHECK (enabled IN (0, 1)),
628
+ last_scheduled_at TEXT,
629
+ next_run_at TEXT,
630
+ created_at TEXT NOT NULL,
631
+ updated_at TEXT NOT NULL,
632
+ FOREIGN KEY (project_id) REFERENCES butler_projects(id) ON DELETE CASCADE
633
+ );
634
+
635
+ CREATE INDEX IF NOT EXISTS idx_patrol_plans_project_id
636
+ ON patrol_plans(project_id, updated_at DESC);
637
+ CREATE INDEX IF NOT EXISTS idx_patrol_plans_enabled_next_run_at
638
+ ON patrol_plans(enabled, next_run_at);
639
+
640
+ CREATE TABLE IF NOT EXISTS patrol_runs (
641
+ id TEXT PRIMARY KEY,
642
+ project_id TEXT NOT NULL,
643
+ plan_id TEXT,
644
+ triggered_by TEXT NOT NULL CHECK (triggered_by IN ('scheduler', 'user', 'system')),
645
+ trigger_ref TEXT,
646
+ butler_session_id TEXT,
647
+ status TEXT NOT NULL CHECK (
648
+ status IN ('queued', 'running', 'succeeded', 'failed', 'cancelled')
649
+ ),
650
+ summary TEXT,
651
+ risk_level TEXT CHECK (risk_level IS NULL OR risk_level IN ('low', 'medium', 'high')),
652
+ suggestions_json TEXT NOT NULL,
653
+ started_at TEXT,
654
+ finished_at TEXT,
655
+ created_at TEXT NOT NULL,
656
+ FOREIGN KEY (project_id) REFERENCES butler_projects(id) ON DELETE CASCADE,
657
+ FOREIGN KEY (plan_id) REFERENCES patrol_plans(id),
658
+ FOREIGN KEY (butler_session_id) REFERENCES butler_sessions(id)
659
+ );
660
+
661
+ CREATE INDEX IF NOT EXISTS idx_patrol_runs_project_started_at
662
+ ON patrol_runs(project_id, created_at DESC);
663
+ CREATE INDEX IF NOT EXISTS idx_patrol_runs_project_status
664
+ ON patrol_runs(project_id, status, created_at DESC);
665
+
666
+ CREATE TABLE IF NOT EXISTS verification_runs (
667
+ id TEXT PRIMARY KEY,
668
+ project_id TEXT NOT NULL,
669
+ butler_session_id TEXT,
670
+ source_patrol_run_id TEXT,
671
+ verification_type TEXT NOT NULL CHECK (
672
+ verification_type IN ('test', 'health', 'browser', 'visual', 'metric')
673
+ ),
674
+ status TEXT NOT NULL CHECK (
675
+ status IN ('queued', 'running', 'passed', 'failed', 'skipped')
676
+ ),
677
+ target_ref TEXT,
678
+ spec_json TEXT NOT NULL,
679
+ artifact_refs_json TEXT NOT NULL,
680
+ result_json TEXT NOT NULL,
681
+ summary TEXT,
682
+ started_at TEXT,
683
+ finished_at TEXT,
684
+ created_at TEXT NOT NULL,
685
+ FOREIGN KEY (project_id) REFERENCES butler_projects(id) ON DELETE CASCADE,
686
+ FOREIGN KEY (butler_session_id) REFERENCES butler_sessions(id)
687
+ );
688
+
689
+ CREATE INDEX IF NOT EXISTS idx_verification_runs_project_created_at
690
+ ON verification_runs(project_id, created_at DESC);
691
+ CREATE INDEX IF NOT EXISTS idx_verification_runs_project_status
692
+ ON verification_runs(project_id, status, created_at DESC);
693
+
370
694
  INSERT INTO bootstrap_state (id, initialized)
371
695
  VALUES ('default', 0)
372
696
  ON CONFLICT(id) DO NOTHING;