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