@shipit-ai/cli 1.166.0 → 1.166.2
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/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +19 -2
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +14 -3
- package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/deploy-repository.js +14 -7
- package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-merge-review-data.js +66 -23
- package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-folder.js +12 -4
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +46 -7
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +2 -6
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +21 -17
- package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/deployment-logs/route.js +2 -6
- package/dist/src/presentation/web/app/api/directory/list/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/directory/list/route.js +39 -24
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +2 -6
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +2 -6
- package/dist/src/presentation/web/lib/path-sanitizers.d.ts +50 -0
- package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/path-sanitizers.js +136 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +9 -7
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +3 -3
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/agent-events/route.js +2 -1
- package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
- package/web/.next/server/app/api/deployment-logs/route.js +2 -1
- package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/server/app/api/directory/list/route.js +1 -1
- package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +2 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +2 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/settings/page.js +1 -1
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/skills/page.js +1 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js → [root-of-the-server]__08cpfre._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0aft8l4._.js +9 -0
- package/web/.next/server/chunks/{[root-of-the-server]__0_6fhza._.js.map → [root-of-the-server]__0aft8l4._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js → [root-of-the-server]__0gfvkg8._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js → [root-of-the-server]__0hcp97v._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js → [root-of-the-server]__0iel39d._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js +12 -0
- package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js +9 -0
- package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js → [root-of-the-server]__0u1jyv9._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js → [root-of-the-server]__0zu_byw._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js +18 -0
- package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js → [root-of-the-server]__0q3-gz.._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__12g8h3_._.js → [root-of-the-server]__0w4__yd._.js} +3 -3
- package/web/.next/server/chunks/ssr/_01mq~sm._.js +1 -1
- package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_09di2m~._.js → _04rrcmm._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_09di2m~._.js.map → _04rrcmm._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_12104w0._.js → _0c497sr._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_12104w0._.js.map → _0c497sr._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_0r~xv6k._.js → _0c741v_._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0r~xv6k._.js.map → _0c741v_._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0jpbsh_._.js +1 -1
- package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_109n-y4._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +49 -49
- package/web/.next/static/chunks/{0rhoh5o1y7grf.js → 0-fy~80ui.5os.js} +1 -1
- package/web/.next/static/chunks/{13ryk8qc9y3qu.js → 039ic1ygq-to3.js} +1 -1
- package/web/.next/static/chunks/{00uywouqbytc0.js → 04xk1iouwcfcq.js} +3 -3
- package/web/.next/static/chunks/{0b_anwzlzr9p7.js → 07a4jt64wdipb.js} +1 -1
- package/web/.next/static/chunks/{0tutcr7trd_7d.js → 07gx-h_y91lay.js} +2 -2
- package/web/.next/static/chunks/{01hf_nf2ge.tn.js → 0_imq4rg3q.fe.js} +2 -2
- package/web/.next/static/chunks/{0ntps8p7wo1re.js → 0c_bi0dck80dt.js} +1 -1
- package/web/.next/static/chunks/{0fmbl3o08a~-h.js → 0ex35-_jtxyjc.js} +1 -1
- package/web/.next/static/chunks/{0rfap2l5xz_-p.js → 0i084mozx131g.js} +1 -1
- package/web/.next/static/chunks/0k~55i.ofbdeb.js +1 -0
- package/web/.next/static/chunks/{0sywjtf8m0_fb.js → 0oq-cvtg8rjjp.js} +1 -1
- package/web/.next/static/chunks/{16jcg65-2mxc..js → 0t_6hx6ul7umb.js} +1 -1
- package/web/.next/static/chunks/{0b01fd0lkhnzf.js → 0whez3wju~9ok.js} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js +0 -9
- package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0_6fhza._.js +0 -9
- package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js +0 -12
- package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js +0 -18
- package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js.map +0 -1
- package/web/.next/static/chunks/121l3o3vd~hvn.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js.map → [root-of-the-server]__08cpfre._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js.map → [root-of-the-server]__0gfvkg8._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js.map → [root-of-the-server]__0hcp97v._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js.map → [root-of-the-server]__0iel39d._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js.map → [root-of-the-server]__0u1jyv9._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js.map → [root-of-the-server]__0zu_byw._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js.map → [root-of-the-server]__0q3-gz.._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__12g8h3_._.js.map → [root-of-the-server]__0w4__yd._.js.map} +0 -0
- /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ynyh_sSxbFA995FRvBUxs}/_buildManifest.js +0 -0
- /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ynyh_sSxbFA995FRvBUxs}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ynyh_sSxbFA995FRvBUxs}/_ssgManifest.js +0 -0
package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuE1F"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* `featureId` is a polymorphic scope key: a feature UUID, "repo-<id>", or "global".
|
|
11
11
|
*/
|
|
12
12
|
import { resolve } from '../../../../../../lib/server-container.js';
|
|
13
|
+
import { apiError } from '../../../../../../lib/api-helpers.js';
|
|
13
14
|
export const dynamic = 'force-dynamic';
|
|
14
15
|
export async function GET(request, { params }) {
|
|
15
16
|
const { featureId } = await params;
|
|
@@ -77,11 +78,6 @@ export async function GET(request, { params }) {
|
|
|
77
78
|
});
|
|
78
79
|
}
|
|
79
80
|
catch (error) {
|
|
80
|
-
|
|
81
|
-
console.error('[GET /api/interactive/chat/:featureId/stream]', error);
|
|
82
|
-
return new Response(JSON.stringify({ error: String(error) }), {
|
|
83
|
-
status: 500,
|
|
84
|
-
headers: { 'Content-Type': 'application/json' },
|
|
85
|
-
});
|
|
81
|
+
return apiError(500, 'Failed to open chat stream', error);
|
|
86
82
|
}
|
|
87
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/sessions/[id]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/presentation/web/app/api/interactive/sessions/[id]/stream/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+E1F"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - Cleans up listener when the client disconnects
|
|
9
9
|
*/
|
|
10
10
|
import { resolve } from '../../../../../../lib/server-container.js';
|
|
11
|
+
import { apiError } from '../../../../../../lib/api-helpers.js';
|
|
11
12
|
export const dynamic = 'force-dynamic';
|
|
12
13
|
export async function GET(request, { params }) {
|
|
13
14
|
const { id: sessionId } = await params;
|
|
@@ -82,11 +83,6 @@ export async function GET(request, { params }) {
|
|
|
82
83
|
});
|
|
83
84
|
}
|
|
84
85
|
catch (error) {
|
|
85
|
-
|
|
86
|
-
console.error('[GET /api/interactive/sessions/:id/stream]', error);
|
|
87
|
-
return new Response(JSON.stringify({ error: String(error) }), {
|
|
88
|
-
status: 500,
|
|
89
|
-
headers: { 'Content-Type': 'application/json' },
|
|
90
|
-
});
|
|
86
|
+
return apiError(500, 'Failed to open interactive session stream', error);
|
|
91
87
|
}
|
|
92
88
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a path through `realpath` and return the resolved absolute path,
|
|
3
|
+
* or `null` if the path is missing, unreadable, or cannot be canonicalized
|
|
4
|
+
* for any other reason. Never throws.
|
|
5
|
+
*
|
|
6
|
+
* CodeQL recognizes `realpathSync` output as a sanitizer for
|
|
7
|
+
* `js/path-injection`, so the returned value is safe to flow into `stat`,
|
|
8
|
+
* `readFile`, `readdir`, `spawn`, and other filesystem sinks.
|
|
9
|
+
*/
|
|
10
|
+
export declare function realpathOrNull(p: string): string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Pure string containment check: does `resolvedCandidate` live at or
|
|
13
|
+
* beneath `resolvedRoot`? BOTH arguments are expected to already be
|
|
14
|
+
* realpath-resolved absolute paths — this helper does NOT resolve them.
|
|
15
|
+
* Separate the resolve step from the containment check so the caller can
|
|
16
|
+
* resolve once and validate many times without redundant syscalls or
|
|
17
|
+
* TOCTOU windows.
|
|
18
|
+
*
|
|
19
|
+
* Uses forward-slash normalization on both sides before comparing, which
|
|
20
|
+
* is lossless on POSIX (separator is already `/`) and lossless on Windows
|
|
21
|
+
* (where `/` cannot appear inside a path component). This makes the
|
|
22
|
+
* helper safe to use across all three platforms.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isWithinRoot(resolvedCandidate: string, resolvedRoot: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve `candidate` through realpath and assert the result lives under
|
|
27
|
+
* at least one of the provided `allowedRoots`. Returns the resolved
|
|
28
|
+
* candidate path on success, or `null` if the candidate cannot be resolved
|
|
29
|
+
* or does not fall under any allowed root.
|
|
30
|
+
*
|
|
31
|
+
* The roots are resolved once, up-front, with graceful fallback to the
|
|
32
|
+
* unresolved form on failure (so a root that does not yet exist on disk
|
|
33
|
+
* is still honored as a literal prefix — this matches the existing
|
|
34
|
+
* behavior of the upload and directory-list routes). If the caller wants
|
|
35
|
+
* strict resolution of the roots too, pre-resolve them with
|
|
36
|
+
* `realpathOrNull` and filter out `null`s before calling this helper.
|
|
37
|
+
*/
|
|
38
|
+
export declare function realpathWithinAllowedRoots(candidate: string, allowedRoots: readonly string[]): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Async variant of `realpathOrNull`. See the sync version for semantics.
|
|
41
|
+
*/
|
|
42
|
+
export declare function realpathOrNullAsync(p: string): Promise<string | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Async variant of `realpathWithinAllowedRoots`. See the sync version for
|
|
45
|
+
* semantics. Resolves the candidate and each root concurrently via
|
|
46
|
+
* `Promise.all` so the worst-case wall-clock time is a single realpath,
|
|
47
|
+
* not N of them serialized.
|
|
48
|
+
*/
|
|
49
|
+
export declare function realpathWithinAllowedRootsAsync(candidate: string, allowedRoots: readonly string[]): Promise<string | null>;
|
|
50
|
+
//# sourceMappingURL=path-sanitizers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-sanitizers.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/path-sanitizers.ts"],"names":[],"mappings":"AAsCA;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAIrF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,MAAM,GAAG,IAAI,CAWf;AAUD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAM3E;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path sanitization helpers for the web presentation layer.
|
|
3
|
+
*
|
|
4
|
+
* Provides the small set of primitives used by every route and server
|
|
5
|
+
* action that touches a user-influenced filesystem path. Each helper
|
|
6
|
+
* does one thing, is recognized by CodeQL's js/path-injection taint
|
|
7
|
+
* analysis as a sanitizer, and is portable across macOS/Linux/Windows.
|
|
8
|
+
*
|
|
9
|
+
* Design principles:
|
|
10
|
+
*
|
|
11
|
+
* - `realpathOrNull(p)` resolves a path through `realpath` and returns
|
|
12
|
+
* `null` on any error (missing file, permission denied, broken symlink).
|
|
13
|
+
* Callers never have to care about the thrown error variants.
|
|
14
|
+
*
|
|
15
|
+
* - `isWithinRoot(candidate, root)` is a pure string containment check
|
|
16
|
+
* that expects both arguments to already be realpath-resolved. It
|
|
17
|
+
* normalizes backslash separators to forward slashes before comparing,
|
|
18
|
+
* so Windows realpath output matches the forward-slash roots that
|
|
19
|
+
* shipit uses throughout the codebase for persistence and comparison.
|
|
20
|
+
*
|
|
21
|
+
* - `realpathWithinAllowedRoots(candidate, roots)` combines the two:
|
|
22
|
+
* resolves the candidate once, resolves each root once (with graceful
|
|
23
|
+
* fallback to the unresolved form for the roots), then checks
|
|
24
|
+
* containment. Returns the resolved candidate on success, `null` on
|
|
25
|
+
* failure. Use this when a value must live under one of several
|
|
26
|
+
* permitted directories (e.g. cwd OR home-dir for the uploads API).
|
|
27
|
+
*
|
|
28
|
+
* These helpers intentionally do NOT compose realpath with the
|
|
29
|
+
* containment check into a single `realpathWithinRoot(candidate, root)`
|
|
30
|
+
* function, because that composition re-resolves an already-resolved
|
|
31
|
+
* root on every nested call and opens a TOCTOU window where filesystem
|
|
32
|
+
* state can change between the resolve and the containment check. Keep
|
|
33
|
+
* realpath and containment separate so the caller can resolve once and
|
|
34
|
+
* validate many.
|
|
35
|
+
*/
|
|
36
|
+
import { realpathSync } from 'node:fs';
|
|
37
|
+
import { realpath } from 'node:fs/promises';
|
|
38
|
+
/**
|
|
39
|
+
* Resolve a path through `realpath` and return the resolved absolute path,
|
|
40
|
+
* or `null` if the path is missing, unreadable, or cannot be canonicalized
|
|
41
|
+
* for any other reason. Never throws.
|
|
42
|
+
*
|
|
43
|
+
* CodeQL recognizes `realpathSync` output as a sanitizer for
|
|
44
|
+
* `js/path-injection`, so the returned value is safe to flow into `stat`,
|
|
45
|
+
* `readFile`, `readdir`, `spawn`, and other filesystem sinks.
|
|
46
|
+
*/
|
|
47
|
+
export function realpathOrNull(p) {
|
|
48
|
+
try {
|
|
49
|
+
return realpathSync(p);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Pure string containment check: does `resolvedCandidate` live at or
|
|
57
|
+
* beneath `resolvedRoot`? BOTH arguments are expected to already be
|
|
58
|
+
* realpath-resolved absolute paths — this helper does NOT resolve them.
|
|
59
|
+
* Separate the resolve step from the containment check so the caller can
|
|
60
|
+
* resolve once and validate many times without redundant syscalls or
|
|
61
|
+
* TOCTOU windows.
|
|
62
|
+
*
|
|
63
|
+
* Uses forward-slash normalization on both sides before comparing, which
|
|
64
|
+
* is lossless on POSIX (separator is already `/`) and lossless on Windows
|
|
65
|
+
* (where `/` cannot appear inside a path component). This makes the
|
|
66
|
+
* helper safe to use across all three platforms.
|
|
67
|
+
*/
|
|
68
|
+
export function isWithinRoot(resolvedCandidate, resolvedRoot) {
|
|
69
|
+
const normRoot = resolvedRoot.replace(/\\/g, '/');
|
|
70
|
+
const normCandidate = resolvedCandidate.replace(/\\/g, '/');
|
|
71
|
+
return normCandidate === normRoot || normCandidate.startsWith(`${normRoot}/`);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolve `candidate` through realpath and assert the result lives under
|
|
75
|
+
* at least one of the provided `allowedRoots`. Returns the resolved
|
|
76
|
+
* candidate path on success, or `null` if the candidate cannot be resolved
|
|
77
|
+
* or does not fall under any allowed root.
|
|
78
|
+
*
|
|
79
|
+
* The roots are resolved once, up-front, with graceful fallback to the
|
|
80
|
+
* unresolved form on failure (so a root that does not yet exist on disk
|
|
81
|
+
* is still honored as a literal prefix — this matches the existing
|
|
82
|
+
* behavior of the upload and directory-list routes). If the caller wants
|
|
83
|
+
* strict resolution of the roots too, pre-resolve them with
|
|
84
|
+
* `realpathOrNull` and filter out `null`s before calling this helper.
|
|
85
|
+
*/
|
|
86
|
+
export function realpathWithinAllowedRoots(candidate, allowedRoots) {
|
|
87
|
+
const resolvedCandidate = realpathOrNull(candidate);
|
|
88
|
+
if (!resolvedCandidate)
|
|
89
|
+
return null;
|
|
90
|
+
for (const root of allowedRoots) {
|
|
91
|
+
const resolvedRoot = realpathOrNull(root) ?? root;
|
|
92
|
+
if (isWithinRoot(resolvedCandidate, resolvedRoot)) {
|
|
93
|
+
return resolvedCandidate;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
// ─── Async variants ─────────────────────────────────────────────────────
|
|
99
|
+
//
|
|
100
|
+
// Route handlers that already use async fs APIs should use these rather
|
|
101
|
+
// than the sync variants so they don't block the event loop under
|
|
102
|
+
// concurrent load. The async helpers mirror the sync ones exactly in
|
|
103
|
+
// semantics — same null-on-error contract, same normalization, same
|
|
104
|
+
// containment rules.
|
|
105
|
+
/**
|
|
106
|
+
* Async variant of `realpathOrNull`. See the sync version for semantics.
|
|
107
|
+
*/
|
|
108
|
+
export async function realpathOrNullAsync(p) {
|
|
109
|
+
try {
|
|
110
|
+
return await realpath(p);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Async variant of `realpathWithinAllowedRoots`. See the sync version for
|
|
118
|
+
* semantics. Resolves the candidate and each root concurrently via
|
|
119
|
+
* `Promise.all` so the worst-case wall-clock time is a single realpath,
|
|
120
|
+
* not N of them serialized.
|
|
121
|
+
*/
|
|
122
|
+
export async function realpathWithinAllowedRootsAsync(candidate, allowedRoots) {
|
|
123
|
+
const [resolvedCandidate, ...resolvedRoots] = await Promise.all([
|
|
124
|
+
realpathOrNullAsync(candidate),
|
|
125
|
+
...allowedRoots.map((r) => realpathOrNullAsync(r)),
|
|
126
|
+
]);
|
|
127
|
+
if (!resolvedCandidate)
|
|
128
|
+
return null;
|
|
129
|
+
for (let i = 0; i < resolvedRoots.length; i++) {
|
|
130
|
+
const resolvedRoot = resolvedRoots[i] ?? allowedRoots[i];
|
|
131
|
+
if (isWithinRoot(resolvedCandidate, resolvedRoot)) {
|
|
132
|
+
return resolvedCandidate;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|