@jingyi0605/codingns 0.8.5 → 0.9.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 (515) hide show
  1. package/bin/codingns.mjs +7 -156
  2. package/dist/public/assets/AdaptiveButlerPage-kkJDsnCO.js +2 -0
  3. package/dist/public/assets/{App-BOHBGFOd.js → App-DrNI9lWA.js} +6 -6
  4. package/dist/public/assets/{BootstrapPage-BxHQT4nA.js → BootstrapPage-QgVH5Mps.js} +1 -1
  5. package/dist/public/assets/{ConversationPage-DWFsF6BB.js → ConversationPage-DVk8VfIj.js} +6 -6
  6. package/dist/public/assets/{DesktopDetachPreviewPage-DOgEjYEf.js → DesktopDetachPreviewPage-BhfP0TpH.js} +1 -1
  7. package/dist/public/assets/DesktopModal-DRmDrv0S.js +1 -0
  8. package/dist/public/assets/DesktopWindowPage-DNbJXnSs.js +2 -0
  9. package/dist/public/assets/FileContextPanel---fLO4ve.js +1 -0
  10. package/dist/public/assets/GitSidebar-sXUE0TqT.js +6 -0
  11. package/dist/public/assets/MobileCreateSessionSheet-BftZ5pvb.js +1 -0
  12. package/dist/public/assets/MobileSheet-nw5SCa3N.js +1 -0
  13. package/dist/public/assets/{MobileTopHeaderFrame-lcp2GscV.js → MobileTopHeaderFrame-DH_D02Wy.js} +1 -1
  14. package/dist/public/assets/MobileWorkspaceSwitcherHeader-2K406G5p.js +1 -0
  15. package/dist/public/assets/{PluginAccessOverview-DGcKAMQl.js → PluginAccessOverview-BVJihw3D.js} +1 -1
  16. package/dist/public/assets/PluginContainerPage-CR4vStvr.js +1 -0
  17. package/dist/public/assets/{PluginDetailPage-CAJ7LFpD.js → PluginDetailPage-CrMX0Mnm.js} +1 -1
  18. package/dist/public/assets/{PluginsListPage-BxZG1NyT.js → PluginsListPage-FtIL71Yg.js} +1 -1
  19. package/dist/public/assets/{RelayConnectEntryPage-CfNO_TIl.js → RelayConnectEntryPage-Bt1apX53.js} +1 -1
  20. package/dist/public/assets/{ServerSettingsModal-by36Z_5k.js → ServerSettingsModal-D-guzPrI.js} +1 -1
  21. package/dist/public/assets/SessionIndexPage-CX2FppcJ.js +1 -0
  22. package/dist/public/assets/SettingsPage-BI2Olcvr.js +2 -0
  23. package/dist/public/assets/TerminalManagerPanel-B5MKGPy-.js +1 -0
  24. package/dist/public/assets/{TerminalPage-C4LNoPBp.js → TerminalPage-C2dTNGHK.js} +2 -2
  25. package/dist/public/assets/TerminalRuntimeFallbackModal-DAqOxFD8.js +1 -0
  26. package/dist/public/assets/{ToolFilesPage-47zbdgTW.js → ToolFilesPage-IsNwyE6T.js} +1 -1
  27. package/dist/public/assets/{ToolGitPage-Fuk_b_jg.js → ToolGitPage-BK1JBERN.js} +1 -1
  28. package/dist/public/assets/{ToolProcessesPage-sWSMWD-9.js → ToolProcessesPage-DwTYUQCK.js} +1 -1
  29. package/dist/public/assets/{ToolsHomePage-R1mZlbZi.js → ToolsHomePage-BLOy7lPg.js} +1 -1
  30. package/dist/public/assets/{WorkbenchLandingPage-CqmiFH2u.js → WorkbenchLandingPage-CqZKR6EA.js} +1 -1
  31. package/dist/public/assets/WorkbenchLayout-BksVkkFF.css +1 -0
  32. package/dist/public/assets/WorkbenchLayout-CJHQtwuL.js +1022 -0
  33. package/dist/public/assets/{WorkbenchModal-C7qoQElW.js → WorkbenchModal-BM-OeW-b.js} +1 -1
  34. package/dist/public/assets/WorkbenchShellRoute-2bKI6Q9k.js +1 -0
  35. package/dist/public/assets/WorkbenchShellRoute-BjuZD101.css +1 -0
  36. package/dist/public/assets/WorkspaceDebugDetailPage-BMsEN5iG.js +1 -0
  37. package/dist/public/assets/WorkspaceDetailPage-5H9Gosx2.js +1 -0
  38. package/dist/public/assets/WorkspaceHomePage-DQiXKgiP.js +1 -0
  39. package/dist/public/assets/{client-runtime-manager-wmCJZKYd.js → client-runtime-manager-CgPJq21V.js} +1 -1
  40. package/dist/public/assets/index-BARqMVSw.css +1 -0
  41. package/dist/public/assets/index-BUoNjVrY.js +50 -0
  42. package/dist/public/assets/{login-direct-candidate-resolver-BOAgTuUf.js → login-direct-candidate-resolver-CGaxAXV8.js} +1 -1
  43. package/dist/public/assets/{plugin-permission-copy-Cq99cnzV.js → plugin-permission-copy-BR9gWy8b.js} +1 -1
  44. package/dist/public/assets/{plugins-api-BQTV5DOp.js → plugins-api-CdCsrG2e.js} +1 -1
  45. package/dist/public/assets/{preferences-service-DJxbEEeg.js → preferences-service-lOhnlxzP.js} +1 -1
  46. package/dist/public/assets/{relay-entry-D-LfvdiX.js → relay-entry-CQpxTS8y.js} +1 -1
  47. package/dist/public/assets/{terminal-runtime-meta-BJmy8dyK.js → terminal-runtime-meta-oteTx66X.js} +1 -1
  48. package/dist/public/assets/useRegisteredDebugTemplates-Bu2ykZ6s.js +1 -0
  49. package/dist/public/assets/workbench-navigation-DlgXuFW2.js +1 -0
  50. package/dist/public/index.html +2 -2
  51. package/dist/server/config/env.d.ts +1 -0
  52. package/dist/server/config/env.js +3 -0
  53. package/dist/server/config/env.js.map +1 -1
  54. package/dist/server/middlewares/auth-guard.js +10 -5
  55. package/dist/server/middlewares/auth-guard.js.map +1 -1
  56. package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.d.ts +11 -0
  57. package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.js +22 -0
  58. package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.js.map +1 -0
  59. package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.d.ts +23 -0
  60. package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.js +23 -0
  61. package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.js.map +1 -0
  62. package/dist/server/modules/affairs-indexer/contracts/src/index.d.ts +4 -0
  63. package/dist/server/modules/affairs-indexer/contracts/src/index.js +5 -0
  64. package/dist/server/modules/affairs-indexer/contracts/src/index.js.map +1 -0
  65. package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.d.ts +7 -0
  66. package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.js +2 -0
  67. package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.js.map +1 -0
  68. package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.d.ts +16 -0
  69. package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.js +2 -0
  70. package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.js.map +1 -0
  71. package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.d.ts +10 -0
  72. package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.js +215 -0
  73. package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.js.map +1 -0
  74. package/dist/server/modules/affairs-indexer/core/src/index.d.ts +31 -0
  75. package/dist/server/modules/affairs-indexer/core/src/index.js +32 -0
  76. package/dist/server/modules/affairs-indexer/core/src/index.js.map +1 -0
  77. package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.d.ts +20 -0
  78. package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.js +47 -0
  79. package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.js.map +1 -0
  80. package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.d.ts +17 -0
  81. package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.js +63 -0
  82. package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.js.map +1 -0
  83. package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.d.ts +12 -0
  84. package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.js +42 -0
  85. package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.js.map +1 -0
  86. package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.d.ts +7 -0
  87. package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.js +107 -0
  88. package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.js.map +1 -0
  89. package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.d.ts +19 -0
  90. package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.js +37 -0
  91. package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.js.map +1 -0
  92. package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.d.ts +7 -0
  93. package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.js +123 -0
  94. package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.js.map +1 -0
  95. package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.d.ts +8 -0
  96. package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.js +111 -0
  97. package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.js.map +1 -0
  98. package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.d.ts +42 -0
  99. package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.js +2 -0
  100. package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.js.map +1 -0
  101. package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.d.ts +18 -0
  102. package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.js +91 -0
  103. package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.js.map +1 -0
  104. package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.d.ts +18 -0
  105. package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.js +59 -0
  106. package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.js.map +1 -0
  107. package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.d.ts +48 -0
  108. package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.js +193 -0
  109. package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.js.map +1 -0
  110. package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.d.ts +7 -0
  111. package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.js +371 -0
  112. package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.js.map +1 -0
  113. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.d.ts +10 -0
  114. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.js +55 -0
  115. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.js.map +1 -0
  116. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.d.ts +9 -0
  117. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.js +2 -0
  118. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.js.map +1 -0
  119. package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.d.ts +7 -0
  120. package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.js +130 -0
  121. package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.js.map +1 -0
  122. package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.d.ts +7 -0
  123. package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.js +228 -0
  124. package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.js.map +1 -0
  125. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.d.ts +205 -0
  126. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js +1471 -0
  127. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js.map +1 -0
  128. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.d.ts +161 -0
  129. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.js +1350 -0
  130. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.js.map +1 -0
  131. package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.d.ts +32 -0
  132. package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.js +208 -0
  133. package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.js.map +1 -0
  134. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.d.ts +30 -0
  135. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js +66 -0
  136. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js.map +1 -0
  137. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.d.ts +33 -0
  138. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js +705 -0
  139. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js.map +1 -0
  140. package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.d.ts +80 -0
  141. package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.js +193 -0
  142. package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.js.map +1 -0
  143. package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.d.ts +77 -0
  144. package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.js +467 -0
  145. package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.js.map +1 -0
  146. package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.d.ts +17 -0
  147. package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.js +264 -0
  148. package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.js.map +1 -0
  149. package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.d.ts +11 -0
  150. package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.js +76 -0
  151. package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.js.map +1 -0
  152. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.d.ts +26 -0
  153. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js +305 -0
  154. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js.map +1 -0
  155. package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.d.ts +53 -0
  156. package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.js +566 -0
  157. package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.js.map +1 -0
  158. package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.d.ts +47 -0
  159. package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.js +227 -0
  160. package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.js.map +1 -0
  161. package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.d.ts +5 -0
  162. package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.js +245 -0
  163. package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.js.map +1 -0
  164. package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.d.ts +14 -0
  165. package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.js +87 -0
  166. package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.js.map +1 -0
  167. package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.d.ts +13 -0
  168. package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.js +16 -0
  169. package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.js.map +1 -0
  170. package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.d.ts +22 -0
  171. package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.js +430 -0
  172. package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.js.map +1 -0
  173. package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.d.ts +26 -0
  174. package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.js +19 -0
  175. package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.js.map +1 -0
  176. package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.d.ts +21 -0
  177. package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.js +94 -0
  178. package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.js.map +1 -0
  179. package/dist/server/modules/affairs-indexer/core/src/utils/abort.d.ts +2 -0
  180. package/dist/server/modules/affairs-indexer/core/src/utils/abort.js +13 -0
  181. package/dist/server/modules/affairs-indexer/core/src/utils/abort.js.map +1 -0
  182. package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.d.ts +9 -0
  183. package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.js +64 -0
  184. package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.js.map +1 -0
  185. package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.d.ts +10 -0
  186. package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.js +230 -0
  187. package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.js.map +1 -0
  188. package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.d.ts +2 -0
  189. package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.js +19 -0
  190. package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.js.map +1 -0
  191. package/dist/server/modules/affairs-indexer/internal-command-runner.d.ts +31 -0
  192. package/dist/server/modules/affairs-indexer/internal-command-runner.js +643 -0
  193. package/dist/server/modules/affairs-indexer/internal-command-runner.js.map +1 -0
  194. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +0 -49
  195. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +10 -56
  196. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  197. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +2 -46
  198. package/dist/server/modules/assistant-capability/assistant-capability-service.js +15 -158
  199. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  200. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.d.ts +4 -2
  201. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js +62 -21
  202. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js.map +1 -1
  203. package/dist/server/modules/butler/butler-control-session-service.d.ts +3 -4
  204. package/dist/server/modules/butler/butler-control-session-service.js +39 -62
  205. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  206. package/dist/server/modules/butler/butler-controller.d.ts +11 -3
  207. package/dist/server/modules/butler/butler-controller.js +19 -4
  208. package/dist/server/modules/butler/butler-controller.js.map +1 -1
  209. package/dist/server/modules/butler/butler-follow-up-service.d.ts +3 -0
  210. package/dist/server/modules/butler/butler-follow-up-service.js +11 -1
  211. package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
  212. package/dist/server/modules/butler/butler-inbox-service.d.ts +3 -0
  213. package/dist/server/modules/butler/butler-inbox-service.js +14 -2
  214. package/dist/server/modules/butler/butler-inbox-service.js.map +1 -1
  215. package/dist/server/modules/butler/butler-profile-service.d.ts +1 -1
  216. package/dist/server/modules/butler/butler-profile-service.js +34 -63
  217. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  218. package/dist/server/modules/butler/butler-project-service.d.ts +1 -3
  219. package/dist/server/modules/butler/butler-project-service.js +1 -7
  220. package/dist/server/modules/butler/butler-project-service.js.map +1 -1
  221. package/dist/server/modules/butler/butler-session-service.d.ts +4 -0
  222. package/dist/server/modules/butler/butler-session-service.js +127 -0
  223. package/dist/server/modules/butler/butler-session-service.js.map +1 -1
  224. package/dist/server/modules/butler/butler-session-summary-service.js +0 -2
  225. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
  226. package/dist/server/modules/butler/butler-workspace-context.d.ts +5 -1
  227. package/dist/server/modules/butler/butler-workspace-context.js +21 -12
  228. package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
  229. package/dist/server/modules/file/file-content-service.d.ts +11 -0
  230. package/dist/server/modules/file/file-content-service.js +55 -0
  231. package/dist/server/modules/file/file-content-service.js.map +1 -1
  232. package/dist/server/modules/file/file-controller.d.ts +36 -2
  233. package/dist/server/modules/file/file-controller.js +461 -19
  234. package/dist/server/modules/file/file-controller.js.map +1 -1
  235. package/dist/server/modules/file/file-preview-link-service.d.ts +1 -0
  236. package/dist/server/modules/file/file-preview-link-service.js +25 -0
  237. package/dist/server/modules/file/file-preview-link-service.js.map +1 -1
  238. package/dist/server/modules/file/file-preview-service.js +15 -4
  239. package/dist/server/modules/file/file-preview-service.js.map +1 -1
  240. package/dist/server/modules/file/file-preview-types.d.ts +9 -1
  241. package/dist/server/modules/file/file-preview-types.js +8 -1
  242. package/dist/server/modules/file/file-preview-types.js.map +1 -1
  243. package/dist/server/modules/file/file-search-service.js +200 -12
  244. package/dist/server/modules/file/file-search-service.js.map +1 -1
  245. package/dist/server/modules/file/recent-modified-file-service.d.ts +15 -0
  246. package/dist/server/modules/file/recent-modified-file-service.js +102 -0
  247. package/dist/server/modules/file/recent-modified-file-service.js.map +1 -0
  248. package/dist/server/modules/file/runtime/codingns-workspace-bridge.js +24 -5
  249. package/dist/server/modules/file/workspace-file-bridge-service.d.ts +20 -0
  250. package/dist/server/modules/file/workspace-file-bridge-service.js +22 -0
  251. package/dist/server/modules/file/workspace-file-bridge-service.js.map +1 -1
  252. package/dist/server/modules/file/workspace-file-bridge-watch-service.d.ts +9 -0
  253. package/dist/server/modules/file/workspace-file-bridge-watch-service.js +28 -0
  254. package/dist/server/modules/file/workspace-file-bridge-watch-service.js.map +1 -1
  255. package/dist/server/modules/file/workspace-index-apply-service.d.ts +25 -0
  256. package/dist/server/modules/file/workspace-index-apply-service.js +42 -0
  257. package/dist/server/modules/file/workspace-index-apply-service.js.map +1 -0
  258. package/dist/server/modules/office/office-controller.d.ts +15 -1
  259. package/dist/server/modules/office/office-controller.js +26 -1
  260. package/dist/server/modules/office/office-controller.js.map +1 -1
  261. package/dist/server/modules/office/onlyoffice-integration-service.d.ts +78 -0
  262. package/dist/server/modules/office/onlyoffice-integration-service.js +610 -0
  263. package/dist/server/modules/office/onlyoffice-integration-service.js.map +1 -0
  264. package/dist/server/modules/plugins/plugin-file-gateway-service.d.ts +12 -0
  265. package/dist/server/modules/plugins/plugin-file-gateway-service.js +13 -0
  266. package/dist/server/modules/plugins/plugin-file-gateway-service.js.map +1 -1
  267. package/dist/server/modules/preferences/profile-service.d.ts +1 -0
  268. package/dist/server/modules/preferences/profile-service.js +27 -3
  269. package/dist/server/modules/preferences/profile-service.js.map +1 -1
  270. package/dist/server/modules/sessions/codex-app-server-helper-process.js +0 -8
  271. package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
  272. package/dist/server/modules/sessions/session-controller.d.ts +1 -0
  273. package/dist/server/modules/sessions/session-controller.js +3 -0
  274. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  275. package/dist/server/modules/sessions/session-history-service.d.ts +2 -0
  276. package/dist/server/modules/sessions/session-history-service.js +78 -3
  277. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  278. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +1 -0
  279. package/dist/server/modules/sessions/session-live-runtime-service.js +4 -0
  280. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  281. package/dist/server/modules/sessions/session-permission-request-service.js +0 -4
  282. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  283. package/dist/server/modules/sessions/workspace-session-instruction-watch-service.d.ts +23 -0
  284. package/dist/server/modules/sessions/workspace-session-instruction-watch-service.js +122 -0
  285. package/dist/server/modules/sessions/workspace-session-instruction-watch-service.js.map +1 -0
  286. package/dist/server/modules/sessions/workspace-session-runtime-context-service.d.ts +15 -0
  287. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js +93 -10
  288. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js.map +1 -1
  289. package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +6 -7
  290. package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +2 -3
  291. package/dist/server/modules/system/host-resource-controller.d.ts +7 -0
  292. package/dist/server/modules/system/host-resource-controller.js +12 -0
  293. package/dist/server/modules/system/host-resource-controller.js.map +1 -0
  294. package/dist/server/modules/system/host-resource-service.d.ts +54 -0
  295. package/dist/server/modules/system/host-resource-service.js +162 -0
  296. package/dist/server/modules/system/host-resource-service.js.map +1 -0
  297. package/dist/server/modules/tasks/observability-service.d.ts +12 -2
  298. package/dist/server/modules/tasks/observability-service.js +13 -1
  299. package/dist/server/modules/tasks/observability-service.js.map +1 -1
  300. package/dist/server/modules/tasks/task-helper-client.d.ts +36 -2
  301. package/dist/server/modules/tasks/task-helper-client.js +201 -19
  302. package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
  303. package/dist/server/modules/tasks/task-helper-pool.d.ts +37 -0
  304. package/dist/server/modules/tasks/task-helper-pool.js +173 -0
  305. package/dist/server/modules/tasks/task-helper-pool.js.map +1 -0
  306. package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +27 -0
  307. package/dist/server/modules/tasks/task-helper-process-handlers.js +25 -1
  308. package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
  309. package/dist/server/modules/tasks/task-helper-process.js +75 -26
  310. package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
  311. package/dist/server/modules/tasks/task-helper-scheduling.d.ts +11 -0
  312. package/dist/server/modules/tasks/task-helper-scheduling.js +43 -0
  313. package/dist/server/modules/tasks/task-helper-scheduling.js.map +1 -0
  314. package/dist/server/modules/tasks/task-lane-executors.js +19 -3
  315. package/dist/server/modules/tasks/task-lane-executors.js.map +1 -1
  316. package/dist/server/modules/tasks/task-manager.d.ts +1 -0
  317. package/dist/server/modules/tasks/task-manager.js +3 -0
  318. package/dist/server/modules/tasks/task-manager.js.map +1 -1
  319. package/dist/server/modules/tasks/task-registry.d.ts +1 -0
  320. package/dist/server/modules/tasks/task-registry.js +3 -0
  321. package/dist/server/modules/tasks/task-registry.js.map +1 -1
  322. package/dist/server/modules/tasks/task-scheduler.d.ts +6 -0
  323. package/dist/server/modules/tasks/task-scheduler.js +162 -7
  324. package/dist/server/modules/tasks/task-scheduler.js.map +1 -1
  325. package/dist/server/modules/tasks/task-types.d.ts +29 -3
  326. package/dist/server/modules/tasks/task-types.js +15 -2
  327. package/dist/server/modules/tasks/task-types.js.map +1 -1
  328. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.d.ts +68 -0
  329. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js +303 -0
  330. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js.map +1 -0
  331. package/dist/server/modules/workbench/workbench-controller.d.ts +5 -0
  332. package/dist/server/modules/workbench/workbench-controller.js +31 -1
  333. package/dist/server/modules/workbench/workbench-controller.js.map +1 -1
  334. package/dist/server/modules/workbench/workbench-service.d.ts +9 -2
  335. package/dist/server/modules/workbench/workbench-service.js +55 -18
  336. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  337. package/dist/server/modules/workspace/affairs-library-controller.d.ts +125 -0
  338. package/dist/server/modules/workspace/affairs-library-controller.js +175 -0
  339. package/dist/server/modules/workspace/affairs-library-controller.js.map +1 -0
  340. package/dist/server/modules/workspace/affairs-library-debug-log.d.ts +23 -0
  341. package/dist/server/modules/workspace/affairs-library-debug-log.js +107 -0
  342. package/dist/server/modules/workspace/affairs-library-debug-log.js.map +1 -0
  343. package/dist/server/modules/workspace/affairs-library-dirty-watch-service.d.ts +52 -0
  344. package/dist/server/modules/workspace/affairs-library-dirty-watch-service.js +555 -0
  345. package/dist/server/modules/workspace/affairs-library-dirty-watch-service.js.map +1 -0
  346. package/dist/server/modules/workspace/affairs-library-preview-link-service.d.ts +30 -0
  347. package/dist/server/modules/workspace/affairs-library-preview-link-service.js +167 -0
  348. package/dist/server/modules/workspace/affairs-library-preview-link-service.js.map +1 -0
  349. package/dist/server/modules/workspace/affairs-library-refresh-contract.d.ts +56 -0
  350. package/dist/server/modules/workspace/affairs-library-refresh-contract.js +48 -0
  351. package/dist/server/modules/workspace/affairs-library-refresh-contract.js.map +1 -0
  352. package/dist/server/modules/workspace/affairs-library-service.d.ts +353 -0
  353. package/dist/server/modules/workspace/affairs-library-service.js +3895 -0
  354. package/dist/server/modules/workspace/affairs-library-service.js.map +1 -0
  355. package/dist/server/modules/workspace/affairs-lightweight-session-controller.d.ts +86 -0
  356. package/dist/server/modules/workspace/affairs-lightweight-session-controller.js +193 -0
  357. package/dist/server/modules/workspace/affairs-lightweight-session-controller.js.map +1 -0
  358. package/dist/server/modules/workspace/affairs-lightweight-session-service.d.ts +146 -0
  359. package/dist/server/modules/workspace/affairs-lightweight-session-service.js +1593 -0
  360. package/dist/server/modules/workspace/affairs-lightweight-session-service.js.map +1 -0
  361. package/dist/server/modules/workspace/affairs-tag-controller.d.ts +110 -0
  362. package/dist/server/modules/workspace/affairs-tag-controller.js +102 -0
  363. package/dist/server/modules/workspace/affairs-tag-controller.js.map +1 -0
  364. package/dist/server/modules/workspace/affairs-tag-service.d.ts +174 -0
  365. package/dist/server/modules/workspace/affairs-tag-service.js +719 -0
  366. package/dist/server/modules/workspace/affairs-tag-service.js.map +1 -0
  367. package/dist/server/modules/workspace/teable-api-client.d.ts +118 -0
  368. package/dist/server/modules/workspace/teable-api-client.js +142 -0
  369. package/dist/server/modules/workspace/teable-api-client.js.map +1 -0
  370. package/dist/server/modules/workspace/teable-catalog-controller.d.ts +18 -0
  371. package/dist/server/modules/workspace/teable-catalog-controller.js +17 -0
  372. package/dist/server/modules/workspace/teable-catalog-controller.js.map +1 -0
  373. package/dist/server/modules/workspace/teable-catalog-service.d.ts +36 -0
  374. package/dist/server/modules/workspace/teable-catalog-service.js +124 -0
  375. package/dist/server/modules/workspace/teable-catalog-service.js.map +1 -0
  376. package/dist/server/modules/workspace/teable-credential-service.d.ts +8 -0
  377. package/dist/server/modules/workspace/teable-credential-service.js +37 -0
  378. package/dist/server/modules/workspace/teable-credential-service.js.map +1 -0
  379. package/dist/server/modules/workspace/teable-field-mapping-controller.d.ts +25 -0
  380. package/dist/server/modules/workspace/teable-field-mapping-controller.js +31 -0
  381. package/dist/server/modules/workspace/teable-field-mapping-controller.js.map +1 -0
  382. package/dist/server/modules/workspace/teable-field-mapping-service.d.ts +38 -0
  383. package/dist/server/modules/workspace/teable-field-mapping-service.js +215 -0
  384. package/dist/server/modules/workspace/teable-field-mapping-service.js.map +1 -0
  385. package/dist/server/modules/workspace/teable-global-binding-controller.d.ts +22 -0
  386. package/dist/server/modules/workspace/teable-global-binding-controller.js +25 -0
  387. package/dist/server/modules/workspace/teable-global-binding-controller.js.map +1 -0
  388. package/dist/server/modules/workspace/teable-global-binding-service.d.ts +35 -0
  389. package/dist/server/modules/workspace/teable-global-binding-service.js +151 -0
  390. package/dist/server/modules/workspace/teable-global-binding-service.js.map +1 -0
  391. package/dist/server/modules/workspace/teable-mirror-sync-controller.d.ts +29 -0
  392. package/dist/server/modules/workspace/teable-mirror-sync-controller.js +50 -0
  393. package/dist/server/modules/workspace/teable-mirror-sync-controller.js.map +1 -0
  394. package/dist/server/modules/workspace/teable-mirror-sync-service.d.ts +157 -0
  395. package/dist/server/modules/workspace/teable-mirror-sync-service.js +917 -0
  396. package/dist/server/modules/workspace/teable-mirror-sync-service.js.map +1 -0
  397. package/dist/server/modules/workspace/teable-runtime-controller.d.ts +58 -0
  398. package/dist/server/modules/workspace/teable-runtime-controller.js +60 -0
  399. package/dist/server/modules/workspace/teable-runtime-controller.js.map +1 -0
  400. package/dist/server/modules/workspace/teable-runtime-service.d.ts +96 -0
  401. package/dist/server/modules/workspace/teable-runtime-service.js +362 -0
  402. package/dist/server/modules/workspace/teable-runtime-service.js.map +1 -0
  403. package/dist/server/modules/workspace/teable-workbench-sync-config-controller.d.ts +22 -0
  404. package/dist/server/modules/workspace/teable-workbench-sync-config-controller.js +20 -0
  405. package/dist/server/modules/workspace/teable-workbench-sync-config-controller.js.map +1 -0
  406. package/dist/server/modules/workspace/teable-workbench-sync-config-service.d.ts +22 -0
  407. package/dist/server/modules/workspace/teable-workbench-sync-config-service.js +159 -0
  408. package/dist/server/modules/workspace/teable-workbench-sync-config-service.js.map +1 -0
  409. package/dist/server/modules/workspace/workspace-controller.d.ts +2 -1
  410. package/dist/server/modules/workspace/workspace-controller.js +8 -2
  411. package/dist/server/modules/workspace/workspace-controller.js.map +1 -1
  412. package/dist/server/modules/workspace/workspace-service.js +60 -9
  413. package/dist/server/modules/workspace/workspace-service.js.map +1 -1
  414. package/dist/server/routes/affairs.d.ts +11 -0
  415. package/dist/server/routes/affairs.js +126 -0
  416. package/dist/server/routes/affairs.js.map +1 -0
  417. package/dist/server/routes/assistant.js +0 -5
  418. package/dist/server/routes/assistant.js.map +1 -1
  419. package/dist/server/routes/files.js +5 -0
  420. package/dist/server/routes/files.js.map +1 -1
  421. package/dist/server/routes/office.js +4 -0
  422. package/dist/server/routes/office.js.map +1 -1
  423. package/dist/server/routes/system.d.ts +2 -1
  424. package/dist/server/routes/system.js +2 -1
  425. package/dist/server/routes/system.js.map +1 -1
  426. package/dist/server/routes/workbench.js +15 -0
  427. package/dist/server/routes/workbench.js.map +1 -1
  428. package/dist/server/routes/workspaces.d.ts +4 -1
  429. package/dist/server/routes/workspaces.js +56 -1
  430. package/dist/server/routes/workspaces.js.map +1 -1
  431. package/dist/server/server/create-server.d.ts +20 -2
  432. package/dist/server/server/create-server.js +180 -33
  433. package/dist/server/server/create-server.js.map +1 -1
  434. package/dist/server/shared/http/error-handler.js +10 -0
  435. package/dist/server/shared/http/error-handler.js.map +1 -1
  436. package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.d.ts +10 -0
  437. package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.js +47 -0
  438. package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.js.map +1 -0
  439. package/dist/server/storage/repositories/butler-profile-repository.js +7 -3
  440. package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -1
  441. package/dist/server/storage/repositories/office-onlyoffice-setting-repository.d.ts +19 -0
  442. package/dist/server/storage/repositories/office-onlyoffice-setting-repository.js +55 -0
  443. package/dist/server/storage/repositories/office-onlyoffice-setting-repository.js.map +1 -0
  444. package/dist/server/storage/repositories/session-index-repository.js +9 -2
  445. package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
  446. package/dist/server/storage/repositories/user-affairs-library-setting-repository.d.ts +10 -0
  447. package/dist/server/storage/repositories/user-affairs-library-setting-repository.js +72 -0
  448. package/dist/server/storage/repositories/user-affairs-library-setting-repository.js.map +1 -0
  449. package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
  450. package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
  451. package/dist/server/storage/repositories/user-teable-credential-repository.d.ts +9 -0
  452. package/dist/server/storage/repositories/user-teable-credential-repository.js +45 -0
  453. package/dist/server/storage/repositories/user-teable-credential-repository.js.map +1 -0
  454. package/dist/server/storage/repositories/user-teable-field-mapping-repository.d.ts +10 -0
  455. package/dist/server/storage/repositories/user-teable-field-mapping-repository.js +69 -0
  456. package/dist/server/storage/repositories/user-teable-field-mapping-repository.js.map +1 -0
  457. package/dist/server/storage/repositories/user-teable-global-setting-repository.d.ts +8 -0
  458. package/dist/server/storage/repositories/user-teable-global-setting-repository.js +52 -0
  459. package/dist/server/storage/repositories/user-teable-global-setting-repository.js.map +1 -0
  460. package/dist/server/storage/repositories/user-teable-mirror-record-mapping-repository.d.ts +9 -0
  461. package/dist/server/storage/repositories/user-teable-mirror-record-mapping-repository.js +66 -0
  462. package/dist/server/storage/repositories/user-teable-mirror-record-mapping-repository.js.map +1 -0
  463. package/dist/server/storage/repositories/user-teable-mirror-table-binding-repository.d.ts +9 -0
  464. package/dist/server/storage/repositories/user-teable-mirror-table-binding-repository.js +67 -0
  465. package/dist/server/storage/repositories/user-teable-mirror-table-binding-repository.js.map +1 -0
  466. package/dist/server/storage/repositories/user-teable-sync-log-repository.d.ts +14 -0
  467. package/dist/server/storage/repositories/user-teable-sync-log-repository.js +97 -0
  468. package/dist/server/storage/repositories/user-teable-sync-log-repository.js.map +1 -0
  469. package/dist/server/storage/repositories/user-teable-workbench-sync-config-repository.d.ts +8 -0
  470. package/dist/server/storage/repositories/user-teable-workbench-sync-config-repository.js +55 -0
  471. package/dist/server/storage/repositories/user-teable-workbench-sync-config-repository.js.map +1 -0
  472. package/dist/server/storage/repositories/workspace-navigation-state-repository.d.ts +3 -0
  473. package/dist/server/storage/repositories/workspace-navigation-state-repository.js +47 -4
  474. package/dist/server/storage/repositories/workspace-navigation-state-repository.js.map +1 -1
  475. package/dist/server/storage/sqlite/client.js +633 -123
  476. package/dist/server/storage/sqlite/client.js.map +1 -1
  477. package/dist/server/storage/sqlite/schema.sql +214 -25
  478. package/dist/server/types/domain.d.ts +133 -20
  479. package/dist/server/ws/workbench-ws-hub.js +2 -2
  480. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  481. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js +0 -2
  482. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js.map +1 -1
  483. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +0 -6
  484. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  485. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.d.ts +22 -3
  486. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js +29 -2
  487. package/node_modules/@codingns/session-sync-core/dist/sqlite/node-sqlite.js.map +1 -1
  488. package/node_modules/@codingns/session-sync-core/package.json +3 -1
  489. package/package.json +1 -1
  490. package/dist/public/assets/AdaptiveButlerPage-B153lk5H.css +0 -1
  491. package/dist/public/assets/AdaptiveButlerPage-CJw8Ae62.js +0 -3
  492. package/dist/public/assets/DesktopModal-D_A8sgQU.js +0 -1
  493. package/dist/public/assets/DesktopWindowPage-DK7L7osV.js +0 -2
  494. package/dist/public/assets/FileContextPanel-BdCoubcJ.js +0 -1
  495. package/dist/public/assets/GitSidebar-BeZ0hj7A.js +0 -6
  496. package/dist/public/assets/MobileCreateSessionSheet-DfLMVu8q.js +0 -1
  497. package/dist/public/assets/MobileSheet-5kZ-w-gU.js +0 -1
  498. package/dist/public/assets/MobileWorkspaceSwitcherHeader-C6JMiOq_.js +0 -1
  499. package/dist/public/assets/PluginContainerPage-BlY-xJDh.js +0 -1
  500. package/dist/public/assets/SessionIndexPage-DkBp9Mqz.js +0 -1
  501. package/dist/public/assets/SettingsPage-C-ASmJAG.js +0 -2
  502. package/dist/public/assets/TerminalManagerPanel-NVZRxxmH.js +0 -1
  503. package/dist/public/assets/TerminalRuntimeFallbackModal-Bzum5nZ0.js +0 -1
  504. package/dist/public/assets/WorkbenchLayout-OFi6CWgH.js +0 -244
  505. package/dist/public/assets/WorkbenchShellRoute-B4XB8SwG.css +0 -1
  506. package/dist/public/assets/WorkbenchShellRoute-BAQe_E0O.js +0 -1
  507. package/dist/public/assets/WorkspaceDebugDetailPage-DhKa6e9y.js +0 -1
  508. package/dist/public/assets/WorkspaceDetailPage-BPsrFffw.js +0 -1
  509. package/dist/public/assets/WorkspaceHomePage-KAtqZOAb.js +0 -1
  510. package/dist/public/assets/file-tree-icon-Mg1DiBRX.js +0 -590
  511. package/dist/public/assets/index-C4t-vvqk.css +0 -1
  512. package/dist/public/assets/index-CL97fwWB.js +0 -42
  513. package/dist/public/assets/realtime-client-CLafKzzJ.js +0 -1
  514. package/dist/public/assets/useRegisteredDebugTemplates-DQAWVdCo.js +0 -1
  515. package/dist/public/assets/workbench-navigation-MEzCSmsK.js +0 -1
@@ -16,6 +16,7 @@ export function createDatabaseClient(databasePath) {
16
16
  ensureWorkspaceRemovalColumn(db);
17
17
  ensureWorkspaceSortOrderColumn(db);
18
18
  ensureWorkspaceNavigationBackgroundColorColumn(db);
19
+ ensureWorkspaceNavigationAffairsLibraryColumns(db);
19
20
  ensureOpenCliProviderSchema(db);
20
21
  ensureOpenCliCatalogSchema(db);
21
22
  ensureOpenCliRuntimeProfileSchema(db);
@@ -27,6 +28,7 @@ export function createDatabaseClient(databasePath) {
27
28
  ensureSessionRelationColumns(db);
28
29
  ensureSessionForkSchema(db);
29
30
  ensureSessionChangedFileTables(db);
31
+ ensureAffairsAssistantSessionSnapshotSchema(db);
30
32
  ensureTerminalInstanceProcessIdColumn(db);
31
33
  ensureTerminalRuntimeSchema(db);
32
34
  ensureTerminalLogSchema(db);
@@ -45,11 +47,20 @@ export function createDatabaseClient(databasePath) {
45
47
  ensureTerminalCommandTemplateDebugSchema(db);
46
48
  ensureTerminalInstanceDebugSchema(db);
47
49
  ensureUserPreferenceProfileSchema(db);
50
+ ensureUserAffairsLibrarySettingsSchema(db);
51
+ ensureUserTeableGlobalSettingsSchema(db);
52
+ ensureUserTeableCredentialsSchema(db);
53
+ ensureUserTeableWorkbenchSyncConfigsSchema(db);
54
+ ensureUserTeableMirrorTableBindingsSchema(db);
55
+ ensureUserTeableMirrorRecordMappingsSchema(db);
56
+ ensureUserTeableFormBindingsSchema(db);
57
+ ensureUserTeableFieldMappingsSchema(db);
58
+ ensureUserTeableInboundRecordMappingsSchema(db);
48
59
  ensureButlerProfileSchema(db);
49
60
  ensureButlerControlSessionSchema(db);
50
61
  ensureButlerControlTimerSchema(db);
51
62
  ensureAssistantAutomationSchema(db);
52
- ensureAssistantSandboxSchema(db);
63
+ ensureOnlyOfficeSettingsSchema(db);
53
64
  ensureDocumentTemplateSchema(db);
54
65
  ensurePluginRegistrySchema(db);
55
66
  ensurePluginRuntimeSessionSchema(db);
@@ -68,6 +79,7 @@ export function createDatabaseClient(databasePath) {
68
79
  function ensurePreSchemaCompatibility(db) {
69
80
  // 旧库还没有这些列时,schema.sql 里的索引会先炸掉,所以必须先补齐。
70
81
  ensureAuthTokenDeviceColumns(db);
82
+ ensureUserTeableFormBindingsPreSchemaCompatibility(db);
71
83
  ensureOpsTargetWorkspaceSchema(db);
72
84
  ensureManagedSkillScopeSchema(db);
73
85
  ensureAuthTokenCallerKindSchema(db);
@@ -102,6 +114,18 @@ function ensureAuthTokenDeviceColumns(db) {
102
114
  db.exec("CREATE INDEX IF NOT EXISTS idx_auth_tokens_workspace_id ON auth_tokens(workspace_id)");
103
115
  db.exec("CREATE INDEX IF NOT EXISTS idx_auth_tokens_session_id ON auth_tokens(session_id)");
104
116
  }
117
+ function ensureUserTeableFormBindingsPreSchemaCompatibility(db) {
118
+ if (!tableExists(db, "user_teable_form_bindings")) {
119
+ return;
120
+ }
121
+ const columns = db
122
+ .prepare("PRAGMA table_info(user_teable_form_bindings)")
123
+ .all();
124
+ const columnNames = new Set(columns.map((column) => column.name ?? ""));
125
+ if (!columnNames.has("enabled")) {
126
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN enabled INTEGER NOT NULL DEFAULT 1");
127
+ }
128
+ }
105
129
  function ensureAuthTokenCallerKindSchema(db) {
106
130
  if (!tableExists(db, "auth_tokens")) {
107
131
  return;
@@ -248,6 +272,24 @@ function ensureAuthDeviceSchema(db) {
248
272
  db.exec("ALTER TABLE auth_devices ADD COLUMN user_agent TEXT");
249
273
  }
250
274
  }
275
+ function ensureWorkspaceNavigationAffairsLibraryColumns(db) {
276
+ if (!tableExists(db, "workspace_navigation_states")) {
277
+ return;
278
+ }
279
+ const columns = db
280
+ .prepare("PRAGMA table_info(workspace_navigation_states)")
281
+ .all();
282
+ const columnNames = new Set(columns.map((column) => column.name));
283
+ if (!columnNames.has("affairs_library_root_path")) {
284
+ db.exec("ALTER TABLE workspace_navigation_states ADD COLUMN affairs_library_root_path TEXT");
285
+ }
286
+ if (!columnNames.has("affairs_library_enabled")) {
287
+ db.exec("ALTER TABLE workspace_navigation_states ADD COLUMN affairs_library_enabled INTEGER NOT NULL DEFAULT 0 CHECK (affairs_library_enabled IN (0, 1))");
288
+ }
289
+ if (!columnNames.has("affairs_library_favorites_json")) {
290
+ db.exec("ALTER TABLE workspace_navigation_states ADD COLUMN affairs_library_favorites_json TEXT");
291
+ }
292
+ }
251
293
  function ensurePluginRegistrySchema(db) {
252
294
  db.exec(`
253
295
  CREATE TABLE IF NOT EXISTS plugin_definitions (
@@ -635,10 +677,13 @@ function ensureButlerProfileSchema(db) {
635
677
  const columns = db
636
678
  .prepare("PRAGMA table_info(butler_profiles)")
637
679
  .all();
638
- if (columns.some((column) => column.name === "display_name")) {
639
- return;
680
+ const columnNames = new Set(columns.map((column) => column.name));
681
+ if (!columnNames.has("display_name")) {
682
+ db.exec("ALTER TABLE butler_profiles ADD COLUMN display_name TEXT NOT NULL DEFAULT '代码助手'");
683
+ }
684
+ if (!columnNames.has("setup_completed")) {
685
+ db.exec("ALTER TABLE butler_profiles ADD COLUMN setup_completed INTEGER NOT NULL DEFAULT 0 CHECK (setup_completed IN (0, 1))");
640
686
  }
641
- db.exec("ALTER TABLE butler_profiles ADD COLUMN display_name TEXT NOT NULL DEFAULT '代码助手'");
642
687
  }
643
688
  function ensureUserPreferenceProfileSchema(db) {
644
689
  const columns = db
@@ -655,6 +700,497 @@ function ensureUserPreferenceProfileSchema(db) {
655
700
  db.exec(`ALTER TABLE user_preference_profiles
656
701
  ADD COLUMN debug_port_pools_json TEXT NOT NULL DEFAULT '{"start":43000,"end":47999}'`);
657
702
  }
703
+ if (!columnNames.has("affairs_dashboard_states_json")) {
704
+ db.exec(`ALTER TABLE user_preference_profiles
705
+ ADD COLUMN affairs_dashboard_states_json TEXT NOT NULL DEFAULT '{}'`);
706
+ }
707
+ migrateLegacyAffairsShortcutAppsColumn(db, columnNames);
708
+ }
709
+ function migrateLegacyAffairsShortcutAppsColumn(db, columnNames) {
710
+ if (!tableExists(db, "user_preference_profiles")) {
711
+ return;
712
+ }
713
+ const resolvedColumnNames = columnNames
714
+ ?? new Set(db.prepare("PRAGMA table_info(user_preference_profiles)").all()
715
+ .map((column) => column.name));
716
+ if (!resolvedColumnNames.has("affairs_shortcut_apps_json")) {
717
+ return;
718
+ }
719
+ const rows = db
720
+ .prepare(`SELECT
721
+ user_id,
722
+ language,
723
+ theme,
724
+ auto_theme,
725
+ default_permission_mode,
726
+ providers_json,
727
+ debug_port_pools_json,
728
+ affairs_dashboard_states_json,
729
+ affairs_shortcut_apps_json,
730
+ created_at,
731
+ updated_at
732
+ FROM user_preference_profiles`)
733
+ .all();
734
+ const migratedRows = rows.map((row) => ({
735
+ ...row,
736
+ affairs_dashboard_states_json: JSON.stringify(mergeLegacyShortcutAppsIntoDashboardStates(parseJsonObjectRecord(row.affairs_dashboard_states_json), parseJsonObjectRecord(row.affairs_shortcut_apps_json)))
737
+ }));
738
+ db.exec("BEGIN IMMEDIATE");
739
+ try {
740
+ db.exec(`
741
+ ALTER TABLE user_preference_profiles RENAME TO user_preference_profiles_legacy;
742
+
743
+ CREATE TABLE user_preference_profiles (
744
+ user_id TEXT PRIMARY KEY,
745
+ language TEXT NOT NULL CHECK (language IN ('zh-CN', 'en-US')),
746
+ theme TEXT NOT NULL CHECK (theme IN ('light', 'dark', 'sky-blue', 'eye-green')),
747
+ auto_theme INTEGER NOT NULL DEFAULT 0 CHECK (auto_theme IN (0, 1)),
748
+ default_permission_mode TEXT NOT NULL CHECK (
749
+ default_permission_mode IN ('default', 'acceptEdits', 'bypassPermissions')
750
+ ),
751
+ providers_json TEXT NOT NULL,
752
+ debug_port_pools_json TEXT NOT NULL,
753
+ affairs_dashboard_states_json TEXT NOT NULL DEFAULT '{}',
754
+ created_at TEXT NOT NULL,
755
+ updated_at TEXT NOT NULL,
756
+ FOREIGN KEY (user_id) REFERENCES auth_users(id)
757
+ )
758
+ `);
759
+ const insertStatement = db.prepare(`
760
+ INSERT INTO user_preference_profiles (
761
+ user_id,
762
+ language,
763
+ theme,
764
+ auto_theme,
765
+ default_permission_mode,
766
+ providers_json,
767
+ debug_port_pools_json,
768
+ affairs_dashboard_states_json,
769
+ created_at,
770
+ updated_at
771
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
772
+ `);
773
+ for (const row of migratedRows) {
774
+ insertStatement.run(row.user_id, row.language, row.theme, row.auto_theme, row.default_permission_mode, row.providers_json, row.debug_port_pools_json, row.affairs_dashboard_states_json, row.created_at, row.updated_at);
775
+ }
776
+ db.exec("DROP TABLE user_preference_profiles_legacy");
777
+ db.exec("COMMIT");
778
+ }
779
+ catch (error) {
780
+ db.exec("ROLLBACK");
781
+ throw error;
782
+ }
783
+ }
784
+ function parseJsonObjectRecord(value) {
785
+ try {
786
+ const parsed = JSON.parse(value);
787
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
788
+ return {};
789
+ }
790
+ return { ...parsed };
791
+ }
792
+ catch {
793
+ return {};
794
+ }
795
+ }
796
+ function mergeLegacyShortcutAppsIntoDashboardStates(dashboardStatesByWorkspace, legacyShortcutAppsByWorkspace) {
797
+ const result = {
798
+ ...dashboardStatesByWorkspace
799
+ };
800
+ for (const [workspaceId, shortcutApps] of Object.entries(legacyShortcutAppsByWorkspace)) {
801
+ const normalizedWorkspaceId = workspaceId.trim();
802
+ if (!normalizedWorkspaceId || Object.prototype.hasOwnProperty.call(result, normalizedWorkspaceId)) {
803
+ continue;
804
+ }
805
+ if (!Array.isArray(shortcutApps)) {
806
+ continue;
807
+ }
808
+ result[normalizedWorkspaceId] = {
809
+ workspaceId: normalizedWorkspaceId,
810
+ shortcutApps
811
+ };
812
+ }
813
+ return result;
814
+ }
815
+ function ensureUserAffairsLibrarySettingsSchema(db) {
816
+ if (!tableExists(db, "user_affairs_library_settings")) {
817
+ db.exec(`
818
+ CREATE TABLE user_affairs_library_settings (
819
+ user_id TEXT PRIMARY KEY,
820
+ root_dir TEXT,
821
+ enabled INTEGER NOT NULL DEFAULT 0 CHECK (enabled IN (0, 1)),
822
+ favorites_json TEXT,
823
+ last_workspace_id TEXT,
824
+ dashboard_state_json TEXT NOT NULL DEFAULT '{}',
825
+ created_at TEXT NOT NULL,
826
+ updated_at TEXT NOT NULL,
827
+ FOREIGN KEY (user_id) REFERENCES auth_users(id)
828
+ )
829
+ `);
830
+ }
831
+ const columns = db
832
+ .prepare("PRAGMA table_info(user_affairs_library_settings)")
833
+ .all();
834
+ const columnNames = new Set(columns.map((column) => column.name));
835
+ if (!columnNames.has("favorites_json")) {
836
+ db.exec("ALTER TABLE user_affairs_library_settings ADD COLUMN favorites_json TEXT");
837
+ }
838
+ if (!columnNames.has("last_workspace_id")) {
839
+ db.exec("ALTER TABLE user_affairs_library_settings ADD COLUMN last_workspace_id TEXT");
840
+ }
841
+ if (!columnNames.has("dashboard_state_json")) {
842
+ db.exec("ALTER TABLE user_affairs_library_settings ADD COLUMN dashboard_state_json TEXT NOT NULL DEFAULT '{}'");
843
+ }
844
+ migrateLegacyAffairsLibrarySettings(db);
845
+ migrateLegacyDashboardStatesIntoGlobalAffairsSettings(db);
846
+ }
847
+ function migrateLegacyDashboardStatesIntoGlobalAffairsSettings(db) {
848
+ if (!tableExists(db, "user_preference_profiles") || !tableExists(db, "user_affairs_library_settings")) {
849
+ return;
850
+ }
851
+ const rows = db
852
+ .prepare("SELECT user_id, affairs_dashboard_states_json FROM user_preference_profiles")
853
+ .all();
854
+ const updateStatement = db.prepare(`
855
+ UPDATE user_affairs_library_settings
856
+ SET dashboard_state_json = ?
857
+ WHERE user_id = ?
858
+ AND (dashboard_state_json IS NULL OR TRIM(dashboard_state_json) = '' OR dashboard_state_json = '{}')
859
+ `);
860
+ for (const row of rows) {
861
+ const dashboardState = pickLatestLegacyDashboardState(parseJsonObjectRecord(row.affairs_dashboard_states_json));
862
+ if (!dashboardState) {
863
+ continue;
864
+ }
865
+ updateStatement.run(JSON.stringify(dashboardState), row.user_id);
866
+ }
867
+ }
868
+ function pickLatestLegacyDashboardState(dashboardStatesByWorkspace) {
869
+ const candidates = Object.entries(dashboardStatesByWorkspace)
870
+ .map(([workspaceId, rawState]) => normalizeLegacyDashboardStateCandidate(workspaceId, rawState))
871
+ .filter((item) => item !== null)
872
+ .sort((left, right) => {
873
+ if (right.score !== left.score) {
874
+ return right.score - left.score;
875
+ }
876
+ return right.updatedAt.localeCompare(left.updatedAt);
877
+ });
878
+ return candidates[0]?.state ?? null;
879
+ }
880
+ function normalizeLegacyDashboardStateCandidate(workspaceId, rawState) {
881
+ if (typeof rawState !== "object" || rawState === null || Array.isArray(rawState)) {
882
+ return null;
883
+ }
884
+ const state = {
885
+ ...rawState,
886
+ workspaceId: "affairs-global"
887
+ };
888
+ const shortcutApps = Array.isArray(state.shortcutApps) ? state.shortcutApps : [];
889
+ const tabs = Array.isArray(state.tabs) ? state.tabs : [];
890
+ const widgetCount = tabs.reduce((total, tab) => {
891
+ if (typeof tab !== "object" || tab === null || Array.isArray(tab)) {
892
+ return total;
893
+ }
894
+ return total + (Array.isArray(tab.widgets) ? tab.widgets.length : 0);
895
+ }, 0);
896
+ const updatedAt = typeof state.updatedAt === "string" && state.updatedAt.trim()
897
+ ? state.updatedAt.trim()
898
+ : "";
899
+ return {
900
+ state,
901
+ score: shortcutApps.length * 100 + widgetCount,
902
+ updatedAt: updatedAt || workspaceId
903
+ };
904
+ }
905
+ function ensureUserTeableGlobalSettingsSchema(db) {
906
+ if (!tableExists(db, "user_teable_global_settings")) {
907
+ db.exec(`
908
+ CREATE TABLE user_teable_global_settings (
909
+ user_id TEXT PRIMARY KEY,
910
+ base_url TEXT,
911
+ space_id TEXT,
912
+ base_id TEXT,
913
+ auth_ref TEXT,
914
+ enabled INTEGER NOT NULL DEFAULT 0 CHECK (enabled IN (0, 1)),
915
+ mirror_mode TEXT NOT NULL DEFAULT 'manual' CHECK (mirror_mode IN ('manual', 'scheduled', 'event_driven')),
916
+ created_at TEXT NOT NULL,
917
+ updated_at TEXT NOT NULL,
918
+ FOREIGN KEY (user_id) REFERENCES auth_users(id)
919
+ )
920
+ `);
921
+ return;
922
+ }
923
+ const columns = db
924
+ .prepare("PRAGMA table_info(user_teable_global_settings)")
925
+ .all();
926
+ const columnNames = new Set(columns.map((column) => column.name));
927
+ if (!columnNames.has("base_id")) {
928
+ db.exec("ALTER TABLE user_teable_global_settings ADD COLUMN base_id TEXT");
929
+ }
930
+ if (!columnNames.has("mirror_mode")) {
931
+ db.exec("ALTER TABLE user_teable_global_settings ADD COLUMN mirror_mode TEXT NOT NULL DEFAULT 'manual'");
932
+ }
933
+ }
934
+ function ensureUserTeableCredentialsSchema(db) {
935
+ if (!tableExists(db, "user_teable_credentials")) {
936
+ db.exec(`
937
+ CREATE TABLE user_teable_credentials (
938
+ user_id TEXT NOT NULL,
939
+ auth_ref TEXT NOT NULL,
940
+ token_ciphertext TEXT NOT NULL,
941
+ created_at TEXT NOT NULL,
942
+ updated_at TEXT NOT NULL,
943
+ PRIMARY KEY (user_id, auth_ref),
944
+ FOREIGN KEY (user_id) REFERENCES auth_users(id)
945
+ )
946
+ `);
947
+ }
948
+ db.exec(`
949
+ CREATE INDEX IF NOT EXISTS idx_user_teable_credentials_user_updated_at
950
+ ON user_teable_credentials(user_id, updated_at DESC)
951
+ `);
952
+ }
953
+ function ensureUserTeableWorkbenchSyncConfigsSchema(db) {
954
+ if (!tableExists(db, "user_teable_workbench_sync_configs")) {
955
+ db.exec(`
956
+ CREATE TABLE user_teable_workbench_sync_configs (
957
+ config_id TEXT PRIMARY KEY,
958
+ user_id TEXT NOT NULL,
959
+ source_type TEXT NOT NULL CHECK (source_type IN ('tags', 'sessions', 'todos')),
960
+ enabled INTEGER NOT NULL DEFAULT 0 CHECK (enabled IN (0, 1)),
961
+ scope_json TEXT NOT NULL,
962
+ target_table_id TEXT,
963
+ created_at TEXT NOT NULL,
964
+ updated_at TEXT NOT NULL,
965
+ FOREIGN KEY (user_id) REFERENCES auth_users(id),
966
+ UNIQUE (user_id, source_type)
967
+ )
968
+ `);
969
+ db.exec(`
970
+ CREATE INDEX IF NOT EXISTS idx_user_teable_workbench_sync_configs_user
971
+ ON user_teable_workbench_sync_configs(user_id, source_type)
972
+ `);
973
+ return;
974
+ }
975
+ db.exec(`
976
+ CREATE INDEX IF NOT EXISTS idx_user_teable_workbench_sync_configs_user
977
+ ON user_teable_workbench_sync_configs(user_id, source_type)
978
+ `);
979
+ }
980
+ function ensureUserTeableMirrorTableBindingsSchema(db) {
981
+ if (!tableExists(db, "user_teable_mirror_table_bindings")) {
982
+ db.exec(`
983
+ CREATE TABLE user_teable_mirror_table_bindings (
984
+ binding_id TEXT PRIMARY KEY,
985
+ user_id TEXT NOT NULL,
986
+ mirror_type TEXT NOT NULL CHECK (mirror_type IN ('tags', 'sessions', 'todos')),
987
+ table_id TEXT NOT NULL,
988
+ table_name TEXT NOT NULL,
989
+ read_only_mode TEXT NOT NULL CHECK (read_only_mode IN ('role_based', 'matrix_based', 'unknown')),
990
+ last_synced_at TEXT,
991
+ created_at TEXT NOT NULL,
992
+ updated_at TEXT NOT NULL,
993
+ FOREIGN KEY (user_id) REFERENCES auth_users(id),
994
+ UNIQUE (user_id, mirror_type)
995
+ )
996
+ `);
997
+ }
998
+ db.exec(`
999
+ CREATE INDEX IF NOT EXISTS idx_user_teable_mirror_table_bindings_user
1000
+ ON user_teable_mirror_table_bindings(user_id, mirror_type)
1001
+ `);
1002
+ }
1003
+ function ensureUserTeableMirrorRecordMappingsSchema(db) {
1004
+ if (!tableExists(db, "user_teable_mirror_record_mappings")) {
1005
+ db.exec(`
1006
+ CREATE TABLE user_teable_mirror_record_mappings (
1007
+ mapping_id TEXT PRIMARY KEY,
1008
+ user_id TEXT NOT NULL,
1009
+ mirror_type TEXT NOT NULL CHECK (mirror_type IN ('tags', 'sessions', 'todos')),
1010
+ local_id TEXT NOT NULL,
1011
+ teable_record_id TEXT NOT NULL,
1012
+ fingerprint TEXT NOT NULL,
1013
+ last_synced_at TEXT NOT NULL,
1014
+ deleted_at TEXT,
1015
+ created_at TEXT NOT NULL,
1016
+ updated_at TEXT NOT NULL,
1017
+ FOREIGN KEY (user_id) REFERENCES auth_users(id),
1018
+ UNIQUE (user_id, mirror_type, local_id)
1019
+ )
1020
+ `);
1021
+ }
1022
+ db.exec(`
1023
+ CREATE INDEX IF NOT EXISTS idx_user_teable_mirror_record_mappings_user
1024
+ ON user_teable_mirror_record_mappings(user_id, mirror_type, updated_at DESC)
1025
+ `);
1026
+ }
1027
+ function ensureUserTeableFormBindingsSchema(db) {
1028
+ if (!tableExists(db, "user_teable_form_bindings")) {
1029
+ db.exec(`
1030
+ CREATE TABLE user_teable_form_bindings (
1031
+ form_binding_id TEXT PRIMARY KEY,
1032
+ user_id TEXT NOT NULL,
1033
+ workspace_id TEXT NOT NULL,
1034
+ source_workspace_ids_json TEXT NOT NULL DEFAULT '[]',
1035
+ table_id TEXT NOT NULL,
1036
+ view_id TEXT NOT NULL,
1037
+ name TEXT NOT NULL,
1038
+ linked_mirror_types_json TEXT NOT NULL,
1039
+ teable_table_id TEXT NOT NULL DEFAULT '',
1040
+ teable_view_id TEXT NOT NULL DEFAULT '',
1041
+ teable_share_id TEXT,
1042
+ teable_form_name TEXT NOT NULL DEFAULT '',
1043
+ display_name TEXT NOT NULL DEFAULT '',
1044
+ open_mode TEXT NOT NULL DEFAULT 'embed' CHECK (open_mode IN ('embed', 'external')),
1045
+ enabled INTEGER NOT NULL DEFAULT 1 CHECK (enabled IN (0, 1)),
1046
+ inbound_action TEXT NOT NULL CHECK (inbound_action IN ('create_todo', 'append_session_context', 'request_tag_assignment', 'none')),
1047
+ open_url TEXT NOT NULL,
1048
+ created_at TEXT NOT NULL,
1049
+ updated_at TEXT NOT NULL,
1050
+ FOREIGN KEY (user_id) REFERENCES auth_users(id)
1051
+ )
1052
+ `);
1053
+ }
1054
+ const columns = db
1055
+ .prepare("PRAGMA table_info(user_teable_form_bindings)")
1056
+ .all();
1057
+ const columnNames = new Set(columns.map((item) => item.name ?? ""));
1058
+ if (!columnNames.has("source_workspace_ids_json")) {
1059
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN source_workspace_ids_json TEXT NOT NULL DEFAULT '[]'");
1060
+ db.exec(`
1061
+ UPDATE user_teable_form_bindings
1062
+ SET source_workspace_ids_json = json_array(workspace_id)
1063
+ WHERE COALESCE(TRIM(source_workspace_ids_json), '') = ''
1064
+ OR source_workspace_ids_json = '[]'
1065
+ `);
1066
+ }
1067
+ if (!columnNames.has("teable_table_id")) {
1068
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN teable_table_id TEXT NOT NULL DEFAULT ''");
1069
+ db.exec("UPDATE user_teable_form_bindings SET teable_table_id = table_id WHERE COALESCE(TRIM(teable_table_id), '') = ''");
1070
+ }
1071
+ if (!columnNames.has("teable_view_id")) {
1072
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN teable_view_id TEXT NOT NULL DEFAULT ''");
1073
+ db.exec("UPDATE user_teable_form_bindings SET teable_view_id = view_id WHERE COALESCE(TRIM(teable_view_id), '') = ''");
1074
+ }
1075
+ if (!columnNames.has("teable_share_id")) {
1076
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN teable_share_id TEXT");
1077
+ }
1078
+ if (!columnNames.has("teable_form_name")) {
1079
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN teable_form_name TEXT NOT NULL DEFAULT ''");
1080
+ db.exec("UPDATE user_teable_form_bindings SET teable_form_name = name WHERE COALESCE(TRIM(teable_form_name), '') = ''");
1081
+ }
1082
+ if (!columnNames.has("display_name")) {
1083
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN display_name TEXT NOT NULL DEFAULT ''");
1084
+ db.exec("UPDATE user_teable_form_bindings SET display_name = name WHERE COALESCE(TRIM(display_name), '') = ''");
1085
+ }
1086
+ if (!columnNames.has("open_mode")) {
1087
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN open_mode TEXT NOT NULL DEFAULT 'embed'");
1088
+ }
1089
+ if (!columnNames.has("enabled")) {
1090
+ db.exec("ALTER TABLE user_teable_form_bindings ADD COLUMN enabled INTEGER NOT NULL DEFAULT 1");
1091
+ }
1092
+ db.exec(`
1093
+ CREATE INDEX IF NOT EXISTS idx_user_teable_form_bindings_user_workspace
1094
+ ON user_teable_form_bindings(user_id, workspace_id, updated_at DESC)
1095
+ `);
1096
+ db.exec(`
1097
+ CREATE INDEX IF NOT EXISTS idx_user_teable_form_bindings_user_enabled
1098
+ ON user_teable_form_bindings(user_id, enabled, updated_at DESC)
1099
+ `);
1100
+ }
1101
+ function ensureUserTeableFieldMappingsSchema(db) {
1102
+ if (!tableExists(db, "user_teable_field_mappings")) {
1103
+ db.exec(`
1104
+ CREATE TABLE user_teable_field_mappings (
1105
+ mapping_id TEXT PRIMARY KEY,
1106
+ user_id TEXT NOT NULL,
1107
+ config_id TEXT NOT NULL,
1108
+ source_type TEXT NOT NULL CHECK (source_type IN ('tags', 'sessions', 'todos')),
1109
+ target_table_id TEXT NOT NULL,
1110
+ items_json TEXT NOT NULL,
1111
+ created_at TEXT NOT NULL,
1112
+ updated_at TEXT NOT NULL,
1113
+ FOREIGN KEY (user_id) REFERENCES auth_users(id),
1114
+ UNIQUE (user_id, config_id)
1115
+ )
1116
+ `);
1117
+ }
1118
+ db.exec(`
1119
+ CREATE INDEX IF NOT EXISTS idx_user_teable_field_mappings_user
1120
+ ON user_teable_field_mappings(user_id, source_type, updated_at DESC)
1121
+ `);
1122
+ }
1123
+ function ensureUserTeableInboundRecordMappingsSchema(db) {
1124
+ if (!tableExists(db, "user_teable_inbound_record_mappings")) {
1125
+ db.exec(`
1126
+ CREATE TABLE user_teable_inbound_record_mappings (
1127
+ mapping_id TEXT PRIMARY KEY,
1128
+ user_id TEXT NOT NULL,
1129
+ form_binding_id TEXT NOT NULL,
1130
+ teable_record_id TEXT NOT NULL,
1131
+ teable_record_fingerprint TEXT NOT NULL,
1132
+ inbound_action TEXT NOT NULL CHECK (inbound_action IN ('create_todo', 'append_session_context', 'request_tag_assignment', 'none')),
1133
+ target_local_id TEXT,
1134
+ status TEXT NOT NULL CHECK (status IN ('applied', 'skipped', 'failed')),
1135
+ error_detail TEXT,
1136
+ last_synced_at TEXT NOT NULL,
1137
+ created_at TEXT NOT NULL,
1138
+ updated_at TEXT NOT NULL,
1139
+ FOREIGN KEY (user_id) REFERENCES auth_users(id),
1140
+ UNIQUE (user_id, form_binding_id, teable_record_id)
1141
+ )
1142
+ `);
1143
+ }
1144
+ db.exec(`
1145
+ CREATE INDEX IF NOT EXISTS idx_user_teable_inbound_record_mappings_user_form
1146
+ ON user_teable_inbound_record_mappings(user_id, form_binding_id, updated_at DESC)
1147
+ `);
1148
+ }
1149
+ function migrateLegacyAffairsLibrarySettings(db) {
1150
+ if (!tableExists(db, "workspace_navigation_states") || !tableExists(db, "user_affairs_library_settings")) {
1151
+ return;
1152
+ }
1153
+ db.exec(`
1154
+ INSERT INTO user_affairs_library_settings (
1155
+ user_id,
1156
+ root_dir,
1157
+ enabled,
1158
+ favorites_json,
1159
+ last_workspace_id,
1160
+ created_at,
1161
+ updated_at
1162
+ )
1163
+ SELECT
1164
+ legacy.user_id,
1165
+ legacy.affairs_library_root_path,
1166
+ legacy.affairs_library_enabled,
1167
+ legacy.affairs_library_favorites_json,
1168
+ legacy.workspace_id,
1169
+ legacy.updated_at,
1170
+ legacy.updated_at
1171
+ FROM (
1172
+ SELECT
1173
+ workspace_id,
1174
+ user_id,
1175
+ affairs_library_root_path,
1176
+ affairs_library_enabled,
1177
+ affairs_library_favorites_json,
1178
+ updated_at,
1179
+ ROW_NUMBER() OVER (
1180
+ PARTITION BY user_id
1181
+ ORDER BY datetime(updated_at) DESC
1182
+ ) AS row_number
1183
+ FROM workspace_navigation_states
1184
+ WHERE affairs_library_root_path IS NOT NULL
1185
+ AND TRIM(affairs_library_root_path) <> ''
1186
+ ) AS legacy
1187
+ WHERE legacy.row_number = 1
1188
+ AND NOT EXISTS (
1189
+ SELECT 1
1190
+ FROM user_affairs_library_settings AS current
1191
+ WHERE current.user_id = legacy.user_id
1192
+ )
1193
+ `);
658
1194
  }
659
1195
  function ensureManagedSkillScopeSchema(db) {
660
1196
  if (!tableExists(db, "managed_skills")) {
@@ -912,125 +1448,6 @@ function ensureAssistantAutomationSchema(db) {
912
1448
  ON assistant_automation_runs(automation_id, created_at DESC);
913
1449
  `);
914
1450
  }
915
- function ensureAssistantSandboxSchema(db) {
916
- const columns = db
917
- .prepare("PRAGMA table_info(assistant_sandboxes)")
918
- .all();
919
- if (columns.length > 0) {
920
- const columnNames = new Set(columns.map((column) => column.name));
921
- const tableSql = db
922
- .prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'assistant_sandboxes'")
923
- .get()?.sql ?? "";
924
- const needsStatusConstraintRebuild = !tableSql.includes("'orphaned'");
925
- if (needsStatusConstraintRebuild) {
926
- const hasControlSessionId = columnNames.has("control_session_id");
927
- const rebuild = db.transaction(() => {
928
- db.exec("ALTER TABLE assistant_sandboxes RENAME TO assistant_sandboxes_legacy");
929
- db.exec(`
930
- CREATE TABLE assistant_sandboxes (
931
- id TEXT PRIMARY KEY,
932
- user_id TEXT NOT NULL,
933
- workspace_id TEXT NOT NULL UNIQUE,
934
- control_session_id TEXT,
935
- title TEXT NOT NULL,
936
- description TEXT,
937
- source_kind TEXT NOT NULL CHECK (source_kind IN ('blank', 'clone')),
938
- source_ref TEXT,
939
- visibility TEXT NOT NULL CHECK (visibility IN ('assistant_only', 'pinned')),
940
- status TEXT NOT NULL CHECK (status IN ('active', 'archived', 'expired', 'orphaned', 'deleted')),
941
- purpose TEXT,
942
- expires_at TEXT,
943
- promoted_at TEXT,
944
- created_at TEXT NOT NULL,
945
- updated_at TEXT NOT NULL,
946
- FOREIGN KEY (user_id) REFERENCES auth_users(id) ON DELETE CASCADE,
947
- FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE,
948
- FOREIGN KEY (control_session_id) REFERENCES butler_control_sessions(id) ON DELETE SET NULL
949
- );
950
- `);
951
- db.exec(`
952
- INSERT INTO assistant_sandboxes (
953
- id,
954
- user_id,
955
- workspace_id,
956
- control_session_id,
957
- title,
958
- description,
959
- source_kind,
960
- source_ref,
961
- visibility,
962
- status,
963
- purpose,
964
- expires_at,
965
- promoted_at,
966
- created_at,
967
- updated_at
968
- )
969
- SELECT
970
- id,
971
- user_id,
972
- workspace_id,
973
- ${hasControlSessionId ? "control_session_id" : "NULL"},
974
- title,
975
- description,
976
- source_kind,
977
- source_ref,
978
- visibility,
979
- status,
980
- purpose,
981
- expires_at,
982
- promoted_at,
983
- created_at,
984
- updated_at
985
- FROM assistant_sandboxes_legacy;
986
- `);
987
- db.exec("DROP TABLE assistant_sandboxes_legacy");
988
- });
989
- rebuild();
990
- }
991
- else if (!columnNames.has("control_session_id")) {
992
- db.exec("ALTER TABLE assistant_sandboxes ADD COLUMN control_session_id TEXT");
993
- }
994
- db.exec(`
995
- CREATE INDEX IF NOT EXISTS idx_assistant_sandboxes_user_status
996
- ON assistant_sandboxes(user_id, status, updated_at DESC);
997
- CREATE INDEX IF NOT EXISTS idx_assistant_sandboxes_workspace
998
- ON assistant_sandboxes(workspace_id, status, updated_at DESC);
999
- CREATE INDEX IF NOT EXISTS idx_assistant_sandboxes_control_session
1000
- ON assistant_sandboxes(control_session_id, status, updated_at DESC);
1001
- `);
1002
- return;
1003
- }
1004
- db.exec(`
1005
- CREATE TABLE IF NOT EXISTS assistant_sandboxes (
1006
- id TEXT PRIMARY KEY,
1007
- user_id TEXT NOT NULL,
1008
- workspace_id TEXT NOT NULL UNIQUE,
1009
- control_session_id TEXT,
1010
- title TEXT NOT NULL,
1011
- description TEXT,
1012
- source_kind TEXT NOT NULL CHECK (source_kind IN ('blank', 'clone')),
1013
- source_ref TEXT,
1014
- visibility TEXT NOT NULL CHECK (visibility IN ('assistant_only', 'pinned')),
1015
- status TEXT NOT NULL CHECK (status IN ('active', 'archived', 'expired', 'orphaned', 'deleted')),
1016
- purpose TEXT,
1017
- expires_at TEXT,
1018
- promoted_at TEXT,
1019
- created_at TEXT NOT NULL,
1020
- updated_at TEXT NOT NULL,
1021
- FOREIGN KEY (user_id) REFERENCES auth_users(id) ON DELETE CASCADE,
1022
- FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE,
1023
- FOREIGN KEY (control_session_id) REFERENCES butler_control_sessions(id) ON DELETE SET NULL
1024
- );
1025
-
1026
- CREATE INDEX IF NOT EXISTS idx_assistant_sandboxes_user_status
1027
- ON assistant_sandboxes(user_id, status, updated_at DESC);
1028
- CREATE INDEX IF NOT EXISTS idx_assistant_sandboxes_workspace
1029
- ON assistant_sandboxes(workspace_id, status, updated_at DESC);
1030
- CREATE INDEX IF NOT EXISTS idx_assistant_sandboxes_control_session
1031
- ON assistant_sandboxes(control_session_id, status, updated_at DESC);
1032
- `);
1033
- }
1034
1451
  function ensureVerificationRunSchema(db) {
1035
1452
  const verificationRunSql = readTableSql(db, "verification_runs");
1036
1453
  if (!verificationRunSql.includes("status IN ('queued', 'running', 'passed', 'failed', 'skipped')")) {
@@ -1121,6 +1538,21 @@ function ensureDocumentTemplateSchema(db) {
1121
1538
  db.exec("ALTER TABLE document_templates ADD COLUMN template_source_path TEXT");
1122
1539
  }
1123
1540
  }
1541
+ function ensureOnlyOfficeSettingsSchema(db) {
1542
+ if (!tableExists(db, "office_onlyoffice_settings")) {
1543
+ return;
1544
+ }
1545
+ const columns = db
1546
+ .prepare("PRAGMA table_info(office_onlyoffice_settings)")
1547
+ .all();
1548
+ const columnNames = new Set(columns.map((column) => column.name));
1549
+ if (!columnNames.has("user_display_name")) {
1550
+ db.exec("ALTER TABLE office_onlyoffice_settings ADD COLUMN user_display_name TEXT");
1551
+ }
1552
+ if (!columnNames.has("user_avatar_url")) {
1553
+ db.exec("ALTER TABLE office_onlyoffice_settings ADD COLUMN user_avatar_url TEXT");
1554
+ }
1555
+ }
1124
1556
  function ensureOpsTargetWorkspaceSchema(db) {
1125
1557
  if (!tableExists(db, "ops_targets")) {
1126
1558
  return;
@@ -1526,6 +1958,9 @@ function ensureSessionRelationColumns(db) {
1526
1958
  .prepare("PRAGMA table_info(session_indices)")
1527
1959
  .all();
1528
1960
  const columnNames = new Set(columns.map((column) => column.name));
1961
+ if (!columnNames.has("session_visibility")) {
1962
+ db.exec("ALTER TABLE session_indices ADD COLUMN session_visibility TEXT NOT NULL DEFAULT 'workspace' CHECK (session_visibility IN ('workspace', 'affairs_lightweight'))");
1963
+ }
1529
1964
  if (!columnNames.has("parent_session_id")) {
1530
1965
  db.exec("ALTER TABLE session_indices ADD COLUMN parent_session_id TEXT");
1531
1966
  }
@@ -1570,6 +2005,81 @@ function ensureSessionChangedFileTables(db) {
1570
2005
  );
1571
2006
  `);
1572
2007
  }
2008
+ function ensureAffairsAssistantSessionSnapshotSchema(db) {
2009
+ const currentSql = readTableSql(db, "affairs_assistant_session_snapshots");
2010
+ if (!currentSql) {
2011
+ db.exec(`
2012
+ CREATE TABLE affairs_assistant_session_snapshots (
2013
+ workspace_id TEXT NOT NULL,
2014
+ user_id TEXT NOT NULL,
2015
+ project_id TEXT,
2016
+ project_workspace_id TEXT,
2017
+ agent_workspace_path TEXT,
2018
+ sessions_json TEXT NOT NULL,
2019
+ updated_at TEXT NOT NULL,
2020
+ PRIMARY KEY (workspace_id, user_id),
2021
+ FOREIGN KEY (user_id) REFERENCES auth_users(id)
2022
+ );
2023
+
2024
+ CREATE INDEX IF NOT EXISTS idx_affairs_assistant_session_snapshots_user_id
2025
+ ON affairs_assistant_session_snapshots(user_id, updated_at DESC);
2026
+ `);
2027
+ return;
2028
+ }
2029
+ if (!currentSql.includes("FOREIGN KEY (workspace_id) REFERENCES workspaces(id)")) {
2030
+ db.exec(`
2031
+ CREATE INDEX IF NOT EXISTS idx_affairs_assistant_session_snapshots_user_id
2032
+ ON affairs_assistant_session_snapshots(user_id, updated_at DESC);
2033
+ `);
2034
+ return;
2035
+ }
2036
+ db.exec(`
2037
+ PRAGMA foreign_keys = OFF;
2038
+
2039
+ DROP TABLE IF EXISTS affairs_assistant_session_snapshots_next;
2040
+
2041
+ CREATE TABLE affairs_assistant_session_snapshots_next (
2042
+ workspace_id TEXT NOT NULL,
2043
+ user_id TEXT NOT NULL,
2044
+ project_id TEXT,
2045
+ project_workspace_id TEXT,
2046
+ agent_workspace_path TEXT,
2047
+ sessions_json TEXT NOT NULL,
2048
+ updated_at TEXT NOT NULL,
2049
+ PRIMARY KEY (workspace_id, user_id),
2050
+ FOREIGN KEY (user_id) REFERENCES auth_users(id)
2051
+ );
2052
+
2053
+ INSERT INTO affairs_assistant_session_snapshots_next (
2054
+ workspace_id,
2055
+ user_id,
2056
+ project_id,
2057
+ project_workspace_id,
2058
+ agent_workspace_path,
2059
+ sessions_json,
2060
+ updated_at
2061
+ )
2062
+ SELECT
2063
+ workspace_id,
2064
+ user_id,
2065
+ project_id,
2066
+ project_workspace_id,
2067
+ agent_workspace_path,
2068
+ sessions_json,
2069
+ updated_at
2070
+ FROM affairs_assistant_session_snapshots;
2071
+
2072
+ DROP TABLE affairs_assistant_session_snapshots;
2073
+
2074
+ ALTER TABLE affairs_assistant_session_snapshots_next
2075
+ RENAME TO affairs_assistant_session_snapshots;
2076
+
2077
+ PRAGMA foreign_keys = ON;
2078
+
2079
+ CREATE INDEX IF NOT EXISTS idx_affairs_assistant_session_snapshots_user_id
2080
+ ON affairs_assistant_session_snapshots(user_id, updated_at DESC);
2081
+ `);
2082
+ }
1573
2083
  function ensureTerminalCommandTemplatePortColumn(db) {
1574
2084
  const columns = db
1575
2085
  .prepare("PRAGMA table_info(terminal_command_templates)")