@witty-ai/skill-insight 0.4.0-beta → 0.6.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 (347) hide show
  1. package/.env.example +55 -5
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/app-path-routes-manifest.json +5 -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 +30 -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 +3 -3
  18. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  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/auth/organization/route/app-paths-manifest.json +3 -0
  25. package/.next/standalone/.next/server/app/api/auth/organization/route/build-manifest.json +11 -0
  26. package/.next/standalone/.next/server/app/api/auth/organization/route/server-reference-manifest.json +4 -0
  27. package/.next/standalone/.next/server/app/api/auth/organization/route.js +7 -0
  28. package/.next/standalone/.next/server/app/api/auth/organization/route.js.map +5 -0
  29. package/.next/standalone/.next/server/app/api/auth/organization/route.js.nft.json +1 -0
  30. package/.next/standalone/.next/server/app/api/auth/organization/route_client-reference-manifest.js +2 -0
  31. package/.next/standalone/.next/server/app/api/config/create/route.js +2 -2
  32. package/.next/standalone/.next/server/app/api/config/create/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/config/route.js +4 -4
  34. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/data/route.js +3 -3
  36. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/executions/[executionId]/analyze-match/route.js +1 -1
  38. package/.next/standalone/.next/server/app/api/executions/[executionId]/analyze-match/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js +3 -3
  40. package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/otel/v1/traces/route.js +2 -2
  42. package/.next/standalone/.next/server/app/api/otel/v1/traces/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/proxy/[taskId]/[...path]/route.js +1 -1
  44. package/.next/standalone/.next/server/app/api/proxy/[taskId]/[...path]/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js +5 -5
  46. package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/rejudge/route.js +3 -3
  48. package/.next/standalone/.next/server/app/api/rejudge/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/session/route.js +3 -3
  50. package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/settings/route.js +1 -1
  52. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route/app-paths-manifest.json +3 -0
  54. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route/build-manifest.json +11 -0
  55. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route/server-reference-manifest.json +4 -0
  56. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route.js +6 -0
  57. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route.js.map +5 -0
  58. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route.js.nft.json +1 -0
  59. package/.next/standalone/.next/server/app/api/setup/opencode-commands/si-optimizer/route_client-reference-manifest.js +2 -0
  60. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route/app-paths-manifest.json +3 -0
  61. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route/build-manifest.json +11 -0
  62. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route/server-reference-manifest.json +4 -0
  63. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route.js +6 -0
  64. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route.js.map +5 -0
  65. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route.js.nft.json +1 -0
  66. package/.next/standalone/.next/server/app/api/setup/opencode-tui/route_client-reference-manifest.js +2 -0
  67. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/parse-flow/route.js +1 -1
  69. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/parse-flow/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js +3 -2
  71. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/skills/automation/import/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/skills/logs/route.js +2 -2
  74. package/.next/standalone/.next/server/app/api/skills/logs/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/skills/route.js +3 -2
  76. package/.next/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route/app-paths-manifest.json +3 -0
  78. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route/build-manifest.json +11 -0
  79. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route/server-reference-manifest.json +4 -0
  80. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js +8 -0
  81. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.map +5 -0
  82. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.nft.json +1 -0
  83. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route_client-reference-manifest.js +2 -0
  84. package/.next/standalone/.next/server/app/api/task-stats/route/app-paths-manifest.json +3 -0
  85. package/.next/standalone/.next/server/app/api/task-stats/route/build-manifest.json +11 -0
  86. package/.next/standalone/.next/server/app/api/task-stats/route/server-reference-manifest.json +4 -0
  87. package/.next/standalone/.next/server/app/api/task-stats/route.js +11 -0
  88. package/.next/standalone/.next/server/app/api/task-stats/route.js.map +5 -0
  89. package/.next/standalone/.next/server/app/api/task-stats/route.js.nft.json +1 -0
  90. package/.next/standalone/.next/server/app/api/task-stats/route_client-reference-manifest.js +2 -0
  91. package/.next/standalone/.next/server/app/api/upload/route.js +2 -2
  92. package/.next/standalone/.next/server/app/api/upload/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/details/page/react-loadable-manifest.json +2 -2
  94. package/.next/standalone/.next/server/app/details/page.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/details/page_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/details.html +1 -1
  97. package/.next/standalone/.next/server/app/details.rsc +4 -4
  98. package/.next/standalone/.next/server/app/details.segments/_full.segment.rsc +4 -4
  99. package/.next/standalone/.next/server/app/details.segments/_head.segment.rsc +1 -1
  100. package/.next/standalone/.next/server/app/details.segments/_index.segment.rsc +3 -3
  101. package/.next/standalone/.next/server/app/details.segments/_tree.segment.rsc +2 -2
  102. package/.next/standalone/.next/server/app/details.segments/details/__PAGE__.segment.rsc +2 -2
  103. package/.next/standalone/.next/server/app/details.segments/details.segment.rsc +1 -1
  104. package/.next/standalone/.next/server/app/index.html +1 -1
  105. package/.next/standalone/.next/server/app/index.rsc +4 -4
  106. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  107. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  108. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  109. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  110. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  111. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/login.html +1 -1
  114. package/.next/standalone/.next/server/app/login.rsc +4 -4
  115. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +4 -4
  116. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  117. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +3 -3
  118. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  119. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  120. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  121. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/skills/page.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/skills.html +1 -1
  126. package/.next/standalone/.next/server/app/skills.rsc +4 -4
  127. package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +4 -4
  128. package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  129. package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +3 -3
  130. package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  131. package/.next/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +2 -2
  132. package/.next/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  133. package/.next/standalone/.next/server/app-paths-manifest.json +5 -0
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02ddba88._.js +3 -0
  135. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15dbd1f2._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ce5e3b8._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a6d443b._.js +3 -0
  138. package/.next/standalone/.next/server/chunks/[root-of-the-server]__53775b48._.js +3 -0
  139. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5444db55._.js +3 -0
  140. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6923eecf._.js +3 -0
  141. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6d8053e2._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8402dfd1._.js +3 -0
  143. package/.next/standalone/.next/server/chunks/[root-of-the-server]__863cf6de._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89404730._.js +3 -0
  145. package/.next/standalone/.next/server/chunks/[root-of-the-server]__98b3de5e._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a4d3d791._.js +3 -0
  147. package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa5c8858._.js +2 -2
  148. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd91659b._.js +3 -0
  149. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c200214a._.js +3 -0
  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]__d7fab946._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8c1808b._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d9b9fecc._.js +3 -0
  154. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ddf63a21._.js +3 -0
  155. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f9e66e02._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/_3e8b4d8c._.js +1 -1
  157. package/.next/standalone/.next/server/chunks/_41a98bd8._.js +1 -1
  158. package/.next/standalone/.next/server/chunks/_4c806e26._.js +3 -0
  159. package/.next/standalone/.next/server/chunks/_cd3d20ca._.js +1 -1
  160. package/.next/standalone/.next/server/chunks/_ddffef3e._.js +1 -1
  161. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_organization_route_actions_f58710b7.js +3 -0
  162. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_setup_opencode-tui_route_actions_fc8ae29f.js +3 -0
  163. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_skills_sync-enterprise_route_actions_0ca45899.js +3 -0
  164. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_task-stats_route_actions_983505cd.js +3 -0
  165. package/.next/standalone/.next/server/chunks/ce889_server_app_api_setup_opencode-commands_si-optimizer_route_actions_fcde30ef.js +3 -0
  166. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_c33286ed.js +47 -43
  167. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f42faeee.js +1 -1
  168. package/.next/standalone/.next/server/chunks/src_98433cb8._.js +175 -0
  169. package/.next/standalone/.next/server/chunks/src_lib_12408140._.js +1 -1
  170. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__5d576168._.js → [root-of-the-server]__40353d98._.js} +1 -1
  171. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__89851212._.js → [root-of-the-server]__480fcd92._.js} +1 -1
  172. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__28978655._.js → [root-of-the-server]__48f8fbcb._.js} +1 -1
  173. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__a5ef0b61._.js → [root-of-the-server]__49921b2a._.js} +1 -1
  174. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__317833f9._.js → [root-of-the-server]__593be3d6._.js} +1 -1
  175. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__ca101543._.js → [root-of-the-server]__5e9ff641._.js} +1 -1
  176. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__90641614._.js → [root-of-the-server]__66cc6ff2._.js} +1 -1
  177. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__cda1e286._.js → [root-of-the-server]__9889bdc8._.js} +1 -1
  178. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__42ba97b6._.js → [root-of-the-server]__9905ca7a._.js} +2 -2
  179. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9ab7cc4a._.js +3 -0
  180. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__7bb97139._.js → [root-of-the-server]__9d6b7d48._.js} +1 -1
  181. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__6b8b9bb9._.js → [root-of-the-server]__b8edc8c6._.js} +1 -1
  182. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__b9972e88._.js → [root-of-the-server]__d691ecb0._.js} +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__52851239._.js → [root-of-the-server]__e5ddfd15._.js} +1 -1
  184. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__9630dedf._.js → [root-of-the-server]__f72f330e._.js} +1 -1
  185. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__99ab66d7._.js → [root-of-the-server]__f843e085._.js} +1 -1
  186. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__d424fa04._.js → [root-of-the-server]__fd69d276._.js} +2 -2
  187. package/.next/standalone/.next/server/chunks/ssr/{_7688d7cd._.js → _049876f0._.js} +2 -2
  188. package/.next/standalone/.next/server/chunks/ssr/{_72a74a0c._.js → _09546b95._.js} +2 -2
  189. package/.next/standalone/.next/server/chunks/ssr/_8f5379ab._.js +1 -1
  190. package/.next/standalone/.next/server/chunks/ssr/{node_modules_cf1f3d2c._.js → _b121f1ae._.js} +2 -2
  191. package/.next/standalone/.next/server/chunks/ssr/_c8c8c083._.js +2 -2
  192. package/.next/standalone/.next/server/chunks/ssr/_fd46f439._.js +2 -1
  193. package/.next/standalone/.next/server/chunks/ssr/{node_modules_f2653232._.js → node_modules_039c6a11._.js} +1 -1
  194. package/.next/standalone/.next/server/chunks/ssr/{node_modules_da87f0e3._.js → node_modules_0d3530cd._.js} +2 -2
  195. package/.next/standalone/.next/server/chunks/ssr/{node_modules_afb1ecef._.js → node_modules_0e883565._.js} +1 -1
  196. package/.next/standalone/.next/server/chunks/ssr/{node_modules_8d9e56b7._.js → node_modules_11dbf165._.js} +2 -2
  197. package/.next/standalone/.next/server/chunks/ssr/{node_modules_76d6c533._.js → node_modules_2041c122._.js} +2 -2
  198. package/.next/standalone/.next/server/chunks/ssr/{node_modules_b007145b._.js → node_modules_235267bb._.js} +1 -1
  199. package/.next/standalone/.next/server/chunks/ssr/{node_modules_11d81adf._.js → node_modules_25dfb0ba._.js} +2 -2
  200. package/.next/standalone/.next/server/chunks/ssr/{node_modules_4ea9b27b._.js → node_modules_2b12c669._.js} +2 -2
  201. package/.next/standalone/.next/server/chunks/ssr/{node_modules_cc19e85c._.js → node_modules_32996880._.js} +2 -2
  202. package/.next/standalone/.next/server/chunks/ssr/{node_modules_62621b34._.js → node_modules_35885fe9._.js} +2 -2
  203. package/.next/standalone/.next/server/chunks/ssr/{node_modules_ed4150ad._.js → node_modules_38a95353._.js} +2 -2
  204. package/.next/standalone/.next/server/chunks/ssr/{node_modules_f596a14c._.js → node_modules_3a317c51._.js} +1 -1
  205. package/.next/standalone/.next/server/chunks/ssr/{node_modules_fddab329._.js → node_modules_44966ab2._.js} +1 -1
  206. package/.next/standalone/.next/server/chunks/ssr/{node_modules_e272ac31._.js → node_modules_53af751a._.js} +2 -2
  207. package/.next/standalone/.next/server/chunks/ssr/{node_modules_abf4f826._.js → node_modules_5f539891._.js} +1 -1
  208. package/.next/standalone/.next/server/chunks/ssr/{node_modules_86b6ffa4._.js → node_modules_60402210._.js} +1 -1
  209. package/.next/standalone/.next/server/chunks/ssr/{node_modules_3769cd60._.js → node_modules_60eccfb6._.js} +1 -1
  210. package/.next/standalone/.next/server/chunks/ssr/{node_modules_fdf808cf._.js → node_modules_632c098c._.js} +1 -1
  211. package/.next/standalone/.next/server/chunks/ssr/{node_modules_442994dc._.js → node_modules_6c42f75c._.js} +1 -1
  212. package/.next/standalone/.next/server/chunks/ssr/{node_modules_5b6dbbc3._.js → node_modules_6fbe276d._.js} +2 -2
  213. package/.next/standalone/.next/server/chunks/ssr/{node_modules_6716e25d._.js → node_modules_740e9d59._.js} +2 -2
  214. package/.next/standalone/.next/server/chunks/ssr/{node_modules_ed1f1845._.js → node_modules_7a3d551c._.js} +1 -1
  215. package/.next/standalone/.next/server/chunks/ssr/{node_modules_4f41f172._.js → node_modules_861cb9cf._.js} +2 -2
  216. package/.next/standalone/.next/server/chunks/ssr/{node_modules_2aaea4ea._.js → node_modules_8a892761._.js} +1 -1
  217. package/.next/standalone/.next/server/chunks/ssr/{node_modules_3964c298._.js → node_modules_a5a4946e._.js} +1 -1
  218. package/.next/standalone/.next/server/chunks/ssr/{node_modules_3d9afa91._.js → node_modules_a712c937._.js} +1 -1
  219. package/.next/standalone/.next/server/chunks/ssr/{node_modules_330b9e3c._.js → node_modules_a8c276dd._.js} +2 -2
  220. package/.next/standalone/.next/server/chunks/ssr/{node_modules_ad69a9e4._.js → node_modules_acc9d529._.js} +1 -1
  221. package/.next/standalone/.next/server/chunks/ssr/{node_modules_8301968d._.js → node_modules_ad07ab39._.js} +1 -1
  222. package/.next/standalone/.next/server/chunks/ssr/{node_modules_1d88c7cc._.js → node_modules_b38efa22._.js} +1 -1
  223. package/.next/standalone/.next/server/chunks/ssr/{node_modules_e20e8c2a._.js → node_modules_b4ef036d._.js} +2 -2
  224. package/.next/standalone/.next/server/chunks/ssr/{node_modules_2e206c58._.js → node_modules_b6bad701._.js} +2 -2
  225. package/.next/standalone/.next/server/chunks/ssr/{node_modules_c90fa812._.js → node_modules_b9810024._.js} +1 -1
  226. package/.next/standalone/.next/server/chunks/ssr/{node_modules_db8af6e3._.js → node_modules_b9ad808d._.js} +1 -1
  227. package/.next/standalone/.next/server/chunks/ssr/{node_modules_7287189a._.js → node_modules_bc287d9f._.js} +1 -1
  228. package/.next/standalone/.next/server/chunks/ssr/{node_modules_2e38bc5c._.js → node_modules_c6469d93._.js} +1 -1
  229. package/.next/standalone/.next/server/chunks/ssr/{node_modules_c657890f._.js → node_modules_c704e802._.js} +1 -1
  230. package/.next/standalone/.next/server/chunks/ssr/{node_modules_b8803ba6._.js → node_modules_cda46cfc._.js} +2 -2
  231. package/.next/standalone/.next/server/chunks/ssr/{node_modules_aa6da06c._.js → node_modules_cf171d0c._.js} +1 -1
  232. package/.next/standalone/.next/server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_3582f3d0.js +1 -1
  233. package/.next/standalone/.next/server/chunks/ssr/{node_modules_2d9e03d1._.js → node_modules_e8927fc2._.js} +1 -1
  234. package/.next/standalone/.next/server/chunks/ssr/node_modules_lodash-es_a1341fea._.js +1 -1
  235. package/.next/standalone/.next/server/chunks/ssr/node_modules_lodash-es_e1de6ed8._.js +1 -1
  236. package/.next/standalone/.next/server/chunks/ssr/src_app_login_page_tsx_72f58654._.js +1 -1
  237. package/.next/standalone/.next/server/pages/404.html +1 -1
  238. package/.next/standalone/.next/server/pages/500.html +2 -2
  239. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  241. package/.next/standalone/.next/static/chunks/1e782a49beaf489c.js +1 -0
  242. package/.next/standalone/.next/static/chunks/{01eddf501c574a44.js → 4ee8dc41c9f15b7b.js} +1 -1
  243. package/.next/standalone/.next/static/chunks/67bd1a5de2195779.js +1 -0
  244. package/.next/standalone/.next/static/chunks/{737b8cff3c6a4e30.js → 9445b2873a413c58.js} +1 -1
  245. package/.next/standalone/.next/static/chunks/94dfb15df65ef720.js +2 -0
  246. package/.next/standalone/.next/static/chunks/9d1c5c3494fa53de.js +109 -0
  247. package/.next/standalone/.next/static/chunks/c6bd2818656b1f20.css +1 -0
  248. package/.next/standalone/.next/static/chunks/{e09d9ee16fe90255.js → cd0fde15dc0dfcca.js} +1 -1
  249. package/.next/standalone/.next/static/chunks/{6d12c79948c7e0ac.js → dc59a07a8f327b40.js} +1 -1
  250. package/.next/standalone/.next/static/chunks/{ff6357067630b168.js → e13d208072a48316.js} +1 -1
  251. package/.next/standalone/node_modules/.prisma/client/edge.js +6 -3
  252. package/.next/standalone/node_modules/.prisma/client/index-browser.js +3 -0
  253. package/.next/standalone/node_modules/.prisma/client/index.js +6 -3
  254. package/.next/standalone/node_modules/.prisma/client/package.json +1 -1
  255. package/.next/standalone/node_modules/.prisma/client/schema.prisma +12 -9
  256. package/.next/standalone/node_modules/.prisma/client/wasm.js +3 -0
  257. package/.next/standalone/node_modules/adm-zip/util/constants.js +142 -0
  258. package/.next/standalone/node_modules/adm-zip/util/decoder.js +5 -0
  259. package/.next/standalone/node_modules/adm-zip/util/errors.js +63 -0
  260. package/.next/standalone/node_modules/adm-zip/util/fattr.js +76 -0
  261. package/.next/standalone/node_modules/adm-zip/util/index.js +5 -0
  262. package/.next/standalone/node_modules/adm-zip/util/utils.js +339 -0
  263. package/.next/standalone/package.json +6 -2
  264. package/.next/standalone/prisma/schema.prisma +3 -0
  265. package/.next/standalone/scripts/opencode_plugin.ts +279 -40
  266. package/.next/standalone/scripts/opencode_tui_plugin.tsx +308 -0
  267. package/.next/standalone/scripts/si-optimizer.md +5 -0
  268. package/.next/static/chunks/1e782a49beaf489c.js +1 -0
  269. package/.next/static/chunks/{01eddf501c574a44.js → 4ee8dc41c9f15b7b.js} +1 -1
  270. package/.next/static/chunks/67bd1a5de2195779.js +1 -0
  271. package/.next/static/chunks/{737b8cff3c6a4e30.js → 9445b2873a413c58.js} +1 -1
  272. package/.next/static/chunks/94dfb15df65ef720.js +2 -0
  273. package/.next/static/chunks/9d1c5c3494fa53de.js +109 -0
  274. package/.next/static/chunks/c6bd2818656b1f20.css +1 -0
  275. package/.next/static/chunks/{e09d9ee16fe90255.js → cd0fde15dc0dfcca.js} +1 -1
  276. package/.next/static/chunks/{6d12c79948c7e0ac.js → dc59a07a8f327b40.js} +1 -1
  277. package/.next/static/chunks/{ff6357067630b168.js → e13d208072a48316.js} +1 -1
  278. package/package.json +6 -2
  279. package/prisma/schema.prisma +3 -0
  280. package/scripts/activate_telemetry.sh +44 -1
  281. package/scripts/opencode_plugin.ts +279 -40
  282. package/scripts/opencode_tui_plugin.tsx +308 -0
  283. package/scripts/si-optimizer.md +5 -0
  284. package/scripts/utils.js +0 -1
  285. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fceba52._.js +0 -3
  286. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13132848._.js +0 -3
  287. package/.next/standalone/.next/server/chunks/[root-of-the-server]__30769f6e._.js +0 -3
  288. package/.next/standalone/.next/server/chunks/[root-of-the-server]__426bc4ab._.js +0 -3
  289. package/.next/standalone/.next/server/chunks/[root-of-the-server]__610d08bc._.js +0 -3
  290. package/.next/standalone/.next/server/chunks/[root-of-the-server]__75e3674c._.js +0 -3
  291. package/.next/standalone/.next/server/chunks/[root-of-the-server]__761462f8._.js +0 -3
  292. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9aa700a4._.js +0 -3
  293. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b7ad2649._.js +0 -3
  294. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c00180dd._.js +0 -3
  295. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e2f0baee._.js +0 -3
  296. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ed8f9b78._.js +0 -3
  297. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fc05579d._.js +0 -3
  298. package/.next/standalone/.next/server/chunks/src_497d2ad2._.js +0 -175
  299. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__082c32a2._.js +0 -3
  300. package/.next/standalone/.next/static/chunks/222a937a6c859036.js +0 -1
  301. package/.next/standalone/.next/static/chunks/2a3dd49367e2c198.js +0 -1
  302. package/.next/standalone/.next/static/chunks/3e33f7adc10a38d3.js +0 -109
  303. package/.next/standalone/.next/static/chunks/428e6cf64b115e9d.css +0 -1
  304. package/.next/standalone/.next/static/chunks/62129f27f303a5ba.js +0 -1
  305. package/.next/standalone/LICENSE +0 -21
  306. package/.next/standalone/bin/cli.js +0 -106
  307. package/.next/standalone/custom-models.example.json +0 -21
  308. package/.next/standalone/eslint.config.mjs +0 -18
  309. package/.next/standalone/features/feature-skill-used-jump-link/design/2026-03-18-skill-used-jump-link-design.md +0 -126
  310. package/.next/standalone/features/feature-skill-used-jump-link/feature.json +0 -32
  311. package/.next/standalone/features/feature-skill-used-jump-link/issue.md +0 -32
  312. package/.next/standalone/features/feature-skill-used-jump-link/plans/2026-03-18-skill-used-jump-link.md +0 -528
  313. package/.next/standalone/next.config.ts +0 -29
  314. package/.next/standalone/scripts/activate_telemetry.sh +0 -159
  315. package/.next/standalone/scripts/create_migration_package.sh +0 -124
  316. package/.next/standalone/scripts/fix_models.js +0 -66
  317. package/.next/standalone/scripts/init_opengauss.py +0 -284
  318. package/.next/standalone/scripts/install.js +0 -273
  319. package/.next/standalone/scripts/logs.js +0 -38
  320. package/.next/standalone/scripts/otel_data/logs.jsonl +0 -12
  321. package/.next/standalone/scripts/otel_data/metrics.jsonl +0 -21
  322. package/.next/standalone/scripts/otel_data/raw_requests.jsonl +0 -8
  323. package/.next/standalone/scripts/otel_data/raw_requests.jsonl.bak +0 -6
  324. package/.next/standalone/scripts/otel_receiver.py +0 -580
  325. package/.next/standalone/scripts/postinstall.js +0 -192
  326. package/.next/standalone/scripts/publish-npm.js +0 -401
  327. package/.next/standalone/scripts/restart.js +0 -26
  328. package/.next/standalone/scripts/restart.sh +0 -138
  329. package/.next/standalone/scripts/restart_dev.sh +0 -132
  330. package/.next/standalone/scripts/start.js +0 -291
  331. package/.next/standalone/scripts/status.js +0 -41
  332. package/.next/standalone/scripts/stop.js +0 -90
  333. package/.next/standalone/scripts/sync_skills.js +0 -216
  334. package/.next/standalone/scripts/utils.js +0 -235
  335. package/.next/standalone/tests/setup_skill_optimizer.sh +0 -118
  336. package/.next/standalone/tsconfig.json +0 -34
  337. package/.next/static/chunks/222a937a6c859036.js +0 -1
  338. package/.next/static/chunks/2a3dd49367e2c198.js +0 -1
  339. package/.next/static/chunks/3e33f7adc10a38d3.js +0 -109
  340. package/.next/static/chunks/428e6cf64b115e9d.css +0 -1
  341. package/.next/static/chunks/62129f27f303a5ba.js +0 -1
  342. /package/.next/standalone/.next/static/{Eytv_Fh4x2HPaupjXiAYj → 0uvhCJooDO_gMNlKOaHwB}/_buildManifest.js +0 -0
  343. /package/.next/standalone/.next/static/{Eytv_Fh4x2HPaupjXiAYj → 0uvhCJooDO_gMNlKOaHwB}/_clientMiddlewareManifest.json +0 -0
  344. /package/.next/standalone/.next/static/{Eytv_Fh4x2HPaupjXiAYj → 0uvhCJooDO_gMNlKOaHwB}/_ssgManifest.js +0 -0
  345. /package/.next/static/{Eytv_Fh4x2HPaupjXiAYj → 0uvhCJooDO_gMNlKOaHwB}/_buildManifest.js +0 -0
  346. /package/.next/static/{Eytv_Fh4x2HPaupjXiAYj → 0uvhCJooDO_gMNlKOaHwB}/_clientMiddlewareManifest.json +0 -0
  347. /package/.next/static/{Eytv_Fh4x2HPaupjXiAYj → 0uvhCJooDO_gMNlKOaHwB}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[91120,e=>{"use strict";e.s(["SKILLS_EXTRACT_PROMPT",0,"请给出该次对话中激活的skills,以列表的形式返回,列表中仅含skill name。"])},33075,e=>e.a(async(t,n)=>{try{var r=e.i(85765),s=e.i(31390),i=e.i(98043),o=e.i(75054),a=e.i(22965),l=e.i(89171),u=e.i(91120),c=t([r,s,i,o,a]);[r,s,i,o,a]=c.then?(await c)():c;let m=u.SKILLS_EXTRACT_PROMPT;function d(e,t,n){if(!e||!Array.isArray(e))return;let r=/^[a-zA-Z0-9_\-\.]+$/;for(let s of e){if(s?.type!=="tool_use"||s?.name!=="Skill")continue;let e=s.input,i=e?.skill??e?.skill_name??e?.skillName??e?.name;if(null==i||!String(i).trim())continue;let o=String(i).trim().replace(/^['"]+|['"]+$/g,"");if(r.test(o)&&!t.has(o)){t.add(o);let r=e?.version!=null?Number(e.version):null;n.push({name:o,version:null===r||isNaN(r)?null:r})}}}function p(e){return e?.content?"string"==typeof e.content?e.content:Array.isArray(e.content)?e.content.filter(e=>e?.type==="text"&&e?.text).map(e=>e.text).join("\n").trim():"":""}async function f(e,t){if(!t.length)return[];let n=[];for(let e of t){let t=e.requestMessages||[],r=[];for(let e of t){if("user"!==e.role)continue;let t=p(e);!t||t.startsWith("<system-reminder>")||t.includes("[SUGGESTION MODE:")||r.push(t)}r.length&&n.push({role:"user",content:r.join("\n\n")});let s=e.responseMessage;if(s?.content){let e=p(s);e&&n.push({role:"assistant",content:e})}}let r=[...n.length>30?n.slice(-30):n,{role:"user",content:m}],s=e.startsWith("claude")?"https://api.deepseek.com/anthropic":"https://api.deepseek.com",i=`${s}/v1/chat/completions`,o=await (0,a.getActiveConfig)(),l=o?.apiKey;if(!l)return console.warn("No model API Key configured in Settings, skipping skills extraction via model."),[];let u=new AbortController,c=setTimeout(()=>u.abort(),25e3);try{let e={model:s.includes("anthropic")?"claude-sonnet-4-20250514":"deepseek-chat",max_tokens:1024,stream:!1,messages:r},t=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify(e),signal:u.signal});if(clearTimeout(c),!t.ok){let e=await t.text();return console.error("Skills extraction error",t.status,e),[]}let n=await t.json(),o=n.choices?.[0]?.message?.content??n.content?.find(e=>"text"===e.type)?.text??n.content?.[0]?.text??"";return function(e){if(!e||"string"!=typeof e)return[];let t=e.trim().replace(/^```\w*\n?|```\s*$/g,"").trim(),n=[];try{let e=JSON.parse(t);Array.isArray(e)?n=e:e&&Array.isArray(e.skills)?n=e.skills:e&&"string"==typeof e.skills&&(n=[e.skills])}catch{n=t.split(/\n+/).map(e=>e.replace(/^[\s\-*•\d.)]+|[\s\-*•]+$/g,"").trim())}let r=n.filter(e=>null!=e&&""!==String(e).trim()).map(e=>String(e).trim().replace(/^['"]+|['"]+$/g,"")),s=/^[a-zA-Z0-9_\-\.]+$/;return r.filter(e=>s.test(e))}(String(o))}catch(e){return clearTimeout(c),(e instanceof Error?e.message:String(e)).includes("abort")?console.warn("fetchSkillsViaModel timeout, skipping skills"):console.error("fetchSkillsViaModel error",e),[]}}async function g(e,{params:t}){try{let n,a,u=(await t).taskId,c=await (0,o.endSession)(u);if(!c)return l.NextResponse.json({error:"Session not found or empty"},{status:404});let p=(Date.now()-c.startTime)/1e3,g=0;for(let e of c.interactions){let t=e.usage||e.responseMessage?.usage;if(t){let e=t;if("string"==typeof t)try{e=JSON.parse(t)}catch(e){console.warn(`[ProxyEnd] Failed to parse usage JSON for task ${u}:`,e)}let n=e,r=n.total_tokens||n.total||0;g+=Number(r)}}let m=u.split("-")[0]||"unknown";"claude"===m&&(m="claudecode");let y=await (0,s.analyzeSession)(c.interactions,c.user);if(!c.query&&y.query)try{await i.db.updateSession(u,{query:y.query}),console.log(`[End] Updated session query for ${u}: ${y.query.substring(0,50)}...`)}catch(e){console.warn(`[End] Failed to update session query: ${e}`)}let h="deepagent(langgraph)"===m||"witty"===m||"witty(deepagents)"===m;"claude"===m?(n=function(e){let t=new Set,n=[];for(let r of e.interactions)for(let e of(d(r.responseMessage?.content,t,n),r.requestMessages??[]))e?.role==="assistant"&&d(e.content,t,n);return n}(c),0===n.length&&(console.log(`No Skill tool_use in Claude session for ${u}, falling back to model extraction...`),n=(await f(u,c.interactions)).map(e=>({name:e,version:null}))),console.log(`Skills from Claude session for ${u}:`,JSON.stringify(n))):"opencode"===m?(n=function(e){let t=new Set,n=[],r=/^[a-zA-Z0-9_\-\.]+$/;for(let s of e.interactions)for(let e of s.toolCalls??s.responseMessage?.tool_calls??[]){let s=e?.function?.name??e?.name;if("skill"!==s)continue;let i=e?.function?.arguments??e?.arguments??"";if(i&&"string"==typeof i)try{let e="string"==typeof i?JSON.parse(i):i,s=e?.name??e?.skill_name??e?.skillName??e?.skill;if(null!=s&&String(s).trim()){let i=String(s).trim().replace(/^['"]+|['"]+$/g,"");if(r.test(i)&&!t.has(i)){t.add(i);let r=e?.version!=null?Number(e.version):null;n.push({name:i,version:null===r||isNaN(r)?null:r})}}}catch{}}return n}(c),console.log(`Skills from OpenEncode session for ${u}:`,JSON.stringify(n))):h?(n=function(e){let t=new Set,n=[],r=/^[a-zA-Z0-9_\-\.]+$/;for(let s of e.interactions)for(let e of s.toolCalls??s.responseMessage?.tool_calls??[]){let s=e?.function?.name??e?.name;if("load_skill"!==s)continue;let i=e?.function?.arguments??e?.arguments??"";if(i&&"string"==typeof i)try{let e="string"==typeof i?JSON.parse(i):i,s=e?.skill_name??e?.skillName??e?.name;if(null!=s&&String(s).trim()){let i=String(s).trim().replace(/^['"]+|['"]+$/g,"");if(r.test(i)&&!t.has(i)){t.add(i);let r=e?.version!=null?Number(e.version):null;n.push({name:i,version:null===r||isNaN(r)?null:r})}}}catch{}}return n}(c),console.log(`Skills from Witty session for ${u}:`,JSON.stringify(n))):(console.log(`Fetching skills via model for ${u}...`),n=(await f(u,c.interactions)).map(e=>({name:e,version:null})),console.log(`Skills from model for ${u}:`,JSON.stringify(n)));let k=n.length>0?n[0].name:y.skill;n.length>0&&n[0].version;let w=null;if(console.log(`[End] Primary skill name for ${u}: ${k||"(none)"}`),k){let e=await i.db.findSkill(k,c.user||null);if(e&&e.versions&&e.versions.length>0){let t=e.activeVersion||0,n=e.versions.find(e=>e.version===t);n&&n.content?(a=n.content,w=n.version,console.log(`[End] Skill definition found for ${k} v${w}, length: ${a?.length||0}`)):(a=e.versions[0].content,w=e.versions[0].version,console.log(`[End] Using fallback version ${w} for ${k}, length: ${a?.length||0}`))}else console.warn(`[End] Skill definition NOT FOUND for ${k}. Attribution will be skipped.`)}else console.warn("[End] No primarySkillName extracted. Attribution will be skipped.");let _={is_skill_correct:!1,is_answer_correct:!1,answer_score:0,judgment_reason:"Auto-eval skipped (missing query/result/skill)"};c.query&&(y.query=c.query),y.query&&(y.query=y.query.trim().replace(/^['"]+|['"]+$/g,"").trim()),k&&(y.skill=k);let v={skill_definition:a};try{let e=(await (0,r.readConfig)(c.user)).find(e=>e.query&&y.query&&e.query.trim()===y.query.trim());e&&(v.root_causes=e.root_causes,v.key_actions=e.key_actions,v.standard_answer_example=e.standard_answer)}catch(e){console.warn("Config load error",e)}if(y.query&&y.final_result){let e=await (0,s.judgeAnswer)(y.query,v,y.final_result,c.user);_={is_skill_correct:!1,is_answer_correct:e.is_correct,answer_score:e.score,judgment_reason:e.reason||"Judged by Evaluation Model"}}console.log(`[End] Calling analyzeFailures: skillName=${k||"none"}, skillDef=${a?"present":"absent"}, answerScore=${_.answer_score}`);let S=await (0,s.analyzeFailures)(c.interactions,k,a,_.answer_score,String(_.judgment_reason||""),y.query,y.final_result,c.user);console.log(`[End] analyzeFailures result: ${S.failures.length} failures, ${S.skill_issues?.length||0} skill issues`);let R={};try{R=await e.json()}catch(e){}let E=n.length>0?n.map(e=>e.name):k?[k]:void 0,x=await (0,r.saveExecutionRecord)({task_id:u,framework:m,query:y.query,skills:E,skill:k,skill_version:w,final_result:y.final_result,tokens:g,latency:p,timestamp:new Date(c.startTime).toISOString(),user:c.user,failures:S.failures,is_skill_correct:_.is_skill_correct,is_answer_correct:_.is_answer_correct,answer_score:_.answer_score,judgment_reason:_.judgment_reason,force_judgment:!1,...R}),N=l.NextResponse.json({status:"ok",summary:{task_id:u,framework:m,duration:p,tokens:g,skills:n,query_preview:y.query?.substring(0,50)},upload_result:x});return console.log(`[Proxy-End] ✅ Task completed: task_id=${u}, framework=${m}, score=${_.answer_score}, duration=${p.toFixed(1)}s`),N}catch(t){console.error("[Proxy-End] ❌ Error:",t);let e=t instanceof Error?t.message:"Internal server error";return l.NextResponse.json({error:"Failed to process end signal",details:e},{status:500})}}e.s(["POST",()=>g,"maxDuration",0,60]),n()}catch(e){n(e)}},!1),80362,e=>e.a(async(t,n)=>{try{var r=e.i(47909),s=e.i(74017),i=e.i(60476),o=e.i(59756),a=e.i(61916),l=e.i(74677),u=e.i(69741),c=e.i(16795),d=e.i(87718),p=e.i(95169),f=e.i(47587),g=e.i(66012),m=e.i(70101),y=e.i(26937),h=e.i(10372),k=e.i(93695);e.i(52474);var w=e.i(220),_=e.i(33075),v=t([_]);[_]=v.then?(await v)():v;let E=new r.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/proxy/[taskId]/end/route",pathname:"/api/proxy/[taskId]/end",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/proxy/[taskId]/end/route.ts",nextConfigOutput:"standalone",userland:_}),{workAsyncStorage:x,workUnitAsyncStorage:N,serverHooks:A}=E;function S(){return(0,i.patchFetch)({workAsyncStorage:x,workUnitAsyncStorage:N})}async function R(e,t,n){E.isDev&&(0,o.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let r="/api/proxy/[taskId]/end/route";r=r.replace(/\/index$/,"")||"/";let i=await E.prepare(e,t,{srcPage:r,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:_,params:v,nextConfig:S,parsedUrl:R,isDraftMode:x,prerenderManifest:N,routerServerContext:A,isOnDemandRevalidate:$,revalidateOnlyGenerated:C,resolvedPathname:b,clientReferenceManifest:q,serverActionsManifest:O}=i,T=(0,u.normalizeAppPath)(r),P=!!(N.dynamicRoutes[T]||N.routes[b]),I=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,R,!1):t.end("This page could not be found"),null);if(P&&!x){let e=!!N.routes[b],t=N.dynamicRoutes[T];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await I();throw new k.NoFallbackError}}let M=null;!P||E.isDev||x||(M=b,M="/index"===M?"/":M);let j=!0===E.isDev||!P,U=P&&!j;O&&q&&(0,l.setManifestsSingleton)({page:r,clientReferenceManifest:q,serverActionsManifest:O});let D=e.method||"GET",F=(0,a.getTracer)(),H=F.getActiveScopeSpan(),K={params:v,prerenderManifest:N,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:j,incrementalCache:(0,o.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,s)=>E.onRequestError(e,t,r,s,A)},sharedContext:{buildId:_}},J=new c.NodeNextRequest(e),z=new c.NodeNextResponse(t),L=d.NextRequestAdapter.fromNodeNextRequest(J,(0,d.signalFromNodeResponse)(t));try{let i=async e=>E.handle(L,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=F.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=n.get("next.route");if(s){let t=`${D} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${D} ${r}`)}),l=!!(0,o.getRequestMeta)(e,"minimalMode"),u=async o=>{var a,u;let c=async({previousCacheEntry:s})=>{try{if(!l&&$&&C&&!s)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await i(o);e.fetchMetrics=K.renderOpts.fetchMetrics;let a=K.renderOpts.pendingWaitUntil;a&&n.waitUntil&&(n.waitUntil(a),a=void 0);let u=K.renderOpts.collectedTags;if(!P)return await (0,g.sendResponse)(J,z,r,K.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(r.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,s=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:s}}}}catch(t){throw(null==s?void 0:s.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:r,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:$})},!1,A),t}},d=await E.handleResponse({req:e,nextConfig:S,cacheKey:M,routeKind:s.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:$,revalidateOnlyGenerated:C,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:l});if(!P)return null;if((null==d||null==(a=d.value)?void 0:a.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(u=d.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",$?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,m.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&P||p.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(d.cacheControl)),await (0,g.sendResponse)(J,z,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};H?await u(H):await F.withPropagatedContext(e.headers,()=>F.trace(p.BaseServerSpan.handleRequest,{spanName:`${D} ${r}`,kind:a.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},u))}catch(t){if(t instanceof k.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:T,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:$})},!1,A),P)throw t;return await (0,g.sendResponse)(J,z,new Response(null,{status:500})),null}}e.s(["handler",()=>R,"patchFetch",()=>S,"routeModule",()=>E,"serverHooks",()=>A,"workAsyncStorage",()=>x,"workUnitAsyncStorage",()=>N]),n()}catch(e){n(e)}},!1)];
1
+ module.exports=[91120,e=>{"use strict";e.s(["SKILLS_EXTRACT_PROMPT",0,"请给出该次对话中激活的skills,以列表的形式返回,列表中仅含skill name。"])},33075,e=>e.a(async(t,n)=>{try{var r=e.i(85765),s=e.i(85874),o=e.i(98043),i=e.i(75054),a=e.i(22965),l=e.i(89171),u=e.i(91120),c=t([r,s,o,i,a]);[r,s,o,i,a]=c.then?(await c)():c;let m=u.SKILLS_EXTRACT_PROMPT;function d(e,t,n){if(!e||!Array.isArray(e))return;let r=/^[a-zA-Z0-9_\-\.]+$/;for(let s of e){if(s?.type!=="tool_use"||s?.name!=="Skill")continue;let e=s.input,o=e?.skill??e?.skill_name??e?.skillName??e?.name;if(null==o||!String(o).trim())continue;let i=String(o).trim().replace(/^['"]+|['"]+$/g,"");if(r.test(i)&&!t.has(i)){t.add(i);let r=e?.version!=null?Number(e.version):null;n.push({name:i,version:null===r||isNaN(r)?null:r})}}}function p(e){return e?.content?"string"==typeof e.content?e.content:Array.isArray(e.content)?e.content.filter(e=>e?.type==="text"&&e?.text).map(e=>e.text).join("\n").trim():"":""}async function f(e,t){if(!t.length)return[];let n=[];for(let e of t){let t=e.requestMessages||[],r=[];for(let e of t){if("user"!==e.role)continue;let t=p(e);!t||t.startsWith("<system-reminder>")||t.includes("[SUGGESTION MODE:")||r.push(t)}r.length&&n.push({role:"user",content:r.join("\n\n")});let s=e.responseMessage;if(s?.content){let e=p(s);e&&n.push({role:"assistant",content:e})}}let r=[...n.length>30?n.slice(-30):n,{role:"user",content:m}],s=e.startsWith("claude")?"https://api.deepseek.com/anthropic":"https://api.deepseek.com",o=`${s}/v1/chat/completions`,i=await (0,a.getActiveConfig)(),l=i?.apiKey;if(!l)return console.warn("No model API Key configured in Settings, skipping skills extraction via model."),[];let u=new AbortController,c=setTimeout(()=>u.abort(),25e3);try{let e={model:s.includes("anthropic")?"claude-sonnet-4-20250514":"deepseek-chat",max_tokens:1024,stream:!1,messages:r},t=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify(e),signal:u.signal});if(clearTimeout(c),!t.ok){let e=await t.text();return console.error("Skills extraction error",t.status,e),[]}let n=await t.json(),i=n.choices?.[0]?.message?.content??n.content?.find(e=>"text"===e.type)?.text??n.content?.[0]?.text??"";return function(e){if(!e||"string"!=typeof e)return[];let t=e.trim().replace(/^```\w*\n?|```\s*$/g,"").trim(),n=[];try{let e=JSON.parse(t);Array.isArray(e)?n=e:e&&Array.isArray(e.skills)?n=e.skills:e&&"string"==typeof e.skills&&(n=[e.skills])}catch{n=t.split(/\n+/).map(e=>e.replace(/^[\s\-*•\d.)]+|[\s\-*•]+$/g,"").trim())}let r=n.filter(e=>null!=e&&""!==String(e).trim()).map(e=>String(e).trim().replace(/^['"]+|['"]+$/g,"")),s=/^[a-zA-Z0-9_\-\.]+$/;return r.filter(e=>s.test(e))}(String(i))}catch(e){return clearTimeout(c),(e instanceof Error?e.message:String(e)).includes("abort")?console.warn("fetchSkillsViaModel timeout, skipping skills"):console.error("fetchSkillsViaModel error",e),[]}}async function g(e,{params:t}){try{let n,a,u=(await t).taskId,c=await (0,i.endSession)(u);if(!c)return l.NextResponse.json({error:"Session not found or empty"},{status:404});let p=(Date.now()-c.startTime)/1e3,g=0,m=0;for(let e of c.interactions){let t=e.usage||e.responseMessage?.usage;if(t){let e=t;if("string"==typeof t)try{e=JSON.parse(t)}catch(e){console.warn(`[ProxyEnd] Failed to parse usage JSON for task ${u}:`,e)}let n=e,r=n.total_tokens||n.total||0,s=n.reasoning||n.reasoning_tokens||n.completion_tokens_details?.reasoning_tokens||0;g+=Number(r),m+=Number(s)}}let y=u.split("-")[0]||"unknown";"claude"===y&&(y="claudecode");let h=await (0,s.analyzeSession)(c.interactions,c.user);if(!c.query&&h.query)try{await o.db.updateSession(u,{query:h.query}),console.log(`[End] Updated session query for ${u}: ${h.query.substring(0,50)}...`)}catch(e){console.warn(`[End] Failed to update session query: ${e}`)}let k="deepagent(langgraph)"===y||"witty"===y||"witty(deepagents)"===y;"claude"===y?(n=function(e){let t=new Set,n=[];for(let r of e.interactions)for(let e of(d(r.responseMessage?.content,t,n),r.requestMessages??[]))e?.role==="assistant"&&d(e.content,t,n);return n}(c),0===n.length&&(console.log(`No Skill tool_use in Claude session for ${u}, falling back to model extraction...`),n=(await f(u,c.interactions)).map(e=>({name:e,version:null}))),console.log(`Skills from Claude session for ${u}:`,JSON.stringify(n))):"opencode"===y?(n=function(e){let t=new Set,n=[],r=/^[a-zA-Z0-9_\-\.]+$/;for(let s of e.interactions)for(let e of s.toolCalls??s.responseMessage?.tool_calls??[]){let s=e?.function?.name??e?.name;if("skill"!==s)continue;let o=e?.function?.arguments??e?.arguments??"";if(o&&"string"==typeof o)try{let e="string"==typeof o?JSON.parse(o):o,s=e?.name??e?.skill_name??e?.skillName??e?.skill;if(null!=s&&String(s).trim()){let o=String(s).trim().replace(/^['"]+|['"]+$/g,"");if(r.test(o)&&!t.has(o)){t.add(o);let r=e?.version!=null?Number(e.version):null;n.push({name:o,version:null===r||isNaN(r)?null:r})}}}catch{}}return n}(c),console.log(`Skills from OpenEncode session for ${u}:`,JSON.stringify(n))):k?(n=function(e){let t=new Set,n=[],r=/^[a-zA-Z0-9_\-\.]+$/;for(let s of e.interactions)for(let e of s.toolCalls??s.responseMessage?.tool_calls??[]){let s=e?.function?.name??e?.name;if("load_skill"!==s)continue;let o=e?.function?.arguments??e?.arguments??"";if(o&&"string"==typeof o)try{let e="string"==typeof o?JSON.parse(o):o,s=e?.skill_name??e?.skillName??e?.name;if(null!=s&&String(s).trim()){let o=String(s).trim().replace(/^['"]+|['"]+$/g,"");if(r.test(o)&&!t.has(o)){t.add(o);let r=e?.version!=null?Number(e.version):null;n.push({name:o,version:null===r||isNaN(r)?null:r})}}}catch{}}return n}(c),console.log(`Skills from Witty session for ${u}:`,JSON.stringify(n))):(console.log(`Fetching skills via model for ${u}...`),n=(await f(u,c.interactions)).map(e=>({name:e,version:null})),console.log(`Skills from model for ${u}:`,JSON.stringify(n)));let _=n.length>0?n[0].name:h.skill;n.length>0&&n[0].version;let w=null;if(console.log(`[End] Primary skill name for ${u}: ${_||"(none)"}`),_){let e=await o.db.findSkill(_,c.user||null);if(e&&e.versions&&e.versions.length>0){let t=e.activeVersion||0,n=e.versions.find(e=>e.version===t);n&&n.content?(a=n.content,w=n.version,console.log(`[End] Skill definition found for ${_} v${w}, length: ${a?.length||0}`)):(a=e.versions[0].content,w=e.versions[0].version,console.log(`[End] Using fallback version ${w} for ${_}, length: ${a?.length||0}`))}else console.warn(`[End] Skill definition NOT FOUND for ${_}. Attribution will be skipped.`)}else console.warn("[End] No primarySkillName extracted. Attribution will be skipped.");let v={is_skill_correct:!1,is_answer_correct:!1,answer_score:0,judgment_reason:"Auto-eval skipped (missing query/result/skill)"};c.query&&(h.query=c.query),h.query&&(h.query=h.query.trim().replace(/^['"]+|['"]+$/g,"").trim()),_&&(h.skill=_);let S={skill_definition:a};try{let e=(await (0,r.readConfig)(c.user)).find(e=>e.query&&h.query&&e.query.trim()===h.query.trim());e&&(S.root_causes=e.root_causes,S.key_actions=e.key_actions,S.standard_answer_example=e.standard_answer)}catch(e){console.warn("Config load error",e)}if(h.query&&h.final_result){let e=await (0,s.judgeAnswer)(h.query,S,h.final_result,c.user);v={is_skill_correct:!1,is_answer_correct:e.is_correct,answer_score:e.score,judgment_reason:e.reason||"Judged by Evaluation Model"}}console.log(`[End] Calling analyzeFailures: skillName=${_||"none"}, skillDef=${a?"present":"absent"}, answerScore=${v.answer_score}`);let R=await (0,s.analyzeFailures)(c.interactions,_,a,v.answer_score,String(v.judgment_reason||""),h.query,h.final_result,c.user);console.log(`[End] analyzeFailures result: ${R.failures.length} failures, ${R.skill_issues?.length||0} skill issues`);let E={};try{E=await e.json()}catch(e){}let N=n.length>0?n.map(e=>e.name):_?[_]:void 0,x=await (0,r.saveExecutionRecord)({task_id:u,framework:y,query:h.query,skills:N,skill:_,skill_version:w,final_result:h.final_result,tokens:g,reasoning_tokens:m||void 0,latency:p,timestamp:new Date(c.startTime).toISOString(),user:c.user,failures:R.failures,is_skill_correct:v.is_skill_correct,is_answer_correct:v.is_answer_correct,answer_score:v.answer_score,judgment_reason:v.judgment_reason,force_judgment:!1,...E}),A=l.NextResponse.json({status:"ok",summary:{task_id:u,framework:y,duration:p,tokens:g,skills:n,query_preview:h.query?.substring(0,50)},upload_result:x});return console.log(`[Proxy-End] ✅ Task completed: task_id=${u}, framework=${y}, score=${v.answer_score}, duration=${p.toFixed(1)}s`),A}catch(t){console.error("[Proxy-End] ❌ Error:",t);let e=t instanceof Error?t.message:"Internal server error";return l.NextResponse.json({error:"Failed to process end signal",details:e},{status:500})}}e.s(["POST",()=>g,"maxDuration",0,60]),n()}catch(e){n(e)}},!1),80362,e=>e.a(async(t,n)=>{try{var r=e.i(47909),s=e.i(74017),o=e.i(60476),i=e.i(59756),a=e.i(61916),l=e.i(74677),u=e.i(69741),c=e.i(16795),d=e.i(87718),p=e.i(95169),f=e.i(47587),g=e.i(66012),m=e.i(70101),y=e.i(26937),h=e.i(10372),k=e.i(93695);e.i(52474);var _=e.i(220),w=e.i(33075),v=t([w]);[w]=v.then?(await v)():v;let E=new r.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/proxy/[taskId]/end/route",pathname:"/api/proxy/[taskId]/end",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/proxy/[taskId]/end/route.ts",nextConfigOutput:"standalone",userland:w}),{workAsyncStorage:N,workUnitAsyncStorage:x,serverHooks:A}=E;function S(){return(0,o.patchFetch)({workAsyncStorage:N,workUnitAsyncStorage:x})}async function R(e,t,n){E.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let r="/api/proxy/[taskId]/end/route";r=r.replace(/\/index$/,"")||"/";let o=await E.prepare(e,t,{srcPage:r,multiZoneDraftMode:!1});if(!o)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:w,params:v,nextConfig:S,parsedUrl:R,isDraftMode:N,prerenderManifest:x,routerServerContext:A,isOnDemandRevalidate:$,revalidateOnlyGenerated:C,resolvedPathname:b,clientReferenceManifest:q,serverActionsManifest:O}=o,T=(0,u.normalizeAppPath)(r),P=!!(x.dynamicRoutes[T]||x.routes[b]),I=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,R,!1):t.end("This page could not be found"),null);if(P&&!N){let e=!!x.routes[b],t=x.dynamicRoutes[T];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await I();throw new k.NoFallbackError}}let M=null;!P||E.isDev||N||(M=b,M="/index"===M?"/":M);let j=!0===E.isDev||!P,U=P&&!j;O&&q&&(0,l.setManifestsSingleton)({page:r,clientReferenceManifest:q,serverActionsManifest:O});let D=e.method||"GET",F=(0,a.getTracer)(),H=F.getActiveScopeSpan(),K={params:v,prerenderManifest:x,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:j,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,s)=>E.onRequestError(e,t,r,s,A)},sharedContext:{buildId:w}},J=new c.NodeNextRequest(e),z=new c.NodeNextResponse(t),L=d.NextRequestAdapter.fromNodeNextRequest(J,(0,d.signalFromNodeResponse)(t));try{let o=async e=>E.handle(L,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=F.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=n.get("next.route");if(s){let t=`${D} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${D} ${r}`)}),l=!!(0,i.getRequestMeta)(e,"minimalMode"),u=async i=>{var a,u;let c=async({previousCacheEntry:s})=>{try{if(!l&&$&&C&&!s)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await o(i);e.fetchMetrics=K.renderOpts.fetchMetrics;let a=K.renderOpts.pendingWaitUntil;a&&n.waitUntil&&(n.waitUntil(a),a=void 0);let u=K.renderOpts.collectedTags;if(!P)return await (0,g.sendResponse)(J,z,r,K.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(r.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,s=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:s}}}}catch(t){throw(null==s?void 0:s.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:r,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:$})},!1,A),t}},d=await E.handleResponse({req:e,nextConfig:S,cacheKey:M,routeKind:s.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:x,isRoutePPREnabled:!1,isOnDemandRevalidate:$,revalidateOnlyGenerated:C,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:l});if(!P)return null;if((null==d||null==(a=d.value)?void 0:a.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(u=d.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",$?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),N&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,m.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&P||p.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(d.cacheControl)),await (0,g.sendResponse)(J,z,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};H?await u(H):await F.withPropagatedContext(e.headers,()=>F.trace(p.BaseServerSpan.handleRequest,{spanName:`${D} ${r}`,kind:a.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},u))}catch(t){if(t instanceof k.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:T,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:$})},!1,A),P)throw t;return await (0,g.sendResponse)(J,z,new Response(null,{status:500})),null}}e.s(["handler",()=>R,"patchFetch",()=>S,"routeModule",()=>E,"serverHooks",()=>A,"workAsyncStorage",()=>N,"workUnitAsyncStorage",()=>x]),n()}catch(e){n(e)}},!1)];
2
2
 
3
3
  //# sourceMappingURL=_cd3d20ca._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[22033,e=>e.a(async(t,n)=>{try{var a=e.i(85765),r=e.i(98043),s=e.i(89171),o=t([a,r]);function i(e){if(e){if(void 0!==e.stringValue)return e.stringValue;if(void 0!==e.intValue)return parseInt(e.intValue);if(void 0!==e.doubleValue)return e.doubleValue;if(void 0!==e.boolValue)return e.boolValue;if(void 0!==e.arrayValue)return e.arrayValue.values?.map(i);if(void 0!==e.kvlistValue){let t={};return e.kvlistValue.values.forEach(e=>{t[e.key]=i(e.value)}),t}}}async function l(e){try{let t,n,o=e.headers.get("x-witty-api-key");if(o){let e=await r.db.findUserByApiKey(o);e?(t=e.username,console.log(`[OTel] Authenticated User: ${t}`)):console.warn(`[OTel] Invalid API Key provided: ${o}`)}let l=e.headers.get("content-type")||"";console.log(`[OTel] Received Request. Content-Type: ${l}`);try{if(l.includes("application/json"))n=await e.json();else{if(l.includes("application/x-protobuf"))return console.warn("[OTel] Received Protobuf payload. JSON parser skipped."),s.NextResponse.json({error:"Protobuf not supported yet, please use OTEL_EXPORTER_OTLP_PROTOCOL=http/json"},{status:415});console.log("[OTel] Unknown Content-Type, attempting JSON parse..."),n=await e.json()}}catch(e){return console.error("[OTel] Failed to parse request body:",e),s.NextResponse.json({error:"Invalid Payload"},{status:400})}if(!n)return s.NextResponse.json({});for(let e of(console.log("[OTel] Raw Body Structure:",JSON.stringify(n,(e,t)=>"resourceSpans"===e&&Array.isArray(t)?`[${t.length} spans]`:t,2)),n.resourceSpans&&n.resourceSpans.length>0&&(console.log("[OTel] First Resource Attributes:",JSON.stringify(n.resourceSpans[0].resource?.attributes)),n.resourceSpans[0].scopeSpans?.[0]?.spans?.[0]&&console.log("[OTel] First Span Attributes:",JSON.stringify(n.resourceSpans[0].scopeSpans[0].spans[0].attributes))),n.resourceSpans||[])){let n=e.resource?.attributes||[],s={};n.forEach(e=>{s[e.key]=i(e.value)});let o=s["service.name"]||"unknown-service",l=t||s["user.id"]||s["enduser.id"];for(let t of e.scopeSpans||[])for(let e of t.spans||[]){let t=e.attributes||[],n={};t.forEach(e=>{n[e.key]=i(e.value)});let u=Object.keys(n).some(e=>e.startsWith("gen_ai.")||e.startsWith("llm.")),c=void 0!==n["tool.name"];if(u||c){let t=e.traceId,i=e.spanId,u=e.parentSpanId,d=n["gen_ai.request.model"]||n["llm.request.model"],p=n["gen_ai.usage.input_tokens"]||n["llm.usage.prompt_tokens"]||0,g=n["gen_ai.usage.output_tokens"]||n["llm.usage.completion_tokens"]||0,h=(p||0)+(g||0),f=BigInt(e.startTimeUnixNano||0),m=BigInt(e.endTimeUnixNano||0),y=Number((m-f)/BigInt(1e6)),v=Number(f/BigInt(1e6)),R=n["gen_ai.prompt"]||n["db.statement"],O=n["gen_ai.completion"]||n["db.result"],w={spanId:i,parentSpanId:u,name:e.name,type:c?"tool":"llm",model:d,usage:{input_tokens:p,output_tokens:g,total_tokens:h},latency:y,timestamp:v};R&&(w.requestMessages=[{role:"user",content:R}]),O&&(w.responseMessage={role:"assistant",content:O}),c&&(w.toolCall={name:n["tool.name"],arguments:n["tool.arguments"]||JSON.stringify(n)}),console.log(`[OTel] Processed Span: ${t} - ${e.name} (${y}ms)`);let T=s["service.instance.id"],S=s["session.id"]||n["session.id"],E=S||T||t;"unknown"===E&&(E=t),console.log(`[OTel] Grouping into Session: ${E} (Source: ${S?"SessionID":T?"ProcessID":"TraceID"})`);let b=await r.db.findSessionByTaskId(E),x=[];if(b?.interactions)try{x=JSON.parse(b.interactions)}catch(e){}x.find(e=>e.spanId===i)||(w.traceId=t,x.push(w),x.sort((e,t)=>e.timestamp-t.timestamp),await r.db.upsertSession(E,{taskId:E,user:l,model:d||"unknown",startTime:new Date(v),interactions:JSON.stringify(x),label:o},{interactions:JSON.stringify(x),endTime:new Date,model:b&&"unknown"===b.model&&d?d:void 0}));try{let e=x[0],t=x[x.length-1],n=x.reduce((e,t)=>e+(t.usage?.input_tokens||0),0),r=x.reduce((e,t)=>e+(t.usage?.output_tokens||0),0),s=x.reduce((e,t)=>e+(t.latency||0),0);await (0,a.saveExecutionRecord)({task_id:E,query:e?.requestMessages?.[0]?.content||"OTel Session",framework:o,model:d||"unknown",tokens:n+r,latency:s,final_result:t?.responseMessage?.content||"",timestamp:new Date(v),label:o,user:l||"anonymous"}),console.log(`[OTel] Synced Task ${E} to Execution table.`)}catch(e){console.error("[OTel] Execution Sync Error:",e)}}}}return s.NextResponse.json({status:"success"})}catch(e){return console.error("OTel Parsing Error",e),s.NextResponse.json({error:"Failed to parse OTLP"},{status:400})}}async function u(e){return console.log("[OTel] Received OPTIONS Request. Headers:",JSON.stringify(Object.fromEntries(e.headers.entries()))),new s.NextResponse(null,{status:204,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, x-witty-api-key, x-api-key, baggage, traceparent, tracestate"}})}[a,r]=o.then?(await o)():o,e.s(["OPTIONS",()=>u,"POST",()=>l]),n()}catch(e){n(e)}},!1),79639,e=>e.a(async(t,n)=>{try{var a=e.i(47909),r=e.i(74017),s=e.i(60476),o=e.i(59756),i=e.i(61916),l=e.i(74677),u=e.i(69741),c=e.i(16795),d=e.i(87718),p=e.i(95169),g=e.i(47587),h=e.i(66012),f=e.i(70101),m=e.i(26937),y=e.i(10372),v=e.i(93695);e.i(52474);var R=e.i(220),O=e.i(22033),w=t([O]);[O]=w.then?(await w)():w;let E=new a.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/otel/v1/traces/route",pathname:"/api/otel/v1/traces",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/otel/v1/traces/route.ts",nextConfigOutput:"standalone",userland:O}),{workAsyncStorage:b,workUnitAsyncStorage:x,serverHooks:N}=E;function T(){return(0,s.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:x})}async function S(e,t,n){E.isDev&&(0,o.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/otel/v1/traces/route";a=a.replace(/\/index$/,"")||"/";let s=await E.prepare(e,t,{srcPage:a,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:O,params:w,nextConfig:T,parsedUrl:S,isDraftMode:b,prerenderManifest:x,routerServerContext:N,isOnDemandRevalidate:k,revalidateOnlyGenerated:A,resolvedPathname:C,clientReferenceManifest:_,serverActionsManifest:P}=s,I=(0,u.normalizeAppPath)(a),q=!!(x.dynamicRoutes[I]||x.routes[C]),U=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,S,!1):t.end("This page could not be found"),null);if(q&&!b){let e=!!x.routes[C],t=x.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(T.experimental.adapterPath)return await U();throw new v.NoFallbackError}}let D=null;!q||E.isDev||b||(D=C,D="/index"===D?"/":D);let H=!0===E.isDev||!q,$=q&&!H;P&&_&&(0,l.setManifestsSingleton)({page:a,clientReferenceManifest:_,serverActionsManifest:P});let j=e.method||"GET",M=(0,i.getTracer)(),V=M.getActiveScopeSpan(),B={params:w,prerenderManifest:x,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts},cacheComponents:!!T.cacheComponents,supportsDynamicResponse:H,incrementalCache:(0,o.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:T.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,a,r)=>E.onRequestError(e,t,a,r,N)},sharedContext:{buildId:O}},F=new c.NodeNextRequest(e),J=new c.NodeNextResponse(t),K=d.NextRequestAdapter.fromNodeNextRequest(F,(0,d.signalFromNodeResponse)(t));try{let s=async e=>E.handle(K,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=M.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route");if(r){let t=`${j} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t)}else e.updateName(`${j} ${a}`)}),l=!!(0,o.getRequestMeta)(e,"minimalMode"),u=async o=>{var i,u;let c=async({previousCacheEntry:r})=>{try{if(!l&&k&&A&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await s(o);e.fetchMetrics=B.renderOpts.fetchMetrics;let i=B.renderOpts.pendingWaitUntil;i&&n.waitUntil&&(n.waitUntil(i),i=void 0);let u=B.renderOpts.collectedTags;if(!q)return await (0,h.sendResponse)(F,J,a,B.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);u&&(t[y.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=y.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,r=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=y.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:a,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:k})},!1,N),t}},d=await E.handleResponse({req:e,nextConfig:T,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:x,isRoutePPREnabled:!1,isOnDemandRevalidate:k,revalidateOnlyGenerated:A,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:l});if(!q)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(u=d.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",k?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&q||p.delete(y.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,h.sendResponse)(F,J,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};V?await u(V):await M.withPropagatedContext(e.headers,()=>M.trace(p.BaseServerSpan.handleRequest,{spanName:`${j} ${a}`,kind:i.SpanKind.SERVER,attributes:{"http.method":j,"http.target":e.url}},u))}catch(t){if(t instanceof v.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:k})},!1,N),q)throw t;return await (0,h.sendResponse)(F,J,new Response(null,{status:500})),null}}e.s(["handler",()=>S,"patchFetch",()=>T,"routeModule",()=>E,"serverHooks",()=>N,"workAsyncStorage",()=>b,"workUnitAsyncStorage",()=>x]),n()}catch(e){n(e)}},!1)];
1
+ module.exports=[22033,e=>e.a(async(t,n)=>{try{var a=e.i(85765),r=e.i(98043),s=e.i(89171),o=t([a,r]);function i(e){if(e){if(void 0!==e.stringValue)return e.stringValue;if(void 0!==e.intValue)return parseInt(e.intValue);if(void 0!==e.doubleValue)return e.doubleValue;if(void 0!==e.boolValue)return e.boolValue;if(void 0!==e.arrayValue)return e.arrayValue.values?.map(i);if(void 0!==e.kvlistValue){let t={};return e.kvlistValue.values.forEach(e=>{t[e.key]=i(e.value)}),t}}}async function l(e){try{let t,n,o=e.headers.get("x-witty-api-key");if(o){let e=await r.db.findUserByApiKey(o);e?(t=e.username,console.log(`[OTel] Authenticated User: ${t}`)):console.warn(`[OTel] Invalid API Key provided: ${o}`)}let l=e.headers.get("content-type")||"";console.log(`[OTel] Received Request. Content-Type: ${l}`);try{if(l.includes("application/json"))n=await e.json();else{if(l.includes("application/x-protobuf"))return console.warn("[OTel] Received Protobuf payload. JSON parser skipped."),s.NextResponse.json({error:"Protobuf not supported yet, please use OTEL_EXPORTER_OTLP_PROTOCOL=http/json"},{status:415});console.log("[OTel] Unknown Content-Type, attempting JSON parse..."),n=await e.json()}}catch(e){return console.error("[OTel] Failed to parse request body:",e),s.NextResponse.json({error:"Invalid Payload"},{status:400})}if(!n)return s.NextResponse.json({});for(let e of(console.log("[OTel] Raw Body Structure:",JSON.stringify(n,(e,t)=>"resourceSpans"===e&&Array.isArray(t)?`[${t.length} spans]`:t,2)),n.resourceSpans&&n.resourceSpans.length>0&&(console.log("[OTel] First Resource Attributes:",JSON.stringify(n.resourceSpans[0].resource?.attributes)),n.resourceSpans[0].scopeSpans?.[0]?.spans?.[0]&&console.log("[OTel] First Span Attributes:",JSON.stringify(n.resourceSpans[0].scopeSpans[0].spans[0].attributes))),n.resourceSpans||[])){let n=e.resource?.attributes||[],s={};n.forEach(e=>{s[e.key]=i(e.value)});let o=s["service.name"]||"unknown-service",l=t||s["user.id"]||s["enduser.id"];for(let t of e.scopeSpans||[])for(let e of t.spans||[]){let t=e.attributes||[],n={};t.forEach(e=>{n[e.key]=i(e.value)});let u=Object.keys(n).some(e=>e.startsWith("gen_ai.")||e.startsWith("llm.")),c=void 0!==n["tool.name"];if(u||c){let t=e.traceId,i=e.spanId,u=e.parentSpanId,d=n["gen_ai.request.model"]||n["llm.request.model"],p=n["gen_ai.usage.input_tokens"]||n["llm.usage.prompt_tokens"]||0,g=n["gen_ai.usage.output_tokens"]||n["llm.usage.completion_tokens"]||0,h=n["gen_ai.usage.reasoning_tokens"]||0,f=(p||0)+(g||0),m=BigInt(e.startTimeUnixNano||0),y=BigInt(e.endTimeUnixNano||0),v=Number((y-m)/BigInt(1e6)),R=Number(m/BigInt(1e6)),O=n["gen_ai.prompt"]||n["db.statement"],w=n["gen_ai.completion"]||n["db.result"],T={spanId:i,parentSpanId:u,name:e.name,type:c?"tool":"llm",model:d,usage:{input_tokens:p,output_tokens:g,reasoning_tokens:h||void 0,total_tokens:f},latency:v,timestamp:R};O&&(T.requestMessages=[{role:"user",content:O}]),w&&(T.responseMessage={role:"assistant",content:w}),c&&(T.toolCall={name:n["tool.name"],arguments:n["tool.arguments"]||JSON.stringify(n)}),console.log(`[OTel] Processed Span: ${t} - ${e.name} (${v}ms)`);let S=s["service.instance.id"],E=s["session.id"]||n["session.id"],b=E||S||t;"unknown"===b&&(b=t),console.log(`[OTel] Grouping into Session: ${b} (Source: ${E?"SessionID":S?"ProcessID":"TraceID"})`);let x=await r.db.findSessionByTaskId(b),N=[];if(x?.interactions)try{N=JSON.parse(x.interactions)}catch(e){}N.find(e=>e.spanId===i)||(T.traceId=t,N.push(T),N.sort((e,t)=>e.timestamp-t.timestamp),await r.db.upsertSession(b,{taskId:b,user:l,model:d||"unknown",startTime:new Date(R),interactions:JSON.stringify(N),label:o},{interactions:JSON.stringify(N),endTime:new Date,model:x&&"unknown"===x.model&&d?d:void 0}));try{let e=N[0],t=N[N.length-1],n=N.reduce((e,t)=>e+(t.usage?.input_tokens||0),0),r=N.reduce((e,t)=>e+(t.usage?.output_tokens||0),0),s=N.reduce((e,t)=>e+(t.latency||0),0);await (0,a.saveExecutionRecord)({task_id:b,query:e?.requestMessages?.[0]?.content||"OTel Session",framework:o,model:d||"unknown",tokens:n+r,latency:s,final_result:t?.responseMessage?.content||"",timestamp:new Date(R),label:o,user:l||"anonymous"}),console.log(`[OTel] Synced Task ${b} to Execution table.`)}catch(e){console.error("[OTel] Execution Sync Error:",e)}}}}return s.NextResponse.json({status:"success"})}catch(e){return console.error("OTel Parsing Error",e),s.NextResponse.json({error:"Failed to parse OTLP"},{status:400})}}async function u(e){return console.log("[OTel] Received OPTIONS Request. Headers:",JSON.stringify(Object.fromEntries(e.headers.entries()))),new s.NextResponse(null,{status:204,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, x-witty-api-key, x-api-key, baggage, traceparent, tracestate"}})}[a,r]=o.then?(await o)():o,e.s(["OPTIONS",()=>u,"POST",()=>l]),n()}catch(e){n(e)}},!1),79639,e=>e.a(async(t,n)=>{try{var a=e.i(47909),r=e.i(74017),s=e.i(60476),o=e.i(59756),i=e.i(61916),l=e.i(74677),u=e.i(69741),c=e.i(16795),d=e.i(87718),p=e.i(95169),g=e.i(47587),h=e.i(66012),f=e.i(70101),m=e.i(26937),y=e.i(10372),v=e.i(93695);e.i(52474);var R=e.i(220),O=e.i(22033),w=t([O]);[O]=w.then?(await w)():w;let E=new a.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/otel/v1/traces/route",pathname:"/api/otel/v1/traces",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/otel/v1/traces/route.ts",nextConfigOutput:"standalone",userland:O}),{workAsyncStorage:b,workUnitAsyncStorage:x,serverHooks:N}=E;function T(){return(0,s.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:x})}async function S(e,t,n){E.isDev&&(0,o.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/otel/v1/traces/route";a=a.replace(/\/index$/,"")||"/";let s=await E.prepare(e,t,{srcPage:a,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:O,params:w,nextConfig:T,parsedUrl:S,isDraftMode:b,prerenderManifest:x,routerServerContext:N,isOnDemandRevalidate:k,revalidateOnlyGenerated:A,resolvedPathname:C,clientReferenceManifest:_,serverActionsManifest:P}=s,I=(0,u.normalizeAppPath)(a),q=!!(x.dynamicRoutes[I]||x.routes[C]),U=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,S,!1):t.end("This page could not be found"),null);if(q&&!b){let e=!!x.routes[C],t=x.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(T.experimental.adapterPath)return await U();throw new v.NoFallbackError}}let D=null;!q||E.isDev||b||(D=C,D="/index"===D?"/":D);let H=!0===E.isDev||!q,$=q&&!H;P&&_&&(0,l.setManifestsSingleton)({page:a,clientReferenceManifest:_,serverActionsManifest:P});let j=e.method||"GET",M=(0,i.getTracer)(),V=M.getActiveScopeSpan(),B={params:w,prerenderManifest:x,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts},cacheComponents:!!T.cacheComponents,supportsDynamicResponse:H,incrementalCache:(0,o.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:T.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,a,r)=>E.onRequestError(e,t,a,r,N)},sharedContext:{buildId:O}},F=new c.NodeNextRequest(e),J=new c.NodeNextResponse(t),K=d.NextRequestAdapter.fromNodeNextRequest(F,(0,d.signalFromNodeResponse)(t));try{let s=async e=>E.handle(K,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=M.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route");if(r){let t=`${j} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t)}else e.updateName(`${j} ${a}`)}),l=!!(0,o.getRequestMeta)(e,"minimalMode"),u=async o=>{var i,u;let c=async({previousCacheEntry:r})=>{try{if(!l&&k&&A&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await s(o);e.fetchMetrics=B.renderOpts.fetchMetrics;let i=B.renderOpts.pendingWaitUntil;i&&n.waitUntil&&(n.waitUntil(i),i=void 0);let u=B.renderOpts.collectedTags;if(!q)return await (0,h.sendResponse)(F,J,a,B.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);u&&(t[y.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=y.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,r=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=y.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:a,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:k})},!1,N),t}},d=await E.handleResponse({req:e,nextConfig:T,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:x,isRoutePPREnabled:!1,isOnDemandRevalidate:k,revalidateOnlyGenerated:A,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:l});if(!q)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(u=d.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",k?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&q||p.delete(y.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,h.sendResponse)(F,J,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};V?await u(V):await M.withPropagatedContext(e.headers,()=>M.trace(p.BaseServerSpan.handleRequest,{spanName:`${j} ${a}`,kind:i.SpanKind.SERVER,attributes:{"http.method":j,"http.target":e.url}},u))}catch(t){if(t instanceof v.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:k})},!1,N),q)throw t;return await (0,h.sendResponse)(F,J,new Response(null,{status:500})),null}}e.s(["handler",()=>S,"patchFetch",()=>T,"routeModule",()=>E,"serverHooks",()=>N,"workAsyncStorage",()=>b,"workUnitAsyncStorage",()=>x]),n()}catch(e){n(e)}},!1)];
2
2
 
3
3
  //# sourceMappingURL=_ddffef3e._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[5853,(e,o,d)=>{}];
2
+
3
+ //# sourceMappingURL=_next-internal_server_app_api_auth_organization_route_actions_f58710b7.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[34097,(e,o,d)=>{}];
2
+
3
+ //# sourceMappingURL=_next-internal_server_app_api_setup_opencode-tui_route_actions_fc8ae29f.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[86548,(e,o,d)=>{}];
2
+
3
+ //# sourceMappingURL=_next-internal_server_app_api_skills_sync-enterprise_route_actions_0ca45899.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[55435,(e,o,d)=>{}];
2
+
3
+ //# sourceMappingURL=_next-internal_server_app_api_task-stats_route_actions_983505cd.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[88936,(e,o,d)=>{}];
2
+
3
+ //# sourceMappingURL=ce889_server_app_api_setup_opencode-commands_si-optimizer_route_actions_fcde30ef.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[81176,e=>{"use strict";var t=e.i(47909),n=e.i(74017),i=e.i(60476),s=e.i(59756),l=e.i(61916),o=e.i(74677),r=e.i(69741),a=e.i(16795),c=e.i(87718),h=e.i(95169),p=e.i(47587),d=e.i(66012),S=e.i(70101),u=e.i(26937),_=e.i(10372),E=e.i(93695);e.i(52474);var L=e.i(220),I=e.i(89171);async function g(e){var t,n,i;let s,l,o,r,{searchParams:a}=new URL(e.url),c=a.get("apiKey"),h=a.get("host");if(!c||!h)return new I.NextResponse("Missing required parameters: apiKey and host",{status:400,headers:{"Content-Type":"text/plain"}});let p=e.headers.get("host")||"127.0.0.1:3000",d=e.headers.get("x-forwarded-proto")||"http",S=new URL(e.url).pathname.replace(/\/api\/setup\/auto\/?$/,""),u=`${d}://${p}${S}`;return"windows"==(o=e.headers.get("user-agent")||"",(r=e.headers.get("x-platform")||"")?"windows"===r.toLowerCase()?"windows":"unix":/windows|win32|win64/i.test(o)?"windows":"unix")?(s=["# =============================================================================\n# Skill-insight Auto Setup (Non-Interactive) - PowerShell\n# =============================================================================\n",'$SKILL_INSIGHT_HOST = "'+h+'"','$SKILL_INSIGHT_BASE_URL = "'+u+'"','$SKILL_INSIGHT_API_KEY = "'+c+'"','\nWrite-Host "🚀 Fetching Skill-insight telemetry components from $SKILL_INSIGHT_BASE_URL..."\n\n# 1. Setup Directories\n$skillInsightDir = Join-Path $env:USERPROFILE ".skill-insight"\n$skillInsightLogsDir = Join-Path $skillInsightDir "logs"\n$opencodePluginsDir = Join-Path $env:USERPROFILE ".opencode\\plugins"\n$opencodeSkillsDir = Join-Path $env:USERPROFILE ".opencode\\skills"\n$claudeProjectsDir = Join-Path $env:USERPROFILE ".claude\\projects"\n$openclawAgentsDir = Join-Path $env:USERPROFILE ".openclaw\\agents"\n\nNew-Item -ItemType Directory -Force -Path $skillInsightDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $skillInsightLogsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $opencodePluginsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $opencodeSkillsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $claudeProjectsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $openclawAgentsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path ".opencode\\skills" | Out-Null\nWrite-Host "📂 Created necessary directories"\n\n# 2. Interactive Framework Selection with inquirer\nWrite-Host ""\n\n$SELECTOR_SCRIPT = Join-Path $skillInsightDir "framework_selector.mjs"\n$SELECTOR_RESULT = Join-Path $skillInsightDir ".selector_result"\n\n# Install inquirer if not already installed\nSet-Location $skillInsightDir\nif (-not (Test-Path "node_modules\\inquirer")) {\n Write-Host "📦 Installing inquirer for interactive selection..."\n npm install inquirer --save 2>$null\n}\n\n$selectorLines = @(\n "import inquirer from \'inquirer\';"\n "import fs from \'fs\';"\n ""\n "const frameworks = ["\n " { name: \'OpenCode\', value: \'opencode\' },"\n " { name: \'Claude Code\', value: \'claude\' },"\n " { name: \'OpenClaw\', value: \'openclaw\' }"\n "];"\n ""\n "async function select() {"\n " console.log(\'\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'╔══════════════════════════════════════════════════════════╗\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');"\n " console.log(\'\\x1b[1m\\x1b[36m%s\\x1b[0m\', \'║ ✨ Skill-insight ✨ ║\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'╚══════════════════════════════════════════════════════════╝\');"\n " console.log(\'\');"\n " console.log(\'\\x1b[90m%s\\x1b[0m\', \' 提示: ↑↓ 移动 | 空格 选择 | a 全选 | i 反选 | Enter 确认\');"\n " console.log(\'\');"\n ""\n " const answers = await inquirer.prompt(["\n " {"\n " type: \'checkbox\',"\n " name: \'frameworks\',"\n " message: \'集成到:\',"\n " choices: frameworks,"\n " pageSize: 10,"\n " loop: false"\n " }"\n " ]);"\n ""\n " const selected = answers.frameworks;"\n " "\n " if (selected.length > 0) {"\n " console.log(\'\');"\n " console.log(\'\\x1b[32m%s\\x1b[0m\', \'✅ 将安装以下组件:\');"\n " selected.forEach(fw => {"\n " const name = frameworks.find(f => f.value === fw)?.name || fw;"\n " console.log(\'\\x1b[32m%s\\x1b[0m\', \' • \' + name);"\n " });"\n " console.log(\'\');"\n " } else {"\n " console.log(\'\');"\n " console.log(\'\\x1b[33m%s\\x1b[0m\', \'⚠️ 未选择任何组件,将不进行安装。\');"\n " console.log(\'\');"\n " }"\n ""\n " // Write result to file for PowerShell to read"\n " const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.USERPROFILE + \'\\\\.skill-insight\\\\.selector_result\';"\n " fs.writeFileSync(resultFile, selected.join(\',\'));"\n "}"\n ""\n "select().catch(err => {"\n " console.error(\'Error:\', err);"\n " process.exit(1);"\n "});"\n)\n$selectorContent = $selectorLines -join [char]10\nSet-Content -Path $SELECTOR_SCRIPT -Value $selectorContent -Encoding UTF8\n\n# Run the selector interactively\n$env:SELECTOR_RESULT_FILE = $SELECTOR_RESULT\nSet-Location $skillInsightDir\nnpx -y tsx $SELECTOR_SCRIPT\n\n# Read the selection result from file\nif (Test-Path $SELECTOR_RESULT) {\n $SELECTED_FRAMEWORKS = Get-Content $SELECTOR_RESULT\n Remove-Item $SELECTOR_RESULT -Force\n} else {\n $SELECTED_FRAMEWORKS = ""\n}\n\n# Set installation flags based on selection\n$INSTALL_OPENCODE = $false\n$INSTALL_CLAUDE = $false\n$INSTALL_OPENCLAW = $false\n\nif ($SELECTED_FRAMEWORKS -match "opencode") {\n $INSTALL_OPENCODE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "claude") {\n $INSTALL_CLAUDE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "openclaw") {\n $INSTALL_OPENCLAW = $true\n}\n\n# Exit if nothing selected\nif (-not $INSTALL_OPENCODE -and -not $INSTALL_CLAUDE -and -not $INSTALL_OPENCLAW) {\n Write-Host "⚠️ 未选择任何框架组件,将跳过插件安装。"\n Write-Host " 继续执行配置步骤..."\n Write-Host ""\n}\n\n# 3. Download Components\nif ($INSTALL_OPENCODE) {\n Write-Host "⏬ Downloading OpenCode Plugin..."\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/api/setup/opencode" -OutFile (Join-Path $opencodePluginsDir "Witty-Skill-Insight.ts")\n \n Write-Host "⏬ Downloading Skill Sync Tool..."\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/sync_skills.ts" -OutFile (Join-Path $skillInsightDir "sync_skills.ts")\n}\n\nif ($INSTALL_CLAUDE) {\n Write-Host "⏬ Downloading Claude Code Watcher..."\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/api/setup/claude-watcher" -OutFile (Join-Path $skillInsightDir "claude_watcher_client.ts")\n}\n\nif ($INSTALL_OPENCLAW) {\n Write-Host "⏬ Downloading OpenClaw Watcher..."\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/api/setup/openclaw-watcher" -OutFile (Join-Path $skillInsightDir "openclaw_watcher_client.ts")\n}\n\n# 4. Configure ~/.skill-insight/.env (Auto mode - no interaction)\n$SKILL_INSIGHT_CONFIG_FILE = Join-Path $skillInsightDir ".env"\n\nWrite-Host "⚙️ Updating configuration..."\nif (Test-Path $SKILL_INSIGHT_CONFIG_FILE) {\n $existingContent = Get-Content $SKILL_INSIGHT_CONFIG_FILE\n $filteredContent = $existingContent | Where-Object { $_ -notmatch "^SKILL_INSIGHT_HOST=" -and $_ -notmatch "^SKILL_INSIGHT_API_KEY=" }\n Set-Content -Path $SKILL_INSIGHT_CONFIG_FILE -Value $filteredContent\n} else {\n New-Item -ItemType File -Path $SKILL_INSIGHT_CONFIG_FILE -Force | Out-Null\n}\nAdd-Content -Path $SKILL_INSIGHT_CONFIG_FILE -Value "SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST"\nAdd-Content -Path $SKILL_INSIGHT_CONFIG_FILE -Value "SKILL_INSIGHT_API_KEY=$SKILL_INSIGHT_API_KEY"\nWrite-Host "✅ Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"\nWrite-Host " SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST"\nWrite-Host " SKILL_INSIGHT_API_KEY=********"\n\n# 5. Sync Opencode Skills\nif ($INSTALL_OPENCODE) {\n Write-Host ""\n Write-Host "🚀 Syncing Opencode Skills..."\n if (Get-Command npx -ErrorAction SilentlyContinue) {\n npx -y tsx (Join-Path $skillInsightDir "sync_skills.ts") --agent opencode\n } else {\n Write-Host "⚠️ Node.js (npx) not found. Skipping skill sync."\n }\n}\n\n# 6. Install Watcher Dependencies (only if any watcher is selected)\nif ($INSTALL_CLAUDE -or $INSTALL_OPENCLAW) {\n Write-Host ""\n Write-Host "📦 Installing watcher dependencies..."\n if (Get-Command npm -ErrorAction SilentlyContinue) {\n Set-Location $skillInsightDir\n if (-not (Test-Path "package.json")) {\n \'{"name": "skill-insight-watcher", "version": "1.0.0", "type": "module", "dependencies": {}}\' | Out-File -FilePath "package.json" -Encoding utf8\n }\n npm install chokidar --save 2>$null\n Write-Host "✅ Dependencies installed"\n } else {\n Write-Host "⚠️ npm not found. Skipping dependency installation."\n }\n}\n\n# 7. Create Watcher Startup/Stop Scripts\n$NEEDS_WATCHER_SCRIPTS = $INSTALL_CLAUDE -or $INSTALL_OPENCLAW\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "📝 Creating watcher management scripts..."\n\n # Claude Watcher Start Script\n if ($INSTALL_CLAUDE) {\n $startClaudeScript = @\'\n# Stop existing watcher if running\nGet-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\n\n# Start watcher in background\n$skillInsightDir = Join-Path $env:USERPROFILE ".skill-insight"\n$logFile = Join-Path $skillInsightDir "logs\\claude_watcher.log"\n$scriptPath = Join-Path $skillInsightDir "claude_watcher_client.ts"\n\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", $scriptPath -NoNewWindow -RedirectStandardOutput $logFile -RedirectStandardError $logFile\nWrite-Host "Claude watcher started"\n\'@\n $startClaudePath = Join-Path $skillInsightDir "start_claude_watcher.ps1"\n Set-Content -Path $startClaudePath -Value $startClaudeScript -Encoding UTF8\n Write-Host "✅ Claude watcher start script created"\n\n # Claude Watcher Stop Script\n $stopClaudeScript = @\'\nWrite-Host "Stopping Claude watcher..."\nGet-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nWrite-Host "Claude watcher stopped"\n\'@\n $stopClaudePath = Join-Path $skillInsightDir "stop_claude_watcher.ps1"\n Set-Content -Path $stopClaudePath -Value $stopClaudeScript -Encoding UTF8\n Write-Host "✅ Claude watcher stop script created"\n }\n\n # OpenClaw Watcher Start Script\n if ($INSTALL_OPENCLAW) {\n $startOpenclawScript = @\'\n# Stop existing watcher if running\nGet-Process | Where-Object { $_.CommandLine -like "*openclaw_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\n\n# Start watcher in background\n$skillInsightDir = Join-Path $env:USERPROFILE ".skill-insight"\n$logFile = Join-Path $skillInsightDir "logs\\openclaw_watcher.log"\n$scriptPath = Join-Path $skillInsightDir "openclaw_watcher_client.ts"\n\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", $scriptPath -NoNewWindow -RedirectStandardOutput $logFile -RedirectStandardError $logFile\nWrite-Host "OpenClaw watcher started"\n\'@\n $startOpenclawPath = Join-Path $skillInsightDir "start_openclaw_watcher.ps1"\n Set-Content -Path $startOpenclawPath -Value $startOpenclawScript -Encoding UTF8\n Write-Host "✅ OpenClaw watcher start script created"\n\n # OpenClaw Watcher Stop Script\n $stopOpenclawScript = @\'\nWrite-Host "Stopping OpenClaw watcher..."\nGet-Process | Where-Object { $_.CommandLine -like "*openclaw_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nWrite-Host "OpenClaw watcher stopped"\n\'@\n $stopOpenclawPath = Join-Path $skillInsightDir "stop_openclaw_watcher.ps1"\n Set-Content -Path $stopOpenclawPath -Value $stopOpenclawScript -Encoding UTF8\n Write-Host "✅ OpenClaw watcher stop script created"\n }\n\n # Combined Start Script\n $startLines = @()\n $startLines += \'Write-Host "Starting Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) {\n $startLines += \'powershell -File "\' + $skillInsightDir + \'\\start_claude_watcher.ps1"\'\n }\n if ($INSTALL_OPENCLAW) {\n $startLines += \'powershell -File "\' + $skillInsightDir + \'\\start_openclaw_watcher.ps1"\'\n }\n $startLines += \'Write-Host "All watchers started!"\'\n $startLines -join [char]10 | Set-Content -Path (Join-Path $skillInsightDir "start_watchers.ps1") -Encoding UTF8\n Write-Host "✅ Combined start script created"\n\n # Combined Stop Script\n $stopLines = @()\n $stopLines += \'Write-Host "Stopping Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) {\n $stopLines += \'powershell -File "\' + $skillInsightDir + \'\\stop_claude_watcher.ps1"\'\n }\n if ($INSTALL_OPENCLAW) {\n $stopLines += \'powershell -File "\' + $skillInsightDir + \'\\stop_openclaw_watcher.ps1"\'\n }\n $stopLines += \'Write-Host "All watchers stopped!"\'\n $stopLines -join [char]10 | Set-Content -Path (Join-Path $skillInsightDir "stop_watchers.ps1") -Encoding UTF8\n Write-Host "✅ Combined stop script created"\n}\n\n# 8. Start Watchers Now\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "🚀 Starting telemetry watchers..."\n if (Get-Command npx -ErrorAction SilentlyContinue) {\n & (Join-Path $skillInsightDir "start_watchers.ps1")\n } else {\n Write-Host "⚠️ Node.js (npx) not found. Skipping watcher startup."\n }\n}\n\n# 9. Configure Claude Code Auto-Sync Wrapper (PowerShell profile)\nif ($INSTALL_CLAUDE) {\n Write-Host ""\n Write-Host "🔄 Configuring Claude Code Auto-Sync Wrapper..."\n \n $claudeWrapper = @\'\n\n# Skill Insight Claude Alliance\nfunction skill-insight-claude {\n if (Get-Command npx -ErrorAction SilentlyContinue) {\n npx -y tsx "$env:USERPROFILE\\.skill-insight\\sync_skills.ts" --agent claude 2>$null\n }\n claude $args\n}\nSet-Alias -Name claude -Value skill-insight-claude -Force\n\'@\n\n $profilePath = $PROFILE\n if (Test-Path $profilePath) {\n $profileContent = Get-Content $profilePath -Raw\n if ($profileContent -notmatch "skill-insight-claude") {\n Add-Content -Path $profilePath -Value $claudeWrapper\n Write-Host "✅ Installed Claude wrapper to $profilePath"\n }\n } else {\n $profileDir = Split-Path $profilePath -Parent\n if (-not (Test-Path $profileDir)) {\n New-Item -ItemType Directory -Path $profileDir -Force | Out-Null\n }\n Set-Content -Path $profilePath -Value $claudeWrapper -Encoding UTF8\n Write-Host "✅ Created PowerShell profile with Claude wrapper at $profilePath"\n }\n}\n\n# 10. Final Summary\nWrite-Host ""\nWrite-Host "🌟 Skill-Insight Telemetry: READY"\nWrite-Host "------------------------------------------------"\nWrite-Host "Installed Components:"\nif ($INSTALL_OPENCODE) {\n Write-Host " ✅ OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts"\n}\nif ($INSTALL_CLAUDE) {\n Write-Host " ✅ Claude Watcher: ~/.skill-insight/claude_watcher_client.ts"\n}\nif ($INSTALL_OPENCLAW) {\n Write-Host " ✅ OpenClaw Watcher: ~/.skill-insight/openclaw_watcher_client.ts"\n}\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "Watcher Management:"\n Write-Host " Start all: ~/.skill-insight/start_watchers.ps1"\n Write-Host " Stop all: ~/.skill-insight/stop_watchers.ps1"\n if ($INSTALL_CLAUDE) {\n Write-Host " Start Claude: ~/.skill-insight/start_claude_watcher.ps1"\n Write-Host " Stop Claude: ~/.skill-insight/stop_claude_watcher.ps1"\n }\n if ($INSTALL_OPENCLAW) {\n Write-Host " Start OpenClaw: ~/.skill-insight/start_openclaw_watcher.ps1"\n Write-Host " Stop OpenClaw: ~/.skill-insight/stop_openclaw_watcher.ps1"\n }\n Write-Host " Logs: ~/.skill-insight/logs/"\n}\n\nWrite-Host ""\nWrite-Host "Usage:"\nif ($INSTALL_OPENCODE) {\n Write-Host " 1. Run: opencode run \'hello\'"\n}\nif ($INSTALL_CLAUDE) {\n Write-Host " 2. Run: claude (restart terminal first)"\n}\nif ($INSTALL_OPENCLAW) {\n Write-Host " 3. OpenClaw will automatically monitor and upload telemetry"\n}\nWrite-Host "------------------------------------------------"'].join("\n"),new I.NextResponse("\uFEFF"+s,{headers:{"Content-Type":"application/x-powershell; charset=utf-8"}})):(t=u,n=h,i=c,l=`#!/bin/bash
1
+ module.exports=[81176,e=>{"use strict";var t=e.i(47909),n=e.i(74017),i=e.i(60476),s=e.i(59756),o=e.i(61916),l=e.i(74677),a=e.i(69741),r=e.i(16795),c=e.i(87718),h=e.i(95169),p=e.i(47587),S=e.i(66012),_=e.i(70101),d=e.i(26937),u=e.i(10372),I=e.i(93695);e.i(52474);var E=e.i(220),L=e.i(89171);async function g(e){var t,n,i;let s,o,l,a,{searchParams:r}=new URL(e.url),c=r.get("apiKey"),h=r.get("host");if(!c||!h)return new L.NextResponse("Missing required parameters: apiKey and host",{status:400,headers:{"Content-Type":"text/plain"}});let p=e.headers.get("host")||"127.0.0.1:3000",S=e.headers.get("x-forwarded-proto")||"http",_=new URL(e.url).pathname.replace(/\/api\/setup\/auto\/?$/,""),d=`${S}://${p}${_}`;return"windows"==(l=e.headers.get("user-agent")||"",(a=e.headers.get("x-platform")||"")?"windows"===a.toLowerCase()?"windows":"unix":/windows|win32|win64/i.test(l)?"windows":"unix")?(s=["# =============================================================================\n# Skill-insight Auto Setup (Non-Interactive) - PowerShell\n# =============================================================================\n",'$SKILL_INSIGHT_HOST = "'+h+'"','$SKILL_INSIGHT_BASE_URL = "'+d+'"','$SKILL_INSIGHT_API_KEY = "'+c+'"','\nWrite-Host "🚀 Fetching Skill-insight telemetry components from $SKILL_INSIGHT_BASE_URL..."\n\n# 1. Setup Directories\n$skillInsightDir = Join-Path $env:USERPROFILE ".skill-insight"\n$skillInsightLogsDir = Join-Path $skillInsightDir "logs"\n$opencodePluginsDir = Join-Path $env:USERPROFILE ".opencode\\plugins"\n$opencodeSkillsDir = Join-Path $env:USERPROFILE ".opencode\\skills"\n$claudeProjectsDir = Join-Path $env:USERPROFILE ".claude\\projects"\n$openclawAgentsDir = Join-Path $env:USERPROFILE ".openclaw\\agents"\n\nNew-Item -ItemType Directory -Force -Path $skillInsightDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $skillInsightLogsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $opencodePluginsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $opencodeSkillsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $claudeProjectsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $openclawAgentsDir | Out-Null\nNew-Item -ItemType Directory -Force -Path ".opencode\\skills" | Out-Null\nWrite-Host "📂 Created necessary directories"\n\n# 2. Interactive Framework Selection with inquirer\nWrite-Host ""\n\n$SELECTOR_SCRIPT = Join-Path $skillInsightDir "framework_selector.mjs"\n$SELECTOR_RESULT = Join-Path $skillInsightDir ".selector_result"\n\n# Install inquirer if not already installed\nSet-Location $skillInsightDir\nif (-not (Test-Path "node_modules\\inquirer")) {\n Write-Host "📦 Installing inquirer for interactive selection..."\n npm install inquirer --save 2>$null\n}\n\n$selectorLines = @(\n "import inquirer from \'inquirer\';"\n "import fs from \'fs\';"\n ""\n "const frameworks = ["\n " { name: \'OpenCode\', value: \'opencode\' },"\n " { name: \'Claude Code\', value: \'claude\' },"\n " { name: \'OpenClaw\', value: \'openclaw\' }"\n "];"\n ""\n "async function select() {"\n " console.log(\'\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'╔══════════════════════════════════════════════════════════╗\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');"\n " console.log(\'\\x1b[1m\\x1b[36m%s\\x1b[0m\', \'║ ✨ Skill-insight ✨ ║\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');"\n " console.log(\'\\x1b[36m%s\\x1b[0m\', \'╚══════════════════════════════════════════════════════════╝\');"\n " console.log(\'\');"\n " console.log(\'\\x1b[90m%s\\x1b[0m\', \' 提示: ↑↓ 移动 | 空格 选择 | a 全选 | i 反选 | Enter 确认\');"\n " console.log(\'\');"\n ""\n " const answers = await inquirer.prompt(["\n " {"\n " type: \'checkbox\',"\n " name: \'frameworks\',"\n " message: \'集成到:\',"\n " choices: frameworks,"\n " pageSize: 10,"\n " loop: false"\n " }"\n " ]);"\n ""\n " const selected = answers.frameworks;"\n " "\n " if (selected.length > 0) {"\n " console.log(\'\');"\n " console.log(\'\\x1b[32m%s\\x1b[0m\', \'✅ 将安装以下组件:\');"\n " selected.forEach(fw => {"\n " const name = frameworks.find(f => f.value === fw)?.name || fw;"\n " console.log(\'\\x1b[32m%s\\x1b[0m\', \' • \' + name);"\n " });"\n " console.log(\'\');"\n " } else {"\n " console.log(\'\');"\n " console.log(\'\\x1b[33m%s\\x1b[0m\', \'⚠️ 未选择任何组件,将不进行安装。\');"\n " console.log(\'\');"\n " }"\n ""\n " // Write result to file for PowerShell to read"\n " const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.USERPROFILE + \'\\\\.skill-insight\\\\.selector_result\';"\n " fs.writeFileSync(resultFile, selected.join(\',\'));"\n "}"\n ""\n "select().catch(err => {"\n " console.error(\'Error:\', err);"\n " process.exit(1);"\n "});"\n)\n$selectorContent = $selectorLines -join [char]10\nSet-Content -Path $SELECTOR_SCRIPT -Value $selectorContent -Encoding UTF8\n\n# Run the selector interactively\n$env:SELECTOR_RESULT_FILE = $SELECTOR_RESULT\nSet-Location $skillInsightDir\nnpx -y tsx $SELECTOR_SCRIPT\n\n# Read the selection result from file\nif (Test-Path $SELECTOR_RESULT) {\n $SELECTED_FRAMEWORKS = Get-Content $SELECTOR_RESULT\n Remove-Item $SELECTOR_RESULT -Force\n} else {\n $SELECTED_FRAMEWORKS = ""\n}\n\n# Set installation flags based on selection\n$INSTALL_OPENCODE = $false\n$INSTALL_CLAUDE = $false\n$INSTALL_OPENCLAW = $false\n\nif ($SELECTED_FRAMEWORKS -match "opencode") {\n $INSTALL_OPENCODE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "claude") {\n $INSTALL_CLAUDE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "openclaw") {\n $INSTALL_OPENCLAW = $true\n}\n\n# Exit if nothing selected\nif (-not $INSTALL_OPENCODE -and -not $INSTALL_CLAUDE -and -not $INSTALL_OPENCLAW) {\n Write-Host "⚠️ 未选择任何框架组件,将跳过插件安装。"\n Write-Host " 继续执行配置步骤..."\n Write-Host ""\n}\n\n# 3. Download Components\nif ($INSTALL_OPENCODE) {\n Write-Host "⏬ Downloading OpenCode Plugin..."\n $opencodeConfigDir = if ($env:XDG_CONFIG_HOME) { Join-Path $env:XDG_CONFIG_HOME "opencode" } elseif ($env:APPDATA) { Join-Path $env:APPDATA "opencode" } else { Join-Path $homeDir ".config\\opencode" }\n New-Item -ItemType Directory -Path (Join-Path $opencodeConfigDir "plugins") -Force | Out-Null\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/api/setup/opencode" -OutFile (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.ts")\n Copy-Item (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.ts") (Join-Path $opencodePluginsDir "Witty-Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Write-Host "⏬ Downloading OpenCode TUI Plugin..."\n $tuiPluginPath = Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.tui.tsx"\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/api/setup/opencode-tui" -OutFile $tuiPluginPath\n Copy-Item $tuiPluginPath (Join-Path $opencodePluginsDir "Witty-Skill-Insight.tui.tsx") -Force -ErrorAction SilentlyContinue\n $tuiConfigFile = Join-Path $opencodeConfigDir "tui.json"\n try {\n $data = @{}\n if (Test-Path $tuiConfigFile) {\n $raw = Get-Content $tuiConfigFile -Raw\n if ($raw -and $raw.Trim()) { $data = $raw | ConvertFrom-Json }\n }\n if (-not $data.plugin) { $data | Add-Member -MemberType NoteProperty -Name plugin -Value @() -Force }\n if ($data.plugin -notcontains $tuiPluginPath) { $data.plugin += $tuiPluginPath }\n $data | ConvertTo-Json -Depth 10 | Set-Content -Path $tuiConfigFile -Encoding UTF8\n } catch {\n Write-Host "⚠️ Failed to patch tui.json for TUI plugin."\n }\n}\n\nif ($INSTALL_CLAUDE) {\n Write-Host "⏬ Downloading Claude Code Watcher..."\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/api/setup/claude-watcher" -OutFile (Join-Path $skillInsightDir "claude_watcher_client.ts")\n}\n\nif ($INSTALL_OPENCLAW) {\n Write-Host "⏬ Downloading OpenClaw Watcher..."\n Invoke-WebRequest -Uri "$SKILL_INSIGHT_BASE_URL/api/setup/openclaw-watcher" -OutFile (Join-Path $skillInsightDir "openclaw_watcher_client.ts")\n}\n\n# 4. Configure ~/.skill-insight/.env (Auto mode - no interaction)\n$SKILL_INSIGHT_CONFIG_FILE = Join-Path $skillInsightDir ".env"\n\nWrite-Host "⚙️ Updating configuration..."\nif (Test-Path $SKILL_INSIGHT_CONFIG_FILE) {\n $existingContent = Get-Content $SKILL_INSIGHT_CONFIG_FILE\n $existingShow = ($existingContent | Where-Object { $_ -match "^SKILL_INSIGHT_SHOW_TASK_STATS=" } | Select-Object -First 1)\n $showValue = "true"\n if ($existingShow) { $showValue = ($existingShow -split "=", 2)[1] }\n $filteredContent = $existingContent | Where-Object { $_ -notmatch "^SKILL_INSIGHT_HOST=" -and $_ -notmatch "^SKILL_INSIGHT_API_KEY=" -and $_ -notmatch "^SKILL_INSIGHT_SHOW_TASK_STATS=" }\n Set-Content -Path $SKILL_INSIGHT_CONFIG_FILE -Value $filteredContent\n} else {\n New-Item -ItemType File -Path $SKILL_INSIGHT_CONFIG_FILE -Force | Out-Null\n $showValue = "true"\n}\nAdd-Content -Path $SKILL_INSIGHT_CONFIG_FILE -Value "SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST"\nAdd-Content -Path $SKILL_INSIGHT_CONFIG_FILE -Value "SKILL_INSIGHT_API_KEY=$SKILL_INSIGHT_API_KEY"\nAdd-Content -Path $SKILL_INSIGHT_CONFIG_FILE -Value "SKILL_INSIGHT_SHOW_TASK_STATS=$showValue"\nWrite-Host "✅ Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"\nWrite-Host " SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST"\nWrite-Host " SKILL_INSIGHT_API_KEY=********"\n\n# 6. Install Watcher Dependencies (only if any watcher is selected)\nif ($INSTALL_CLAUDE -or $INSTALL_OPENCLAW) {\n Write-Host ""\n Write-Host "📦 Installing watcher dependencies..."\n if (Get-Command npm -ErrorAction SilentlyContinue) {\n Set-Location $skillInsightDir\n if (-not (Test-Path "package.json")) {\n \'{"name": "skill-insight-watcher", "version": "1.0.0", "type": "module", "dependencies": {}}\' | Out-File -FilePath "package.json" -Encoding utf8\n }\n npm install chokidar --save 2>$null\n Write-Host "✅ Dependencies installed"\n } else {\n Write-Host "⚠️ npm not found. Skipping dependency installation."\n }\n}\n\n# 7. Create Watcher Startup/Stop Scripts\n$NEEDS_WATCHER_SCRIPTS = $INSTALL_CLAUDE -or $INSTALL_OPENCLAW\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "📝 Creating watcher management scripts..."\n\n # Claude Watcher Start Script\n if ($INSTALL_CLAUDE) {\n $startClaudeScript = @\'\n# Stop existing watcher if running\nGet-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\n\n# Start watcher in background\n$skillInsightDir = Join-Path $env:USERPROFILE ".skill-insight"\n$logFile = Join-Path $skillInsightDir "logs\\claude_watcher.log"\n$scriptPath = Join-Path $skillInsightDir "claude_watcher_client.ts"\n\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", $scriptPath -NoNewWindow -RedirectStandardOutput $logFile -RedirectStandardError $logFile\nWrite-Host "Claude watcher started"\n\'@\n $startClaudePath = Join-Path $skillInsightDir "start_claude_watcher.ps1"\n Set-Content -Path $startClaudePath -Value $startClaudeScript -Encoding UTF8\n Write-Host "✅ Claude watcher start script created"\n\n # Claude Watcher Stop Script\n $stopClaudeScript = @\'\nWrite-Host "Stopping Claude watcher..."\nGet-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nWrite-Host "Claude watcher stopped"\n\'@\n $stopClaudePath = Join-Path $skillInsightDir "stop_claude_watcher.ps1"\n Set-Content -Path $stopClaudePath -Value $stopClaudeScript -Encoding UTF8\n Write-Host "✅ Claude watcher stop script created"\n }\n\n # OpenClaw Watcher Start Script\n if ($INSTALL_OPENCLAW) {\n $startOpenclawScript = @\'\n# Stop existing watcher if running\nGet-Process | Where-Object { $_.CommandLine -like "*openclaw_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\n\n# Start watcher in background\n$skillInsightDir = Join-Path $env:USERPROFILE ".skill-insight"\n$logFile = Join-Path $skillInsightDir "logs\\openclaw_watcher.log"\n$scriptPath = Join-Path $skillInsightDir "openclaw_watcher_client.ts"\n\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", $scriptPath -NoNewWindow -RedirectStandardOutput $logFile -RedirectStandardError $logFile\nWrite-Host "OpenClaw watcher started"\n\'@\n $startOpenclawPath = Join-Path $skillInsightDir "start_openclaw_watcher.ps1"\n Set-Content -Path $startOpenclawPath -Value $startOpenclawScript -Encoding UTF8\n Write-Host "✅ OpenClaw watcher start script created"\n\n # OpenClaw Watcher Stop Script\n $stopOpenclawScript = @\'\nWrite-Host "Stopping OpenClaw watcher..."\nGet-Process | Where-Object { $_.CommandLine -like "*openclaw_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nWrite-Host "OpenClaw watcher stopped"\n\'@\n $stopOpenclawPath = Join-Path $skillInsightDir "stop_openclaw_watcher.ps1"\n Set-Content -Path $stopOpenclawPath -Value $stopOpenclawScript -Encoding UTF8\n Write-Host "✅ OpenClaw watcher stop script created"\n }\n\n # Combined Start Script\n $startLines = @()\n $startLines += \'Write-Host "Starting Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) {\n $startLines += \'powershell -File "\' + $skillInsightDir + \'\\start_claude_watcher.ps1"\'\n }\n if ($INSTALL_OPENCLAW) {\n $startLines += \'powershell -File "\' + $skillInsightDir + \'\\start_openclaw_watcher.ps1"\'\n }\n $startLines += \'Write-Host "All watchers started!"\'\n $startLines -join [char]10 | Set-Content -Path (Join-Path $skillInsightDir "start_watchers.ps1") -Encoding UTF8\n Write-Host "✅ Combined start script created"\n\n # Combined Stop Script\n $stopLines = @()\n $stopLines += \'Write-Host "Stopping Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) {\n $stopLines += \'powershell -File "\' + $skillInsightDir + \'\\stop_claude_watcher.ps1"\'\n }\n if ($INSTALL_OPENCLAW) {\n $stopLines += \'powershell -File "\' + $skillInsightDir + \'\\stop_openclaw_watcher.ps1"\'\n }\n $stopLines += \'Write-Host "All watchers stopped!"\'\n $stopLines -join [char]10 | Set-Content -Path (Join-Path $skillInsightDir "stop_watchers.ps1") -Encoding UTF8\n Write-Host "✅ Combined stop script created"\n}\n\n# 8. Start Watchers Now\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "🚀 Starting telemetry watchers..."\n if (Get-Command npx -ErrorAction SilentlyContinue) {\n & (Join-Path $skillInsightDir "start_watchers.ps1")\n } else {\n Write-Host "⚠️ Node.js (npx) not found. Skipping watcher startup."\n }\n}\n\n# 10. Final Summary\nWrite-Host ""\nWrite-Host "🌟 Skill-Insight Telemetry: READY"\nWrite-Host "------------------------------------------------"\nWrite-Host "Installed Components:"\nif ($INSTALL_OPENCODE) {\n Write-Host " ✅ OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts"\n}\nif ($INSTALL_CLAUDE) {\n Write-Host " ✅ Claude Watcher: ~/.skill-insight/claude_watcher_client.ts"\n}\nif ($INSTALL_OPENCLAW) {\n Write-Host " ✅ OpenClaw Watcher: ~/.skill-insight/openclaw_watcher_client.ts"\n}\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "Watcher Management:"\n Write-Host " Start all: ~/.skill-insight/start_watchers.ps1"\n Write-Host " Stop all: ~/.skill-insight/stop_watchers.ps1"\n if ($INSTALL_CLAUDE) {\n Write-Host " Start Claude: ~/.skill-insight/start_claude_watcher.ps1"\n Write-Host " Stop Claude: ~/.skill-insight/stop_claude_watcher.ps1"\n }\n if ($INSTALL_OPENCLAW) {\n Write-Host " Start OpenClaw: ~/.skill-insight/start_openclaw_watcher.ps1"\n Write-Host " Stop OpenClaw: ~/.skill-insight/stop_openclaw_watcher.ps1"\n }\n Write-Host " Logs: ~/.skill-insight/logs/"\n}\n\nWrite-Host ""\nWrite-Host "Usage:"\nif ($INSTALL_OPENCODE) {\n Write-Host " 1. Run: opencode run \'hello\'"\n}\nif ($INSTALL_CLAUDE) {\n Write-Host " 2. Run: claude (restart terminal first)"\n}\nif ($INSTALL_OPENCLAW) {\n Write-Host " 3. OpenClaw will automatically monitor and upload telemetry"\n}\nWrite-Host "------------------------------------------------"'].join("\n"),new L.NextResponse("\uFEFF"+s,{headers:{"Content-Type":"application/x-powershell; charset=utf-8"}})):(t=d,n=h,i=c,o=`#!/bin/bash
2
2
  # =============================================================================
3
3
  # Skill-insight Auto Setup (Non-Interactive)
4
4
  # =============================================================================
@@ -128,11 +128,42 @@ fi
128
128
 
129
129
  # 3. Download Components
130
130
  if [ "$INSTALL_OPENCODE" = "true" ]; then
131
+ OPENCODE_CONFIG_DIR="\${XDG_CONFIG_HOME:-$HOME/.config}/opencode"
132
+ mkdir -p "$OPENCODE_CONFIG_DIR/plugins"
131
133
  echo "⏬ Downloading OpenCode Plugin..."
132
- curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode" -o "$HOME/.opencode/plugins/Witty-Skill-Insight.ts"
133
-
134
- echo "⏬ Downloading Skill Sync Tool..."
135
- curl -sSf "$SKILL_INSIGHT_BASE_URL/sync_skills.ts" -o "$HOME/.skill-insight/sync_skills.ts"
134
+ curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts"
135
+ cp "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts" "$HOME/.opencode/plugins/Witty-Skill-Insight.ts" 2>/dev/null || true
136
+ echo "⏬ Installing OpenCode commands..."
137
+ mkdir -p "$OPENCODE_CONFIG_DIR/commands"
138
+ curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode-commands/si-optimizer" -o "$OPENCODE_CONFIG_DIR/commands/si-optimizer.md"
139
+ echo "⏬ Downloading OpenCode TUI Plugin..."
140
+ curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode-tui" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"
141
+ cp "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx" "$HOME/.opencode/plugins/Witty-Skill-Insight.tui.tsx" 2>/dev/null || true
142
+ export TUI_PLUGIN_PATH="$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"
143
+ export TUI_CONFIG_FILE="$OPENCODE_CONFIG_DIR/tui.json"
144
+ if command -v node &> /dev/null; then
145
+ node - <<'NODE'
146
+ const fs = require("fs");
147
+ const path = require("path");
148
+ const file = process.env.TUI_CONFIG_FILE;
149
+ const pluginPath = process.env.TUI_PLUGIN_PATH;
150
+ let data = {};
151
+ try {
152
+ if (fs.existsSync(file)) {
153
+ const text = fs.readFileSync(file, "utf8");
154
+ data = text && text.trim() ? JSON.parse(text) : {};
155
+ }
156
+ } catch {}
157
+ if (!data || typeof data !== "object") data = {};
158
+ const list = Array.isArray(data.plugin) ? data.plugin.slice() : [];
159
+ if (pluginPath && !list.includes(pluginPath)) list.push(pluginPath);
160
+ data.plugin = list;
161
+ fs.mkdirSync(path.dirname(file), { recursive: true });
162
+ fs.writeFileSync(file, JSON.stringify(data, null, 2));
163
+ NODE
164
+ else
165
+ echo "⚠️ node not found; skip TUI plugin config patch."
166
+ fi
136
167
  fi
137
168
 
138
169
  if [ "$INSTALL_CLAUDE" = "true" ]; then
@@ -147,31 +178,28 @@ fi
147
178
 
148
179
  # 4. Configure ~/.skill-insight/.env (Auto mode - no interaction)
149
180
  SKILL_INSIGHT_CONFIG_FILE="$HOME/.skill-insight/.env"
181
+ FINAL_SHOW_TASK_STATS="true"
182
+ if [ -f "$SKILL_INSIGHT_CONFIG_FILE" ]; then
183
+ EXISTING_SHOW_TASK_STATS=$(grep '^SKILL_INSIGHT_SHOW_TASK_STATS=' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d'=' -f2-)
184
+ if [ -n "$EXISTING_SHOW_TASK_STATS" ]; then
185
+ FINAL_SHOW_TASK_STATS="$EXISTING_SHOW_TASK_STATS"
186
+ fi
187
+ fi
150
188
 
151
189
  echo "⚙️ Updating configuration..."
152
190
  touch "$SKILL_INSIGHT_CONFIG_FILE"
153
191
  if [ -f "$SKILL_INSIGHT_CONFIG_FILE" ]; then
154
192
  cp "$SKILL_INSIGHT_CONFIG_FILE" "\${SKILL_INSIGHT_CONFIG_FILE}.bak"
155
- grep -v "^SKILL_INSIGHT_HOST=" "\${SKILL_INSIGHT_CONFIG_FILE}.bak" | grep -v "^SKILL_INSIGHT_API_KEY=" > "$SKILL_INSIGHT_CONFIG_FILE"
193
+ grep -v "^SKILL_INSIGHT_HOST=" "\${SKILL_INSIGHT_CONFIG_FILE}.bak" | grep -v "^SKILL_INSIGHT_API_KEY=" | grep -v "^SKILL_INSIGHT_SHOW_TASK_STATS=" > "$SKILL_INSIGHT_CONFIG_FILE"
156
194
  rm "\${SKILL_INSIGHT_CONFIG_FILE}.bak"
157
195
  fi
158
196
  echo "SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST" >> "$SKILL_INSIGHT_CONFIG_FILE"
159
197
  echo "SKILL_INSIGHT_API_KEY=$SKILL_INSIGHT_API_KEY" >> "$SKILL_INSIGHT_CONFIG_FILE"
198
+ echo "SKILL_INSIGHT_SHOW_TASK_STATS=$FINAL_SHOW_TASK_STATS" >> "$SKILL_INSIGHT_CONFIG_FILE"
160
199
  echo "✅ Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"
161
200
  echo " SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST"
162
201
  echo " SKILL_INSIGHT_API_KEY=********"
163
202
 
164
- # 5. Sync Opencode Skills
165
- if [ "$INSTALL_OPENCODE" = "true" ]; then
166
- echo ""
167
- echo "🚀 Syncing Opencode Skills..."
168
- if command -v npx &> /dev/null; then
169
- npx -y tsx "$HOME/.skill-insight/sync_skills.ts" --agent opencode
170
- else
171
- echo "⚠️ Node.js (npx) not found. Skipping skill sync."
172
- fi
173
- fi
174
-
175
203
  # 6. Install Watcher Dependencies (only if any watcher is selected)
176
204
  if [ "$INSTALL_CLAUDE" = "true" ] || [ "$INSTALL_OPENCLAW" = "true" ]; then
177
205
  echo ""
@@ -298,31 +326,6 @@ if [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then
298
326
  fi
299
327
  fi
300
328
 
301
- # 9. Configure Claude Code Auto-Sync Wrapper
302
- if [ "$INSTALL_CLAUDE" = "true" ]; then
303
- echo ""
304
- echo "🔄 Configuring Claude Code Auto-Sync Wrapper..."
305
- CLAUDE_WRAPPER='
306
- # Skill Insight Claude Alliance
307
- skill-insight-claude() {
308
- if command -v npx &> /dev/null; then
309
- npx -y tsx "$HOME/.skill-insight/sync_skills.ts" --agent claude >/dev/null 2>&1
310
- fi
311
- command claude "$@"
312
- }
313
- alias claude="skill-insight-claude"
314
- '
315
-
316
- for rc_file in "$HOME/.bashrc" "$HOME/.zshrc"; do
317
- if [ -f "$rc_file" ]; then
318
- if ! grep -q "skill-insight-claude()" "$rc_file" 2>/dev/null; then
319
- echo "$CLAUDE_WRAPPER" >> "$rc_file"
320
- echo "✅ Installed Claude wrapper to $rc_file"
321
- fi
322
- fi
323
- done
324
- fi
325
-
326
329
  # 10. Final Summary
327
330
  echo ""
328
331
  echo "🌟 Skill-Insight Telemetry: READY"
@@ -330,6 +333,7 @@ echo "------------------------------------------------"
330
333
  echo "Installed Components:"
331
334
  if [ "$INSTALL_OPENCODE" = "true" ]; then
332
335
  echo " ✅ OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts"
336
+ echo " ✅ OpenCode Command: ~/.config/opencode/commands/si-optimizer.md"
333
337
  fi
334
338
  if [ "$INSTALL_CLAUDE" = "true" ]; then
335
339
  echo " ✅ Claude Watcher: ~/.skill-insight/claude_watcher_client.ts"
@@ -366,6 +370,6 @@ if [ "$INSTALL_OPENCLAW" = "true" ]; then
366
370
  echo " 3. OpenClaw will automatically monitor and upload telemetry"
367
371
  fi
368
372
  echo "------------------------------------------------"
369
- `,new I.NextResponse(l,{headers:{"Content-Type":"text/x-shellscript"}}))}e.s(["GET",()=>g],87745);var C=e.i(87745);let $=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/setup/auto/route",pathname:"/api/setup/auto",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/setup/auto/route.ts",nextConfigOutput:"standalone",userland:C}),{workAsyncStorage:w,workUnitAsyncStorage:f,serverHooks:O}=$;function T(){return(0,i.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:f})}async function m(e,t,i){$.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let I="/api/setup/auto/route";I=I.replace(/\/index$/,"")||"/";let g=await $.prepare(e,t,{srcPage:I,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:C,params:w,nextConfig:f,parsedUrl:O,isDraftMode:T,prerenderManifest:m,routerServerContext:N,isOnDemandRevalidate:A,revalidateOnlyGenerated:H,resolvedPathname:k,clientReferenceManifest:P,serverActionsManifest:R}=g,W=(0,r.normalizeAppPath)(I),D=!!(m.dynamicRoutes[W]||m.routes[k]),F=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,O,!1):t.end("This page could not be found"),null);if(D&&!T){let e=!!m.routes[k],t=m.dynamicRoutes[W];if(t&&!1===t.fallback&&!e){if(f.experimental.adapterPath)return await F();throw new E.NoFallbackError}}let x=null;!D||$.isDev||T||(x="/index"===(x=k)?"/":x);let y=!0===$.isDev||!D,v=D&&!y;R&&P&&(0,o.setManifestsSingleton)({page:I,clientReferenceManifest:P,serverActionsManifest:R});let b=e.method||"GET",U=(0,l.getTracer)(),G=U.getActiveScopeSpan(),K={params:w,prerenderManifest:m,renderOpts:{experimental:{authInterrupts:!!f.experimental.authInterrupts},cacheComponents:!!f.cacheComponents,supportsDynamicResponse:y,incrementalCache:(0,s.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:f.cacheLife,waitUntil:i.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,i,s)=>$.onRequestError(e,t,i,s,N)},sharedContext:{buildId:C}},M=new a.NodeNextRequest(e),q=new a.NodeNextResponse(t),j=c.NextRequestAdapter.fromNodeNextRequest(M,(0,c.signalFromNodeResponse)(t));try{let o=async e=>$.handle(j,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=U.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==h.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=n.get("next.route");if(i){let t=`${b} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":t}),e.updateName(t)}else e.updateName(`${b} ${I}`)}),r=!!(0,s.getRequestMeta)(e,"minimalMode"),a=async s=>{var l,a;let c=async({previousCacheEntry:n})=>{try{if(!r&&A&&H&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let l=await o(s);e.fetchMetrics=K.renderOpts.fetchMetrics;let a=K.renderOpts.pendingWaitUntil;a&&i.waitUntil&&(i.waitUntil(a),a=void 0);let c=K.renderOpts.collectedTags;if(!D)return await (0,d.sendResponse)(M,q,l,K.renderOpts.pendingWaitUntil),null;{let e=await l.blob(),t=(0,S.toNodeOutgoingHttpHeaders)(l.headers);c&&(t[_.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=_.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,i=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=_.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:L.CachedRouteKind.APP_ROUTE,status:l.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:i}}}}catch(t){throw(null==n?void 0:n.isStale)&&await $.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:v,isOnDemandRevalidate:A})},!1,N),t}},h=await $.handleResponse({req:e,nextConfig:f,cacheKey:x,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:m,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:H,responseGenerator:c,waitUntil:i.waitUntil,isMinimalMode:r});if(!D)return null;if((null==h||null==(l=h.value)?void 0:l.kind)!==L.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==h||null==(a=h.value)?void 0:a.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});r||t.setHeader("x-nextjs-cache",A?"REVALIDATED":h.isMiss?"MISS":h.isStale?"STALE":"HIT"),T&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let E=(0,S.fromNodeOutgoingHttpHeaders)(h.value.headers);return r&&D||E.delete(_.NEXT_CACHE_TAGS_HEADER),!h.cacheControl||t.getHeader("Cache-Control")||E.get("Cache-Control")||E.set("Cache-Control",(0,u.getCacheControlHeader)(h.cacheControl)),await (0,d.sendResponse)(M,q,new Response(h.value.body,{headers:E,status:h.value.status||200})),null};G?await a(G):await U.withPropagatedContext(e.headers,()=>U.trace(h.BaseServerSpan.handleRequest,{spanName:`${b} ${I}`,kind:l.SpanKind.SERVER,attributes:{"http.method":b,"http.target":e.url}},a))}catch(t){if(t instanceof E.NoFallbackError||await $.onRequestError(e,t,{routerKind:"App Router",routePath:W,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:v,isOnDemandRevalidate:A})},!1,N),D)throw t;return await (0,d.sendResponse)(M,q,new Response(null,{status:500})),null}}e.s(["handler",()=>m,"patchFetch",()=>T,"routeModule",()=>$,"serverHooks",()=>O,"workAsyncStorage",()=>w,"workUnitAsyncStorage",()=>f],81176)}];
373
+ `,new L.NextResponse(o,{headers:{"Content-Type":"text/x-shellscript"}}))}e.s(["GET",()=>g],87745);var $=e.i(87745);let C=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/setup/auto/route",pathname:"/api/setup/auto",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/setup/auto/route.ts",nextConfigOutput:"standalone",userland:$}),{workAsyncStorage:w,workUnitAsyncStorage:O,serverHooks:T}=C;function f(){return(0,i.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:O})}async function N(e,t,i){C.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let L="/api/setup/auto/route";L=L.replace(/\/index$/,"")||"/";let g=await C.prepare(e,t,{srcPage:L,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:$,params:w,nextConfig:O,parsedUrl:T,isDraftMode:f,prerenderManifest:N,routerServerContext:m,isOnDemandRevalidate:A,revalidateOnlyGenerated:H,resolvedPathname:P,clientReferenceManifest:R,serverActionsManifest:k}=g,W=(0,a.normalizeAppPath)(L),D=!!(N.dynamicRoutes[W]||N.routes[P]),F=async()=>((null==m?void 0:m.render404)?await m.render404(e,t,T,!1):t.end("This page could not be found"),null);if(D&&!f){let e=!!N.routes[P],t=N.dynamicRoutes[W];if(t&&!1===t.fallback&&!e){if(O.experimental.adapterPath)return await F();throw new I.NoFallbackError}}let x=null;!D||C.isDev||f||(x="/index"===(x=P)?"/":x);let y=!0===C.isDev||!D,G=D&&!y;k&&R&&(0,l.setManifestsSingleton)({page:L,clientReferenceManifest:R,serverActionsManifest:k});let v=e.method||"GET",b=(0,o.getTracer)(),K=b.getActiveScopeSpan(),U={params:w,prerenderManifest:N,renderOpts:{experimental:{authInterrupts:!!O.experimental.authInterrupts},cacheComponents:!!O.cacheComponents,supportsDynamicResponse:y,incrementalCache:(0,s.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:O.cacheLife,waitUntil:i.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,i,s)=>C.onRequestError(e,t,i,s,m)},sharedContext:{buildId:$}},M=new r.NodeNextRequest(e),J=new r.NodeNextResponse(t),q=c.NextRequestAdapter.fromNodeNextRequest(M,(0,c.signalFromNodeResponse)(t));try{let l=async e=>C.handle(q,U).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=b.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==h.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=n.get("next.route");if(i){let t=`${v} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":t}),e.updateName(t)}else e.updateName(`${v} ${L}`)}),a=!!(0,s.getRequestMeta)(e,"minimalMode"),r=async s=>{var o,r;let c=async({previousCacheEntry:n})=>{try{if(!a&&A&&H&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await l(s);e.fetchMetrics=U.renderOpts.fetchMetrics;let r=U.renderOpts.pendingWaitUntil;r&&i.waitUntil&&(i.waitUntil(r),r=void 0);let c=U.renderOpts.collectedTags;if(!D)return await (0,S.sendResponse)(M,J,o,U.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,_.toNodeOutgoingHttpHeaders)(o.headers);c&&(t[u.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=u.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,i=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=u.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:E.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:i}}}}catch(t){throw(null==n?void 0:n.isStale)&&await C.onRequestError(e,t,{routerKind:"App Router",routePath:L,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:G,isOnDemandRevalidate:A})},!1,m),t}},h=await C.handleResponse({req:e,nextConfig:O,cacheKey:x,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:H,responseGenerator:c,waitUntil:i.waitUntil,isMinimalMode:a});if(!D)return null;if((null==h||null==(o=h.value)?void 0:o.kind)!==E.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==h||null==(r=h.value)?void 0:r.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});a||t.setHeader("x-nextjs-cache",A?"REVALIDATED":h.isMiss?"MISS":h.isStale?"STALE":"HIT"),f&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let I=(0,_.fromNodeOutgoingHttpHeaders)(h.value.headers);return a&&D||I.delete(u.NEXT_CACHE_TAGS_HEADER),!h.cacheControl||t.getHeader("Cache-Control")||I.get("Cache-Control")||I.set("Cache-Control",(0,d.getCacheControlHeader)(h.cacheControl)),await (0,S.sendResponse)(M,J,new Response(h.value.body,{headers:I,status:h.value.status||200})),null};K?await r(K):await b.withPropagatedContext(e.headers,()=>b.trace(h.BaseServerSpan.handleRequest,{spanName:`${v} ${L}`,kind:o.SpanKind.SERVER,attributes:{"http.method":v,"http.target":e.url}},r))}catch(t){if(t instanceof I.NoFallbackError||await C.onRequestError(e,t,{routerKind:"App Router",routePath:W,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:G,isOnDemandRevalidate:A})},!1,m),D)throw t;return await (0,S.sendResponse)(M,J,new Response(null,{status:500})),null}}e.s(["handler",()=>N,"patchFetch",()=>f,"routeModule",()=>C,"serverHooks",()=>T,"workAsyncStorage",()=>w,"workUnitAsyncStorage",()=>O],81176)}];
370
374
 
371
375
  //# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_c33286ed.js.map