kontexta 4.3.1
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/LICENSE +191 -0
- package/README.md +58 -0
- package/bundle/standalone/CHANGELOG.md +382 -0
- package/bundle/standalone/apps/web/.next/BUILD_ID +1 -0
- package/bundle/standalone/apps/web/.next/app-build-manifest.json +403 -0
- package/bundle/standalone/apps/web/.next/app-path-routes-manifest.json +60 -0
- package/bundle/standalone/apps/web/.next/build-manifest.json +33 -0
- package/bundle/standalone/apps/web/.next/package.json +1 -0
- package/bundle/standalone/apps/web/.next/prerender-manifest.json +148 -0
- package/bundle/standalone/apps/web/.next/react-loadable-manifest.json +300 -0
- package/bundle/standalone/apps/web/.next/required-server-files.json +344 -0
- package/bundle/standalone/apps/web/.next/routes-manifest.json +210 -0
- package/bundle/standalone/apps/web/.next/server/app/_not-found/page.js +2 -0
- package/bundle/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/_not-found.html +1 -0
- package/bundle/standalone/apps/web/.next/server/app/_not-found.meta +8 -0
- package/bundle/standalone/apps/web/.next/server/app/_not-found.rsc +22 -0
- package/bundle/standalone/apps/web/.next/server/app/api/about/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/about/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/about/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/login/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/login/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/logout/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/setup/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/setup/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/setup/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/status/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/status/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/token/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/token/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/auth/token/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/conflicts/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/conflicts/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/conflicts/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/entities/[id]/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/entities/[id]/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/entities/[id]/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/entities/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/entities/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/entities/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/events/[id]/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/events/[id]/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/events/[id]/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/events/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/events/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/events/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/ics/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/ics/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/ics/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/links/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/links/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/links/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/settings/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/settings/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/calendar/settings/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/clip/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/clip/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/clip/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/docker-config/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/docker-config/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/docker-config/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/export/zip/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/export/zip/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/export/zip/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/download/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/download/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/download/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/export-pdf/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/export-pdf/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/export-pdf/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/history/restore/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/history/restore/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/history/restore/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/history/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/history/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/history/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/move/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/move/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/move/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/[id]/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/upload/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/upload/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/files/upload/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/folders/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/folders/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/folders/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/git/remote/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/git/remote/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/git/remote/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/git/sync-all/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/git/sync-all/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/git/sync-all/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/hands/test-pattern/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/hands/test-pattern/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/hands/test-pattern/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/hands/validate/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/hands/validate/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/hands/validate/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/health/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/health/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/health/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/install-snippets/route.js +17 -0
- package/bundle/standalone/apps/web/.next/server/app/api/install-snippets/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/install-snippets/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/mcp-tools/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/mcp-tools/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/mcp-tools/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/profile/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/profile/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/profile/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/hands-config/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/hands-config/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/hands-config/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/journal-config/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/journal-config/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/journal-config/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/journal-status/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/journal-status/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/journal-status/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/onboard/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/onboard/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/onboard/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/refresh/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/refresh/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/refresh/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/sync/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/sync/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/[id]/sync/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/onboard/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/onboard/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/onboard/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/projects/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/publish/html/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/publish/html/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/publish/html/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/publish/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/publish/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/publish/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/refresh/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/refresh/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/refresh/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/reindex/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/reindex/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/reindex/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/search/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/search/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/search/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/tags/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/tags/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/tags/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/ws-config/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/ws-config/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/api/ws-config/route_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/apple-icon.png/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/apple-icon.png.body +0 -0
- package/bundle/standalone/apps/web/.next/server/app/apple-icon.png.meta +1 -0
- package/bundle/standalone/apps/web/.next/server/app/calendar/page.js +2 -0
- package/bundle/standalone/apps/web/.next/server/app/calendar/page.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/calendar/page_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/favicon.ico/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/favicon.ico.body +0 -0
- package/bundle/standalone/apps/web/.next/server/app/favicon.ico.meta +1 -0
- package/bundle/standalone/apps/web/.next/server/app/icon.png/route.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/icon.png/route.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/icon.png.body +0 -0
- package/bundle/standalone/apps/web/.next/server/app/icon.png.meta +1 -0
- package/bundle/standalone/apps/web/.next/server/app/login/page.js +2 -0
- package/bundle/standalone/apps/web/.next/server/app/login/page.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/login/page_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/page.js +9 -0
- package/bundle/standalone/apps/web/.next/server/app/page.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/preview/motifs/page.js +6 -0
- package/bundle/standalone/apps/web/.next/server/app/preview/motifs/page.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/app/preview/motifs/page_client-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/app/preview/motifs.html +5 -0
- package/bundle/standalone/apps/web/.next/server/app/preview/motifs.meta +7 -0
- package/bundle/standalone/apps/web/.next/server/app/preview/motifs.rsc +29 -0
- package/bundle/standalone/apps/web/.next/server/app-paths-manifest.json +60 -0
- package/bundle/standalone/apps/web/.next/server/chunks/1018.js +115 -0
- package/bundle/standalone/apps/web/.next/server/chunks/1096.js +23 -0
- package/bundle/standalone/apps/web/.next/server/chunks/1139.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/128.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/1921.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2034.js +36 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2048.js +64 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2065.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2144.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2151.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2161.js +153 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2450.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/246.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/260.js +24 -0
- package/bundle/standalone/apps/web/.next/server/chunks/269.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2792.js +287 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2923.js +22 -0
- package/bundle/standalone/apps/web/.next/server/chunks/2944.js +77 -0
- package/bundle/standalone/apps/web/.next/server/chunks/3334.js +141 -0
- package/bundle/standalone/apps/web/.next/server/chunks/3668.js +9 -0
- package/bundle/standalone/apps/web/.next/server/chunks/3758.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/3833.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/3990.js +2 -0
- package/bundle/standalone/apps/web/.next/server/chunks/4274.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/4290.js +252 -0
- package/bundle/standalone/apps/web/.next/server/chunks/4347.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/4550.js +226 -0
- package/bundle/standalone/apps/web/.next/server/chunks/4824.js +166 -0
- package/bundle/standalone/apps/web/.next/server/chunks/509.js +43 -0
- package/bundle/standalone/apps/web/.next/server/chunks/5104.js +215 -0
- package/bundle/standalone/apps/web/.next/server/chunks/5186.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/5400.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/5558.js +80 -0
- package/bundle/standalone/apps/web/.next/server/chunks/6496.js +93 -0
- package/bundle/standalone/apps/web/.next/server/chunks/6693.js +148 -0
- package/bundle/standalone/apps/web/.next/server/chunks/6775.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/7020.js +29 -0
- package/bundle/standalone/apps/web/.next/server/chunks/7098.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/7117.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/7204.js +104 -0
- package/bundle/standalone/apps/web/.next/server/chunks/7342.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/7629.js +80 -0
- package/bundle/standalone/apps/web/.next/server/chunks/7784.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8286.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8349.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8620.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8675.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8860.js +24 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8896.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8950.js +5 -0
- package/bundle/standalone/apps/web/.next/server/chunks/8960.js +79 -0
- package/bundle/standalone/apps/web/.next/server/chunks/899.js +2 -0
- package/bundle/standalone/apps/web/.next/server/chunks/9069.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/9315.js +34 -0
- package/bundle/standalone/apps/web/.next/server/chunks/9372.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/9555.js +6 -0
- package/bundle/standalone/apps/web/.next/server/chunks/9571.js +9 -0
- package/bundle/standalone/apps/web/.next/server/chunks/9681.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/97.js +90 -0
- package/bundle/standalone/apps/web/.next/server/chunks/9797.js +1 -0
- package/bundle/standalone/apps/web/.next/server/chunks/989.js +1 -0
- package/bundle/standalone/apps/web/.next/server/functions-config-manifest.json +4 -0
- package/bundle/standalone/apps/web/.next/server/instrumentation.js +1 -0
- package/bundle/standalone/apps/web/.next/server/middleware-build-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/middleware-manifest.json +6 -0
- package/bundle/standalone/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/next-font-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/next-font-manifest.json +1 -0
- package/bundle/standalone/apps/web/.next/server/pages/404.html +1 -0
- package/bundle/standalone/apps/web/.next/server/pages/500.html +1 -0
- package/bundle/standalone/apps/web/.next/server/pages/_app.js +1 -0
- package/bundle/standalone/apps/web/.next/server/pages/_app.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/pages/_document.js +1 -0
- package/bundle/standalone/apps/web/.next/server/pages/_document.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/pages/_error.js +19 -0
- package/bundle/standalone/apps/web/.next/server/pages/_error.js.nft.json +1 -0
- package/bundle/standalone/apps/web/.next/server/pages-manifest.json +6 -0
- package/bundle/standalone/apps/web/.next/server/server-reference-manifest.js +1 -0
- package/bundle/standalone/apps/web/.next/server/server-reference-manifest.json +1 -0
- package/bundle/standalone/apps/web/.next/server/webpack-runtime.js +1 -0
- package/bundle/standalone/apps/web/.next/static/TwaiLte1NHCp3gRYUc-go/_buildManifest.js +1 -0
- package/bundle/standalone/apps/web/.next/static/TwaiLte1NHCp3gRYUc-go/_ssgManifest.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/02852184.a3b62691cdc349cf.js +80 -0
- package/bundle/standalone/apps/web/.next/static/chunks/1226.49d217dc03a1770f.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/1286.8da72129ab3aa8fd.js +77 -0
- package/bundle/standalone/apps/web/.next/static/chunks/1403cfaa-33c2b74c127517c2.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/171.a4732e77e941b2cd.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/1733.3a6dae5cc3785d0b.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/2081.313746c212bfc5c9.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/2086.0b05a08670aae1db.js +226 -0
- package/bundle/standalone/apps/web/.next/static/chunks/2377-956eb9b333193ac6.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/3034.e1171cbeeed85923.js +5 -0
- package/bundle/standalone/apps/web/.next/static/chunks/3068-293b252158eb9d15.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/3297.7664b51ee69c7513.js +23 -0
- package/bundle/standalone/apps/web/.next/static/chunks/338.77f45c7810885961.js +115 -0
- package/bundle/standalone/apps/web/.next/static/chunks/3471.7790a4192ef84a1a.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/3514.14aa56fe189fd052.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/3696.5d462babda0c0b9e.js +34 -0
- package/bundle/standalone/apps/web/.next/static/chunks/408.82356d1e11e880d9.js +93 -0
- package/bundle/standalone/apps/web/.next/static/chunks/46.9922e50f2158e1a9.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/4798.d851e8027b2db933.js +287 -0
- package/bundle/standalone/apps/web/.next/static/chunks/4908.2fed0b6fbc391b55.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/4915.97b9c59991c26fa7.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/492.234794e12315e4bb.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/4936.c65cdd63440ade70.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/5127.e5e917b5cb9c4e52.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/5141.93a42ebd1580da60.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/5159-7bcf68ab11c1091e.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/5514.f969d5c86c590512.js +73 -0
- package/bundle/standalone/apps/web/.next/static/chunks/559.c4615787d977bf47.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/5667.e0097b2112faa29b.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6367.fd87728718a97771.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6394.c2172a59c01bd0bd.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6396.d288334e13a70139.js +24 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6483.88695b22b21b10f1.js +9 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6561.176d35e576df3f9d.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6584.87fc375a0510108d.js +104 -0
- package/bundle/standalone/apps/web/.next/static/chunks/693.71c8b97896628a66.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6934.45e50410379dc377.js +79 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6a2ca82e.c26cb70da3106c1c.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/6b5bb80a.c511153adad62faf.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/7216.d1b096d2a35967fd.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/7342.fcb52cf5f7ce0e17.js +29 -0
- package/bundle/standalone/apps/web/.next/static/chunks/7541.43ff810bb14fd5c0.js +43 -0
- package/bundle/standalone/apps/web/.next/static/chunks/7563.376c2692778a62b3.js +148 -0
- package/bundle/standalone/apps/web/.next/static/chunks/7756.b0dd00e996549a39.js +24 -0
- package/bundle/standalone/apps/web/.next/static/chunks/8052.69c066e56bbd5d6c.js +64 -0
- package/bundle/standalone/apps/web/.next/static/chunks/8080c6f4.ed360e7424d6fe99.js +62 -0
- package/bundle/standalone/apps/web/.next/static/chunks/8280.81c2b0d61e27a576.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/8547.5bef8f1afd162429.js +90 -0
- package/bundle/standalone/apps/web/.next/static/chunks/8602.0b457ca55bd2c08e.js +141 -0
- package/bundle/standalone/apps/web/.next/static/chunks/8794.401ab179d53aa5d5.js +80 -0
- package/bundle/standalone/apps/web/.next/static/chunks/9053.c953d758ff5dc6ee.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/9122.cf7fd16fc8d7fad0.js +36 -0
- package/bundle/standalone/apps/web/.next/static/chunks/9255.78469e88fa06e186.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/944.ba7dcdca1c72114a.js +166 -0
- package/bundle/standalone/apps/web/.next/static/chunks/9794-16144bed6de4bf26.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/9852.e1937ca867a99475.js +215 -0
- package/bundle/standalone/apps/web/.next/static/chunks/9981.8fa0bb90a26c66eb.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/a118fb18.9c3b4291884abee0.js +119 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/_not-found/page-972b01bf23ed0942.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/about/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/auth/login/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/auth/logout/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/auth/setup/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/auth/status/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/auth/token/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/conflicts/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/entities/[id]/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/entities/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/events/[id]/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/events/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/ics/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/links/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/calendar/settings/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/clip/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/docker-config/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/export/zip/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/[id]/download/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/[id]/export-pdf/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/[id]/history/restore/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/[id]/history/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/[id]/move/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/[id]/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/files/upload/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/folders/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/git/remote/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/git/sync-all/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/hands/test-pattern/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/hands/validate/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/health/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/install-snippets/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/mcp-tools/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/profile/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/[id]/hands-config/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/[id]/journal-config/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/[id]/journal-status/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/[id]/onboard/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/[id]/refresh/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/[id]/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/[id]/sync/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/onboard/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/projects/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/publish/html/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/publish/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/refresh/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/reindex/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/search/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/tags/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/api/ws-config/route-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/calendar/page-180fba7a5e149d79.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/layout-9a9569fc88cd95d2.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/login/page-d299785546ea6ab6.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/page-2b151d30cb29d2e5.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/app/preview/motifs/page-c1d02d72a16497fa.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/d185f5cd.71b8f43667fbf60d.js +153 -0
- package/bundle/standalone/apps/web/.next/static/chunks/framework-d5846a86e24c79c9.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/main-0205543fb3b69ad5.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/main-app-20d292116f434ff3.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/pages/_app-fe81927504f65cde.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/pages/_error-2973b69c43483f0b.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/bundle/standalone/apps/web/.next/static/chunks/webpack-8818fea786a923fe.js +1 -0
- package/bundle/standalone/apps/web/.next/static/css/c00514317f297826.css +3 -0
- package/bundle/standalone/apps/web/.next/static/media/0aa834ed78bf6d07-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/438aa629764e75f3-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/4c9affa5bc8f420e-s.p.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/51251f8b9793cdb3-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/67957d42bae0796d-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/875ae681bfde4580-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/886030b0b59bc5a7-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/939c4f875ee75fbb-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/9b01607e2f794050-s.p.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/a5ded5fed781d3c1-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/bb3ef058b751a6ad-s.p.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/cc978ac5ee68c2b6-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/e857b654a2caa584-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/f28ff2d15b1e9bd8-s.woff2 +0 -0
- package/bundle/standalone/apps/web/.next/static/media/f911b923c6adde36-s.woff2 +0 -0
- package/bundle/standalone/apps/web/package.json +66 -0
- package/bundle/standalone/apps/web/public/logo-dark.png +0 -0
- package/bundle/standalone/apps/web/public/logo.png +0 -0
- package/bundle/standalone/apps/web/server.js +38 -0
- package/bundle/standalone/apps/web/src/lib/mcp-tools.json +1941 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/agent-rules/rules-block.md +185 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/calendar-tools.d.ts +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/calendar-tools.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/calendar-tools.js +205 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/calendar-tools.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/confirm.d.ts +25 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/confirm.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/confirm.js +40 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/confirm.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/executor.d.ts +13 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/executor.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/executor.js +250 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/executor.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/formatter.d.ts +11 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/formatter.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/formatter.js +39 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/formatter.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/loader.d.ts +4 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/loader.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/loader.js +164 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/loader.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/registry.d.ts +42 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/registry.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/registry.js +143 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/registry.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/sanitizer.d.ts +16 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/sanitizer.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/sanitizer.js +86 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/sanitizer.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/schema-doc.d.ts +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/schema-doc.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/schema-doc.js +202 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/schema-doc.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/types.d.ts +50 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/types.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/types.js +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/hands/types.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/index.d.ts +3 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/index.js +2117 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/index.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-capture.d.ts +31 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-capture.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-capture.js +293 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-capture.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-commit-upgrades-tool.d.ts +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-commit-upgrades-tool.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-commit-upgrades-tool.js +24 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-commit-upgrades-tool.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-housekeep-tool.d.ts +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-housekeep-tool.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-housekeep-tool.js +24 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-housekeep-tool.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-tools.d.ts +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-tools.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-tools.js +57 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/journal-tools.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/migrations/001-initial.sql +72 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/migrations/002-remote-git.sql +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/migrations/003-source-path-index.sql +2 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/migrations/004-journaling.sql +44 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/migrations/005-auth.sql +7 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/migrations/006-journal-locks.sql +11 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/migrations/007-calendar.sql +49 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/profile-tool.d.ts +9 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/profile-tool.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/profile-tool.js +25 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/profile-tool.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/re2-compat.d.ts +4 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/re2-compat.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/re2-compat.js +14 -0
- package/bundle/standalone/node_modules/kontexta-mcp/dist/re2-compat.js.map +1 -0
- package/bundle/standalone/node_modules/kontexta-mcp/package.json +66 -0
- package/bundle/standalone/node_modules/kxta-core/dist/agent-rules/index.d.ts +73 -0
- package/bundle/standalone/node_modules/kxta-core/dist/agent-rules/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/agent-rules/index.js +436 -0
- package/bundle/standalone/node_modules/kxta-core/dist/agent-rules/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/agent-rules/rules-block.md +185 -0
- package/bundle/standalone/node_modules/kxta-core/dist/bundle/index.d.ts +26 -0
- package/bundle/standalone/node_modules/kxta-core/dist/bundle/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/bundle/index.js +115 -0
- package/bundle/standalone/node_modules/kxta-core/dist/bundle/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/conflicts.d.ts +32 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/conflicts.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/conflicts.js +129 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/conflicts.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/ics.d.ts +16 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/ics.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/ics.js +73 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/ics.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/index.d.ts +9 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/index.js +7 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/repository.d.ts +65 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/repository.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/repository.js +219 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/repository.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/types.d.ts +52 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/types.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/types.js +2 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/types.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/validate.d.ts +11 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/validate.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/validate.js +39 -0
- package/bundle/standalone/node_modules/kxta-core/dist/calendar/validate.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/extract.d.ts +26 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/extract.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/extract.js +315 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/extract.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/frontmatter.d.ts +10 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/frontmatter.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/frontmatter.js +53 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/frontmatter.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/index.d.ts +12 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/index.js +38 -0
- package/bundle/standalone/node_modules/kxta-core/dist/clip/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/env-shim.d.ts +2 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/env-shim.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/env-shim.js +26 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/env-shim.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/file-migration.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/file-migration.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/file-migration.js +30 -0
- package/bundle/standalone/node_modules/kxta-core/dist/compat/file-migration.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/index.d.ts +37 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/index.js +182 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/migrations/001-initial.sql +72 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/migrations/002-remote-git.sql +2 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/migrations/003-source-path-index.sql +2 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/migrations/004-journaling.sql +44 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/migrations/005-auth.sql +7 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/migrations/006-journal-locks.sql +11 -0
- package/bundle/standalone/node_modules/kxta-core/dist/db/migrations/007-calendar.sql +49 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/index.d.ts +84 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/index.js +631 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/sections.d.ts +48 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/sections.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/sections.js +112 -0
- package/bundle/standalone/node_modules/kxta-core/dist/files/sections.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/git/index.d.ts +92 -0
- package/bundle/standalone/node_modules/kxta-core/dist/git/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/git/index.js +801 -0
- package/bundle/standalone/node_modules/kxta-core/dist/git/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/index.d.ts +24 -0
- package/bundle/standalone/node_modules/kxta-core/dist/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/index.js +22 -0
- package/bundle/standalone/node_modules/kxta-core/dist/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/cooldown.d.ts +28 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/cooldown.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/cooldown.js +61 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/cooldown.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/distill.d.ts +16 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/distill.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/distill.js +311 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/distill.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/engine.d.ts +45 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/engine.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/engine.js +198 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/engine.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/git-watcher.d.ts +11 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/git-watcher.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/git-watcher.js +41 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/git-watcher.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/high-water.d.ts +16 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/high-water.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/high-water.js +30 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/high-water.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/housekeep.d.ts +22 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/housekeep.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/housekeep.js +104 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/housekeep.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/index.d.ts +27 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/index.js +18 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/build-failure-recovery.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/build-failure-recovery.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/build-failure-recovery.js +31 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/build-failure-recovery.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/error-recovery.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/error-recovery.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/error-recovery.js +31 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/error-recovery.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/exploration.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/exploration.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/exploration.js +28 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/exploration.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/extra-loader.d.ts +13 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/extra-loader.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/extra-loader.js +45 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/extra-loader.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/feature-development.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/feature-development.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/feature-development.js +21 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/feature-development.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/incident-response.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/incident-response.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/incident-response.js +21 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/incident-response.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/index.d.ts +16 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/index.js +40 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/pivot.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/pivot.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/pivot.js +15 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/pivot.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/read-only-investigation.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/read-only-investigation.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/read-only-investigation.js +24 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/read-only-investigation.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/refactor.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/refactor.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/refactor.js +42 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/refactor.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/tagging-pass.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/tagging-pass.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/tagging-pass.js +22 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/tagging-pass.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/test-cycle.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/test-cycle.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/test-cycle.js +23 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/patterns/test-cycle.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/presence.d.ts +2 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/presence.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/presence.js +17 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/presence.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/redact.d.ts +8 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/redact.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/redact.js +40 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/redact.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/renderer.d.ts +10 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/renderer.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/renderer.js +40 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/renderer.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/repository.d.ts +30 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/repository.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/repository.js +66 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/repository.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/strict-mode.d.ts +9 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/strict-mode.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/strict-mode.js +32 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/strict-mode.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/topic-detector.d.ts +4 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/topic-detector.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/topic-detector.js +71 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/topic-detector.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/types.d.ts +59 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/types.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/types.js +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/types.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/writer.d.ts +16 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/writer.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/writer.js +44 -0
- package/bundle/standalone/node_modules/kxta-core/dist/journal/writer.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/index.d.ts +97 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/index.js +517 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/settings.d.ts +13 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/settings.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/settings.js +33 -0
- package/bundle/standalone/node_modules/kxta-core/dist/metadata/settings.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/profile/index.d.ts +23 -0
- package/bundle/standalone/node_modules/kxta-core/dist/profile/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/profile/index.js +161 -0
- package/bundle/standalone/node_modules/kxta-core/dist/profile/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/project-map/index.d.ts +34 -0
- package/bundle/standalone/node_modules/kxta-core/dist/project-map/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/project-map/index.js +157 -0
- package/bundle/standalone/node_modules/kxta-core/dist/project-map/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/types.d.ts +69 -0
- package/bundle/standalone/node_modules/kxta-core/dist/types.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/types.js +5 -0
- package/bundle/standalone/node_modules/kxta-core/dist/types.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/extensions.d.ts +15 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/extensions.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/extensions.js +26 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/extensions.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/paths.d.ts +31 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/paths.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/paths.js +179 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/paths.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/safety.d.ts +37 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/safety.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/safety.js +156 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/safety.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/tokens.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/tokens.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/tokens.js +13 -0
- package/bundle/standalone/node_modules/kxta-core/dist/util/tokens.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/watcher/index.d.ts +9 -0
- package/bundle/standalone/node_modules/kxta-core/dist/watcher/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/watcher/index.js +214 -0
- package/bundle/standalone/node_modules/kxta-core/dist/watcher/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/whats-new/index.d.ts +36 -0
- package/bundle/standalone/node_modules/kxta-core/dist/whats-new/index.d.ts.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/dist/whats-new/index.js +94 -0
- package/bundle/standalone/node_modules/kxta-core/dist/whats-new/index.js.map +1 -0
- package/bundle/standalone/node_modules/kxta-core/package.json +20 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/cli.d.ts +9 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/cli.js +139 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/config.d.ts +25 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/config.js +62 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/index.d.ts +2 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/index.js +45 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/pipeline.d.ts +14 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/pipeline.js +42 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/blocks/endpoints.d.ts +6 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/blocks/endpoints.js +112 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/blocks/glossary.d.ts +2 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/blocks/glossary.js +42 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/blocks/mermaid.d.ts +2 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/blocks/mermaid.js +17 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/llms.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/llms.js +52 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/markdown.d.ts +24 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/markdown.js +87 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/nav.d.ts +21 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/nav.js +107 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/pdf.d.ts +10 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/render/pdf.js +70 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/seeds/01-overview.md +74 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/seeds/02-api.md +169 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/seeds/03-improvements.md +90 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/seeds/04-glossary.md +55 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/seeds/seeds.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/seeds/seeds.js +53 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/source/enumerate.d.ts +3 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/source/enumerate.js +50 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/source/reader.d.ts +20 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/source/reader.js +20 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/api-ref.css +593 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/app.js +297 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/brutalist.css +57 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/flat.css +182 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/minimal.css +578 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/ocean.css +179 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/paper.css +33 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/shell.d.ts +8 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/shell.js +181 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/solarized.css +162 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/terminal.css +37 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/template/theme.css +701 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/types.d.ts +97 -0
- package/bundle/standalone/node_modules/kxta-publish/dist/types.js +1 -0
- package/bundle/standalone/node_modules/kxta-publish/package.json +25 -0
- package/bundle/standalone/package.json +26 -0
- package/dist/chunk-KQTCKRN2.js +31 -0
- package/dist/doctor-W733U3FD.js +46 -0
- package/dist/index.js +45 -0
- package/dist/mcp-DGMGR3MZ.js +34 -0
- package/dist/start-RCW7AKUK.js +121 -0
- package/package.json +89 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import * as os from "node:os";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
// @vercel/nft — Next's build-time file tracer — statically evaluates
|
|
5
|
+
// os.homedir() and process.env.* inside fs-call arguments and expands any
|
|
6
|
+
// unresolved remainder into a recursive glob rooted at the evaluated
|
|
7
|
+
// prefix. On Windows that means walking C:\Users\<user>\** through
|
|
8
|
+
// protected junctions ("Application Data"), which fails `next build` with
|
|
9
|
+
// EPERM/EACCES. Routing the values through this opaque identity makes the
|
|
10
|
+
// prefix statically unknown, so the tracer skips the expression instead
|
|
11
|
+
// of globbing the user profile. Zero runtime cost.
|
|
12
|
+
const opaque = (v) => v;
|
|
13
|
+
/**
|
|
14
|
+
* Resolves the absolute path to the system default data directory.
|
|
15
|
+
* Falls back to OS-specific standards if KONTEXTA_DATA_DIR is not set.
|
|
16
|
+
*
|
|
17
|
+
* Exported so webpack-bundled consumers (apps/web) never re-implement this
|
|
18
|
+
* with raw os.homedir()/process.env reads — bundled+minified copies of this
|
|
19
|
+
* logic are exactly what @vercel/nft re-folds into user-profile globs.
|
|
20
|
+
*/
|
|
21
|
+
export function defaultDataDir() {
|
|
22
|
+
const home = opaque(os.homedir());
|
|
23
|
+
switch (process.platform) {
|
|
24
|
+
case "darwin":
|
|
25
|
+
return path.join(home, "Library", "Application Support", "kontexta");
|
|
26
|
+
case "win32":
|
|
27
|
+
return path.join(opaque(process.env.APPDATA) ?? path.join(home, "AppData", "Roaming"), "kontexta");
|
|
28
|
+
default:
|
|
29
|
+
return path.join(opaque(process.env.XDG_DATA_HOME) ?? path.join(home, ".local", "share"), "kontexta");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns the active Kontexta data directory.
|
|
34
|
+
* Centralizes path resolution and ensures synchronization between components.
|
|
35
|
+
*
|
|
36
|
+
* Priority Rules:
|
|
37
|
+
* 1. Web UI Override: If the process is detected as the Web UI and has an override, it WINS.
|
|
38
|
+
* 2. Cached Override: If a path was previously persisted to ~/.kontexta_datadir (e.g. by the Web UI), it WINS.
|
|
39
|
+
* 3. Local Override: If the current process (e.g. MCP) has an override and no cache exists, it is used and cached.
|
|
40
|
+
* 4. OS Default: Fall back to the system standard.
|
|
41
|
+
*/
|
|
42
|
+
let _resolvedDataDir = null;
|
|
43
|
+
function isWebContext() {
|
|
44
|
+
return (process.env.npm_package_name === "kxta-web" ||
|
|
45
|
+
!!process.env.NEXT_RUNTIME ||
|
|
46
|
+
!!process.env.__NEXT_PAGES_DIR);
|
|
47
|
+
}
|
|
48
|
+
/** True when a resolved path looks like a temp/test location that must not be persisted to cache. */
|
|
49
|
+
function isTempOrTestPath(p) {
|
|
50
|
+
const lower = p.toLowerCase();
|
|
51
|
+
const tmp = os.tmpdir().toLowerCase();
|
|
52
|
+
const segments = p.split(path.sep).map((s) => s.toLowerCase());
|
|
53
|
+
return (lower.startsWith("/tmp") ||
|
|
54
|
+
lower.startsWith(tmp) ||
|
|
55
|
+
segments.includes("tmp") ||
|
|
56
|
+
segments.includes("test") ||
|
|
57
|
+
lower.includes("-tmp-") ||
|
|
58
|
+
(process.platform === "win32" && segments.includes("temp")));
|
|
59
|
+
}
|
|
60
|
+
/** Resets the in-process data-dir cache. Call in test teardown after changing KONTEXTA_DATA_DIR. */
|
|
61
|
+
export function resetDataDirCache() {
|
|
62
|
+
_resolvedDataDir = null;
|
|
63
|
+
}
|
|
64
|
+
export function getDataDir() {
|
|
65
|
+
if (_resolvedDataDir)
|
|
66
|
+
return _resolvedDataDir;
|
|
67
|
+
const home = opaque(os.homedir());
|
|
68
|
+
const cacheFile = path.join(home, ".kontexta_datadir");
|
|
69
|
+
const envOverride = process.env.KONTEXTA_DATA_DIR;
|
|
70
|
+
const isWeb = isWebContext();
|
|
71
|
+
// 1. Web UI Override takes absolute priority and updates the cache —
|
|
72
|
+
// but never persist temp/test paths so test runs don't poison the cache.
|
|
73
|
+
if (isWeb && envOverride) {
|
|
74
|
+
_resolvedDataDir = path.resolve(envOverride);
|
|
75
|
+
if (!isTempOrTestPath(_resolvedDataDir)) {
|
|
76
|
+
try {
|
|
77
|
+
fs.writeFileSync(cacheFile, _resolvedDataDir, "utf8");
|
|
78
|
+
}
|
|
79
|
+
catch { }
|
|
80
|
+
}
|
|
81
|
+
return _resolvedDataDir;
|
|
82
|
+
}
|
|
83
|
+
// 2. Explicit local override (KONTEXTA_DATA_DIR set on this process).
|
|
84
|
+
// Wins over cache for non-web contexts. Don't persist temp/test paths.
|
|
85
|
+
if (envOverride) {
|
|
86
|
+
_resolvedDataDir = path.resolve(envOverride);
|
|
87
|
+
const isTestEnv = !!process.env.VITEST || process.env.NODE_ENV === "test";
|
|
88
|
+
if (!isTempOrTestPath(_resolvedDataDir) && !isTestEnv) {
|
|
89
|
+
try {
|
|
90
|
+
fs.writeFileSync(cacheFile, _resolvedDataDir, "utf8");
|
|
91
|
+
}
|
|
92
|
+
catch { }
|
|
93
|
+
}
|
|
94
|
+
return _resolvedDataDir;
|
|
95
|
+
}
|
|
96
|
+
// 3. Check for a persisted "Source of Truth" from a previous run (usually Web UI).
|
|
97
|
+
// Only consulted when no local override exists. Skip stale temp-dir entries.
|
|
98
|
+
const isTestEnv = !!process.env.VITEST || process.env.NODE_ENV === "test";
|
|
99
|
+
if (!isTestEnv && fs.existsSync(cacheFile)) {
|
|
100
|
+
try {
|
|
101
|
+
const cached = fs.readFileSync(cacheFile, "utf8").trim();
|
|
102
|
+
if (cached && path.isAbsolute(cached) && !isTempOrTestPath(cached)) {
|
|
103
|
+
_resolvedDataDir = cached;
|
|
104
|
+
return _resolvedDataDir;
|
|
105
|
+
}
|
|
106
|
+
// Cached path is a temp/test path — remove the stale entry.
|
|
107
|
+
try {
|
|
108
|
+
fs.unlinkSync(cacheFile);
|
|
109
|
+
}
|
|
110
|
+
catch { }
|
|
111
|
+
}
|
|
112
|
+
catch { }
|
|
113
|
+
}
|
|
114
|
+
// 4. Default fallthrough to OS-standard directory.
|
|
115
|
+
_resolvedDataDir = defaultDataDir();
|
|
116
|
+
return _resolvedDataDir;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Returns the active SQLite database path.
|
|
120
|
+
* Respects the KONTEXTA_DB_PATH environment variable override,
|
|
121
|
+
* falling back to the data directory + 'kontexta.db'.
|
|
122
|
+
*/
|
|
123
|
+
export function getDbPath() {
|
|
124
|
+
return process.env.KONTEXTA_DB_PATH || path.join(getDataDir(), "kontexta.db");
|
|
125
|
+
}
|
|
126
|
+
/** Human-readable tilde-abbreviated version of the OS default data dir. */
|
|
127
|
+
export function defaultDataDirDisplay() {
|
|
128
|
+
const full = defaultDataDir();
|
|
129
|
+
const home = opaque(os.homedir());
|
|
130
|
+
return full.startsWith(home) ? `~${full.slice(home.length)}` : full;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Sensitive home-relative directories that user-supplied paths must never
|
|
134
|
+
* resolve into. Lives here (not in webpack-bundled app code) so os.homedir()
|
|
135
|
+
* never appears in a minified server chunk — see the `opaque` note above.
|
|
136
|
+
*/
|
|
137
|
+
export function homeSensitivePrefixes() {
|
|
138
|
+
const home = opaque(os.homedir());
|
|
139
|
+
return [".ssh", ".aws", ".gnupg", ".kube", ".config/gcloud", ".docker"].map((p) => `${home}/${p}`);
|
|
140
|
+
}
|
|
141
|
+
function safeMkdir(dir) {
|
|
142
|
+
try {
|
|
143
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
if (e?.code === "EACCES" || e?.code === "EPERM" || e?.code === "EROFS") {
|
|
147
|
+
throw new Error(`Kontexta cannot write to data directory: ${dir} (${e.code}). ` +
|
|
148
|
+
`Set KONTEXTA_DATA_DIR to a writable path, or fix permissions on ${dir}.`);
|
|
149
|
+
}
|
|
150
|
+
throw e;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Ensures the data directory and essential subdirectories exist and are writable.
|
|
155
|
+
*/
|
|
156
|
+
export function ensureDataDir() {
|
|
157
|
+
const dataDir = getDataDir();
|
|
158
|
+
if (!fs.existsSync(dataDir)) {
|
|
159
|
+
safeMkdir(dataDir);
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
fs.accessSync(dataDir, fs.constants.W_OK);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
throw new Error(`Kontexta data directory ${dataDir} is not writable. ` +
|
|
166
|
+
`Set KONTEXTA_DATA_DIR to a writable path, or fix permissions.`);
|
|
167
|
+
}
|
|
168
|
+
const dirsToCreate = [
|
|
169
|
+
path.join(dataDir, "knowledge"),
|
|
170
|
+
path.join(dataDir, "backups"),
|
|
171
|
+
path.join(dataDir, "projects")
|
|
172
|
+
];
|
|
173
|
+
for (const dir of dirsToCreate) {
|
|
174
|
+
if (!fs.existsSync(dir)) {
|
|
175
|
+
safeMkdir(dir);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Throws if `name` resolves outside `base`. Rejects absolute paths, ".."
|
|
3
|
+
* traversal, and null bytes. Returns the resolved absolute path on success.
|
|
4
|
+
*/
|
|
5
|
+
export declare function assertPathInside(base: string, name: string): string;
|
|
6
|
+
/** Escape SQL LIKE metacharacters (%, _, \). Use with `ESCAPE '\'`. */
|
|
7
|
+
export declare function escapeLike(input: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Lock key for serialising writes to a single KB file path against the
|
|
10
|
+
* watcher's add/change/unlink handlers. resolve() normalises so callers
|
|
11
|
+
* that pass relative-or-absolute, with-or-without trailing slash, all
|
|
12
|
+
* agree on the same key.
|
|
13
|
+
*/
|
|
14
|
+
export declare function fileLockKey(filePath: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Wrap a promise with in-flight bookkeeping. Use for any long-running op
|
|
17
|
+
* that doesn't already go through `withLock`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function track<T>(p: Promise<T>): Promise<T>;
|
|
20
|
+
/** Current count of in-flight tracked operations. */
|
|
21
|
+
export declare function inFlightCount(): number;
|
|
22
|
+
/** Whether `gracefulShutdown` has been initiated. */
|
|
23
|
+
export declare function isShuttingDown(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Mark the process as shutting down. New calls to `withLock` and `track`
|
|
26
|
+
* still execute (they're already in flight when the signal arrives), but
|
|
27
|
+
* external callers can check `isShuttingDown()` to refuse new work.
|
|
28
|
+
*/
|
|
29
|
+
export declare function setShuttingDown(value: boolean): void;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve once `_inFlight === 0` or `timeoutMs` elapses. Returns the count
|
|
32
|
+
* of still-in-flight operations at resolve time (0 = clean drain;
|
|
33
|
+
* positive = timeout reached with work still pending).
|
|
34
|
+
*/
|
|
35
|
+
export declare function awaitDrain(timeoutMs: number): Promise<number>;
|
|
36
|
+
export declare function withLock<T>(key: string, fn: () => Promise<T>): Promise<T>;
|
|
37
|
+
//# sourceMappingURL=safety.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/util/safety.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBnE;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAgBD;;;GAGG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWxD;AAED,qDAAqD;AACrD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,qDAAqD;AACrD,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB7D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqCzE"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared safety helpers: path containment validation, SQL LIKE escaping,
|
|
3
|
+
* per-key async mutex.
|
|
4
|
+
*/
|
|
5
|
+
import { resolve, sep, isAbsolute } from "node:path";
|
|
6
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
|
+
/**
|
|
8
|
+
* Throws if `name` resolves outside `base`. Rejects absolute paths, ".."
|
|
9
|
+
* traversal, and null bytes. Returns the resolved absolute path on success.
|
|
10
|
+
*/
|
|
11
|
+
export function assertPathInside(base, name) {
|
|
12
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
13
|
+
throw new Error("Invalid path: empty");
|
|
14
|
+
}
|
|
15
|
+
if (name.includes("\0")) {
|
|
16
|
+
throw new Error("Invalid path: null byte");
|
|
17
|
+
}
|
|
18
|
+
if (isAbsolute(name)) {
|
|
19
|
+
throw new Error("Invalid path: absolute paths are not allowed");
|
|
20
|
+
}
|
|
21
|
+
const baseResolved = resolve(base);
|
|
22
|
+
const target = resolve(baseResolved, name);
|
|
23
|
+
if (target !== baseResolved && !target.startsWith(baseResolved + sep)) {
|
|
24
|
+
throw new Error("Invalid path: escapes base directory");
|
|
25
|
+
}
|
|
26
|
+
return target;
|
|
27
|
+
}
|
|
28
|
+
/** Escape SQL LIKE metacharacters (%, _, \). Use with `ESCAPE '\'`. */
|
|
29
|
+
export function escapeLike(input) {
|
|
30
|
+
return input.replace(/[\\%_]/g, (ch) => "\\" + ch);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Lock key for serialising writes to a single KB file path against the
|
|
34
|
+
* watcher's add/change/unlink handlers. resolve() normalises so callers
|
|
35
|
+
* that pass relative-or-absolute, with-or-without trailing slash, all
|
|
36
|
+
* agree on the same key.
|
|
37
|
+
*/
|
|
38
|
+
export function fileLockKey(filePath) {
|
|
39
|
+
return `file:${resolve(filePath)}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Per-key serial async mutex. All callers with the same key run one at a time.
|
|
43
|
+
*/
|
|
44
|
+
const _locks = new Map();
|
|
45
|
+
const _heldKeys = new AsyncLocalStorage();
|
|
46
|
+
/* ────────────────────────────────────────────────────────────────────────── */
|
|
47
|
+
/* In-flight tracking + graceful shutdown. */
|
|
48
|
+
/* ────────────────────────────────────────────────────────────────────────── */
|
|
49
|
+
let _inFlight = 0;
|
|
50
|
+
let _shuttingDown = false;
|
|
51
|
+
const _drainWaiters = [];
|
|
52
|
+
/**
|
|
53
|
+
* Wrap a promise with in-flight bookkeeping. Use for any long-running op
|
|
54
|
+
* that doesn't already go through `withLock`.
|
|
55
|
+
*/
|
|
56
|
+
export async function track(p) {
|
|
57
|
+
_inFlight++;
|
|
58
|
+
try {
|
|
59
|
+
return await p;
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
_inFlight--;
|
|
63
|
+
if (_inFlight === 0 && _drainWaiters.length > 0) {
|
|
64
|
+
const waiters = _drainWaiters.splice(0);
|
|
65
|
+
for (const w of waiters)
|
|
66
|
+
w();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** Current count of in-flight tracked operations. */
|
|
71
|
+
export function inFlightCount() {
|
|
72
|
+
return _inFlight;
|
|
73
|
+
}
|
|
74
|
+
/** Whether `gracefulShutdown` has been initiated. */
|
|
75
|
+
export function isShuttingDown() {
|
|
76
|
+
return _shuttingDown;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Mark the process as shutting down. New calls to `withLock` and `track`
|
|
80
|
+
* still execute (they're already in flight when the signal arrives), but
|
|
81
|
+
* external callers can check `isShuttingDown()` to refuse new work.
|
|
82
|
+
*/
|
|
83
|
+
export function setShuttingDown(value) {
|
|
84
|
+
_shuttingDown = value;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resolve once `_inFlight === 0` or `timeoutMs` elapses. Returns the count
|
|
88
|
+
* of still-in-flight operations at resolve time (0 = clean drain;
|
|
89
|
+
* positive = timeout reached with work still pending).
|
|
90
|
+
*/
|
|
91
|
+
export function awaitDrain(timeoutMs) {
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
if (_inFlight === 0) {
|
|
94
|
+
resolve(0);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
let settled = false;
|
|
98
|
+
const onDrain = () => {
|
|
99
|
+
if (settled)
|
|
100
|
+
return;
|
|
101
|
+
settled = true;
|
|
102
|
+
clearTimeout(timer);
|
|
103
|
+
resolve(0);
|
|
104
|
+
};
|
|
105
|
+
const timer = setTimeout(() => {
|
|
106
|
+
if (settled)
|
|
107
|
+
return;
|
|
108
|
+
settled = true;
|
|
109
|
+
const idx = _drainWaiters.indexOf(onDrain);
|
|
110
|
+
if (idx >= 0)
|
|
111
|
+
_drainWaiters.splice(idx, 1);
|
|
112
|
+
resolve(_inFlight);
|
|
113
|
+
}, timeoutMs);
|
|
114
|
+
timer.unref?.();
|
|
115
|
+
_drainWaiters.push(onDrain);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export function withLock(key, fn) {
|
|
119
|
+
// Re-entering the same key would queue behind its own tail → deadlock.
|
|
120
|
+
const held = _heldKeys.getStore();
|
|
121
|
+
if (held?.has(key)) {
|
|
122
|
+
return Promise.reject(new Error(`withLock: re-entrant acquisition of "${key}" would deadlock`));
|
|
123
|
+
}
|
|
124
|
+
const prev = _locks.get(key) ?? Promise.resolve();
|
|
125
|
+
const childHeld = new Set(held ?? []);
|
|
126
|
+
childHeld.add(key);
|
|
127
|
+
const wrapped = () => _heldKeys.run(childHeld, fn);
|
|
128
|
+
// (wrapped, wrapped): proceed regardless of prev's outcome — ordering, not propagation.
|
|
129
|
+
const next = prev.then(wrapped, wrapped);
|
|
130
|
+
// tail swallows rejection only on the chain stored in _locks; callers still see `next`.
|
|
131
|
+
const tail = next.catch(() => { });
|
|
132
|
+
_locks.set(key, tail);
|
|
133
|
+
tail.finally(() => {
|
|
134
|
+
if (_locks.get(key) === tail)
|
|
135
|
+
_locks.delete(key);
|
|
136
|
+
});
|
|
137
|
+
// In-flight bookkeeping: count this as a tracked op.
|
|
138
|
+
_inFlight++;
|
|
139
|
+
next.then(() => {
|
|
140
|
+
_inFlight--;
|
|
141
|
+
if (_inFlight === 0 && _drainWaiters.length > 0) {
|
|
142
|
+
const waiters = _drainWaiters.splice(0);
|
|
143
|
+
for (const w of waiters)
|
|
144
|
+
w();
|
|
145
|
+
}
|
|
146
|
+
}, () => {
|
|
147
|
+
_inFlight--;
|
|
148
|
+
if (_inFlight === 0 && _drainWaiters.length > 0) {
|
|
149
|
+
const waiters = _drainWaiters.splice(0);
|
|
150
|
+
for (const w of waiters)
|
|
151
|
+
w();
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
return next;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/util/safety.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/util/tokens.ts"],"names":[],"mappings":"AAIA,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// packages/core/src/util/tokens.ts
|
|
2
|
+
// Heuristic token count: ~4 bytes/token for ASCII-ish text, ~3 for multi-byte.
|
|
3
|
+
// Same approach used by the MCP server before this was hoisted into core.
|
|
4
|
+
export function estimateTokensFromBuffer(buf) {
|
|
5
|
+
if (buf.length === 0)
|
|
6
|
+
return 1;
|
|
7
|
+
const mostlyAscii = buf.toString("utf-8").length > buf.length * 0.7;
|
|
8
|
+
return Math.max(1, Math.ceil(buf.length / (mostlyAscii ? 4 : 3)));
|
|
9
|
+
}
|
|
10
|
+
export function estimateTokensFromString(s) {
|
|
11
|
+
return estimateTokensFromBuffer(Buffer.from(s, "utf-8"));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/util/tokens.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,+EAA+E;AAC/E,0EAA0E;AAE1E,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;IACpE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,CAAS;IAChD,OAAO,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type FSWatcher } from "chokidar";
|
|
2
|
+
export interface WatcherEvent {
|
|
3
|
+
type: "change" | "add" | "unlink";
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
/** Close every watcher created by createFileWatcher in this process. */
|
|
7
|
+
export declare function closeAllFileWatchers(): Promise<void>;
|
|
8
|
+
export declare function createFileWatcher(watchPaths: string[], onEvent: (event: WatcherEvent) => void): FSWatcher;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAQpD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAgCD,wEAAwE;AACxE,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACrC,SAAS,CAuEX"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import chokidar from "chokidar";
|
|
2
|
+
import { getDatabase } from "../db/index.js";
|
|
3
|
+
import { isIndexedFile, stripIndexedExt } from "../util/extensions.js";
|
|
4
|
+
import { withLock, fileLockKey } from "../util/safety.js";
|
|
5
|
+
import crypto from "node:crypto";
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
/** True when filePath is exactly under baseDir (not a sibling like /foo vs /foo2). */
|
|
9
|
+
function isUnder(filePath, baseDir) {
|
|
10
|
+
const rel = path.relative(baseDir, filePath);
|
|
11
|
+
return !!rel && !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Active watchers — registered so a global shutdown can close them all
|
|
15
|
+
* without each caller wiring its own SIGINT handler. Without this, pending
|
|
16
|
+
* chokidar events fired after the DB was torn down, surfacing as
|
|
17
|
+
* "Database not initialized" noise (filtered above) but still leaking FDs
|
|
18
|
+
* and polling intervals.
|
|
19
|
+
*/
|
|
20
|
+
const _activeWatchers = new Set();
|
|
21
|
+
let _shutdownHooksRegistered = false;
|
|
22
|
+
function registerShutdownHooks() {
|
|
23
|
+
if (_shutdownHooksRegistered)
|
|
24
|
+
return;
|
|
25
|
+
_shutdownHooksRegistered = true;
|
|
26
|
+
const closeAll = () => {
|
|
27
|
+
for (const w of _activeWatchers) {
|
|
28
|
+
try {
|
|
29
|
+
void w.close();
|
|
30
|
+
}
|
|
31
|
+
catch { }
|
|
32
|
+
}
|
|
33
|
+
_activeWatchers.clear();
|
|
34
|
+
};
|
|
35
|
+
process.once("beforeExit", closeAll);
|
|
36
|
+
// Don't add SIGINT/SIGTERM here — db/index.ts already owns those and will
|
|
37
|
+
// call closeAllWatchers() via the shutdown chain below if wired in.
|
|
38
|
+
}
|
|
39
|
+
/** Close every watcher created by createFileWatcher in this process. */
|
|
40
|
+
export function closeAllFileWatchers() {
|
|
41
|
+
const promises = [];
|
|
42
|
+
for (const w of _activeWatchers) {
|
|
43
|
+
try {
|
|
44
|
+
promises.push(Promise.resolve(w.close()));
|
|
45
|
+
}
|
|
46
|
+
catch { }
|
|
47
|
+
}
|
|
48
|
+
_activeWatchers.clear();
|
|
49
|
+
return Promise.all(promises).then(() => undefined);
|
|
50
|
+
}
|
|
51
|
+
export function createFileWatcher(watchPaths, onEvent) {
|
|
52
|
+
registerShutdownHooks();
|
|
53
|
+
// Auto-ingest scope: files under <dataDir>/knowledge/ or a registered
|
|
54
|
+
// project. Anything else is ignored (stray files would otherwise be
|
|
55
|
+
// adopted as KB and could then be unlinked from disk on UI delete).
|
|
56
|
+
const knowledgeDirs = watchPaths.map((wp) => path.join(wp, "knowledge"));
|
|
57
|
+
const watcher = chokidar.watch(watchPaths, {
|
|
58
|
+
// Skip the same set discoverFiles skips, plus build-output / cache /
|
|
59
|
+
// virtualenv directories that commonly contain throw-away .md/.mmd files,
|
|
60
|
+
// plus the backup tree owned by syncBackup. The previous regex
|
|
61
|
+
// excluded ANY dot-prefixed segment, which silently dropped all
|
|
62
|
+
// changes under .claude/, .github/, .cursor/ — exactly where
|
|
63
|
+
// AI-context lives. Also ignore the tmp files produced by
|
|
64
|
+
// restoreVersion (`<file>.kontexta-restore-<pid>-<ts>`) so the
|
|
65
|
+
// atomic-rename dance doesn't generate spurious add/unlink events.
|
|
66
|
+
ignored: (p) => /[\/\\](node_modules|\.git|\.next|\.nuxt|\.cache|\.venv|\.tox|\.gradle|\.idea|dist|build|out|target)([\/\\]|$)/.test(p) ||
|
|
67
|
+
/[\/\\]backups[\/\\]/.test(p) ||
|
|
68
|
+
/\.kontexta-restore-\d+-\d+$/.test(p),
|
|
69
|
+
persistent: true,
|
|
70
|
+
ignoreInitial: true,
|
|
71
|
+
awaitWriteFinish: { stabilityThreshold: 300, pollInterval: 100 },
|
|
72
|
+
});
|
|
73
|
+
// Per-path lock around every handler so a watcher event fired during a
|
|
74
|
+
// createFile/updateFile (which hold the same key) queues until the
|
|
75
|
+
// in-flight write commits. The handlers themselves no-op when the
|
|
76
|
+
// already-stored hash matches, so the queued run after our own write
|
|
77
|
+
// is a cheap re-check rather than a duplicate UPSERT.
|
|
78
|
+
const runLocked = (filePath, fn) => {
|
|
79
|
+
void withLock(fileLockKey(filePath), async () => fn()).catch((e) => {
|
|
80
|
+
console.error(`[watcher] locked handler failed for ${filePath}:`, e);
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
watcher.on("change", (filePath) => {
|
|
84
|
+
if (!isIndexedFile(filePath))
|
|
85
|
+
return;
|
|
86
|
+
runLocked(filePath, () => {
|
|
87
|
+
// If the row was deleted (e.g. via Time-Travel restore of a previously
|
|
88
|
+
// unlinked file) and the file is back on disk, treat the change as an
|
|
89
|
+
// add so FTS gets repopulated instead of silently no-op'ing.
|
|
90
|
+
updateFileHash(filePath, knowledgeDirs);
|
|
91
|
+
onEvent({ type: "change", path: filePath });
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
watcher.on("add", (filePath) => {
|
|
95
|
+
if (!isIndexedFile(filePath))
|
|
96
|
+
return;
|
|
97
|
+
runLocked(filePath, () => {
|
|
98
|
+
handleWatcherAdd(filePath, knowledgeDirs);
|
|
99
|
+
onEvent({ type: "add", path: filePath });
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
watcher.on("unlink", (filePath) => {
|
|
103
|
+
if (!isIndexedFile(filePath))
|
|
104
|
+
return;
|
|
105
|
+
runLocked(filePath, () => {
|
|
106
|
+
handleWatcherUnlink(filePath);
|
|
107
|
+
onEvent({ type: "unlink", path: filePath });
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
_activeWatchers.add(watcher);
|
|
111
|
+
// Auto-deregister on close so the set doesn't leak references.
|
|
112
|
+
const origClose = watcher.close.bind(watcher);
|
|
113
|
+
watcher.close = (() => {
|
|
114
|
+
_activeWatchers.delete(watcher);
|
|
115
|
+
return origClose();
|
|
116
|
+
});
|
|
117
|
+
return watcher;
|
|
118
|
+
}
|
|
119
|
+
function handleWatcherAdd(filePath, knowledgeDirs) {
|
|
120
|
+
try {
|
|
121
|
+
const db = getDatabase();
|
|
122
|
+
// Check if already in DB
|
|
123
|
+
const existing = db.prepare("SELECT id FROM files WHERE path = ?").get(filePath);
|
|
124
|
+
if (existing)
|
|
125
|
+
return;
|
|
126
|
+
let projectId = null;
|
|
127
|
+
const projects = db.prepare("SELECT id, path FROM projects WHERE path IS NOT NULL").all();
|
|
128
|
+
for (const p of projects) {
|
|
129
|
+
if (isUnder(filePath, p.path)) {
|
|
130
|
+
projectId = p.id;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const isKnowledge = knowledgeDirs.some((kd) => isUnder(filePath, kd));
|
|
135
|
+
if (projectId === null && !isKnowledge)
|
|
136
|
+
return;
|
|
137
|
+
const storageType = projectId !== null ? "reference" : "local";
|
|
138
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
139
|
+
const hash = crypto.createHash("sha256").update(content).digest("hex");
|
|
140
|
+
const basename = filePath.split(/[/\\]/).pop() || "";
|
|
141
|
+
const title = stripIndexedExt(basename) || "Untitled";
|
|
142
|
+
// OR IGNORE + skip-FTS-on-no-change covers the discoverFiles race.
|
|
143
|
+
const insertStmt = db.prepare("INSERT OR IGNORE INTO files (path, title, project_id, storage_type, content_hash) VALUES (?, ?, ?, ?, ?)");
|
|
144
|
+
const ftsDel = db.prepare("DELETE FROM fts_index WHERE rowid = ?");
|
|
145
|
+
const ftsStmt = db.prepare("INSERT INTO fts_index (rowid, title, content) VALUES (?, ?, ?)");
|
|
146
|
+
db.transaction(() => {
|
|
147
|
+
const result = insertStmt.run(filePath, title, projectId, storageType, hash);
|
|
148
|
+
if (result.changes > 0) {
|
|
149
|
+
// Defensive pre-delete: a stale fts_index row at this rowid (from
|
|
150
|
+
// a crash mid-transaction) would otherwise UNIQUE-fail the insert.
|
|
151
|
+
ftsDel.run(result.lastInsertRowid);
|
|
152
|
+
ftsStmt.run(result.lastInsertRowid, title, content);
|
|
153
|
+
}
|
|
154
|
+
})();
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
if (e?.message !== "Database not initialized. Call createDatabase() first.") {
|
|
158
|
+
console.error(`[watcher] handleWatcherAdd failed for ${filePath}:`, e);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function handleWatcherUnlink(filePath) {
|
|
163
|
+
try {
|
|
164
|
+
const db = getDatabase();
|
|
165
|
+
const file = db.prepare("SELECT id FROM files WHERE path = ?").get(filePath);
|
|
166
|
+
if (file) {
|
|
167
|
+
const deleteFtsStmt = db.prepare("DELETE FROM fts_index WHERE rowid = ?");
|
|
168
|
+
const deleteFileStmt = db.prepare("DELETE FROM files WHERE id = ?");
|
|
169
|
+
db.transaction(() => {
|
|
170
|
+
deleteFtsStmt.run(file.id);
|
|
171
|
+
deleteFileStmt.run(file.id);
|
|
172
|
+
})();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
if (e?.message !== "Database not initialized. Call createDatabase() first.") {
|
|
177
|
+
console.error(`[watcher] handleWatcherUnlink failed for ${filePath}:`, e);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function updateFileHash(filePath, knowledgeDirs = []) {
|
|
182
|
+
try {
|
|
183
|
+
const db = getDatabase();
|
|
184
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
185
|
+
const hash = crypto.createHash("sha256").update(content).digest("hex");
|
|
186
|
+
const file = db.prepare("SELECT id, title, content_hash FROM files WHERE path = ?").get(filePath);
|
|
187
|
+
if (file) {
|
|
188
|
+
// Short-circuit when the row already reflects this content. Common
|
|
189
|
+
// case: the watcher event was triggered by a createFile/updateFile
|
|
190
|
+
// we just ran — the row is already up to date and rewriting FTS
|
|
191
|
+
// is wasted work plus an extra write-lock acquisition.
|
|
192
|
+
if (file.content_hash === hash)
|
|
193
|
+
return;
|
|
194
|
+
const updateStmt = db.prepare("UPDATE files SET content_hash = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?");
|
|
195
|
+
const deleteFtsStmt = db.prepare("DELETE FROM fts_index WHERE rowid = ?");
|
|
196
|
+
const insertFtsStmt = db.prepare("INSERT INTO fts_index (rowid, title, content) VALUES (?, ?, ?)");
|
|
197
|
+
db.transaction(() => {
|
|
198
|
+
updateStmt.run(hash, file.id);
|
|
199
|
+
deleteFtsStmt.run(file.id);
|
|
200
|
+
insertFtsStmt.run(file.id, file.title, content);
|
|
201
|
+
})();
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// Row missing — fall back to the add path so a restored file shows up.
|
|
205
|
+
handleWatcherAdd(filePath, knowledgeDirs);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
if (e?.message !== "Database not initialized. Call createDatabase() first.") {
|
|
210
|
+
console.error(`[watcher] updateFileHash failed for ${filePath}:`, e);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=index.js.map
|