@witty-ai/skill-insight 0.5.0-beta โ 0.7.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +6 -0
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +4 -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 +24 -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 +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- 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/config/create/route.js +4 -3
- 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 +5 -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 +6 -5
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/evaluation/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js +6 -5
- 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 +4 -3
- 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]/end/route.js +4 -3
- 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 +6 -5
- package/.next/standalone/.next/server/app/api/rejudge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/session/route.js +4 -4
- package/.next/standalone/.next/server/app/api/session/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]/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/[id]/versions/route.js +5 -2
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/automation/import/route.js +5 -2
- 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 +6 -5
- 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/skills/upload/route.js +5 -2
- package/.next/standalone/.next/server/app/api/skills/upload/route.js.nft.json +1 -1
- 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 +12 -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 +5 -4
- 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 +5 -5
- package/.next/standalone/.next/server/app/details.segments/_full.segment.rsc +5 -5
- 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 +5 -5
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
- 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 +5 -5
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +5 -5
- 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 +5 -5
- package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +5 -5
- 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 +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02ddba88._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15dbd1f2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1c95bcde._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__23efcd78._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a6d443b._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__53775b48._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5444db55._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__591248f3._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d8178f6._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6261d672._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6923eecf._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6fc12878._.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 +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d551ea2._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a4d3d791._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa3d72e3._.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]__b11acc79._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba01f286._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd91659b._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c200214a._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c20da96a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c602c518._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d7fab946._.js +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ddf63a21._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e280561d._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e550423c._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f9e66e02._.js +3 -0
- package/.next/standalone/.next/server/chunks/_33c0c729._.js +1 -1
- package/.next/standalone/.next/server/chunks/_3e8b4d8c._.js +1 -1
- package/.next/standalone/.next/server/chunks/_46f10554._.js +3 -0
- 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_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 -4
- 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 +237 -0
- package/.next/standalone/.next/server/chunks/src_c8971a2d._.js +57 -8
- package/.next/standalone/.next/server/chunks/src_lib_119f6c7b._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__9ab7cc4a._.js โ [root-of-the-server]__082c32a2._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__51073007._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_049876f0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_09546b95._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_8f5379ab._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_c8c8c083._.js +9 -9
- package/.next/standalone/.next/server/chunks/ssr/{_b121f1ae._.js โ _e2faf4f5._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_fd46f439._.js +2 -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_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_66a70595._.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/{737b8cff3c6a4e30.js โ 015467355d3866a3.js} +1 -1
- package/.next/standalone/.next/static/chunks/09f192c9b0609ad8.js +1 -0
- package/.next/standalone/.next/static/chunks/1945a5514fbc393c.css +1 -0
- package/.next/{static/chunks/07c9f28a269c701a.js โ standalone/.next/static/chunks/361e4cf1e9a71ccb.js} +1 -1
- package/.next/{static/chunks/5432ce4a494bc74d.js โ standalone/.next/static/chunks/60bc50374fd32f20.js} +3 -3
- package/.next/standalone/.next/static/chunks/{251551dcdf74a60d.js โ 65bac0880a87bff3.js} +1 -1
- package/.next/standalone/.next/static/chunks/961f7fa606dd26a8.js +1 -0
- package/.next/standalone/.next/static/chunks/bab2ffd4f527acfb.js +1 -0
- package/.next/standalone/.next/static/chunks/c513373e5cfedd5b.js +2 -0
- package/.next/standalone/.next/static/chunks/ca3017e51e817855.js +1 -0
- package/.next/{static/chunks/7e35f4cf2e266022.js โ standalone/.next/static/chunks/cb104c3cb4c52833.js} +1 -1
- package/.next/{static/chunks/ff6357067630b168.js โ standalone/.next/static/chunks/e13d208072a48316.js} +1 -1
- package/.next/standalone/.next/static/chunks/{e09d9ee16fe90255.js โ f786bb68e17b12b4.js} +1 -1
- package/.next/standalone/.next/static/chunks/fc61b990c5ec4ef4.js +109 -0
- package/.next/standalone/node_modules/.prisma/client/edge.js +7 -3
- package/.next/standalone/node_modules/.prisma/client/index-browser.js +4 -0
- package/.next/standalone/node_modules/.prisma/client/index.js +7 -3
- package/.next/standalone/node_modules/.prisma/client/package.json +1 -1
- package/.next/standalone/node_modules/.prisma/client/schema.prisma +26 -22
- package/.next/standalone/node_modules/.prisma/client/wasm.js +4 -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 +7 -3
- package/.next/standalone/scripts/opencode_plugin.ts +158 -50
- package/.next/standalone/scripts/opencode_tui_plugin.tsx +308 -0
- package/.next/standalone/scripts/si-optimizer.md +5 -0
- package/.next/static/chunks/{737b8cff3c6a4e30.js โ 015467355d3866a3.js} +1 -1
- package/.next/static/chunks/09f192c9b0609ad8.js +1 -0
- package/.next/static/chunks/1945a5514fbc393c.css +1 -0
- package/.next/{standalone/.next/static/chunks/07c9f28a269c701a.js โ static/chunks/361e4cf1e9a71ccb.js} +1 -1
- package/.next/{standalone/.next/static/chunks/5432ce4a494bc74d.js โ static/chunks/60bc50374fd32f20.js} +3 -3
- package/.next/static/chunks/{251551dcdf74a60d.js โ 65bac0880a87bff3.js} +1 -1
- package/.next/static/chunks/961f7fa606dd26a8.js +1 -0
- package/.next/static/chunks/bab2ffd4f527acfb.js +1 -0
- package/.next/static/chunks/c513373e5cfedd5b.js +2 -0
- package/.next/static/chunks/ca3017e51e817855.js +1 -0
- package/.next/{standalone/.next/static/chunks/7e35f4cf2e266022.js โ static/chunks/cb104c3cb4c52833.js} +1 -1
- package/.next/{standalone/.next/static/chunks/ff6357067630b168.js โ static/chunks/e13d208072a48316.js} +1 -1
- package/.next/static/chunks/{e09d9ee16fe90255.js โ f786bb68e17b12b4.js} +1 -1
- package/.next/static/chunks/fc61b990c5ec4ef4.js +109 -0
- package/package.json +6 -2
- package/prisma/schema.prisma +7 -3
- package/scripts/activate_telemetry.sh +44 -1
- package/scripts/opencode_plugin.ts +158 -50
- 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]__1013b265._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ce5e3b8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6d8053e2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b835ea7f._.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]__fc05579d._.js +0 -3
- package/.next/standalone/.next/server/chunks/_41a98bd8._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_497d2ad2._.js +0 -175
- package/.next/standalone/.next/server/chunks/src_lib_12408140._.js +0 -3
- package/.next/standalone/.next/static/chunks/01eddf501c574a44.js +0 -1
- package/.next/standalone/.next/static/chunks/1e782a49beaf489c.js +0 -1
- package/.next/standalone/.next/static/chunks/4071dbec4cf7e72e.js +0 -109
- package/.next/standalone/.next/static/chunks/67bd1a5de2195779.js +0 -1
- package/.next/standalone/.next/static/chunks/a87b5e84254095a5.js +0 -1
- package/.next/standalone/.next/static/chunks/c6bd2818656b1f20.css +0 -1
- package/.next/standalone/.next/static/chunks/dc59a07a8f327b40.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 -41
- 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/01eddf501c574a44.js +0 -1
- package/.next/static/chunks/1e782a49beaf489c.js +0 -1
- package/.next/static/chunks/4071dbec4cf7e72e.js +0 -109
- package/.next/static/chunks/67bd1a5de2195779.js +0 -1
- package/.next/static/chunks/a87b5e84254095a5.js +0 -1
- package/.next/static/chunks/c6bd2818656b1f20.css +0 -1
- package/.next/static/chunks/dc59a07a8f327b40.js +0 -1
- /package/.next/standalone/.next/static/{H581Rok68JtPV4bAVVH3l โ iKG72t8Hpebb09DcIpKUJ}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{H581Rok68JtPV4bAVVH3l โ iKG72t8Hpebb09DcIpKUJ}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{H581Rok68JtPV4bAVVH3l โ iKG72t8Hpebb09DcIpKUJ}/_ssgManifest.js +0 -0
- /package/.next/static/{H581Rok68JtPV4bAVVH3l โ iKG72t8Hpebb09DcIpKUJ}/_buildManifest.js +0 -0
- /package/.next/static/{H581Rok68JtPV4bAVVH3l โ iKG72t8Hpebb09DcIpKUJ}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{H581Rok68JtPV4bAVVH3l โ iKG72t8Hpebb09DcIpKUJ}/_ssgManifest.js +0 -0
|
@@ -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),o=e.i(61916),r=e.i(74677),l=e.i(69741),a=e.i(16795),c=e.i(87718),h=e.i(95169),p=e.i(47587),S=e.i(66012),d=e.i(70101),_=e.i(26937),u=e.i(10372),E=e.i(93695);e.i(52474);var L=e.i(220),I=e.i(89171);async function w(e){var t,n,i;let s,o,r,l,{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",S=e.headers.get("x-forwarded-proto")||"http",d=new URL(e.url).pathname.replace(/\/api\/setup\/auto\/?$/,""),_=`${S}://${p}${d}`;return"windows"==(r=e.headers.get("user-agent")||"",(l=e.headers.get("x-platform")||"")?"windows"===l.toLowerCase()?"windows":"unix":/windows|win32|win64/i.test(r)?"windows":"unix")?(s=["# =============================================================================\n# Skill-insight Auto Setup (Non-Interactive) - PowerShell\n# =============================================================================\n",'$SKILL_INSIGHT_HOST = "'+h+'"','$SKILL_INSIGHT_BASE_URL = "'+_+'"','$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\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# 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 I.NextResponse("\uFEFF"+s,{headers:{"Content-Type":"application/x-powershell; charset=utf-8"}})):(t=_,n=h,i=c,o=`#!/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,8 +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 "$
|
|
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
|
|
133
167
|
fi
|
|
134
168
|
|
|
135
169
|
if [ "$INSTALL_CLAUDE" = "true" ]; then
|
|
@@ -144,16 +178,24 @@ fi
|
|
|
144
178
|
|
|
145
179
|
# 4. Configure ~/.skill-insight/.env (Auto mode - no interaction)
|
|
146
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
|
|
147
188
|
|
|
148
189
|
echo "โ๏ธ Updating configuration..."
|
|
149
190
|
touch "$SKILL_INSIGHT_CONFIG_FILE"
|
|
150
191
|
if [ -f "$SKILL_INSIGHT_CONFIG_FILE" ]; then
|
|
151
192
|
cp "$SKILL_INSIGHT_CONFIG_FILE" "\${SKILL_INSIGHT_CONFIG_FILE}.bak"
|
|
152
|
-
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"
|
|
153
194
|
rm "\${SKILL_INSIGHT_CONFIG_FILE}.bak"
|
|
154
195
|
fi
|
|
155
196
|
echo "SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST" >> "$SKILL_INSIGHT_CONFIG_FILE"
|
|
156
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"
|
|
157
199
|
echo "โ
Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"
|
|
158
200
|
echo " SKILL_INSIGHT_HOST=$SKILL_INSIGHT_HOST"
|
|
159
201
|
echo " SKILL_INSIGHT_API_KEY=********"
|
|
@@ -291,6 +333,7 @@ echo "------------------------------------------------"
|
|
|
291
333
|
echo "Installed Components:"
|
|
292
334
|
if [ "$INSTALL_OPENCODE" = "true" ]; then
|
|
293
335
|
echo " โ
OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts"
|
|
336
|
+
echo " โ
OpenCode Command: ~/.config/opencode/commands/si-optimizer.md"
|
|
294
337
|
fi
|
|
295
338
|
if [ "$INSTALL_CLAUDE" = "true" ]; then
|
|
296
339
|
echo " โ
Claude Watcher: ~/.skill-insight/claude_watcher_client.ts"
|
|
@@ -327,6 +370,6 @@ if [ "$INSTALL_OPENCLAW" = "true" ]; then
|
|
|
327
370
|
echo " 3. OpenClaw will automatically monitor and upload telemetry"
|
|
328
371
|
fi
|
|
329
372
|
echo "------------------------------------------------"
|
|
330
|
-
`,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)}];
|
|
331
374
|
|
|
332
375
|
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_c33286ed.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[26984,e=>{"use strict";var n=e.i(47909),t=e.i(74017),i=e.i(60476),s=e.i(59756),o=e.i(61916),l=e.i(74677),r=e.i(69741),a=e.i(16795),c=e.i(87718),h=e.i(95169),S=e.i(47587),_=e.i(66012),I=e.i(70101),E=e.i(26937),L=e.i(10372),d=e.i(93695);e.i(52474);var p=e.i(220),u=e.i(89171);async function T(e){let n,t,i=e.headers.get("x-forwarded-host")||e.headers.get("host")||"127.0.0.1:3000",s=e.headers.get("x-forwarded-proto")||"https";new URL(e.url).pathname.replace(/\/api\/setup\/?$/,"");let o=`${s}://${i}`;if("windows"==(n=e.headers.get("user-agent")||"",(t=e.headers.get("x-platform")||"")?"windows"===t.toLowerCase()?"windows":"unix":n.toLowerCase().includes("windows")?"windows":"unix")){let e=["# =============================================================================\n# Skill-insight One-Click Setup (PowerShell)\n# =============================================================================\n",'$SKILL_INSIGHT_HOST = "'+o+'"','$SKILL_INSIGHT_BASE_URL = "'+o+'"','\nWrite-Host "๐ Fetching Skill-insight telemetry components from $SKILL_INSIGHT_BASE_URL..."\n\n# 1. Setup Directories\n$homeDir = $env:USERPROFILE\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.skill-insight" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.skill-insight\\logs" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.opencode\\plugins" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.opencode\\skills" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.claude\\projects" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.openclaw\\agents" | 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 = "$homeDir\\.skill-insight\\framework_selector.mjs"\n$SELECTOR_RESULT = "$homeDir\\.skill-insight\\.selector_result"\n\n# Install inquirer if not already installed\nSet-Location "$homeDir\\.skill-insight"\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$selectorContent = @\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'OpenClaw\', value: \'openclaw\' }\n];\n\nasync 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 const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.USERPROFILE + \'\\\\.skill-insight\\\\.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\n\'@\n\nSet-Content -Path $SELECTOR_SCRIPT -Value $selectorContent -Encoding UTF8\n\n# Run the selector interactively\n$env:SELECTOR_RESULT_FILE = $SELECTOR_RESULT\nSet-Location "$homeDir\\.skill-insight"\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 "$homeDir\\.opencode\\plugins\\Witty-Skill-Insight.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 "$homeDir\\.skill-insight\\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 "$homeDir\\.skill-insight\\openclaw_watcher_client.ts"\n}\n\n# 4. Configure ~/.skill-insight/.env\n$SKILL_INSIGHT_CONFIG_FILE = "$homeDir\\.skill-insight\\.env"\n$EXISTING_KEY = ""\n$EXISTING_HOST = ""\nif (Test-Path $SKILL_INSIGHT_CONFIG_FILE) {\n $content = Get-Content $SKILL_INSIGHT_CONFIG_FILE\n $keyLine = $content | Select-String \'^SKILL_INSIGHT_API_KEY=\' | Select-Object -First 1\n $hostLine = $content | Select-String \'^SKILL_INSIGHT_HOST=\' | Select-Object -First 1\n if ($keyLine) {\n $EXISTING_KEY = $keyLine.Line.Substring(\'SKILL_INSIGHT_API_KEY=\'.Length)\n }\n if ($hostLine) {\n $EXISTING_HOST = $hostLine.Line.Substring(\'SKILL_INSIGHT_HOST=\'.Length)\n }\n}\n\n# -- API Key Logic --\n$FINAL_KEY = $EXISTING_KEY\nif ($EXISTING_KEY) {\n Write-Host "๐ Found existing API Key."\n $USE_EXISTING = Read-Host "๐ Use existing key? (y/N, Default: y)"\n if ($USE_EXISTING -match \'^[Nn]$\') {\n $FINAL_KEY = Read-Host "๐ Please enter your NEW API Key"\n }\n} else {\n Write-Host "๐ SKILL_INSIGHT_API_KEY is not set."\n $FINAL_KEY = Read-Host "๐ Please enter your API Key"\n}\n\n# -- Host Logic --\n$FINAL_HOST = $SKILL_INSIGHT_HOST\nif ($EXISTING_HOST -and ($EXISTING_HOST -ne $SKILL_INSIGHT_HOST)) {\n Write-Host "๐ Current Host in config: $EXISTING_HOST"\n Write-Host "๐ New Host detected: $SKILL_INSIGHT_HOST"\n $CHANGE_HOST = Read-Host "๐ Change to new Host? (y/N, Default: y)"\n if ($CHANGE_HOST -match \'^[Nn]$\') {\n $FINAL_HOST = $EXISTING_HOST\n }\n} elseif (-not $EXISTING_HOST) {\n $FINAL_HOST = $SKILL_INSIGHT_HOST\n}\n\nif (-not $FINAL_KEY) {\n Write-Host "โ ๏ธ Warning: No API Key provided. Telemetry upload will fail until you set it in $SKILL_INSIGHT_CONFIG_FILE"\n}\n\nWrite-Host "โ๏ธ Updating configuration..."\nNew-Item -ItemType File -Path $SKILL_INSIGHT_CONFIG_FILE -Force | Out-Null\nCopy-Item $SKILL_INSIGHT_CONFIG_FILE "$SKILL_INSIGHT_CONFIG_FILE.bak"\n$content = Get-Content "$SKILL_INSIGHT_CONFIG_FILE.bak"\n$content | Where-Object { $_ -notmatch \'^SKILL_INSIGHT_HOST=\' -and $_ -notmatch \'^SKILL_INSIGHT_API_KEY=\' } | Set-Content $SKILL_INSIGHT_CONFIG_FILE\nAdd-Content $SKILL_INSIGHT_CONFIG_FILE "SKILL_INSIGHT_HOST=$FINAL_HOST"\nAdd-Content $SKILL_INSIGHT_CONFIG_FILE "SKILL_INSIGHT_API_KEY=$FINAL_KEY"\nRemove-Item "$SKILL_INSIGHT_CONFIG_FILE.bak" -Force\nWrite-Host "โ
Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"\n\n# 6. Install Watcher Dependencies\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 "$homeDir\\.skill-insight"\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 = $false\nif ($INSTALL_CLAUDE -or $INSTALL_OPENCLAW) {\n $NEEDS_WATCHER_SCRIPTS = $true\n}\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "๐ Creating watcher management scripts..."\n\n if ($INSTALL_CLAUDE) {\n $startScript = @\'\npkill -f "claude_watcher_client.ts" 2>/dev/null\nSet-Location "$env:USERPROFILE\\.skill-insight"\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", "$env:USERPROFILE\\.skill-insight\\claude_watcher_client.ts" -RedirectStandardOutput "$env:USERPROFILE\\.skill-insight\\logs\\claude_watcher.log" -RedirectStandardError "$env:USERPROFILE\\.skill-insight\\logs\\claude_watcher_error.log" -NoNewWindow\nWrite-Host "Claude watcher started"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\start_claude_watcher.ps1" -Value $startScript -Encoding UTF8\n\n $stopScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nRemove-Item "$env:USERPROFILE\\.skill-insight\\claude_watcher.pid" -Force -ErrorAction SilentlyContinue\nWrite-Host "Claude watcher stopped"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\stop_claude_watcher.ps1" -Value $stopScript -Encoding UTF8\n }\n\n if ($INSTALL_OPENCLAW) {\n $startScript = @\'\npkill -f "openclaw_watcher_client.ts" 2>/dev/null\nSet-Location "$env:USERPROFILE\\.skill-insight"\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", "$env:USERPROFILE\\.skill-insight\\openclaw_watcher_client.ts" -RedirectStandardOutput "$env:USERPROFILE\\.skill-insight\\logs\\openclaw_watcher.log" -RedirectStandardError "$env:USERPROFILE\\.skill-insight\\logs\\openclaw_watcher_error.log" -NoNewWindow\nWrite-Host "OpenClaw watcher started"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\start_openclaw_watcher.ps1" -Value $startScript -Encoding UTF8\n\n $stopScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*openclaw_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nRemove-Item "$env:USERPROFILE\\.skill-insight\\openclaw_watcher.pid" -Force -ErrorAction SilentlyContinue\nWrite-Host "OpenClaw watcher stopped"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\stop_openclaw_watcher.ps1" -Value $stopScript -Encoding UTF8\n }\n\n $combinedStart = \'Write-Host "Starting Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) { $combinedStart += [char]10 + "& `"$homeDir\\.skill-insight\\start_claude_watcher.ps1`"" }\n if ($INSTALL_OPENCLAW) { $combinedStart += [char]10 + "& `"$homeDir\\.skill-insight\\start_openclaw_watcher.ps1`"" }\n $combinedStart += [char]10 + \'Write-Host "All watchers started!"\'\n Set-Content -Path "$homeDir\\.skill-insight\\start_watchers.ps1" -Value $combinedStart -Encoding UTF8\n\n $combinedStop = \'Write-Host "Stopping Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) { $combinedStop += [char]10 + "& `"$homeDir\\.skill-insight\\stop_claude_watcher.ps1`"" }\n if ($INSTALL_OPENCLAW) { $combinedStop += [char]10 + "& `"$homeDir\\.skill-insight\\stop_openclaw_watcher.ps1`"" }\n $combinedStop += [char]10 + \'Write-Host "All watchers stopped!"\'\n Set-Content -Path "$homeDir\\.skill-insight\\stop_watchers.ps1" -Value $combinedStop -Encoding UTF8\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 & "$homeDir\\.skill-insight\\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) { Write-Host " โ
OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts" }\nif ($INSTALL_CLAUDE) { Write-Host " โ
Claude Watcher: ~/.skill-insight/claude_watcher_client.ts" }\nif ($INSTALL_OPENCLAW) { Write-Host " โ
OpenClaw Watcher: ~/.skill-insight/openclaw_watcher_client.ts" }\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 Write-Host " Logs: ~/.skill-insight/logs/"\n}\n\nWrite-Host ""\nWrite-Host "Usage:"\nif ($INSTALL_OPENCODE) { Write-Host " 1. Run: opencode run \'hello\'" }\nif ($INSTALL_CLAUDE) { Write-Host " 2. Run: claude (restart terminal first)" }\nif ($INSTALL_OPENCLAW) { Write-Host " 3. OpenClaw will automatically monitor and upload telemetry" }\nWrite-Host "------------------------------------------------"'].join("\n");return new u.NextResponse(e,{headers:{"Content-Type":"text/plain; charset=utf-8"}})}{let e=["#!/bin/bash\n# =============================================================================\n# Skill-insight One-Click Setup\n# =============================================================================\n",'SKILL_INSIGHT_HOST="'+o+'"','SKILL_INSIGHT_BASE_URL="'+o+'"','\necho "๐ Fetching Skill-insight telemetry components from $SKILL_INSIGHT_BASE_URL..."\n\n# 1. Setup Directories\nmkdir -p "$HOME/.skill-insight"\nmkdir -p "$HOME/.skill-insight/logs"\nmkdir -p "$HOME/.opencode/plugins"\nmkdir -p "$HOME/.opencode/skills"\nmkdir -p "$HOME/.claude/projects"\nmkdir -p "$HOME/.openclaw/agents"\nmkdir -p ".opencode/skills"\necho "๐ Created necessary directories"\n\n# 2. Interactive Framework Selection with inquirer\necho ""\n\nSELECTOR_SCRIPT="$HOME/.skill-insight/framework_selector.mjs"\nSELECTOR_RESULT="$HOME/.skill-insight/.selector_result"\n\n# Install inquirer if not already installed\ncd "$HOME/.skill-insight"\nif [ ! -d "node_modules/inquirer" ]; then\n echo "๐ฆ Installing inquirer for interactive selection..."\n npm install inquirer --save 2>/dev/null\nfi\n\ncat > "$SELECTOR_SCRIPT" << \'SELECTOR_EOF\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'OpenClaw\', value: \'openclaw\' }\n];\n\nasync 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 const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.HOME + \'/.skill-insight/.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\nSELECTOR_EOF\n\n# Run the selector interactively from /dev/tty\nexport SELECTOR_RESULT_FILE="$SELECTOR_RESULT"\ncd "$HOME/.skill-insight" && npx -y tsx "$SELECTOR_SCRIPT" < /dev/tty\n\n# Read the selection result from file\nif [ -f "$SELECTOR_RESULT" ]; then\n SELECTED_FRAMEWORKS=$(cat "$SELECTOR_RESULT")\n rm -f "$SELECTOR_RESULT"\nelse\n SELECTED_FRAMEWORKS=""\nfi\n\n# Set installation flags based on selection\nINSTALL_OPENCODE=false\nINSTALL_CLAUDE=false\nINSTALL_OPENCLAW=false\n\nif [[ "$SELECTED_FRAMEWORKS" == *"opencode"* ]]; then\n INSTALL_OPENCODE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"claude"* ]]; then\n INSTALL_CLAUDE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"openclaw"* ]]; then\n INSTALL_OPENCLAW=true\nfi\n\n# Exit if nothing selected\nif [ "$INSTALL_OPENCODE" = "false" ] && [ "$INSTALL_CLAUDE" = "false" ] && [ "$INSTALL_OPENCLAW" = "false" ]; then\n echo "โ ๏ธ ๆช้ๆฉไปปไฝๆกๆถ็ปไปถ๏ผๅฐ่ทณ่ฟๆไปถๅฎ่ฃ
ใ"\n echo " ็ปง็ปญๆง่ก้
็ฝฎๆญฅ้ชค..."\n echo ""\nfi\n\n# 3. Download Components\nif [ "$INSTALL_OPENCODE" = "true" ]; then\n echo "โฌ Downloading OpenCode Plugin..."\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode" -o "$HOME/.opencode/plugins/Witty-Skill-Insight.ts"\nfi\n\nif [ "$INSTALL_CLAUDE" = "true" ]; then\n echo "โฌ Downloading Claude Code Watcher..."\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/claude-watcher" -o "$HOME/.skill-insight/claude_watcher_client.ts"\nfi\n\nif [ "$INSTALL_OPENCLAW" = "true" ]; then\n echo "โฌ Downloading OpenClaw Watcher..."\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/openclaw-watcher" -o "$HOME/.skill-insight/openclaw_watcher_client.ts"\nfi\n\n# 4. Configure ~/.skill-insight/.env\nSKILL_INSIGHT_CONFIG_FILE="$HOME/.skill-insight/.env"\nEXISTING_KEY=""\nEXISTING_HOST=""\nif [ -f "$SKILL_INSIGHT_CONFIG_FILE" ]; then\n EXISTING_KEY=$(grep \'^SKILL_INSIGHT_API_KEY=\' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_HOST=$(grep \'^SKILL_INSIGHT_HOST=\' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\nfi\n\n# -- API Key Logic --\nFINAL_KEY="$EXISTING_KEY"\nif [ -n "$EXISTING_KEY" ]; then\n echo "๐ Found existing API Key."\n read -p "๐ Use existing key? (y/N, Default: y): " USE_EXISTING < /dev/tty\n if [[ "$USE_EXISTING" =~ ^[Nn]$ ]]; then\n read -p "๐ Please enter your NEW API Key: " FINAL_KEY < /dev/tty\n fi\nelse\n echo "๐ SKILL_INSIGHT_API_KEY is not set."\n read -p "๐ Please enter your API Key: " FINAL_KEY < /dev/tty\nfi\n\n# -- Host Logic --\nFINAL_HOST="$SKILL_INSIGHT_HOST"\nif [ -n "$EXISTING_HOST" ] && [ "$EXISTING_HOST" != "$SKILL_INSIGHT_HOST" ]; then\n echo "๐ Current Host in config: $EXISTING_HOST"\n echo "๐ New Host detected: $SKILL_INSIGHT_HOST"\n read -p "๐ Change to new Host? (y/N, Default: y): " CHANGE_HOST < /dev/tty\n if [[ "$CHANGE_HOST" =~ ^[Nn]$ ]]; then\n FINAL_HOST="$EXISTING_HOST"\n fi\nelif [ -z "$EXISTING_HOST" ]; then\n FINAL_HOST="$SKILL_INSIGHT_HOST"\nfi\n\nif [ -z "$FINAL_KEY" ]; then\n echo "โ ๏ธ Warning: No API Key provided. Telemetry upload will fail until you set it in $SKILL_INSIGHT_CONFIG_FILE"\nfi\n\necho "โ๏ธ Updating configuration..."\ntouch "$SKILL_INSIGHT_CONFIG_FILE"\ncp "$SKILL_INSIGHT_CONFIG_FILE" "${SKILL_INSIGHT_CONFIG_FILE}.bak"\ngrep -v "^SKILL_INSIGHT_HOST=" "${SKILL_INSIGHT_CONFIG_FILE}.bak" | grep -v "^SKILL_INSIGHT_API_KEY=" > "$SKILL_INSIGHT_CONFIG_FILE"\necho "SKILL_INSIGHT_HOST=$FINAL_HOST" >> "$SKILL_INSIGHT_CONFIG_FILE"\necho "SKILL_INSIGHT_API_KEY=$FINAL_KEY" >> "$SKILL_INSIGHT_CONFIG_FILE"\nrm "${SKILL_INSIGHT_CONFIG_FILE}.bak"\necho "โ
Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"\n\n# 6. Install Watcher Dependencies\nif [ "$INSTALL_CLAUDE" = "true" ] || [ "$INSTALL_OPENCLAW" = "true" ]; then\n echo ""\n echo "๐ฆ Installing watcher dependencies..."\n if command -v npm &> /dev/null; then\n cd "$HOME/.skill-insight"\n if [ ! -f "package.json" ]; then\n echo \'{"name": "skill-insight-watcher", "version": "1.0.0", "type": "module", "dependencies": {}}\' > package.json\n fi\n npm install chokidar --save 2>/dev/null\n echo "โ
Dependencies installed"\n else\n echo "โ ๏ธ npm not found. Skipping dependency installation."\n fi\nfi\n\n# 7. Create Watcher Startup/Stop Scripts\nNEEDS_WATCHER_SCRIPTS=false\nif [ "$INSTALL_CLAUDE" = "true" ] || [ "$INSTALL_OPENCLAW" = "true" ]; then\n NEEDS_WATCHER_SCRIPTS=true\nfi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "๐ Creating watcher management scripts..."\n\n if [ "$INSTALL_CLAUDE" = "true" ]; then\n cat > "$HOME/.skill-insight/start_claude_watcher.sh" << \'WATCHER_EOF\'\n#!/bin/bash\npkill -f "claude_watcher_client.ts" 2>/dev/null\ncd "$HOME/.skill-insight" && nohup npx -y tsx "$HOME/.skill-insight/claude_watcher_client.ts" > "$HOME/.skill-insight/logs/claude_watcher.log" 2>&1 &\necho $! > "$HOME/.skill-insight/claude_watcher.pid"\necho "Claude watcher started with PID $(cat $HOME/.skill-insight/claude_watcher.pid)"\nWATCHER_EOF\n chmod +x "$HOME/.skill-insight/start_claude_watcher.sh"\n\n cat > "$HOME/.skill-insight/stop_claude_watcher.sh" << \'STOP_CLAUDE_EOF\'\n#!/bin/bash\npkill -f "claude_watcher_client.ts" 2>/dev/null\nrm -f "$HOME/.skill-insight/claude_watcher.pid"\necho "Claude watcher stopped"\nSTOP_CLAUDE_EOF\n chmod +x "$HOME/.skill-insight/stop_claude_watcher.sh"\n fi\n\n if [ "$INSTALL_OPENCLAW" = "true" ]; then\n cat > "$HOME/.skill-insight/start_openclaw_watcher.sh" << \'WATCHER_EOF\'\n#!/bin/bash\npkill -f "openclaw_watcher_client.ts" 2>/dev/null\ncd "$HOME/.skill-insight" && nohup npx -y tsx "$HOME/.skill-insight/openclaw_watcher_client.ts" > "$HOME/.skill-insight/logs/openclaw_watcher.log" 2>&1 &\necho $! > "$HOME/.skill-insight/openclaw_watcher.pid"\necho "OpenClaw watcher started with PID $(cat $HOME/.skill-insight/openclaw_watcher.pid)"\nWATCHER_EOF\n chmod +x "$HOME/.skill-insight/start_openclaw_watcher.sh"\n\n cat > "$HOME/.skill-insight/stop_openclaw_watcher.sh" << \'STOP_OPENCLAW_EOF\'\n#!/bin/bash\npkill -f "openclaw_watcher_client.ts" 2>/dev/null\nrm -f "$HOME/.skill-insight/openclaw_watcher.pid"\necho "OpenClaw watcher stopped"\nSTOP_OPENCLAW_EOF\n chmod +x "$HOME/.skill-insight/stop_openclaw_watcher.sh"\n fi\n\n cat > "$HOME/.skill-insight/start_watchers.sh" << \'WATCHER_HEADER\'\n#!/bin/bash\necho "Starting Skill-Insight watchers..."\nWATCHER_HEADER\n if [ "$INSTALL_CLAUDE" = "true" ]; then echo \'"$HOME/.skill-insight/start_claude_watcher.sh"\' >> "$HOME/.skill-insight/start_watchers.sh"; fi\n if [ "$INSTALL_OPENCLAW" = "true" ]; then echo \'"$HOME/.skill-insight/start_openclaw_watcher.sh"\' >> "$HOME/.skill-insight/start_watchers.sh"; fi\n echo \'echo "All watchers started!"\' >> "$HOME/.skill-insight/start_watchers.sh"\n chmod +x "$HOME/.skill-insight/start_watchers.sh"\n\n cat > "$HOME/.skill-insight/stop_watchers.sh" << \'STOP_HEADER\'\n#!/bin/bash\necho "Stopping Skill-Insight watchers..."\nSTOP_HEADER\n if [ "$INSTALL_CLAUDE" = "true" ]; then echo \'"$HOME/.skill-insight/stop_claude_watcher.sh"\' >> "$HOME/.skill-insight/stop_watchers.sh"; fi\n if [ "$INSTALL_OPENCLAW" = "true" ]; then echo \'"$HOME/.skill-insight/stop_openclaw_watcher.sh"\' >> "$HOME/.skill-insight/stop_watchers.sh"; fi\n echo \'echo "All watchers stopped!"\' >> "$HOME/.skill-insight/stop_watchers.sh"\n chmod +x "$HOME/.skill-insight/stop_watchers.sh"\nfi\n\n# 8. Start Watchers Now\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "๐ Starting telemetry watchers..."\n if command -v npx &> /dev/null; then\n "$HOME/.skill-insight/start_watchers.sh"\n else\n echo "โ ๏ธ Node.js (npx) not found. Skipping watcher startup."\n fi\nfi\n\n# 10. Final Summary\necho ""\necho "๐ Skill-Insight Telemetry: READY"\necho "------------------------------------------------"\necho "Installed Components:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " โ
OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " โ
Claude Watcher: ~/.skill-insight/claude_watcher_client.ts"; fi\nif [ "$INSTALL_OPENCLAW" = "true" ]; then echo " โ
OpenClaw Watcher: ~/.skill-insight/openclaw_watcher_client.ts"; fi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "Watcher Management:"\n echo " Start all: ~/.skill-insight/start_watchers.sh"\n echo " Stop all: ~/.skill-insight/stop_watchers.sh"\n echo " Logs: ~/.skill-insight/logs/"\nfi\n\necho ""\necho "Usage:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " 1. Run: opencode run \'hello\'"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " 2. Run: claude (restart terminal first)"; fi\nif [ "$INSTALL_OPENCLAW" = "true" ]; then echo " 3. OpenClaw will automatically monitor and upload telemetry"; fi\necho "------------------------------------------------"'].join("\n");return new u.NextResponse(e,{headers:{"Content-Type":"text/x-shellscript"}})}}e.s(["GET",()=>T],21965);var $=e.i(21965);let N=new n.AppRouteRouteModule({definition:{kind:t.RouteKind.APP_ROUTE,page:"/api/setup/route",pathname:"/api/setup",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/setup/route.ts",nextConfigOutput:"standalone",userland:$}),{workAsyncStorage:g,workUnitAsyncStorage:O,serverHooks:C}=N;function m(){return(0,i.patchFetch)({workAsyncStorage:g,workUnitAsyncStorage:O})}async function w(e,n,i){N.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let u="/api/setup/route";u=u.replace(/\/index$/,"")||"/";let T=await N.prepare(e,n,{srcPage:u,multiZoneDraftMode:!1});if(!T)return n.statusCode=400,n.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:$,params:g,nextConfig:O,parsedUrl:C,isDraftMode:m,prerenderManifest:w,routerServerContext:H,isOnDemandRevalidate:f,revalidateOnlyGenerated:A,resolvedPathname:R,clientReferenceManifest:k,serverActionsManifest:F}=T,P=(0,r.normalizeAppPath)(u),W=!!(w.dynamicRoutes[P]||w.routes[R]),G=async()=>((null==H?void 0:H.render404)?await H.render404(e,n,C,!1):n.end("This page could not be found"),null);if(W&&!m){let e=!!w.routes[R],n=w.dynamicRoutes[P];if(n&&!1===n.fallback&&!e){if(O.experimental.adapterPath)return await G();throw new d.NoFallbackError}}let D=null;!W||N.isDev||m||(D="/index"===(D=R)?"/":D);let y=!0===N.isDev||!W,K=W&&!y;F&&k&&(0,l.setManifestsSingleton)({page:u,clientReferenceManifest:k,serverActionsManifest:F});let v=e.method||"GET",x=(0,o.getTracer)(),b=x.getActiveScopeSpan(),U={params:g,prerenderManifest:w,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=>{n.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(n,t,i,s)=>N.onRequestError(e,n,i,s,H)},sharedContext:{buildId:$}},M=new a.NodeNextRequest(e),q=new a.NodeNextResponse(n),X=c.NextRequestAdapter.fromNodeNextRequest(M,(0,c.signalFromNodeResponse)(n));try{let l=async e=>N.handle(X,U).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":n.statusCode,"next.rsc":!1});let t=x.getRootSpanAttributes();if(!t)return;if(t.get("next.span_type")!==h.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${t.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=t.get("next.route");if(i){let n=`${v} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":n}),e.updateName(n)}else e.updateName(`${v} ${u}`)}),r=!!(0,s.getRequestMeta)(e,"minimalMode"),a=async s=>{var o,a;let c=async({previousCacheEntry:t})=>{try{if(!r&&f&&A&&!t)return n.statusCode=404,n.setHeader("x-nextjs-cache","REVALIDATED"),n.end("This page could not be found"),null;let o=await l(s);e.fetchMetrics=U.renderOpts.fetchMetrics;let a=U.renderOpts.pendingWaitUntil;a&&i.waitUntil&&(i.waitUntil(a),a=void 0);let c=U.renderOpts.collectedTags;if(!W)return await (0,_.sendResponse)(M,q,o,U.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),n=(0,I.toNodeOutgoingHttpHeaders)(o.headers);c&&(n[L.NEXT_CACHE_TAGS_HEADER]=c),!n["content-type"]&&e.type&&(n["content-type"]=e.type);let t=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=L.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,i=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=L.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:p.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:n},cacheControl:{revalidate:t,expire:i}}}}catch(n){throw(null==t?void 0:t.isStale)&&await N.onRequestError(e,n,{routerKind:"App Router",routePath:u,routeType:"route",revalidateReason:(0,S.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:f})},!1,H),n}},h=await N.handleResponse({req:e,nextConfig:O,cacheKey:D,routeKind:t.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:w,isRoutePPREnabled:!1,isOnDemandRevalidate:f,revalidateOnlyGenerated:A,responseGenerator:c,waitUntil:i.waitUntil,isMinimalMode:r});if(!W)return null;if((null==h||null==(o=h.value)?void 0:o.kind)!==p.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==h||null==(a=h.value)?void 0:a.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});r||n.setHeader("x-nextjs-cache",f?"REVALIDATED":h.isMiss?"MISS":h.isStale?"STALE":"HIT"),m&&n.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,I.fromNodeOutgoingHttpHeaders)(h.value.headers);return r&&W||d.delete(L.NEXT_CACHE_TAGS_HEADER),!h.cacheControl||n.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,E.getCacheControlHeader)(h.cacheControl)),await (0,_.sendResponse)(M,q,new Response(h.value.body,{headers:d,status:h.value.status||200})),null};b?await a(b):await x.withPropagatedContext(e.headers,()=>x.trace(h.BaseServerSpan.handleRequest,{spanName:`${v} ${u}`,kind:o.SpanKind.SERVER,attributes:{"http.method":v,"http.target":e.url}},a))}catch(n){if(n instanceof d.NoFallbackError||await N.onRequestError(e,n,{routerKind:"App Router",routePath:P,routeType:"route",revalidateReason:(0,S.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:f})},!1,H),W)throw n;return await (0,_.sendResponse)(M,q,new Response(null,{status:500})),null}}e.s(["handler",()=>w,"patchFetch",()=>m,"routeModule",()=>N,"serverHooks",()=>C,"workAsyncStorage",()=>g,"workUnitAsyncStorage",()=>O],26984)}];
|
|
1
|
+
module.exports=[26984,e=>{"use strict";var n=e.i(47909),t=e.i(74017),i=e.i(60476),o=e.i(59756),s=e.i(61916),l=e.i(74677),r=e.i(69741),a=e.i(16795),c=e.i(87718),S=e.i(95169),_=e.i(47587),I=e.i(66012),h=e.i(70101),E=e.i(26937),d=e.i(10372),p=e.i(93695);e.i(52474);var L=e.i(220),u=e.i(89171);async function T(e){let n,t,i=e.headers.get("x-forwarded-host")||e.headers.get("host")||"127.0.0.1:3000",o=e.headers.get("x-forwarded-proto")||"https";new URL(e.url).pathname.replace(/\/api\/setup\/?$/,"");let s=`${o}://${i}`;if("windows"==(n=e.headers.get("user-agent")||"",(t=e.headers.get("x-platform")||"")?"windows"===t.toLowerCase()?"windows":"unix":n.toLowerCase().includes("windows")?"windows":"unix")){let e=["# =============================================================================\n# Skill-insight One-Click Setup (PowerShell)\n# =============================================================================\n",'$SKILL_INSIGHT_HOST = "'+s+'"','$SKILL_INSIGHT_BASE_URL = "'+s+'"','\nWrite-Host "๐ Fetching Skill-insight telemetry components from $SKILL_INSIGHT_BASE_URL..."\n\n# 1. Setup Directories\n$homeDir = $env:USERPROFILE\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.skill-insight" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.skill-insight\\logs" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.opencode\\plugins" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.opencode\\skills" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.claude\\projects" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.openclaw\\agents" | 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 = "$homeDir\\.skill-insight\\framework_selector.mjs"\n$SELECTOR_RESULT = "$homeDir\\.skill-insight\\.selector_result"\n\n# Install inquirer if not already installed\nSet-Location "$homeDir\\.skill-insight"\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$selectorContent = @\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'OpenClaw\', value: \'openclaw\' }\n];\n\nasync 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 const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.USERPROFILE + \'\\\\.skill-insight\\\\.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\n\'@\n\nSet-Content -Path $SELECTOR_SCRIPT -Value $selectorContent -Encoding UTF8\n\n# Run the selector interactively\n$env:SELECTOR_RESULT_FILE = $SELECTOR_RESULT\nSet-Location "$homeDir\\.skill-insight"\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") "$homeDir\\.opencode\\plugins\\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 "$homeDir\\.opencode\\plugins\\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 "$homeDir\\.skill-insight\\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 "$homeDir\\.skill-insight\\openclaw_watcher_client.ts"\n}\n\n# 4. Configure ~/.skill-insight/.env\n$SKILL_INSIGHT_CONFIG_FILE = "$homeDir\\.skill-insight\\.env"\n$EXISTING_KEY = ""\n$EXISTING_HOST = ""\n$EXISTING_SHOW_TASK_STATS = ""\nif (Test-Path $SKILL_INSIGHT_CONFIG_FILE) {\n $content = Get-Content $SKILL_INSIGHT_CONFIG_FILE\n $keyLine = $content | Select-String \'^SKILL_INSIGHT_API_KEY=\' | Select-Object -First 1\n $hostLine = $content | Select-String \'^SKILL_INSIGHT_HOST=\' | Select-Object -First 1\n $showLine = $content | Select-String \'^SKILL_INSIGHT_SHOW_TASK_STATS=\' | Select-Object -First 1\n if ($keyLine) {\n $EXISTING_KEY = $keyLine.Line.Substring(\'SKILL_INSIGHT_API_KEY=\'.Length)\n }\n if ($hostLine) {\n $EXISTING_HOST = $hostLine.Line.Substring(\'SKILL_INSIGHT_HOST=\'.Length)\n }\n if ($showLine) {\n $EXISTING_SHOW_TASK_STATS = $showLine.Line.Substring(\'SKILL_INSIGHT_SHOW_TASK_STATS=\'.Length)\n }\n}\n\n# -- API Key Logic --\n$FINAL_KEY = $EXISTING_KEY\nif ($EXISTING_KEY) {\n Write-Host "๐ Found existing API Key."\n $USE_EXISTING = Read-Host "๐ Use existing key? (y/N, Default: y)"\n if ($USE_EXISTING -match \'^[Nn]$\') {\n $FINAL_KEY = Read-Host "๐ Please enter your NEW API Key"\n }\n} else {\n Write-Host "๐ SKILL_INSIGHT_API_KEY is not set."\n $FINAL_KEY = Read-Host "๐ Please enter your API Key"\n}\n\n# -- Host Logic --\n$FINAL_HOST = $SKILL_INSIGHT_HOST\nif ($EXISTING_HOST -and ($EXISTING_HOST -ne $SKILL_INSIGHT_HOST)) {\n Write-Host "๐ Current Host in config: $EXISTING_HOST"\n Write-Host "๐ New Host detected: $SKILL_INSIGHT_HOST"\n $CHANGE_HOST = Read-Host "๐ Change to new Host? (y/N, Default: y)"\n if ($CHANGE_HOST -match \'^[Nn]$\') {\n $FINAL_HOST = $EXISTING_HOST\n }\n} elseif (-not $EXISTING_HOST) {\n $FINAL_HOST = $SKILL_INSIGHT_HOST\n}\n\n$FINAL_SHOW_TASK_STATS = $EXISTING_SHOW_TASK_STATS\nif (-not $FINAL_SHOW_TASK_STATS) {\n $FINAL_SHOW_TASK_STATS = "true"\n}\n\nif (-not $FINAL_KEY) {\n Write-Host "โ ๏ธ Warning: No API Key provided. Telemetry upload will fail until you set it in $SKILL_INSIGHT_CONFIG_FILE"\n}\n\nWrite-Host "โ๏ธ Updating configuration..."\nNew-Item -ItemType File -Path $SKILL_INSIGHT_CONFIG_FILE -Force | Out-Null\nCopy-Item $SKILL_INSIGHT_CONFIG_FILE "$SKILL_INSIGHT_CONFIG_FILE.bak"\n$content = Get-Content "$SKILL_INSIGHT_CONFIG_FILE.bak"\n$content | Where-Object { $_ -notmatch \'^SKILL_INSIGHT_HOST=\' -and $_ -notmatch \'^SKILL_INSIGHT_API_KEY=\' -and $_ -notmatch \'^SKILL_INSIGHT_SHOW_TASK_STATS=\' } | Set-Content $SKILL_INSIGHT_CONFIG_FILE\nAdd-Content $SKILL_INSIGHT_CONFIG_FILE "SKILL_INSIGHT_HOST=$FINAL_HOST"\nAdd-Content $SKILL_INSIGHT_CONFIG_FILE "SKILL_INSIGHT_API_KEY=$FINAL_KEY"\nAdd-Content $SKILL_INSIGHT_CONFIG_FILE "SKILL_INSIGHT_SHOW_TASK_STATS=$FINAL_SHOW_TASK_STATS"\nRemove-Item "$SKILL_INSIGHT_CONFIG_FILE.bak" -Force\nWrite-Host "โ
Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"\n\n# 6. Install Watcher Dependencies\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 "$homeDir\\.skill-insight"\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 = $false\nif ($INSTALL_CLAUDE -or $INSTALL_OPENCLAW) {\n $NEEDS_WATCHER_SCRIPTS = $true\n}\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "๐ Creating watcher management scripts..."\n\n if ($INSTALL_CLAUDE) {\n $startScript = @\'\npkill -f "claude_watcher_client.ts" 2>/dev/null\nSet-Location "$env:USERPROFILE\\.skill-insight"\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", "$env:USERPROFILE\\.skill-insight\\claude_watcher_client.ts" -RedirectStandardOutput "$env:USERPROFILE\\.skill-insight\\logs\\claude_watcher.log" -RedirectStandardError "$env:USERPROFILE\\.skill-insight\\logs\\claude_watcher_error.log" -NoNewWindow\nWrite-Host "Claude watcher started"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\start_claude_watcher.ps1" -Value $startScript -Encoding UTF8\n\n $stopScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nRemove-Item "$env:USERPROFILE\\.skill-insight\\claude_watcher.pid" -Force -ErrorAction SilentlyContinue\nWrite-Host "Claude watcher stopped"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\stop_claude_watcher.ps1" -Value $stopScript -Encoding UTF8\n }\n\n if ($INSTALL_OPENCLAW) {\n $startScript = @\'\npkill -f "openclaw_watcher_client.ts" 2>/dev/null\nSet-Location "$env:USERPROFILE\\.skill-insight"\nStart-Process -FilePath "npx" -ArgumentList "-y", "tsx", "$env:USERPROFILE\\.skill-insight\\openclaw_watcher_client.ts" -RedirectStandardOutput "$env:USERPROFILE\\.skill-insight\\logs\\openclaw_watcher.log" -RedirectStandardError "$env:USERPROFILE\\.skill-insight\\logs\\openclaw_watcher_error.log" -NoNewWindow\nWrite-Host "OpenClaw watcher started"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\start_openclaw_watcher.ps1" -Value $startScript -Encoding UTF8\n\n $stopScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*openclaw_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nRemove-Item "$env:USERPROFILE\\.skill-insight\\openclaw_watcher.pid" -Force -ErrorAction SilentlyContinue\nWrite-Host "OpenClaw watcher stopped"\n\'@\n Set-Content -Path "$homeDir\\.skill-insight\\stop_openclaw_watcher.ps1" -Value $stopScript -Encoding UTF8\n }\n\n $combinedStart = \'Write-Host "Starting Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) { $combinedStart += [char]10 + "& `"$homeDir\\.skill-insight\\start_claude_watcher.ps1`"" }\n if ($INSTALL_OPENCLAW) { $combinedStart += [char]10 + "& `"$homeDir\\.skill-insight\\start_openclaw_watcher.ps1`"" }\n $combinedStart += [char]10 + \'Write-Host "All watchers started!"\'\n Set-Content -Path "$homeDir\\.skill-insight\\start_watchers.ps1" -Value $combinedStart -Encoding UTF8\n\n $combinedStop = \'Write-Host "Stopping Skill-Insight watchers..."\'\n if ($INSTALL_CLAUDE) { $combinedStop += [char]10 + "& `"$homeDir\\.skill-insight\\stop_claude_watcher.ps1`"" }\n if ($INSTALL_OPENCLAW) { $combinedStop += [char]10 + "& `"$homeDir\\.skill-insight\\stop_openclaw_watcher.ps1`"" }\n $combinedStop += [char]10 + \'Write-Host "All watchers stopped!"\'\n Set-Content -Path "$homeDir\\.skill-insight\\stop_watchers.ps1" -Value $combinedStop -Encoding UTF8\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 & "$homeDir\\.skill-insight\\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) { Write-Host " โ
OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts" }\nif ($INSTALL_CLAUDE) { Write-Host " โ
Claude Watcher: ~/.skill-insight/claude_watcher_client.ts" }\nif ($INSTALL_OPENCLAW) { Write-Host " โ
OpenClaw Watcher: ~/.skill-insight/openclaw_watcher_client.ts" }\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 Write-Host " Logs: ~/.skill-insight/logs/"\n}\n\nWrite-Host ""\nWrite-Host "Usage:"\nif ($INSTALL_OPENCODE) { Write-Host " 1. Run: opencode run \'hello\'" }\nif ($INSTALL_CLAUDE) { Write-Host " 2. Run: claude (restart terminal first)" }\nif ($INSTALL_OPENCLAW) { Write-Host " 3. OpenClaw will automatically monitor and upload telemetry" }\nWrite-Host "------------------------------------------------"'].join("\n");return new u.NextResponse(e,{headers:{"Content-Type":"text/plain; charset=utf-8"}})}{let e=["#!/bin/bash\n# =============================================================================\n# Skill-insight One-Click Setup\n# =============================================================================\n",'SKILL_INSIGHT_HOST="'+s+'"','SKILL_INSIGHT_BASE_URL="'+s+'"','OPENCODE_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/opencode"\n\necho "๐ Fetching Skill-insight telemetry components from $SKILL_INSIGHT_BASE_URL..."\n\n# 1. Setup Directories\nmkdir -p "$HOME/.skill-insight"\nmkdir -p "$HOME/.skill-insight/logs"\nmkdir -p "$HOME/.opencode/plugins"\nmkdir -p "$OPENCODE_CONFIG_DIR/plugins"\nmkdir -p "$HOME/.opencode/skills"\nmkdir -p "$HOME/.claude/projects"\nmkdir -p "$HOME/.openclaw/agents"\nmkdir -p ".opencode/skills"\necho "๐ Created necessary directories"\n\n# 2. Interactive Framework Selection with inquirer\necho ""\n\nSELECTOR_SCRIPT="$HOME/.skill-insight/framework_selector.mjs"\nSELECTOR_RESULT="$HOME/.skill-insight/.selector_result"\n\n# Install inquirer if not already installed\ncd "$HOME/.skill-insight"\nif [ ! -d "node_modules/inquirer" ]; then\n echo "๐ฆ Installing inquirer for interactive selection..."\n npm install inquirer --save 2>/dev/null\nfi\n\ncat > "$SELECTOR_SCRIPT" << \'SELECTOR_EOF\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'OpenClaw\', value: \'openclaw\' }\n];\n\nasync 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 const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.HOME + \'/.skill-insight/.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\nSELECTOR_EOF\n\n# Run the selector interactively from /dev/tty\nexport SELECTOR_RESULT_FILE="$SELECTOR_RESULT"\ncd "$HOME/.skill-insight" && npx -y tsx "$SELECTOR_SCRIPT" < /dev/tty\n\n# Read the selection result from file\nif [ -f "$SELECTOR_RESULT" ]; then\n SELECTED_FRAMEWORKS=$(cat "$SELECTOR_RESULT")\n rm -f "$SELECTOR_RESULT"\nelse\n SELECTED_FRAMEWORKS=""\nfi\n\n# Set installation flags based on selection\nINSTALL_OPENCODE=false\nINSTALL_CLAUDE=false\nINSTALL_OPENCLAW=false\n\nif [[ "$SELECTED_FRAMEWORKS" == *"opencode"* ]]; then\n INSTALL_OPENCODE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"claude"* ]]; then\n INSTALL_CLAUDE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"openclaw"* ]]; then\n INSTALL_OPENCLAW=true\nfi\n\n# Exit if nothing selected\nif [ "$INSTALL_OPENCODE" = "false" ] && [ "$INSTALL_CLAUDE" = "false" ] && [ "$INSTALL_OPENCLAW" = "false" ]; then\n echo "โ ๏ธ ๆช้ๆฉไปปไฝๆกๆถ็ปไปถ๏ผๅฐ่ทณ่ฟๆไปถๅฎ่ฃ
ใ"\n echo " ็ปง็ปญๆง่ก้
็ฝฎๆญฅ้ชค..."\n echo ""\nfi\n\n# 3. Download Components\nif [ "$INSTALL_OPENCODE" = "true" ]; then\n echo "โฌ Downloading OpenCode Plugin..."\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts"\n cp "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts" "$HOME/.opencode/plugins/Witty-Skill-Insight.ts" 2>/dev/null || true\n echo "โฌ Installing OpenCode commands..."\n mkdir -p "$OPENCODE_CONFIG_DIR/commands"\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode-commands/si-optimizer" -o "$OPENCODE_CONFIG_DIR/commands/si-optimizer.md"\n echo "โฌ Downloading OpenCode TUI Plugin..."\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/opencode-tui" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"\n cp "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx" "$HOME/.opencode/plugins/Witty-Skill-Insight.tui.tsx" 2>/dev/null || true\n export TUI_PLUGIN_PATH="$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"\n export TUI_CONFIG_FILE="$OPENCODE_CONFIG_DIR/tui.json"\n if command -v node &> /dev/null; then\n node - <<\'NODE\'\nconst fs = require("fs");\nconst path = require("path");\nconst file = process.env.TUI_CONFIG_FILE;\nconst pluginPath = process.env.TUI_PLUGIN_PATH;\nlet data = {};\ntry {\n if (fs.existsSync(file)) {\n const text = fs.readFileSync(file, "utf8");\n data = text && text.trim() ? JSON.parse(text) : {};\n }\n} catch {}\nif (!data || typeof data !== "object") data = {};\nconst list = Array.isArray(data.plugin) ? data.plugin.slice() : [];\nif (pluginPath && !list.includes(pluginPath)) list.push(pluginPath);\ndata.plugin = list;\nfs.mkdirSync(path.dirname(file), { recursive: true });\nfs.writeFileSync(file, JSON.stringify(data, null, 2));\nNODE\n else\n echo "โ ๏ธ node not found; skip TUI plugin config patch."\n fi\nfi\n\nif [ "$INSTALL_CLAUDE" = "true" ]; then\n echo "โฌ Downloading Claude Code Watcher..."\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/claude-watcher" -o "$HOME/.skill-insight/claude_watcher_client.ts"\nfi\n\nif [ "$INSTALL_OPENCLAW" = "true" ]; then\n echo "โฌ Downloading OpenClaw Watcher..."\n curl -sSf "$SKILL_INSIGHT_BASE_URL/api/setup/openclaw-watcher" -o "$HOME/.skill-insight/openclaw_watcher_client.ts"\nfi\n\n# 4. Configure ~/.skill-insight/.env\nSKILL_INSIGHT_CONFIG_FILE="$HOME/.skill-insight/.env"\nEXISTING_KEY=""\nEXISTING_HOST=""\nEXISTING_SHOW_TASK_STATS=""\nif [ -f "$SKILL_INSIGHT_CONFIG_FILE" ]; then\n EXISTING_KEY=$(grep \'^SKILL_INSIGHT_API_KEY=\' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_HOST=$(grep \'^SKILL_INSIGHT_HOST=\' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_SHOW_TASK_STATS=$(grep \'^SKILL_INSIGHT_SHOW_TASK_STATS=\' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\nfi\n\n# -- API Key Logic --\nFINAL_KEY="$EXISTING_KEY"\nif [ -n "$EXISTING_KEY" ]; then\n echo "๐ Found existing API Key."\n read -p "๐ Use existing key? (y/N, Default: y): " USE_EXISTING < /dev/tty\n if [[ "$USE_EXISTING" =~ ^[Nn]$ ]]; then\n read -p "๐ Please enter your NEW API Key: " FINAL_KEY < /dev/tty\n fi\nelse\n echo "๐ SKILL_INSIGHT_API_KEY is not set."\n read -p "๐ Please enter your API Key: " FINAL_KEY < /dev/tty\nfi\n\n# -- Host Logic --\nFINAL_HOST="$SKILL_INSIGHT_HOST"\nif [ -n "$EXISTING_HOST" ] && [ "$EXISTING_HOST" != "$SKILL_INSIGHT_HOST" ]; then\n echo "๐ Current Host in config: $EXISTING_HOST"\n echo "๐ New Host detected: $SKILL_INSIGHT_HOST"\n read -p "๐ Change to new Host? (y/N, Default: y): " CHANGE_HOST < /dev/tty\n if [[ "$CHANGE_HOST" =~ ^[Nn]$ ]]; then\n FINAL_HOST="$EXISTING_HOST"\n fi\nelif [ -z "$EXISTING_HOST" ]; then\n FINAL_HOST="$SKILL_INSIGHT_HOST"\nfi\n\nFINAL_SHOW_TASK_STATS="$EXISTING_SHOW_TASK_STATS"\nif [ -z "$FINAL_SHOW_TASK_STATS" ]; then\n FINAL_SHOW_TASK_STATS="true"\nfi\n\nif [ -z "$FINAL_KEY" ]; then\n echo "โ ๏ธ Warning: No API Key provided. Telemetry upload will fail until you set it in $SKILL_INSIGHT_CONFIG_FILE"\nfi\n\necho "โ๏ธ Updating configuration..."\ntouch "$SKILL_INSIGHT_CONFIG_FILE"\ncp "$SKILL_INSIGHT_CONFIG_FILE" "${SKILL_INSIGHT_CONFIG_FILE}.bak"\ngrep -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"\necho "SKILL_INSIGHT_HOST=$FINAL_HOST" >> "$SKILL_INSIGHT_CONFIG_FILE"\necho "SKILL_INSIGHT_API_KEY=$FINAL_KEY" >> "$SKILL_INSIGHT_CONFIG_FILE"\necho "SKILL_INSIGHT_SHOW_TASK_STATS=$FINAL_SHOW_TASK_STATS" >> "$SKILL_INSIGHT_CONFIG_FILE"\nrm "${SKILL_INSIGHT_CONFIG_FILE}.bak"\necho "โ
Configuration updated at $SKILL_INSIGHT_CONFIG_FILE"\n\n# 6. Install Watcher Dependencies\nif [ "$INSTALL_CLAUDE" = "true" ] || [ "$INSTALL_OPENCLAW" = "true" ]; then\n echo ""\n echo "๐ฆ Installing watcher dependencies..."\n if command -v npm &> /dev/null; then\n cd "$HOME/.skill-insight"\n if [ ! -f "package.json" ]; then\n echo \'{"name": "skill-insight-watcher", "version": "1.0.0", "type": "module", "dependencies": {}}\' > package.json\n fi\n npm install chokidar --save 2>/dev/null\n echo "โ
Dependencies installed"\n else\n echo "โ ๏ธ npm not found. Skipping dependency installation."\n fi\nfi\n\n# 7. Create Watcher Startup/Stop Scripts\nNEEDS_WATCHER_SCRIPTS=false\nif [ "$INSTALL_CLAUDE" = "true" ] || [ "$INSTALL_OPENCLAW" = "true" ]; then\n NEEDS_WATCHER_SCRIPTS=true\nfi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "๐ Creating watcher management scripts..."\n\n if [ "$INSTALL_CLAUDE" = "true" ]; then\n cat > "$HOME/.skill-insight/start_claude_watcher.sh" << \'WATCHER_EOF\'\n#!/bin/bash\npkill -f "claude_watcher_client.ts" 2>/dev/null\ncd "$HOME/.skill-insight" && nohup npx -y tsx "$HOME/.skill-insight/claude_watcher_client.ts" > "$HOME/.skill-insight/logs/claude_watcher.log" 2>&1 &\necho $! > "$HOME/.skill-insight/claude_watcher.pid"\necho "Claude watcher started with PID $(cat $HOME/.skill-insight/claude_watcher.pid)"\nWATCHER_EOF\n chmod +x "$HOME/.skill-insight/start_claude_watcher.sh"\n\n cat > "$HOME/.skill-insight/stop_claude_watcher.sh" << \'STOP_CLAUDE_EOF\'\n#!/bin/bash\npkill -f "claude_watcher_client.ts" 2>/dev/null\nrm -f "$HOME/.skill-insight/claude_watcher.pid"\necho "Claude watcher stopped"\nSTOP_CLAUDE_EOF\n chmod +x "$HOME/.skill-insight/stop_claude_watcher.sh"\n fi\n\n if [ "$INSTALL_OPENCLAW" = "true" ]; then\n cat > "$HOME/.skill-insight/start_openclaw_watcher.sh" << \'WATCHER_EOF\'\n#!/bin/bash\npkill -f "openclaw_watcher_client.ts" 2>/dev/null\ncd "$HOME/.skill-insight" && nohup npx -y tsx "$HOME/.skill-insight/openclaw_watcher_client.ts" > "$HOME/.skill-insight/logs/openclaw_watcher.log" 2>&1 &\necho $! > "$HOME/.skill-insight/openclaw_watcher.pid"\necho "OpenClaw watcher started with PID $(cat $HOME/.skill-insight/openclaw_watcher.pid)"\nWATCHER_EOF\n chmod +x "$HOME/.skill-insight/start_openclaw_watcher.sh"\n\n cat > "$HOME/.skill-insight/stop_openclaw_watcher.sh" << \'STOP_OPENCLAW_EOF\'\n#!/bin/bash\npkill -f "openclaw_watcher_client.ts" 2>/dev/null\nrm -f "$HOME/.skill-insight/openclaw_watcher.pid"\necho "OpenClaw watcher stopped"\nSTOP_OPENCLAW_EOF\n chmod +x "$HOME/.skill-insight/stop_openclaw_watcher.sh"\n fi\n\n cat > "$HOME/.skill-insight/start_watchers.sh" << \'WATCHER_HEADER\'\n#!/bin/bash\necho "Starting Skill-Insight watchers..."\nWATCHER_HEADER\n if [ "$INSTALL_CLAUDE" = "true" ]; then echo \'"$HOME/.skill-insight/start_claude_watcher.sh"\' >> "$HOME/.skill-insight/start_watchers.sh"; fi\n if [ "$INSTALL_OPENCLAW" = "true" ]; then echo \'"$HOME/.skill-insight/start_openclaw_watcher.sh"\' >> "$HOME/.skill-insight/start_watchers.sh"; fi\n echo \'echo "All watchers started!"\' >> "$HOME/.skill-insight/start_watchers.sh"\n chmod +x "$HOME/.skill-insight/start_watchers.sh"\n\n cat > "$HOME/.skill-insight/stop_watchers.sh" << \'STOP_HEADER\'\n#!/bin/bash\necho "Stopping Skill-Insight watchers..."\nSTOP_HEADER\n if [ "$INSTALL_CLAUDE" = "true" ]; then echo \'"$HOME/.skill-insight/stop_claude_watcher.sh"\' >> "$HOME/.skill-insight/stop_watchers.sh"; fi\n if [ "$INSTALL_OPENCLAW" = "true" ]; then echo \'"$HOME/.skill-insight/stop_openclaw_watcher.sh"\' >> "$HOME/.skill-insight/stop_watchers.sh"; fi\n echo \'echo "All watchers stopped!"\' >> "$HOME/.skill-insight/stop_watchers.sh"\n chmod +x "$HOME/.skill-insight/stop_watchers.sh"\nfi\n\n# 8. Start Watchers Now\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "๐ Starting telemetry watchers..."\n if command -v npx &> /dev/null; then\n "$HOME/.skill-insight/start_watchers.sh"\n else\n echo "โ ๏ธ Node.js (npx) not found. Skipping watcher startup."\n fi\nfi\n\n# 10. Final Summary\necho ""\necho "๐ Skill-Insight Telemetry: READY"\necho "------------------------------------------------"\necho "Installed Components:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " โ
OpenCode Plugin: ~/.opencode/plugins/Witty-Skill-Insight.ts"; fi\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " โ
OpenCode Command: ~/.config/opencode/commands/si-optimizer.md"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " โ
Claude Watcher: ~/.skill-insight/claude_watcher_client.ts"; fi\nif [ "$INSTALL_OPENCLAW" = "true" ]; then echo " โ
OpenClaw Watcher: ~/.skill-insight/openclaw_watcher_client.ts"; fi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "Watcher Management:"\n echo " Start all: ~/.skill-insight/start_watchers.sh"\n echo " Stop all: ~/.skill-insight/stop_watchers.sh"\n echo " Logs: ~/.skill-insight/logs/"\nfi\n\necho ""\necho "Usage:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " 1. Run: opencode run \'hello\'"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " 2. Run: claude (restart terminal first)"; fi\nif [ "$INSTALL_OPENCLAW" = "true" ]; then echo " 3. OpenClaw will automatically monitor and upload telemetry"; fi\necho "------------------------------------------------"'].join("\n");return new u.NextResponse(e,{headers:{"Content-Type":"text/x-shellscript"}})}}e.s(["GET",()=>T],21965);var $=e.i(21965);let N=new n.AppRouteRouteModule({definition:{kind:t.RouteKind.APP_ROUTE,page:"/api/setup/route",pathname:"/api/setup",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/setup/route.ts",nextConfigOutput:"standalone",userland:$}),{workAsyncStorage:O,workUnitAsyncStorage:g,serverHooks:C}=N;function f(){return(0,i.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:g})}async function H(e,n,i){N.isDev&&(0,o.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let u="/api/setup/route";u=u.replace(/\/index$/,"")||"/";let T=await N.prepare(e,n,{srcPage:u,multiZoneDraftMode:!1});if(!T)return n.statusCode=400,n.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:$,params:O,nextConfig:g,parsedUrl:C,isDraftMode:f,prerenderManifest:H,routerServerContext:m,isOnDemandRevalidate:A,revalidateOnlyGenerated:w,resolvedPathname:R,clientReferenceManifest:F,serverActionsManifest:P}=T,k=(0,r.normalizeAppPath)(u),G=!!(H.dynamicRoutes[k]||H.routes[R]),W=async()=>((null==m?void 0:m.render404)?await m.render404(e,n,C,!1):n.end("This page could not be found"),null);if(G&&!f){let e=!!H.routes[R],n=H.dynamicRoutes[k];if(n&&!1===n.fallback&&!e){if(g.experimental.adapterPath)return await W();throw new p.NoFallbackError}}let D=null;!G||N.isDev||f||(D="/index"===(D=R)?"/":D);let y=!0===N.isDev||!G,K=G&&!y;P&&F&&(0,l.setManifestsSingleton)({page:u,clientReferenceManifest:F,serverActionsManifest:P});let v=e.method||"GET",x=(0,s.getTracer)(),U=x.getActiveScopeSpan(),b={params:O,prerenderManifest:H,renderOpts:{experimental:{authInterrupts:!!g.experimental.authInterrupts},cacheComponents:!!g.cacheComponents,supportsDynamicResponse:y,incrementalCache:(0,o.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:g.cacheLife,waitUntil:i.waitUntil,onClose:e=>{n.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(n,t,i,o)=>N.onRequestError(e,n,i,o,m)},sharedContext:{buildId:$}},M=new a.NodeNextRequest(e),X=new a.NodeNextResponse(n),q=c.NextRequestAdapter.fromNodeNextRequest(M,(0,c.signalFromNodeResponse)(n));try{let l=async e=>N.handle(q,b).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":n.statusCode,"next.rsc":!1});let t=x.getRootSpanAttributes();if(!t)return;if(t.get("next.span_type")!==S.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${t.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=t.get("next.route");if(i){let n=`${v} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":n}),e.updateName(n)}else e.updateName(`${v} ${u}`)}),r=!!(0,o.getRequestMeta)(e,"minimalMode"),a=async o=>{var s,a;let c=async({previousCacheEntry:t})=>{try{if(!r&&A&&w&&!t)return n.statusCode=404,n.setHeader("x-nextjs-cache","REVALIDATED"),n.end("This page could not be found"),null;let s=await l(o);e.fetchMetrics=b.renderOpts.fetchMetrics;let a=b.renderOpts.pendingWaitUntil;a&&i.waitUntil&&(i.waitUntil(a),a=void 0);let c=b.renderOpts.collectedTags;if(!G)return await (0,I.sendResponse)(M,X,s,b.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),n=(0,h.toNodeOutgoingHttpHeaders)(s.headers);c&&(n[d.NEXT_CACHE_TAGS_HEADER]=c),!n["content-type"]&&e.type&&(n["content-type"]=e.type);let t=void 0!==b.renderOpts.collectedRevalidate&&!(b.renderOpts.collectedRevalidate>=d.INFINITE_CACHE)&&b.renderOpts.collectedRevalidate,i=void 0===b.renderOpts.collectedExpire||b.renderOpts.collectedExpire>=d.INFINITE_CACHE?void 0:b.renderOpts.collectedExpire;return{value:{kind:L.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:n},cacheControl:{revalidate:t,expire:i}}}}catch(n){throw(null==t?void 0:t.isStale)&&await N.onRequestError(e,n,{routerKind:"App Router",routePath:u,routeType:"route",revalidateReason:(0,_.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:A})},!1,m),n}},S=await N.handleResponse({req:e,nextConfig:g,cacheKey:D,routeKind:t.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:H,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:w,responseGenerator:c,waitUntil:i.waitUntil,isMinimalMode:r});if(!G)return null;if((null==S||null==(s=S.value)?void 0:s.kind)!==L.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==S||null==(a=S.value)?void 0:a.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});r||n.setHeader("x-nextjs-cache",A?"REVALIDATED":S.isMiss?"MISS":S.isStale?"STALE":"HIT"),f&&n.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,h.fromNodeOutgoingHttpHeaders)(S.value.headers);return r&&G||p.delete(d.NEXT_CACHE_TAGS_HEADER),!S.cacheControl||n.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,E.getCacheControlHeader)(S.cacheControl)),await (0,I.sendResponse)(M,X,new Response(S.value.body,{headers:p,status:S.value.status||200})),null};U?await a(U):await x.withPropagatedContext(e.headers,()=>x.trace(S.BaseServerSpan.handleRequest,{spanName:`${v} ${u}`,kind:s.SpanKind.SERVER,attributes:{"http.method":v,"http.target":e.url}},a))}catch(n){if(n instanceof p.NoFallbackError||await N.onRequestError(e,n,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,_.getRevalidateReason)({isStaticGeneration:K,isOnDemandRevalidate:A})},!1,m),G)throw n;return await (0,I.sendResponse)(M,X,new Response(null,{status:500})),null}}e.s(["handler",()=>H,"patchFetch",()=>f,"routeModule",()=>N,"serverHooks",()=>C,"workAsyncStorage",()=>O,"workUnitAsyncStorage",()=>g],26984)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_f42faeee.js.map
|