@witty-ai/skill-insight 0.5.0-beta → 0.7.0-beta

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 (303) hide show
  1. package/.env.example +6 -0
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/app-path-routes-manifest.json +4 -0
  4. package/.next/standalone/.next/build-manifest.json +2 -2
  5. package/.next/standalone/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/.next/routes-manifest.json +24 -0
  7. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  8. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.rsc +4 -4
  18. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  19. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  24. package/.next/standalone/.next/server/app/api/config/create/route.js +4 -3
  25. package/.next/standalone/.next/server/app/api/config/create/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/config/route.js +5 -4
  27. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/data/route.js +6 -5
  29. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/evaluation/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js +6 -5
  32. package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/otel/v1/traces/route.js +4 -3
  34. package/.next/standalone/.next/server/app/api/otel/v1/traces/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/proxy/[taskId]/[...path]/route.js +1 -1
  36. package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js +4 -3
  37. package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/rejudge/route.js +6 -5
  39. package/.next/standalone/.next/server/app/api/rejudge/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/session/route.js +4 -4
  41. package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route/app-paths-manifest.json +3 -0
  43. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route/build-manifest.json +11 -0
  44. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route/server-reference-manifest.json +4 -0
  45. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route.js +6 -0
  46. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route.js.map +5 -0
  47. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route.js.nft.json +1 -0
  48. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route_client-reference-manifest.js +2 -0
  49. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route/app-paths-manifest.json +3 -0
  50. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route/build-manifest.json +11 -0
  51. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route/server-reference-manifest.json +4 -0
  52. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route.js +6 -0
  53. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route.js.map +5 -0
  54. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route.js.nft.json +1 -0
  55. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route_client-reference-manifest.js +2 -0
  56. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js +3 -2
  58. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js +5 -2
  60. package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/api/skills/automation/import/route.js +5 -2
  62. package/.next/standalone/.next/server/app/api/skills/automation/import/route.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/api/skills/logs/route.js +6 -5
  64. package/.next/standalone/.next/server/app/api/skills/logs/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/skills/route.js +3 -2
  66. package/.next/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route/app-paths-manifest.json +3 -0
  68. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route/build-manifest.json +11 -0
  69. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route/server-reference-manifest.json +4 -0
  70. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js +8 -0
  71. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.map +5 -0
  72. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.nft.json +1 -0
  73. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route_client-reference-manifest.js +2 -0
  74. package/.next/standalone/.next/server/app/api/skills/upload/route.js +5 -2
  75. package/.next/standalone/.next/server/app/api/skills/upload/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/task-stats/route/app-paths-manifest.json +3 -0
  77. package/.next/standalone/.next/server/app/api/task-stats/route/build-manifest.json +11 -0
  78. package/.next/standalone/.next/server/app/api/task-stats/route/server-reference-manifest.json +4 -0
  79. package/.next/standalone/.next/server/app/api/task-stats/route.js +12 -0
  80. package/.next/standalone/.next/server/app/api/task-stats/route.js.map +5 -0
  81. package/.next/standalone/.next/server/app/api/task-stats/route.js.nft.json +1 -0
  82. package/.next/standalone/.next/server/app/api/task-stats/route_client-reference-manifest.js +2 -0
  83. package/.next/standalone/.next/server/app/api/upload/route.js +5 -4
  84. package/.next/standalone/.next/server/app/api/upload/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/details/page/react-loadable-manifest.json +2 -2
  86. package/.next/standalone/.next/server/app/details/page.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/details/page_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/details.html +1 -1
  89. package/.next/standalone/.next/server/app/details.rsc +5 -5
  90. package/.next/standalone/.next/server/app/details.segments/_full.segment.rsc +5 -5
  91. package/.next/standalone/.next/server/app/details.segments/_head.segment.rsc +1 -1
  92. package/.next/standalone/.next/server/app/details.segments/_index.segment.rsc +3 -3
  93. package/.next/standalone/.next/server/app/details.segments/_tree.segment.rsc +2 -2
  94. package/.next/standalone/.next/server/app/details.segments/details/__PAGE__.segment.rsc +2 -2
  95. package/.next/standalone/.next/server/app/details.segments/details.segment.rsc +1 -1
  96. package/.next/standalone/.next/server/app/index.html +1 -1
  97. package/.next/standalone/.next/server/app/index.rsc +5 -5
  98. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  99. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
  100. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  101. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  102. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  103. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/login.html +1 -1
  106. package/.next/standalone/.next/server/app/login.rsc +5 -5
  107. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +5 -5
  108. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  109. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +3 -3
  110. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  111. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  112. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  113. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/skills/page.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/skills.html +1 -1
  118. package/.next/standalone/.next/server/app/skills.rsc +5 -5
  119. package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +5 -5
  120. package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  121. package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +3 -3
  122. package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  123. package/.next/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +2 -2
  124. package/.next/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  125. package/.next/standalone/.next/server/app-paths-manifest.json +4 -0
  126. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02ddba88._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15dbd1f2._.js +3 -0
  128. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1c95bcde._.js +1 -1
  129. package/.next/standalone/.next/server/chunks/[root-of-the-server]__23efcd78._.js +3 -0
  130. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a6d443b._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/[root-of-the-server]__53775b48._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5444db55._.js +1 -1
  133. package/.next/standalone/.next/server/chunks/[root-of-the-server]__591248f3._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d8178f6._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6261d672._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6923eecf._.js +1 -1
  137. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6fc12878._.js +1 -1
  138. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8402dfd1._.js +3 -0
  139. package/.next/standalone/.next/server/chunks/[root-of-the-server]__863cf6de._.js +1 -1
  140. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89404730._.js +3 -0
  141. package/.next/standalone/.next/server/chunks/[root-of-the-server]__98b3de5e._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d551ea2._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a4d3d791._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa3d72e3._.js +3 -0
  145. package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa5c8858._.js +2 -2
  146. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b11acc79._.js +1 -1
  147. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba01f286._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd91659b._.js +1 -1
  149. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c200214a._.js +1 -1
  150. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c20da96a._.js +3 -0
  151. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c602c518._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d7fab946._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8c1808b._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d9b9fecc._.js +1 -1
  155. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ddf63a21._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e280561d._.js +1 -1
  157. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e550423c._.js +1 -1
  158. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f9e66e02._.js +3 -0
  159. package/.next/standalone/.next/server/chunks/_33c0c729._.js +1 -1
  160. package/.next/standalone/.next/server/chunks/_3e8b4d8c._.js +1 -1
  161. package/.next/standalone/.next/server/chunks/_46f10554._.js +3 -0
  162. package/.next/standalone/.next/server/chunks/_4c806e26._.js +3 -0
  163. package/.next/standalone/.next/server/chunks/_cd3d20ca._.js +1 -1
  164. package/.next/standalone/.next/server/chunks/_ddffef3e._.js +1 -1
  165. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_setup_opencode-tui_route_actions_fc8ae29f.js +3 -0
  166. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_skills_sync-enterprise_route_actions_0ca45899.js +3 -0
  167. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_task-stats_route_actions_983505cd.js +3 -0
  168. package/.next/standalone/.next/server/chunks/ce889_server_app_api_setup_opencode-commands_si-optimizer_route_actions_fcde30ef.js +3 -0
  169. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_c33286ed.js +47 -4
  170. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f42faeee.js +1 -1
  171. package/.next/standalone/.next/server/chunks/src_98433cb8._.js +237 -0
  172. package/.next/standalone/.next/server/chunks/src_c8971a2d._.js +57 -8
  173. package/.next/standalone/.next/server/chunks/src_lib_119f6c7b._.js +3 -0
  174. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__9ab7cc4a._.js → [root-of-the-server]__082c32a2._.js} +2 -2
  175. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__51073007._.js +1 -1
  176. package/.next/standalone/.next/server/chunks/ssr/_049876f0._.js +1 -1
  177. package/.next/standalone/.next/server/chunks/ssr/_09546b95._.js +1 -1
  178. package/.next/standalone/.next/server/chunks/ssr/_8f5379ab._.js +1 -1
  179. package/.next/standalone/.next/server/chunks/ssr/_c8c8c083._.js +9 -9
  180. package/.next/standalone/.next/server/chunks/ssr/{_b121f1ae._.js → _e2faf4f5._.js} +2 -2
  181. package/.next/standalone/.next/server/chunks/ssr/_fd46f439._.js +2 -1
  182. package/.next/standalone/.next/server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_3582f3d0.js +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/node_modules_lodash-es_a1341fea._.js +1 -1
  184. package/.next/standalone/.next/server/chunks/ssr/node_modules_lodash-es_e1de6ed8._.js +1 -1
  185. package/.next/standalone/.next/server/chunks/ssr/src_66a70595._.js +1 -1
  186. package/.next/standalone/.next/server/chunks/ssr/src_app_login_page_tsx_72f58654._.js +1 -1
  187. package/.next/standalone/.next/server/pages/404.html +1 -1
  188. package/.next/standalone/.next/server/pages/500.html +2 -2
  189. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  191. package/.next/standalone/.next/static/chunks/{737b8cff3c6a4e30.js → 015467355d3866a3.js} +1 -1
  192. package/.next/standalone/.next/static/chunks/09f192c9b0609ad8.js +1 -0
  193. package/.next/standalone/.next/static/chunks/1945a5514fbc393c.css +1 -0
  194. package/.next/{static/chunks/07c9f28a269c701a.js → standalone/.next/static/chunks/361e4cf1e9a71ccb.js} +1 -1
  195. package/.next/{static/chunks/5432ce4a494bc74d.js → standalone/.next/static/chunks/60bc50374fd32f20.js} +3 -3
  196. package/.next/standalone/.next/static/chunks/{251551dcdf74a60d.js → 65bac0880a87bff3.js} +1 -1
  197. package/.next/standalone/.next/static/chunks/961f7fa606dd26a8.js +1 -0
  198. package/.next/standalone/.next/static/chunks/bab2ffd4f527acfb.js +1 -0
  199. package/.next/standalone/.next/static/chunks/c513373e5cfedd5b.js +2 -0
  200. package/.next/standalone/.next/static/chunks/ca3017e51e817855.js +1 -0
  201. package/.next/{static/chunks/7e35f4cf2e266022.js → standalone/.next/static/chunks/cb104c3cb4c52833.js} +1 -1
  202. package/.next/{static/chunks/ff6357067630b168.js → standalone/.next/static/chunks/e13d208072a48316.js} +1 -1
  203. package/.next/standalone/.next/static/chunks/{e09d9ee16fe90255.js → f786bb68e17b12b4.js} +1 -1
  204. package/.next/standalone/.next/static/chunks/fc61b990c5ec4ef4.js +109 -0
  205. package/.next/standalone/node_modules/.prisma/client/edge.js +7 -3
  206. package/.next/standalone/node_modules/.prisma/client/index-browser.js +4 -0
  207. package/.next/standalone/node_modules/.prisma/client/index.js +7 -3
  208. package/.next/standalone/node_modules/.prisma/client/package.json +1 -1
  209. package/.next/standalone/node_modules/.prisma/client/schema.prisma +26 -22
  210. package/.next/standalone/node_modules/.prisma/client/wasm.js +4 -0
  211. package/.next/standalone/node_modules/adm-zip/util/constants.js +142 -0
  212. package/.next/standalone/node_modules/adm-zip/util/decoder.js +5 -0
  213. package/.next/standalone/node_modules/adm-zip/util/errors.js +63 -0
  214. package/.next/standalone/node_modules/adm-zip/util/fattr.js +76 -0
  215. package/.next/standalone/node_modules/adm-zip/util/index.js +5 -0
  216. package/.next/standalone/node_modules/adm-zip/util/utils.js +339 -0
  217. package/.next/standalone/package.json +6 -2
  218. package/.next/standalone/prisma/schema.prisma +7 -3
  219. package/.next/standalone/scripts/opencode_plugin.ts +158 -50
  220. package/.next/standalone/scripts/opencode_tui_plugin.tsx +308 -0
  221. package/.next/standalone/scripts/si-optimizer.md +5 -0
  222. package/.next/static/chunks/{737b8cff3c6a4e30.js → 015467355d3866a3.js} +1 -1
  223. package/.next/static/chunks/09f192c9b0609ad8.js +1 -0
  224. package/.next/static/chunks/1945a5514fbc393c.css +1 -0
  225. package/.next/{standalone/.next/static/chunks/07c9f28a269c701a.js → static/chunks/361e4cf1e9a71ccb.js} +1 -1
  226. package/.next/{standalone/.next/static/chunks/5432ce4a494bc74d.js → static/chunks/60bc50374fd32f20.js} +3 -3
  227. package/.next/static/chunks/{251551dcdf74a60d.js → 65bac0880a87bff3.js} +1 -1
  228. package/.next/static/chunks/961f7fa606dd26a8.js +1 -0
  229. package/.next/static/chunks/bab2ffd4f527acfb.js +1 -0
  230. package/.next/static/chunks/c513373e5cfedd5b.js +2 -0
  231. package/.next/static/chunks/ca3017e51e817855.js +1 -0
  232. package/.next/{standalone/.next/static/chunks/7e35f4cf2e266022.js → static/chunks/cb104c3cb4c52833.js} +1 -1
  233. package/.next/{standalone/.next/static/chunks/ff6357067630b168.js → static/chunks/e13d208072a48316.js} +1 -1
  234. package/.next/static/chunks/{e09d9ee16fe90255.js → f786bb68e17b12b4.js} +1 -1
  235. package/.next/static/chunks/fc61b990c5ec4ef4.js +109 -0
  236. package/package.json +6 -2
  237. package/prisma/schema.prisma +7 -3
  238. package/scripts/activate_telemetry.sh +44 -1
  239. package/scripts/opencode_plugin.ts +158 -50
  240. package/scripts/opencode_tui_plugin.tsx +308 -0
  241. package/scripts/si-optimizer.md +5 -0
  242. package/scripts/utils.js +0 -1
  243. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1013b265._.js +0 -3
  244. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ce5e3b8._.js +0 -3
  245. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6d8053e2._.js +0 -3
  246. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b835ea7f._.js +0 -3
  247. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e2f0baee._.js +0 -3
  248. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fc05579d._.js +0 -3
  249. package/.next/standalone/.next/server/chunks/_41a98bd8._.js +0 -3
  250. package/.next/standalone/.next/server/chunks/src_497d2ad2._.js +0 -175
  251. package/.next/standalone/.next/server/chunks/src_lib_12408140._.js +0 -3
  252. package/.next/standalone/.next/static/chunks/01eddf501c574a44.js +0 -1
  253. package/.next/standalone/.next/static/chunks/1e782a49beaf489c.js +0 -1
  254. package/.next/standalone/.next/static/chunks/4071dbec4cf7e72e.js +0 -109
  255. package/.next/standalone/.next/static/chunks/67bd1a5de2195779.js +0 -1
  256. package/.next/standalone/.next/static/chunks/a87b5e84254095a5.js +0 -1
  257. package/.next/standalone/.next/static/chunks/c6bd2818656b1f20.css +0 -1
  258. package/.next/standalone/.next/static/chunks/dc59a07a8f327b40.js +0 -1
  259. package/.next/standalone/LICENSE +0 -21
  260. package/.next/standalone/bin/cli.js +0 -106
  261. package/.next/standalone/custom-models.example.json +0 -21
  262. package/.next/standalone/eslint.config.mjs +0 -18
  263. package/.next/standalone/features/feature-skill-used-jump-link/design/2026-03-18-skill-used-jump-link-design.md +0 -126
  264. package/.next/standalone/features/feature-skill-used-jump-link/feature.json +0 -32
  265. package/.next/standalone/features/feature-skill-used-jump-link/issue.md +0 -32
  266. package/.next/standalone/features/feature-skill-used-jump-link/plans/2026-03-18-skill-used-jump-link.md +0 -528
  267. package/.next/standalone/next.config.ts +0 -41
  268. package/.next/standalone/scripts/activate_telemetry.sh +0 -159
  269. package/.next/standalone/scripts/create_migration_package.sh +0 -124
  270. package/.next/standalone/scripts/fix_models.js +0 -66
  271. package/.next/standalone/scripts/init_opengauss.py +0 -284
  272. package/.next/standalone/scripts/install.js +0 -273
  273. package/.next/standalone/scripts/logs.js +0 -38
  274. package/.next/standalone/scripts/otel_data/logs.jsonl +0 -12
  275. package/.next/standalone/scripts/otel_data/metrics.jsonl +0 -21
  276. package/.next/standalone/scripts/otel_data/raw_requests.jsonl +0 -8
  277. package/.next/standalone/scripts/otel_data/raw_requests.jsonl.bak +0 -6
  278. package/.next/standalone/scripts/otel_receiver.py +0 -580
  279. package/.next/standalone/scripts/postinstall.js +0 -192
  280. package/.next/standalone/scripts/publish-npm.js +0 -401
  281. package/.next/standalone/scripts/restart.js +0 -26
  282. package/.next/standalone/scripts/restart.sh +0 -138
  283. package/.next/standalone/scripts/restart_dev.sh +0 -132
  284. package/.next/standalone/scripts/start.js +0 -291
  285. package/.next/standalone/scripts/status.js +0 -41
  286. package/.next/standalone/scripts/stop.js +0 -90
  287. package/.next/standalone/scripts/sync_skills.js +0 -216
  288. package/.next/standalone/scripts/utils.js +0 -235
  289. package/.next/standalone/tests/setup_skill_optimizer.sh +0 -118
  290. package/.next/standalone/tsconfig.json +0 -34
  291. package/.next/static/chunks/01eddf501c574a44.js +0 -1
  292. package/.next/static/chunks/1e782a49beaf489c.js +0 -1
  293. package/.next/static/chunks/4071dbec4cf7e72e.js +0 -109
  294. package/.next/static/chunks/67bd1a5de2195779.js +0 -1
  295. package/.next/static/chunks/a87b5e84254095a5.js +0 -1
  296. package/.next/static/chunks/c6bd2818656b1f20.css +0 -1
  297. package/.next/static/chunks/dc59a07a8f327b40.js +0 -1
  298. /package/.next/standalone/.next/static/{H581Rok68JtPV4bAVVH3l → iKG72t8Hpebb09DcIpKUJ}/_buildManifest.js +0 -0
  299. /package/.next/standalone/.next/static/{H581Rok68JtPV4bAVVH3l → iKG72t8Hpebb09DcIpKUJ}/_clientMiddlewareManifest.json +0 -0
  300. /package/.next/standalone/.next/static/{H581Rok68JtPV4bAVVH3l → iKG72t8Hpebb09DcIpKUJ}/_ssgManifest.js +0 -0
  301. /package/.next/static/{H581Rok68JtPV4bAVVH3l → iKG72t8Hpebb09DcIpKUJ}/_buildManifest.js +0 -0
  302. /package/.next/static/{H581Rok68JtPV4bAVVH3l → iKG72t8Hpebb09DcIpKUJ}/_clientMiddlewareManifest.json +0 -0
  303. /package/.next/static/{H581Rok68JtPV4bAVVH3l → iKG72t8Hpebb09DcIpKUJ}/_ssgManifest.js +0 -0
@@ -1,159 +0,0 @@
1
- #!/bin/bash
2
-
3
- # =============================================================================
4
- # Skill-Insight Official Setup Script (Fixed Path Logic)
5
- #
6
- # Installs native telemetry hooks for Claude Code and OpenCode.
7
- # =============================================================================
8
-
9
- # Define project root relative to this script's location
10
- # Using a more robust way to handle 'source' from different shells
11
- if [ -n "$BASH_SOURCE" ]; then
12
- SELF_PATH="$BASH_SOURCE"
13
- else
14
- SELF_PATH="$0"
15
- fi
16
-
17
- # Go to script dir, then up to project root
18
- SCRIPTS_DIR="$( cd -- "$( dirname -- "$SELF_PATH" )" &> /dev/null && pwd )"
19
- PROJECT_ROOT="$( dirname "$SCRIPTS_DIR" )"
20
-
21
- echo "🚀 Starting Skill-Insight Telemetry Setup..."
22
- echo "📂 Project Root: $PROJECT_ROOT"
23
-
24
- # --- 1. Load Configurations ---
25
- if [ -f "$PROJECT_ROOT/.env" ]; then
26
- export $(grep -v '^#' "$PROJECT_ROOT/.env" | xargs)
27
- echo "✅ Configuration loaded from .env"
28
- fi
29
-
30
- # --- 2. Setup OpenCode Plugin (Priority) ---
31
- OPENCODE_PLUGIN_SRC="$SCRIPTS_DIR/opencode_plugin.ts"
32
- OPENCODE_PLUGIN_DEST="$HOME/.opencode/plugins/Witty-Skill-Insight.ts"
33
-
34
- if [ -f "$OPENCODE_PLUGIN_SRC" ]; then
35
- echo "🛠️ Syncing OpenCode Plugin..."
36
-
37
- # Create plugin directory
38
- mkdir -p "$HOME/.opencode/plugins"
39
- cp "$OPENCODE_PLUGIN_SRC" "$OPENCODE_PLUGIN_DEST"
40
- echo "✅ OpenCode Plugin installed to $OPENCODE_PLUGIN_DEST"
41
-
42
- # --- 2.1 Setup Skill-Insight Config (~/.skill-insight/.env) ---
43
- SKILL_INSIGHT_CONFIG_DIR="$HOME/.skill-insight"
44
- SKILL_INSIGHT_CONFIG_FILE="$SKILL_INSIGHT_CONFIG_DIR/.env"
45
- mkdir -p "$SKILL_INSIGHT_CONFIG_DIR"
46
-
47
- EXISTING_KEY=""
48
- EXISTING_HOST=""
49
- if [ -f "$SKILL_INSIGHT_CONFIG_FILE" ]; then
50
- # match only UNCOMMENTED lines
51
- EXISTING_KEY=$(grep '^SKILL_INSIGHT_API_KEY=' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d'=' -f2-)
52
- EXISTING_HOST=$(grep '^SKILL_INSIGHT_HOST=' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d'=' -f2-)
53
- fi
54
-
55
- # API Key Selection Logic
56
- API_KEY=""
57
- if [ -n "$EXISTING_KEY" ]; then
58
- echo "🔑 Found existing API Key in $SKILL_INSIGHT_CONFIG_FILE."
59
- read -p "👉 Use existing key? (y/N, Default: y): " USE_EXISTING < /dev/tty
60
- if [[ "$USE_EXISTING" =~ ^[Nn]$ ]]; then
61
- read -p "👉 Please enter your NEW API Key: " API_KEY < /dev/tty
62
- else
63
- API_KEY="$EXISTING_KEY"
64
- fi
65
- elif [ -n "$SKILL_INSIGHT_API_KEY" ]; then
66
- echo "🔑 Found API Key in current environment/env file: $SKILL_INSIGHT_API_KEY"
67
- read -p "👉 Use this key for global config? (y/N, Default: y): " USE_ENV < /dev/tty
68
- if [[ "$USE_ENV" =~ ^[Nn]$ ]]; then
69
- read -p "👉 Please enter your API Key: " API_KEY < /dev/tty
70
- else
71
- API_KEY="$SKILL_INSIGHT_API_KEY"
72
- fi
73
- else
74
- read -p "👉 Please enter your API Key: " API_KEY < /dev/tty
75
- fi
76
-
77
- # -- Host Logic --
78
- NEW_HOST="${SKILL_INSIGHT_HOST:-127.0.0.1:3000}"
79
- FINAL_HOST="$NEW_HOST"
80
- if [ -n "$EXISTING_HOST" ] && [ "$EXISTING_HOST" != "$NEW_HOST" ]; then
81
- echo "🌐 Current Host in global config: $EXISTING_HOST"
82
- echo "🌐 New Host detected: $NEW_HOST"
83
- read -p "👉 Change to new Host? (y/N, Default: y): " CHANGE_HOST < /dev/tty
84
- if [[ "$CHANGE_HOST" =~ ^[Nn]$ ]]; then
85
- FINAL_HOST="$EXISTING_HOST"
86
- fi
87
- fi
88
-
89
- if [ -z "$API_KEY" ]; then
90
- echo "⚠️ Warning: No API Key provided. Data reporting will fail."
91
- fi
92
-
93
- echo "⚙️ Syncing configuration to $SKILL_INSIGHT_CONFIG_FILE..."
94
- touch "$SKILL_INSIGHT_CONFIG_FILE"
95
- cp "$SKILL_INSIGHT_CONFIG_FILE" "${SKILL_INSIGHT_CONFIG_FILE}.bak"
96
- grep -v "^SKILL_INSIGHT_API_KEY=" "${SKILL_INSIGHT_CONFIG_FILE}.bak" | grep -v "^SKILL_INSIGHT_HOST=" > "$SKILL_INSIGHT_CONFIG_FILE"
97
- echo "SKILL_INSIGHT_API_KEY=$API_KEY" >> "$SKILL_INSIGHT_CONFIG_FILE"
98
- echo "SKILL_INSIGHT_HOST=$FINAL_HOST" >> "$SKILL_INSIGHT_CONFIG_FILE"
99
- rm "${SKILL_INSIGHT_CONFIG_FILE}.bak"
100
- echo "✅ Configuration updated (Other settings preserved)."
101
-
102
- # NEW: Register Sync Hook into .zshrc / .bashrc
103
- SYNC_SCRIPT="$HOME/.skill-insight/sync_skills.js"
104
- if [ -f "$SYNC_SCRIPT" ]; then
105
- SHELL_RC="$HOME/.zshrc"
106
- [ -f "$HOME/.bashrc" ] && SHELL_RC="$HOME/.bashrc"
107
-
108
- # Add aliases if not present
109
- if ! grep -q "witty_sync_wrapper" "$SHELL_RC"; then
110
- echo "" >> "$SHELL_RC"
111
- echo "# Skill-Insight Auto-Sync" >> "$SHELL_RC"
112
- echo "alias opencode='node $SYNC_SCRIPT --agent opencode && opencode'" >> "$SHELL_RC"
113
- echo "alias claude='node $SYNC_SCRIPT --agent claude && claude'" >> "$SHELL_RC"
114
- echo "✅ Auto-sync aliases added to $SHELL_RC"
115
- fi
116
- fi
117
-
118
- else
119
- echo "❌ Error: OpenCode plugin source not found at $OPENCODE_PLUGIN_SRC"
120
- fi
121
-
122
- # --- 3. Setup Claude Code Hook ---
123
- CLAUDE_HOOK="$SCRIPTS_DIR/capture_claude.js"
124
- if [ -f "$CLAUDE_HOOK" ]; then
125
- echo "🛠️ Configuring Claude Code Hook..."
126
- chmod +x "$CLAUDE_HOOK"
127
- if command -v claude &> /dev/null; then
128
- # Check for active Claude processes which can cause config locks/hangs
129
- CLAUDE_PIDS=$(pgrep -x claude 2>/dev/null)
130
- if [ -n "$CLAUDE_PIDS" ]; then
131
- echo "⚠️ Detected running Claude Code process(es): $CLAUDE_PIDS"
132
- echo " Active sessions can prevent configuration updates from completing."
133
- read -p "👉 Would you like to terminate these processes to speed up registration? (y/N): " KILL_CLAUDE < /dev/tty
134
- if [[ "$KILL_CLAUDE" =~ ^[Yy]$ ]]; then
135
- echo "🔪 Terminating Claude processes..."
136
- kill -9 $CLAUDE_PIDS 2>/dev/null
137
- sleep 1
138
- else
139
- echo "⏳ Continuing (Warning: this step may hang if Claude is busy)..."
140
- fi
141
- fi
142
-
143
- claude config set hooks.Stop "$CLAUDE_HOOK" >/dev/null 2>&1
144
- echo "✅ Claude Hook registered: $CLAUDE_HOOK"
145
- fi
146
- else
147
- echo "❌ Error: Claude hook script not found at $CLAUDE_HOOK"
148
- fi
149
-
150
- # --- 4. Final Cleanup ---
151
- unset ANTHROPIC_BASE_URL
152
- unset DEEPSEEK_BASE_URL
153
- unset OPENAI_BASE_URL
154
-
155
- echo ""
156
- echo "🌟 Skill-Insight Telemetry: READY"
157
- echo "------------------------------------------------"
158
- echo "To test, run: opencode run 'hello'"
159
- echo ""
@@ -1,124 +0,0 @@
1
- #!/bin/bash
2
- # scripts/create_migration_package.sh
3
-
4
- TIMESTAMP=$(date +%Y%m%d_%H%M%S)
5
- PACKAGE_NAME="migration_data_$TIMESTAMP"
6
- mkdir -p "$PACKAGE_NAME/data"
7
-
8
- echo "📦 Creating migration package: $PACKAGE_NAME"
9
-
10
- # 1. Back up Database Safely
11
- DB_NAME="witty_insight.db"
12
- DB_PATH="data/$DB_NAME"
13
- if [ -f "$DB_PATH" ]; then
14
- echo " Running safe backup of SQLite database..."
15
- if command -v sqlite3 &> /dev/null; then
16
- sqlite3 "$DB_PATH" ".backup '$PACKAGE_NAME/data/$DB_NAME'"
17
- else
18
- echo " ⚠️ sqlite3 command not found, falling back to direct copy."
19
- echo " ⚠️ Recommended: Stop the application before running this script to ensure data consistency."
20
- cp "$DB_PATH" "$PACKAGE_NAME/data/"
21
- fi
22
- echo " ✔ Database backed up to $PACKAGE_NAME/data/$DB_NAME"
23
- else
24
- echo " ❌ Database file not found at $DB_PATH!"
25
- rm -rf "$PACKAGE_NAME"
26
- exit 1
27
- fi
28
-
29
- # 2. Copy .env (Optional/Warning)
30
- if [ -f ".env" ]; then
31
- echo " ✔ Copying .env file (Contains secrets!)"
32
- cp ".env" "$PACKAGE_NAME/"
33
- fi
34
-
35
- # 3. Copy Prisma Schema (Critical for Prisma Client gen)
36
- if [ -d "prisma" ]; then
37
- echo " ✔ Copying Prisma schema"
38
- mkdir -p "$PACKAGE_NAME/prisma"
39
- cp -r prisma/* "$PACKAGE_NAME/prisma/"
40
- fi
41
-
42
- # 4. Create Restore Instructions
43
- cat > "$PACKAGE_NAME/HOW_TO_RESTORE.txt" <<EOF
44
- MIGRATION RESTORE INSTRUCTIONS
45
- ==============================
46
-
47
- 1. Pre-requisites:
48
- - Node.js installed on target server.
49
- - Project code (git clone) is present on target server.
50
-
51
- 2. Files in this package:
52
- - data/$DB_NAME: The database file (User data, Skills, Executions).
53
- - .env: Environment variables (Review before using).
54
- - prisma/: Database schema files.
55
-
56
- 3. Restore Steps:
57
- a. Stop the running application on the new server (e.g., pm2 stop all).
58
-
59
- b. Extract the package on the destination server:
60
- tar -xzf $PACKAGE_NAME.tar.gz
61
- cd $PACKAGE_NAME
62
-
63
- c. Copy database to the project's 'data/' folder:
64
- mkdir -p /path/to/your/project/data
65
- cp data/$DB_NAME /path/to/your/project/data/
66
-
67
- d. Ensure '.env' is correctly set up in project root.
68
- (Check if DATABASE_URL="file:../data/$DB_NAME" is set)
69
- cp .env /path/to/your/project/
70
-
71
- e. Regenerate Prisma Client (CRITICAL STEP):
72
- cd /path/to/your/project
73
- npm install
74
- npx prisma generate
75
-
76
- f. Restart the application.
77
- npm run dev (or npm run start / pm2 start ...)
78
-
79
- EOF
80
-
81
- # 5. Compress
82
- # Use COPYFILE_DISABLE=1 to prevent ._ resource fork files on macOS
83
- # Use --no-xattrs to prevent macOS extended attributes (like provenance) from causing warnings on Linux
84
- if tar --version | grep -q "bsdtar"; then
85
- # macOS usually uses bsdtar
86
- COPYFILE_DISABLE=1 tar --no-xattrs -czf "${PACKAGE_NAME}.tar.gz" "$PACKAGE_NAME"
87
- else
88
- # GNU tar or other
89
- tar -czf "${PACKAGE_NAME}.tar.gz" "$PACKAGE_NAME"
90
- fi
91
- rm -rf "$PACKAGE_NAME"
92
-
93
- echo ""
94
- echo "✅ Migration package created: ${PACKAGE_NAME}.tar.gz"
95
- echo "---------------------------------------------------"
96
- echo "NEXT STEPS (Execute on OBJECTIVE SERVER):"
97
- echo ""
98
- echo "1. Transfer the file:"
99
- echo " scp ${PACKAGE_NAME}.tar.gz user@target-server:/path/to/project_root/"
100
- echo ""
101
- echo "2. Log in and extract:"
102
- echo " ssh user@target-server"
103
- echo " cd /path/to/project_root/"
104
- echo " tar -xzf ${PACKAGE_NAME}.tar.gz"
105
- echo ""
106
- echo "3. Restore data & environment:"
107
- echo " cd ${PACKAGE_NAME}"
108
- echo " # Stop app if running"
109
- echo " # Copy Database"
110
- echo " mkdir -p ../data"
111
- echo " cp data/$DB_NAME ../data/"
112
- echo " # Copy Config"
113
- echo " cp .env ../.env"
114
- echo " # Copy Schema (just in case code is old)"
115
- echo " cp -r prisma/* ../prisma/"
116
- echo ""
117
- echo "4. Rebuild Database Client (CRITICAL):"
118
- echo " cd .."
119
- echo " npm install"
120
- echo " npx prisma generate"
121
- echo ""
122
- echo "5. Start App:"
123
- echo " npm run dev"
124
- echo "---------------------------------------------------"
@@ -1,66 +0,0 @@
1
-
2
- const { PrismaClient } = require('@prisma/client');
3
- const prisma = new PrismaClient();
4
-
5
- async function main() {
6
- console.log('开始刷新历史模型数据...');
7
-
8
- // 1. 更新 Execution 表
9
- const updateExecutions = await prisma.execution.updateMany({
10
- where: {
11
- OR: [
12
- { model: null },
13
- { model: '' },
14
- { model: 'unknown' },
15
- { model: 'Unknown' }
16
- ]
17
- },
18
- data: {
19
- model: 'deepseek-chat'
20
- }
21
- });
22
- console.log(`已刷新 ${updateExecutions.count} 条 Execution 记录。`);
23
-
24
- // 2. 更新 Session 表
25
- const updateSessions = await prisma.session.updateMany({
26
- where: {
27
- OR: [
28
- { model: null },
29
- { model: '' },
30
- { model: 'unknown' },
31
- { model: 'Unknown' }
32
- ]
33
- },
34
- data: {
35
- model: 'deepseek-chat'
36
- }
37
- });
38
- console.log(`已刷新 ${updateSessions.count} 条 Session 记录。`);
39
-
40
- // 3. 更新 User 表中的 defaultModel(防止旧的无效偏好干扰)
41
- const updateUsers = await prisma.user.updateMany({
42
- where: {
43
- OR: [
44
- { defaultModel: null },
45
- { defaultModel: '' },
46
- { defaultModel: 'unknown' },
47
- { defaultModel: 'Unknown' }
48
- ]
49
- },
50
- data: {
51
- defaultModel: 'deepseek-chat'
52
- }
53
- });
54
- console.log(`已重置 ${updateUsers.count} 个用户的默认模型偏好。`);
55
-
56
- console.log('数据刷新完成。');
57
- }
58
-
59
- main()
60
- .catch(e => {
61
- console.error('刷新失败:', e);
62
- process.exit(1);
63
- })
64
- .finally(async () => {
65
- await prisma.$disconnect();
66
- });
@@ -1,284 +0,0 @@
1
- #!/usr/bin/env python3
2
- import os
3
- import sys
4
- import logging
5
- import uuid
6
-
7
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
8
- logger = logging.getLogger(__name__)
9
-
10
- try:
11
- import psycopg2
12
- from psycopg2 import Error
13
- except ImportError:
14
- logger.error("未找到 psycopg2 模块。请使用 'pip install psycopg2-binary' 安装。")
15
- sys.exit(1)
16
-
17
- TABLE_DEFINITIONS = {
18
- "User": {
19
- "columns": [
20
- ("id", "TEXT PRIMARY KEY"),
21
- ("username", "TEXT UNIQUE NOT NULL"),
22
- ("apiKey", "TEXT UNIQUE NOT NULL"),
23
- ("createdAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
24
- ],
25
- "unique_constraints": []
26
- },
27
- "Skill": {
28
- "columns": [
29
- ("id", "TEXT PRIMARY KEY"),
30
- ("name", "TEXT NOT NULL"),
31
- ("category", "TEXT DEFAULT 'Other'"),
32
- ("description", "TEXT"),
33
- ("tags", "TEXT"),
34
- ("visibility", "TEXT DEFAULT 'private'"),
35
- ("author", "TEXT"),
36
- ("user", "TEXT"),
37
- ("createdAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
38
- ("updatedAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
39
- ("activeVersion", "INTEGER DEFAULT 0"),
40
- ("isUploaded", "BOOLEAN DEFAULT FALSE"),
41
- ],
42
- "unique_constraints": ["UNIQUE(name, \"user\")"]
43
- },
44
- "SkillVersion": {
45
- "columns": [
46
- ("id", "TEXT PRIMARY KEY"),
47
- ("skillId", "TEXT NOT NULL"),
48
- ("version", "INTEGER NOT NULL"),
49
- ("content", "TEXT NOT NULL"),
50
- ("assetPath", "TEXT"),
51
- ("files", "TEXT"),
52
- ("changeLog", "TEXT"),
53
- ("createdAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
54
- ],
55
- "unique_constraints": ["UNIQUE(\"skillId\", version)"],
56
- "foreign_keys": ["FOREIGN KEY (\"skillId\") REFERENCES \"Skill\"(id) ON DELETE CASCADE"]
57
- },
58
- "Execution": {
59
- "columns": [
60
- ("id", "TEXT PRIMARY KEY"),
61
- ("taskId", "TEXT"),
62
- ("query", "TEXT"),
63
- ("framework", "TEXT"),
64
- ("tokens", "INTEGER"),
65
- ("cost", "FLOAT"),
66
- ("latency", "FLOAT"),
67
- ("timestamp", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
68
- ("model", "TEXT"),
69
- ("finalResult", "TEXT"),
70
- ("skill", "TEXT"),
71
- ("skills", "TEXT"),
72
- ("isSkillCorrect", "BOOLEAN DEFAULT FALSE"),
73
- ("isAnswerCorrect", "BOOLEAN DEFAULT FALSE"),
74
- ("answerScore", "FLOAT"),
75
- ("skillScore", "FLOAT"),
76
- ("judgmentReason", "TEXT"),
77
- ("failures", "TEXT"),
78
- ("skillIssues", "TEXT"),
79
- ("skillVersion", "INTEGER"),
80
- ("label", "TEXT"),
81
- ("user", "TEXT"),
82
- ("toolCallCount", "INTEGER"),
83
- ("llmCallCount", "INTEGER"),
84
- ("inputTokens", "INTEGER"),
85
- ("outputTokens", "INTEGER"),
86
- ("toolCallErrorCount", "INTEGER"),
87
- ("cacheReadInputTokens", "INTEGER"),
88
- ("cacheCreationInputTokens", "INTEGER"),
89
- ("maxSingleCallTokens", "INTEGER"),
90
- ],
91
- "unique_constraints": []
92
- },
93
- "Config": {
94
- "columns": [
95
- ("id", "TEXT PRIMARY KEY"),
96
- ("query", "TEXT NOT NULL"),
97
- ("skill", "TEXT NOT NULL"),
98
- ("standardAnswer", "TEXT NOT NULL"),
99
- ("rootCauses", "TEXT"),
100
- ("keyActions", "TEXT"),
101
- ("user", "TEXT"),
102
- ("parseStatus", "TEXT DEFAULT 'completed'"),
103
- ],
104
- "unique_constraints": ["UNIQUE(query, \"user\")"]
105
- },
106
- "Session": {
107
- "columns": [
108
- ("id", "TEXT PRIMARY KEY"),
109
- ("taskId", "TEXT UNIQUE NOT NULL"),
110
- ("label", "TEXT"),
111
- ("query", "TEXT"),
112
- ("startTime", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
113
- ("endTime", "TIMESTAMP"),
114
- ("interactions", "TEXT"),
115
- ("user", "TEXT"),
116
- ("model", "TEXT"),
117
- ],
118
- "unique_constraints": []
119
- },
120
- "UserSettings": {
121
- "columns": [
122
- ("id", "TEXT PRIMARY KEY"),
123
- ("user", "TEXT UNIQUE NOT NULL"),
124
- ("settingsJson", "TEXT NOT NULL"),
125
- ("createdAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
126
- ("updatedAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
127
- ],
128
- "unique_constraints": []
129
- },
130
- "ParsedFlow": {
131
- "columns": [
132
- ("id", "TEXT PRIMARY KEY"),
133
- ("skillId", "TEXT NOT NULL"),
134
- ("version", "INTEGER NOT NULL"),
135
- ("user", "TEXT"),
136
- ("flowJson", "TEXT NOT NULL"),
137
- ("mermaidCode", "TEXT NOT NULL"),
138
- ("parsedAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
139
- ],
140
- "unique_constraints": ["UNIQUE(\"skillId\", version, \"user\")"]
141
- },
142
- "ExecutionMatch": {
143
- "columns": [
144
- ("id", "TEXT PRIMARY KEY"),
145
- ("executionId", "TEXT UNIQUE NOT NULL"),
146
- ("skillId", "TEXT NOT NULL"),
147
- ("skillVersion", "INTEGER NOT NULL"),
148
- ("user", "TEXT"),
149
- ("matchJson", "TEXT NOT NULL"),
150
- ("staticMermaid", "TEXT NOT NULL"),
151
- ("dynamicMermaid", "TEXT NOT NULL"),
152
- ("analysisText", "TEXT"),
153
- ("interactionCount", "INTEGER NOT NULL"),
154
- ("matchedAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
155
- ],
156
- "unique_constraints": []
157
- },
158
- "UserGuideState": {
159
- "columns": [
160
- ("id", "TEXT PRIMARY KEY"),
161
- ("user", "TEXT UNIQUE NOT NULL"),
162
- ("guideDisabled", "BOOLEAN DEFAULT FALSE"),
163
- ("currentStep", "INTEGER DEFAULT 0"),
164
- ("completedSteps", "TEXT DEFAULT '[]'"),
165
- ("skippedSteps", "TEXT DEFAULT '[]'"),
166
- ("lastShownAt", "TIMESTAMP"),
167
- ("dismissedAt", "TIMESTAMP"),
168
- ("createdAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
169
- ("updatedAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
170
- ],
171
- "unique_constraints": []
172
- }
173
- }
174
-
175
- def get_existing_columns(cursor, table_name):
176
- cursor.execute("""
177
- SELECT column_name
178
- FROM information_schema.columns
179
- WHERE table_name = %s
180
- """, (table_name,))
181
- return [row[0] for row in cursor.fetchall()]
182
-
183
- def table_exists(cursor, table_name):
184
- cursor.execute("""
185
- SELECT EXISTS (
186
- SELECT 1 FROM information_schema.tables
187
- WHERE table_name = %s
188
- )
189
- """, (table_name,))
190
- return cursor.fetchone()[0]
191
-
192
- def init_opengauss_db():
193
- connection = None
194
- cursor = None
195
- try:
196
- host = os.getenv("DB_HOST", "127.0.0.1")
197
- port = os.getenv("DB_PORT", "26000")
198
- dbname = os.getenv("DB_NAME", "postgres")
199
- user = os.getenv("DB_USER", "omm")
200
- password = os.getenv("DB_PASSWORD", "")
201
-
202
- logger.info(f"正在以用户 {user} 连接到 OpenGauss ({host}:{port})...")
203
-
204
- connection = psycopg2.connect(
205
- host=host,
206
- port=port,
207
- dbname=dbname,
208
- user=user,
209
- password=password
210
- )
211
- connection.autocommit = True
212
- logger.info("数据库连接成功")
213
-
214
- cursor = connection.cursor()
215
-
216
- cursor.execute("SELECT version();")
217
- db_version = cursor.fetchone()
218
- print(f"成功连接到 OpenGauss!版本: {db_version[0]}\n")
219
-
220
- for table_name, table_def in TABLE_DEFINITIONS.items():
221
- print(f"处理表: {table_name}")
222
-
223
- if not table_exists(cursor, table_name):
224
- columns_sql = ", ".join([f'"{col[0]}" {col[1]}' for col in table_def["columns"]])
225
- constraints_sql = ""
226
- if table_def.get("unique_constraints"):
227
- constraints_sql = ", " + ", ".join(table_def["unique_constraints"])
228
- if table_def.get("foreign_keys"):
229
- constraints_sql += ", " + ", ".join(table_def["foreign_keys"])
230
-
231
- create_sql = f'CREATE TABLE "{table_name}" ({columns_sql}{constraints_sql})'
232
- cursor.execute(create_sql)
233
- print(f" ✓ 创建表 {table_name}")
234
- else:
235
- existing_columns = get_existing_columns(cursor, table_name)
236
- added_columns = []
237
-
238
- for col_name, col_def in table_def["columns"]:
239
- if col_name not in existing_columns:
240
- alter_sql = f'ALTER TABLE "{table_name}" ADD COLUMN "{col_name}" {col_def}'
241
- cursor.execute(alter_sql)
242
- added_columns.append(col_name)
243
-
244
- if added_columns:
245
- print(f" ✓ 添加缺失列: {', '.join(added_columns)}")
246
- else:
247
- print(f" ✓ 表结构完整,无需修改")
248
-
249
- print("\nOpenGauss 数据库表结构同步完成。")
250
-
251
- test_user_id = str(uuid.uuid4())
252
- try:
253
- insert_query = 'INSERT INTO "User" (id, username, "apiKey") VALUES (%s, %s, %s)'
254
- record_to_insert = (test_user_id, "GaussDeveloper", "gauss-dev-key")
255
- cursor.execute(insert_query, record_to_insert)
256
- connection.commit()
257
- print("测试用户记录插入成功。")
258
- except Error as e:
259
- if e.pgcode == '23505':
260
- print("测试用户记录已存在,跳过插入。")
261
- connection.rollback()
262
- else:
263
- raise e
264
-
265
- cursor.execute('SELECT * FROM "User" WHERE username = %s', ("GaussDeveloper",))
266
- record = cursor.fetchone()
267
- if record:
268
- print(f"验证用户: ID={record[0]}, Username={record[1]}")
269
-
270
- except (Exception, Error) as error:
271
- print(f"操作 OpenGauss 时发生错误: {error}")
272
- if connection:
273
- connection.rollback()
274
- sys.exit(1)
275
-
276
- finally:
277
- if cursor:
278
- cursor.close()
279
- if connection:
280
- connection.close()
281
- print("\n数据库连接已安全关闭。")
282
-
283
- if __name__ == "__main__":
284
- init_opengauss_db()