@witty-ai/skill-insight 0.3.0-beta → 0.5.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 +51 -6
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +2 -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 +12 -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/auth/apikey/route.js +2 -2
- package/.next/standalone/.next/server/app/api/auth/apikey/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/organization/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/auth/organization/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/auth/organization/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/auth/organization/route.js +7 -0
- package/.next/standalone/.next/server/app/api/auth/organization/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/auth/organization/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/auth/organization/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/config/create/route.js +5 -5
- 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/config/status/route.js +2 -2
- package/.next/standalone/.next/server/app/api/config/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js +5 -4
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/executions/[executionId]/analyze-match/route.js +4 -4
- package/.next/standalone/.next/server/app/api/executions/[executionId]/analyze-match/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/guide/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/guide/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/guide/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/guide/route.js +7 -0
- package/.next/standalone/.next/server/app/api/guide/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/guide/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/guide/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/otel/v1/logs/route.js +5 -4
- 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 +5 -4
- 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 +3 -3
- package/.next/standalone/.next/server/app/api/proxy/[taskId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js +5 -4
- package/.next/standalone/.next/server/app/api/proxy/[taskId]/end/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proxy/[taskId]/start/route.js +2 -2
- package/.next/standalone/.next/server/app/api/proxy/[taskId]/start/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/rejudge/route.js +5 -4
- package/.next/standalone/.next/server/app/api/rejudge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/session/route.js +5 -5
- package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js +2 -2
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/test/route.js +2 -2
- package/.next/standalone/.next/server/app/api/settings/test/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/activate/route.js +2 -2
- package/.next/standalone/.next/server/app/api/skills/[id]/activate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/toggle/route.js +2 -2
- package/.next/standalone/.next/server/app/api/skills/[id]/toggle/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js +3 -3
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/parse-flow/route.js +4 -4
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/parse-flow/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js +2 -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 +2 -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 +2 -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/automation/push/route.js +2 -2
- package/.next/standalone/.next/server/app/api/skills/automation/push/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/by-name/route.js +2 -2
- package/.next/standalone/.next/server/app/api/skills/by-name/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/logs/route.js +5 -4
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/upload/route.js +2 -2
- package/.next/standalone/.next/server/app/api/skills/upload/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sync/manifest/route.js +2 -2
- package/.next/standalone/.next/server/app/api/sync/manifest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sync/opencode/route.js +2 -2
- package/.next/standalone/.next/server/app/api/sync/opencode/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/upload/route.js +5 -3
- 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 +3 -3
- 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 +2 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02ddba88._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05e510f4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a140a5a._.js +122 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1013b265._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1c95bcde._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ce5e3b8._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a6d443b._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__53775b48._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5444db55._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__591248f3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d8178f6._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6923eecf._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6d8053e2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6fc12878._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__73ce6d21._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__863cf6de._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__98b3de5e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d551ea2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a4d3d791._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__c6c98b22._.js → [root-of-the-server]__aa5c8858._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b11acc79._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b835ea7f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba01f286._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd91659b._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c200214a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d7fab946._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8c1808b._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d9b9fecc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e280561d._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e2f0baee._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e550423c._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__fc05579d._.js +3 -0
- package/.next/standalone/.next/server/chunks/_33c0c729._.js +1 -1
- package/.next/standalone/.next/server/chunks/_41a98bd8._.js +3 -0
- package/.next/standalone/.next/server/chunks/_c48f7c66._.js +1 -1
- package/.next/standalone/.next/server/chunks/_c82df3e0._.js +3 -3
- package/.next/standalone/.next/server/chunks/_cd3d20ca._.js +1 -1
- package/.next/standalone/.next/server/chunks/_fa49adfa._.js +3 -3
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_auth_organization_route_actions_f58710b7.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_guide_route_actions_6c188449.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_c33286ed.js +71 -110
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f42faeee.js +1 -400
- package/.next/standalone/.next/server/chunks/src_497d2ad2._.js +22 -22
- package/.next/standalone/.next/server/chunks/src_c8971a2d._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_12408140._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__5d576168._.js → [root-of-the-server]__40353d98._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__89851212._.js → [root-of-the-server]__480fcd92._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__72a7f3ed._.js → [root-of-the-server]__48f8fbcb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__438a2c90._.js → [root-of-the-server]__49921b2a._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__51073007._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__c9e3c893._.js → [root-of-the-server]__593be3d6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__ca101543._.js → [root-of-the-server]__5e9ff641._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__90641614._.js → [root-of-the-server]__66cc6ff2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__37bfda90._.js → [root-of-the-server]__9889bdc8._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__42ba97b6._.js → [root-of-the-server]__9905ca7a._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9ab7cc4a._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__7bb97139._.js → [root-of-the-server]__9d6b7d48._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__6b8b9bb9._.js → [root-of-the-server]__b8edc8c6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1dfe61f8._.js → [root-of-the-server]__d691ecb0._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__d0917d6e._.js → [root-of-the-server]__e5ddfd15._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__e5e3a145._.js → [root-of-the-server]__f72f330e._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__99ab66d7._.js → [root-of-the-server]__f843e085._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__8a82ef12._.js → [root-of-the-server]__fd69d276._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_7688d7cd._.js → _049876f0._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_981cd263._.js → _09546b95._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_8f5379ab._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_cf1f3d2c._.js → _b121f1ae._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_c8c8c083._.js +18 -42
- package/.next/standalone/.next/server/chunks/ssr/_fd46f439._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_a4a1f3c3._.js → node_modules_039c6a11._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_a7a82280._.js → node_modules_0d3530cd._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_0c2939c3._.js → node_modules_0e883565._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_8d9e56b7._.js → node_modules_11dbf165._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_76d6c533._.js → node_modules_2041c122._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_b007145b._.js → node_modules_235267bb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_11d81adf._.js → node_modules_25dfb0ba._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_205ce1c9._.js → node_modules_2b12c669._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_cc19e85c._.js → node_modules_32996880._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_62621b34._.js → node_modules_35885fe9._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_ee43cfd6._.js → node_modules_38a95353._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_f596a14c._.js → node_modules_3a317c51._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_776b68cf._.js → node_modules_44966ab2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_514c148b._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_e272ac31._.js → node_modules_53af751a._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_23d38260._.js → node_modules_5f539891._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_86b6ffa4._.js → node_modules_60402210._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_3769cd60._.js → node_modules_60eccfb6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_fdf808cf._.js → node_modules_632c098c._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_60cf7de2._.js → node_modules_6c42f75c._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_2f215d2b._.js → node_modules_6fbe276d._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_4cd41088._.js → node_modules_740e9d59._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_d0af4cb2._.js → node_modules_7a3d551c._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_4f41f172._.js → node_modules_861cb9cf._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_db8af6e3._.js → node_modules_8a892761._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_28fef057._.js → node_modules_a5a4946e._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_3d9afa91._.js → node_modules_a712c937._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_330b9e3c._.js → node_modules_a8c276dd._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_abf4f826._.js → node_modules_acc9d529._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_39a3e684._.js → node_modules_ad07ab39._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_1d88c7cc._.js → node_modules_b38efa22._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_8633bac6._.js → node_modules_b4ef036d._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_abc9e5a6._.js → node_modules_b6bad701._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_c90fa812._.js → node_modules_b9810024._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_f56b62b0._.js → node_modules_b9ad808d._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_7287189a._.js → node_modules_bc287d9f._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_5ab83f0a._.js → node_modules_c411d7df._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_c98dd942._.js → node_modules_c6469d93._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_6391b0cd._.js → node_modules_c704e802._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_df113a74._.js → node_modules_cda46cfc._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_aa6da06c._.js → node_modules_cf171d0c._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_be61cdef._.js → node_modules_e8927fc2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_katex_dist_katex_mjs_d037b3b1._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-7R4GIKGN_mjs_e5dda8cc._.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/{d60f0b3e2f4689ac.js → 01eddf501c574a44.js} +1 -1
- package/.next/{static/chunks/ec0de430276c8209.js → standalone/.next/static/chunks/078d76156083f265.js} +1 -1
- package/.next/standalone/.next/static/chunks/{6a17b619eed04f07.js → 07c9f28a269c701a.js} +2 -2
- package/.next/standalone/.next/static/chunks/1e782a49beaf489c.js +1 -0
- package/.next/{static/chunks/55723b38de737547.js → standalone/.next/static/chunks/21105f8885631d60.js} +1 -1
- package/.next/standalone/.next/static/chunks/4071dbec4cf7e72e.js +109 -0
- package/.next/{static/chunks/052f178ab7519d8d.js → standalone/.next/static/chunks/5432ce4a494bc74d.js} +2 -2
- package/.next/standalone/.next/static/chunks/59cd76b8d89e776a.js +1 -0
- package/.next/standalone/.next/static/chunks/67bd1a5de2195779.js +1 -0
- package/.next/standalone/.next/static/chunks/6baf949fafec6be3.js +1 -0
- package/.next/standalone/.next/static/chunks/737b8cff3c6a4e30.js +1 -0
- package/.next/standalone/.next/static/chunks/7e35f4cf2e266022.js +1 -0
- package/.next/standalone/.next/static/chunks/a87b5e84254095a5.js +1 -0
- package/.next/standalone/.next/static/chunks/b43afe7d924243d9.js +2 -0
- package/.next/standalone/.next/static/chunks/c6bd2818656b1f20.css +1 -0
- package/.next/{static/chunks/559e55a53f22f5d1.js → standalone/.next/static/chunks/c875bd2ff662b46f.js} +1 -1
- package/.next/{static/chunks/6d12c79948c7e0ac.js → standalone/.next/static/chunks/dc59a07a8f327b40.js} +1 -1
- package/.next/standalone/.next/static/chunks/e09d9ee16fe90255.js +1 -0
- package/.next/standalone/.next/static/chunks/{20337e5244416041.js → e20b02ee30c11a26.js} +1 -1
- package/.next/standalone/.next/static/chunks/ff6357067630b168.js +1 -0
- package/.next/standalone/LICENSE +1 -1
- package/.next/standalone/bin/cli.js +1 -1
- package/.next/standalone/features/feature-skill-used-jump-link/design/2026-03-18-skill-used-jump-link-design.md +126 -0
- package/.next/standalone/features/feature-skill-used-jump-link/feature.json +32 -0
- package/.next/standalone/features/feature-skill-used-jump-link/issue.md +32 -0
- package/.next/standalone/features/feature-skill-used-jump-link/plans/2026-03-18-skill-used-jump-link.md +528 -0
- package/.next/standalone/next.config.ts +14 -2
- package/.next/standalone/node_modules/.prisma/client/edge.js +23 -5
- package/.next/standalone/node_modules/.prisma/client/index-browser.js +20 -2
- package/.next/standalone/node_modules/.prisma/client/index.js +23 -5
- package/.next/standalone/node_modules/.prisma/client/package.json +1 -1
- package/.next/standalone/node_modules/.prisma/client/schema.prisma +19 -2
- package/.next/standalone/node_modules/.prisma/client/wasm.js +20 -2
- package/.next/standalone/node_modules/@img/colour/color.cjs +11 -9
- package/.next/standalone/node_modules/@img/colour/package.json +21 -8
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/prisma/schema.prisma +19 -2
- package/.next/standalone/scripts/activate_telemetry.sh +24 -24
- package/.next/standalone/scripts/claude_watcher_client.ts +9 -7
- package/.next/standalone/scripts/init_opengauss.py +15 -0
- package/.next/standalone/scripts/install.js +68 -35
- package/.next/standalone/scripts/logs.js +1 -1
- package/.next/standalone/scripts/openclaw_watcher_client.ts +9 -7
- package/.next/standalone/scripts/opencode_plugin.ts +278 -46
- package/.next/standalone/scripts/postinstall.js +80 -38
- package/.next/standalone/scripts/restart.js +1 -1
- package/.next/standalone/scripts/start.js +84 -60
- package/.next/standalone/scripts/status.js +1 -1
- package/.next/standalone/scripts/stop.js +38 -14
- package/.next/standalone/scripts/sync_skills.js +5 -5
- package/.next/standalone/scripts/utils.js +91 -23
- package/.next/standalone/tests/setup_skill_optimizer.sh +118 -0
- package/.next/static/chunks/{d60f0b3e2f4689ac.js → 01eddf501c574a44.js} +1 -1
- package/.next/{standalone/.next/static/chunks/ec0de430276c8209.js → static/chunks/078d76156083f265.js} +1 -1
- package/.next/static/chunks/{6a17b619eed04f07.js → 07c9f28a269c701a.js} +2 -2
- package/.next/static/chunks/1e782a49beaf489c.js +1 -0
- package/.next/{standalone/.next/static/chunks/55723b38de737547.js → static/chunks/21105f8885631d60.js} +1 -1
- package/.next/static/chunks/4071dbec4cf7e72e.js +109 -0
- package/.next/{standalone/.next/static/chunks/052f178ab7519d8d.js → static/chunks/5432ce4a494bc74d.js} +2 -2
- package/.next/static/chunks/59cd76b8d89e776a.js +1 -0
- package/.next/static/chunks/67bd1a5de2195779.js +1 -0
- package/.next/static/chunks/6baf949fafec6be3.js +1 -0
- package/.next/static/chunks/737b8cff3c6a4e30.js +1 -0
- package/.next/static/chunks/7e35f4cf2e266022.js +1 -0
- package/.next/static/chunks/a87b5e84254095a5.js +1 -0
- package/.next/static/chunks/b43afe7d924243d9.js +2 -0
- package/.next/static/chunks/c6bd2818656b1f20.css +1 -0
- package/.next/{standalone/.next/static/chunks/559e55a53f22f5d1.js → static/chunks/c875bd2ff662b46f.js} +1 -1
- package/.next/{standalone/.next/static/chunks/6d12c79948c7e0ac.js → static/chunks/dc59a07a8f327b40.js} +1 -1
- package/.next/static/chunks/e09d9ee16fe90255.js +1 -0
- package/.next/static/chunks/{20337e5244416041.js → e20b02ee30c11a26.js} +1 -1
- package/.next/static/chunks/ff6357067630b168.js +1 -0
- package/LICENSE +1 -1
- package/README.md +7 -6
- package/bin/cli.js +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +19 -2
- package/scripts/activate_telemetry.sh +24 -24
- package/scripts/claude_watcher_client.ts +9 -7
- package/scripts/init_opengauss.py +15 -0
- package/scripts/install.js +68 -35
- package/scripts/logs.js +1 -1
- package/scripts/openclaw_watcher_client.ts +9 -7
- package/scripts/opencode_plugin.ts +278 -46
- package/scripts/postinstall.js +80 -38
- package/scripts/restart.js +1 -1
- package/scripts/start.js +84 -60
- package/scripts/status.js +1 -1
- package/scripts/stop.js +38 -14
- package/scripts/sync_skills.js +5 -5
- package/scripts/utils.js +91 -23
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1306e4eb._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1809fb2b._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19594bdd._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19db3d34._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2b2e7f49._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3c02de9b._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__3f3ad12b._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4c1ad182._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4dce0fe6._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__582cdc68._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__625e84f3._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__68b5a8b3._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__704b8533._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__78ea20f2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__7f754db9._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__824c33e1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__92449e6d._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9465727f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9c3018b5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a12846e0._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a637116a._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a8f83ee4._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a8ffc1b1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9cb205c._.js +0 -122
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ab7048b0._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac25e4ae._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ae5ac9cd._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bebf4267._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c5ae3ebd._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ebdafae4._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__eefd5f5b._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__082c32a2._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_b7889f85._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0b762d3e._.js +0 -3
- package/.next/standalone/.next/static/chunks/024c9acb4aa490c8.js +0 -1
- package/.next/standalone/.next/static/chunks/104f2c1fb93033c0.js +0 -1
- package/.next/standalone/.next/static/chunks/222a937a6c859036.js +0 -1
- package/.next/standalone/.next/static/chunks/2e1b2125198a02c4.js +0 -1
- package/.next/standalone/.next/static/chunks/32b26ff1bbd034fd.js +0 -1
- package/.next/standalone/.next/static/chunks/428e6cf64b115e9d.css +0 -1
- package/.next/standalone/.next/static/chunks/62e251619a96dc26.js +0 -1
- package/.next/standalone/.next/static/chunks/65c652f23d2d68bd.js +0 -133
- package/.next/standalone/.next/static/chunks/876e2d70185fd438.js +0 -1
- package/.next/standalone/.next/static/chunks/c647b2e4532050e0.js +0 -1
- package/.next/standalone/.next/static/chunks/d2e574310159a10b.js +0 -1
- package/.next/standalone/.next/static/chunks/dab1749712763979.js +0 -2
- package/.next/static/chunks/024c9acb4aa490c8.js +0 -1
- package/.next/static/chunks/104f2c1fb93033c0.js +0 -1
- package/.next/static/chunks/222a937a6c859036.js +0 -1
- package/.next/static/chunks/2e1b2125198a02c4.js +0 -1
- package/.next/static/chunks/32b26ff1bbd034fd.js +0 -1
- package/.next/static/chunks/428e6cf64b115e9d.css +0 -1
- package/.next/static/chunks/62e251619a96dc26.js +0 -1
- package/.next/static/chunks/65c652f23d2d68bd.js +0 -133
- package/.next/static/chunks/876e2d70185fd438.js +0 -1
- package/.next/static/chunks/c647b2e4532050e0.js +0 -1
- package/.next/static/chunks/d2e574310159a10b.js +0 -1
- package/.next/static/chunks/dab1749712763979.js +0 -2
- /package/.next/standalone/.next/static/{Zt2VD1Py2IilfVNJL-9Wm → H581Rok68JtPV4bAVVH3l}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{Zt2VD1Py2IilfVNJL-9Wm → H581Rok68JtPV4bAVVH3l}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{Zt2VD1Py2IilfVNJL-9Wm → H581Rok68JtPV4bAVVH3l}/_ssgManifest.js +0 -0
- /package/.next/static/{Zt2VD1Py2IilfVNJL-9Wm → H581Rok68JtPV4bAVVH3l}/_buildManifest.js +0 -0
- /package/.next/static/{Zt2VD1Py2IilfVNJL-9Wm → H581Rok68JtPV4bAVVH3l}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{Zt2VD1Py2IilfVNJL-9Wm → H581Rok68JtPV4bAVVH3l}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Skill-insight
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Skill-insight 是一个开源的 **Agent Skill 生成、优化、观测与分析平台**,帮助开发者量化评估 Skills 在 Agent 上的实际运行效果。通过自动采集执行轨迹、智能评分、深度归因分析,让 Skill 的每一次迭代都有据可依。
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<img src="docs/images/dashboard_main.png" width="48%" />
|
|
7
|
-
<img src="docs/images/dashboard_list.png" width="
|
|
7
|
+
<img src="docs/images/dashboard_list.png" width="44%" />
|
|
8
8
|
</p>
|
|
9
9
|
<p align="center"><em>主界面:全景指标概览与执行历史列表</em></p>
|
|
10
10
|
|
|
@@ -69,9 +69,10 @@ Skills-Insight 是一个开源的 **Agent Skill 生成、优化、观测与分
|
|
|
69
69
|
### 执行详情钻取
|
|
70
70
|
|
|
71
71
|
<p align="center">
|
|
72
|
-
<img src="docs/images/execution_detail.png" width="
|
|
72
|
+
<img src="docs/images/execution_detail.png" width="45%" />
|
|
73
|
+
<img src="docs/images/skill_visualization.png" width="40%" />
|
|
73
74
|
</p>
|
|
74
|
-
<p align="center"><em
|
|
75
|
+
<p align="center"><em>执行详情:skill有效性分析 + Skill执行可视化</em></p>
|
|
75
76
|
|
|
76
77
|
### 耗时 & Token 分析
|
|
77
78
|
|
|
@@ -99,7 +100,7 @@ Skills-Insight 是一个开源的 **Agent Skill 生成、优化、观测与分
|
|
|
99
100
|
### 一键安装
|
|
100
101
|
|
|
101
102
|
```bash
|
|
102
|
-
npx
|
|
103
|
+
npx @witty-ai/skill-insight install
|
|
103
104
|
```
|
|
104
105
|
|
|
105
106
|
### 快速体验
|
package/bin/cli.js
CHANGED
package/package.json
CHANGED
package/prisma/schema.prisma
CHANGED
|
@@ -72,7 +72,8 @@ model Execution {
|
|
|
72
72
|
model String?
|
|
73
73
|
finalResult String?
|
|
74
74
|
skill String?
|
|
75
|
-
skills String? // JSON array of strings
|
|
75
|
+
skills String? // JSON array of strings (skill names)
|
|
76
|
+
invokedSkills String? // JSON array of {name: string, version: number | null}
|
|
76
77
|
isSkillCorrect Boolean? @default(false)
|
|
77
78
|
isAnswerCorrect Boolean? @default(false)
|
|
78
79
|
answerScore Float?
|
|
@@ -83,12 +84,15 @@ model Execution {
|
|
|
83
84
|
skillVersion Int?
|
|
84
85
|
label String?
|
|
85
86
|
user String?
|
|
87
|
+
skillRecallRate Float? // Execution-level metric: correct_invoked_skills / expected_skills (per execution)
|
|
86
88
|
}
|
|
87
89
|
|
|
88
90
|
model Config {
|
|
89
91
|
id String @id @default(cuid())
|
|
90
92
|
query String
|
|
91
|
-
skill String @default("")
|
|
93
|
+
skill String @default("") // Ground truth skill name (Legacy - use expectedSkills instead)
|
|
94
|
+
skillVersion Int? // Expected skill version (Legacy - use expectedSkills instead)
|
|
95
|
+
expectedSkills String? // JSON array of {skill: string, version: number | null}
|
|
92
96
|
standardAnswer String
|
|
93
97
|
rootCauses String? // JSON array
|
|
94
98
|
keyActions String? // JSON array
|
|
@@ -151,3 +155,16 @@ model ExecutionMatch {
|
|
|
151
155
|
matchedAt DateTime @default(now())
|
|
152
156
|
}
|
|
153
157
|
|
|
158
|
+
model UserGuideState {
|
|
159
|
+
id String @id @default(cuid())
|
|
160
|
+
user String @unique
|
|
161
|
+
guideDisabled Boolean @default(false)
|
|
162
|
+
currentStep Int @default(0)
|
|
163
|
+
completedSteps String @default("[]")
|
|
164
|
+
skippedSteps String @default("[]")
|
|
165
|
+
lastShownAt DateTime?
|
|
166
|
+
dismissedAt DateTime?
|
|
167
|
+
createdAt DateTime @default(now())
|
|
168
|
+
updatedAt DateTime @updatedAt
|
|
169
|
+
}
|
|
170
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
3
|
# =============================================================================
|
|
4
|
-
#
|
|
4
|
+
# Skill-Insight Official Setup Script (Fixed Path Logic)
|
|
5
5
|
#
|
|
6
6
|
# Installs native telemetry hooks for Claude Code and OpenCode.
|
|
7
7
|
# =============================================================================
|
|
@@ -18,7 +18,7 @@ fi
|
|
|
18
18
|
SCRIPTS_DIR="$( cd -- "$( dirname -- "$SELF_PATH" )" &> /dev/null && pwd )"
|
|
19
19
|
PROJECT_ROOT="$( dirname "$SCRIPTS_DIR" )"
|
|
20
20
|
|
|
21
|
-
echo "🚀 Starting
|
|
21
|
+
echo "🚀 Starting Skill-Insight Telemetry Setup..."
|
|
22
22
|
echo "📂 Project Root: $PROJECT_ROOT"
|
|
23
23
|
|
|
24
24
|
# --- 1. Load Configurations ---
|
|
@@ -39,43 +39,43 @@ if [ -f "$OPENCODE_PLUGIN_SRC" ]; then
|
|
|
39
39
|
cp "$OPENCODE_PLUGIN_SRC" "$OPENCODE_PLUGIN_DEST"
|
|
40
40
|
echo "✅ OpenCode Plugin installed to $OPENCODE_PLUGIN_DEST"
|
|
41
41
|
|
|
42
|
-
# --- 2.1 Setup
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
mkdir -p "$
|
|
42
|
+
# --- 2.1 Setup Skill-Insight Config (~/.skill-insight/.env) ---
|
|
43
|
+
SKILL_INSIGHT_CONFIG_DIR="$HOME/.skill-insight"
|
|
44
|
+
SKILL_INSIGHT_CONFIG_FILE="$SKILL_INSIGHT_CONFIG_DIR/.env"
|
|
45
|
+
mkdir -p "$SKILL_INSIGHT_CONFIG_DIR"
|
|
46
46
|
|
|
47
47
|
EXISTING_KEY=""
|
|
48
48
|
EXISTING_HOST=""
|
|
49
|
-
if [ -f "$
|
|
49
|
+
if [ -f "$SKILL_INSIGHT_CONFIG_FILE" ]; then
|
|
50
50
|
# match only UNCOMMENTED lines
|
|
51
|
-
EXISTING_KEY=$(grep '^
|
|
52
|
-
EXISTING_HOST=$(grep '^
|
|
51
|
+
EXISTING_KEY=$(grep '^SKILL_INSIGHT_API_KEY=' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d'=' -f2-)
|
|
52
|
+
EXISTING_HOST=$(grep '^SKILL_INSIGHT_HOST=' "$SKILL_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d'=' -f2-)
|
|
53
53
|
fi
|
|
54
54
|
|
|
55
55
|
# API Key Selection Logic
|
|
56
56
|
API_KEY=""
|
|
57
57
|
if [ -n "$EXISTING_KEY" ]; then
|
|
58
|
-
echo "🔑 Found existing API Key in $
|
|
58
|
+
echo "🔑 Found existing API Key in $SKILL_INSIGHT_CONFIG_FILE."
|
|
59
59
|
read -p "👉 Use existing key? (y/N, Default: y): " USE_EXISTING < /dev/tty
|
|
60
60
|
if [[ "$USE_EXISTING" =~ ^[Nn]$ ]]; then
|
|
61
61
|
read -p "👉 Please enter your NEW API Key: " API_KEY < /dev/tty
|
|
62
62
|
else
|
|
63
63
|
API_KEY="$EXISTING_KEY"
|
|
64
64
|
fi
|
|
65
|
-
elif [ -n "$
|
|
66
|
-
echo "🔑 Found API Key in current environment/env file: $
|
|
65
|
+
elif [ -n "$SKILL_INSIGHT_API_KEY" ]; then
|
|
66
|
+
echo "🔑 Found API Key in current environment/env file: $SKILL_INSIGHT_API_KEY"
|
|
67
67
|
read -p "👉 Use this key for global config? (y/N, Default: y): " USE_ENV < /dev/tty
|
|
68
68
|
if [[ "$USE_ENV" =~ ^[Nn]$ ]]; then
|
|
69
69
|
read -p "👉 Please enter your API Key: " API_KEY < /dev/tty
|
|
70
70
|
else
|
|
71
|
-
API_KEY="$
|
|
71
|
+
API_KEY="$SKILL_INSIGHT_API_KEY"
|
|
72
72
|
fi
|
|
73
73
|
else
|
|
74
74
|
read -p "👉 Please enter your API Key: " API_KEY < /dev/tty
|
|
75
75
|
fi
|
|
76
76
|
|
|
77
77
|
# -- Host Logic --
|
|
78
|
-
NEW_HOST="${
|
|
78
|
+
NEW_HOST="${SKILL_INSIGHT_HOST:-127.0.0.1:3000}"
|
|
79
79
|
FINAL_HOST="$NEW_HOST"
|
|
80
80
|
if [ -n "$EXISTING_HOST" ] && [ "$EXISTING_HOST" != "$NEW_HOST" ]; then
|
|
81
81
|
echo "🌐 Current Host in global config: $EXISTING_HOST"
|
|
@@ -90,17 +90,17 @@ if [ -f "$OPENCODE_PLUGIN_SRC" ]; then
|
|
|
90
90
|
echo "⚠️ Warning: No API Key provided. Data reporting will fail."
|
|
91
91
|
fi
|
|
92
92
|
|
|
93
|
-
echo "⚙️ Syncing configuration to $
|
|
94
|
-
touch "$
|
|
95
|
-
cp "$
|
|
96
|
-
grep -v "^
|
|
97
|
-
echo "
|
|
98
|
-
echo "
|
|
99
|
-
rm "${
|
|
93
|
+
echo "⚙️ Syncing configuration to $SKILL_INSIGHT_CONFIG_FILE..."
|
|
94
|
+
touch "$SKILL_INSIGHT_CONFIG_FILE"
|
|
95
|
+
cp "$SKILL_INSIGHT_CONFIG_FILE" "${SKILL_INSIGHT_CONFIG_FILE}.bak"
|
|
96
|
+
grep -v "^SKILL_INSIGHT_API_KEY=" "${SKILL_INSIGHT_CONFIG_FILE}.bak" | grep -v "^SKILL_INSIGHT_HOST=" > "$SKILL_INSIGHT_CONFIG_FILE"
|
|
97
|
+
echo "SKILL_INSIGHT_API_KEY=$API_KEY" >> "$SKILL_INSIGHT_CONFIG_FILE"
|
|
98
|
+
echo "SKILL_INSIGHT_HOST=$FINAL_HOST" >> "$SKILL_INSIGHT_CONFIG_FILE"
|
|
99
|
+
rm "${SKILL_INSIGHT_CONFIG_FILE}.bak"
|
|
100
100
|
echo "✅ Configuration updated (Other settings preserved)."
|
|
101
101
|
|
|
102
102
|
# NEW: Register Sync Hook into .zshrc / .bashrc
|
|
103
|
-
SYNC_SCRIPT="$HOME/.
|
|
103
|
+
SYNC_SCRIPT="$HOME/.skill-insight/sync_skills.js"
|
|
104
104
|
if [ -f "$SYNC_SCRIPT" ]; then
|
|
105
105
|
SHELL_RC="$HOME/.zshrc"
|
|
106
106
|
[ -f "$HOME/.bashrc" ] && SHELL_RC="$HOME/.bashrc"
|
|
@@ -108,7 +108,7 @@ if [ -f "$OPENCODE_PLUGIN_SRC" ]; then
|
|
|
108
108
|
# Add aliases if not present
|
|
109
109
|
if ! grep -q "witty_sync_wrapper" "$SHELL_RC"; then
|
|
110
110
|
echo "" >> "$SHELL_RC"
|
|
111
|
-
echo "#
|
|
111
|
+
echo "# Skill-Insight Auto-Sync" >> "$SHELL_RC"
|
|
112
112
|
echo "alias opencode='node $SYNC_SCRIPT --agent opencode && opencode'" >> "$SHELL_RC"
|
|
113
113
|
echo "alias claude='node $SYNC_SCRIPT --agent claude && claude'" >> "$SHELL_RC"
|
|
114
114
|
echo "✅ Auto-sync aliases added to $SHELL_RC"
|
|
@@ -153,7 +153,7 @@ unset DEEPSEEK_BASE_URL
|
|
|
153
153
|
unset OPENAI_BASE_URL
|
|
154
154
|
|
|
155
155
|
echo ""
|
|
156
|
-
echo "🌟
|
|
156
|
+
echo "🌟 Skill-Insight Telemetry: READY"
|
|
157
157
|
echo "------------------------------------------------"
|
|
158
158
|
echo "To test, run: opencode run 'hello'"
|
|
159
159
|
echo ""
|
|
@@ -250,14 +250,14 @@ class ClaudeParser {
|
|
|
250
250
|
// HTTP Upload (replaces saveExecutionRecord)
|
|
251
251
|
// ============================================================================
|
|
252
252
|
|
|
253
|
-
function
|
|
253
|
+
function loadSkillInsightConfig(): { apiKey: string; host: string } {
|
|
254
254
|
const config: { apiKey: string; host: string } = { apiKey: '', host: '' };
|
|
255
255
|
try {
|
|
256
|
-
const envPath = path.join(os.homedir(), '.
|
|
256
|
+
const envPath = path.join(os.homedir(), '.skill-insight', '.env');
|
|
257
257
|
if (fs.existsSync(envPath)) {
|
|
258
258
|
const content = fs.readFileSync(envPath, 'utf-8');
|
|
259
|
-
const apiKeyMatch = content.match(/
|
|
260
|
-
const hostMatch = content.match(/
|
|
259
|
+
const apiKeyMatch = content.match(/SKILL_INSIGHT_API_KEY=(.*)/);
|
|
260
|
+
const hostMatch = content.match(/SKILL_INSIGHT_HOST=(.*)/);
|
|
261
261
|
if (apiKeyMatch && apiKeyMatch[1]) {
|
|
262
262
|
config.apiKey = apiKeyMatch[1].trim();
|
|
263
263
|
}
|
|
@@ -266,13 +266,13 @@ function loadWittyConfig(): { apiKey: string; host: string } {
|
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
} catch (e) {
|
|
269
|
-
console.error('[ClaudeWatcher] Error reading
|
|
269
|
+
console.error('[ClaudeWatcher] Error reading skill-insight config:', e);
|
|
270
270
|
}
|
|
271
271
|
return config;
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
async function uploadExecutionRecord(record: any): Promise<void> {
|
|
275
|
-
const config =
|
|
275
|
+
const config = loadSkillInsightConfig();
|
|
276
276
|
if (!config.apiKey || !config.host) {
|
|
277
277
|
console.error('[ClaudeWatcher] Missing API key or host in config');
|
|
278
278
|
return;
|
|
@@ -289,10 +289,12 @@ async function uploadExecutionRecord(record: any): Promise<void> {
|
|
|
289
289
|
|
|
290
290
|
const body = JSON.stringify(record);
|
|
291
291
|
|
|
292
|
+
const basePath = parsedUrl.pathname === '/' ? '' : parsedUrl.pathname;
|
|
293
|
+
|
|
292
294
|
const options: http.RequestOptions = {
|
|
293
295
|
hostname: parsedUrl.hostname,
|
|
294
296
|
port: parsedUrl.port || (isHttps ? 443 : 80),
|
|
295
|
-
path:
|
|
297
|
+
path: `${basePath}/api/upload`,
|
|
296
298
|
method: 'POST',
|
|
297
299
|
headers: {
|
|
298
300
|
'Content-Type': 'application/json',
|
|
@@ -154,6 +154,21 @@ TABLE_DEFINITIONS = {
|
|
|
154
154
|
("matchedAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
|
|
155
155
|
],
|
|
156
156
|
"unique_constraints": []
|
|
157
|
+
},
|
|
158
|
+
"UserGuideState": {
|
|
159
|
+
"columns": [
|
|
160
|
+
("id", "TEXT PRIMARY KEY"),
|
|
161
|
+
("user", "TEXT UNIQUE NOT NULL"),
|
|
162
|
+
("guideDisabled", "BOOLEAN DEFAULT FALSE"),
|
|
163
|
+
("currentStep", "INTEGER DEFAULT 0"),
|
|
164
|
+
("completedSteps", "TEXT DEFAULT '[]'"),
|
|
165
|
+
("skippedSteps", "TEXT DEFAULT '[]'"),
|
|
166
|
+
("lastShownAt", "TIMESTAMP"),
|
|
167
|
+
("dismissedAt", "TIMESTAMP"),
|
|
168
|
+
("createdAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
|
|
169
|
+
("updatedAt", "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"),
|
|
170
|
+
],
|
|
171
|
+
"unique_constraints": []
|
|
157
172
|
}
|
|
158
173
|
}
|
|
159
174
|
|
package/scripts/install.js
CHANGED
|
@@ -16,7 +16,7 @@ async function runCommand(command, options = {}) {
|
|
|
16
16
|
shell: true,
|
|
17
17
|
...options
|
|
18
18
|
})
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
proc.on('close', (code) => {
|
|
21
21
|
if (code === 0) {
|
|
22
22
|
resolve()
|
|
@@ -24,7 +24,7 @@ async function runCommand(command, options = {}) {
|
|
|
24
24
|
reject(new Error(`Command failed with code ${code}`))
|
|
25
25
|
}
|
|
26
26
|
})
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
proc.on('error', (err) => {
|
|
29
29
|
reject(err)
|
|
30
30
|
})
|
|
@@ -46,7 +46,7 @@ async function waitForService(port, maxRetries = 30, retryDelay = 1000) {
|
|
|
46
46
|
async function getApiKey(port) {
|
|
47
47
|
return new Promise((resolve, reject) => {
|
|
48
48
|
const postData = JSON.stringify({ username: 'admin' })
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
const options = {
|
|
51
51
|
hostname: 'localhost',
|
|
52
52
|
port: port,
|
|
@@ -57,7 +57,7 @@ async function getApiKey(port) {
|
|
|
57
57
|
'Content-Length': Buffer.byteLength(postData)
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
const req = http.request(options, (res) => {
|
|
62
62
|
let data = ''
|
|
63
63
|
res.on('data', (chunk) => { data += chunk })
|
|
@@ -78,11 +78,11 @@ async function getApiKey(port) {
|
|
|
78
78
|
}
|
|
79
79
|
})
|
|
80
80
|
})
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
req.on('error', (e) => {
|
|
83
83
|
reject(e)
|
|
84
84
|
})
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
req.write(postData)
|
|
87
87
|
req.end()
|
|
88
88
|
})
|
|
@@ -90,13 +90,17 @@ async function getApiKey(port) {
|
|
|
90
90
|
|
|
91
91
|
async function callAutoSetup(port, apiKey) {
|
|
92
92
|
return new Promise((resolve, reject) => {
|
|
93
|
+
const isWindows = process.platform === 'win32'
|
|
93
94
|
const options = {
|
|
94
95
|
hostname: 'localhost',
|
|
95
96
|
port: port,
|
|
96
97
|
path: `/api/setup/auto?apiKey=${encodeURIComponent(apiKey)}&host=localhost:${port}`,
|
|
97
|
-
method: 'GET'
|
|
98
|
+
method: 'GET',
|
|
99
|
+
headers: {
|
|
100
|
+
'x-platform': isWindows ? 'windows' : 'unix'
|
|
101
|
+
}
|
|
98
102
|
}
|
|
99
|
-
|
|
103
|
+
|
|
100
104
|
const req = http.request(options, (res) => {
|
|
101
105
|
let data = ''
|
|
102
106
|
res.on('data', (chunk) => { data += chunk })
|
|
@@ -108,11 +112,11 @@ async function callAutoSetup(port, apiKey) {
|
|
|
108
112
|
}
|
|
109
113
|
})
|
|
110
114
|
})
|
|
111
|
-
|
|
115
|
+
|
|
112
116
|
req.on('error', (e) => {
|
|
113
117
|
reject(e)
|
|
114
118
|
})
|
|
115
|
-
|
|
119
|
+
|
|
116
120
|
req.end()
|
|
117
121
|
})
|
|
118
122
|
}
|
|
@@ -120,16 +124,32 @@ async function callAutoSetup(port, apiKey) {
|
|
|
120
124
|
async function run(options = {}) {
|
|
121
125
|
let port = options.port || 3000
|
|
122
126
|
const errors = []
|
|
123
|
-
|
|
127
|
+
|
|
124
128
|
console.log('\n')
|
|
125
129
|
console.log('╔════════════════════════════════════════════════════════════╗')
|
|
126
130
|
console.log('║ ║')
|
|
127
|
-
console.log('║ 🚀 Skill-
|
|
131
|
+
console.log('║ 🚀 Skill-insight 一键部署 🚀 ║')
|
|
128
132
|
console.log('║ ║')
|
|
129
133
|
console.log('╚════════════════════════════════════════════════════════════╝')
|
|
130
134
|
console.log('')
|
|
131
|
-
|
|
135
|
+
|
|
132
136
|
console.log('📦 【步骤 1/5】安装 npm 包...')
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
const oldDbPath = path.join(process.cwd(), 'node_modules', '@witty-ai', 'skill-insight', 'data', 'witty_insight.db')
|
|
140
|
+
const newDbDir = path.join(os.homedir(), '.skill-insight', 'data')
|
|
141
|
+
const newDbPath = path.join(newDbDir, 'witty_insight.db')
|
|
142
|
+
|
|
143
|
+
if (fs.existsSync(oldDbPath) && !fs.existsSync(newDbPath)) {
|
|
144
|
+
console.log(' ⚠️ 检测到 node_modules 中存在旧版数据,正在执行迁移...')
|
|
145
|
+
if (!fs.existsSync(newDbDir)) fs.mkdirSync(newDbDir, { recursive: true })
|
|
146
|
+
fs.copyFileSync(oldDbPath, newDbPath)
|
|
147
|
+
console.log(' ✅ 旧版数据已成功迁移至安全目录')
|
|
148
|
+
}
|
|
149
|
+
} catch (e) {
|
|
150
|
+
console.log(' ⚠️ 数据迁移检测失败,跳过: ' + e.message)
|
|
151
|
+
}
|
|
152
|
+
|
|
133
153
|
try {
|
|
134
154
|
await runCommand('npm install @witty-ai/skill-insight', { silent: true })
|
|
135
155
|
console.log(' ✅ npm 包安装成功\n')
|
|
@@ -137,21 +157,21 @@ async function run(options = {}) {
|
|
|
137
157
|
errors.push({ step: 1, message: `npm install 失败: ${error.message}` })
|
|
138
158
|
console.log(` ❌ npm 包安装失败: ${error.message}\n`)
|
|
139
159
|
}
|
|
140
|
-
|
|
160
|
+
|
|
141
161
|
const availablePort = findAvailablePort(port)
|
|
142
162
|
if (availablePort !== port) {
|
|
143
163
|
console.log(`🔄 端口 ${port} 已被占用,自动切换到端口 ${availablePort}\n`)
|
|
144
164
|
port = availablePort
|
|
145
165
|
}
|
|
146
|
-
|
|
166
|
+
|
|
147
167
|
console.log('🔧 【步骤 2/5】启动服务...')
|
|
148
168
|
try {
|
|
149
|
-
const logPath = path.join(os.homedir(), '.
|
|
169
|
+
const logPath = path.join(os.homedir(), '.skill-insight', 'install.log')
|
|
150
170
|
const logDir = path.dirname(logPath)
|
|
151
171
|
if (!fs.existsSync(logDir)) {
|
|
152
172
|
fs.mkdirSync(logDir, { recursive: true })
|
|
153
173
|
}
|
|
154
|
-
|
|
174
|
+
|
|
155
175
|
const startProc = spawn('npx', ['@witty-ai/skill-insight', 'start', '--port', port.toString()], {
|
|
156
176
|
stdio: ['ignore', fs.openSync(logPath, 'a'), fs.openSync(logPath, 'a')],
|
|
157
177
|
shell: true,
|
|
@@ -163,7 +183,7 @@ async function run(options = {}) {
|
|
|
163
183
|
errors.push({ step: 2, message: `启动服务失败: ${error.message}` })
|
|
164
184
|
console.log(` ❌ 启动服务失败: ${error.message}\n`)
|
|
165
185
|
}
|
|
166
|
-
|
|
186
|
+
|
|
167
187
|
console.log('🔑 【步骤 3/5】等待服务就绪并获取 API Key...')
|
|
168
188
|
let apiKey = null
|
|
169
189
|
try {
|
|
@@ -173,36 +193,49 @@ async function run(options = {}) {
|
|
|
173
193
|
throw new Error(`服务在端口 ${port} 未就绪`)
|
|
174
194
|
}
|
|
175
195
|
console.log(' ✅ 服务已就绪')
|
|
176
|
-
|
|
196
|
+
|
|
177
197
|
apiKey = await getApiKey(port)
|
|
178
198
|
console.log(' ✅ 获取到 API Key\n')
|
|
179
199
|
} catch (error) {
|
|
180
200
|
errors.push({ step: 3, message: `获取 API Key 失败: ${error.message}` })
|
|
181
201
|
console.log(`\n ❌ 获取 API Key 失败: ${error.message}\n`)
|
|
182
202
|
}
|
|
183
|
-
|
|
203
|
+
|
|
184
204
|
console.log('🔌 【步骤 4/5】安装插件组件...')
|
|
185
205
|
try {
|
|
186
206
|
if (!apiKey) {
|
|
187
207
|
throw new Error('没有可用的 API Key,跳过自动配置')
|
|
188
208
|
}
|
|
189
|
-
|
|
209
|
+
|
|
190
210
|
const scriptContent = await callAutoSetup(port, apiKey)
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
fs.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
211
|
+
const isWindows = process.platform === 'win32'
|
|
212
|
+
const scriptDir = path.join(os.homedir(), '.skill-insight')
|
|
213
|
+
|
|
214
|
+
fs.mkdirSync(scriptDir, { recursive: true })
|
|
215
|
+
|
|
216
|
+
let scriptPath, executeCommand
|
|
217
|
+
if (isWindows) {
|
|
218
|
+
scriptPath = path.join(scriptDir, 'auto_setup.ps1')
|
|
219
|
+
fs.writeFileSync(scriptPath, scriptContent)
|
|
220
|
+
console.log(' ✅ 配置脚本已下载 (PowerShell)')
|
|
221
|
+
console.log(' 📋 请选择要安装的框架...')
|
|
222
|
+
executeCommand = `powershell -ExecutionPolicy Bypass -File "${scriptPath}"`
|
|
223
|
+
} else {
|
|
224
|
+
scriptPath = path.join(scriptDir, 'auto_setup.sh')
|
|
225
|
+
fs.writeFileSync(scriptPath, scriptContent, { mode: 0o755 })
|
|
226
|
+
console.log(' ✅ 配置脚本已下载 (Shell)')
|
|
227
|
+
console.log(' 📋 请选择要安装的框架...')
|
|
228
|
+
executeCommand = `bash "${scriptPath}"`
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
await runCommand(executeCommand)
|
|
232
|
+
|
|
200
233
|
console.log('\n ✅ 插件安装完成\n')
|
|
201
234
|
} catch (error) {
|
|
202
235
|
errors.push({ step: 4, message: `插件安装失败: ${error.message}` })
|
|
203
236
|
console.log(` ❌ 插件安装失败: ${error.message}\n`)
|
|
204
237
|
}
|
|
205
|
-
|
|
238
|
+
|
|
206
239
|
console.log('📚 【步骤 5/5】添加技能...')
|
|
207
240
|
try {
|
|
208
241
|
await runCommand('npx skills add https://atomgit.com/openeuler/witty-skill-insight.git')
|
|
@@ -211,11 +244,11 @@ async function run(options = {}) {
|
|
|
211
244
|
errors.push({ step: 5, message: `添加技能失败: ${error.message}` })
|
|
212
245
|
console.log(` ❌ 添加技能失败: ${error.message}\n`)
|
|
213
246
|
}
|
|
214
|
-
|
|
247
|
+
|
|
215
248
|
console.log('════════════════════════════════════════════════════════════')
|
|
216
249
|
console.log(' 🎉 部署完成 🎉')
|
|
217
250
|
console.log('════════════════════════════════════════════════════════════')
|
|
218
|
-
|
|
251
|
+
|
|
219
252
|
if (errors.length > 0) {
|
|
220
253
|
console.log('\n')
|
|
221
254
|
console.log('⚠️ 以下步骤执行失败:')
|
|
@@ -227,7 +260,7 @@ async function run(options = {}) {
|
|
|
227
260
|
console.log('\n')
|
|
228
261
|
console.log('✅ 所有步骤执行成功!')
|
|
229
262
|
}
|
|
230
|
-
|
|
263
|
+
|
|
231
264
|
console.log('\n')
|
|
232
265
|
console.log('┌─────────────────────────────────────────────────────────────┐')
|
|
233
266
|
console.log('│ │')
|
|
@@ -237,4 +270,4 @@ async function run(options = {}) {
|
|
|
237
270
|
console.log('')
|
|
238
271
|
}
|
|
239
272
|
|
|
240
|
-
module.exports = { run }
|
|
273
|
+
module.exports = { run }
|
package/scripts/logs.js
CHANGED
|
@@ -12,7 +12,7 @@ async function run(options) {
|
|
|
12
12
|
return
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
console.log('===
|
|
15
|
+
console.log('=== Skill-Insight Service Logs ===\n')
|
|
16
16
|
console.log('Press Ctrl+C to exit\n')
|
|
17
17
|
|
|
18
18
|
const tail = spawn('tail', ['-f', logPath], { stdio: 'inherit' })
|
|
@@ -221,14 +221,14 @@ class OpenClawParser {
|
|
|
221
221
|
// HTTP Upload (replaces saveExecutionRecord)
|
|
222
222
|
// ============================================================================
|
|
223
223
|
|
|
224
|
-
function
|
|
224
|
+
function loadSkillInsightConfig(): { apiKey: string; host: string } {
|
|
225
225
|
const config: { apiKey: string; host: string } = { apiKey: '', host: '' };
|
|
226
226
|
try {
|
|
227
|
-
const envPath = path.join(os.homedir(), '.
|
|
227
|
+
const envPath = path.join(os.homedir(), '.skill-insight', '.env');
|
|
228
228
|
if (fs.existsSync(envPath)) {
|
|
229
229
|
const content = fs.readFileSync(envPath, 'utf-8');
|
|
230
|
-
const apiKeyMatch = content.match(/
|
|
231
|
-
const hostMatch = content.match(/
|
|
230
|
+
const apiKeyMatch = content.match(/SKILL_INSIGHT_API_KEY=(.*)/);
|
|
231
|
+
const hostMatch = content.match(/SKILL_INSIGHT_HOST=(.*)/);
|
|
232
232
|
if (apiKeyMatch && apiKeyMatch[1]) {
|
|
233
233
|
config.apiKey = apiKeyMatch[1].trim();
|
|
234
234
|
}
|
|
@@ -237,13 +237,13 @@ function loadWittyConfig(): { apiKey: string; host: string } {
|
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
} catch (e) {
|
|
240
|
-
console.error('[OpenClawWatcher] Error reading
|
|
240
|
+
console.error('[OpenClawWatcher] Error reading skill-insight config:', e);
|
|
241
241
|
}
|
|
242
242
|
return config;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
async function uploadExecutionRecord(record: any): Promise<void> {
|
|
246
|
-
const config =
|
|
246
|
+
const config = loadSkillInsightConfig();
|
|
247
247
|
if (!config.apiKey || !config.host) {
|
|
248
248
|
console.error('[OpenClawWatcher] Missing API key or host in config');
|
|
249
249
|
return;
|
|
@@ -260,10 +260,12 @@ async function uploadExecutionRecord(record: any): Promise<void> {
|
|
|
260
260
|
|
|
261
261
|
const body = JSON.stringify(record);
|
|
262
262
|
|
|
263
|
+
const basePath = parsedUrl.pathname === '/' ? '' : parsedUrl.pathname;
|
|
264
|
+
|
|
263
265
|
const options: http.RequestOptions = {
|
|
264
266
|
hostname: parsedUrl.hostname,
|
|
265
267
|
port: parsedUrl.port || (isHttps ? 443 : 80),
|
|
266
|
-
path:
|
|
268
|
+
path: `${basePath}/api/upload`,
|
|
267
269
|
method: 'POST',
|
|
268
270
|
headers: {
|
|
269
271
|
'Content-Type': 'application/json',
|