@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,216 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Skill-Insight Skill Synchronizer
|
|
4
|
-
*
|
|
5
|
-
* Fetches configured skills from Dashboard and installs them locally.
|
|
6
|
-
* Usage: node sync_skills.js [--check-only] [--agent <name>]
|
|
7
|
-
*
|
|
8
|
-
* Requires: ~/.skill-insight/.env configuration
|
|
9
|
-
*/
|
|
10
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
-
}
|
|
16
|
-
Object.defineProperty(o, k2, desc);
|
|
17
|
-
}) : (function(o, m, k, k2) {
|
|
18
|
-
if (k2 === undefined) k2 = k;
|
|
19
|
-
o[k2] = m[k];
|
|
20
|
-
}));
|
|
21
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
-
}) : function(o, v) {
|
|
24
|
-
o["default"] = v;
|
|
25
|
-
});
|
|
26
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
-
var ownKeys = function(o) {
|
|
28
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
-
var ar = [];
|
|
30
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
-
return ar;
|
|
32
|
-
};
|
|
33
|
-
return ownKeys(o);
|
|
34
|
-
};
|
|
35
|
-
return function (mod) {
|
|
36
|
-
if (mod && mod.__esModule) return mod;
|
|
37
|
-
var result = {};
|
|
38
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
-
__setModuleDefault(result, mod);
|
|
40
|
-
return result;
|
|
41
|
-
};
|
|
42
|
-
})();
|
|
43
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
const fs = __importStar(require("fs"));
|
|
45
|
-
const http = __importStar(require("http"));
|
|
46
|
-
const https = __importStar(require("https"));
|
|
47
|
-
const os = __importStar(require("os"));
|
|
48
|
-
const path = __importStar(require("path"));
|
|
49
|
-
const AGENTS_DIR_MAP = {
|
|
50
|
-
"opencode": ".opencode/skills",
|
|
51
|
-
"openhands": ".openhands/skills",
|
|
52
|
-
"claude": ".claude/skills",
|
|
53
|
-
"deepagents": ".deepagents/skills"
|
|
54
|
-
};
|
|
55
|
-
function loadConfiguration() {
|
|
56
|
-
let config = {};
|
|
57
|
-
try {
|
|
58
|
-
const envPath = path.join(os.homedir(), '.skill-insight', '.env');
|
|
59
|
-
if (fs.existsSync(envPath)) {
|
|
60
|
-
const content = fs.readFileSync(envPath, 'utf8');
|
|
61
|
-
content.split('\n').forEach(line => {
|
|
62
|
-
const match = line.match(/^\s*([\w_]+)\s*=\s*(.*)?\s*$/);
|
|
63
|
-
if (match && match[1]) {
|
|
64
|
-
config[match[1]] = (match[2] || '').trim().replace(/^['"](.*)['"]$/, '$1');
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (e) { }
|
|
70
|
-
return {
|
|
71
|
-
apiKey: config['SKILL_INSIGHT_API_KEY'] || process.env.SKILL_INSIGHT_API_KEY,
|
|
72
|
-
host: config['SKILL_INSIGHT_HOST'] || process.env.SKILL_INSIGHT_HOST || '127.0.0.1:3000'
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
async function fetchManifest(host) {
|
|
76
|
-
const urlStr = host.match(/^https?:\/\//) ? host : `http://${host}`;
|
|
77
|
-
const parsedUrl = new URL(urlStr);
|
|
78
|
-
const requestModule = parsedUrl.protocol === 'https:' ? https : http;
|
|
79
|
-
return new Promise((resolve, reject) => {
|
|
80
|
-
const req = requestModule.get(`${urlStr}/api/sync/manifest`, (res) => {
|
|
81
|
-
if (res.statusCode !== 200) {
|
|
82
|
-
reject(new Error(`Failed to fetch manifest: ${res.statusCode}`));
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
let data = '';
|
|
86
|
-
res.on('data', chunk => data += chunk);
|
|
87
|
-
res.on('end', () => {
|
|
88
|
-
try {
|
|
89
|
-
resolve(JSON.parse(data));
|
|
90
|
-
}
|
|
91
|
-
catch (e) {
|
|
92
|
-
reject(e);
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
req.on('error', reject);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
function ensureDir(dirPath) {
|
|
100
|
-
if (!fs.existsSync(dirPath)) {
|
|
101
|
-
fs.mkdirSync(dirPath, { recursive: true });
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Simple unzip implementation using zlib if available or just raw write if not zipped
|
|
105
|
-
// Note: This is a placeholder. Real implementations use 'adm-zip' or 'unzip' command.
|
|
106
|
-
// For simplicity in a script without dependencies, we'll assume the /download endpoint returns raw content for single file
|
|
107
|
-
// or we use system unzip command.
|
|
108
|
-
async function downloadAndInstall(host, downloadPath, targetDir) {
|
|
109
|
-
const urlStr = host.match(/^https?:\/\//) ? host : `http://${host}`;
|
|
110
|
-
const parsedUrl = new URL(urlStr + downloadPath);
|
|
111
|
-
const requestModule = parsedUrl.protocol === 'https:' ? https : http;
|
|
112
|
-
// Use system curl/unzip if available for robustness
|
|
113
|
-
const tempZip = path.join(os.tmpdir(), `witty_skill_${Date.now()}.zip`);
|
|
114
|
-
return new Promise((resolve, reject) => {
|
|
115
|
-
const file = fs.createWriteStream(tempZip);
|
|
116
|
-
const req = requestModule.get(parsedUrl.href, (res) => {
|
|
117
|
-
if (res.statusCode !== 200) {
|
|
118
|
-
reject(new Error(`Download failed: ${res.statusCode}`));
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
res.pipe(file);
|
|
122
|
-
file.on('finish', () => {
|
|
123
|
-
file.close();
|
|
124
|
-
// Unzip
|
|
125
|
-
try {
|
|
126
|
-
// Try unzip command
|
|
127
|
-
const { execSync } = require('child_process');
|
|
128
|
-
ensureDir(targetDir);
|
|
129
|
-
// Clear target first? Maybe dangerous. Better overwrite.
|
|
130
|
-
execSync(`unzip -o "${tempZip}" -d "${targetDir}"`, { stdio: 'ignore' });
|
|
131
|
-
fs.unlinkSync(tempZip);
|
|
132
|
-
resolve();
|
|
133
|
-
}
|
|
134
|
-
catch (e) {
|
|
135
|
-
// Fallback or error
|
|
136
|
-
fs.unlinkSync(tempZip);
|
|
137
|
-
reject(e);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
req.on('error', (err) => {
|
|
142
|
-
fs.unlinkSync(tempZip);
|
|
143
|
-
reject(err);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
async function syncSkills(targetAgent) {
|
|
148
|
-
const { host } = loadConfiguration();
|
|
149
|
-
console.log(`🔄 Checking for skill updates from ${host}...`);
|
|
150
|
-
try {
|
|
151
|
-
const manifest = await fetchManifest(host);
|
|
152
|
-
const remoteSkills = manifest.skills || [];
|
|
153
|
-
if (remoteSkills.length === 0) {
|
|
154
|
-
console.log("✓ No skills configured on dashboard.");
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
const agents = targetAgent ? [targetAgent] : Object.keys(AGENTS_DIR_MAP);
|
|
158
|
-
let updatedCount = 0;
|
|
159
|
-
for (const agent of agents) {
|
|
160
|
-
const relativePath = AGENTS_DIR_MAP[agent];
|
|
161
|
-
if (!relativePath)
|
|
162
|
-
continue;
|
|
163
|
-
// Resolve path relative to CWD (where user runs command)
|
|
164
|
-
// OR relative to HOME? Standard is usually project root or HOME based on agent.
|
|
165
|
-
// For global tools like OpenCode/Claude, it's usually ~/.opencode/skills
|
|
166
|
-
// But AGENTS_DIR_MAP keys start with .
|
|
167
|
-
// Let's assume paths are relative to CWD (Current Working Directory)
|
|
168
|
-
// This prevents polluting global ~/.opencode, allowing project-specific skills
|
|
169
|
-
const skillsDir = path.join(process.cwd(), relativePath);
|
|
170
|
-
const manifestPath = path.join(skillsDir, 'manifest.json');
|
|
171
|
-
let localManifest = {};
|
|
172
|
-
try {
|
|
173
|
-
if (fs.existsSync(manifestPath)) {
|
|
174
|
-
localManifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
catch (e) { }
|
|
178
|
-
for (const skill of remoteSkills) {
|
|
179
|
-
const localVer = localManifest[skill.name]?.version || -1;
|
|
180
|
-
if (skill.version > localVer) {
|
|
181
|
-
console.log(`⬇️ [${agent}] Updating ${skill.name} (v${localVer} -> v${skill.version})...`);
|
|
182
|
-
const targetSkillDir = path.join(skillsDir, skill.name);
|
|
183
|
-
try {
|
|
184
|
-
await downloadAndInstall(host, skill.downloadUrl, targetSkillDir);
|
|
185
|
-
localManifest[skill.name] = {
|
|
186
|
-
version: skill.version,
|
|
187
|
-
updatedAt: new Date().toISOString()
|
|
188
|
-
};
|
|
189
|
-
updatedCount++;
|
|
190
|
-
}
|
|
191
|
-
catch (e) {
|
|
192
|
-
console.error(`❌ Failed to update ${skill.name}:`, e);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
if (updatedCount > 0) {
|
|
197
|
-
ensureDir(skillsDir);
|
|
198
|
-
fs.writeFileSync(manifestPath, JSON.stringify(localManifest, null, 2));
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (updatedCount > 0) {
|
|
202
|
-
console.log(`✅ Synced ${updatedCount} skills.`);
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
console.log("✓ All skills up to date.");
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
catch (e) {
|
|
209
|
-
console.error("⚠️ Skill sync failed (Dashboard offline?):", e.message);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
// Run
|
|
213
|
-
const args = process.argv.slice(2);
|
|
214
|
-
const agentArgIndex = args.indexOf('--agent');
|
|
215
|
-
const targetAgent = agentArgIndex !== -1 ? args[agentArgIndex + 1] : undefined;
|
|
216
|
-
syncSkills(targetAgent);
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
const { execSync, spawn } = require('child_process')
|
|
2
|
-
const fs = require('fs')
|
|
3
|
-
const path = require('path')
|
|
4
|
-
const http = require('http')
|
|
5
|
-
const os = require('os')
|
|
6
|
-
|
|
7
|
-
function getDataRoot() {
|
|
8
|
-
if (process.env.SKILL_INSIGHT_DATA_DIR) {
|
|
9
|
-
return process.env.SKILL_INSIGHT_DATA_DIR
|
|
10
|
-
}
|
|
11
|
-
if (__dirname.includes('node_modules')) {
|
|
12
|
-
return path.join(os.homedir(), '.skill-insight')
|
|
13
|
-
}
|
|
14
|
-
return path.resolve(__dirname, '..')
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function migrateDataIfNeeded() {
|
|
18
|
-
const newDataRoot = path.join(os.homedir(), '.skill-insight')
|
|
19
|
-
const newDbPath = path.join(newDataRoot, 'data', 'witty_insight.db')
|
|
20
|
-
const oldDbPath = path.resolve(__dirname, '../data/witty_insight.db')
|
|
21
|
-
|
|
22
|
-
const newExists = fs.existsSync(newDbPath)
|
|
23
|
-
const oldExists = fs.existsSync(oldDbPath)
|
|
24
|
-
|
|
25
|
-
if (newExists && oldExists) {
|
|
26
|
-
console.log('Database already exists at new location, skipping migration')
|
|
27
|
-
return
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (newExists && !oldExists) {
|
|
31
|
-
console.log('Using existing database at ' + newDbPath)
|
|
32
|
-
return
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (!newExists && oldExists) {
|
|
36
|
-
console.log('Migrating database to new location...')
|
|
37
|
-
const newDataPath = path.join(newDataRoot, 'data')
|
|
38
|
-
if (!fs.existsSync(newDataPath)) {
|
|
39
|
-
fs.mkdirSync(newDataPath, { recursive: true })
|
|
40
|
-
}
|
|
41
|
-
fs.copyFileSync(oldDbPath, newDbPath)
|
|
42
|
-
console.log('✓ Database migrated to ' + newDbPath)
|
|
43
|
-
|
|
44
|
-
try { fs.renameSync(oldDbPath, oldDbPath + '.bak') } catch (e) {}
|
|
45
|
-
return
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
console.log('Creating new database at ' + newDbPath)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function findPidOnPort(port) {
|
|
52
|
-
const platform = process.platform
|
|
53
|
-
|
|
54
|
-
try {
|
|
55
|
-
if (platform === 'win32') {
|
|
56
|
-
const output = execSync(`netstat -ano | findstr :${port}`, { encoding: 'utf8' })
|
|
57
|
-
const lines = output.trim().split('\n')
|
|
58
|
-
for (const line of lines) {
|
|
59
|
-
const parts = line.trim().split(/\s+/)
|
|
60
|
-
if (parts.length >= 5) {
|
|
61
|
-
const localAddress = parts[1]
|
|
62
|
-
const state = parts[3]
|
|
63
|
-
const pid = parts[4]
|
|
64
|
-
const portMatch = localAddress.match(/:(\d+)$/)
|
|
65
|
-
if (portMatch && parseInt(portMatch[1]) === port && state === 'LISTENING') {
|
|
66
|
-
console.log(`[Windows] Found process ${pid} listening on port ${port}`)
|
|
67
|
-
return pid
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
console.log(`[Windows] No process found listening on port ${port}`)
|
|
72
|
-
} else {
|
|
73
|
-
if (fs.existsSync('/usr/bin/lsof') || fs.existsSync('/usr/sbin/lsof')) {
|
|
74
|
-
try {
|
|
75
|
-
const pid = execSync(`lsof -t -i:${port} -sTCP:LISTEN`, { encoding: 'utf8' })
|
|
76
|
-
if (pid.trim()) return pid.trim()
|
|
77
|
-
} catch (e) {}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (fs.existsSync('/bin/ss') || fs.existsSync('/usr/bin/ss')) {
|
|
81
|
-
try {
|
|
82
|
-
const output = execSync(`ss -lptn "sport = :${port}"`, { encoding: 'utf8' })
|
|
83
|
-
const match = output.match(/pid=(\d+)/)
|
|
84
|
-
if (match) return match[1]
|
|
85
|
-
} catch (e) {}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (fs.existsSync('/bin/netstat') || fs.existsSync('/usr/bin/netstat')) {
|
|
89
|
-
try {
|
|
90
|
-
const output = execSync(`netstat -nlp 2>/dev/null | grep ":${port} "`, { encoding: 'utf8' })
|
|
91
|
-
const match = output.match(/(\d+)\//)
|
|
92
|
-
if (match) return match[1]
|
|
93
|
-
} catch (e) {}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
try {
|
|
97
|
-
const output = execSync(`fuser ${port}/tcp 2>/dev/null`, { encoding: 'utf8' })
|
|
98
|
-
if (output.trim()) return output.trim()
|
|
99
|
-
} catch (e) {}
|
|
100
|
-
}
|
|
101
|
-
} catch (e) {}
|
|
102
|
-
|
|
103
|
-
return null
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function isPortListening(port) {
|
|
107
|
-
return new Promise((resolve) => {
|
|
108
|
-
const req = http.request({
|
|
109
|
-
hostname: 'localhost',
|
|
110
|
-
port: port,
|
|
111
|
-
path: '/',
|
|
112
|
-
method: 'HEAD',
|
|
113
|
-
timeout: 1000
|
|
114
|
-
}, (res) => {
|
|
115
|
-
resolve(true)
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
req.on('error', () => {
|
|
119
|
-
resolve(false)
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
req.on('timeout', () => {
|
|
123
|
-
req.destroy()
|
|
124
|
-
resolve(false)
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
req.end()
|
|
128
|
-
})
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function killProcess(pid) {
|
|
132
|
-
const platform = process.platform
|
|
133
|
-
|
|
134
|
-
try {
|
|
135
|
-
if (platform === 'win32') {
|
|
136
|
-
console.log(`[Windows] Attempting to kill process with PID ${pid} using taskkill...`)
|
|
137
|
-
execSync(`taskkill /F /PID ${pid}`, { stdio: 'ignore' })
|
|
138
|
-
console.log(`[Windows] Successfully killed process ${pid}`)
|
|
139
|
-
return true
|
|
140
|
-
} else {
|
|
141
|
-
console.log(`[Unix] Attempting to kill process with PID ${pid} using kill -9...`)
|
|
142
|
-
execSync(`kill -9 ${pid}`, { stdio: 'ignore' })
|
|
143
|
-
console.log(`[Unix] Successfully killed process ${pid}`)
|
|
144
|
-
return true
|
|
145
|
-
}
|
|
146
|
-
} catch (e) {
|
|
147
|
-
console.error(`Failed to kill process ${pid}: ${e.message}`)
|
|
148
|
-
return false
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function getPort(options) {
|
|
153
|
-
if (options.port) return options.port
|
|
154
|
-
if (process.env.PORT) return parseInt(process.env.PORT)
|
|
155
|
-
|
|
156
|
-
const envPath = path.join(process.cwd(), '.env')
|
|
157
|
-
if (fs.existsSync(envPath)) {
|
|
158
|
-
const envContent = fs.readFileSync(envPath, 'utf8')
|
|
159
|
-
const match = envContent.match(/^PORT=(\d+)$/m)
|
|
160
|
-
if (match) return parseInt(match[1])
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return 3000
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function ensureEnvFile(packageRoot) {
|
|
167
|
-
const root = getDataRoot()
|
|
168
|
-
const envPath = path.join(root, '.env')
|
|
169
|
-
const envExamplePath = path.join(path.resolve(__dirname, '..'), '.env.example')
|
|
170
|
-
|
|
171
|
-
if (!fs.existsSync(envPath) && fs.existsSync(envExamplePath)) {
|
|
172
|
-
console.log('No .env found. Initializing from .env.example...')
|
|
173
|
-
fs.mkdirSync(path.dirname(envPath), { recursive: true })
|
|
174
|
-
fs.copyFileSync(envExamplePath, envPath)
|
|
175
|
-
console.log('✓ .env file created at ' + envPath)
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function ensureDataDirectory(packageRoot) {
|
|
180
|
-
const root = getDataRoot()
|
|
181
|
-
const dataPath = path.join(root, 'data')
|
|
182
|
-
if (!fs.existsSync(dataPath)) {
|
|
183
|
-
console.log('Creating data directory...')
|
|
184
|
-
fs.mkdirSync(dataPath, { recursive: true })
|
|
185
|
-
console.log('✓ data directory created at ' + dataPath)
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
function runCommand(command, options = {}) {
|
|
190
|
-
return new Promise((resolve, reject) => {
|
|
191
|
-
console.log(`Running: ${command}`)
|
|
192
|
-
const [cmd, ...args] = command.split(' ')
|
|
193
|
-
const proc = spawn(cmd, args, {
|
|
194
|
-
stdio: 'inherit',
|
|
195
|
-
shell: true,
|
|
196
|
-
...options
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
proc.on('close', (code) => {
|
|
200
|
-
if (code === 0) {
|
|
201
|
-
resolve()
|
|
202
|
-
} else {
|
|
203
|
-
reject(new Error(`Command failed with code ${code}`))
|
|
204
|
-
}
|
|
205
|
-
})
|
|
206
|
-
})
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function sleep(ms) {
|
|
210
|
-
return new Promise(resolve => setTimeout(resolve, ms))
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function findAvailablePort(startPort = 3000, maxAttempts = 100) {
|
|
214
|
-
for (let port = startPort; port < startPort + maxAttempts; port++) {
|
|
215
|
-
const pid = findPidOnPort(port)
|
|
216
|
-
if (!pid) {
|
|
217
|
-
return port
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return startPort
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
module.exports = {
|
|
224
|
-
findPidOnPort,
|
|
225
|
-
killProcess,
|
|
226
|
-
getPort,
|
|
227
|
-
ensureEnvFile,
|
|
228
|
-
ensureDataDirectory,
|
|
229
|
-
runCommand,
|
|
230
|
-
sleep,
|
|
231
|
-
isPortListening,
|
|
232
|
-
findAvailablePort,
|
|
233
|
-
getDataRoot,
|
|
234
|
-
migrateDataIfNeeded
|
|
235
|
-
}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Setup script for skill-optimizer testing
|
|
4
|
-
# This script copies skill-optimizer to .opencode/skills directory
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
10
|
-
SKILL_SOURCE="$PROJECT_ROOT/skills/skill-optimizer"
|
|
11
|
-
SKILL_TARGET="$PROJECT_ROOT/.opencode/skills/skill-optimizer"
|
|
12
|
-
OVERWRITE_LOCAL=false
|
|
13
|
-
|
|
14
|
-
usage() {
|
|
15
|
-
echo "Usage: $(basename "$0") [--overwrite-local]"
|
|
16
|
-
echo ""
|
|
17
|
-
echo " --overwrite-local Overwrite local files in target (.env and .opt/)."
|
|
18
|
-
echo " Default: preserve existing .env and .opt/ if present."
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
for arg in "$@"; do
|
|
22
|
-
case "$arg" in
|
|
23
|
-
--overwrite-local)
|
|
24
|
-
OVERWRITE_LOCAL=true
|
|
25
|
-
;;
|
|
26
|
-
-h|--help)
|
|
27
|
-
usage
|
|
28
|
-
exit 0
|
|
29
|
-
;;
|
|
30
|
-
*)
|
|
31
|
-
echo "❌ Error: Unknown argument: $arg"
|
|
32
|
-
echo ""
|
|
33
|
-
usage
|
|
34
|
-
exit 1
|
|
35
|
-
;;
|
|
36
|
-
esac
|
|
37
|
-
done
|
|
38
|
-
|
|
39
|
-
echo "=========================================="
|
|
40
|
-
echo " Skill Optimizer Setup Script"
|
|
41
|
-
echo "=========================================="
|
|
42
|
-
echo ""
|
|
43
|
-
|
|
44
|
-
# Check if source exists
|
|
45
|
-
if [ ! -d "$SKILL_SOURCE" ]; then
|
|
46
|
-
echo "❌ Error: skill-optimizer source not found at:"
|
|
47
|
-
echo " $SKILL_SOURCE"
|
|
48
|
-
exit 1
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
if [ ! -f "$SKILL_SOURCE/SKILL.md" ]; then
|
|
52
|
-
echo "❌ Error: SKILL.md not found in skill-optimizer"
|
|
53
|
-
exit 1
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# Create target directory if not exists
|
|
57
|
-
mkdir -p "$PROJECT_ROOT/.opencode/skills"
|
|
58
|
-
|
|
59
|
-
if [ -d "$SKILL_TARGET" ]; then
|
|
60
|
-
if [ "$OVERWRITE_LOCAL" = true ]; then
|
|
61
|
-
echo "🔄 Removing existing skill-optimizer..."
|
|
62
|
-
rm -rf "$SKILL_TARGET"
|
|
63
|
-
echo "📦 Copying skill-optimizer to .opencode/skills/..."
|
|
64
|
-
cp -r "$SKILL_SOURCE" "$SKILL_TARGET"
|
|
65
|
-
else
|
|
66
|
-
echo "�️ Preserving existing .env and .opt/ in target (use --overwrite-local to override)"
|
|
67
|
-
TMP_DIR="$(mktemp -d)"
|
|
68
|
-
cleanup() {
|
|
69
|
-
rm -rf "$TMP_DIR"
|
|
70
|
-
}
|
|
71
|
-
trap cleanup EXIT
|
|
72
|
-
|
|
73
|
-
cp -r "$SKILL_SOURCE" "$TMP_DIR/skill-optimizer"
|
|
74
|
-
|
|
75
|
-
if [ -f "$SKILL_TARGET/.env" ]; then
|
|
76
|
-
cp "$SKILL_TARGET/.env" "$TMP_DIR/skill-optimizer/.env"
|
|
77
|
-
fi
|
|
78
|
-
|
|
79
|
-
if [ -d "$SKILL_TARGET/.opt" ]; then
|
|
80
|
-
rm -rf "$TMP_DIR/skill-optimizer/.opt"
|
|
81
|
-
cp -R "$SKILL_TARGET/.opt" "$TMP_DIR/skill-optimizer/.opt"
|
|
82
|
-
fi
|
|
83
|
-
|
|
84
|
-
rm -rf "$SKILL_TARGET"
|
|
85
|
-
mv "$TMP_DIR/skill-optimizer" "$SKILL_TARGET"
|
|
86
|
-
trap - EXIT
|
|
87
|
-
cleanup
|
|
88
|
-
fi
|
|
89
|
-
else
|
|
90
|
-
echo "📦 Copying skill-optimizer to .opencode/skills/..."
|
|
91
|
-
cp -r "$SKILL_SOURCE" "$SKILL_TARGET"
|
|
92
|
-
fi
|
|
93
|
-
|
|
94
|
-
# Verify
|
|
95
|
-
if [ -f "$SKILL_TARGET/SKILL.md" ]; then
|
|
96
|
-
echo ""
|
|
97
|
-
echo "✅ Setup complete!"
|
|
98
|
-
echo ""
|
|
99
|
-
echo " Source: $SKILL_SOURCE"
|
|
100
|
-
echo " Target: $SKILL_TARGET"
|
|
101
|
-
echo ""
|
|
102
|
-
echo "=========================================="
|
|
103
|
-
echo " Next Steps"
|
|
104
|
-
echo "=========================================="
|
|
105
|
-
echo ""
|
|
106
|
-
echo " 1. Restart opencode to load the skill:"
|
|
107
|
-
echo " Exit current session and run 'opencode' again"
|
|
108
|
-
echo ""
|
|
109
|
-
echo " 2. Test the skill:"
|
|
110
|
-
echo " opencode run '帮我优化 /path/to/your/skill'"
|
|
111
|
-
echo ""
|
|
112
|
-
echo " 3. Or test interactively in opencode session:"
|
|
113
|
-
echo " > 帮我优化这个 skill: /path/to/skill"
|
|
114
|
-
echo ""
|
|
115
|
-
else
|
|
116
|
-
echo "❌ Error: Failed to copy skill-optimizer"
|
|
117
|
-
exit 1
|
|
118
|
-
fi
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2017",
|
|
4
|
-
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
-
"allowJs": true,
|
|
6
|
-
"skipLibCheck": true,
|
|
7
|
-
"strict": true,
|
|
8
|
-
"noEmit": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"module": "esnext",
|
|
11
|
-
"moduleResolution": "bundler",
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"isolatedModules": true,
|
|
14
|
-
"jsx": "react-jsx",
|
|
15
|
-
"incremental": true,
|
|
16
|
-
"plugins": [
|
|
17
|
-
{
|
|
18
|
-
"name": "next"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"paths": {
|
|
22
|
-
"@/*": ["./src/*"]
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
"include": [
|
|
26
|
-
"next-env.d.ts",
|
|
27
|
-
"**/*.ts",
|
|
28
|
-
"**/*.tsx",
|
|
29
|
-
".next/types/**/*.ts",
|
|
30
|
-
".next/dev/types/**/*.ts",
|
|
31
|
-
"**/*.mts"
|
|
32
|
-
],
|
|
33
|
-
"exclude": ["node_modules"]
|
|
34
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,9665,e=>{"use strict";var s=e.i(43476),t=e.i(18566),n=e.i(71645);function c({skillId:e,skillName:n,version:c,user:a}){let r=(0,t.useRouter)();return e||n?(0,s.jsxs)("span",{onClick:s=>{s.preventDefault();let t=new URLSearchParams;e?t.set("id",e):(t.set("name",n),a&&t.set("user",a)),null!=c&&t.set("version",String(c)),r.push(`/skills?${t.toString()}`)},style:{color:"#60a5fa",cursor:"pointer",textDecoration:"none",transition:"color 0.2s"},onMouseEnter:e=>{e.currentTarget.style.textDecoration="underline",e.currentTarget.style.color="#93c5fd"},onMouseLeave:e=>{e.currentTarget.style.textDecoration="none",e.currentTarget.style.color="#60a5fa"},children:[n,c?` (v${c})`:""]}):(0,s.jsx)("span",{style:{color:"#64748b"},children:"(None)"})}function a({skills:e,skill:t,skillId:a,skillIds:r,skillVersion:l,user:i}){return e?.length||t?e?.length?(0,s.jsx)(s.Fragment,{children:e.map((e,t)=>{let a=r?.[t]||null;return(0,s.jsxs)(n.default.Fragment,{children:[t>0&&(0,s.jsx)("span",{style:{color:"#e2e8f0"},children:", "}),(0,s.jsx)(c,{skillId:a,skillName:e,version:l,user:i})]},t)})}):(0,s.jsx)(c,{skillId:a,skillName:t,version:l,user:i}):(0,s.jsx)("span",{style:{color:"#64748b"},children:"(None)"})}e.s(["SkillLinks",()=>a])},95802,e=>{e.v(s=>Promise.all(["static/chunks/f7a6fed60fb079dd.js","static/chunks/5432ce4a494bc74d.js","static/chunks/b43afe7d924243d9.js","static/chunks/68e4bccbce97556a.js","static/chunks/21105f8885631d60.js","static/chunks/7a95be670a5c981c.js","static/chunks/aa21d65228612e46.js","static/chunks/07668c4577ece2d3.js","static/chunks/78fd227efc628935.js"].map(s=>e.l(s))).then(()=>s(76913)))},34486,e=>{e.v(s=>Promise.all(["static/chunks/6baf949fafec6be3.js","static/chunks/e09d9ee16fe90255.js","static/chunks/ff6357067630b168.js"].map(s=>e.l(s))).then(()=>s(13143)))},14524,e=>{e.v(s=>Promise.all(["static/chunks/fec58f85bfaa3c39.js"].map(s=>e.l(s))).then(()=>s(17847)))}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18566,(e,t,r)=>{t.exports=e.r(76562)},9165,e=>{"use strict";async function t(e,t){return fetch(""+e,t)}function r(e){return""+e}e.s(["apiFetch",()=>t,"getApiUrl",()=>r])},94690,e=>{"use strict";var t=e.i(43476),r=e.i(18566),i=e.i(71645),o=e.i(9165);let a=(0,i.createContext)(void 0);function u({children:e}){let[u,s]=(0,i.useState)(null),[n,l]=(0,i.useState)(null),[c,h]=(0,i.useState)(!1),[g,d]=(0,i.useState)(!1),[m,f]=(0,i.useState)(!1),v=(0,r.useRouter)(),p=(0,r.usePathname)();return(0,i.useEffect)(()=>{(0,o.apiFetch)("/api/config/status?check_org=true").then(e=>e.json()).then(e=>h(e.org_mode||!1)).catch(()=>{}).finally(()=>f(!0))},[]),(0,i.useEffect)(()=>{if(!m)return;let e=localStorage.getItem("user_id"),t=localStorage.getItem("api_key");e?(s(e),t&&l(t)):c&&!g?(d(!0),(0,o.apiFetch)("/api/auth/organization").then(async e=>{let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t?.error||`Organization auth failed: ${e.status}`);return t}).then(e=>{let t=e?.displayName||e?.username,r=e?.apiKey;if(!t)throw Error("Organization auth response missing username");localStorage.setItem("user_id",t),r&&localStorage.setItem("api_key",r),s(t),r&&l(r)}).catch(e=>console.error("Organization auth failed:",e)).finally(()=>d(!1))):"/login"!==p&&v.push("/login")},[p,v,c,g,m]),(0,t.jsx)(a.Provider,{value:{user:u,apiKey:n,login:(e,t)=>{localStorage.setItem("user_id",e),s(e),t&&(localStorage.setItem("api_key",t),l(t)),v.replace("/")},logout:()=>{localStorage.removeItem("user_id"),localStorage.removeItem("api_key"),s(null),l(null),v.push("/login")}},children:e})}function s(){let e=(0,i.useContext)(a);if(void 0===e)throw Error("useAuth must be used within an AuthProvider");return e}e.s(["AuthProvider",()=>u,"useAuth",()=>s])},97703,e=>{"use strict";var t=e.i(43476),r=e.i(71645);let i=(0,r.createContext)(void 0);function o({children:e}){let[o,a]=(0,r.useState)("light"),[u,s]=(0,r.useState)(!1);return((0,r.useEffect)(()=>{s(!0);let e=localStorage.getItem("skill-insight-theme");e&&a(e)},[]),(0,r.useEffect)(()=>{u&&(localStorage.setItem("skill-insight-theme",o),document.documentElement.setAttribute("data-theme",o))},[o,u]),u)?(0,t.jsx)(i.Provider,{value:{theme:o,toggleTheme:()=>{a(e=>"light"===e?"dark":"light")},isDark:"dark"===o},children:e}):null}function a(){let e=(0,r.useContext)(i);if(void 0===e)throw Error("useTheme must be used within a ThemeProvider");return e}e.s(["ThemeProvider",()=>o,"useTheme",()=>a])},1661,e=>{"use strict";var t=e.i(43476),r=e.i(94690),i=e.i(97703);function o({children:e}){return(0,t.jsx)(i.ThemeProvider,{children:(0,t.jsx)(r.AuthProvider,{children:e})})}e.s(["Providers",()=>o])}]);
|