promptarc 0.0.1 → 0.0.3
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/README.md +8 -8
- package/dist/bin.js +366 -0
- package/dist/web/.next/BUILD_ID +1 -1
- package/dist/web/.next/app-build-manifest.json +315 -175
- package/dist/web/.next/app-path-routes-manifest.json +28 -11
- package/dist/web/.next/build-manifest.json +14 -14
- package/dist/web/.next/prerender-manifest.json +89 -1
- package/dist/web/.next/required-server-files.json +0 -1
- package/dist/web/.next/routes-manifest.json +62 -0
- package/dist/web/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/admin/backfill-ai/route.js +8 -0
- package/dist/web/.next/server/app/api/admin/backfill-ai/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/admin/backfill-ai/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/admin/backfill-search/route.js +1 -0
- package/dist/web/.next/server/app/api/admin/backfill-search/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/admin/backfill-search/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/ai/pr-summary/route.js +28 -0
- package/dist/web/.next/server/app/api/ai/pr-summary/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/ai/pr-summary/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/ai/pr-summary-local/route.js +28 -0
- package/dist/web/.next/server/app/api/ai/pr-summary-local/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/ai/pr-summary-local/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/ai/process/route.js +8 -0
- package/dist/web/.next/server/app/api/ai/process/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/ai/process/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/cli/download/route.js +1 -1
- package/dist/web/.next/server/app/api/cli/download/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/cli/download/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/cli/feedback/route.js +1 -0
- package/dist/web/.next/server/app/api/cli/feedback/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/cli/feedback/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/cli/init/route.js +1 -1
- package/dist/web/.next/server/app/api/cli/init/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/cli/init/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/cli/my-shares/route.js +1 -1
- package/dist/web/.next/server/app/api/cli/my-shares/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/cli/my-shares/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/cli/poll/route.js +1 -1
- package/dist/web/.next/server/app/api/cli/poll/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/cli/poll/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/cli/project-settings/route.js +1 -1
- package/dist/web/.next/server/app/api/cli/project-settings/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/cli/project-settings/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/cli/share-mutate/route.js +1 -1
- package/dist/web/.next/server/app/api/cli/share-mutate/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/cli/share-mutate/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/cli/sync-list/route.js +1 -1
- package/dist/web/.next/server/app/api/cli/sync-list/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/cli/sync-list/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/local/project-sessions/route.js +1 -1
- package/dist/web/.next/server/app/api/local/project-sessions/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/local/project-sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/local/watch/route.js +2 -2
- package/dist/web/.next/server/app/api/local/watch/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/local/watch/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/search/route.js +1 -0
- package/dist/web/.next/server/app/api/search/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/search/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/search-index/route.js +1 -1
- package/dist/web/.next/server/app/api/search-index/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/search-index/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/share/download/[slug]/route.js +1 -0
- package/dist/web/.next/server/app/api/share/download/[slug]/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/api/share/download/[slug]/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/api/share/route.js +1 -1
- package/dist/web/.next/server/app/api/share/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/share/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/api/upload/route.js +3 -3
- package/dist/web/.next/server/app/api/upload/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/api/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/auth/callback/route.js +1 -1
- package/dist/web/.next/server/app/auth/callback/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/auth/callback/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/auth/signout/route.js +1 -1
- package/dist/web/.next/server/app/auth/signout/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/auth/signout/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/blog/ai-coding-agents-2026/page.js +2 -0
- package/dist/web/.next/server/app/blog/ai-coding-agents-2026/page.js.nft.json +1 -0
- package/dist/web/.next/server/app/blog/ai-coding-agents-2026/page_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/blog/page.js +2 -0
- package/dist/web/.next/server/app/blog/page.js.nft.json +1 -0
- package/dist/web/.next/server/app/blog/page_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/cli/login/page.js +2 -2
- package/dist/web/.next/server/app/cli/login/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/cli/login/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/digest/page.js +2 -0
- package/dist/web/.next/server/app/digest/page.js.nft.json +1 -0
- package/dist/web/.next/server/app/digest/page_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/feedback/page.js +2 -0
- package/dist/web/.next/server/app/feedback/page.js.nft.json +1 -0
- package/dist/web/.next/server/app/feedback/page_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/my-projects/[projectKey]/page.js +2 -2
- package/dist/web/.next/server/app/my-projects/[projectKey]/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/my-projects/[projectKey]/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/my-projects/page.js +2 -2
- package/dist/web/.next/server/app/my-projects/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/my-projects/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/my-shares/page.js +2 -2
- package/dist/web/.next/server/app/my-shares/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/my-shares/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/opengraph-image/route.js +1 -71
- package/dist/web/.next/server/app/opengraph-image/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/opengraph-image/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/opengraph-image.body +0 -0
- package/dist/web/.next/server/app/opengraph-image.meta +1 -0
- package/dist/web/.next/server/app/page.js +2 -2
- package/dist/web/.next/server/app/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/privacy/page.js +2 -0
- package/dist/web/.next/server/app/privacy/page.js.nft.json +1 -0
- package/dist/web/.next/server/app/privacy/page_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/projects/[id]/page.js +2 -2
- package/dist/web/.next/server/app/projects/[id]/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/projects/[id]/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/r/[slug]/opengraph-image/route.js +1 -1
- package/dist/web/.next/server/app/r/[slug]/opengraph-image/route.js.nft.json +1 -1
- package/dist/web/.next/server/app/r/[slug]/opengraph-image/route_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/r/[slug]/page.js +2 -2
- package/dist/web/.next/server/app/r/[slug]/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/r/[slug]/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/robots.txt/route.js +16 -0
- package/dist/web/.next/server/app/robots.txt/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/robots.txt/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/robots.txt.body +9 -0
- package/dist/web/.next/server/app/robots.txt.meta +1 -0
- package/dist/web/.next/server/app/search/page.js +2 -0
- package/dist/web/.next/server/app/search/page.js.nft.json +1 -0
- package/dist/web/.next/server/app/search/page_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/sessions/[projectId]/[sessionId]/page.js +2 -2
- package/dist/web/.next/server/app/sessions/[projectId]/[sessionId]/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/sessions/[projectId]/[sessionId]/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/sign-in/page.js +2 -2
- package/dist/web/.next/server/app/sign-in/page.js.nft.json +1 -1
- package/dist/web/.next/server/app/sign-in/page_client-reference-manifest.js +1 -1
- package/dist/web/.next/server/app/sitemap.xml/route.js +16 -0
- package/dist/web/.next/server/app/sitemap.xml/route.js.nft.json +1 -0
- package/dist/web/.next/server/app/sitemap.xml/route_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app/sitemap.xml.body +51 -0
- package/dist/web/.next/server/app/sitemap.xml.meta +1 -0
- package/dist/web/.next/server/app/terms/page.js +2 -0
- package/dist/web/.next/server/app/terms/page.js.nft.json +1 -0
- package/dist/web/.next/server/app/terms/page_client-reference-manifest.js +1 -0
- package/dist/web/.next/server/app-paths-manifest.json +28 -11
- package/dist/web/.next/server/chunks/1017.js +2 -0
- package/dist/web/.next/server/chunks/1134.js +8 -0
- package/dist/web/.next/server/chunks/1825.js +1 -0
- package/dist/web/.next/server/chunks/1924.js +1 -0
- package/dist/web/.next/server/chunks/1961.js +1 -0
- package/dist/web/.next/server/chunks/2678.js +5 -0
- package/dist/web/.next/server/chunks/{901.js → 2901.js} +1 -1
- package/dist/web/.next/server/chunks/{635.js → 3256.js} +1 -1
- package/dist/web/.next/server/chunks/3398.js +1 -0
- package/dist/web/.next/server/chunks/{500.js → 4500.js} +1 -1
- package/dist/web/.next/server/chunks/{985.js → 4985.js} +2 -2
- package/dist/web/.next/server/chunks/6227.js +1 -0
- package/dist/web/.next/server/chunks/8334.js +1 -0
- package/dist/web/.next/server/chunks/8632.js +2 -0
- package/dist/web/.next/server/chunks/{993.js → 9993.js} +1 -1
- package/dist/web/.next/server/functions-config-manifest.json +17 -2
- package/dist/web/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/.next/server/middleware-manifest.json +1 -43
- package/dist/web/.next/server/pages/500.html +1 -1
- package/dist/web/.next/server/pages/_document.js +1 -1
- package/dist/web/.next/server/pages/_document.js.nft.json +1 -1
- package/dist/web/.next/server/pages/_error.js +2 -2
- package/dist/web/.next/server/pages/_error.js.nft.json +1 -1
- package/dist/web/.next/server/pages-manifest.json +1 -1
- package/dist/web/.next/server/server-reference-manifest.js +1 -1
- package/dist/web/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/.next/server/webpack-runtime.js +1 -1
- package/dist/web/.next/static/ABHGCNY7MSdkh00Z4Y8wS/_buildManifest.js +1 -0
- package/dist/web/.next/static/chunks/1029-12dc6d00537d43fd.js +1 -0
- package/dist/web/.next/static/chunks/4695-b52fc3d81451c3c3.js +1 -0
- package/dist/web/.next/static/chunks/552926ff-c5d04ae0c2d9f826.js +1 -0
- package/dist/web/.next/static/chunks/7200-4560b15b9cad37b3.js +1 -0
- package/dist/web/.next/static/chunks/app/_not-found/page-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/admin/backfill-ai/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/admin/backfill-search/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/ai/pr-summary/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/ai/pr-summary-local/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/ai/process/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/download/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/feedback/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/init/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/my-shares/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/poll/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/project-settings/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/share-mutate/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/cli/sync-list/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/local/project-sessions/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/local/watch/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/search/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/search-index/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/share/download/[slug]/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/share/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/api/upload/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/auth/callback/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/auth/signout/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/blog/ai-coding-agents-2026/page-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/blog/layout-9b51270472318488.js +1 -0
- package/dist/web/.next/static/chunks/app/blog/page-8400ea4ac5a7eb44.js +1 -0
- package/dist/web/.next/static/chunks/app/cli/login/page-26287cfd64c0fb49.js +1 -0
- package/dist/web/.next/static/chunks/app/digest/page-8400ea4ac5a7eb44.js +1 -0
- package/dist/web/.next/static/chunks/app/feedback/page-55ef0005807f1cef.js +1 -0
- package/dist/web/.next/static/chunks/app/layout-aa56caf2bf5af86f.js +1 -0
- package/dist/web/.next/static/chunks/app/my-projects/[projectKey]/page-7c5f2badf689d2e8.js +1 -0
- package/dist/web/.next/static/chunks/app/my-projects/page-c0390151fd6332a0.js +1 -0
- package/dist/web/.next/static/chunks/app/my-shares/page-49c0112973401c14.js +1 -0
- package/dist/web/.next/static/chunks/app/not-found-8400ea4ac5a7eb44.js +1 -0
- package/dist/web/.next/static/chunks/app/opengraph-image/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/page-f7b69fa944b46c20.js +1 -0
- package/dist/web/.next/static/chunks/app/privacy/page-9b51270472318488.js +1 -0
- package/dist/web/.next/static/chunks/app/projects/[id]/page-7dd46a825d03a7d9.js +1 -0
- package/dist/web/.next/static/chunks/app/r/[slug]/opengraph-image/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/r/[slug]/page-6a0983805e048ac3.js +1 -0
- package/dist/web/.next/static/chunks/app/robots.txt/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/search/page-c29f37dc2462b676.js +1 -0
- package/dist/web/.next/static/chunks/app/sessions/[projectId]/[sessionId]/page-87b4505dd32edb9d.js +1 -0
- package/dist/web/.next/static/chunks/app/sign-in/page-fea3971ff9237b72.js +1 -0
- package/dist/web/.next/static/chunks/app/sitemap.xml/route-fd6592d30c58fa5e.js +1 -0
- package/dist/web/.next/static/chunks/app/terms/page-9b51270472318488.js +1 -0
- package/dist/web/.next/static/chunks/d99d8e6a-55da88efbe15e3e1.js +1 -0
- package/dist/web/.next/static/chunks/framework-c1efa271b5a96d9d.js +1 -0
- package/dist/web/.next/static/chunks/main-app-70de904c7caade50.js +1 -0
- package/dist/web/.next/static/chunks/main-d211cddc79aac1cb.js +1 -0
- package/dist/web/.next/static/chunks/pages/{_app-42b849402a54b9e6.js → _app-701b0752a0d4c3a9.js} +1 -1
- package/dist/web/.next/static/chunks/pages/_error-327385abc873a736.js +1 -0
- package/dist/web/.next/static/chunks/{webpack-3a8b65d12c8eb987.js → webpack-3a446128dfa39f85.js} +1 -1
- package/dist/web/.next/static/css/b3ccdd7835e6edda.css +3 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/_/_class_private_field_loose_base/package.json +4 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/_/_class_private_field_loose_key/package.json +4 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/_/_interop_require_default/package.json +4 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json +4 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_class_private_field_loose_base.cjs +10 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_class_private_field_loose_key.cjs +8 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_default.cjs +6 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs +38 -0
- package/dist/web/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/package.json +471 -0
- package/dist/web/package.json +4 -1
- package/dist/web/public/apple-touch-icon.png +0 -0
- package/dist/web/public/favicon-16.png +0 -0
- package/dist/web/public/favicon-32.png +0 -0
- package/dist/web/public/icon-192.png +0 -0
- package/dist/web/public/icon-512.png +0 -0
- package/dist/web/public/logo.png +0 -0
- package/dist/web/server.js +1 -1
- package/package.json +5 -8
- package/dist/web/.next/server/app/opengraph-image/route.js.map +0 -1
- package/dist/web/.next/server/chunks/150.js +0 -1
- package/dist/web/.next/server/chunks/160.js +0 -2
- package/dist/web/.next/server/chunks/334.js +0 -1
- package/dist/web/.next/server/chunks/354.js +0 -1
- package/dist/web/.next/server/chunks/371.js +0 -1
- package/dist/web/.next/server/chunks/398.js +0 -1
- package/dist/web/.next/server/chunks/552.js +0 -2
- package/dist/web/.next/server/chunks/678.js +0 -5
- package/dist/web/.next/server/chunks/924.js +0 -1
- package/dist/web/.next/server/edge-chunks/asset_noto-sans-v27-latin-regular.5dda3fca77107598.ttf +0 -0
- package/dist/web/.next/server/edge-chunks/wasm_77d9faebf7af9e421806970ce10a58e9d83116d7.wasm +0 -0
- package/dist/web/.next/server/edge-chunks/wasm_ef4866ecae192fd87727067cf2c0c0cf9fb8b020.wasm +0 -0
- package/dist/web/.next/server/edge-runtime-webpack.js +0 -2
- package/dist/web/.next/server/interception-route-rewrite-manifest.js +0 -1
- package/dist/web/.next/static/05arLtyVtuaMhMczmbNEQ/_buildManifest.js +0 -1
- package/dist/web/.next/static/chunks/200-619918ea0fdbd6ff.js +0 -1
- package/dist/web/.next/static/chunks/29-73072d523fc7c3d6.js +0 -1
- package/dist/web/.next/static/chunks/552926ff-e8a371ec0133d0dc.js +0 -1
- package/dist/web/.next/static/chunks/695-00bca043953d4170.js +0 -1
- package/dist/web/.next/static/chunks/app/_not-found/page-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/cli/download/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/cli/init/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/cli/my-shares/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/cli/poll/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/cli/project-settings/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/cli/share-mutate/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/cli/sync-list/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/local/project-sessions/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/local/watch/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/search-index/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/share/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/api/upload/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/auth/callback/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/auth/signout/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/cli/login/page-647fd605d0fe2472.js +0 -1
- package/dist/web/.next/static/chunks/app/layout-f5666b9135264807.js +0 -1
- package/dist/web/.next/static/chunks/app/my-projects/[projectKey]/page-cb6e039c958bfc2c.js +0 -1
- package/dist/web/.next/static/chunks/app/my-projects/page-9f8ca9b85ceaf296.js +0 -1
- package/dist/web/.next/static/chunks/app/my-shares/page-cb6e039c958bfc2c.js +0 -1
- package/dist/web/.next/static/chunks/app/not-found-9f8ca9b85ceaf296.js +0 -1
- package/dist/web/.next/static/chunks/app/opengraph-image/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/page-5094c206f5c10164.js +0 -1
- package/dist/web/.next/static/chunks/app/projects/[id]/page-5094c206f5c10164.js +0 -1
- package/dist/web/.next/static/chunks/app/r/[slug]/opengraph-image/route-28b9b6b1a849439f.js +0 -1
- package/dist/web/.next/static/chunks/app/r/[slug]/page-65707eb198f673a1.js +0 -1
- package/dist/web/.next/static/chunks/app/sessions/[projectId]/[sessionId]/page-42e3ca6ddbc89891.js +0 -1
- package/dist/web/.next/static/chunks/app/sign-in/page-792d0d79889186cf.js +0 -1
- package/dist/web/.next/static/chunks/d99d8e6a-80443bd3c9d31f50.js +0 -1
- package/dist/web/.next/static/chunks/framework-39000e34f38d10f6.js +0 -1
- package/dist/web/.next/static/chunks/main-app-21e9441fa7ac15ef.js +0 -1
- package/dist/web/.next/static/chunks/main-f824d48fd7ff2e3b.js +0 -1
- package/dist/web/.next/static/chunks/pages/_error-412ff705bc5b0636.js +0 -1
- package/dist/web/.next/static/css/e3f901a57ca280a4.css +0 -3
- /package/dist/web/.next/static/{05arLtyVtuaMhMczmbNEQ → ABHGCNY7MSdkh00Z4Y8wS}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# promptarc
|
|
2
2
|
|
|
3
|
-
> Local-first viewer for AI coding agent sessions. Browse, search, and share
|
|
3
|
+
> Local-first viewer for AI coding agent sessions. Browse, search, and share your Claude Code, Codex, and Cursor sessions — without uploading anything you didn't ask to.
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npx promptarc
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
That's it. The CLI boots a dashboard at `http://localhost:3030` that reads `~/.claude
|
|
9
|
+
That's it. The CLI boots a dashboard at `http://localhost:3030` that reads `~/.claude/`, `~/.codex/`, and `~/.cursor/` — rendering every session from Claude Code, OpenAI Codex, and Cursor as an inspectable timeline (messages, tool calls, file diffs, todos, errors, the works).
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
|
-
- **
|
|
13
|
+
- **Multi-agent.** Reads `~/.claude/` (Claude Code), `~/.codex/` (Codex), and `~/.cursor/` (Cursor) in one dashboard with tabs to filter by agent.
|
|
14
14
|
- **Live updates.** Open a session that's still running and the page refreshes within ~300ms of every new message Claude writes.
|
|
15
15
|
- **Resume.** Lost track of which session you were on? Click any session and copy the `claude --resume <id>` command from the sidebar.
|
|
16
16
|
- **Selective sharing.** Click *Share session* to upload a single session as a viewable link. Choose visibility per share: **public** (indexed), **unlisted** (anyone with the URL), or **private** (only you, default).
|
|
@@ -39,12 +39,12 @@ promptarc --help Show usage
|
|
|
39
39
|
## Requirements
|
|
40
40
|
|
|
41
41
|
- Node.js ≥ 20
|
|
42
|
-
-
|
|
42
|
+
- At least one of: `~/.claude/` (Claude Code), `~/.codex/` (Codex), or `~/.cursor/` (Cursor)
|
|
43
43
|
|
|
44
|
-
##
|
|
44
|
+
## Feedback
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
[promptarc.dev/feedback](https://promptarc.dev/feedback)
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## License
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
MIT
|
package/dist/bin.js
CHANGED
|
@@ -54,6 +54,10 @@ async function main() {
|
|
|
54
54
|
console.log(`Signed in as ${auth.email ?? auth.userId}${auth.login ? ` (@${auth.login})` : ''}`);
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
|
+
if (cmd === 'pr') {
|
|
58
|
+
await runPR(args.slice(1));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
57
61
|
if (cmd === 'pull') {
|
|
58
62
|
const slug = args[1];
|
|
59
63
|
if (!slug) {
|
|
@@ -81,6 +85,8 @@ COMMANDS
|
|
|
81
85
|
login Sign in to your promptarc account via GitHub
|
|
82
86
|
logout Delete the saved auth token
|
|
83
87
|
whoami Print the currently signed-in account
|
|
88
|
+
pr Generate a PR description from the current session
|
|
89
|
+
pr --share Generate + share session as private (includes link)
|
|
84
90
|
pull <slug> Download a shared session into ~/.claude/ for resume
|
|
85
91
|
--version Print the CLI version
|
|
86
92
|
--help Show this message
|
|
@@ -89,6 +95,366 @@ LEARN MORE
|
|
|
89
95
|
https://promptarc.dev
|
|
90
96
|
`);
|
|
91
97
|
}
|
|
98
|
+
async function runPR(args) {
|
|
99
|
+
const auth = loadAuth();
|
|
100
|
+
if (!auth) {
|
|
101
|
+
console.error('Not signed in. Run `promptarc login` first.');
|
|
102
|
+
process.exitCode = 1;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const shouldShare = args.includes('--share');
|
|
106
|
+
const sessionIdArg = args.find((a) => !a.startsWith('--'));
|
|
107
|
+
const copyFlag = args.includes('--copy');
|
|
108
|
+
// 1. Find the session.
|
|
109
|
+
const cwd = process.cwd();
|
|
110
|
+
const sessionFile = sessionIdArg
|
|
111
|
+
? findSessionById(sessionIdArg)
|
|
112
|
+
: findLatestSession(cwd);
|
|
113
|
+
if (!sessionFile) {
|
|
114
|
+
console.error(sessionIdArg
|
|
115
|
+
? `Session ${sessionIdArg} not found.`
|
|
116
|
+
: `No sessions found for ${cwd}. Run this from a project directory with Claude Code/Codex/Cursor sessions.`);
|
|
117
|
+
process.exitCode = 1;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
console.log(` ▸ reading ${sessionFile.path}`);
|
|
121
|
+
// 2. Extract summary input from the local JSONL.
|
|
122
|
+
const input = extractLocalSummaryInput(sessionFile.path);
|
|
123
|
+
if (input.length < 20) {
|
|
124
|
+
console.error('Session is too short to generate a PR description.');
|
|
125
|
+
process.exitCode = 1;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// 3. If --share, share the session first via the local dashboard.
|
|
129
|
+
let shareUrl = '';
|
|
130
|
+
if (shouldShare) {
|
|
131
|
+
console.log(' ▸ sharing session as private...');
|
|
132
|
+
const localOrigin = 'http://localhost:3030';
|
|
133
|
+
try {
|
|
134
|
+
const shareRes = await fetch(`${localOrigin}/api/share`, {
|
|
135
|
+
method: 'POST',
|
|
136
|
+
headers: { 'content-type': 'application/json' },
|
|
137
|
+
body: JSON.stringify({
|
|
138
|
+
sessionId: sessionFile.sessionId,
|
|
139
|
+
projectId: sessionFile.projectId,
|
|
140
|
+
visibility: 'private',
|
|
141
|
+
_h: '',
|
|
142
|
+
}),
|
|
143
|
+
});
|
|
144
|
+
if (shareRes.ok) {
|
|
145
|
+
const json = (await shareRes.json());
|
|
146
|
+
shareUrl = json.url ?? '';
|
|
147
|
+
console.log(` ▸ shared: ${shareUrl}`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
console.error(' ▸ share failed (dashboard may not be running). Continuing without link.');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
console.error(' ▸ could not reach local dashboard. Run `promptarc` first, or skip --share.');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// 4. Generate PR description via hosted API.
|
|
158
|
+
console.log(' ▸ generating PR description...');
|
|
159
|
+
const siteUrl = process.env.PROMPTARC_SITE_URL ?? 'https://promptarc.dev';
|
|
160
|
+
let markdown;
|
|
161
|
+
try {
|
|
162
|
+
const res = await fetch(`${siteUrl}/api/ai/pr-summary-local`, {
|
|
163
|
+
method: 'POST',
|
|
164
|
+
headers: {
|
|
165
|
+
'content-type': 'application/json',
|
|
166
|
+
authorization: `Bearer ${auth.token}`,
|
|
167
|
+
},
|
|
168
|
+
body: JSON.stringify({ input }),
|
|
169
|
+
});
|
|
170
|
+
if (!res.ok) {
|
|
171
|
+
const json = (await res.json());
|
|
172
|
+
console.error(` ✗ ${json.error ?? `HTTP ${res.status}`}`);
|
|
173
|
+
process.exitCode = 1;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const json = (await res.json());
|
|
177
|
+
markdown = json.markdown;
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
console.error(` ✗ Failed to reach ${siteUrl}: ${String(err)}`);
|
|
181
|
+
process.exitCode = 1;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// 5. Append session link if shared.
|
|
185
|
+
if (shareUrl) {
|
|
186
|
+
markdown += `\n\n---\n*Generated by [promptarc](https://promptarc.dev) from [session →](${shareUrl})*`;
|
|
187
|
+
}
|
|
188
|
+
// 6. Output.
|
|
189
|
+
if (copyFlag) {
|
|
190
|
+
try {
|
|
191
|
+
const cmd = process.platform === 'darwin'
|
|
192
|
+
? 'pbcopy'
|
|
193
|
+
: process.platform === 'win32'
|
|
194
|
+
? 'clip'
|
|
195
|
+
: 'xclip -selection clipboard';
|
|
196
|
+
const { execSync } = await import('node:child_process');
|
|
197
|
+
execSync(cmd, { input: markdown });
|
|
198
|
+
console.log(' ✓ Copied to clipboard.\n');
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Fall through to stdout.
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
console.log('');
|
|
205
|
+
console.log(markdown);
|
|
206
|
+
console.log('');
|
|
207
|
+
}
|
|
208
|
+
function findLatestSession(cwd) {
|
|
209
|
+
const fs = require('node:fs');
|
|
210
|
+
const path = require('node:path');
|
|
211
|
+
const candidates = [];
|
|
212
|
+
const cwdParts = cwd.split('/').filter(Boolean);
|
|
213
|
+
const lastPart = cwdParts[cwdParts.length - 1] ?? '';
|
|
214
|
+
const encoded = cwd.replace(/\//g, '-');
|
|
215
|
+
// 1. Claude Code: ~/.claude/projects/<encoded-cwd>/*.jsonl
|
|
216
|
+
const claudeRoot = path.join(homedir(), '.claude', 'projects');
|
|
217
|
+
try {
|
|
218
|
+
const dirs = fs.readdirSync(claudeRoot);
|
|
219
|
+
for (const dir of dirs) {
|
|
220
|
+
if (dir === encoded || dir.endsWith(lastPart)) {
|
|
221
|
+
const projectDir = path.join(claudeRoot, dir);
|
|
222
|
+
if (!fs.statSync(projectDir).isDirectory())
|
|
223
|
+
continue;
|
|
224
|
+
const files = fs.readdirSync(projectDir).filter((f) => f.endsWith('.jsonl'));
|
|
225
|
+
for (const f of files) {
|
|
226
|
+
const fp = path.join(projectDir, f);
|
|
227
|
+
candidates.push({
|
|
228
|
+
path: fp,
|
|
229
|
+
sessionId: path.basename(f, '.jsonl'),
|
|
230
|
+
projectId: dir,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch { /* no Claude sessions */ }
|
|
237
|
+
// 2. Codex: ~/.codex/sessions/**/*.jsonl (scan all, match cwd from session_meta)
|
|
238
|
+
const codexRoot = path.join(homedir(), '.codex', 'sessions');
|
|
239
|
+
try {
|
|
240
|
+
const codexFiles = findJsonlRecursive(codexRoot, fs, path);
|
|
241
|
+
for (const fp of codexFiles) {
|
|
242
|
+
// Quick check: read first line for cwd match.
|
|
243
|
+
try {
|
|
244
|
+
const firstLine = fs.readFileSync(fp, 'utf8').split('\n')[0] ?? '';
|
|
245
|
+
if (firstLine.includes(cwd) || firstLine.includes(lastPart)) {
|
|
246
|
+
const name = path.basename(fp, '.jsonl');
|
|
247
|
+
const uuidMatch = name.match(/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i);
|
|
248
|
+
candidates.push({
|
|
249
|
+
path: fp,
|
|
250
|
+
sessionId: uuidMatch?.[1] ?? name,
|
|
251
|
+
projectId: `codex:${cwd.replace(/\//g, '-')}`,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch { /* skip */ }
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch { /* no Codex sessions */ }
|
|
259
|
+
// 3. Cursor: ~/.cursor/projects/<encoded>/agent-transcripts/<uuid>/<uuid>.jsonl
|
|
260
|
+
const cursorEncoded = cwd.replace(/\//g, '-').replace(/^-/, '');
|
|
261
|
+
const cursorRoot = path.join(homedir(), '.cursor', 'projects');
|
|
262
|
+
try {
|
|
263
|
+
const dirs = fs.readdirSync(cursorRoot);
|
|
264
|
+
for (const dir of dirs) {
|
|
265
|
+
if (dir === cursorEncoded || dir.endsWith(lastPart)) {
|
|
266
|
+
const transcriptsDir = path.join(cursorRoot, dir, 'agent-transcripts');
|
|
267
|
+
try {
|
|
268
|
+
const sessionDirs = fs.readdirSync(transcriptsDir);
|
|
269
|
+
for (const sd of sessionDirs) {
|
|
270
|
+
const fp = path.join(transcriptsDir, sd, `${sd}.jsonl`);
|
|
271
|
+
try {
|
|
272
|
+
fs.statSync(fp);
|
|
273
|
+
candidates.push({
|
|
274
|
+
path: fp,
|
|
275
|
+
sessionId: sd,
|
|
276
|
+
projectId: `cursor:${dir}`,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
catch { /* skip */ }
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch { /* no transcripts */ }
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch { /* no Cursor sessions */ }
|
|
287
|
+
if (candidates.length === 0)
|
|
288
|
+
return null;
|
|
289
|
+
// Return the most recently modified file.
|
|
290
|
+
candidates.sort((a, b) => {
|
|
291
|
+
try {
|
|
292
|
+
return fs.statSync(b.path).mtimeMs - fs.statSync(a.path).mtimeMs;
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return 0;
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
return candidates[0];
|
|
299
|
+
}
|
|
300
|
+
function findJsonlRecursive(dir, fs, path) {
|
|
301
|
+
const results = [];
|
|
302
|
+
try {
|
|
303
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
304
|
+
for (const entry of entries) {
|
|
305
|
+
const full = path.join(dir, entry.name);
|
|
306
|
+
if (entry.isDirectory())
|
|
307
|
+
results.push(...findJsonlRecursive(full, fs, path));
|
|
308
|
+
else if (entry.name.endsWith('.jsonl'))
|
|
309
|
+
results.push(full);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch { /* skip */ }
|
|
313
|
+
return results;
|
|
314
|
+
}
|
|
315
|
+
function findSessionById(id) {
|
|
316
|
+
const fs = require('node:fs');
|
|
317
|
+
const path = require('node:path');
|
|
318
|
+
// Search Claude Code.
|
|
319
|
+
const claudeRoot = path.join(homedir(), '.claude', 'projects');
|
|
320
|
+
try {
|
|
321
|
+
for (const dir of fs.readdirSync(claudeRoot)) {
|
|
322
|
+
const fp = path.join(claudeRoot, dir, `${id}.jsonl`);
|
|
323
|
+
try {
|
|
324
|
+
fs.statSync(fp);
|
|
325
|
+
return { path: fp, sessionId: id, projectId: dir };
|
|
326
|
+
}
|
|
327
|
+
catch { /* skip */ }
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch { /* no Claude */ }
|
|
331
|
+
// Search Cursor.
|
|
332
|
+
const cursorRoot = path.join(homedir(), '.cursor', 'projects');
|
|
333
|
+
try {
|
|
334
|
+
for (const dir of fs.readdirSync(cursorRoot)) {
|
|
335
|
+
const fp = path.join(cursorRoot, dir, 'agent-transcripts', id, `${id}.jsonl`);
|
|
336
|
+
try {
|
|
337
|
+
fs.statSync(fp);
|
|
338
|
+
return { path: fp, sessionId: id, projectId: `cursor:${dir}` };
|
|
339
|
+
}
|
|
340
|
+
catch { /* skip */ }
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
catch { /* no Cursor */ }
|
|
344
|
+
// Search Codex (scan all, match by UUID in filename).
|
|
345
|
+
const codexRoot = path.join(homedir(), '.codex', 'sessions');
|
|
346
|
+
const codexFiles = findJsonlRecursive(codexRoot, fs, path);
|
|
347
|
+
for (const fp of codexFiles) {
|
|
348
|
+
if (fp.includes(id)) {
|
|
349
|
+
return { path: fp, sessionId: id, projectId: null };
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Lightweight summary input extraction for the CLI. Reads the local
|
|
356
|
+
* JSONL and pulls: first user prompt, last user prompt, tool call
|
|
357
|
+
* names + file paths, and error outputs. Capped at 4K chars.
|
|
358
|
+
*/
|
|
359
|
+
function extractLocalSummaryInput(filePath) {
|
|
360
|
+
const { readFileSync } = require('node:fs');
|
|
361
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
362
|
+
const lines = raw.split('\n').filter(Boolean);
|
|
363
|
+
const parts = [];
|
|
364
|
+
const userPrompts = [];
|
|
365
|
+
const toolCalls = [];
|
|
366
|
+
const errors = [];
|
|
367
|
+
const filePaths = new Set();
|
|
368
|
+
for (const line of lines) {
|
|
369
|
+
let parsed;
|
|
370
|
+
try {
|
|
371
|
+
parsed = JSON.parse(line);
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
// Claude Code format.
|
|
377
|
+
const type = parsed.type;
|
|
378
|
+
const msg = parsed.message;
|
|
379
|
+
if (type === 'user' && typeof msg === 'string') {
|
|
380
|
+
userPrompts.push(msg);
|
|
381
|
+
}
|
|
382
|
+
if (typeof msg === 'object' && msg && Array.isArray(msg.content)) {
|
|
383
|
+
for (const block of msg.content) {
|
|
384
|
+
if (block.type === 'text' && typeof block.text === 'string') {
|
|
385
|
+
if (type === 'user')
|
|
386
|
+
userPrompts.push(block.text);
|
|
387
|
+
}
|
|
388
|
+
if (block.type === 'tool_use') {
|
|
389
|
+
const name = block.name;
|
|
390
|
+
const input = block.input;
|
|
391
|
+
const fp = input?.file_path ?? input?.path ?? '';
|
|
392
|
+
if (fp)
|
|
393
|
+
filePaths.add(fp);
|
|
394
|
+
if (input?.command)
|
|
395
|
+
toolCalls.push(`${name}: ${String(input.command).slice(0, 100)}`);
|
|
396
|
+
else if (fp)
|
|
397
|
+
toolCalls.push(`${name}: ${fp}`);
|
|
398
|
+
else
|
|
399
|
+
toolCalls.push(name);
|
|
400
|
+
}
|
|
401
|
+
if (block.type === 'tool_result' && block.is_error) {
|
|
402
|
+
const output = typeof block.content === 'string' ? block.content : String(block.output ?? '');
|
|
403
|
+
if (output)
|
|
404
|
+
errors.push(output.slice(0, 200));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
// Codex format: {timestamp, type, payload}.
|
|
409
|
+
if (parsed.payload && typeof parsed.payload === 'object') {
|
|
410
|
+
const payload = parsed.payload;
|
|
411
|
+
if (payload.type === 'message' && payload.role === 'user') {
|
|
412
|
+
const content = payload.content;
|
|
413
|
+
if (Array.isArray(content)) {
|
|
414
|
+
for (const block of content) {
|
|
415
|
+
if ((block.type === 'input_text' || block.type === 'text') && typeof block.text === 'string') {
|
|
416
|
+
userPrompts.push(block.text);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// Cursor format: {role, message: {content}}.
|
|
423
|
+
if (parsed.role === 'user' && typeof parsed.message === 'object' && parsed.message) {
|
|
424
|
+
const content = parsed.message.content;
|
|
425
|
+
if (Array.isArray(content)) {
|
|
426
|
+
for (const block of content) {
|
|
427
|
+
if (block.type === 'text' && typeof block.text === 'string') {
|
|
428
|
+
const text = block.text.replace(/<\/?user_query>/g, '').trim();
|
|
429
|
+
if (text)
|
|
430
|
+
userPrompts.push(text);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
if (userPrompts.length > 0) {
|
|
437
|
+
parts.push('--- First prompt ---');
|
|
438
|
+
parts.push(userPrompts[0].slice(0, 500));
|
|
439
|
+
}
|
|
440
|
+
if (userPrompts.length > 1) {
|
|
441
|
+
parts.push('--- Last prompt ---');
|
|
442
|
+
parts.push(userPrompts[userPrompts.length - 1].slice(0, 300));
|
|
443
|
+
}
|
|
444
|
+
if (toolCalls.length > 0) {
|
|
445
|
+
parts.push('--- Tool calls ---');
|
|
446
|
+
parts.push([...new Set(toolCalls)].slice(0, 15).join('\n'));
|
|
447
|
+
}
|
|
448
|
+
if (filePaths.size > 0) {
|
|
449
|
+
parts.push(`--- Files (${filePaths.size}) ---`);
|
|
450
|
+
parts.push([...filePaths].slice(0, 20).join(', '));
|
|
451
|
+
}
|
|
452
|
+
if (errors.length > 0) {
|
|
453
|
+
parts.push('--- Errors ---');
|
|
454
|
+
parts.push(errors.slice(0, 3).join('\n'));
|
|
455
|
+
}
|
|
456
|
+
return parts.join('\n').slice(0, 4000);
|
|
457
|
+
}
|
|
92
458
|
async function runPull(slug) {
|
|
93
459
|
const auth = loadAuth();
|
|
94
460
|
if (!auth) {
|
package/dist/web/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
ABHGCNY7MSdkh00Z4Y8wS
|