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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/.env.example +1 -0
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  5. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.rsc +4 -4
  15. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  16. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  18. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/standalone/.next/server/app/api/config/create/route.js +4 -3
  22. package/.next/standalone/.next/server/app/api/config/create/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/config/route.js +3 -2
  24. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/data/route.js +5 -4
  26. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/evaluation/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js +5 -4
  29. package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/otel/v1/traces/route.js +3 -2
  31. package/.next/standalone/.next/server/app/api/otel/v1/traces/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/proxy/[taskId]/[...path]/route.js +1 -1
  33. package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js +4 -3
  34. package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/rejudge/route.js +5 -4
  36. package/.next/standalone/.next/server/app/api/rejudge/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/session/route.js +4 -4
  38. package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js +5 -2
  42. package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/skills/automation/import/route.js +5 -2
  44. package/.next/standalone/.next/server/app/api/skills/automation/import/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/skills/logs/route.js +5 -4
  46. package/.next/standalone/.next/server/app/api/skills/logs/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/skills/upload/route.js +5 -2
  50. package/.next/standalone/.next/server/app/api/skills/upload/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/task-stats/route.js +5 -4
  52. package/.next/standalone/.next/server/app/api/task-stats/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/upload/route.js +4 -3
  54. package/.next/standalone/.next/server/app/api/upload/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/details/page/react-loadable-manifest.json +1 -1
  56. package/.next/standalone/.next/server/app/details/page.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/details/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/details.html +1 -1
  59. package/.next/standalone/.next/server/app/details.rsc +5 -5
  60. package/.next/standalone/.next/server/app/details.segments/_full.segment.rsc +5 -5
  61. package/.next/standalone/.next/server/app/details.segments/_head.segment.rsc +1 -1
  62. package/.next/standalone/.next/server/app/details.segments/_index.segment.rsc +3 -3
  63. package/.next/standalone/.next/server/app/details.segments/_tree.segment.rsc +2 -2
  64. package/.next/standalone/.next/server/app/details.segments/details/__PAGE__.segment.rsc +2 -2
  65. package/.next/standalone/.next/server/app/details.segments/details.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/index.html +1 -1
  67. package/.next/standalone/.next/server/app/index.rsc +5 -5
  68. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  69. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
  70. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  71. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  72. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  73. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/login.html +1 -1
  76. package/.next/standalone/.next/server/app/login.rsc +5 -5
  77. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +5 -5
  78. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  79. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +3 -3
  80. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  81. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  82. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  83. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/skills/page.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/skills.html +1 -1
  88. package/.next/standalone/.next/server/app/skills.rsc +5 -5
  89. package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +5 -5
  90. package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  91. package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +3 -3
  92. package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  93. package/.next/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +2 -2
  94. package/.next/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  95. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02ddba88._.js +1 -1
  96. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15dbd1f2._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1c95bcde._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/[root-of-the-server]__23efcd78._.js +3 -0
  99. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a6d443b._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/[root-of-the-server]__53775b48._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5444db55._.js +1 -1
  102. package/.next/standalone/.next/server/chunks/[root-of-the-server]__591248f3._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d8178f6._.js +1 -1
  104. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6261d672._.js +3 -0
  105. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6923eecf._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6fc12878._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8402dfd1._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/[root-of-the-server]__863cf6de._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89404730._.js +1 -1
  110. package/.next/standalone/.next/server/chunks/[root-of-the-server]__98b3de5e._.js +1 -1
  111. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d551ea2._.js +1 -1
  112. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a4d3d791._.js +1 -1
  113. package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa3d72e3._.js +3 -0
  114. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b11acc79._.js +1 -1
  115. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba01f286._.js +1 -1
  116. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd91659b._.js +1 -1
  117. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c200214a._.js +1 -1
  118. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c602c518._.js +3 -0
  119. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d7fab946._.js +1 -1
  120. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8c1808b._.js +1 -1
  121. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d9b9fecc._.js +1 -1
  122. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ddf63a21._.js +1 -1
  123. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e280561d._.js +1 -1
  124. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e550423c._.js +1 -1
  125. package/.next/standalone/.next/server/chunks/_33c0c729._.js +1 -1
  126. package/.next/standalone/.next/server/chunks/_46f10554._.js +3 -0
  127. package/.next/standalone/.next/server/chunks/_4c806e26._.js +1 -1
  128. package/.next/standalone/.next/server/chunks/_cd3d20ca._.js +1 -1
  129. package/.next/standalone/.next/server/chunks/src_98433cb8._.js +77 -15
  130. package/.next/standalone/.next/server/chunks/src_c8971a2d._.js +57 -8
  131. package/.next/standalone/.next/server/chunks/src_lib_119f6c7b._.js +3 -0
  132. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__9ab7cc4a._.js → [root-of-the-server]__082c32a2._.js} +2 -2
  133. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__51073007._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/ssr/_049876f0._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/ssr/_09546b95._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/ssr/_8f5379ab._.js +1 -1
  137. package/.next/standalone/.next/server/chunks/ssr/_c8c8c083._.js +9 -9
  138. package/.next/standalone/.next/server/chunks/ssr/{_b121f1ae._.js → _e2faf4f5._.js} +2 -2
  139. package/.next/standalone/.next/server/chunks/ssr/_fd46f439._.js +2 -2
  140. package/.next/standalone/.next/server/chunks/ssr/src_66a70595._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/ssr/src_app_login_page_tsx_72f58654._.js +1 -1
  142. package/.next/standalone/.next/server/pages/404.html +1 -1
  143. package/.next/standalone/.next/server/pages/500.html +2 -2
  144. package/.next/standalone/.next/static/chunks/{9445b2873a413c58.js → 015467355d3866a3.js} +1 -1
  145. package/.next/standalone/.next/static/chunks/09f192c9b0609ad8.js +1 -0
  146. package/.next/standalone/.next/static/chunks/1945a5514fbc393c.css +1 -0
  147. package/.next/standalone/.next/static/chunks/{07c9f28a269c701a.js → 361e4cf1e9a71ccb.js} +1 -1
  148. package/.next/{static/chunks/5432ce4a494bc74d.js → standalone/.next/static/chunks/60bc50374fd32f20.js} +3 -3
  149. package/.next/standalone/.next/static/chunks/{251551dcdf74a60d.js → 65bac0880a87bff3.js} +1 -1
  150. package/.next/standalone/.next/static/chunks/961f7fa606dd26a8.js +1 -0
  151. package/.next/standalone/.next/static/chunks/bab2ffd4f527acfb.js +1 -0
  152. package/.next/standalone/.next/static/chunks/c513373e5cfedd5b.js +2 -0
  153. package/.next/standalone/.next/static/chunks/ca3017e51e817855.js +1 -0
  154. package/.next/{static/chunks/7e35f4cf2e266022.js → standalone/.next/static/chunks/cb104c3cb4c52833.js} +1 -1
  155. package/.next/standalone/.next/static/chunks/{cd0fde15dc0dfcca.js → f786bb68e17b12b4.js} +1 -1
  156. package/.next/standalone/.next/static/chunks/fc61b990c5ec4ef4.js +109 -0
  157. package/.next/standalone/node_modules/.prisma/client/edge.js +4 -3
  158. package/.next/standalone/node_modules/.prisma/client/index-browser.js +1 -0
  159. package/.next/standalone/node_modules/.prisma/client/index.js +4 -3
  160. package/.next/standalone/node_modules/.prisma/client/package.json +1 -1
  161. package/.next/standalone/node_modules/.prisma/client/schema.prisma +14 -13
  162. package/.next/standalone/node_modules/.prisma/client/wasm.js +1 -0
  163. package/.next/standalone/package.json +1 -1
  164. package/.next/standalone/prisma/schema.prisma +4 -3
  165. package/.next/standalone/scripts/opencode_plugin.ts +135 -45
  166. package/.next/static/chunks/{9445b2873a413c58.js → 015467355d3866a3.js} +1 -1
  167. package/.next/static/chunks/09f192c9b0609ad8.js +1 -0
  168. package/.next/static/chunks/1945a5514fbc393c.css +1 -0
  169. package/.next/static/chunks/{07c9f28a269c701a.js → 361e4cf1e9a71ccb.js} +1 -1
  170. package/.next/{standalone/.next/static/chunks/5432ce4a494bc74d.js → static/chunks/60bc50374fd32f20.js} +3 -3
  171. package/.next/static/chunks/{251551dcdf74a60d.js → 65bac0880a87bff3.js} +1 -1
  172. package/.next/static/chunks/961f7fa606dd26a8.js +1 -0
  173. package/.next/static/chunks/bab2ffd4f527acfb.js +1 -0
  174. package/.next/static/chunks/c513373e5cfedd5b.js +2 -0
  175. package/.next/static/chunks/ca3017e51e817855.js +1 -0
  176. package/.next/{standalone/.next/static/chunks/7e35f4cf2e266022.js → static/chunks/cb104c3cb4c52833.js} +1 -1
  177. package/.next/static/chunks/{cd0fde15dc0dfcca.js → f786bb68e17b12b4.js} +1 -1
  178. package/.next/static/chunks/fc61b990c5ec4ef4.js +109 -0
  179. package/package.json +1 -1
  180. package/prisma/schema.prisma +4 -3
  181. package/scripts/opencode_plugin.ts +135 -45
  182. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1013b265._.js +0 -3
  183. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ce5e3b8._.js +0 -3
  184. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6d8053e2._.js +0 -3
  185. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b835ea7f._.js +0 -3
  186. package/.next/standalone/.next/server/chunks/_41a98bd8._.js +0 -3
  187. package/.next/standalone/.next/server/chunks/src_lib_12408140._.js +0 -3
  188. package/.next/standalone/.next/static/chunks/1e782a49beaf489c.js +0 -1
  189. package/.next/standalone/.next/static/chunks/4ee8dc41c9f15b7b.js +0 -1
  190. package/.next/standalone/.next/static/chunks/67bd1a5de2195779.js +0 -1
  191. package/.next/standalone/.next/static/chunks/94dfb15df65ef720.js +0 -2
  192. package/.next/standalone/.next/static/chunks/9d1c5c3494fa53de.js +0 -109
  193. package/.next/standalone/.next/static/chunks/c6bd2818656b1f20.css +0 -1
  194. package/.next/standalone/.next/static/chunks/dc59a07a8f327b40.js +0 -1
  195. package/.next/static/chunks/1e782a49beaf489c.js +0 -1
  196. package/.next/static/chunks/4ee8dc41c9f15b7b.js +0 -1
  197. package/.next/static/chunks/67bd1a5de2195779.js +0 -1
  198. package/.next/static/chunks/94dfb15df65ef720.js +0 -2
  199. package/.next/static/chunks/9d1c5c3494fa53de.js +0 -109
  200. package/.next/static/chunks/c6bd2818656b1f20.css +0 -1
  201. package/.next/static/chunks/dc59a07a8f327b40.js +0 -1
  202. /package/.next/standalone/.next/static/{0uvhCJooDO_gMNlKOaHwB → iKG72t8Hpebb09DcIpKUJ}/_buildManifest.js +0 -0
  203. /package/.next/standalone/.next/static/{0uvhCJooDO_gMNlKOaHwB → iKG72t8Hpebb09DcIpKUJ}/_clientMiddlewareManifest.json +0 -0
  204. /package/.next/standalone/.next/static/{0uvhCJooDO_gMNlKOaHwB → iKG72t8Hpebb09DcIpKUJ}/_ssgManifest.js +0 -0
  205. /package/.next/static/{0uvhCJooDO_gMNlKOaHwB → iKG72t8Hpebb09DcIpKUJ}/_buildManifest.js +0 -0
  206. /package/.next/static/{0uvhCJooDO_gMNlKOaHwB → iKG72t8Hpebb09DcIpKUJ}/_clientMiddlewareManifest.json +0 -0
  207. /package/.next/static/{0uvhCJooDO_gMNlKOaHwB → iKG72t8Hpebb09DcIpKUJ}/_ssgManifest.js +0 -0
@@ -22,6 +22,9 @@ let uploadedSessions = new Map(); // sessionId -> uploaded message count
22
22
  let sessionGraph = new Map(); // parent_id -> [child_ids]
23
23
  let pendingChildSessions = new Map(); // child_id -> {parent_id, data}
24
24
  let lastDeltaByPartField = new Map();
25
+ let sessionParentById = new Map();
26
+ let sessionAgentById = new Map();
27
+ let subagentTypeBySessionId = new Map();
25
28
 
26
29
  const STORE_PATH = path.join(os.homedir(), '.opencode', 'witty_plugin_session_store.json');
27
30
 
@@ -131,6 +134,27 @@ function loadStore() {
131
134
  }
132
135
  }
133
136
  }
137
+
138
+ if (data.sessionParentById) {
139
+ const diskParents = new Map(data.sessionParentById);
140
+ for (const [sid, pid] of diskParents.entries()) {
141
+ if (!sessionParentById.has(sid) && pid) sessionParentById.set(sid, pid);
142
+ }
143
+ }
144
+
145
+ if (data.sessionAgentById) {
146
+ const diskAgents = new Map(data.sessionAgentById);
147
+ for (const [sid, agentName] of diskAgents.entries()) {
148
+ if (!sessionAgentById.has(sid) && agentName) sessionAgentById.set(sid, agentName);
149
+ }
150
+ }
151
+
152
+ if (data.subagentTypeBySessionId) {
153
+ const diskTypes = new Map(data.subagentTypeBySessionId);
154
+ for (const [sid, t] of diskTypes.entries()) {
155
+ if (!subagentTypeBySessionId.has(sid) && t) subagentTypeBySessionId.set(sid, t);
156
+ }
157
+ }
134
158
 
135
159
  logDebug(`Loaded store (merged): ${sessionStore.size} messages`);
136
160
  }
@@ -156,6 +180,9 @@ function saveStore() {
156
180
  uploadedSessions: Array.from(uploadedSessions.entries()),
157
181
  sessionGraph: Array.from(sessionGraph.entries()),
158
182
  pendingChildSessions: Array.from(pendingChildSessions.entries()),
183
+ sessionParentById: Array.from(sessionParentById.entries()),
184
+ sessionAgentById: Array.from(sessionAgentById.entries()),
185
+ subagentTypeBySessionId: Array.from(subagentTypeBySessionId.entries()),
159
186
  timestamp: new Date().toISOString()
160
187
  };
161
188
  fs.writeFileSync(STORE_PATH, JSON.stringify(data, null, 2), 'utf8');
@@ -290,7 +317,8 @@ function collectSessionMessages(sessionId) {
290
317
  timeInfo: entry.info.time,
291
318
  partBasedDuration: partBasedDuration,
292
319
  modelID: entry.info.modelID,
293
- model: entry.info.model
320
+ model: entry.info.model,
321
+ agent: entry.info.agent
294
322
  });
295
323
  }
296
324
  }
@@ -315,32 +343,53 @@ function cleanupOrphanedSessions() {
315
343
  }
316
344
  }
317
345
 
318
- function collectSessionWithChildren(sessionId) {
319
- const messages = collectSessionMessages(sessionId);
320
- const childSessionIds = sessionGraph.get(sessionId) || [];
321
-
322
- logDebug(`Collecting ${childSessionIds.length} child sessions for ${sessionId}`);
323
-
324
- for (const childId of childSessionIds) {
325
- const childData = pendingChildSessions.get(childId);
346
+ function findRootSessionId(sessionId) {
347
+ let cur = sessionId;
348
+ const visited = new Set();
349
+ while (cur && cur.startsWith('ses') && !visited.has(cur)) {
350
+ visited.add(cur);
351
+ const p = sessionParentById.get(cur);
352
+ if (!p || !p.startsWith('ses')) break;
353
+ cur = p;
354
+ }
355
+ return cur;
356
+ }
357
+
358
+ function collectSessionWithDescendants(rootSessionId) {
359
+ const messages = collectSessionMessages(rootSessionId);
360
+ const mergedSessionIds = [];
361
+ const visited = new Set();
362
+ const stack = Array.isArray(sessionGraph.get(rootSessionId)) ? [...sessionGraph.get(rootSessionId)] : [];
363
+
364
+ while (stack.length > 0) {
365
+ const sid = stack.pop();
366
+ if (!sid || visited.has(sid)) continue;
367
+ visited.add(sid);
368
+
369
+ const childData = pendingChildSessions.get(sid);
326
370
  if (childData && childData.messages) {
327
- logDebug(`Merging ${childData.messages.length} messages from child ${childId}`);
328
-
329
- // Convert roles in child sessions
371
+ logDebug(`Merging ${childData.messages.length} messages from child ${sid}`);
372
+ const name =
373
+ sessionAgentById.get(sid) ||
374
+ subagentTypeBySessionId.get(sid) ||
375
+ null;
330
376
  const subagentMessages = childData.messages.map(msg => {
331
377
  if (msg.role === 'assistant') {
332
- return { ...msg, role: 'subagent' };
378
+ return { ...msg, role: 'subagent', subagent_name: name || msg.agent, subagent_session_id: sid };
333
379
  } else if (msg.role === 'user') {
334
380
  return { ...msg, role: 'opencode' };
335
381
  }
336
382
  return msg;
337
383
  });
338
-
339
384
  messages.push(...subagentMessages);
385
+ mergedSessionIds.push(sid);
340
386
  }
387
+
388
+ const next = sessionGraph.get(sid) || [];
389
+ for (const x of next) stack.push(x);
341
390
  }
342
-
343
- return { messages, childSessionIds };
391
+
392
+ return { messages, mergedSessionIds };
344
393
  }
345
394
 
346
395
  export default async function WittySkillInsightPlugin(input) {
@@ -404,6 +453,22 @@ export default async function WittySkillInsightPlugin(input) {
404
453
  let sessionId = event.session_id || event.properties?.sessionID || event.payload?.session_id;
405
454
  let eagerFlush = false;
406
455
 
456
+ if (event.type === 'session.created' || event.type === 'session.updated') {
457
+ const sessionInfo = event.properties?.info || event.payload?.info;
458
+ if (sessionInfo && sessionInfo.id) {
459
+ const sid = sessionInfo.id;
460
+ const pid = sessionInfo.parentID || sessionInfo.parentId || sessionInfo.parent_id;
461
+ if (pid && pid.startsWith('ses')) {
462
+ sessionParentById.set(sid, pid);
463
+ if (!sessionGraph.has(pid)) sessionGraph.set(pid, []);
464
+ if (!sessionGraph.get(pid).includes(sid)) {
465
+ sessionGraph.get(pid).push(sid);
466
+ logDebug(`Session created: ${sid} is child of ${pid}`);
467
+ }
468
+ }
469
+ }
470
+ }
471
+
407
472
  // 1. Accumulate Message Metadata
408
473
  if (event.type === 'message.created' || event.type === 'message.updated') {
409
474
  let info = (event.payload && event.payload.message) || (event.properties && event.properties.info);
@@ -424,6 +489,12 @@ export default async function WittySkillInsightPlugin(input) {
424
489
  if (info.tool_calls || info.toolCalls) entry.info.tool_calls = info.tool_calls || info.toolCalls;
425
490
  if (info.function_call || info.functionCall) entry.info.function_call = info.function_call || info.functionCall;
426
491
 
492
+ if (entry.info?.sessionID && entry.info?.agent) {
493
+ if (!sessionAgentById.has(entry.info.sessionID)) {
494
+ sessionAgentById.set(entry.info.sessionID, entry.info.agent);
495
+ }
496
+ }
497
+
427
498
  if (entry.info?.role === 'assistant' && (entry.info.finish || entry.info.time?.completed != null)) {
428
499
  eagerFlush = true;
429
500
  }
@@ -522,21 +593,30 @@ export default async function WittySkillInsightPlugin(input) {
522
593
  if (tp.tool === 'task' && tp.state.output) {
523
594
  try {
524
595
  const taskOutput = tp.state.output;
525
- const taskIdMatch = taskOutput.match(/task_id:\s*(\w+)/);
526
- if (taskIdMatch && taskIdMatch[1]) {
527
- const subagentSessionId = taskIdMatch[1];
528
- if (subagentSessionId.startsWith('ses')) {
529
- // Establish parent-child relationship
530
- const parentSessionId = entry.info.sessionID || sessionId;
531
- if (parentSessionId) {
532
- if (!sessionGraph.has(parentSessionId)) {
533
- sessionGraph.set(parentSessionId, []);
534
- }
535
- if (!sessionGraph.get(parentSessionId).includes(subagentSessionId)) {
536
- sessionGraph.get(parentSessionId).push(subagentSessionId);
537
- logDebug(`Task detected: ${subagentSessionId} is child of ${parentSessionId}`);
538
- }
596
+ let subagentSessionId = null;
597
+ const m1 = taskOutput.match(/<task_metadata>[\s\S]*?session_id:\s*(ses_[A-Za-z0-9]+)[\s\S]*?<\/task_metadata>/i);
598
+ const m2 = taskOutput.match(/session_id:\s*(ses_[A-Za-z0-9]+)/i);
599
+ const m3 = taskOutput.match(/task\(\s*session_id\s*=\s*\"(ses_[A-Za-z0-9]+)\"/i);
600
+ const m4 = taskOutput.match(/task_id:\s*(\w+)/i);
601
+ const candidate = (m1 && m1[1]) || (m2 && m2[1]) || (m3 && m3[1]) || (m4 && m4[1]) || null;
602
+ if (candidate && String(candidate).startsWith('ses')) subagentSessionId = String(candidate);
603
+
604
+ if (subagentSessionId) {
605
+ const parentSessionId = entry.info.sessionID || sessionId;
606
+ if (parentSessionId) {
607
+ if (!sessionGraph.has(parentSessionId)) sessionGraph.set(parentSessionId, []);
608
+ if (!sessionGraph.get(parentSessionId).includes(subagentSessionId)) {
609
+ sessionGraph.get(parentSessionId).push(subagentSessionId);
610
+ logDebug(`Task detected: ${subagentSessionId} is child of ${parentSessionId}`);
539
611
  }
612
+ if (!sessionParentById.has(subagentSessionId)) {
613
+ sessionParentById.set(subagentSessionId, parentSessionId);
614
+ }
615
+ }
616
+
617
+ const t = tp.state?.input?.subagent_type;
618
+ if (t && !subagentTypeBySessionId.has(subagentSessionId)) {
619
+ subagentTypeBySessionId.set(subagentSessionId, t);
540
620
  }
541
621
  }
542
622
  } catch (e) {
@@ -622,15 +702,18 @@ export default async function WittySkillInsightPlugin(input) {
622
702
  // from within the opencode interactive interface).
623
703
  loadStore();
624
704
 
625
- // Only treat a session as "child" when it was detected via Task tool
626
- // (i.e. registered in sessionGraph). Do NOT rely on event.parentID because
627
- // nested `opencode run ...` can also set parentID and we want both sessions uploaded.
628
705
  let foundParentId = null;
629
- for (const [potentialParent, childIds] of sessionGraph.entries()) {
630
- if (childIds.includes(sessionId)) {
631
- foundParentId = potentialParent;
632
- logDebug(`Found parent ${foundParentId} for for child ${sessionId} from sessionGraph`);
633
- break;
706
+ const directParent = sessionParentById.get(sessionId);
707
+ if (directParent && Array.isArray(sessionGraph.get(directParent)) && sessionGraph.get(directParent).includes(sessionId)) {
708
+ foundParentId = directParent;
709
+ logDebug(`Found parent ${foundParentId} for for child ${sessionId} from sessionParentById`);
710
+ } else {
711
+ for (const [potentialParent, childIds] of sessionGraph.entries()) {
712
+ if (childIds.includes(sessionId)) {
713
+ foundParentId = potentialParent;
714
+ logDebug(`Found parent ${foundParentId} for for child ${sessionId} from sessionGraph`);
715
+ break;
716
+ }
634
717
  }
635
718
  }
636
719
 
@@ -655,14 +738,16 @@ export default async function WittySkillInsightPlugin(input) {
655
738
  });
656
739
  logDebug(`Stored ${childMessages.length} messages for child session ${sessionId}`);
657
740
  }
658
-
659
- return; // Don't upload child session separately
741
+
742
+ const rootId = findRootSessionId(foundParentId) || foundParentId;
743
+ if (!rootId || rootId === sessionId) return;
744
+ sessionId = rootId;
660
745
  }
661
746
 
662
747
  logDebug(`Session Idle: ${sessionId}. Messages in store: ${sessionStore.size}`);
663
748
 
664
749
  // This is a parent session, collect all messages including children
665
- const { messages, childSessionIds } = collectSessionWithChildren(sessionId);
750
+ const { messages, mergedSessionIds } = collectSessionWithDescendants(sessionId);
666
751
 
667
752
  if (messages.length === 0) {
668
753
  logDebug(`No messages found for session ${sessionId}, skipping upload.`);
@@ -670,11 +755,10 @@ export default async function WittySkillInsightPlugin(input) {
670
755
  }
671
756
 
672
757
  // Cleanup child session data after successful upload
673
- for (const childId of childSessionIds) {
758
+ for (const childId of mergedSessionIds) {
674
759
  pendingChildSessions.delete(childId);
675
760
  logDebug(`Cleaned up child session ${childId}`);
676
761
  }
677
- sessionGraph.delete(sessionId);
678
762
 
679
763
  // Cleanup orphaned child sessions (older than 1 hour)
680
764
  cleanupOrphanedSessions();
@@ -704,11 +788,14 @@ export default async function WittySkillInsightPlugin(input) {
704
788
 
705
789
  for (const m of messages) {
706
790
  if (m.role === 'user' && !firstUserQuery) firstUserQuery = m.content;
791
+ const isCompletion = m.role === 'assistant' || m.role === 'subagent';
707
792
  if (m.role === 'assistant') {
708
- llmCallCount++;
709
793
  lastAssistantContent = m.content;
710
794
  if (m.model) model = m.model;
711
795
  else if (m.modelID) model = m.modelID;
796
+ }
797
+ if (isCompletion) {
798
+ llmCallCount++;
712
799
 
713
800
  // Token logic
714
801
  const u = m.usage;
@@ -792,7 +879,10 @@ export default async function WittySkillInsightPlugin(input) {
792
879
  function_call: m.function_call || m.functionCall,
793
880
  usage: m.usage,
794
881
  timestamp: m.timestamp,
795
- timeInfo: m.timeInfo
882
+ timeInfo: m.timeInfo,
883
+ agent: m.agent,
884
+ subagent_name: m.subagent_name,
885
+ subagent_session_id: m.subagent_session_id
796
886
  })),
797
887
  timestamp: new Date().toISOString()
798
888
  };
@@ -1,3 +0,0 @@
1
- module.exports=[46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},66680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},98043,e=>e.a(async(t,r)=>{try{let l;var a,n=e.i(97289),i=e.i(63021),s=e.i(86414),o=t([s]);[s]=o.then?(await o)():o,(0,n.config)();let d=e.g.prisma||new i.PrismaClient,u=(0,s.getDatabaseAdapter)(),c=process.env.DB_HOST?(l=(a=u).getClient())instanceof i.PrismaClient?l:{user:{findUnique:async e=>e.where?.apiKey?a.findUserByApiKey(e.where.apiKey):e.where?.username?a.findUserByUsername(e.where.username):null,findFirst:async e=>e.where?.username?a.findUserByUsername(e.where.username):null},skill:{findFirst:async e=>{let t=e.where?.name,r=e.where?.OR?.[0]?.user??e.where?.OR?.[1]?.user;return a.findSkill(t,r)},findMany:async e=>a.findSkills(e.where||{}),findUnique:async e=>a.findSkill(e.where?.name,e.where?.user),delete:async e=>(console.warn("[OpenGaussAdapter] skill.delete not fully implemented"),null)},skillVersion:{findFirst:async e=>e.where?.skillId?a.findLatestSkillVersion(e.where.skillId):null},config:{findMany:async e=>a.findConfigs(e.where||{})},session:{findUnique:async e=>e.where?.taskId?a.findSessionByTaskId(e.where.taskId):null,update:async e=>e.where?.id?a.updateSession(e.where.id,e.data):null,upsert:async e=>{let t=e.where?.taskId;return t?a.upsertSession(t,e.create,e.update):null}},execution:{findUnique:async e=>e.where?.id?a.findExecutionById(e.where.id):null,upsert:async e=>a.upsertExecution(e),findMany:async e=>a.findExecutions(e.where,e.orderBy)}}:d;e.s(["db",0,u,"prisma",0,c]),r()}catch(e){r(e)}},!1),79832,e=>e.a(async(t,r)=>{try{var a=e.i(98043),n=t([a]);async function i(e,t){if(t)return{username:t,apiKey:null};let r=e.headers.get("x-witty-api-key");if(r)return{username:await s(r),apiKey:r};let a=new URL(e.url).searchParams.get("apiKey");return a?{username:await s(a),apiKey:a}:{username:null,apiKey:null}}async function s(e){try{let t=await a.db.findUserByApiKey(e);return t?.username||null}catch(e){return console.error("[Auth] Failed to lookup user by API Key:",e),null}}async function o(e,t){let r=await a.db.findSkillById(e);return r?"public"!==r.visibility&&r.user&&(!t||r.user!==t)&&t?{allowed:!1,skill:r}:{allowed:!0,skill:r}:{allowed:!1,skill:null}}[a]=n.then?(await n)():n,e.s(["canAccessSkill",()=>o,"resolveUser",()=>i]),r()}catch(e){r(e)}},!1),23412,e=>e.a(async(t,r)=>{try{var a=e.i(79832),n=e.i(98043),i=e.i(22734),s=e.i(89171),o=e.i(14747),l=t([a,n]);async function d(e){try{let{path:t,user:r}=await e.json();if(!t)return s.NextResponse.json({error:"Missing path"},{status:400});let l=(await (0,a.resolveUser)(e,r||void 0)).username;if(!i.default.existsSync(t))return s.NextResponse.json({error:"Path does not exist"},{status:404});let d=o.default.join(t,"SKILL.md");if(!i.default.existsSync(d))return s.NextResponse.json({error:"SKILL.md not found in path"},{status:400});let u=i.default.readFileSync(d,"utf8"),c=o.default.basename(t),p="Imported via automation",h=u.match(/^---\s*([\s\S]*?)\s*---/);if(h&&h[1]){let e=h[1],t=e.match(/^name:\s*(.+)$/m),r=e.match(/^description:\s*(.+)$/m);t&&t[1]&&(c=t[1].trim()),r&&r[1]&&(p=r[1].trim())}let f=await n.db.findSkill(c,l),y=0;if(f){let e=await n.db.findLatestSkillVersion(f.id);y=e?e.version+1:0}else f=await n.db.createSkill({name:c,user:l,description:p,visibility:"private",activeVersion:0,isUploaded:!1}),y=0;let m=o.default.join(process.cwd(),"data","storage","skills",f.id,`v${y}`);i.default.existsSync(m)||i.default.mkdirSync(m,{recursive:!0});let x=[];return!function e(t,r,a,n){for(let s of(i.default.existsSync(r)||i.default.mkdirSync(r,{recursive:!0}),i.default.readdirSync(t,{withFileTypes:!0}))){let l=o.default.join(t,s.name),d=o.default.join(r,s.name);s.isDirectory()?e(l,d,a,n):(i.default.copyFileSync(l,d),a.push(o.default.relative(n,d)))}}(t,m,x,m),await n.db.createSkillVersion({skillId:f.id,version:y,content:u,assetPath:`data/storage/skills/${f.id}/v${y}`,files:JSON.stringify(x),changeLog:`Auto-imported version ${y}`}),await n.db.updateSkill(f.id,{activeVersion:y}),s.NextResponse.json({success:!0,skill:{id:f.id,name:f.name},version:y,status:0===y?"created":"updated"})}catch(e){return console.error("Auto Import Error:",e),s.NextResponse.json({error:e.message},{status:500})}}[a,n]=l.then?(await l)():l,e.s(["POST",()=>d]),r()}catch(e){r(e)}},!1),14219,e=>e.a(async(t,r)=>{try{var a=e.i(47909),n=e.i(74017),i=e.i(60476),s=e.i(59756),o=e.i(61916),l=e.i(74677),d=e.i(69741),u=e.i(16795),c=e.i(87718),p=e.i(95169),h=e.i(47587),f=e.i(66012),y=e.i(70101),m=e.i(26937),x=e.i(10372),w=e.i(93695);e.i(52474);var v=e.i(220),R=e.i(23412),g=t([R]);[R]=g.then?(await g)():g;let E=new a.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/skills/automation/import/route",pathname:"/api/skills/automation/import",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/skills/automation/import/route.ts",nextConfigOutput:"standalone",userland:R}),{workAsyncStorage:b,workUnitAsyncStorage:C,serverHooks:A}=E;function k(){return(0,i.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:C})}async function S(e,t,r){E.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/skills/automation/import/route";a=a.replace(/\/index$/,"")||"/";let i=await E.prepare(e,t,{srcPage:a,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:R,params:g,nextConfig:k,parsedUrl:S,isDraftMode:b,prerenderManifest:C,routerServerContext:A,isOnDemandRevalidate:P,revalidateOnlyGenerated:U,resolvedPathname:q,clientReferenceManifest:I,serverActionsManifest:N}=i,T=(0,d.normalizeAppPath)(a),j=!!(C.dynamicRoutes[T]||C.routes[q]),O=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,S,!1):t.end("This page could not be found"),null);if(j&&!b){let e=!!C.routes[q],t=C.dynamicRoutes[T];if(t&&!1===t.fallback&&!e){if(k.experimental.adapterPath)return await O();throw new w.NoFallbackError}}let _=null;!j||E.isDev||b||(_=q,_="/index"===_?"/":_);let K=!0===E.isDev||!j,H=j&&!K;N&&I&&(0,l.setManifestsSingleton)({page:a,clientReferenceManifest:I,serverActionsManifest:N});let D=e.method||"GET",M=(0,o.getTracer)(),F=M.getActiveScopeSpan(),$={params:g,prerenderManifest:C,renderOpts:{experimental:{authInterrupts:!!k.experimental.authInterrupts},cacheComponents:!!k.cacheComponents,supportsDynamicResponse:K,incrementalCache:(0,s.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:k.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>E.onRequestError(e,t,a,n,A)},sharedContext:{buildId:R}},B=new u.NodeNextRequest(e),L=new u.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(B,(0,c.signalFromNodeResponse)(t));try{let i=async e=>E.handle(V,$).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${D} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${D} ${a}`)}),l=!!(0,s.getRequestMeta)(e,"minimalMode"),d=async s=>{var o,d;let u=async({previousCacheEntry:n})=>{try{if(!l&&P&&U&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(s);e.fetchMetrics=$.renderOpts.fetchMetrics;let o=$.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let d=$.renderOpts.collectedTags;if(!j)return await (0,f.sendResponse)(B,L,a,$.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,y.toNodeOutgoingHttpHeaders)(a.headers);d&&(t[x.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==$.renderOpts.collectedRevalidate&&!($.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&$.renderOpts.collectedRevalidate,n=void 0===$.renderOpts.collectedExpire||$.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:$.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:a,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,A),t}},c=await E.handleResponse({req:e,nextConfig:k,cacheKey:_,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:U,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:l});if(!j)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(d=c.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",P?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,y.fromNodeOutgoingHttpHeaders)(c.value.headers);return l&&j||p.delete(x.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,m.getCacheControlHeader)(c.cacheControl)),await (0,f.sendResponse)(B,L,new Response(c.value.body,{headers:p,status:c.value.status||200})),null};F?await d(F):await M.withPropagatedContext(e.headers,()=>M.trace(p.BaseServerSpan.handleRequest,{spanName:`${D} ${a}`,kind:o.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},d))}catch(t){if(t instanceof w.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:T,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:P})},!1,A),j)throw t;return await (0,f.sendResponse)(B,L,new Response(null,{status:500})),null}}e.s(["handler",()=>S,"patchFetch",()=>k,"routeModule",()=>E,"serverHooks",()=>A,"workAsyncStorage",()=>b,"workUnitAsyncStorage",()=>C]),r()}catch(e){r(e)}},!1)];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__1013b265._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[77800,e=>{"use strict";function t(){let e=[],t=1;for(;;){let r=process.env[`DEFAULT_MODEL_${t}_NAME`],n=process.env[`DEFAULT_MODEL_${t}_PROVIDER`],s=process.env[`DEFAULT_MODEL_${t}_API_KEY`];if(!r||!n||!s)break;e.push({id:`default_${t}`,name:r,provider:n,apiKey:s,baseUrl:process.env[`DEFAULT_MODEL_${t}_BASE_URL`],model:process.env[`DEFAULT_MODEL_${t}_MODEL`]}),t++}return e}e.s(["loadDefaultModelConfigs",()=>t])},22965,e=>e.a(async(t,r)=>{try{var n=e.i(98043),s=e.i(77800),a=t([n]);async function i(e){let t=await o(e);return t&&t.activeConfigId&&t.configs.find(e=>e.id===t.activeConfigId)||null}async function o(e){if(!e)return{activeConfigId:null,configs:[]};let t=(0,s.loadDefaultModelConfigs)(),r=[],a=null;try{let t=await n.db.findUserSettings(e);if(t?.settingsJson){let e=JSON.parse(t.settingsJson);r=e.configs.filter(e=>!e.id.startsWith("default_")),a=e.activeConfigId}}catch(e){console.error("Failed to load user settings:",e)}let i=[...t,...r];return a&&i.find(e=>e.id===a)||(a=t.length>0?t[0].id:null),{activeConfigId:a,configs:i}}async function l(e,t){let r=t.configs.filter(e=>!e.id.startsWith("default_")),s=JSON.stringify({activeConfigId:t.activeConfigId,configs:r});await n.db.upsertUserSettings(e,s)}[n]=a.then?(await a)():a,e.s(["getActiveConfig",()=>i,"getUserSettings",()=>o,"saveUserSettings",()=>l]),r()}catch(e){r(e)}},!1),46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},66680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},98043,e=>e.a(async(t,r)=>{try{let l;var n,s=e.i(97289),a=e.i(63021),i=e.i(86414),o=t([i]);[i]=o.then?(await o)():o,(0,s.config)();let d=e.g.prisma||new a.PrismaClient,u=(0,i.getDatabaseAdapter)(),c=process.env.DB_HOST?(l=(n=u).getClient())instanceof a.PrismaClient?l:{user:{findUnique:async e=>e.where?.apiKey?n.findUserByApiKey(e.where.apiKey):e.where?.username?n.findUserByUsername(e.where.username):null,findFirst:async e=>e.where?.username?n.findUserByUsername(e.where.username):null},skill:{findFirst:async e=>{let t=e.where?.name,r=e.where?.OR?.[0]?.user??e.where?.OR?.[1]?.user;return n.findSkill(t,r)},findMany:async e=>n.findSkills(e.where||{}),findUnique:async e=>n.findSkill(e.where?.name,e.where?.user),delete:async e=>(console.warn("[OpenGaussAdapter] skill.delete not fully implemented"),null)},skillVersion:{findFirst:async e=>e.where?.skillId?n.findLatestSkillVersion(e.where.skillId):null},config:{findMany:async e=>n.findConfigs(e.where||{})},session:{findUnique:async e=>e.where?.taskId?n.findSessionByTaskId(e.where.taskId):null,update:async e=>e.where?.id?n.updateSession(e.where.id,e.data):null,upsert:async e=>{let t=e.where?.taskId;return t?n.upsertSession(t,e.create,e.update):null}},execution:{findUnique:async e=>e.where?.id?n.findExecutionById(e.where.id):null,upsert:async e=>n.upsertExecution(e),findMany:async e=>n.findExecutions(e.where,e.orderBy)}}:d;e.s(["db",0,u,"prisma",0,c]),r()}catch(e){r(e)}},!1),81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},87769,(e,t,r)=>{t.exports=e.x("node:events",()=>require("node:events"))},57764,(e,t,r)=>{t.exports=e.x("node:url",()=>require("node:url"))},12714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},50247,e=>e.a(async(t,r)=>{try{var n=e.i(85874),s=e.i(98043),a=e.i(89171),i=t([n,s]);async function o(e){let{searchParams:t}=new URL(e.url),r=t.get("taskId");if(!r)return a.NextResponse.json({error:"Missing taskId"},{status:400});try{let e=await s.db.findSessionByTaskId(r);if(!e)return a.NextResponse.json({error:"Session not found"},{status:404});let t=e.interactions?JSON.parse(e.interactions):[],i=e.query;if(!i&&t.length>0)try{let a=await (0,n.analyzeSession)(t,e.user);a.query&&(i=a.query,s.db.updateSession(r,{query:i}).catch(console.error))}catch(e){console.warn("Failed to extract query on the fly",e)}return a.NextResponse.json({taskId:e.taskId,label:e.label,query:i,user:e.user,startTime:e.startTime.getTime(),interactions:t})}catch(e){return console.error("Error reading session from DB:",e),a.NextResponse.json({error:"Failed to read session"},{status:500})}}[n,s]=i.then?(await i)():i,e.s(["GET",()=>o]),r()}catch(e){r(e)}},!1),36659,e=>e.a(async(t,r)=>{try{var n=e.i(47909),s=e.i(74017),a=e.i(60476),i=e.i(59756),o=e.i(61916),l=e.i(74677),d=e.i(69741),u=e.i(16795),c=e.i(87718),p=e.i(95169),f=e.i(47587),h=e.i(66012),x=e.i(70101),y=e.i(26937),g=e.i(10372),w=e.i(93695);e.i(52474);var v=e.i(220),R=e.i(50247),m=t([R]);[R]=m.then?(await m)():m;let A=new n.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/session/route",pathname:"/api/session",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/session/route.ts",nextConfigOutput:"standalone",userland:R}),{workAsyncStorage:_,workUnitAsyncStorage:k,serverHooks:q}=A;function E(){return(0,a.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:k})}async function C(e,t,r){A.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/session/route";n=n.replace(/\/index$/,"")||"/";let a=await A.prepare(e,t,{srcPage:n,multiZoneDraftMode:!1});if(!a)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:R,params:m,nextConfig:E,parsedUrl:C,isDraftMode:_,prerenderManifest:k,routerServerContext:q,isOnDemandRevalidate:S,revalidateOnlyGenerated:b,resolvedPathname:U,clientReferenceManifest:T,serverActionsManifest:I}=a,O=(0,d.normalizeAppPath)(n),N=!!(k.dynamicRoutes[O]||k.routes[U]),D=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,C,!1):t.end("This page could not be found"),null);if(N&&!_){let e=!!k.routes[U],t=k.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(E.experimental.adapterPath)return await D();throw new w.NoFallbackError}}let P=null;!N||A.isDev||_||(P=U,P="/index"===P?"/":P);let M=!0===A.isDev||!N,j=N&&!M;I&&T&&(0,l.setManifestsSingleton)({page:n,clientReferenceManifest:T,serverActionsManifest:I});let F=e.method||"GET",L=(0,o.getTracer)(),H=L.getActiveScopeSpan(),B={params:m,prerenderManifest:k,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:M,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:E.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,s)=>A.onRequestError(e,t,n,s,q)},sharedContext:{buildId:R}},$=new u.NodeNextRequest(e),K=new u.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest($,(0,c.signalFromNodeResponse)(t));try{let a=async e=>A.handle(V,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=L.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${F} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t)}else e.updateName(`${F} ${n}`)}),l=!!(0,i.getRequestMeta)(e,"minimalMode"),d=async i=>{var o,d;let u=async({previousCacheEntry:s})=>{try{if(!l&&S&&b&&!s)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await a(i);e.fetchMetrics=B.renderOpts.fetchMetrics;let o=B.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let d=B.renderOpts.collectedTags;if(!N)return await (0,h.sendResponse)($,K,n,B.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,x.toNodeOutgoingHttpHeaders)(n.headers);d&&(t[g.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,s=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==s?void 0:s.isStale)&&await A.onRequestError(e,t,{routerKind:"App Router",routePath:n,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:S})},!1,q),t}},c=await A.handleResponse({req:e,nextConfig:E,cacheKey:P,routeKind:s.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:b,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:l});if(!N)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(d=c.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",S?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,x.fromNodeOutgoingHttpHeaders)(c.value.headers);return l&&N||p.delete(g.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(c.cacheControl)),await (0,h.sendResponse)($,K,new Response(c.value.body,{headers:p,status:c.value.status||200})),null};H?await d(H):await L.withPropagatedContext(e.headers,()=>L.trace(p.BaseServerSpan.handleRequest,{spanName:`${F} ${n}`,kind:o.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},d))}catch(t){if(t instanceof w.NoFallbackError||await A.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:S})},!1,q),N)throw t;return await (0,h.sendResponse)($,K,new Response(null,{status:500})),null}}e.s(["handler",()=>C,"patchFetch",()=>E,"routeModule",()=>A,"serverHooks",()=>q,"workAsyncStorage",()=>_,"workUnitAsyncStorage",()=>k]),r()}catch(e){r(e)}},!1)];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__1ce5e3b8._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},66680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},98043,e=>e.a(async(t,r)=>{try{let o;var a,n=e.i(97289),s=e.i(63021),i=e.i(86414),l=t([i]);[i]=l.then?(await l)():l,(0,n.config)();let d=e.g.prisma||new s.PrismaClient,u=(0,i.getDatabaseAdapter)(),p=process.env.DB_HOST?(o=(a=u).getClient())instanceof s.PrismaClient?o:{user:{findUnique:async e=>e.where?.apiKey?a.findUserByApiKey(e.where.apiKey):e.where?.username?a.findUserByUsername(e.where.username):null,findFirst:async e=>e.where?.username?a.findUserByUsername(e.where.username):null},skill:{findFirst:async e=>{let t=e.where?.name,r=e.where?.OR?.[0]?.user??e.where?.OR?.[1]?.user;return a.findSkill(t,r)},findMany:async e=>a.findSkills(e.where||{}),findUnique:async e=>a.findSkill(e.where?.name,e.where?.user),delete:async e=>(console.warn("[OpenGaussAdapter] skill.delete not fully implemented"),null)},skillVersion:{findFirst:async e=>e.where?.skillId?a.findLatestSkillVersion(e.where.skillId):null},config:{findMany:async e=>a.findConfigs(e.where||{})},session:{findUnique:async e=>e.where?.taskId?a.findSessionByTaskId(e.where.taskId):null,update:async e=>e.where?.id?a.updateSession(e.where.id,e.data):null,upsert:async e=>{let t=e.where?.taskId;return t?a.upsertSession(t,e.create,e.update):null}},execution:{findUnique:async e=>e.where?.id?a.findExecutionById(e.where.id):null,upsert:async e=>a.upsertExecution(e),findMany:async e=>a.findExecutions(e.where,e.orderBy)}}:d;e.s(["db",0,u,"prisma",0,p]),r()}catch(e){r(e)}},!1),79832,e=>e.a(async(t,r)=>{try{var a=e.i(98043),n=t([a]);async function s(e,t){if(t)return{username:t,apiKey:null};let r=e.headers.get("x-witty-api-key");if(r)return{username:await i(r),apiKey:r};let a=new URL(e.url).searchParams.get("apiKey");return a?{username:await i(a),apiKey:a}:{username:null,apiKey:null}}async function i(e){try{let t=await a.db.findUserByApiKey(e);return t?.username||null}catch(e){return console.error("[Auth] Failed to lookup user by API Key:",e),null}}async function l(e,t){let r=await a.db.findSkillById(e);return r?"public"!==r.visibility&&r.user&&(!t||r.user!==t)&&t?{allowed:!1,skill:r}:{allowed:!0,skill:r}:{allowed:!1,skill:null}}[a]=n.then?(await n)():n,e.s(["canAccessSkill",()=>l,"resolveUser",()=>s]),r()}catch(e){r(e)}},!1),54632,e=>e.a(async(t,r)=>{try{var a=e.i(79832),n=e.i(98043),s=e.i(22734),i=e.i(89171),l=e.i(14747),o=t([a,n]);function d(e){s.default.existsSync(e)||s.default.mkdirSync(e,{recursive:!0})}async function u(e){try{let t=await e.formData(),r=t.getAll("files"),o=t.getAll("paths");if(0===r.length)return i.NextResponse.json({error:"No files uploaded"},{status:400});let u=null,p=-1;for(let e=0;e<r.length;e++)if(o[e].endsWith("SKILL.md")){u=r[e],p=e;break}if(!u)return i.NextResponse.json({error:"SKILL.md is missing"},{status:400});let c=await u.text(),h=o[p],f=h.includes("/")?h.split("/")[0]:"uploaded-skill",y="Imported via upload",x=c.match(/^---\s*([\s\S]*?)\s*---/);if(x&&x[1]){let e=x[1],t=e.match(/^name:\s*(.+)$/m),r=e.match(/^description:\s*(.+)$/m);t&&t[1]&&(f=t[1].trim()),r&&r[1]&&(y=r[1].trim())}let m=null,w=t.get("targetSkillId"),v=t.get("user"),g=(await (0,a.resolveUser)(e,v||void 0)).username;if(w){if(!(m=await n.db.findSkillById(w)))return i.NextResponse.json({error:"Target skill not found"},{status:404});if(g&&m.user&&m.user!==g)return i.NextResponse.json({error:"Unauthorized to update this skill"},{status:403});if(f!==m.name)return i.NextResponse.json({error:`Folder name mismatch! Expected: "${m.name}", Found: "${f}". Version updates must use the exact same folder name.`},{status:400})}else{if(m=await n.db.findSkill(f,g||null))return i.NextResponse.json({error:`Skill '${f}' 已经存在,请使用 版本管理 -> 上传新版本 功能更新。`},{status:400});m=await n.db.createSkill({name:f,description:y,visibility:"private",activeVersion:0,user:g||null})}let R=await n.db.findLatestSkillVersion(m.id),k=R?R.version+1:0,E=l.default.join(process.cwd(),"data","storage","skills",m.id,`v${k}`);d(E);let S=[];for(let e=0;e<r.length;e++){let t=r[e],a=o[e],n=a.split("/"),i=n.length>1?n.slice(1).join("/"):a;if(!i)continue;let u=l.default.join(E,i);d(l.default.dirname(u));let p=Buffer.from(await t.arrayBuffer());s.default.writeFileSync(u,p),S.push(i)}let b=await n.db.createSkillVersion({skillId:m.id,version:k,content:c,assetPath:`data/storage/skills/${m.id}/v${k}`,files:JSON.stringify(S),changeLog:`Uploaded version ${k}`});return await n.db.updateSkill(m.id,{activeVersion:k}),console.log(`[Upload] Set activeVersion to ${k} for skill ${m.name}`),i.NextResponse.json({success:!0,skill:m,version:b})}catch(e){return console.error("Upload Error:",e),i.NextResponse.json({error:e.message},{status:500})}}[a,n]=o.then?(await o)():o,e.s(["POST",()=>u]),r()}catch(e){r(e)}},!1),13917,e=>e.a(async(t,r)=>{try{var a=e.i(47909),n=e.i(74017),s=e.i(60476),i=e.i(59756),l=e.i(61916),o=e.i(74677),d=e.i(69741),u=e.i(16795),p=e.i(87718),c=e.i(95169),h=e.i(47587),f=e.i(66012),y=e.i(70101),x=e.i(26937),m=e.i(10372),w=e.i(93695);e.i(52474);var v=e.i(220),g=e.i(54632),R=t([g]);[g]=R.then?(await R)():R;let S=new a.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/skills/upload/route",pathname:"/api/skills/upload",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/skills/upload/route.ts",nextConfigOutput:"standalone",userland:g}),{workAsyncStorage:b,workUnitAsyncStorage:C,serverHooks:A}=S;function k(){return(0,s.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:C})}async function E(e,t,r){S.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/skills/upload/route";a=a.replace(/\/index$/,"")||"/";let s=await S.prepare(e,t,{srcPage:a,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:g,params:R,nextConfig:k,parsedUrl:E,isDraftMode:b,prerenderManifest:C,routerServerContext:A,isOnDemandRevalidate:N,revalidateOnlyGenerated:U,resolvedPathname:I,clientReferenceManifest:q,serverActionsManifest:P}=s,j=(0,d.normalizeAppPath)(a),T=!!(C.dynamicRoutes[j]||C.routes[I]),O=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,E,!1):t.end("This page could not be found"),null);if(T&&!b){let e=!!C.routes[I],t=C.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(k.experimental.adapterPath)return await O();throw new w.NoFallbackError}}let _=null;!T||S.isDev||b||(_=I,_="/index"===_?"/":_);let K=!0===S.isDev||!T,$=T&&!K;P&&q&&(0,o.setManifestsSingleton)({page:a,clientReferenceManifest:q,serverActionsManifest:P});let H=e.method||"GET",B=(0,l.getTracer)(),D=B.getActiveScopeSpan(),F={params:R,prerenderManifest:C,renderOpts:{experimental:{authInterrupts:!!k.experimental.authInterrupts},cacheComponents:!!k.cacheComponents,supportsDynamicResponse:K,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:k.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>S.onRequestError(e,t,a,n,A)},sharedContext:{buildId:g}},M=new u.NodeNextRequest(e),L=new u.NodeNextResponse(t),V=p.NextRequestAdapter.fromNodeNextRequest(M,(0,p.signalFromNodeResponse)(t));try{let s=async e=>S.handle(V,F).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=B.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${H} ${a}`)}),o=!!(0,i.getRequestMeta)(e,"minimalMode"),d=async i=>{var l,d;let u=async({previousCacheEntry:n})=>{try{if(!o&&N&&U&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await s(i);e.fetchMetrics=F.renderOpts.fetchMetrics;let l=F.renderOpts.pendingWaitUntil;l&&r.waitUntil&&(r.waitUntil(l),l=void 0);let d=F.renderOpts.collectedTags;if(!T)return await (0,f.sendResponse)(M,L,a,F.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,y.toNodeOutgoingHttpHeaders)(a.headers);d&&(t[m.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==F.renderOpts.collectedRevalidate&&!(F.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&F.renderOpts.collectedRevalidate,n=void 0===F.renderOpts.collectedExpire||F.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:F.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await S.onRequestError(e,t,{routerKind:"App Router",routePath:a,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:N})},!1,A),t}},p=await S.handleResponse({req:e,nextConfig:k,cacheKey:_,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:U,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:o});if(!T)return null;if((null==p||null==(l=p.value)?void 0:l.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(d=p.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",N?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,y.fromNodeOutgoingHttpHeaders)(p.value.headers);return o&&T||c.delete(m.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,x.getCacheControlHeader)(p.cacheControl)),await (0,f.sendResponse)(M,L,new Response(p.value.body,{headers:c,status:p.value.status||200})),null};D?await d(D):await B.withPropagatedContext(e.headers,()=>B.trace(c.BaseServerSpan.handleRequest,{spanName:`${H} ${a}`,kind:l.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},d))}catch(t){if(t instanceof w.NoFallbackError||await S.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:N})},!1,A),T)throw t;return await (0,f.sendResponse)(M,L,new Response(null,{status:500})),null}}e.s(["handler",()=>E,"patchFetch",()=>k,"routeModule",()=>S,"serverHooks",()=>A,"workAsyncStorage",()=>b,"workUnitAsyncStorage",()=>C]),r()}catch(e){r(e)}},!1)];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__6d8053e2._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},54799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},66680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},98043,e=>e.a(async(t,r)=>{try{let l;var n,a=e.i(97289),s=e.i(63021),i=e.i(86414),o=t([i]);[i]=o.then?(await o)():o,(0,a.config)();let d=e.g.prisma||new s.PrismaClient,u=(0,i.getDatabaseAdapter)(),c=process.env.DB_HOST?(l=(n=u).getClient())instanceof s.PrismaClient?l:{user:{findUnique:async e=>e.where?.apiKey?n.findUserByApiKey(e.where.apiKey):e.where?.username?n.findUserByUsername(e.where.username):null,findFirst:async e=>e.where?.username?n.findUserByUsername(e.where.username):null},skill:{findFirst:async e=>{let t=e.where?.name,r=e.where?.OR?.[0]?.user??e.where?.OR?.[1]?.user;return n.findSkill(t,r)},findMany:async e=>n.findSkills(e.where||{}),findUnique:async e=>n.findSkill(e.where?.name,e.where?.user),delete:async e=>(console.warn("[OpenGaussAdapter] skill.delete not fully implemented"),null)},skillVersion:{findFirst:async e=>e.where?.skillId?n.findLatestSkillVersion(e.where.skillId):null},config:{findMany:async e=>n.findConfigs(e.where||{})},session:{findUnique:async e=>e.where?.taskId?n.findSessionByTaskId(e.where.taskId):null,update:async e=>e.where?.id?n.updateSession(e.where.id,e.data):null,upsert:async e=>{let t=e.where?.taskId;return t?n.upsertSession(t,e.create,e.update):null}},execution:{findUnique:async e=>e.where?.id?n.findExecutionById(e.where.id):null,upsert:async e=>n.upsertExecution(e),findMany:async e=>n.findExecutions(e.where,e.orderBy)}}:d;e.s(["db",0,u,"prisma",0,c]),r()}catch(e){r(e)}},!1),79832,e=>e.a(async(t,r)=>{try{var n=e.i(98043),a=t([n]);async function s(e,t){if(t)return{username:t,apiKey:null};let r=e.headers.get("x-witty-api-key");if(r)return{username:await i(r),apiKey:r};let n=new URL(e.url).searchParams.get("apiKey");return n?{username:await i(n),apiKey:n}:{username:null,apiKey:null}}async function i(e){try{let t=await n.db.findUserByApiKey(e);return t?.username||null}catch(e){return console.error("[Auth] Failed to lookup user by API Key:",e),null}}async function o(e,t){let r=await n.db.findSkillById(e);return r?"public"!==r.visibility&&r.user&&(!t||r.user!==t)&&t?{allowed:!1,skill:r}:{allowed:!0,skill:r}:{allowed:!1,skill:null}}[n]=a.then?(await a)():a,e.s(["canAccessSkill",()=>o,"resolveUser",()=>s]),r()}catch(e){r(e)}},!1),53187,e=>e.a(async(t,r)=>{try{var n=e.i(79832),a=e.i(98043),s=e.i(89171),i=t([n,a]);async function o(e,{params:t}){try{let{id:r}=await t,{content:i,changeLog:o,user:l}=await e.json();if(!i)return s.NextResponse.json({error:"Content is required"},{status:400});let{username:d}=await (0,n.resolveUser)(e,l),{allowed:u,skill:c}=await (0,n.canAccessSkill)(r,d);if(!c)return s.NextResponse.json({error:"Skill not found"},{status:404});if(!u)return s.NextResponse.json({error:"Unauthorized: You do not own this skill"},{status:403});let p=await a.db.findLatestSkillVersion(r),h=(p?.version||0)+1,y=p?.assetPath||"",f=p?.files||"[]",x=await a.db.createSkillVersion({skillId:r,version:h,content:i,assetPath:y,files:f,changeLog:o||`Updated v${h} via Editor`});return s.NextResponse.json(x)}catch(e){return console.error("Create Version Error:",e),s.NextResponse.json({error:e.message},{status:500})}}async function l(e,{params:t}){try{let{id:e}=await t,r=await a.db.findSkillById(e);if(!r)return s.NextResponse.json({error:"Skill not found"},{status:404});let n=(r.versions||[]).map(e=>({id:e.id,version:e.version,changeLog:e.changeLog,createdAt:e.createdAt}));return s.NextResponse.json(n)}catch(e){return s.NextResponse.json({error:e.message},{status:500})}}[n,a]=i.then?(await i)():i,e.s(["GET",()=>l,"POST",()=>o]),r()}catch(e){r(e)}},!1),34854,e=>e.a(async(t,r)=>{try{var n=e.i(47909),a=e.i(74017),s=e.i(60476),i=e.i(59756),o=e.i(61916),l=e.i(74677),d=e.i(69741),u=e.i(16795),c=e.i(87718),p=e.i(95169),h=e.i(47587),y=e.i(66012),f=e.i(70101),x=e.i(26937),w=e.i(10372),v=e.i(93695);e.i(52474);var R=e.i(220),m=e.i(53187),g=t([m]);[m]=g.then?(await g)():g;let C=new n.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/skills/[id]/versions/route",pathname:"/api/skills/[id]/versions",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/skills/[id]/versions/route.ts",nextConfigOutput:"standalone",userland:m}),{workAsyncStorage:A,workUnitAsyncStorage:b,serverHooks:S}=C;function k(){return(0,s.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:b})}async function E(e,t,r){C.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/skills/[id]/versions/route";n=n.replace(/\/index$/,"")||"/";let s=await C.prepare(e,t,{srcPage:n,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:m,params:g,nextConfig:k,parsedUrl:E,isDraftMode:A,prerenderManifest:b,routerServerContext:S,isOnDemandRevalidate:N,revalidateOnlyGenerated:U,resolvedPathname:q,clientReferenceManifest:P,serverActionsManifest:T}=s,j=(0,d.normalizeAppPath)(n),I=!!(b.dynamicRoutes[j]||b.routes[q]),O=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,E,!1):t.end("This page could not be found"),null);if(I&&!A){let e=!!b.routes[q],t=b.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(k.experimental.adapterPath)return await O();throw new v.NoFallbackError}}let _=null;!I||C.isDev||A||(_=q,_="/index"===_?"/":_);let H=!0===C.isDev||!I,K=I&&!H;T&&P&&(0,l.setManifestsSingleton)({page:n,clientReferenceManifest:P,serverActionsManifest:T});let B=e.method||"GET",D=(0,o.getTracer)(),M=D.getActiveScopeSpan(),F={params:g,prerenderManifest:b,renderOpts:{experimental:{authInterrupts:!!k.experimental.authInterrupts},cacheComponents:!!k.cacheComponents,supportsDynamicResponse:H,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:k.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>C.onRequestError(e,t,n,a,S)},sharedContext:{buildId:m}},L=new u.NodeNextRequest(e),$=new u.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(L,(0,c.signalFromNodeResponse)(t));try{let s=async e=>C.handle(V,F).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=D.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${B} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${B} ${n}`)}),l=!!(0,i.getRequestMeta)(e,"minimalMode"),d=async i=>{var o,d;let u=async({previousCacheEntry:a})=>{try{if(!l&&N&&U&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await s(i);e.fetchMetrics=F.renderOpts.fetchMetrics;let o=F.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let d=F.renderOpts.collectedTags;if(!I)return await (0,y.sendResponse)(L,$,n,F.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(n.headers);d&&(t[w.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==F.renderOpts.collectedRevalidate&&!(F.renderOpts.collectedRevalidate>=w.INFINITE_CACHE)&&F.renderOpts.collectedRevalidate,a=void 0===F.renderOpts.collectedExpire||F.renderOpts.collectedExpire>=w.INFINITE_CACHE?void 0:F.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==a?void 0:a.isStale)&&await C.onRequestError(e,t,{routerKind:"App Router",routePath:n,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,S),t}},c=await C.handleResponse({req:e,nextConfig:k,cacheKey:_,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:U,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:l});if(!I)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(d=c.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",N?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,f.fromNodeOutgoingHttpHeaders)(c.value.headers);return l&&I||p.delete(w.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,x.getCacheControlHeader)(c.cacheControl)),await (0,y.sendResponse)(L,$,new Response(c.value.body,{headers:p,status:c.value.status||200})),null};M?await d(M):await D.withPropagatedContext(e.headers,()=>D.trace(p.BaseServerSpan.handleRequest,{spanName:`${B} ${n}`,kind:o.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},d))}catch(t){if(t instanceof v.NoFallbackError||await C.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:N})},!1,S),I)throw t;return await (0,y.sendResponse)(L,$,new Response(null,{status:500})),null}}e.s(["handler",()=>E,"patchFetch",()=>k,"routeModule",()=>C,"serverHooks",()=>S,"workAsyncStorage",()=>A,"workUnitAsyncStorage",()=>b]),r()}catch(e){r(e)}},!1)];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__b835ea7f._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[35932,e=>e.a(async(t,s)=>{try{var o=e.i(85765),n=e.i(85874),l=e.i(50374),r=e.i(98043),a=e.i(89171),i=t([o,n,r]);async function c(e){try{let t,s,i=await e.text();try{t=JSON.parse(i)}catch(e){return console.error("JSON Parse Error:",e),console.error("Raw Body:",i),a.NextResponse.json({error:"Invalid JSON"},{status:400})}let c=e.headers.get("x-witty-api-key");if(c){let e=await r.db.findUserByApiKey(c);e?(s=e.username,t.user=s,console.log(`[Upload-API] User resolved via API Key: ${s}`)):console.warn("[Upload-API] API Key provided but no matching user found in DB")}if(!s&&t.user&&(s=t.user,console.log(`[Upload-API] Using user from request body: ${s}`)),!s)try{let e=r.db.getClient();if("query"in e){let o=await e.query('SELECT * FROM "UserSettings" WHERE "settingsJson" != \'{"activeConfigId":null,"configs":[]}\' LIMIT 1');o.rows[0]&&(s=o.rows[0].user,t.user=s,console.log(`[Upload-API] Fallback: Using user with active settings: ${s}`))}else{let o=await e.userSettings.findFirst({where:{settingsJson:{not:'{"activeConfigId":null,"configs":[]}'}}});o&&(s=o.user,t.user=s,console.log(`[Upload-API] Fallback: Using user with active settings: ${s}`))}}catch(e){console.warn("[Upload-API] Fallback user lookup failed:",e)}console.log(`[Upload-API] 📥 Received data from ${t.framework||"unknown"}: task_id=${t.task_id}, query=${t.query?.substring(0,50)}..., user=${s||"(none)"}`);let u=t.interactions||[],p=(0,n.normalizeInteractions)(u);p.forEach((e,t)=>{let s=!!e.responseMessage?.tool_calls?.length,o=e.requestMessages?.filter(e=>"assistant"===e.role&&e.tool_calls?.length).length||0;console.log(`[Upload-Debug] Turn ${t}: ReqMsgs=${e.requestMessages?.length}, RespRole=${e.responseMessage?.role}, RespTool=${s}, AssistantReqTools=${o}`)});let g=[];"opencode"===t.framework?g=(0,l.extractSkillsWithVersionsFromOpencodeSession)(p):"claudecode"===t.framework||"claude"===t.framework?g=(0,l.extractSkillsWithVersionsFromClaudeSession)(p):"openclaw"===t.framework&&(g=(0,l.extractSkillsWithVersionsFromOpenClawSession)(p)),console.log(`[Upload-API] Extracted skills: ${JSON.stringify(g)}`);let v=g.map(e=>e.name),f=g[0]?.version??t.skill_version;if(console.log(`[Upload-API] Initial quickSkillVersion: ${f} (from tool call: ${g[0]?.version}, from data: ${t.skill_version})`),null==f){let e=v.length>0?v[0]:t.skill;if(console.log(`[Upload-API] No version from tool call, querying database for skill: ${e}`),e)try{let t=await r.db.findSkill(e,s||null);if(console.log(`[Upload-API] Skill record found: ${t?t.name:"null"}, activeVersion: ${t?.activeVersion}, versions: ${t?.versions?.map(e=>e.version).join(",")}`),t&&t.versions&&t.versions.length>0){let s=t.activeVersion||0,o=t.versions.find(e=>e.version===s);o?(f=o.version,console.log(`[Upload-API] Quick save: using active version ${f} for skill ${e}`)):(f=t.versions[0].version,console.log(`[Upload-API] Quick save: using fallback version ${f} for skill ${e}`))}else console.log("[Upload-API] Skill record not found or no versions available")}catch(t){console.warn(`[Upload-API] Failed to fetch skill version for ${e}:`,t)}}console.log(`[Upload-API] Final quickSkillVersion: ${f}`);let k={...t,skip_evaluation:!0,skills:v.length>0?v:t.skills,invokedSkills:g.length>0?g:t.invokedSkills,skill:v.length>0?v[0]:t.skill,skill_version:f};try{await (0,o.saveExecutionRecord)(k),v.length>0&&console.log(`[Upload-API] Quick save with skills: ${JSON.stringify(g)}`)}catch(e){console.warn("[Upload-API] Quick initial save failed:",e)}return d(t,s,p,u).catch(e=>{console.error("[Upload-API] Async analysis failed:",e)}),a.NextResponse.json({success:!0,message:"Upload received and analyzing in background",upload_id:t.task_id},{status:200})}catch(e){return console.error("[Upload-API] ❌ Error:",e),a.NextResponse.json({error:"Failed to process data"},{status:500})}}async function d(e,t,s,a){let i;console.log(`[Upload-Async] Starting background analysis for ${e.task_id}`);let c=await (0,n.analyzeSession)(s,t);!e.query&&c.query&&(e.query=c.query),!e.final_result&&c.final_result&&(e.final_result=c.final_result);let d=[];"opencode"===e.framework?d=(0,l.extractSkillsWithVersionsFromOpencodeSession)(s):"claudecode"===e.framework||"claude"===e.framework?d=(0,l.extractSkillsWithVersionsFromClaudeSession)(s):"openclaw"===e.framework&&(d=(0,l.extractSkillsWithVersionsFromOpenClawSession)(s));let u=d.map(e=>e.name);if(0===u.length&&c.skill&&(u.push(c.skill),d.push({name:c.skill,version:null})),u.length>0?(e.skills=u,e.invokedSkills=d,e.skill||(e.skill=u[0]),console.log(`[Upload-Async] Extracted skills: ${JSON.stringify(d)}`),console.log(`[Upload-Async] Current data.skill_version: ${e.skill_version}`),d[0]?.version!=null&&(e.skill_version=d[0].version,console.log(`[Upload-Async] Updated skill_version from tool call: ${e.skill_version}`)),console.log(`[Upload-Async] 🛠️ Extracted Skills: ${JSON.stringify(d)} for task_id=${e.task_id}`)):console.log(`[Upload-Async] ⚠️ No skills extracted for task_id=${e.task_id}`),e.query&&(e.query=e.query.trim().replace(/^['"]+|['"]+$/g,"").trim()),e.skill&&(e.skill=e.skill.trim().replace(/^['"]+|['"]+$/g,"").trim()),!e.query)return void console.log(`[Upload-Async] Empty query after analysis, aborting task_id=${e.task_id}`);let p=e.skill;if(console.log(`[Upload-Async] Primary skill name: ${p}, current skill_version: ${e.skill_version}`),p){let s=await r.db.findSkill(p,t||null);if(console.log(`[Upload-Async] Skill record found: ${s?s.name:"null"}, activeVersion: ${s?.activeVersion}, versions: ${s?.versions?.map(e=>e.version).join(",")}`),s&&s.versions&&s.versions.length>0){let t=s.activeVersion||0,o=s.versions.find(e=>e.version===t);o&&o.content?(i=o.content,e.skill_version=o.version,console.log(`[Upload-Async] Using active version ${o.version} for skill ${p}`)):(i=s.versions[0].content,e.skill_version=s.versions[0].version,console.log(`[Upload-Async] Using fallback version ${s.versions[0].version} for skill ${p}`))}}if(e.query&&e.final_result){let s,l={skill_definition:i};try{(s=(await (0,o.readConfig)(t)).find(t=>t.query&&e.query&&t.query.trim()===e.query.trim()))&&(l.root_causes=s.root_causes,l.key_actions=s.key_actions,l.standard_answer_example=s.standard_answer)}catch(e){console.warn("Config load error",e)}if(s){let s=await (0,n.judgeAnswer)(e.query,l,e.final_result,t);e.is_answer_correct=s.is_correct,e.answer_score=s.score,e.judgment_reason=s.reason||"Judged by Evaluation Model"}else console.log(`[Upload-Async] No config match for query: "${e.query.substring(0,20)}...". Skipping judgment to preserve potential existing score.`)}let g=await (0,n.analyzeFailures)(a,p,i,e.answer_score,String(e.judgment_reason||""),e.query,e.final_result,t);e.failures=g.failures,e.skill_issues=g.skill_issues,e.skip_evaluation=!1,e.force_judgment=!0,await (0,o.saveExecutionRecord)(e),console.log(`[Upload-Async] ✅ Completed async analysis: task_id=${e.task_id}, score=${e.answer_score}, failures=${(e.failures||[]).length}`)}[o,n,r]=i.then?(await i)():i,e.s(["POST",()=>c]),s()}catch(e){s(e)}},!1),55739,e=>e.a(async(t,s)=>{try{var o=e.i(47909),n=e.i(74017),l=e.i(60476),r=e.i(59756),a=e.i(61916),i=e.i(74677),c=e.i(69741),d=e.i(16795),u=e.i(87718),p=e.i(95169),g=e.i(47587),v=e.i(66012),f=e.i(70101),k=e.i(26937),h=e.i(10372),y=e.i(93695);e.i(52474);var m=e.i(220),w=e.i(35932),_=t([w]);[w]=_.then?(await _)():_;let U=new o.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/upload/route",pathname:"/api/upload",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/upload/route.ts",nextConfigOutput:"standalone",userland:w}),{workAsyncStorage:$,workUnitAsyncStorage:S,serverHooks:E}=U;function R(){return(0,l.patchFetch)({workAsyncStorage:$,workUnitAsyncStorage:S})}async function A(e,t,s){U.isDev&&(0,r.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let o="/api/upload/route";o=o.replace(/\/index$/,"")||"/";let l=await U.prepare(e,t,{srcPage:o,multiZoneDraftMode:!1});if(!l)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,params:_,nextConfig:R,parsedUrl:A,isDraftMode:$,prerenderManifest:S,routerServerContext:E,isOnDemandRevalidate:x,revalidateOnlyGenerated:P,resolvedPathname:C,clientReferenceManifest:q,serverActionsManifest:I}=l,b=(0,c.normalizeAppPath)(o),N=!!(S.dynamicRoutes[b]||S.routes[C]),O=async()=>((null==E?void 0:E.render404)?await E.render404(e,t,A,!1):t.end("This page could not be found"),null);if(N&&!$){let e=!!S.routes[C],t=S.dynamicRoutes[b];if(t&&!1===t.fallback&&!e){if(R.experimental.adapterPath)return await O();throw new y.NoFallbackError}}let T=null;!N||U.isDev||$||(T=C,T="/index"===T?"/":T);let F=!0===U.isDev||!N,M=N&&!F;I&&q&&(0,i.setManifestsSingleton)({page:o,clientReferenceManifest:q,serverActionsManifest:I});let H=e.method||"GET",j=(0,a.getTracer)(),V=j.getActiveScopeSpan(),D={params:_,prerenderManifest:S,renderOpts:{experimental:{authInterrupts:!!R.experimental.authInterrupts},cacheComponents:!!R.cacheComponents,supportsDynamicResponse:F,incrementalCache:(0,r.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:R.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,s,o,n)=>U.onRequestError(e,t,o,n,E)},sharedContext:{buildId:w}},K=new d.NodeNextRequest(e),J=new d.NodeNextResponse(t),W=u.NextRequestAdapter.fromNodeNextRequest(K,(0,u.signalFromNodeResponse)(t));try{let l=async e=>U.handle(W,D).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let s=j.getRootSpanAttributes();if(!s)return;if(s.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${s.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=s.get("next.route");if(n){let t=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${H} ${o}`)}),i=!!(0,r.getRequestMeta)(e,"minimalMode"),c=async r=>{var a,c;let d=async({previousCacheEntry:n})=>{try{if(!i&&x&&P&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await l(r);e.fetchMetrics=D.renderOpts.fetchMetrics;let a=D.renderOpts.pendingWaitUntil;a&&s.waitUntil&&(s.waitUntil(a),a=void 0);let c=D.renderOpts.collectedTags;if(!N)return await (0,v.sendResponse)(K,J,o,D.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(o.headers);c&&(t[h.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let s=void 0!==D.renderOpts.collectedRevalidate&&!(D.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&D.renderOpts.collectedRevalidate,n=void 0===D.renderOpts.collectedExpire||D.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:D.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:s,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await U.onRequestError(e,t,{routerKind:"App Router",routePath:o,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:x})},!1,E),t}},u=await U.handleResponse({req:e,nextConfig:R,cacheKey:T,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:x,revalidateOnlyGenerated:P,responseGenerator:d,waitUntil:s.waitUntil,isMinimalMode:i});if(!N)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(c=u.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",x?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),$&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return i&&N||p.delete(h.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,k.getCacheControlHeader)(u.cacheControl)),await (0,v.sendResponse)(K,J,new Response(u.value.body,{headers:p,status:u.value.status||200})),null};V?await c(V):await j.withPropagatedContext(e.headers,()=>j.trace(p.BaseServerSpan.handleRequest,{spanName:`${H} ${o}`,kind:a.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},c))}catch(t){if(t instanceof y.NoFallbackError||await U.onRequestError(e,t,{routerKind:"App Router",routePath:b,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:x})},!1,E),N)throw t;return await (0,v.sendResponse)(K,J,new Response(null,{status:500})),null}}e.s(["handler",()=>A,"patchFetch",()=>R,"routeModule",()=>U,"serverHooks",()=>E,"workAsyncStorage",()=>$,"workUnitAsyncStorage",()=>S]),s()}catch(e){s(e)}},!1)];
2
-
3
- //# sourceMappingURL=_41a98bd8._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[11811,e=>{"use strict";var t=e.i(22734),l=e.i(14747);let i={"claude-opus-4-6":{inputTokenPrice:5,outputTokenPrice:25,cacheReadInputTokenPrice:.5,cacheCreationInputTokenPrice:6.25},"claude-sonnet-4-6":{inputTokenPrice:3,outputTokenPrice:15,cacheReadInputTokenPrice:.3,cacheCreationInputTokenPrice:3.75},"deepseek-chat":{inputTokenPrice:.28,outputTokenPrice:.42,cacheReadInputTokenPrice:.028},"deepseek-reasoner":{inputTokenPrice:.28,outputTokenPrice:.42,cacheReadInputTokenPrice:.028},"minimax-m2.5-free":{inputTokenPrice:0,outputTokenPrice:0}},n={"claude-opus-4-6":1e6,"claude-sonnet-4-6":1e6,"deepseek-chat":128e3,"deepseek-reasoner":128e3,"minimax-m2.5-free":196608},o=l.default.join(process.cwd(),"custom-models.json"),s={},r={},a=-1;function u(){try{let e=t.default.statSync(o).mtimeMs;if(e===a)return{pricing:s,contextWindows:r};let l=JSON.parse(t.default.readFileSync(o,"utf-8")),i={},n={};for(let[e,t]of Object.entries(l))e.startsWith("_")||("number"==typeof t.inputTokenPrice&&"number"==typeof t.outputTokenPrice&&(i[e]=t),"number"==typeof t.contextWindow&&(n[e]=t.contextWindow));s=i,r=n,a=e}catch(e){e instanceof SyntaxError&&console.warn("[model-config] Failed to parse custom-models.json:",e.message),s={},r={},a=-1}return{pricing:s,contextWindows:r}}function c(e,t){if(t[e])return t[e];for(let[l,i]of Object.entries(t).sort((e,t)=>t[0].length-e[0].length))if(e.startsWith(l))return i;return null}function d(e){let{pricing:t}=u(),l=c(e,t);if(l)return{pricing:l,source:"custom"};let n=c(e,i);return n?{pricing:n,source:"default"}:null}function k(e){let{contextWindows:t}=u(),l=c(e,t);if(null!=l)return{contextWindow:l,source:"custom"};let i=c(e,n);return null!=i?{contextWindow:i,source:"default"}:null}function _(e,t,l,i,n){let o=l.cacheReadInputTokenPrice??.1*l.inputTokenPrice,s=l.cacheCreationInputTokenPrice??1.25*l.inputTokenPrice;return(e*l.inputTokenPrice+(i??0)*o+(n??0)*s+t*l.outputTokenPrice)/1e6}e.s(["DEFAULT_CACHE_CREATION_RATIO",0,1.25,"DEFAULT_CACHE_READ_RATIO",0,.1,"calculateCost",()=>_,"getModelContextWindow",()=>k,"getModelPricing",()=>d])},85765,e=>e.a(async(t,l)=>{try{var i=e.i(22734),n=e.i(14747),o=e.i(85874),s=e.i(98043),r=e.i(11811),a=t([o,s]);function u(e){let t=e.trim(),l=[['"','"'],["'","'"],["“","”"],["‘","’"],["`","`"],["《","》"],["(",")"],["(",")"],["【","】"],["[","]"],["{","}"],["<",">"]];for(let e=0;e<6;e++){let e=t;for(let[e,i]of(t=t.trim(),l))t.startsWith(e)&&t.endsWith(i)&&t.length>=e.length+i.length+1&&(t=t.slice(e.length,-i.length));if(t===e)break}return t=(t=(t=t.replace(/[\s"'“”‘’`。.]/g,"")).replace(/^[\s.,,。!?!?;;::、·…]+|[\s.,,。!?!?;;::、·…]+$/g,"")).replace(/\s+/g," ").trim()}function c(e,t){if(!t)return;let l=u(t);if(!l)return;let i=e.filter(e=>e.query&&e.query.trim()).filter(e=>{let t=u(e.query);return!!t&&l.endsWith(t)});if(0!==i.length)return i.reduce((e,t)=>{let l=u(e.query).length;return u(t.query).length>l?t:e})}[o,s]=a.then?(await a)():a;let p=n.default.join(process.cwd(),"data"),f=n.default.join(p,"evaluation_result.json");async function d(e,t){let l={};if(e&&(l.OR=[{user:e},{user:null}]),!t?.query&&t?.taskId){let e=await s.db.findExecutionById(t.taskId);e&&e.query?(l.query=e.query,t.framework&&(l.framework=t.framework)):l.id=t.taskId}else t?.query&&(l.query=t.query,t.framework&&(l.framework=t.framework));t?.skill!==void 0&&(l.skill=t.skill),t?.skillVersion!==void 0&&(l.skillVersion=t.skillVersion);let i=await s.db.findExecutions(l,{timestamp:"desc"}),n=new Map;for(let e of i){let t=e.taskId||null;t&&(n.has(t)||n.set(t,[]),n.get(t).push(e))}let o=new Set;for(let[e,t]of n.entries()){if(1===t.length){o.add(t[0].id);continue}let l=t.find(t=>t.id===e);if(l){o.add(l.id);continue}let i=t.slice().sort((e,t)=>{let l=new Date(e.timestamp).getTime(),i=new Date(t.timestamp).getTime();if(i!==l)return i-l;let n=String(e.finalResult||"").length;return String(t.finalResult||"").length-n});o.add(i[0].id)}let a=i.filter(e=>!e.taskId||o.has(e.id));for(let[e,t]of n.entries())if(!(t.length<=1))for(let e of t)o.has(e.id)||s.db.deleteExecution(e.id).catch(()=>{});return a.map(e=>{let t=e.model??null,l=t?(0,r.getModelPricing)(t):null,i=l?.pricing??null,n=t&&null!=e.maxSingleCallTokens?(0,r.getModelContextWindow)(t):null;return{...e,upload_id:e.id,task_id:e.taskId||void 0,query:e.query||void 0,framework:e.framework||void 0,tokens:e.tokens||void 0,cost:i&&null!=e.inputTokens&&null!=e.outputTokens?(0,r.calculateCost)(e.inputTokens,e.outputTokens,i,e.cacheReadInputTokens??void 0,e.cacheCreationInputTokens??void 0):void 0,latency:e.latency||void 0,timestamp:e.timestamp?.toISOString?.()||e.timestamp,final_result:e.finalResult||void 0,skill:e.skill||void 0,skills:e.skills?JSON.parse(e.skills):void 0,invokedSkills:e.invokedSkills?JSON.parse(e.invokedSkills):void 0,is_skill_correct:e.isSkillCorrect||!1,is_answer_correct:e.isAnswerCorrect||!1,answer_score:void 0!==e.answerScore?e.answerScore:void 0,skill_score:void 0!==e.skillScore?e.skillScore:void 0,judgment_reason:e.judgmentReason||void 0,failures:e.failures?JSON.parse(e.failures):void 0,label:e.label??null,user:e.user??null,skill_issues:e.skillIssues?JSON.parse(e.skillIssues):[],skill_version:e.skillVersion??null,model:t,tool_call_count:e.toolCallCount??void 0,llm_call_count:e.llmCallCount??void 0,input_tokens:e.inputTokens??void 0,output_tokens:e.outputTokens??void 0,tool_call_error_count:e.toolCallErrorCount??void 0,cache_read_input_tokens:e.cacheReadInputTokens??void 0,cache_creation_input_tokens:e.cacheCreationInputTokens??void 0,max_single_call_tokens:e.maxSingleCallTokens??void 0,reasoning_tokens:e.reasoningTokens??void 0,expected_skill_version:e.expectedSkillVersion??null,skill_recall_rate:e.skillRecallRate??null,context_window_pct:null!=e.maxSingleCallTokens&&n?Math.round(e.maxSingleCallTokens/n.contextWindow*1e3)/10:void 0,context_window_limit:n?.contextWindow,context_window_source:n?.source,cost_pricing:i?{inputTokenPrice:i.inputTokenPrice,outputTokenPrice:i.outputTokenPrice,cacheReadInputTokenPrice:i.cacheReadInputTokenPrice??i.inputTokenPrice*r.DEFAULT_CACHE_READ_RATIO,cacheCreationInputTokenPrice:i.cacheCreationInputTokenPrice??i.inputTokenPrice*r.DEFAULT_CACHE_CREATION_RATIO,source:l?.source??"default"}:null}})}async function k(e){let t={};return e&&(t.OR=[{user:e},{user:null}]),(await s.db.findConfigs(t)).map(e=>{let t=(t,l)=>{if(t)try{return JSON.parse(t)}catch(t){console.error(`[readConfig] Failed to parse ${l} for config ${e.id}:`,t);return}};return{id:e.id,query:e.query,skill:e.skill,skillVersion:e.skillVersion,expectedSkills:t(e.expectedSkills,"expectedSkills"),standard_answer:e.standardAnswer,root_causes:t(e.rootCauses,"rootCauses"),key_actions:t(e.keyActions,"keyActions"),parse_status:e.parseStatus||"completed"}})}async function _(e){let t=e.upload_id||e.task_id||crypto.randomUUID();if(e.task_id)try{let l={taskId:e.task_id};e.framework&&(l.framework=e.framework);let i=await s.db.findExecutions(l,{timestamp:"desc"});if(i&&i.length>0&&i[0]?.id){let l=i.find(t=>t.id===e.task_id),n=l&&l.id?l.id:i[0].id;n!==t&&(t=n)}}catch{}let l=null,n=await s.db.findExecutionById(t);n&&(l={...n,upload_id:n.id,task_id:n.taskId||void 0,query:n.query||void 0,framework:n.framework||void 0,tokens:n.tokens||void 0,cost:n.cost||void 0,latency:n.latency||void 0,timestamp:n.timestamp?.toISOString?.()||n.timestamp,final_result:n.finalResult||void 0,skill:n.skill||void 0,skills:n.skills?JSON.parse(n.skills):void 0,invokedSkills:n.invokedSkills?(()=>{try{return JSON.parse(n.invokedSkills)}catch{return}})():void 0,is_skill_correct:n.isSkillCorrect||!1,is_answer_correct:n.isAnswerCorrect||!1,answer_score:n.answerScore||void 0,skill_score:n.skillScore||void 0,judgment_reason:n.judgmentReason||void 0,failures:n.failures?JSON.parse(n.failures):void 0,skill_issues:n.skillIssues?JSON.parse(n.skillIssues):void 0,label:n.label||void 0,user:n.user||void 0,skill_version:n.skillVersion??void 0,expected_skill_version:n.expectedSkillVersion??null,skill_recall_rate:n.skillRecallRate??null,model:n.model||void 0,tool_call_count:n.toolCallCount??void 0,llm_call_count:n.llmCallCount??void 0,input_tokens:n.inputTokens??void 0,output_tokens:n.outputTokens??void 0,tool_call_error_count:n.toolCallErrorCount??void 0,cache_read_input_tokens:n.cacheReadInputTokens??void 0,cache_creation_input_tokens:n.cacheCreationInputTokens??void 0,max_single_call_tokens:n.maxSingleCallTokens??void 0,reasoning_tokens:n.reasoningTokens??void 0});let r=l?{...l}:{},a=!!l;a||r.timestamp||e.timestamp?e.timestamp&&(r.timestamp=e.timestamp):r.timestamp=new Date().toISOString();let u=!!e.force_query_update,d="string"==typeof l?.query?l.query.trim():"",_="string"==typeof e.query?e.query.trim():"";if(r={...r,...e},d&&!u?r.query=d:!d&&_?r.query=_:"string"!=typeof r.query||r.query.trim()?"string"==typeof r.query&&(r.query=r.query.trim()):r.query=void 0,!r.upload_id&&r.task_id&&(r.upload_id=r.task_id),!r.task_id&&r.upload_id&&(r.task_id=r.upload_id),r.upload_id=t,(!r.label||!r.model||!r.user)&&r.task_id){let e=await s.db.findSessionByTaskId(r.task_id);e&&(!r.label&&e.label&&(r.label=e.label),!r.model&&e.model&&(r.model=e.model),!r.user&&e.user&&(r.user=e.user))}if(!r.user)try{let e=s.db.getClient();if("query"in e){let t=await e.query('SELECT username FROM "User" LIMIT 1');t.rows[0]&&(r.user=t.rows[0].username,console.log(`[Data-Service] Fallback resolved user for task ${r.task_id} to: ${r.user}`))}}catch(e){console.warn("[Data-Service] Fallback user lookup failed:",e)}let p=e.Token||e.token||e.tokens;void 0!==p&&(r.tokens=Number(p)),void 0!==e.tool_call_count&&(r.tool_call_count=Number(e.tool_call_count)),void 0!==e.llm_call_count&&(r.llm_call_count=Number(e.llm_call_count)),void 0!==e.input_tokens&&(r.input_tokens=Number(e.input_tokens)),void 0!==e.output_tokens&&(r.output_tokens=Number(e.output_tokens)),void 0!==e.tool_call_error_count&&(r.tool_call_error_count=Number(e.tool_call_error_count)),void 0!==e.cache_read_input_tokens&&(r.cache_read_input_tokens=Number(e.cache_read_input_tokens)),void 0!==e.cache_creation_input_tokens&&(r.cache_creation_input_tokens=Number(e.cache_creation_input_tokens)),void 0!==e.max_single_call_tokens&&(r.max_single_call_tokens=Number(e.max_single_call_tokens)),void 0!==e.reasoning_tokens&&(r.reasoning_tokens=Number(e.reasoning_tokens));let m="未找到匹配的评测配置",v=!1,g=r.is_answer_correct||!1,y=r.judgment_reason||m,w=await k(r.user);if(r.query&&w.length>0){let t=c(w,r.query);if(t){let i=Array.isArray(r.invokedSkills)?r.invokedSkills:[],n=(Array.isArray(r.skills)?r.skills:[]).map(e=>({name:e,version:null})),u=t.expectedSkills||[];if(u.length>0){let e=i.length>0?i:n;if(e.length>0){let t=0,l=u.filter(e=>e.skill?.trim()),i=l.map(e=>e.skill.trim()),n=new Map;if(i.length>0)try{for(let e of(await s.db.findSkills({name:{in:i},user:r.user||null})))n.set(e.name,e)}catch(e){console.error("[Judgment] Error fetching skills for version check:",e)}for(let i of l){let l=i.skill.trim(),o=i.version??null,s=e.find(e=>e.name===l);if(s){let e=!1;if(null===o)e=!0;else if(null!==s.version)e=s.version===o;else{let t=n.get(l);e=!!t&&(t.activeVersion||0)===o}e&&(t++,v||(v=!0))}}l.length>0&&(r.skill_recall_rate=t/l.length)}}if(r.is_skill_correct=v,void 0!==r.final_result){let i=!0;if(a&&!e.force_judgment&&l&&l.query===r.query&&l.final_result===r.final_result&&(i=!1),i&&!r.skip_evaluation){let e,l=(r.skill||t.skill||"").trim();if(l)try{let t=await s.db.findSkill(l,r.user||null);if(t){let l=t.activeVersion||0,i=t.versions?.find(e=>e.version===l);if(i&&i.content)e=i.content,r.skill_version=i.version;else if(t.versions&&t.versions.length>0){let l=t.versions[0];l&&l.content&&(e=l.content,r.skill_version=l.version)}}}catch(e){console.error("[Judgment] Error fetching skill definition:",e)}let i=await (0,o.judgeAnswer)(r.query||"",{standard_answer_example:t.standard_answer,root_causes:t.root_causes,key_actions:t.key_actions,skill_definition:e},r.final_result,r.user);g=i.is_correct,r.answer_score=i.score,y=i.reason||"Judged by Evaluation Model"}}}else a&&!e.force_judgment||r.answer_score||(g=!1,y=m,r.answer_score=null)}else r.query&&(!a||e.force_judgment)&&!r.answer_score&&(g=!1,y=m,r.answer_score=null);e.skip_evaluation&&(r.answer_score=null,y="结果评估中..."),r.is_skill_correct=v,r.is_answer_correct=g,r.judgment_reason=y;let h=Array.isArray(r.skills)&&r.skills.length>0?r.skills[0]:void 0;if(h){let e=function(){if(!i.default.existsSync(f))return{};try{return JSON.parse(i.default.readFileSync(f,"utf-8"))}catch{return{}}}()[h];e&&(r.skill_score=parseFloat(e))}if(r.skill&&void 0!==r.skill_version&&null!==r.skill_version?r.label=`${r.skill}-v${r.skill_version}`:r.skill?r.label=`${r.skill}-v1`:r.label="without-skill",await s.db.upsertExecution({where:{id:t},create:{id:t,taskId:r.task_id,query:r.query,framework:r.framework,tokens:r.tokens,cost:r.cost,latency:r.latency,timestamp:r.timestamp?new Date(r.timestamp):new Date,finalResult:r.final_result,skill:r.skill,skills:r.skills?JSON.stringify(r.skills):null,invokedSkills:r.invokedSkills?JSON.stringify(r.invokedSkills):null,isSkillCorrect:r.is_skill_correct,isAnswerCorrect:r.is_answer_correct,answerScore:r.answer_score,skillScore:r.skill_score,judgmentReason:r.judgment_reason,failures:r.failures?JSON.stringify(r.failures):null,skillIssues:r.skill_issues?JSON.stringify(r.skill_issues):null,label:r.label,user:r.user,skillVersion:r.skill_version,model:r.model,toolCallCount:r.tool_call_count,llmCallCount:r.llm_call_count,inputTokens:r.input_tokens,outputTokens:r.output_tokens,toolCallErrorCount:r.tool_call_error_count,skillRecallRate:r.skill_recall_rate,cacheReadInputTokens:r.cache_read_input_tokens,cacheCreationInputTokens:r.cache_creation_input_tokens,maxSingleCallTokens:r.max_single_call_tokens,reasoningTokens:r.reasoning_tokens},update:{taskId:r.task_id,query:r.query,framework:r.framework,tokens:r.tokens,cost:r.cost,latency:r.latency,timestamp:r.timestamp?new Date(r.timestamp):new Date,finalResult:r.final_result,skill:r.skill,skills:r.skills?JSON.stringify(r.skills):null,invokedSkills:r.invokedSkills?JSON.stringify(r.invokedSkills):null,isSkillCorrect:r.is_skill_correct,isAnswerCorrect:r.is_answer_correct,answerScore:r.answer_score,skillScore:r.skill_score,judgmentReason:r.judgment_reason,failures:r.failures?JSON.stringify(r.failures):null,skillIssues:r.skill_issues?JSON.stringify(r.skill_issues):null,label:r.label,user:r.user,skillVersion:r.skill_version,model:r.model,toolCallCount:r.tool_call_count,llmCallCount:r.llm_call_count,inputTokens:r.input_tokens,outputTokens:r.output_tokens,toolCallErrorCount:r.tool_call_error_count,skillRecallRate:r.skill_recall_rate,cacheReadInputTokens:r.cache_read_input_tokens,cacheCreationInputTokens:r.cache_creation_input_tokens,maxSingleCallTokens:r.max_single_call_tokens,reasoningTokens:r.reasoning_tokens}}),e.upload_id&&e.task_id&&e.upload_id!==t)try{let t=await s.db.findExecutionById(e.upload_id);t&&t.taskId===e.task_id&&await s.db.deleteExecution(e.upload_id)}catch{}if(r.task_id&&r.interactions){let e="string"==typeof r.interactions?(()=>{try{return JSON.parse(r.interactions)}catch{return[]}})():r.interactions,t=e;try{let l=await s.db.findSessionByTaskId(r.task_id),i=l?.interactions?(()=>{try{return JSON.parse(l.interactions)}catch{return[]}})():[];Array.isArray(i)&&i.length>0&&(t=!Array.isArray(e)||e.length<i.length?i:e.map((e,t)=>{let l=i[t],n=e?.content===""||e?.content==null,o="string"==typeof l?.content&&l.content.length>0;return n&&o&&l?.role===e?.role?{...e,content:l.content}:e}))}catch{}await s.db.upsertSession(r.task_id,{taskId:r.task_id,query:r.query,label:r.label,user:r.user,model:r.model,interactions:JSON.stringify(t)},{query:r.query,label:r.label,user:r.user,model:r.model,interactions:JSON.stringify(t)})}return{success:!0,record:r}}e.s(["findBestMatchConfig",()=>c,"readConfig",()=>k,"readRecords",()=>d,"saveExecutionRecord",()=>_]),l()}catch(e){l(e)}},!1)];
2
-
3
- //# sourceMappingURL=src_lib_12408140._.js.map
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18566,(e,t,r)=>{t.exports=e.r(76562)},9165,e=>{"use strict";async function t(e,t){return fetch(""+e,t)}function r(e){return""+e}e.s(["apiFetch",()=>t,"getApiUrl",()=>r])},94690,e=>{"use strict";var t=e.i(43476),r=e.i(18566),i=e.i(71645),o=e.i(9165);let a=(0,i.createContext)(void 0);function u({children:e}){let[u,s]=(0,i.useState)(null),[n,l]=(0,i.useState)(null),[c,h]=(0,i.useState)(!1),[g,d]=(0,i.useState)(!1),[m,f]=(0,i.useState)(!1),v=(0,r.useRouter)(),p=(0,r.usePathname)();return(0,i.useEffect)(()=>{(0,o.apiFetch)("/api/config/status?check_org=true").then(e=>e.json()).then(e=>h(e.org_mode||!1)).catch(()=>{}).finally(()=>f(!0))},[]),(0,i.useEffect)(()=>{if(!m)return;let e=localStorage.getItem("user_id"),t=localStorage.getItem("api_key");e?(s(e),t&&l(t)):c&&!g?(d(!0),(0,o.apiFetch)("/api/auth/organization").then(async e=>{let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t?.error||`Organization auth failed: ${e.status}`);return t}).then(e=>{let t=e?.displayName||e?.username,r=e?.apiKey;if(!t)throw Error("Organization auth response missing username");localStorage.setItem("user_id",t),r&&localStorage.setItem("api_key",r),s(t),r&&l(r)}).catch(e=>console.error("Organization auth failed:",e)).finally(()=>d(!1))):"/login"!==p&&v.push("/login")},[p,v,c,g,m]),(0,t.jsx)(a.Provider,{value:{user:u,apiKey:n,login:(e,t)=>{localStorage.setItem("user_id",e),s(e),t&&(localStorage.setItem("api_key",t),l(t)),v.replace("/")},logout:()=>{localStorage.removeItem("user_id"),localStorage.removeItem("api_key"),s(null),l(null),v.push("/login")}},children:e})}function s(){let e=(0,i.useContext)(a);if(void 0===e)throw Error("useAuth must be used within an AuthProvider");return e}e.s(["AuthProvider",()=>u,"useAuth",()=>s])},97703,e=>{"use strict";var t=e.i(43476),r=e.i(71645);let i=(0,r.createContext)(void 0);function o({children:e}){let[o,a]=(0,r.useState)("light"),[u,s]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{s(!0);let e=localStorage.getItem("skill-insight-theme");e&&a(e)},[]),(0,r.useEffect)(()=>{u&&(localStorage.setItem("skill-insight-theme",o),document.documentElement.setAttribute("data-theme",o))},[o,u]),u)?(0,t.jsx)(i.Provider,{value:{theme:o,toggleTheme:()=>{a(e=>"light"===e?"dark":"light")},isDark:"dark"===o},children:e}):null}function a(){let e=(0,r.useContext)(i);if(void 0===e)throw Error("useTheme must be used within a ThemeProvider");return e}e.s(["ThemeProvider",()=>o,"useTheme",()=>a])},1661,e=>{"use strict";var t=e.i(43476),r=e.i(94690),i=e.i(97703);function o({children:e}){return(0,t.jsx)(i.ThemeProvider,{children:(0,t.jsx)(r.AuthProvider,{children:e})})}e.s(["Providers",()=>o])}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,9665,e=>{"use strict";var s=e.i(43476),t=e.i(18566),c=e.i(71645);function n({skillId:e,skillName:c,version:n,user:a}){let r=(0,t.useRouter)();return e||c?(0,s.jsxs)("span",{onClick:s=>{s.preventDefault();let t=new URLSearchParams;e?t.set("id",e):(t.set("name",c),a&&t.set("user",a)),null!=n&&t.set("version",String(n)),r.push(`/skills?${t.toString()}`)},style:{color:"#60a5fa",cursor:"pointer",textDecoration:"none",transition:"color 0.2s"},onMouseEnter:e=>{e.currentTarget.style.textDecoration="underline",e.currentTarget.style.color="#93c5fd"},onMouseLeave:e=>{e.currentTarget.style.textDecoration="none",e.currentTarget.style.color="#60a5fa"},children:[c,n?` (v${n})`:""]}):(0,s.jsx)("span",{style:{color:"#64748b"},children:"(None)"})}function a({skills:e,skill:t,skillId:a,skillIds:r,skillVersion:l,user:i}){return e?.length||t?e?.length?(0,s.jsx)(s.Fragment,{children:e.map((e,t)=>{let a=r?.[t]||null;return(0,s.jsxs)(c.default.Fragment,{children:[t>0&&(0,s.jsx)("span",{style:{color:"#e2e8f0"},children:", "}),(0,s.jsx)(n,{skillId:a,skillName:e,version:l,user:i})]},t)})}):(0,s.jsx)(n,{skillId:a,skillName:t,version:l,user:i}):(0,s.jsx)("span",{style:{color:"#64748b"},children:"(None)"})}e.s(["SkillLinks",()=>a])},95802,e=>{e.v(s=>Promise.all(["static/chunks/f7a6fed60fb079dd.js","static/chunks/5432ce4a494bc74d.js","static/chunks/b43afe7d924243d9.js","static/chunks/68e4bccbce97556a.js","static/chunks/21105f8885631d60.js","static/chunks/7a95be670a5c981c.js","static/chunks/aa21d65228612e46.js","static/chunks/07668c4577ece2d3.js","static/chunks/78fd227efc628935.js"].map(s=>e.l(s))).then(()=>s(76913)))},34486,e=>{e.v(s=>Promise.all(["static/chunks/6baf949fafec6be3.js","static/chunks/cd0fde15dc0dfcca.js","static/chunks/e13d208072a48316.js"].map(s=>e.l(s))).then(()=>s(13143)))},14524,e=>{e.v(s=>Promise.all(["static/chunks/fec58f85bfaa3c39.js"].map(s=>e.l(s))).then(()=>s(17847)))}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94542,e=>{"use strict";var t=e.i(43476),r=e.i(94690),i=e.i(18566),a=e.i(71645),n=e.i(9165);function o(){let[e,o]=(0,a.useState)(""),[s,l]=(0,a.useState)(""),[c,d]=(0,a.useState)(!1),[m,u]=(0,a.useState)(""),{login:p}=(0,r.useAuth)(),h=(0,i.useRouter)();(0,a.useEffect)(()=>{(0,n.apiFetch)("/api/config/status?check_org=true").then(e=>e.json()).then(e=>{d(e.org_mode||!1),u(e.org_login_redirect_url||"")}).catch(()=>{})},[]),(0,a.useEffect)(()=>{if(!c||!m)return;let e=!1;return(async()=>{try{let t=await (0,n.apiFetch)("/api/auth/organization",{cache:"no-store"});if(!t.ok){e||401!==t.status&&403!==t.status||(window.location.href=m);return}let r=await t.json();!e&&r?.username&&(p(r.username,r.apiKey),h.replace("/"))}catch(t){e||(window.location.href=m)}})(),()=>{e=!0}},[c,m,p,h]);let g=async t=>{if(t.preventDefault(),l(""),!e.trim())return void l("请输入邮箱地址");try{let t=await (0,n.apiFetch)("/api/auth/apikey",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e.trim()})}),r=await t.json();t.ok?p(r.username,r.apiKey):l(r.error||"登录失败,请重试")}catch(e){console.error(e),l("网络错误,请检查连接")}};return c?(0,t.jsx)("div",{className:"login-container",children:(0,t.jsx)("div",{className:"login-box",children:(0,t.jsx)("p",{style:{color:"#94a3b8",textAlign:"center"},children:"正在跳转到企业登录页..."})})}):(0,t.jsx)("div",{className:"login-container",children:(0,t.jsxs)("div",{className:"login-box",children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:"1.5rem",marginBottom:"2.5rem"},children:[(0,t.jsx)("div",{style:{background:"linear-gradient(135deg, #38bdf8, #818cf8)",color:"white",fontWeight:"bold",fontSize:"1.8rem",padding:"0.8rem 1.2rem",borderRadius:"0.75rem",whiteSpace:"nowrap",boxShadow:"0 10px 15px -3px rgba(56, 189, 248, 0.4), 0 4px 6px -2px rgba(56, 189, 248, 0.2)"},children:"Skill"}),(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column"},children:[(0,t.jsx)("h1",{style:{fontSize:"3rem",fontWeight:"800",color:"#f8fafc",margin:0,lineHeight:1,letterSpacing:"-0.02em",textShadow:"0 2px 4px rgba(0,0,0,0.3)"},children:"Insight"}),(0,t.jsx)("span",{style:{fontSize:"1rem",color:"#94a3b8",letterSpacing:"0.1em",textTransform:"uppercase",marginTop:"0.25rem"},children:"智能体技能评估、分析与优化"})]})]}),(0,t.jsxs)("form",{className:"login-form",children:[(0,t.jsxs)("div",{style:{marginBottom:"1rem"},children:[(0,t.jsx)("label",{className:"login-label",htmlFor:"username",children:"邮箱地址"}),(0,t.jsx)("input",{className:"login-input",id:"username",type:"email",placeholder:"your.email@example.com",value:e,onChange:e=>{o(e.target.value),l("")},style:s?{borderColor:"#ef4444"}:{}}),s&&(0,t.jsxs)("div",{style:{color:"#ef4444",fontSize:"0.875rem",marginTop:"0.5rem",padding:"0.5rem 0.75rem",background:"rgba(239, 68, 68, 0.1)",borderRadius:"0.375rem",border:"1px solid rgba(239, 68, 68, 0.3)"},children:["⚠️ ",s]})]}),(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:(0,t.jsx)("button",{className:"login-btn",type:"button",onClick:g,children:"Sign In"})})]})]})})}e.s(["default",()=>o])}]);