madarx 2.9.11 → 2.9.12
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +311 -311
- package/.next/standalone/.next/app-path-routes-manifest.json +83 -83
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/page.js +3 -3
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/agents/[id]/page.js +3 -3
- package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/agents/page.js +1 -1
- package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/route.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/open-design/route.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/state/route.js +1 -1
- package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/approvals/page.js +2 -2
- package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/architecture.html +2 -2
- package/.next/standalone/.next/server/app/architecture.rsc +1 -1
- package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/brand.html +1 -1
- package/.next/standalone/.next/server/app/brand.rsc +1 -1
- package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai.html +2 -2
- package/.next/standalone/.next/server/app/federated-ai.rsc +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/join.html +1 -1
- package/.next/standalone/.next/server/app/join.rsc +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/marketplace/page.js +1 -1
- package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/missions/page.js +2 -2
- package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
- package/.next/standalone/.next/server/app/org/page.js +1 -1
- package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/new/page.js +1 -1
- package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/new.html +1 -1
- package/.next/standalone/.next/server/app/projects/new.rsc +2 -2
- package/.next/standalone/.next/server/app/projects/page.js +10 -10
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/[file]/route.js +1 -1
- package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/schedules/page.js +2 -2
- package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/brand.html +2 -2
- package/.next/standalone/.next/server/app/settings/brand.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/settings/onboarding.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/[id]/page.js +2 -2
- package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp.html +1 -1
- package/.next/standalone/.next/server/app/whatsapp.rsc +1 -1
- package/.next/standalone/.next/server/app/workflows/[caseId]/page.js +1 -1
- package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +83 -83
- package/.next/standalone/.next/server/chunks/1699.js +1 -1
- package/.next/standalone/.next/server/chunks/4740.js +1 -1
- package/.next/standalone/.next/server/chunks/511.js +1 -1
- package/.next/standalone/.next/server/chunks/{9838.js → 8677.js} +1 -1
- package/.next/standalone/.next/server/functions-config-manifest.json +35 -35
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/app/projects/[slug]/page-8696ab69500ca8e1.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/page-e73dec080197c3c1.js +1 -0
- package/.next/standalone/data/.artifacts-migrated-v1 +1 -1
- package/.next/standalone/data/.default-project-seeded +1 -1
- package/.next/standalone/data/madarx.sqlite +0 -0
- package/.next/standalone/data/madarx.sqlite-shm +0 -0
- package/.next/standalone/data/madarx.sqlite-wal +0 -0
- package/.next/standalone/package.json +1 -1
- package/.next/static/chunks/app/projects/[slug]/page-8696ab69500ca8e1.js +1 -0
- package/.next/static/chunks/app/projects/page-e73dec080197c3c1.js +1 -0
- package/lib/cli/run.js +5 -0
- package/lib/hermes-jobs.js +8 -3
- package/lib/paths.js +21 -0
- package/lib/tools/adapters/browser-harness.js +6 -2
- package/package.json +1 -1
- package/.next/standalone/.next/static/chunks/app/projects/[slug]/page-bc5359a5168e8ce3.js +0 -1
- package/.next/standalone/.next/static/chunks/app/projects/page-d79be5eee8055790.js +0 -1
- package/.next/static/chunks/app/projects/[slug]/page-bc5359a5168e8ce3.js +0 -1
- package/.next/static/chunks/app/projects/page-d79be5eee8055790.js +0 -1
- /package/.next/standalone/.next/static/{BUIr7wYicmHyHGx6KK3SN → Ggj14oXXrOVWG6lsx-BHT}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{BUIr7wYicmHyHGx6KK3SN → Ggj14oXXrOVWG6lsx-BHT}/_ssgManifest.js +0 -0
- /package/.next/static/{BUIr7wYicmHyHGx6KK3SN → Ggj14oXXrOVWG6lsx-BHT}/_buildManifest.js +0 -0
- /package/.next/static/{BUIr7wYicmHyHGx6KK3SN → Ggj14oXXrOVWG6lsx-BHT}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8419],{45:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var a=r(2115),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},o=r(4250);let l=(0,a.createContext)({}),i=(0,a.forwardRef)((e,t)=>{var r,i,s;let{color:c,size:d,strokeWidth:u,absoluteStrokeWidth:h,className:p="",children:m,iconNode:f,...b}=e,{size:v=24,strokeWidth:j=2,absoluteStrokeWidth:y=!1,color:g="currentColor",className:k=""}=null!=(r=(0,a.useContext)(l))?r:{},w=(null!=h?h:y)?24*Number(null!=u?u:j)/Number(null!=d?d:v):null!=u?u:j;return(0,a.createElement)("svg",{ref:t,...n,width:null!=(i=null!=d?d:v)?i:n.width,height:null!=(s=null!=d?d:v)?s:n.height,stroke:null!=c?c:g,strokeWidth:w,className:(0,o.z)("lucide",k,p),...!m&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(b)&&{"aria-hidden":"true"},...b},[...f.map(e=>{let[t,r]=e;return(0,a.createElement)(t,r)}),...Array.isArray(m)?m:[m]])})},63:(e,t,r)=>{"use strict";var a=r(7260);r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}}),r.o(a,"useRouter")&&r.d(t,{useRouter:function(){return a.useRouter}}),r.o(a,"useSearchParams")&&r.d(t,{useSearchParams:function(){return a.useSearchParams}})},677:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var a=r(5155),n=r(2115);function o(){let[e,t]=(0,n.useState)([]),[r,o]=(0,n.useState)("");return(0,n.useEffect)(()=>{o(localStorage.getItem("madarx.activeProjectId")||""),fetch("/api/projects").then(e=>e.json()).then(e=>t(e.projects||[])).catch(()=>{})},[]),(0,a.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,a.jsxs)("select",{value:r,onChange:e=>{var t;o(t=e.target.value),t?localStorage.setItem("madarx.activeProjectId",t):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:t||null}}))},"aria-label":"Active project",children:[(0,a.jsx)("option",{value:"",children:"All projects"}),e.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name},e.id))]})})}},2074:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var a=r(5155),n=r(2115),o=r(2835);let l=new Set(["html","htm"]);function i(e){let{projectId:t,children:r}=e,{refreshLibrary:i}=(0,o.c)(),[m,f]=n.useState(!1),[,b]=n.useState(!1),v=n.useRef(!1),j=n.useRef(null),[y,g]=n.useState(null),k=n.useRef(0);n.useEffect(()=>{function e(e){e.dataTransfer&&Array.from(e.dataTransfer.types||[]).includes("Files")&&(k.current+=1,f(!0))}function t(){k.current=Math.max(0,k.current-1),0===k.current&&f(!1)}function r(e){e.dataTransfer&&Array.from(e.dataTransfer.types||[]).includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")}function a(e){var t;e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length&&(e.preventDefault(),k.current=0,f(!1),null==(t=j.current)||t.call(j,Array.from(e.dataTransfer.files)))}return window.addEventListener("dragenter",e),window.addEventListener("dragleave",t),window.addEventListener("dragover",r),window.addEventListener("drop",a),()=>{window.removeEventListener("dragenter",e),window.removeEventListener("dragleave",t),window.removeEventListener("dragover",r),window.removeEventListener("drop",a)}},[]);let w=n.useCallback(async e=>{if(e.size>0x1900000)return{ok:!1,name:e.name,error:"Too large (>".concat(0x1900000," bytes)")};let r=function(e){let t=(String((null==e?void 0:e.name)||"").toLowerCase().match(/\.([a-z0-9]+)$/)||[,""])[1],r=String((null==e?void 0:e.type)||"").toLowerCase();return l.has(t)||"text/html"===r?"html":"disk"}(e),a=new FormData;if(a.set("project_id",t),"html"===r){a.set("file",e);let t=await fetch("/api/artifacts/upload",{method:"POST",body:a}),r=await t.json().catch(()=>({}));return{ok:t.ok,name:e.name,error:null==r?void 0:r.error}}a.set("files",e);let n=await fetch("/api/disk/files",{method:"POST",body:a}),o=await n.json().catch(()=>({}));return{ok:n.ok,name:e.name,error:null==o?void 0:o.error}},[t]),x=n.useCallback(async e=>{if(e.length&&!v.current){v.current=!0,b(!0);try{g({kind:"info",text:"Uploading ".concat(e.length," file").concat(e.length>1?"s":"","…")});let t=await Promise.all(e.map(w)),r=t.filter(e=>e.ok).length,a=t.filter(e=>!e.ok);0===a.length?g({kind:"ok",text:"Uploaded ".concat(r," file").concat(r>1?"s":"",".")}):r>0?g({kind:"warn",text:"Uploaded ".concat(r,", ").concat(a.length," failed (").concat(a[0].error||"error",").")}):g({kind:"err",text:"Upload failed: ".concat(a[0].error||"unknown error")}),r>0&&await i(),setTimeout(()=>g(null),4500)}finally{v.current=!1,b(!1)}}},[i,w]);return n.useEffect(()=>{j.current=x},[x]),(0,a.jsxs)(a.Fragment,{children:[r,m?(0,a.jsx)("div",{role:"status","aria-live":"polite",style:s,children:(0,a.jsxs)("div",{style:c,children:[(0,a.jsx)("div",{style:d,children:"Drop to upload"}),(0,a.jsx)("div",{style:u,children:"HTML files become artifacts \xb7 others land in Disk"})]})}):null,y?(0,a.jsx)("div",{role:"status","aria-live":"polite",style:{...h,...p[y.kind]},children:y.text}):null]})}let s={position:"fixed",inset:0,zIndex:9e3,background:"rgba(10, 8, 6, 0.45)",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",transition:"opacity 120ms ease"},c={border:"2px dashed rgba(255,255,255,0.6)",borderRadius:16,padding:"32px 48px",background:"rgba(20,16,12,0.7)",color:"#f5efe7",textAlign:"center",fontFamily:"inherit"},d={fontSize:22,fontWeight:600,letterSpacing:"0.01em",marginBottom:6},u={fontSize:13,opacity:.75},h={position:"fixed",bottom:24,right:24,zIndex:9100,padding:"10px 14px",borderRadius:10,fontSize:13,fontFamily:"inherit",boxShadow:"0 8px 24px rgba(0,0,0,0.25)",maxWidth:380},p={info:{background:"#1f1b16",color:"#f5efe7",border:"1px solid rgba(245,239,231,0.18)"},ok:{background:"#1c2a1d",color:"#e6f3df",border:"1px solid rgba(120,180,90,0.35)"},warn:{background:"#2c2519",color:"#f4e6c5",border:"1px solid rgba(220,170,60,0.35)"},err:{background:"#2c1816",color:"#f4d8d2",border:"1px solid rgba(194,69,42,0.55)"}}},2835:(e,t,r)=>{"use strict";r.d(t,{ProjectAlbumProvider:()=>v,c:()=>j});var a=r(5155),n=r(2115);let o="madarx-privacy-unlocked",l="madarx-privacy-unlock-at",i="madarx-privacy-fail-count",s="madarx-privacy-fail-window-start",c="madarx-privacy-lockout-until";function d(e){try{return window.sessionStorage.getItem(e)}catch(e){return null}}function u(e,t){try{window.sessionStorage.setItem(e,String(t))}catch(e){}}function h(e){try{window.sessionStorage.removeItem(e)}catch(e){}}let p=0;function m(e,t){return new Promise((r,a)=>{let n=p+=1,o=t=>{var l;(null==(l=t.data)?void 0:l.id)===n&&(e.removeEventListener("message",o),!1===t.data.ok&&t.data.error?a(Error(t.data.error)):r(t.data))};e.addEventListener("message",o),e.postMessage({id:n,...t})})}let f=(0,n.createContext)(null);function b(e){return"".concat(e.source_type,"-").concat(e.id)}function v(e){let{children:t,initialItems:r=[],initialFolders:p=[],projectId:v,projectSlug:j,rootFolderId:y=null,currentFolderId:g=null,liveDeltasEnabled:k=!1}=e,w=function(){let{projectId:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=(0,n.useState)(null),[a,p]=(0,n.useState)(!1),[f,b]=(0,n.useState)(!1),[v,j]=(0,n.useState)(null),[y,g]=(0,n.useState)(0),[k,w]=(0,n.useState)(0),x=(0,n.useRef)(null),C=(0,n.useRef)(Date.now()),S=(0,n.useCallback)(()=>{let e="1"===d(o),t=Number(d(l)||0);p(e&&t>0);let r=Number(d(i)||0),a=Number(d(c)||0);g(r),w(a>Date.now()?a:0)},[]),_=(0,n.useCallback)(async()=>{try{let e=await fetch("/api/privacy/config"),t=await e.json();return r(t),t}catch(e){return r({configured:!1}),console.error("[usePrivacy] fetchConfig error:",e),{configured:!1}}},[]);(0,n.useEffect)(()=>(x.current=new Worker("/privacy.worker.js"),S(),_(),()=>{var e;null==(e=x.current)||e.terminate(),x.current=null}),[_,S]),(0,n.useEffect)(()=>{let e=()=>_(),t=()=>{p(!0),_()},r=()=>{p(!1)};return window.addEventListener("privacy:configured",e),window.addEventListener("privacy:unlocked",t),window.addEventListener("privacy:locked",r),()=>{window.removeEventListener("privacy:configured",e),window.removeEventListener("privacy:unlocked",t),window.removeEventListener("privacy:locked",r)}},[_]),(0,n.useEffect)(()=>{let e=()=>{C.current=Date.now()};window.addEventListener("mousemove",e,{passive:!0}),window.addEventListener("keydown",e,{passive:!0}),window.addEventListener("pointerdown",e,{passive:!0});let t=setInterval(()=>{a&&Date.now()-C.current>9e5&&(h(o),h(l),p(!1))},6e4);return()=>{window.removeEventListener("mousemove",e),window.removeEventListener("keydown",e),window.removeEventListener("pointerdown",e),clearInterval(t)}},[a]);let N=(0,n.useCallback)(()=>{h(o),h(l),p(!1);try{window.dispatchEvent(new CustomEvent("privacy:locked"))}catch(e){}},[]),L=(0,n.useCallback)(async r=>{if(!(null==t?void 0:t.configured))return{ok:!1,error:"No passphrase configured."};let a=x.current;if(!a)return{ok:!1,error:"Worker not ready."};let n=Number(d(c)||0);if(n>Date.now())return{ok:!1,error:"lockout",lockoutUntil:n};b(!0),j(null);try{if((await m(a,{op:"verify",passphrase:r,salt:t.salt_b64,iter:t.iterations,mac:t.hmac_b64})).match)return u(o,"1"),u(l,String(Date.now())),h(i),h(s),h(c),p(!0),g(0),w(0),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!0,project_id:e||null})}).catch(()=>{}),{ok:!0};let n=Number(d(i)||0)+1,f=Number(d(s)||Date.now());u(i,String(n)),u(s,String(f)),g(n);let b=0;if(n>=5&&Date.now()-f<3e5)return b=Date.now()+9e5,u(c,String(b)),w(b),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!1,attempt_count:n,lockout_until:new Date(b).toISOString(),project_id:e||null})}).catch(()=>{}),{ok:!1,error:"lockout",lockoutUntil:b};return Date.now()-f>=3e5&&(u(i,"1"),u(s,String(Date.now())),g(1)),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!1,attempt_count:n,project_id:e||null})}).catch(()=>{}),{ok:!1,error:"wrong_passphrase",failCount:n}}catch(t){let e=(null==t?void 0:t.message)||"Crypto error.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[t,e]),E=(0,n.useCallback)(async e=>{let r=x.current;if(!r)return{ok:!1,error:"Worker not ready."};b(!0),j(null);try{let a=await m(r,{op:"setup",passphrase:e,iter:6e5});if(!a.ok)throw Error(a.error||"Worker failed.");let n=!!(null==t?void 0:t.configured),i=await fetch("/api/privacy/config",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kdf:"PBKDF2-SHA256",iterations:6e5,salt_b64:a.salt_b64,hmac_b64:a.hmac_b64,idle_timeout_ms:9e5,is_change:n})}),s=await i.json();if(!s.ok)throw Error(s.error||"Server rejected config.");return u(o,"1"),u(l,String(Date.now())),p(!0),await _(),window.dispatchEvent(new CustomEvent("privacy:configured")),{ok:!0}}catch(t){let e=(null==t?void 0:t.message)||"Setup failed.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[t,_]),D=(0,n.useCallback)(async()=>{b(!0),j(null);try{let e=await fetch("/api/privacy/config",{method:"DELETE"}),t=await e.json();if(!t.ok)throw Error(t.error||"Reset failed.");return N(),h(i),h(s),h(c),g(0),w(0),await _(),{ok:!0,artifacts_cleared:t.artifacts_cleared}}catch(t){let e=(null==t?void 0:t.message)||"Reset failed.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[N,_]),I=!!(null==t?void 0:t.configured);return{config:t,configured:I,unlocked:a,busy:f,error:v,failCount:y,lockoutUntil:k,lock:N,unlock:L,setupPassphrase:E,resetPassphrase:D,refetchConfig:_}}({projectId:v}),x=function(){let e=(0,n.useRef)(new Map),[t,r]=(0,n.useState)(0),a=(0,n.useCallback)(async function(t){var a;let{force:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return null;if(!n&&e.current.has(t))return e.current.get(t);let[o,l,i]=await Promise.all([fetch("/api/artifacts/".concat(t,"/acl")),fetch("/api/artifacts/".concat(t,"/share-link")),fetch("/api/audit/search?action_target_type=artifact&action_target_id=".concat(t,"&limit=5"))]),s={acl:null,links:[],auditRows:[]};if(o.ok){let{data:e}=await o.json();s.acl=e}if(l.ok){let{data:e}=await l.json();s.links=Array.isArray(e)?e:[]}return i.ok&&(s.auditRows=(Array.isArray(a=await i.json())?a:Array.isArray(null==a?void 0:a.rows)?a.rows:Array.isArray(null==a?void 0:a.data)?a.data:[]).slice(0,5)),e.current.set(t,s),r(e=>e+1),s},[]),o=(0,n.useCallback)(t=>{t?e.current.delete(t):e.current.clear(),r(e=>e+1)},[]);return{readArtifactShareData:a,invalidateArtifactShareData:o,readProjectShareData:(0,n.useCallback)(async function(t){var a;let{force:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return null;let o="project:".concat(t);if(!n&&e.current.has(o))return e.current.get(o);let l={status:null,cloudReady:!1,grants:[],members:[],orgId:null,error:null},[i,s]=await Promise.all([fetch("/api/shared/spaces/status?local_space_id=".concat(encodeURIComponent(t),"&space_type=project")),fetch("/api/orgs")]);if(i.ok){let e=await i.json();l.status=e.status||null,l.cloudReady=!!e.cloud_ready}if(s.ok){let{orgs:e}=await s.json();l.orgId=Array.isArray(e)&&e.length&&(e[0].org_id||e[0].id)||null}if(null==(a=l.status)?void 0:a.shared){let e=await fetch("/api/shared/spaces/".concat(encodeURIComponent(t),"/acl?space_type=project"));if(e.ok){let{data:t}=await e.json();l.grants=Array.isArray(t)?t:[]}}if(l.orgId){let e=await fetch("/api/orgs/".concat(encodeURIComponent(l.orgId),"/members"));if(e.ok){let{members:t}=await e.json();l.members=Array.isArray(t)?t:[]}}return e.current.set(o,l),r(e=>e+1),l},[]),invalidateProjectShareData:(0,n.useCallback)(t=>{t?e.current.delete("project:".concat(t)):e.current.clear(),r(e=>e+1)},[]),shareDataVersion:t}}(),[C,S]=(0,n.useState)(r),[_,N]=(0,n.useState)(p),[L,E]=(0,n.useState)(!1),[D,I]=(0,n.useState)(!1);(0,n.useEffect)(()=>{S(r)},[r]),(0,n.useEffect)(()=>{N(p)},[p]);let A=(0,n.useCallback)(async()=>{if(!j)return;let e=await fetch("/api/projects/".concat(encodeURIComponent(j),"/library"),{cache:"no-store"});if(!e.ok)throw Error("library refresh failed (".concat(e.status,")"));let t=await e.json();S(Array.isArray(t.libraryItems)?t.libraryItems:[]),N(Array.isArray(t.folders)?t.folders:[])},[j]);(0,n.useEffect)(()=>{if(!k)return;let e=new EventSource("/api/events/stream"),t=null,r=null,a=()=>{t&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null,A().catch(e=>{console.warn("[project-album] live library refresh failed",e)})},250)},n=["state.disk.changed","state.artifacts.changed","state.acl.changed","state.share_links.changed"];for(let t of n)e.addEventListener(t,a);let o=()=>{"visible"===document.visibilityState&&a()};return document.addEventListener("visibilitychange",o),r=window.setInterval(a,6e4),()=>{for(let t of n)e.removeEventListener(t,a);document.removeEventListener("visibilitychange",o),t&&window.clearTimeout(t),r&&window.clearInterval(r),e.close()}},[k,A]);let P=(0,n.useCallback)(e=>{S(t=>(function(e,t){if(!(null==t?void 0:t.id)||!(null==t?void 0:t.source_type))return e;let r=b(t),a=!1,n=e.map(e=>b(e)!==r?e:(a=!0,{...e,...t}));return a?n:[t,...n]})(t,e))},[]),M=(0,n.useCallback)(e=>{let t="string"==typeof e?e:b(e);S(e=>e.filter(e=>b(e)!==t))},[]),T=(0,n.useMemo)(()=>({items:C,folders:_,setItems:S,setFolders:N,applyItemPatch:P,removeItem:M,refreshLibrary:A,liveDeltasEnabled:k,projectId:v,projectSlug:j,rootFolderId:y,currentFolderId:g,privacy:w,shareData:x,setupModalOpen:L,unlockModalOpen:D,openSetupModal:()=>E(!0),closeSetupModal:()=>E(!1),openUnlockModal:()=>I(!0),closeUnlockModal:()=>I(!1)}),[C,_,P,M,A,k,v,j,y,g,w,x,L,D]);return(0,a.jsx)(f.Provider,{value:T,children:t})}function j(){let e=(0,n.useContext)(f);if(!e)throw Error("useProjectAlbum must be used inside ProjectAlbumProvider");return e}},3185:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var a=r(2115),n=r(4250);let o=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var l=r(45);let i=(e,t)=>{let r=(0,a.forwardRef)((r,i)=>{let{className:s,...c}=r;return(0,a.createElement)(l.default,{ref:i,iconNode:t,className:(0,n.z)("lucide-".concat(o(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),s),...c})});return r.displayName=o(e),r}},4073:(e,t,r)=>{"use strict";r.d(t,{default:()=>p});var a=r(5155),n=r(2619),o=r.n(n),l=r(7909),i=r(2115),s=r(5649),c=r(2835);let d=(0,l.default)(()=>r.e(1517).then(r.bind(r,1517)).then(e=>e.PrivacyPassphraseModal),{loadableGenerated:{webpack:()=>[1517]}}),u=(0,l.default)(()=>r.e(4797).then(r.bind(r,4797)).then(e=>e.PrivacyUnlockModal),{loadableGenerated:{webpack:()=>[4797]}}),h=(0,l.default)(()=>r.e(9867).then(r.bind(r,9867)),{loadableGenerated:{webpack:()=>[9867]}});function p(e){let{projectId:t,projectName:r="",slug:n,lockedCount:l=0,currentFolderId:p=null,rootFolderId:b=null}=e,{privacy:v,setupModalOpen:j,unlockModalOpen:y,openSetupModal:g,closeSetupModal:k,openUnlockModal:w,closeUnlockModal:x,refreshLibrary:C}=(0,c.c)(),{configured:S,unlocked:_,lock:N}=v,[L,E]=(0,i.useState)(!1),[D,I]=(0,i.useState)(!1),[A,P]=(0,i.useState)(""),[M,T]=(0,i.useState)(null),[F,O]=(0,i.useState)(!1),R=(0,i.useCallback)(()=>{P(""),T(null),I(!0)},[]),U=(0,i.useCallback)(()=>{F||I(!1)},[F]),W=(0,i.useCallback)(async e=>{if(e&&e.preventDefault(),F)return;let r=String(A||"").trim();if(!r)return void T("Name is required.");if(/[\\/]/.test(r))return void T("Name cannot contain slashes.");O(!0),T(null);try{let e=p&&p!==b?p:null,a=await fetch("/api/disk/folders",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({project_id:t,name:r,parent_id:e})}),n=await a.json().catch(()=>({}));if(!a.ok)throw Error((null==n?void 0:n.error)||"create failed (".concat(a.status,")"));I(!1),P(""),await C()}catch(e){console.error("[project-header] create folder failed",e),T((null==e?void 0:e.message)||String(e))}finally{O(!1)}},[F,A,t,p,b,C]),B=S?_?(0,a.jsx)("button",{type:"button",className:"project-album-lock-chip unlocked",onClick:N,"aria-label":"Lock protected artifacts",title:"Click to lock",children:(0,a.jsx)(f,{})}):(0,a.jsxs)("button",{type:"button",className:"project-album-lock-chip locked",onClick:w,"aria-label":"Unlock ".concat(l," protected artifacts"),title:"Click to unlock",children:[(0,a.jsx)(m,{}),l>0?(0,a.jsx)("span",{className:"project-album-lock-chip-count",children:l}):null]}):(0,a.jsx)("button",{type:"button",className:"project-album-lock-chip no-passphrase",onClick:g,"aria-label":"Set up passphrase protection",title:"Protect individual artifacts with a passphrase",children:(0,a.jsx)(m,{})});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o(),{className:"project-activity-link icon-only",href:"/projects/".concat(n,"/log"),"aria-label":"Open project activity",title:"Activity",children:(0,a.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"8",cy:"8",r:"6"}),(0,a.jsx)("path",{d:"M8 5v3.5l2.2 1.3"})]})}),B,(0,a.jsxs)("button",{type:"button",className:"project-album-folder-new",onClick:()=>E(!0),"aria-label":"Share this project",title:"Share this project with your organization",children:[(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"12",cy:"3.5",r:"2"}),(0,a.jsx)("circle",{cx:"4",cy:"8",r:"2"}),(0,a.jsx)("circle",{cx:"12",cy:"12.5",r:"2"}),(0,a.jsx)("path",{d:"M5.7 7 10.3 4.5M5.7 9l4.6 2.5"})]}),"Share"]}),(0,a.jsxs)("button",{type:"button",className:"project-album-folder-new",onClick:R,"aria-label":"Create new folder",title:"Create a new folder on disk",children:[(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M2 5a1 1 0 0 1 1-1h3.5l1.5 1.5H13a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5Z"}),(0,a.jsx)("path",{d:"M8 8v4M6 10h4"})]}),"New folder"]}),(0,a.jsx)(s.A,{open:D,onClose:U,eyebrow:"Library",title:"New folder",children:(0,a.jsxs)("form",{className:"agents-modal-form",onSubmit:W,children:[(0,a.jsx)("p",{className:"agents-modal-help",children:"Creates a real folder on disk under this project. Use it to organize uploaded documents and artifacts."}),(0,a.jsxs)("section",{className:"agents-modal-section",children:[(0,a.jsxs)("label",{className:"agents-modal-field wide",children:[(0,a.jsx)("span",{children:"Folder name"}),(0,a.jsx)("input",{type:"text",value:A,onChange:e=>{P(e.target.value),M&&T(null)},placeholder:"e.g. Research, Drafts, 2026-Q2",autoComplete:"off",spellCheck:!1,autoFocus:!0,maxLength:120,disabled:F})]}),M?(0,a.jsx)("p",{className:"agents-modal-feedback error",role:"alert","aria-live":"polite",children:M}):(0,a.jsx)("small",{className:"project-album-folder-hint",children:"Letters, numbers, spaces, dashes. No slashes."})]}),(0,a.jsxs)("footer",{className:"agents-modal-foot",children:[(0,a.jsx)("button",{type:"button",className:"admin-button secondary",onClick:U,disabled:F,children:"Cancel"}),(0,a.jsx)("button",{type:"submit",className:"admin-button",disabled:F||!A.trim(),children:F?"Creating…":"Create folder"})]})]})}),(0,a.jsx)(d,{open:j,onClose:k,projectId:t,privacy:v}),(0,a.jsx)(u,{open:y,onClose:x,projectId:t,privacy:v}),L?(0,a.jsx)(h,{item:{source_type:"project",id:t,name:r},onClose:()=>E(!1)}):null]})}function m(){return(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}function f(){return(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v0"})]})}},4250:(e,t,r)=>{"use strict";r.d(t,{z:()=>a});let a=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()}},4788:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});let a=(0,r(3185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5649:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var a=r(5155),n=r(2115),o=r(4788);function l(e){let{open:t,onClose:r,eyebrow:l,title:i,tone:s="default",size:c="default",children:d}=e,u=n.useRef(null);return n.useEffect(()=>{let e=u.current;e&&(t&&!e.open&&("function"==typeof e.showModal?e.showModal():e.setAttribute("open","")),!t&&e.open&&e.close())},[t]),n.useEffect(()=>{let e=u.current;if(!e)return;let t=e=>{e.preventDefault(),r()};return e.addEventListener("cancel",t),()=>e.removeEventListener("cancel",t)},[r]),(0,a.jsx)("dialog",{ref:u,className:"agents-modal".concat("wide"===c?" agents-modal--wide":""),onClick:e=>{e.target===u.current&&r()},children:t?(0,a.jsxs)("div",{className:"agents-modal-card".concat("danger"===s?" agents-modal-card--danger":""),onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("header",{className:"agents-modal-head",children:[(0,a.jsxs)("div",{children:[l?(0,a.jsx)("span",{className:"admin-kicker",children:l}):null,(0,a.jsx)("h2",{children:i})]}),(0,a.jsx)("button",{type:"button",className:"agents-modal-close",onClick:r,"aria-label":"Close",children:(0,a.jsx)(o.A,{size:14})})]}),d]}):null})}},6391:(e,t,r)=>{"use strict";r.d(t,{default:()=>k});var a=r(5155),n=r(7909),o=r(2115),l=r(63);function i(e){if(!Number.isFinite(e)||e<=0)return"0 B";let t=["B","KB","MB","GB"],r=0,a=e;for(;a>=1024&&r<t.length-1;)a/=1024,r+=1;return"".concat(a.toFixed(a>=10||0===r?0:1)," ").concat(t[r])}function s(e){return"".concat(e.source_type,"-").concat(e.id)}function c(e){let{breadcrumb:t,dragOverFolderId:r,setDragOverFolderId:n,navigateToFolder:o,albumItems:l,moveItem:i,rootFolderId:c}=e;if(!t.length)return null;let d=e=>({onDragOver:t=>{t.preventDefault(),n(e||"__root__")},onDragLeave:()=>n(null),onDrop:t=>((e,t)=>{e.preventDefault(),n(null);let r=e.dataTransfer.getData("text/madarx-item-key"),a=l.find(e=>s(e)===r);a&&i(a,t)})(t,e||c)});return(0,a.jsxs)("nav",{className:"project-album-breadcrumb","aria-label":"Folder",children:[(0,a.jsxs)("button",{type:"button",className:"project-album-crumb".concat("__root__"===r?" drop-target":""),onClick:()=>o(null),...d(null),children:[(0,a.jsx)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,a.jsx)("path",{d:"M2 8l6-5 6 5v5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V8z"})}),(0,a.jsx)("span",{children:"Library"})]}),t.map((e,n)=>{let l=n===t.length-1;return(0,a.jsxs)("span",{className:"project-album-crumb-row",children:[(0,a.jsx)("svg",{className:"project-album-crumb-sep",width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,a.jsx)("path",{d:"M3 1l4 4-4 4"})}),l?(0,a.jsx)("span",{className:"project-album-crumb current","aria-current":"page",children:e.name}):(0,a.jsx)("button",{type:"button",className:"project-album-crumb".concat(r===e.id?" drop-target":""),onClick:()=>o(e.id),...d(e.id),children:e.name})]},e.id)})]})}var d=r(8219);function u(e){let{item:t,MarkdownThumbnail:r}=e;if("file"===t.source_type&&t.local_only)return(0,a.jsxs)("div",{className:"project-album-thumb-tile","data-kind":"local",children:[(0,a.jsx)("span",{children:"LOCAL"}),(0,a.jsx)("small",{children:i(t.size_bytes)})]});if("html"===t.render_kind&&t.body)return(0,a.jsxs)("div",{className:"project-album-thumb-iframe-wrap","aria-hidden":"true",children:[(0,a.jsx)("iframe",{className:"project-album-thumb-iframe",srcDoc:(0,d.sV)(t.body),sandbox:"",loading:"lazy",tabIndex:-1,title:""}),(0,a.jsx)("div",{className:"project-album-thumb-shield"})]});if("markdown"===t.render_kind&&t.body)return(0,a.jsx)("div",{className:"project-album-thumb-md","aria-hidden":"true",children:(0,a.jsx)("div",{className:"project-album-thumb-md-inner",children:(0,a.jsx)(r,{children:String(t.body).slice(0,800)})})});let n=String(t.kind||"FILE").toUpperCase().slice(0,6);return(0,a.jsxs)("div",{className:"project-album-thumb-tile","data-kind":String(t.kind||"file").toLowerCase(),children:[(0,a.jsx)("span",{children:n}),"file"===t.source_type?(0,a.jsx)("small",{children:i(t.size_bytes)}):null]})}function h(e){let{item:t,onOpen:r,onDoubleOpen:n,onOpenUnlock:o,blurred:l=!1,highlighted:i=!1,protectedFlag:s=!1,keyHintVisible:c=!1,onShowKeyHint:d,onHideKeyHint:h,draggable:p=!1,onDragStart:m,moving:f=!1,MarkdownThumbnail:b}=e,v="artifact"===t.source_type?t.title||t.path||t.id:t.name,j="artifact"===t.source_type?t.kind||"artifact":t.local_only?"local":t.kind||"file",y=function(e){if("artifact"===e.source_type){let t=e.agent_id||"";return t?"main-orchestrator"===t?"Main agent":"ops-agent"===t?"Caretaker":t:"Agent"}return"You"}(t),g=t.updated_at||t.created_at,k=["project-album-card"];return l&&k.push("blurred"),i&&k.push("highlighted"),s&&k.push("is-protected"),f&&k.push("moving"),(0,a.jsxs)("button",{type:"button",className:k.join(" "),onClick:r,onDoubleClick:n,onKeyDown:e=>{if(l){if("d"===e.key||"D"===e.key){e.preventDefault(),o();return}("Enter"===e.key||" "===e.key)&&(e.preventDefault(),d(),setTimeout(h,2500))}},tabIndex:0,"aria-label":l?"".concat(v," — protected. Double-click or press D to unlock."):"Open ".concat(v),"aria-disabled":l||void 0,style:l?{userSelect:"none"}:void 0,draggable:p&&!l,onDragStart:p&&!l?m:void 0,children:[(0,a.jsxs)("div",{className:"project-album-thumb","data-render":t.render_kind||"text","data-source":t.source_type,"aria-hidden":l?"true":void 0,children:[(0,a.jsx)(u,{item:t,MarkdownThumbnail:b}),l?(0,a.jsx)("div",{className:"project-album-thumb-lock","aria-hidden":"true",children:(0,a.jsxs)("svg",{width:"18",height:"18",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}):null,s&&!l?(0,a.jsx)("div",{className:"project-album-thumb-badge","aria-hidden":"true",title:"Protected",children:(0,a.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}):null]}),(0,a.jsxs)("div",{className:"project-album-card-body",children:[(0,a.jsx)("b",{title:v,children:v}),(0,a.jsxs)("small",{className:"project-album-card-meta",children:[(0,a.jsx)("span",{className:"project-album-kind",children:j}),(0,a.jsx)("span",{"aria-hidden":"true",children:" \xb7 "}),(0,a.jsx)("span",{children:y}),g?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{"aria-hidden":"true",children:" \xb7 "}),(0,a.jsx)("time",{dateTime:g,children:function(e){if(!e)return"";try{return new Intl.DateTimeFormat("en",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(e))}catch(t){return e}}(g)})]}):null]})]}),c?(0,a.jsx)("div",{className:"project-album-key-hint","aria-live":"polite",role:"status",children:"Double-click or press D to unlock."}):null]})}function p(e){let{folder:t,dragOver:r,onOpen:n,onDragOver:o,onDragLeave:l,onDrop:i}=e,s=["project-album-folder-card"];return r&&s.push("drop-target"),(0,a.jsxs)("button",{type:"button",className:s.join(" "),onClick:n,onDragOver:o,onDragLeave:l,onDrop:i,"aria-label":"Open folder ".concat(t.name),children:[(0,a.jsx)("span",{className:"project-album-folder-card-icon","aria-hidden":"true",children:(0,a.jsx)("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:(0,a.jsx)("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7z"})})}),(0,a.jsxs)("span",{className:"project-album-folder-card-body",children:[(0,a.jsx)("b",{children:t.name}),(0,a.jsx)("small",{children:"Folder"})]})]})}function m(e){let{subFolders:t,dragOverFolderId:r,setDragOverFolderId:n,navigateToFolder:o,albumItems:l,moveItem:i}=e;return t.length?(0,a.jsx)("div",{className:"project-album-folders",children:t.map(e=>(0,a.jsx)(p,{folder:e,dragOver:r===e.id,onOpen:()=>o(e.id),onDragOver:t=>{t.preventDefault(),n(e.id)},onDragLeave:()=>n(null),onDrop:t=>{t.preventDefault(),n(null);let r=t.dataTransfer.getData("text/madarx-item-key"),a=l.find(e=>s(e)===r);a&&i(a,e.id)}},e.id))}):null}function f(e){let{query:t,setQuery:r,filters:n,filterId:o,setFilterId:l,itemsInFolder:i}=e;return(0,a.jsxs)("div",{className:"project-album-toolbar",children:[(0,a.jsxs)("label",{className:"project-album-search",children:[(0,a.jsxs)("svg",{className:"project-album-search-icon",width:"15",height:"15",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,a.jsx)("line",{x1:"10.6",y1:"10.6",x2:"14",y2:"14"})]}),(0,a.jsx)("input",{type:"search",value:t,onChange:e=>r(e.target.value),placeholder:"Search artifacts, documents, and content…","aria-label":"Search project library"}),t?(0,a.jsx)("button",{type:"button",className:"project-album-search-clear",onClick:()=>r(""),"aria-label":"Clear search",children:"\xd7"}):null]}),(0,a.jsx)("div",{className:"project-album-filters",role:"tablist","aria-label":"Filter",children:n.map(e=>{let t=i.filter(e.match).length,r=o===e.id;return(0,a.jsxs)("button",{type:"button",role:"tab","aria-selected":r,className:"project-album-filter".concat(r?" on":""),onClick:()=>l(e.id),children:[(0,a.jsx)("span",{children:e.label}),(0,a.jsx)("code",{children:t})]},e.id)})})]})}function b(e){let{onSetup:t,onDismiss:r}=e;return(0,a.jsxs)("div",{className:"project-album-migration-banner",role:"status",children:[(0,a.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]}),(0,a.jsx)("p",{children:"You had privacy blur enabled. Set a passphrase to protect individual artifacts, or dismiss to skip."}),(0,a.jsxs)("div",{className:"project-album-migration-actions",children:[(0,a.jsx)("button",{type:"button",className:"project-album-migration-cta",onClick:t,children:"Set up passphrase"}),(0,a.jsx)("button",{type:"button",className:"project-album-migration-dismiss",onClick:r,children:"Dismiss"})]})]})}var v=r(2835);let j=[{id:"all",label:"All",match:()=>!0},{id:"artifact",label:"Artifacts",match:e=>"artifact"===e.source_type},{id:"document",label:"Documents",match:e=>"file"===e.source_type},{id:"local",label:"Local-only",match:e=>"file"===e.source_type&&e.local_only}],y=(0,n.default)(()=>Promise.all([r.e(930),r.e(2713)]).then(r.bind(r,5094)),{loadableGenerated:{webpack:()=>[5094]}}),g=(0,n.default)(()=>Promise.all([r.e(930),r.e(9863)]).then(r.bind(r,9863)),{loadableGenerated:{webpack:()=>[9863]},loading:()=>(0,a.jsx)("div",{className:"project-album-thumb-tile","data-kind":"markdown",children:(0,a.jsx)("span",{children:"MD"})})});function k(e){let{items:t,folders:r=[],projectId:n,projectSlug:i,rootFolderId:d=null,currentFolderId:u=null}=e,p=(0,l.useRouter)(),[k,w]=(0,o.useState)(null),[x,C]=(0,o.useState)(null),[S,_]=(0,o.useState)(null),[N,L]=(0,o.useState)(null),[E,D]=(0,o.useState)(!1),[I,A]=(0,o.useState)(null),[P,M]=(0,o.useState)([]),[T,F]=(0,o.useState)(null),{privacy:O,openSetupModal:R,openUnlockModal:U,applyItemPatch:W,removeItem:B,items:z,folders:H}=(0,v.c)(),V=z||t,K=H||r,{configured:J,unlocked:G}=O,q=function(e){let{items:t,folders:r,currentFolderId:a,rootFolderId:n,unlocked:l}=e,[i,s]=(0,o.useState)("all"),[c,d]=(0,o.useState)(""),[u,h]=(0,o.useState)(null),p=(0,o.useDeferredValue)(c),m=!a||a===n,f=(0,o.useMemo)(()=>r.find(e=>e.id===a)||null,[r,a]),b=(0,o.useMemo)(()=>{if(m)return[];let e=[],t=new Map(r.map(e=>[e.id,e])),n=t.get(a);for(;n;)e.unshift(n),n=n.parent_id?t.get(n.parent_id):null;return e},[r,a,m]),v=(0,o.useMemo)(()=>{let e=m?n:a;return r.filter(t=>t.parent_id===e)},[r,a,m,n]),y=(0,o.useMemo)(()=>t.filter(e=>{let t=e.folder_id||null;return m?!t||t===n:t===a}),[t,a,m,n]),g=(0,o.useMemo)(()=>{let e=(j.find(e=>e.id===i)||j[0]).match;return y.filter(e)},[y,i]),k=(0,o.useMemo)(()=>{let e=String(p||"").trim().toLowerCase();return e?g.filter(t=>(function(e){let{sessionUnlocked:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.is_protected&&!t?"":String(e.body||e.preview||"").slice(0,4e3);return[e.title||"",e.name||"",e.path||"",r,e.agent_id||"",function(e){if("artifact"===e.source_type){let t=e.agent_id||"";return t?"main-orchestrator"===t?"Main agent":"ops-agent"===t?"Caretaker":t:"Agent"}return"You"}(e)].join(" ").toLowerCase()})(t,{sessionUnlocked:l}).includes(e)):g},[g,p,l]),w=String(p||"").trim().toLowerCase(),x=(0,o.useCallback)(e=>!!w&&[e.title||"",e.name||"",e.path||""].join(" ").toLowerCase().includes(w),[w]),C=(0,o.useMemo)(()=>t.find(e=>"".concat(e.source_type,"-").concat(e.id)===u)||null,[t,u]);return{FILTERS:j,filterId:i,setFilterId:s,query:c,setQuery:d,selectedKey:u,setSelectedKey:h,isRoot:m,currentFolder:f,breadcrumb:b,subFolders:v,itemsInFolder:y,visible:k,queryLower:w,titleMatchesQuery:x,selected:C}}({items:V,folders:K,currentFolderId:u,rootFolderId:d,unlocked:G});(0,o.useEffect)(()=>{try{if("1"!==window.localStorage.getItem("madarx-album-privacy-blur"))return;J?window.localStorage.removeItem("madarx-album-privacy-blur"):D(!0)}catch(e){}},[J]),(0,o.useEffect)(()=>{let e=!1;return fetch("/api/dashboard/spaces").then(e=>e.ok?e.json():null).then(t=>{!e&&t&&Array.isArray(t.spaces)&&M(t.spaces)}).catch(()=>{}),()=>{e=!0}},[]);let Q=(0,o.useCallback)(async(e,t)=>{if(e&&"artifact"===e.source_type&&t){F(s(e));try{let r=await fetch("/api/dashboard/spaces/".concat(encodeURIComponent(t),"/move"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({artifact_id:e.id})});if(!r.ok)throw Error(await r.text().catch(()=>"")||"bookmark failed (".concat(r.status,")"));W({...e,space_id:t})}catch(e){console.error("[project-album] bookmark to space failed",e),window.alert("Could not pin this artifact to the space.\n".concat((null==e?void 0:e.message)||e))}finally{F(null)}}},[W]),Y=(0,o.useCallback)(()=>{try{window.localStorage.removeItem("madarx-album-privacy-blur")}catch(e){}D(!1)},[]),Z=(0,o.useCallback)(async e=>{if(e&&!k){w(s(e));try{let t="artifact"===e.source_type?"/api/artifacts/".concat(encodeURIComponent(e.id)):"/api/disk/files/".concat(encodeURIComponent(e.id)),r=await fetch(t,{method:"DELETE"});if(!r.ok)throw Error(await r.text().catch(()=>"")||"delete failed (".concat(r.status,")"));q.setSelectedKey(null),B(e)}catch(e){console.error("[project-album] delete failed",e),window.alert("Could not delete this item. See console for details.")}finally{w(null)}}},[q,k,B]),$=(0,o.useCallback)(async(e,t)=>{L(null);try{let r=await fetch("/api/artifacts/".concat(e.id,"/protect"),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({is_protected:!t})}),a=await r.json();if(a.need_passphrase_setup){q.setSelectedKey(null),R();return}if(!r.ok)return void L(a.error||"protect failed (".concat(r.status,")"));W({...e,is_protected:a.is_protected})}catch(e){L((null==e?void 0:e.message)||"Protect toggle failed.")}},[q,W,R]),X=(0,o.useCallback)(e=>{let t=e&&e!==d?"/projects/".concat(i,"?folder=").concat(encodeURIComponent(e)):"/projects/".concat(i);p.push(t)},[i,d,p]),ee=(0,o.useCallback)(async(e,t)=>{if(!e)return;let r="artifact"===e.source_type?"/api/artifacts/".concat(encodeURIComponent(e.id)):"/api/disk/files/".concat(encodeURIComponent(e.id));C(s(e));try{let a=await fetch(r,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({folder_id:t||null})});if(!a.ok)throw Error(await a.text().catch(()=>"")||"move failed (".concat(a.status,")"));let n=await a.json().catch(()=>({}));W(n.artifact||n.file||{...e,folder_id:t||null})}catch(e){console.error("[project-album] move failed",e),window.alert("Could not move this item.\n".concat((null==e?void 0:e.message)||e))}finally{C(null)}},[W]);return(0,a.jsxs)("div",{className:"project-album",children:[(0,a.jsx)(f,{query:q.query,setQuery:q.setQuery,filters:q.FILTERS,filterId:q.filterId,setFilterId:q.setFilterId,itemsInFolder:q.itemsInFolder}),E?(0,a.jsx)(b,{onSetup:()=>{D(!1),R()},onDismiss:Y}):null,(0,a.jsx)(c,{breadcrumb:q.breadcrumb,dragOverFolderId:S,setDragOverFolderId:_,navigateToFolder:X,albumItems:V,moveItem:ee,rootFolderId:d}),(0,a.jsx)(m,{subFolders:q.subFolders,dragOverFolderId:S,setDragOverFolderId:_,navigateToFolder:X,albumItems:V,moveItem:ee}),q.visible.length?(0,a.jsx)("div",{className:"project-album-grid",children:q.visible.map(e=>{let t=e.is_protected&&!G&&!q.titleMatchesQuery(e),r=e.is_protected&&!t&&!!q.queryLower,n=s(e);return(0,a.jsx)(h,{item:e,onOpen:()=>{e.is_protected&&!G&&!q.titleMatchesQuery(e)||q.setSelectedKey(s(e))},onDoubleOpen:()=>{!e.is_protected||G||q.titleMatchesQuery(e)?q.setSelectedKey(s(e)):U()},onOpenUnlock:U,blurred:t,highlighted:r,protectedFlag:!!e.is_protected,keyHintVisible:I===n,onShowKeyHint:()=>A(n),onHideKeyHint:()=>A(null),draggable:!0,onDragStart:e=>{e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/madarx-item-key",n)},moving:x===n,MarkdownThumbnail:g},n)})}):(0,a.jsx)("div",{className:"project-album-empty",children:q.query?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("b",{children:["No matches for “",q.query,"”."]}),(0,a.jsx)("small",{children:"Try a different keyword, or clear the search."})]}):q.isRoot?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:"Nothing here yet."}),(0,a.jsx)("small",{children:"Upload a document, create an artifact, or add a folder."})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:"This folder is empty."}),(0,a.jsx)("small",{children:"Drag an item here, or upload directly to this folder."})]})}),(0,a.jsx)(y,{item:q.selected,onClose:()=>{q.setSelectedKey(null),L(null)},isProtected:!!q.selected&&!!q.selected.is_protected,onToggleProtect:()=>q.selected&&$(q.selected,!!q.selected.is_protected),protectError:N,onDelete:()=>q.selected&&Z(q.selected),deleting:!!q.selected&&k===s(q.selected),folders:K,rootFolderId:d,onMove:e=>q.selected&&ee(q.selected,e),moving:!!q.selected&&x===s(q.selected),spaces:P,onBookmarkToSpace:e=>q.selected&&Q(q.selected,e),bookmarking:!!q.selected&&T===s(q.selected)})]})}(0,n.default)(()=>r.e(9867).then(r.bind(r,9867)),{loadableGenerated:{webpack:()=>[9867]}})},8855:(e,t,r)=>{Promise.resolve().then(r.bind(r,677)),Promise.resolve().then(r.bind(r,6391)),Promise.resolve().then(r.bind(r,4073)),Promise.resolve().then(r.bind(r,2835)),Promise.resolve().then(r.bind(r,2074)),Promise.resolve().then(r.t.bind(r,2619,23))}},e=>{e.O(0,[2619,1231,8441,1255,7358],()=>e(e.s=8855)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[893],{45:(e,a,t)=>{"use strict";t.d(a,{default:()=>o});var s=t(2115),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},l=t(4250);let r=(0,s.createContext)({}),o=(0,s.forwardRef)((e,a)=>{var t,o,c;let{color:i,size:d,strokeWidth:u,absoluteStrokeWidth:m,className:h="",children:p,iconNode:f,...j}=e,{size:x=24,strokeWidth:g=2,absoluteStrokeWidth:v=!1,color:b="currentColor",className:y=""}=null!=(t=(0,s.useContext)(r))?t:{},k=(null!=m?m:v)?24*Number(null!=u?u:g)/Number(null!=d?d:x):null!=u?u:g;return(0,s.createElement)("svg",{ref:a,...n,width:null!=(o=null!=d?d:x)?o:n.width,height:null!=(c=null!=d?d:x)?c:n.height,stroke:null!=i?i:b,strokeWidth:k,className:(0,l.z)("lucide",y,h),...!p&&!(e=>{for(let a in e)if(a.startsWith("aria-")||"role"===a||"title"===a)return!0;return!1})(j)&&{"aria-hidden":"true"},...j},[...f.map(e=>{let[a,t]=e;return(0,s.createElement)(a,t)}),...Array.isArray(p)?p:[p]])})},677:(e,a,t)=>{"use strict";t.d(a,{default:()=>l});var s=t(5155),n=t(2115);function l(){let[e,a]=(0,n.useState)([]),[t,l]=(0,n.useState)("");return(0,n.useEffect)(()=>{l(localStorage.getItem("madarx.activeProjectId")||""),fetch("/api/projects").then(e=>e.json()).then(e=>a(e.projects||[])).catch(()=>{})},[]),(0,s.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,s.jsxs)("select",{value:t,onChange:e=>{var a;l(a=e.target.value),a?localStorage.setItem("madarx.activeProjectId",a):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:a||null}}))},"aria-label":"Active project",children:[(0,s.jsx)("option",{value:"",children:"All projects"}),e.map(e=>(0,s.jsx)("option",{value:e.id,children:e.name},e.id))]})})}},926:(e,a,t)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),!function(e,a){for(var t in a)Object.defineProperty(e,t,{enumerable:!0,get:a[t]})}(a,{callServer:function(){return s.callServer},createServerReference:function(){return l.createServerReference},findSourceMapURL:function(){return n.findSourceMapURL}});let s=t(1209),n=t(5153),l=t(7197)},1236:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("4043fa7feec353d40276a467d8946b8356d2c92ab2",o.callServer,void 0,o.findSourceMapURL,"createProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Creating…":"Create project"})}function m(e){let{workspaceRoot:a="~/workspace/projects"}=e,[t,l]=n.useState(!1),[o,m]=n.useState(""),[h,p]=n.useState("workspace"),[f,j]=n.useState(""),x=n.useRef(null),g=n.useMemo(()=>"".concat(a.replace(/\/$/,""),"/").concat(String(o||"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"project"),[a,o]);return n.useEffect(()=>{var e;"custom"===h&&(null==(e=x.current)||e.focus())},[h]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("button",{type:"button",className:"admin-button agents-new-cta",onClick:()=>l(!0),children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"agents-new-cta-glyph",children:"+"}),"New project"]}),(0,s.jsx)(r.A,{open:t,onClose:()=>l(!1),eyebrow:"New project",title:"Create a project",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("p",{className:"agents-modal-help",children:"Scope agents, documents, memory, and integrations together."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",required:!0,placeholder:"Acme Co.",autoComplete:"off",value:o,onChange:e=>m(e.target.value),autoFocus:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where this project lives on disk."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("workspace"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"workspace",checked:"workspace"===h,onChange:()=>p("workspace")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"madarX workspace"}),(0,s.jsx)("code",{title:g,children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(g)})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===h,onChange:()=>p("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Custom path"}),(0,s.jsx)("small",{children:"Any absolute folder. Created if missing."})]})]})]}),"custom"===h?(0,s.jsx)(i.A,{inputRef:x,value:f,onChange:j}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Used for the project tile across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:"#c2452a"===e.value}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}},3185:(e,a,t)=>{"use strict";t.d(a,{A:()=>o});var s=t(2115),n=t(4250);let l=e=>{let a=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,a,t)=>t?t.toUpperCase():a.toLowerCase());return a.charAt(0).toUpperCase()+a.slice(1)};var r=t(45);let o=(e,a)=>{let t=(0,s.forwardRef)((t,o)=>{let{className:c,...i}=t;return(0,s.createElement)(r.default,{ref:o,iconNode:a,className:(0,n.z)("lucide-".concat(l(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),c),...i})});return t.displayName=l(e),t}},4250:(e,a,t)=>{"use strict";t.d(a,{z:()=>s});let s=function(){for(var e=arguments.length,a=Array(e),t=0;t<e;t++)a[t]=arguments[t];return a.filter((e,a,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===a).join(" ").trim()}},4788:(e,a,t)=>{"use strict";t.d(a,{A:()=>s});let s=(0,t(3185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5588:(e,a,t)=>{"use strict";t.d(a,{default:()=>d});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("404c09058da6107a889eda47ff9c94732e0d7dad86",o.callServer,void 0,o.findSourceMapURL,"deleteProjectAction");function i(e){let{disabled:a}=e,{pending:t}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button danger",disabled:t||a,"aria-busy":t?"true":void 0,children:t?"Deleting…":"Delete project"})}function d(e){let{projectId:a,projectName:t,projectSlug:l,isProtected:o}=e,[d,u]=n.useState(!1),[m,h]=n.useState("");if(o)return(0,s.jsxs)("span",{className:"admin-button secondary project-delete is-locked","aria-disabled":"true",title:"The Personal project is the default scope and cannot be deleted.",children:[(0,s.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{marginRight:6,verticalAlign:"-1px"},children:[(0,s.jsx)("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),(0,s.jsx)("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"Protected"]});n.useEffect(()=>{d||h("")},[d]);let p=m.trim()===l;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-delete",onClick:()=>u(!0),"aria-label":"Delete ".concat(t),children:"Delete"}),(0,s.jsx)(r.A,{open:d,onClose:()=>u(!1),eyebrow:"Delete project",title:"Delete ".concat(t,"?"),tone:"danger",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("p",{className:"agents-modal-help",children:"This removes the project, its agents, Disk files, memory, secrets, and audit history. The folder on your local drive is left untouched."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsxs)("span",{children:["Type ",(0,s.jsx)("code",{className:"agents-modal-inline-code",children:l})," to confirm"]}),(0,s.jsx)("input",{type:"text",autoComplete:"off",spellCheck:!1,value:m,onChange:e=>h(e.target.value),placeholder:l,autoFocus:!0})]})}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(!1),children:"Cancel"}),(0,s.jsx)(i,{disabled:!p})]})]})})]})}},5649:(e,a,t)=>{"use strict";t.d(a,{A:()=>r});var s=t(5155),n=t(2115),l=t(4788);function r(e){let{open:a,onClose:t,eyebrow:r,title:o,tone:c="default",size:i="default",children:d}=e,u=n.useRef(null);return n.useEffect(()=>{let e=u.current;e&&(a&&!e.open&&("function"==typeof e.showModal?e.showModal():e.setAttribute("open","")),!a&&e.open&&e.close())},[a]),n.useEffect(()=>{let e=u.current;if(!e)return;let a=e=>{e.preventDefault(),t()};return e.addEventListener("cancel",a),()=>e.removeEventListener("cancel",a)},[t]),(0,s.jsx)("dialog",{ref:u,className:"agents-modal".concat("wide"===i?" agents-modal--wide":""),onClick:e=>{e.target===u.current&&t()},children:a?(0,s.jsxs)("div",{className:"agents-modal-card".concat("danger"===c?" agents-modal-card--danger":""),onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("header",{className:"agents-modal-head",children:[(0,s.jsxs)("div",{children:[r?(0,s.jsx)("span",{className:"admin-kicker",children:r}):null,(0,s.jsx)("h2",{children:o})]}),(0,s.jsx)("button",{type:"button",className:"agents-modal-close",onClick:t,"aria-label":"Close",children:(0,s.jsx)(l.A,{size:14})})]}),d]}):null})}},6787:(e,a,t)=>{Promise.resolve().then(t.bind(t,677)),Promise.resolve().then(t.bind(t,5588)),Promise.resolve().then(t.bind(t,9524)),Promise.resolve().then(t.bind(t,1236)),Promise.resolve().then(t.t.bind(t,2619,23))},9097:(e,a,t)=>{"use strict";t.d(a,{A:()=>l});var s=t(5155),n=t(2115);function l(e){let{name:a="folder_path",value:t,onChange:l,inputRef:r,placeholder:o="/Users/you/Documents/my-project"}=e,[c,i]=n.useState(null),[d,u]=n.useState(!1),[m,h]=n.useState(""),[p,f]=n.useState(""),[j,x]=n.useState(null);async function g(){var e;let a;if(i(null),!(null==(e=navigator.clipboard)?void 0:e.readText))return void i({kind:"error",message:"Clipboard not available."});try{a=await navigator.clipboard.readText()}catch(e){i({kind:"error",message:"Allow clipboard access."});return}let t=(a||"").trim();if((t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))&&(t=t.slice(1,-1)),t.startsWith("file://"))try{t=decodeURI(t.slice(7))}catch(e){}return t?t.startsWith("/")||t.startsWith("~")?void(l(t),i({kind:"success",message:"Pasted."})):void i({kind:"error",message:"Path must be absolute."}):void i({kind:"error",message:"Clipboard is empty."})}async function v(){i(null),x("pick");try{let e=await fetch("/api/fs/pick-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:"Choose project folder",start_path:t&&t.startsWith("/")?t:void 0})});if(499===e.status)return void i({kind:"error",message:"Cancelled."});let a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Picker failed."});l(a.folder_path),i({kind:"success",message:"Selected ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}async function b(){if(i(null),!m.trim()||!p.trim())return void i({kind:"error",message:"Parent and name required."});x("create");try{let e=await fetch("/api/fs/create-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({parent:m.trim(),name:p.trim()})}),a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Create failed."});l(a.folder_path),u(!1),f(""),i({kind:"success",message:"Created ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}return n.useEffect(()=>{d&&!m&&h(t||"~/Documents")},[d,t,m]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"agents-modal-paste-row",children:[(0,s.jsx)("input",{ref:r,name:a,type:"text",placeholder:o,autoComplete:"off",spellCheck:!1,value:t||"",onChange:e=>{l(e.target.value),c&&i(null)},required:!0}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:v,disabled:"pick"===j,children:"pick"===j?"Opening…":"Choose folder…"})]}),(0,s.jsxs)("div",{className:"agents-modal-folder-tools",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:g,children:"Paste from clipboard"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Documents"),children:"~/Documents"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Desktop"),children:"~/Desktop"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(e=>!e),children:d?"Cancel new folder":"+ New folder"})]}),d?(0,s.jsxs)("div",{className:"agents-modal-create-folder",children:[(0,s.jsx)("small",{children:"Create a folder anywhere outside system directories. Parent must exist."}),(0,s.jsx)("div",{className:"agents-modal-create-row",children:(0,s.jsx)("input",{type:"text",placeholder:"Parent (e.g. ~/Documents)",value:m,onChange:e=>h(e.target.value),spellCheck:!1,autoComplete:"off"})}),(0,s.jsxs)("div",{className:"agents-modal-create-row",children:[(0,s.jsx)("input",{type:"text",placeholder:"New folder name",value:p,onChange:e=>f(e.target.value),spellCheck:!1,autoComplete:"off"}),(0,s.jsx)("button",{type:"button",className:"admin-button",onClick:b,disabled:"create"===j,children:"create"===j?"Creating…":"Create"})]})]}):null,c?(0,s.jsx)("p",{className:"agents-modal-feedback ".concat(c.kind),role:"status","aria-live":"polite",children:c.message}):null]})}},9524:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("40d07a37b90a7a6fc27ff79649099bf9cb9febc8d2",o.callServer,void 0,o.findSourceMapURL,"updateProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Saving…":"Save changes"})}function m(e){let{projectId:a,projectName:t,projectColor:l,projectDescription:o,projectFolderPath:m}=e,[h,p]=n.useState(!1),[f,j]=n.useState("keep"),[x,g]=n.useState(m||""),v=n.useRef(null);return n.useEffect(()=>{h&&(j("keep"),g(m||""))},[h,m]),n.useEffect(()=>{var e;"custom"===f&&(null==(e=v.current)||e.focus())},[f]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-edit",onClick:()=>p(!0),"aria-label":"Edit ".concat(t),children:"Edit"}),(0,s.jsx)(r.A,{open:h,onClose:()=>p(!1),eyebrow:"Edit project",title:"Edit ".concat(t),children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",defaultValue:t,autoComplete:"off",required:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where project files live on disk. Move only if you've already moved the folder yourself."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("keep"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"keep",checked:"keep"===f,onChange:()=>j("keep")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Keep current"}),(0,s.jsx)("code",{title:m||"",children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(m)||"(not set)"})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===f,onChange:()=>j("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Change to…"}),(0,s.jsx)("small",{children:"Absolute path. Must already exist or be writable."})]})]})]}),"custom"===f?(0,s.jsx)(i.A,{inputRef:v,value:x,onChange:g}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Tile color across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:e.value===(l||"#c2452a")}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,defaultValue:o||"",placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>p(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}}},e=>{e.O(0,[2619,8441,1255,7358],()=>e(e.s=6787)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
2026-06-02T11:
|
|
1
|
+
2026-06-02T11:59:18.312Z
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8419],{45:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var a=r(2115),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},o=r(4250);let l=(0,a.createContext)({}),i=(0,a.forwardRef)((e,t)=>{var r,i,s;let{color:c,size:d,strokeWidth:u,absoluteStrokeWidth:h,className:p="",children:m,iconNode:f,...b}=e,{size:v=24,strokeWidth:j=2,absoluteStrokeWidth:y=!1,color:g="currentColor",className:k=""}=null!=(r=(0,a.useContext)(l))?r:{},w=(null!=h?h:y)?24*Number(null!=u?u:j)/Number(null!=d?d:v):null!=u?u:j;return(0,a.createElement)("svg",{ref:t,...n,width:null!=(i=null!=d?d:v)?i:n.width,height:null!=(s=null!=d?d:v)?s:n.height,stroke:null!=c?c:g,strokeWidth:w,className:(0,o.z)("lucide",k,p),...!m&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(b)&&{"aria-hidden":"true"},...b},[...f.map(e=>{let[t,r]=e;return(0,a.createElement)(t,r)}),...Array.isArray(m)?m:[m]])})},63:(e,t,r)=>{"use strict";var a=r(7260);r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}}),r.o(a,"useRouter")&&r.d(t,{useRouter:function(){return a.useRouter}}),r.o(a,"useSearchParams")&&r.d(t,{useSearchParams:function(){return a.useSearchParams}})},677:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var a=r(5155),n=r(2115);function o(){let[e,t]=(0,n.useState)([]),[r,o]=(0,n.useState)("");return(0,n.useEffect)(()=>{o(localStorage.getItem("madarx.activeProjectId")||""),fetch("/api/projects").then(e=>e.json()).then(e=>t(e.projects||[])).catch(()=>{})},[]),(0,a.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,a.jsxs)("select",{value:r,onChange:e=>{var t;o(t=e.target.value),t?localStorage.setItem("madarx.activeProjectId",t):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:t||null}}))},"aria-label":"Active project",children:[(0,a.jsx)("option",{value:"",children:"All projects"}),e.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name},e.id))]})})}},2074:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var a=r(5155),n=r(2115),o=r(2835);let l=new Set(["html","htm"]);function i(e){let{projectId:t,children:r}=e,{refreshLibrary:i}=(0,o.c)(),[m,f]=n.useState(!1),[,b]=n.useState(!1),v=n.useRef(!1),j=n.useRef(null),[y,g]=n.useState(null),k=n.useRef(0);n.useEffect(()=>{function e(e){e.dataTransfer&&Array.from(e.dataTransfer.types||[]).includes("Files")&&(k.current+=1,f(!0))}function t(){k.current=Math.max(0,k.current-1),0===k.current&&f(!1)}function r(e){e.dataTransfer&&Array.from(e.dataTransfer.types||[]).includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")}function a(e){var t;e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length&&(e.preventDefault(),k.current=0,f(!1),null==(t=j.current)||t.call(j,Array.from(e.dataTransfer.files)))}return window.addEventListener("dragenter",e),window.addEventListener("dragleave",t),window.addEventListener("dragover",r),window.addEventListener("drop",a),()=>{window.removeEventListener("dragenter",e),window.removeEventListener("dragleave",t),window.removeEventListener("dragover",r),window.removeEventListener("drop",a)}},[]);let w=n.useCallback(async e=>{if(e.size>0x1900000)return{ok:!1,name:e.name,error:"Too large (>".concat(0x1900000," bytes)")};let r=function(e){let t=(String((null==e?void 0:e.name)||"").toLowerCase().match(/\.([a-z0-9]+)$/)||[,""])[1],r=String((null==e?void 0:e.type)||"").toLowerCase();return l.has(t)||"text/html"===r?"html":"disk"}(e),a=new FormData;if(a.set("project_id",t),"html"===r){a.set("file",e);let t=await fetch("/api/artifacts/upload",{method:"POST",body:a}),r=await t.json().catch(()=>({}));return{ok:t.ok,name:e.name,error:null==r?void 0:r.error}}a.set("files",e);let n=await fetch("/api/disk/files",{method:"POST",body:a}),o=await n.json().catch(()=>({}));return{ok:n.ok,name:e.name,error:null==o?void 0:o.error}},[t]),x=n.useCallback(async e=>{if(e.length&&!v.current){v.current=!0,b(!0);try{g({kind:"info",text:"Uploading ".concat(e.length," file").concat(e.length>1?"s":"","…")});let t=await Promise.all(e.map(w)),r=t.filter(e=>e.ok).length,a=t.filter(e=>!e.ok);0===a.length?g({kind:"ok",text:"Uploaded ".concat(r," file").concat(r>1?"s":"",".")}):r>0?g({kind:"warn",text:"Uploaded ".concat(r,", ").concat(a.length," failed (").concat(a[0].error||"error",").")}):g({kind:"err",text:"Upload failed: ".concat(a[0].error||"unknown error")}),r>0&&await i(),setTimeout(()=>g(null),4500)}finally{v.current=!1,b(!1)}}},[i,w]);return n.useEffect(()=>{j.current=x},[x]),(0,a.jsxs)(a.Fragment,{children:[r,m?(0,a.jsx)("div",{role:"status","aria-live":"polite",style:s,children:(0,a.jsxs)("div",{style:c,children:[(0,a.jsx)("div",{style:d,children:"Drop to upload"}),(0,a.jsx)("div",{style:u,children:"HTML files become artifacts \xb7 others land in Disk"})]})}):null,y?(0,a.jsx)("div",{role:"status","aria-live":"polite",style:{...h,...p[y.kind]},children:y.text}):null]})}let s={position:"fixed",inset:0,zIndex:9e3,background:"rgba(10, 8, 6, 0.45)",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",transition:"opacity 120ms ease"},c={border:"2px dashed rgba(255,255,255,0.6)",borderRadius:16,padding:"32px 48px",background:"rgba(20,16,12,0.7)",color:"#f5efe7",textAlign:"center",fontFamily:"inherit"},d={fontSize:22,fontWeight:600,letterSpacing:"0.01em",marginBottom:6},u={fontSize:13,opacity:.75},h={position:"fixed",bottom:24,right:24,zIndex:9100,padding:"10px 14px",borderRadius:10,fontSize:13,fontFamily:"inherit",boxShadow:"0 8px 24px rgba(0,0,0,0.25)",maxWidth:380},p={info:{background:"#1f1b16",color:"#f5efe7",border:"1px solid rgba(245,239,231,0.18)"},ok:{background:"#1c2a1d",color:"#e6f3df",border:"1px solid rgba(120,180,90,0.35)"},warn:{background:"#2c2519",color:"#f4e6c5",border:"1px solid rgba(220,170,60,0.35)"},err:{background:"#2c1816",color:"#f4d8d2",border:"1px solid rgba(194,69,42,0.55)"}}},2835:(e,t,r)=>{"use strict";r.d(t,{ProjectAlbumProvider:()=>v,c:()=>j});var a=r(5155),n=r(2115);let o="madarx-privacy-unlocked",l="madarx-privacy-unlock-at",i="madarx-privacy-fail-count",s="madarx-privacy-fail-window-start",c="madarx-privacy-lockout-until";function d(e){try{return window.sessionStorage.getItem(e)}catch(e){return null}}function u(e,t){try{window.sessionStorage.setItem(e,String(t))}catch(e){}}function h(e){try{window.sessionStorage.removeItem(e)}catch(e){}}let p=0;function m(e,t){return new Promise((r,a)=>{let n=p+=1,o=t=>{var l;(null==(l=t.data)?void 0:l.id)===n&&(e.removeEventListener("message",o),!1===t.data.ok&&t.data.error?a(Error(t.data.error)):r(t.data))};e.addEventListener("message",o),e.postMessage({id:n,...t})})}let f=(0,n.createContext)(null);function b(e){return"".concat(e.source_type,"-").concat(e.id)}function v(e){let{children:t,initialItems:r=[],initialFolders:p=[],projectId:v,projectSlug:j,rootFolderId:y=null,currentFolderId:g=null,liveDeltasEnabled:k=!1}=e,w=function(){let{projectId:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=(0,n.useState)(null),[a,p]=(0,n.useState)(!1),[f,b]=(0,n.useState)(!1),[v,j]=(0,n.useState)(null),[y,g]=(0,n.useState)(0),[k,w]=(0,n.useState)(0),x=(0,n.useRef)(null),C=(0,n.useRef)(Date.now()),S=(0,n.useCallback)(()=>{let e="1"===d(o),t=Number(d(l)||0);p(e&&t>0);let r=Number(d(i)||0),a=Number(d(c)||0);g(r),w(a>Date.now()?a:0)},[]),_=(0,n.useCallback)(async()=>{try{let e=await fetch("/api/privacy/config"),t=await e.json();return r(t),t}catch(e){return r({configured:!1}),console.error("[usePrivacy] fetchConfig error:",e),{configured:!1}}},[]);(0,n.useEffect)(()=>(x.current=new Worker("/privacy.worker.js"),S(),_(),()=>{var e;null==(e=x.current)||e.terminate(),x.current=null}),[_,S]),(0,n.useEffect)(()=>{let e=()=>_(),t=()=>{p(!0),_()},r=()=>{p(!1)};return window.addEventListener("privacy:configured",e),window.addEventListener("privacy:unlocked",t),window.addEventListener("privacy:locked",r),()=>{window.removeEventListener("privacy:configured",e),window.removeEventListener("privacy:unlocked",t),window.removeEventListener("privacy:locked",r)}},[_]),(0,n.useEffect)(()=>{let e=()=>{C.current=Date.now()};window.addEventListener("mousemove",e,{passive:!0}),window.addEventListener("keydown",e,{passive:!0}),window.addEventListener("pointerdown",e,{passive:!0});let t=setInterval(()=>{a&&Date.now()-C.current>9e5&&(h(o),h(l),p(!1))},6e4);return()=>{window.removeEventListener("mousemove",e),window.removeEventListener("keydown",e),window.removeEventListener("pointerdown",e),clearInterval(t)}},[a]);let N=(0,n.useCallback)(()=>{h(o),h(l),p(!1);try{window.dispatchEvent(new CustomEvent("privacy:locked"))}catch(e){}},[]),L=(0,n.useCallback)(async r=>{if(!(null==t?void 0:t.configured))return{ok:!1,error:"No passphrase configured."};let a=x.current;if(!a)return{ok:!1,error:"Worker not ready."};let n=Number(d(c)||0);if(n>Date.now())return{ok:!1,error:"lockout",lockoutUntil:n};b(!0),j(null);try{if((await m(a,{op:"verify",passphrase:r,salt:t.salt_b64,iter:t.iterations,mac:t.hmac_b64})).match)return u(o,"1"),u(l,String(Date.now())),h(i),h(s),h(c),p(!0),g(0),w(0),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!0,project_id:e||null})}).catch(()=>{}),{ok:!0};let n=Number(d(i)||0)+1,f=Number(d(s)||Date.now());u(i,String(n)),u(s,String(f)),g(n);let b=0;if(n>=5&&Date.now()-f<3e5)return b=Date.now()+9e5,u(c,String(b)),w(b),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!1,attempt_count:n,lockout_until:new Date(b).toISOString(),project_id:e||null})}).catch(()=>{}),{ok:!1,error:"lockout",lockoutUntil:b};return Date.now()-f>=3e5&&(u(i,"1"),u(s,String(Date.now())),g(1)),fetch("/api/privacy/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({success:!1,attempt_count:n,project_id:e||null})}).catch(()=>{}),{ok:!1,error:"wrong_passphrase",failCount:n}}catch(t){let e=(null==t?void 0:t.message)||"Crypto error.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[t,e]),E=(0,n.useCallback)(async e=>{let r=x.current;if(!r)return{ok:!1,error:"Worker not ready."};b(!0),j(null);try{let a=await m(r,{op:"setup",passphrase:e,iter:6e5});if(!a.ok)throw Error(a.error||"Worker failed.");let n=!!(null==t?void 0:t.configured),i=await fetch("/api/privacy/config",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({kdf:"PBKDF2-SHA256",iterations:6e5,salt_b64:a.salt_b64,hmac_b64:a.hmac_b64,idle_timeout_ms:9e5,is_change:n})}),s=await i.json();if(!s.ok)throw Error(s.error||"Server rejected config.");return u(o,"1"),u(l,String(Date.now())),p(!0),await _(),window.dispatchEvent(new CustomEvent("privacy:configured")),{ok:!0}}catch(t){let e=(null==t?void 0:t.message)||"Setup failed.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[t,_]),D=(0,n.useCallback)(async()=>{b(!0),j(null);try{let e=await fetch("/api/privacy/config",{method:"DELETE"}),t=await e.json();if(!t.ok)throw Error(t.error||"Reset failed.");return N(),h(i),h(s),h(c),g(0),w(0),await _(),{ok:!0,artifacts_cleared:t.artifacts_cleared}}catch(t){let e=(null==t?void 0:t.message)||"Reset failed.";return j(e),{ok:!1,error:e}}finally{b(!1)}},[N,_]),I=!!(null==t?void 0:t.configured);return{config:t,configured:I,unlocked:a,busy:f,error:v,failCount:y,lockoutUntil:k,lock:N,unlock:L,setupPassphrase:E,resetPassphrase:D,refetchConfig:_}}({projectId:v}),x=function(){let e=(0,n.useRef)(new Map),[t,r]=(0,n.useState)(0),a=(0,n.useCallback)(async function(t){var a;let{force:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return null;if(!n&&e.current.has(t))return e.current.get(t);let[o,l,i]=await Promise.all([fetch("/api/artifacts/".concat(t,"/acl")),fetch("/api/artifacts/".concat(t,"/share-link")),fetch("/api/audit/search?action_target_type=artifact&action_target_id=".concat(t,"&limit=5"))]),s={acl:null,links:[],auditRows:[]};if(o.ok){let{data:e}=await o.json();s.acl=e}if(l.ok){let{data:e}=await l.json();s.links=Array.isArray(e)?e:[]}return i.ok&&(s.auditRows=(Array.isArray(a=await i.json())?a:Array.isArray(null==a?void 0:a.rows)?a.rows:Array.isArray(null==a?void 0:a.data)?a.data:[]).slice(0,5)),e.current.set(t,s),r(e=>e+1),s},[]),o=(0,n.useCallback)(t=>{t?e.current.delete(t):e.current.clear(),r(e=>e+1)},[]);return{readArtifactShareData:a,invalidateArtifactShareData:o,readProjectShareData:(0,n.useCallback)(async function(t){var a;let{force:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return null;let o="project:".concat(t);if(!n&&e.current.has(o))return e.current.get(o);let l={status:null,cloudReady:!1,grants:[],members:[],orgId:null,error:null},[i,s]=await Promise.all([fetch("/api/shared/spaces/status?local_space_id=".concat(encodeURIComponent(t),"&space_type=project")),fetch("/api/orgs")]);if(i.ok){let e=await i.json();l.status=e.status||null,l.cloudReady=!!e.cloud_ready}if(s.ok){let{orgs:e}=await s.json();l.orgId=Array.isArray(e)&&e.length&&(e[0].org_id||e[0].id)||null}if(null==(a=l.status)?void 0:a.shared){let e=await fetch("/api/shared/spaces/".concat(encodeURIComponent(t),"/acl?space_type=project"));if(e.ok){let{data:t}=await e.json();l.grants=Array.isArray(t)?t:[]}}if(l.orgId){let e=await fetch("/api/orgs/".concat(encodeURIComponent(l.orgId),"/members"));if(e.ok){let{members:t}=await e.json();l.members=Array.isArray(t)?t:[]}}return e.current.set(o,l),r(e=>e+1),l},[]),invalidateProjectShareData:(0,n.useCallback)(t=>{t?e.current.delete("project:".concat(t)):e.current.clear(),r(e=>e+1)},[]),shareDataVersion:t}}(),[C,S]=(0,n.useState)(r),[_,N]=(0,n.useState)(p),[L,E]=(0,n.useState)(!1),[D,I]=(0,n.useState)(!1);(0,n.useEffect)(()=>{S(r)},[r]),(0,n.useEffect)(()=>{N(p)},[p]);let A=(0,n.useCallback)(async()=>{if(!j)return;let e=await fetch("/api/projects/".concat(encodeURIComponent(j),"/library"),{cache:"no-store"});if(!e.ok)throw Error("library refresh failed (".concat(e.status,")"));let t=await e.json();S(Array.isArray(t.libraryItems)?t.libraryItems:[]),N(Array.isArray(t.folders)?t.folders:[])},[j]);(0,n.useEffect)(()=>{if(!k)return;let e=new EventSource("/api/events/stream"),t=null,r=null,a=()=>{t&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null,A().catch(e=>{console.warn("[project-album] live library refresh failed",e)})},250)},n=["state.disk.changed","state.artifacts.changed","state.acl.changed","state.share_links.changed"];for(let t of n)e.addEventListener(t,a);let o=()=>{"visible"===document.visibilityState&&a()};return document.addEventListener("visibilitychange",o),r=window.setInterval(a,6e4),()=>{for(let t of n)e.removeEventListener(t,a);document.removeEventListener("visibilitychange",o),t&&window.clearTimeout(t),r&&window.clearInterval(r),e.close()}},[k,A]);let P=(0,n.useCallback)(e=>{S(t=>(function(e,t){if(!(null==t?void 0:t.id)||!(null==t?void 0:t.source_type))return e;let r=b(t),a=!1,n=e.map(e=>b(e)!==r?e:(a=!0,{...e,...t}));return a?n:[t,...n]})(t,e))},[]),M=(0,n.useCallback)(e=>{let t="string"==typeof e?e:b(e);S(e=>e.filter(e=>b(e)!==t))},[]),T=(0,n.useMemo)(()=>({items:C,folders:_,setItems:S,setFolders:N,applyItemPatch:P,removeItem:M,refreshLibrary:A,liveDeltasEnabled:k,projectId:v,projectSlug:j,rootFolderId:y,currentFolderId:g,privacy:w,shareData:x,setupModalOpen:L,unlockModalOpen:D,openSetupModal:()=>E(!0),closeSetupModal:()=>E(!1),openUnlockModal:()=>I(!0),closeUnlockModal:()=>I(!1)}),[C,_,P,M,A,k,v,j,y,g,w,x,L,D]);return(0,a.jsx)(f.Provider,{value:T,children:t})}function j(){let e=(0,n.useContext)(f);if(!e)throw Error("useProjectAlbum must be used inside ProjectAlbumProvider");return e}},3185:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var a=r(2115),n=r(4250);let o=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var l=r(45);let i=(e,t)=>{let r=(0,a.forwardRef)((r,i)=>{let{className:s,...c}=r;return(0,a.createElement)(l.default,{ref:i,iconNode:t,className:(0,n.z)("lucide-".concat(o(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),s),...c})});return r.displayName=o(e),r}},4073:(e,t,r)=>{"use strict";r.d(t,{default:()=>p});var a=r(5155),n=r(2619),o=r.n(n),l=r(7909),i=r(2115),s=r(5649),c=r(2835);let d=(0,l.default)(()=>r.e(1517).then(r.bind(r,1517)).then(e=>e.PrivacyPassphraseModal),{loadableGenerated:{webpack:()=>[1517]}}),u=(0,l.default)(()=>r.e(4797).then(r.bind(r,4797)).then(e=>e.PrivacyUnlockModal),{loadableGenerated:{webpack:()=>[4797]}}),h=(0,l.default)(()=>r.e(9867).then(r.bind(r,9867)),{loadableGenerated:{webpack:()=>[9867]}});function p(e){let{projectId:t,projectName:r="",slug:n,lockedCount:l=0,currentFolderId:p=null,rootFolderId:b=null}=e,{privacy:v,setupModalOpen:j,unlockModalOpen:y,openSetupModal:g,closeSetupModal:k,openUnlockModal:w,closeUnlockModal:x,refreshLibrary:C}=(0,c.c)(),{configured:S,unlocked:_,lock:N}=v,[L,E]=(0,i.useState)(!1),[D,I]=(0,i.useState)(!1),[A,P]=(0,i.useState)(""),[M,T]=(0,i.useState)(null),[F,O]=(0,i.useState)(!1),R=(0,i.useCallback)(()=>{P(""),T(null),I(!0)},[]),U=(0,i.useCallback)(()=>{F||I(!1)},[F]),W=(0,i.useCallback)(async e=>{if(e&&e.preventDefault(),F)return;let r=String(A||"").trim();if(!r)return void T("Name is required.");if(/[\\/]/.test(r))return void T("Name cannot contain slashes.");O(!0),T(null);try{let e=p&&p!==b?p:null,a=await fetch("/api/disk/folders",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({project_id:t,name:r,parent_id:e})}),n=await a.json().catch(()=>({}));if(!a.ok)throw Error((null==n?void 0:n.error)||"create failed (".concat(a.status,")"));I(!1),P(""),await C()}catch(e){console.error("[project-header] create folder failed",e),T((null==e?void 0:e.message)||String(e))}finally{O(!1)}},[F,A,t,p,b,C]),B=S?_?(0,a.jsx)("button",{type:"button",className:"project-album-lock-chip unlocked",onClick:N,"aria-label":"Lock protected artifacts",title:"Click to lock",children:(0,a.jsx)(f,{})}):(0,a.jsxs)("button",{type:"button",className:"project-album-lock-chip locked",onClick:w,"aria-label":"Unlock ".concat(l," protected artifacts"),title:"Click to unlock",children:[(0,a.jsx)(m,{}),l>0?(0,a.jsx)("span",{className:"project-album-lock-chip-count",children:l}):null]}):(0,a.jsx)("button",{type:"button",className:"project-album-lock-chip no-passphrase",onClick:g,"aria-label":"Set up passphrase protection",title:"Protect individual artifacts with a passphrase",children:(0,a.jsx)(m,{})});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o(),{className:"project-activity-link icon-only",href:"/projects/".concat(n,"/log"),"aria-label":"Open project activity",title:"Activity",children:(0,a.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"8",cy:"8",r:"6"}),(0,a.jsx)("path",{d:"M8 5v3.5l2.2 1.3"})]})}),B,(0,a.jsxs)("button",{type:"button",className:"project-album-folder-new",onClick:()=>E(!0),"aria-label":"Share this project",title:"Share this project with your organization",children:[(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"12",cy:"3.5",r:"2"}),(0,a.jsx)("circle",{cx:"4",cy:"8",r:"2"}),(0,a.jsx)("circle",{cx:"12",cy:"12.5",r:"2"}),(0,a.jsx)("path",{d:"M5.7 7 10.3 4.5M5.7 9l4.6 2.5"})]}),"Share"]}),(0,a.jsxs)("button",{type:"button",className:"project-album-folder-new",onClick:R,"aria-label":"Create new folder",title:"Create a new folder on disk",children:[(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("path",{d:"M2 5a1 1 0 0 1 1-1h3.5l1.5 1.5H13a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5Z"}),(0,a.jsx)("path",{d:"M8 8v4M6 10h4"})]}),"New folder"]}),(0,a.jsx)(s.A,{open:D,onClose:U,eyebrow:"Library",title:"New folder",children:(0,a.jsxs)("form",{className:"agents-modal-form",onSubmit:W,children:[(0,a.jsx)("p",{className:"agents-modal-help",children:"Creates a real folder on disk under this project. Use it to organize uploaded documents and artifacts."}),(0,a.jsxs)("section",{className:"agents-modal-section",children:[(0,a.jsxs)("label",{className:"agents-modal-field wide",children:[(0,a.jsx)("span",{children:"Folder name"}),(0,a.jsx)("input",{type:"text",value:A,onChange:e=>{P(e.target.value),M&&T(null)},placeholder:"e.g. Research, Drafts, 2026-Q2",autoComplete:"off",spellCheck:!1,autoFocus:!0,maxLength:120,disabled:F})]}),M?(0,a.jsx)("p",{className:"agents-modal-feedback error",role:"alert","aria-live":"polite",children:M}):(0,a.jsx)("small",{className:"project-album-folder-hint",children:"Letters, numbers, spaces, dashes. No slashes."})]}),(0,a.jsxs)("footer",{className:"agents-modal-foot",children:[(0,a.jsx)("button",{type:"button",className:"admin-button secondary",onClick:U,disabled:F,children:"Cancel"}),(0,a.jsx)("button",{type:"submit",className:"admin-button",disabled:F||!A.trim(),children:F?"Creating…":"Create folder"})]})]})}),(0,a.jsx)(d,{open:j,onClose:k,projectId:t,privacy:v}),(0,a.jsx)(u,{open:y,onClose:x,projectId:t,privacy:v}),L?(0,a.jsx)(h,{item:{source_type:"project",id:t,name:r},onClose:()=>E(!1)}):null]})}function m(){return(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}function f(){return(0,a.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v0"})]})}},4250:(e,t,r)=>{"use strict";r.d(t,{z:()=>a});let a=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()}},4788:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});let a=(0,r(3185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5649:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var a=r(5155),n=r(2115),o=r(4788);function l(e){let{open:t,onClose:r,eyebrow:l,title:i,tone:s="default",size:c="default",children:d}=e,u=n.useRef(null);return n.useEffect(()=>{let e=u.current;e&&(t&&!e.open&&("function"==typeof e.showModal?e.showModal():e.setAttribute("open","")),!t&&e.open&&e.close())},[t]),n.useEffect(()=>{let e=u.current;if(!e)return;let t=e=>{e.preventDefault(),r()};return e.addEventListener("cancel",t),()=>e.removeEventListener("cancel",t)},[r]),(0,a.jsx)("dialog",{ref:u,className:"agents-modal".concat("wide"===c?" agents-modal--wide":""),onClick:e=>{e.target===u.current&&r()},children:t?(0,a.jsxs)("div",{className:"agents-modal-card".concat("danger"===s?" agents-modal-card--danger":""),onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("header",{className:"agents-modal-head",children:[(0,a.jsxs)("div",{children:[l?(0,a.jsx)("span",{className:"admin-kicker",children:l}):null,(0,a.jsx)("h2",{children:i})]}),(0,a.jsx)("button",{type:"button",className:"agents-modal-close",onClick:r,"aria-label":"Close",children:(0,a.jsx)(o.A,{size:14})})]}),d]}):null})}},6391:(e,t,r)=>{"use strict";r.d(t,{default:()=>k});var a=r(5155),n=r(7909),o=r(2115),l=r(63);function i(e){if(!Number.isFinite(e)||e<=0)return"0 B";let t=["B","KB","MB","GB"],r=0,a=e;for(;a>=1024&&r<t.length-1;)a/=1024,r+=1;return"".concat(a.toFixed(a>=10||0===r?0:1)," ").concat(t[r])}function s(e){return"".concat(e.source_type,"-").concat(e.id)}function c(e){let{breadcrumb:t,dragOverFolderId:r,setDragOverFolderId:n,navigateToFolder:o,albumItems:l,moveItem:i,rootFolderId:c}=e;if(!t.length)return null;let d=e=>({onDragOver:t=>{t.preventDefault(),n(e||"__root__")},onDragLeave:()=>n(null),onDrop:t=>((e,t)=>{e.preventDefault(),n(null);let r=e.dataTransfer.getData("text/madarx-item-key"),a=l.find(e=>s(e)===r);a&&i(a,t)})(t,e||c)});return(0,a.jsxs)("nav",{className:"project-album-breadcrumb","aria-label":"Folder",children:[(0,a.jsxs)("button",{type:"button",className:"project-album-crumb".concat("__root__"===r?" drop-target":""),onClick:()=>o(null),...d(null),children:[(0,a.jsx)("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,a.jsx)("path",{d:"M2 8l6-5 6 5v5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V8z"})}),(0,a.jsx)("span",{children:"Library"})]}),t.map((e,n)=>{let l=n===t.length-1;return(0,a.jsxs)("span",{className:"project-album-crumb-row",children:[(0,a.jsx)("svg",{className:"project-album-crumb-sep",width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,a.jsx)("path",{d:"M3 1l4 4-4 4"})}),l?(0,a.jsx)("span",{className:"project-album-crumb current","aria-current":"page",children:e.name}):(0,a.jsx)("button",{type:"button",className:"project-album-crumb".concat(r===e.id?" drop-target":""),onClick:()=>o(e.id),...d(e.id),children:e.name})]},e.id)})]})}var d=r(8219);function u(e){let{item:t,MarkdownThumbnail:r}=e;if("file"===t.source_type&&t.local_only)return(0,a.jsxs)("div",{className:"project-album-thumb-tile","data-kind":"local",children:[(0,a.jsx)("span",{children:"LOCAL"}),(0,a.jsx)("small",{children:i(t.size_bytes)})]});if("html"===t.render_kind&&t.body)return(0,a.jsxs)("div",{className:"project-album-thumb-iframe-wrap","aria-hidden":"true",children:[(0,a.jsx)("iframe",{className:"project-album-thumb-iframe",srcDoc:(0,d.sV)(t.body),sandbox:"",loading:"lazy",tabIndex:-1,title:""}),(0,a.jsx)("div",{className:"project-album-thumb-shield"})]});if("markdown"===t.render_kind&&t.body)return(0,a.jsx)("div",{className:"project-album-thumb-md","aria-hidden":"true",children:(0,a.jsx)("div",{className:"project-album-thumb-md-inner",children:(0,a.jsx)(r,{children:String(t.body).slice(0,800)})})});let n=String(t.kind||"FILE").toUpperCase().slice(0,6);return(0,a.jsxs)("div",{className:"project-album-thumb-tile","data-kind":String(t.kind||"file").toLowerCase(),children:[(0,a.jsx)("span",{children:n}),"file"===t.source_type?(0,a.jsx)("small",{children:i(t.size_bytes)}):null]})}function h(e){let{item:t,onOpen:r,onDoubleOpen:n,onOpenUnlock:o,blurred:l=!1,highlighted:i=!1,protectedFlag:s=!1,keyHintVisible:c=!1,onShowKeyHint:d,onHideKeyHint:h,draggable:p=!1,onDragStart:m,moving:f=!1,MarkdownThumbnail:b}=e,v="artifact"===t.source_type?t.title||t.path||t.id:t.name,j="artifact"===t.source_type?t.kind||"artifact":t.local_only?"local":t.kind||"file",y=function(e){if("artifact"===e.source_type){let t=e.agent_id||"";return t?"main-orchestrator"===t?"Main agent":"ops-agent"===t?"Caretaker":t:"Agent"}return"You"}(t),g=t.updated_at||t.created_at,k=["project-album-card"];return l&&k.push("blurred"),i&&k.push("highlighted"),s&&k.push("is-protected"),f&&k.push("moving"),(0,a.jsxs)("button",{type:"button",className:k.join(" "),onClick:r,onDoubleClick:n,onKeyDown:e=>{if(l){if("d"===e.key||"D"===e.key){e.preventDefault(),o();return}("Enter"===e.key||" "===e.key)&&(e.preventDefault(),d(),setTimeout(h,2500))}},tabIndex:0,"aria-label":l?"".concat(v," — protected. Double-click or press D to unlock."):"Open ".concat(v),"aria-disabled":l||void 0,style:l?{userSelect:"none"}:void 0,draggable:p&&!l,onDragStart:p&&!l?m:void 0,children:[(0,a.jsxs)("div",{className:"project-album-thumb","data-render":t.render_kind||"text","data-source":t.source_type,"aria-hidden":l?"true":void 0,children:[(0,a.jsx)(u,{item:t,MarkdownThumbnail:b}),l?(0,a.jsx)("div",{className:"project-album-thumb-lock","aria-hidden":"true",children:(0,a.jsxs)("svg",{width:"18",height:"18",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}):null,s&&!l?(0,a.jsx)("div",{className:"project-album-thumb-badge","aria-hidden":"true",title:"Protected",children:(0,a.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]})}):null]}),(0,a.jsxs)("div",{className:"project-album-card-body",children:[(0,a.jsx)("b",{title:v,children:v}),(0,a.jsxs)("small",{className:"project-album-card-meta",children:[(0,a.jsx)("span",{className:"project-album-kind",children:j}),(0,a.jsx)("span",{"aria-hidden":"true",children:" \xb7 "}),(0,a.jsx)("span",{children:y}),g?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{"aria-hidden":"true",children:" \xb7 "}),(0,a.jsx)("time",{dateTime:g,children:function(e){if(!e)return"";try{return new Intl.DateTimeFormat("en",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(e))}catch(t){return e}}(g)})]}):null]})]}),c?(0,a.jsx)("div",{className:"project-album-key-hint","aria-live":"polite",role:"status",children:"Double-click or press D to unlock."}):null]})}function p(e){let{folder:t,dragOver:r,onOpen:n,onDragOver:o,onDragLeave:l,onDrop:i}=e,s=["project-album-folder-card"];return r&&s.push("drop-target"),(0,a.jsxs)("button",{type:"button",className:s.join(" "),onClick:n,onDragOver:o,onDragLeave:l,onDrop:i,"aria-label":"Open folder ".concat(t.name),children:[(0,a.jsx)("span",{className:"project-album-folder-card-icon","aria-hidden":"true",children:(0,a.jsx)("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:(0,a.jsx)("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7z"})})}),(0,a.jsxs)("span",{className:"project-album-folder-card-body",children:[(0,a.jsx)("b",{children:t.name}),(0,a.jsx)("small",{children:"Folder"})]})]})}function m(e){let{subFolders:t,dragOverFolderId:r,setDragOverFolderId:n,navigateToFolder:o,albumItems:l,moveItem:i}=e;return t.length?(0,a.jsx)("div",{className:"project-album-folders",children:t.map(e=>(0,a.jsx)(p,{folder:e,dragOver:r===e.id,onOpen:()=>o(e.id),onDragOver:t=>{t.preventDefault(),n(e.id)},onDragLeave:()=>n(null),onDrop:t=>{t.preventDefault(),n(null);let r=t.dataTransfer.getData("text/madarx-item-key"),a=l.find(e=>s(e)===r);a&&i(a,e.id)}},e.id))}):null}function f(e){let{query:t,setQuery:r,filters:n,filterId:o,setFilterId:l,itemsInFolder:i}=e;return(0,a.jsxs)("div",{className:"project-album-toolbar",children:[(0,a.jsxs)("label",{className:"project-album-search",children:[(0,a.jsxs)("svg",{className:"project-album-search-icon",width:"15",height:"15",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,a.jsx)("line",{x1:"10.6",y1:"10.6",x2:"14",y2:"14"})]}),(0,a.jsx)("input",{type:"search",value:t,onChange:e=>r(e.target.value),placeholder:"Search artifacts, documents, and content…","aria-label":"Search project library"}),t?(0,a.jsx)("button",{type:"button",className:"project-album-search-clear",onClick:()=>r(""),"aria-label":"Clear search",children:"\xd7"}):null]}),(0,a.jsx)("div",{className:"project-album-filters",role:"tablist","aria-label":"Filter",children:n.map(e=>{let t=i.filter(e.match).length,r=o===e.id;return(0,a.jsxs)("button",{type:"button",role:"tab","aria-selected":r,className:"project-album-filter".concat(r?" on":""),onClick:()=>l(e.id),children:[(0,a.jsx)("span",{children:e.label}),(0,a.jsx)("code",{children:t})]},e.id)})})]})}function b(e){let{onSetup:t,onDismiss:r}=e;return(0,a.jsxs)("div",{className:"project-album-migration-banner",role:"status",children:[(0,a.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,a.jsx)("rect",{x:"3",y:"7",width:"10",height:"7",rx:"1.5"}),(0,a.jsx)("path",{d:"M5 7V5a3 3 0 0 1 6 0v2"})]}),(0,a.jsx)("p",{children:"You had privacy blur enabled. Set a passphrase to protect individual artifacts, or dismiss to skip."}),(0,a.jsxs)("div",{className:"project-album-migration-actions",children:[(0,a.jsx)("button",{type:"button",className:"project-album-migration-cta",onClick:t,children:"Set up passphrase"}),(0,a.jsx)("button",{type:"button",className:"project-album-migration-dismiss",onClick:r,children:"Dismiss"})]})]})}var v=r(2835);let j=[{id:"all",label:"All",match:()=>!0},{id:"artifact",label:"Artifacts",match:e=>"artifact"===e.source_type},{id:"document",label:"Documents",match:e=>"file"===e.source_type},{id:"local",label:"Local-only",match:e=>"file"===e.source_type&&e.local_only}],y=(0,n.default)(()=>Promise.all([r.e(930),r.e(2713)]).then(r.bind(r,5094)),{loadableGenerated:{webpack:()=>[5094]}}),g=(0,n.default)(()=>Promise.all([r.e(930),r.e(9863)]).then(r.bind(r,9863)),{loadableGenerated:{webpack:()=>[9863]},loading:()=>(0,a.jsx)("div",{className:"project-album-thumb-tile","data-kind":"markdown",children:(0,a.jsx)("span",{children:"MD"})})});function k(e){let{items:t,folders:r=[],projectId:n,projectSlug:i,rootFolderId:d=null,currentFolderId:u=null}=e,p=(0,l.useRouter)(),[k,w]=(0,o.useState)(null),[x,C]=(0,o.useState)(null),[S,_]=(0,o.useState)(null),[N,L]=(0,o.useState)(null),[E,D]=(0,o.useState)(!1),[I,A]=(0,o.useState)(null),[P,M]=(0,o.useState)([]),[T,F]=(0,o.useState)(null),{privacy:O,openSetupModal:R,openUnlockModal:U,applyItemPatch:W,removeItem:B,items:z,folders:H}=(0,v.c)(),V=z||t,K=H||r,{configured:J,unlocked:G}=O,q=function(e){let{items:t,folders:r,currentFolderId:a,rootFolderId:n,unlocked:l}=e,[i,s]=(0,o.useState)("all"),[c,d]=(0,o.useState)(""),[u,h]=(0,o.useState)(null),p=(0,o.useDeferredValue)(c),m=!a||a===n,f=(0,o.useMemo)(()=>r.find(e=>e.id===a)||null,[r,a]),b=(0,o.useMemo)(()=>{if(m)return[];let e=[],t=new Map(r.map(e=>[e.id,e])),n=t.get(a);for(;n;)e.unshift(n),n=n.parent_id?t.get(n.parent_id):null;return e},[r,a,m]),v=(0,o.useMemo)(()=>{let e=m?n:a;return r.filter(t=>t.parent_id===e)},[r,a,m,n]),y=(0,o.useMemo)(()=>t.filter(e=>{let t=e.folder_id||null;return m?!t||t===n:t===a}),[t,a,m,n]),g=(0,o.useMemo)(()=>{let e=(j.find(e=>e.id===i)||j[0]).match;return y.filter(e)},[y,i]),k=(0,o.useMemo)(()=>{let e=String(p||"").trim().toLowerCase();return e?g.filter(t=>(function(e){let{sessionUnlocked:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.is_protected&&!t?"":String(e.body||e.preview||"").slice(0,4e3);return[e.title||"",e.name||"",e.path||"",r,e.agent_id||"",function(e){if("artifact"===e.source_type){let t=e.agent_id||"";return t?"main-orchestrator"===t?"Main agent":"ops-agent"===t?"Caretaker":t:"Agent"}return"You"}(e)].join(" ").toLowerCase()})(t,{sessionUnlocked:l}).includes(e)):g},[g,p,l]),w=String(p||"").trim().toLowerCase(),x=(0,o.useCallback)(e=>!!w&&[e.title||"",e.name||"",e.path||""].join(" ").toLowerCase().includes(w),[w]),C=(0,o.useMemo)(()=>t.find(e=>"".concat(e.source_type,"-").concat(e.id)===u)||null,[t,u]);return{FILTERS:j,filterId:i,setFilterId:s,query:c,setQuery:d,selectedKey:u,setSelectedKey:h,isRoot:m,currentFolder:f,breadcrumb:b,subFolders:v,itemsInFolder:y,visible:k,queryLower:w,titleMatchesQuery:x,selected:C}}({items:V,folders:K,currentFolderId:u,rootFolderId:d,unlocked:G});(0,o.useEffect)(()=>{try{if("1"!==window.localStorage.getItem("madarx-album-privacy-blur"))return;J?window.localStorage.removeItem("madarx-album-privacy-blur"):D(!0)}catch(e){}},[J]),(0,o.useEffect)(()=>{let e=!1;return fetch("/api/dashboard/spaces").then(e=>e.ok?e.json():null).then(t=>{!e&&t&&Array.isArray(t.spaces)&&M(t.spaces)}).catch(()=>{}),()=>{e=!0}},[]);let Q=(0,o.useCallback)(async(e,t)=>{if(e&&"artifact"===e.source_type&&t){F(s(e));try{let r=await fetch("/api/dashboard/spaces/".concat(encodeURIComponent(t),"/move"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({artifact_id:e.id})});if(!r.ok)throw Error(await r.text().catch(()=>"")||"bookmark failed (".concat(r.status,")"));W({...e,space_id:t})}catch(e){console.error("[project-album] bookmark to space failed",e),window.alert("Could not pin this artifact to the space.\n".concat((null==e?void 0:e.message)||e))}finally{F(null)}}},[W]),Y=(0,o.useCallback)(()=>{try{window.localStorage.removeItem("madarx-album-privacy-blur")}catch(e){}D(!1)},[]),Z=(0,o.useCallback)(async e=>{if(e&&!k){w(s(e));try{let t="artifact"===e.source_type?"/api/artifacts/".concat(encodeURIComponent(e.id)):"/api/disk/files/".concat(encodeURIComponent(e.id)),r=await fetch(t,{method:"DELETE"});if(!r.ok)throw Error(await r.text().catch(()=>"")||"delete failed (".concat(r.status,")"));q.setSelectedKey(null),B(e)}catch(e){console.error("[project-album] delete failed",e),window.alert("Could not delete this item. See console for details.")}finally{w(null)}}},[q,k,B]),$=(0,o.useCallback)(async(e,t)=>{L(null);try{let r=await fetch("/api/artifacts/".concat(e.id,"/protect"),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({is_protected:!t})}),a=await r.json();if(a.need_passphrase_setup){q.setSelectedKey(null),R();return}if(!r.ok)return void L(a.error||"protect failed (".concat(r.status,")"));W({...e,is_protected:a.is_protected})}catch(e){L((null==e?void 0:e.message)||"Protect toggle failed.")}},[q,W,R]),X=(0,o.useCallback)(e=>{let t=e&&e!==d?"/projects/".concat(i,"?folder=").concat(encodeURIComponent(e)):"/projects/".concat(i);p.push(t)},[i,d,p]),ee=(0,o.useCallback)(async(e,t)=>{if(!e)return;let r="artifact"===e.source_type?"/api/artifacts/".concat(encodeURIComponent(e.id)):"/api/disk/files/".concat(encodeURIComponent(e.id));C(s(e));try{let a=await fetch(r,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({folder_id:t||null})});if(!a.ok)throw Error(await a.text().catch(()=>"")||"move failed (".concat(a.status,")"));let n=await a.json().catch(()=>({}));W(n.artifact||n.file||{...e,folder_id:t||null})}catch(e){console.error("[project-album] move failed",e),window.alert("Could not move this item.\n".concat((null==e?void 0:e.message)||e))}finally{C(null)}},[W]);return(0,a.jsxs)("div",{className:"project-album",children:[(0,a.jsx)(f,{query:q.query,setQuery:q.setQuery,filters:q.FILTERS,filterId:q.filterId,setFilterId:q.setFilterId,itemsInFolder:q.itemsInFolder}),E?(0,a.jsx)(b,{onSetup:()=>{D(!1),R()},onDismiss:Y}):null,(0,a.jsx)(c,{breadcrumb:q.breadcrumb,dragOverFolderId:S,setDragOverFolderId:_,navigateToFolder:X,albumItems:V,moveItem:ee,rootFolderId:d}),(0,a.jsx)(m,{subFolders:q.subFolders,dragOverFolderId:S,setDragOverFolderId:_,navigateToFolder:X,albumItems:V,moveItem:ee}),q.visible.length?(0,a.jsx)("div",{className:"project-album-grid",children:q.visible.map(e=>{let t=e.is_protected&&!G&&!q.titleMatchesQuery(e),r=e.is_protected&&!t&&!!q.queryLower,n=s(e);return(0,a.jsx)(h,{item:e,onOpen:()=>{e.is_protected&&!G&&!q.titleMatchesQuery(e)||q.setSelectedKey(s(e))},onDoubleOpen:()=>{!e.is_protected||G||q.titleMatchesQuery(e)?q.setSelectedKey(s(e)):U()},onOpenUnlock:U,blurred:t,highlighted:r,protectedFlag:!!e.is_protected,keyHintVisible:I===n,onShowKeyHint:()=>A(n),onHideKeyHint:()=>A(null),draggable:!0,onDragStart:e=>{e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/madarx-item-key",n)},moving:x===n,MarkdownThumbnail:g},n)})}):(0,a.jsx)("div",{className:"project-album-empty",children:q.query?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("b",{children:["No matches for “",q.query,"”."]}),(0,a.jsx)("small",{children:"Try a different keyword, or clear the search."})]}):q.isRoot?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:"Nothing here yet."}),(0,a.jsx)("small",{children:"Upload a document, create an artifact, or add a folder."})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:"This folder is empty."}),(0,a.jsx)("small",{children:"Drag an item here, or upload directly to this folder."})]})}),(0,a.jsx)(y,{item:q.selected,onClose:()=>{q.setSelectedKey(null),L(null)},isProtected:!!q.selected&&!!q.selected.is_protected,onToggleProtect:()=>q.selected&&$(q.selected,!!q.selected.is_protected),protectError:N,onDelete:()=>q.selected&&Z(q.selected),deleting:!!q.selected&&k===s(q.selected),folders:K,rootFolderId:d,onMove:e=>q.selected&&ee(q.selected,e),moving:!!q.selected&&x===s(q.selected),spaces:P,onBookmarkToSpace:e=>q.selected&&Q(q.selected,e),bookmarking:!!q.selected&&T===s(q.selected)})]})}(0,n.default)(()=>r.e(9867).then(r.bind(r,9867)),{loadableGenerated:{webpack:()=>[9867]}})},8855:(e,t,r)=>{Promise.resolve().then(r.bind(r,677)),Promise.resolve().then(r.bind(r,6391)),Promise.resolve().then(r.bind(r,4073)),Promise.resolve().then(r.bind(r,2835)),Promise.resolve().then(r.bind(r,2074)),Promise.resolve().then(r.t.bind(r,2619,23))}},e=>{e.O(0,[2619,1231,8441,1255,7358],()=>e(e.s=8855)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[893],{45:(e,a,t)=>{"use strict";t.d(a,{default:()=>o});var s=t(2115),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},l=t(4250);let r=(0,s.createContext)({}),o=(0,s.forwardRef)((e,a)=>{var t,o,c;let{color:i,size:d,strokeWidth:u,absoluteStrokeWidth:m,className:h="",children:p,iconNode:f,...j}=e,{size:x=24,strokeWidth:g=2,absoluteStrokeWidth:v=!1,color:b="currentColor",className:y=""}=null!=(t=(0,s.useContext)(r))?t:{},k=(null!=m?m:v)?24*Number(null!=u?u:g)/Number(null!=d?d:x):null!=u?u:g;return(0,s.createElement)("svg",{ref:a,...n,width:null!=(o=null!=d?d:x)?o:n.width,height:null!=(c=null!=d?d:x)?c:n.height,stroke:null!=i?i:b,strokeWidth:k,className:(0,l.z)("lucide",y,h),...!p&&!(e=>{for(let a in e)if(a.startsWith("aria-")||"role"===a||"title"===a)return!0;return!1})(j)&&{"aria-hidden":"true"},...j},[...f.map(e=>{let[a,t]=e;return(0,s.createElement)(a,t)}),...Array.isArray(p)?p:[p]])})},677:(e,a,t)=>{"use strict";t.d(a,{default:()=>l});var s=t(5155),n=t(2115);function l(){let[e,a]=(0,n.useState)([]),[t,l]=(0,n.useState)("");return(0,n.useEffect)(()=>{l(localStorage.getItem("madarx.activeProjectId")||""),fetch("/api/projects").then(e=>e.json()).then(e=>a(e.projects||[])).catch(()=>{})},[]),(0,s.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,s.jsxs)("select",{value:t,onChange:e=>{var a;l(a=e.target.value),a?localStorage.setItem("madarx.activeProjectId",a):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:a||null}}))},"aria-label":"Active project",children:[(0,s.jsx)("option",{value:"",children:"All projects"}),e.map(e=>(0,s.jsx)("option",{value:e.id,children:e.name},e.id))]})})}},926:(e,a,t)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),!function(e,a){for(var t in a)Object.defineProperty(e,t,{enumerable:!0,get:a[t]})}(a,{callServer:function(){return s.callServer},createServerReference:function(){return l.createServerReference},findSourceMapURL:function(){return n.findSourceMapURL}});let s=t(1209),n=t(5153),l=t(7197)},1236:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("4043fa7feec353d40276a467d8946b8356d2c92ab2",o.callServer,void 0,o.findSourceMapURL,"createProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Creating…":"Create project"})}function m(e){let{workspaceRoot:a="~/workspace/projects"}=e,[t,l]=n.useState(!1),[o,m]=n.useState(""),[h,p]=n.useState("workspace"),[f,j]=n.useState(""),x=n.useRef(null),g=n.useMemo(()=>"".concat(a.replace(/\/$/,""),"/").concat(String(o||"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"project"),[a,o]);return n.useEffect(()=>{var e;"custom"===h&&(null==(e=x.current)||e.focus())},[h]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("button",{type:"button",className:"admin-button agents-new-cta",onClick:()=>l(!0),children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"agents-new-cta-glyph",children:"+"}),"New project"]}),(0,s.jsx)(r.A,{open:t,onClose:()=>l(!1),eyebrow:"New project",title:"Create a project",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("p",{className:"agents-modal-help",children:"Scope agents, documents, memory, and integrations together."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",required:!0,placeholder:"Acme Co.",autoComplete:"off",value:o,onChange:e=>m(e.target.value),autoFocus:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where this project lives on disk."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("workspace"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"workspace",checked:"workspace"===h,onChange:()=>p("workspace")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"madarX workspace"}),(0,s.jsx)("code",{title:g,children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(g)})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===h?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===h,onChange:()=>p("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Custom path"}),(0,s.jsx)("small",{children:"Any absolute folder. Created if missing."})]})]})]}),"custom"===h?(0,s.jsx)(i.A,{inputRef:x,value:f,onChange:j}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Used for the project tile across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:"#c2452a"===e.value}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}},3185:(e,a,t)=>{"use strict";t.d(a,{A:()=>o});var s=t(2115),n=t(4250);let l=e=>{let a=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,a,t)=>t?t.toUpperCase():a.toLowerCase());return a.charAt(0).toUpperCase()+a.slice(1)};var r=t(45);let o=(e,a)=>{let t=(0,s.forwardRef)((t,o)=>{let{className:c,...i}=t;return(0,s.createElement)(r.default,{ref:o,iconNode:a,className:(0,n.z)("lucide-".concat(l(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),c),...i})});return t.displayName=l(e),t}},4250:(e,a,t)=>{"use strict";t.d(a,{z:()=>s});let s=function(){for(var e=arguments.length,a=Array(e),t=0;t<e;t++)a[t]=arguments[t];return a.filter((e,a,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===a).join(" ").trim()}},4788:(e,a,t)=>{"use strict";t.d(a,{A:()=>s});let s=(0,t(3185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5588:(e,a,t)=>{"use strict";t.d(a,{default:()=>d});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("404c09058da6107a889eda47ff9c94732e0d7dad86",o.callServer,void 0,o.findSourceMapURL,"deleteProjectAction");function i(e){let{disabled:a}=e,{pending:t}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button danger",disabled:t||a,"aria-busy":t?"true":void 0,children:t?"Deleting…":"Delete project"})}function d(e){let{projectId:a,projectName:t,projectSlug:l,isProtected:o}=e,[d,u]=n.useState(!1),[m,h]=n.useState("");if(o)return(0,s.jsxs)("span",{className:"admin-button secondary project-delete is-locked","aria-disabled":"true",title:"The Personal project is the default scope and cannot be deleted.",children:[(0,s.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{marginRight:6,verticalAlign:"-1px"},children:[(0,s.jsx)("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),(0,s.jsx)("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),"Protected"]});n.useEffect(()=>{d||h("")},[d]);let p=m.trim()===l;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-delete",onClick:()=>u(!0),"aria-label":"Delete ".concat(t),children:"Delete"}),(0,s.jsx)(r.A,{open:d,onClose:()=>u(!1),eyebrow:"Delete project",title:"Delete ".concat(t,"?"),tone:"danger",children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("p",{className:"agents-modal-help",children:"This removes the project, its agents, Disk files, memory, secrets, and audit history. The folder on your local drive is left untouched."}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsxs)("span",{children:["Type ",(0,s.jsx)("code",{className:"agents-modal-inline-code",children:l})," to confirm"]}),(0,s.jsx)("input",{type:"text",autoComplete:"off",spellCheck:!1,value:m,onChange:e=>h(e.target.value),placeholder:l,autoFocus:!0})]})}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(!1),children:"Cancel"}),(0,s.jsx)(i,{disabled:!p})]})]})})]})}},5649:(e,a,t)=>{"use strict";t.d(a,{A:()=>r});var s=t(5155),n=t(2115),l=t(4788);function r(e){let{open:a,onClose:t,eyebrow:r,title:o,tone:c="default",size:i="default",children:d}=e,u=n.useRef(null);return n.useEffect(()=>{let e=u.current;e&&(a&&!e.open&&("function"==typeof e.showModal?e.showModal():e.setAttribute("open","")),!a&&e.open&&e.close())},[a]),n.useEffect(()=>{let e=u.current;if(!e)return;let a=e=>{e.preventDefault(),t()};return e.addEventListener("cancel",a),()=>e.removeEventListener("cancel",a)},[t]),(0,s.jsx)("dialog",{ref:u,className:"agents-modal".concat("wide"===i?" agents-modal--wide":""),onClick:e=>{e.target===u.current&&t()},children:a?(0,s.jsxs)("div",{className:"agents-modal-card".concat("danger"===c?" agents-modal-card--danger":""),onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("header",{className:"agents-modal-head",children:[(0,s.jsxs)("div",{children:[r?(0,s.jsx)("span",{className:"admin-kicker",children:r}):null,(0,s.jsx)("h2",{children:o})]}),(0,s.jsx)("button",{type:"button",className:"agents-modal-close",onClick:t,"aria-label":"Close",children:(0,s.jsx)(l.A,{size:14})})]}),d]}):null})}},6787:(e,a,t)=>{Promise.resolve().then(t.bind(t,677)),Promise.resolve().then(t.bind(t,5588)),Promise.resolve().then(t.bind(t,9524)),Promise.resolve().then(t.bind(t,1236)),Promise.resolve().then(t.t.bind(t,2619,23))},9097:(e,a,t)=>{"use strict";t.d(a,{A:()=>l});var s=t(5155),n=t(2115);function l(e){let{name:a="folder_path",value:t,onChange:l,inputRef:r,placeholder:o="/Users/you/Documents/my-project"}=e,[c,i]=n.useState(null),[d,u]=n.useState(!1),[m,h]=n.useState(""),[p,f]=n.useState(""),[j,x]=n.useState(null);async function g(){var e;let a;if(i(null),!(null==(e=navigator.clipboard)?void 0:e.readText))return void i({kind:"error",message:"Clipboard not available."});try{a=await navigator.clipboard.readText()}catch(e){i({kind:"error",message:"Allow clipboard access."});return}let t=(a||"").trim();if((t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))&&(t=t.slice(1,-1)),t.startsWith("file://"))try{t=decodeURI(t.slice(7))}catch(e){}return t?t.startsWith("/")||t.startsWith("~")?void(l(t),i({kind:"success",message:"Pasted."})):void i({kind:"error",message:"Path must be absolute."}):void i({kind:"error",message:"Clipboard is empty."})}async function v(){i(null),x("pick");try{let e=await fetch("/api/fs/pick-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:"Choose project folder",start_path:t&&t.startsWith("/")?t:void 0})});if(499===e.status)return void i({kind:"error",message:"Cancelled."});let a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Picker failed."});l(a.folder_path),i({kind:"success",message:"Selected ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}async function b(){if(i(null),!m.trim()||!p.trim())return void i({kind:"error",message:"Parent and name required."});x("create");try{let e=await fetch("/api/fs/create-folder",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({parent:m.trim(),name:p.trim()})}),a=await e.json();if(!e.ok)return void i({kind:"error",message:a.error||"Create failed."});l(a.folder_path),u(!1),f(""),i({kind:"success",message:"Created ".concat(a.folder_path)})}catch(e){i({kind:"error",message:String((null==e?void 0:e.message)||e)})}finally{x(null)}}return n.useEffect(()=>{d&&!m&&h(t||"~/Documents")},[d,t,m]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"agents-modal-paste-row",children:[(0,s.jsx)("input",{ref:r,name:a,type:"text",placeholder:o,autoComplete:"off",spellCheck:!1,value:t||"",onChange:e=>{l(e.target.value),c&&i(null)},required:!0}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:v,disabled:"pick"===j,children:"pick"===j?"Opening…":"Choose folder…"})]}),(0,s.jsxs)("div",{className:"agents-modal-folder-tools",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:g,children:"Paste from clipboard"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Documents"),children:"~/Documents"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>l("~/Desktop"),children:"~/Desktop"}),(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>u(e=>!e),children:d?"Cancel new folder":"+ New folder"})]}),d?(0,s.jsxs)("div",{className:"agents-modal-create-folder",children:[(0,s.jsx)("small",{children:"Create a folder anywhere outside system directories. Parent must exist."}),(0,s.jsx)("div",{className:"agents-modal-create-row",children:(0,s.jsx)("input",{type:"text",placeholder:"Parent (e.g. ~/Documents)",value:m,onChange:e=>h(e.target.value),spellCheck:!1,autoComplete:"off"})}),(0,s.jsxs)("div",{className:"agents-modal-create-row",children:[(0,s.jsx)("input",{type:"text",placeholder:"New folder name",value:p,onChange:e=>f(e.target.value),spellCheck:!1,autoComplete:"off"}),(0,s.jsx)("button",{type:"button",className:"admin-button",onClick:b,disabled:"create"===j,children:"create"===j?"Creating…":"Create"})]})]}):null,c?(0,s.jsx)("p",{className:"agents-modal-feedback ".concat(c.kind),role:"status","aria-live":"polite",children:c.message}):null]})}},9524:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(5155),n=t(2115),l=t(7650),r=t(5649),o=t(926);let c=(0,o.createServerReference)("40d07a37b90a7a6fc27ff79649099bf9cb9febc8d2",o.callServer,void 0,o.findSourceMapURL,"updateProjectAction");var i=t(9097);let d=[{value:"#c2452a",name:"Mars Red"},{value:"#a83a22",name:"Deep Red"},{value:"#7c2b19",name:"Dark Red"},{value:"#111318",name:"Charcoal"},{value:"#3f3a30",name:"Warm Black"},{value:"#68707b",name:"Slate"},{value:"#cdb78a",name:"Warm Sand"},{value:"#1f6c9f",name:"Skill Blue"}];function u(){let{pending:e}=(0,l.useFormStatus)();return(0,s.jsx)("button",{type:"submit",className:"admin-button",disabled:e,"aria-busy":e?"true":void 0,children:e?"Saving…":"Save changes"})}function m(e){let{projectId:a,projectName:t,projectColor:l,projectDescription:o,projectFolderPath:m}=e,[h,p]=n.useState(!1),[f,j]=n.useState("keep"),[x,g]=n.useState(m||""),v=n.useRef(null);return n.useEffect(()=>{h&&(j("keep"),g(m||""))},[h,m]),n.useEffect(()=>{var e;"custom"===f&&(null==(e=v.current)||e.focus())},[f]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary project-edit",onClick:()=>p(!0),"aria-label":"Edit ".concat(t),children:"Edit"}),(0,s.jsx)(r.A,{open:h,onClose:()=>p(!1),eyebrow:"Edit project",title:"Edit ".concat(t),children:(0,s.jsxs)("form",{className:"agents-modal-form",action:c,children:[(0,s.jsx)("input",{type:"hidden",name:"project_id",value:a}),(0,s.jsx)("section",{className:"agents-modal-section",children:(0,s.jsxs)("label",{className:"agents-modal-field wide",children:[(0,s.jsx)("span",{children:"Name"}),(0,s.jsx)("input",{name:"name",type:"text",defaultValue:t,autoComplete:"off",required:!0})]})}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Folder location"}),(0,s.jsx)("small",{children:"Where project files live on disk. Move only if you've already moved the folder yourself."})]}),(0,s.jsxs)("div",{className:"agents-modal-radio-group",children:[(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("keep"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"keep",checked:"keep"===f,onChange:()=>j("keep")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Keep current"}),(0,s.jsx)("code",{title:m||"",children:function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:48;if(!e||e.length<=a)return e;let t=e.slice(0,Math.floor(a/2)-1),s=e.slice(e.length-Math.floor(a/2)+2);return"".concat(t,"…").concat(s)}(m)||"(not set)"})]})]}),(0,s.jsxs)("label",{className:"agents-modal-radio ".concat("custom"===f?"on":""),children:[(0,s.jsx)("input",{type:"radio",name:"folder_mode",value:"custom",checked:"custom"===f,onChange:()=>j("custom")}),(0,s.jsxs)("span",{className:"agents-modal-radio-body",children:[(0,s.jsx)("b",{children:"Change to…"}),(0,s.jsx)("small",{children:"Absolute path. Must already exist or be writable."})]})]})]}),"custom"===f?(0,s.jsx)(i.A,{inputRef:v,value:x,onChange:g}):(0,s.jsx)("input",{type:"hidden",name:"folder_path",value:""})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Color"}),(0,s.jsx)("small",{children:"Tile color across the app."})]}),(0,s.jsxs)("fieldset",{className:"agents-modal-swatches",children:[(0,s.jsx)("legend",{className:"visually-hidden",children:"Project color"}),d.map(e=>(0,s.jsxs)("label",{className:"agents-modal-swatch",style:{"--swatch":e.value},children:[(0,s.jsx)("input",{type:"radio",name:"color",value:e.value,defaultChecked:e.value===(l||"#c2452a")}),(0,s.jsx)("span",{className:"agents-modal-swatch-ring","aria-hidden":"true"}),(0,s.jsx)("span",{className:"visually-hidden",children:e.name})]},e.value))]})]}),(0,s.jsxs)("section",{className:"agents-modal-section",children:[(0,s.jsxs)("div",{className:"agents-modal-section-head",children:[(0,s.jsx)("span",{children:"Description"}),(0,s.jsx)("small",{children:"Used as context for agents working in this project."})]}),(0,s.jsx)("label",{className:"agents-modal-field wide",children:(0,s.jsx)("textarea",{name:"description",rows:3,defaultValue:o||"",placeholder:"What is this project for? Goals, audience, voice, constraints."})})]}),(0,s.jsxs)("footer",{className:"agents-modal-foot",children:[(0,s.jsx)("button",{type:"button",className:"admin-button secondary",onClick:()=>p(!1),children:"Cancel"}),(0,s.jsx)(u,{})]})]})})]})}}},e=>{e.O(0,[2619,8441,1255,7358],()=>e(e.s=6787)),_N_E=e.O()}]);
|
package/lib/cli/run.js
CHANGED
|
@@ -71,6 +71,11 @@ function spawnWeb(layout) {
|
|
|
71
71
|
PORT,
|
|
72
72
|
HOSTNAME: HOST, // Next standalone server reads HOSTNAME/PORT
|
|
73
73
|
MADARX_HOME: layout.home,
|
|
74
|
+
// The web bundle's import.meta.url is baked at build time, so lib modules
|
|
75
|
+
// pulled into the bundle compute a wrong package ROOT (the CI builder's
|
|
76
|
+
// path). Pass the real install dir so runtime spawns (hermes job runner,
|
|
77
|
+
// browser harness) can resolve an existing cwd + sibling scripts.
|
|
78
|
+
MADARX_PKG_ROOT: PKG_ROOT,
|
|
74
79
|
...(pkgVersion() ? { MADARX_VERSION: pkgVersion() } : {}),
|
|
75
80
|
},
|
|
76
81
|
});
|
package/lib/hermes-jobs.js
CHANGED
|
@@ -2,7 +2,7 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { spawn } from 'node:child_process';
|
|
4
4
|
import { getDb, newId, nowIso } from './db.js';
|
|
5
|
-
import { ARTIFACTS_DIR, ROOT, WORKSPACE, ensureDirs, relToRoot } from './paths.js';
|
|
5
|
+
import { ARTIFACTS_DIR, ROOT, PKG_ROOT, WORKSPACE, ensureDirs, relToRoot, pickExistingDir } from './paths.js';
|
|
6
6
|
import { ensureArtifactDir } from './artifact-paths.js';
|
|
7
7
|
import { DEFAULT_PROJECT_ID } from './projects.js';
|
|
8
8
|
import { appendAudit, recordArtifact, recordRun, updateRun } from './runtime.js';
|
|
@@ -240,8 +240,13 @@ export function createHermesJob({ prompt, title, cwd, session_id, model, timeout
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
export function startHermesJobWorker(jobId) {
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
// PKG_ROOT is the real install dir at runtime (MADARX_PKG_ROOT). ROOT is the
|
|
244
|
+
// build-time-baked path and is wrong in the packaged web bundle. Resolve the
|
|
245
|
+
// runner script absolutely against PKG_ROOT so it is found regardless of cwd,
|
|
246
|
+
// and spawn from a cwd that actually exists.
|
|
247
|
+
const runnerScript = path.join(PKG_ROOT, 'scripts', 'hermes-job-runner.mjs');
|
|
248
|
+
const child = spawn(process.execPath, [runnerScript, '--job-id', jobId], {
|
|
249
|
+
cwd: pickExistingDir(PKG_ROOT, WORKSPACE),
|
|
245
250
|
env: process.env,
|
|
246
251
|
stdio: 'ignore',
|
|
247
252
|
detached: true,
|
package/lib/paths.js
CHANGED
|
@@ -6,6 +6,27 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
7
7
|
export const ROOT = path.resolve(here, '..');
|
|
8
8
|
|
|
9
|
+
// Runtime package root. ROOT is derived from import.meta.url, which Next.js
|
|
10
|
+
// bakes at BUILD time — for any lib module pulled into the standalone web
|
|
11
|
+
// bundle that resolves to the CI builder's path (/home/runner/work/...),
|
|
12
|
+
// which does not exist on the user's machine. Using it as a spawn `cwd` (or to
|
|
13
|
+
// locate a sibling script) fails with `spawn <cmd> ENOENT`. The `madarx` CLI
|
|
14
|
+
// knows the real install dir and exports it as MADARX_PKG_ROOT when it spawns
|
|
15
|
+
// the web server — prefer that. Fall back to the baked ROOT, which is correct
|
|
16
|
+
// in dev (`next dev` bakes the local path) and for non-bundled callers.
|
|
17
|
+
export const PKG_ROOT = process.env.MADARX_PKG_ROOT
|
|
18
|
+
? path.resolve(process.env.MADARX_PKG_ROOT)
|
|
19
|
+
: ROOT;
|
|
20
|
+
|
|
21
|
+
// First candidate that exists and is a directory, else process.cwd(). Use to
|
|
22
|
+
// pick a spawn `cwd` that is guaranteed to exist at runtime.
|
|
23
|
+
export function pickExistingDir(...candidates) {
|
|
24
|
+
for (const dir of candidates) {
|
|
25
|
+
try { if (dir && fs.statSync(dir).isDirectory()) return dir; } catch { /* next */ }
|
|
26
|
+
}
|
|
27
|
+
return process.cwd();
|
|
28
|
+
}
|
|
29
|
+
|
|
9
30
|
// ---------------------------------------------------------------------------
|
|
10
31
|
// Data + workspace location resolution.
|
|
11
32
|
//
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import {
|
|
2
|
+
import { PKG_ROOT, WORKSPACE, pickExistingDir } from '../../paths.js';
|
|
3
3
|
import { redactToolOutput } from '../safety.js';
|
|
4
4
|
|
|
5
5
|
const DEFAULT_TIMEOUT_MS = 120000;
|
|
@@ -77,7 +77,11 @@ export async function browserHarnessRun(input = {}) {
|
|
|
77
77
|
let settled = false;
|
|
78
78
|
let killTimer = null;
|
|
79
79
|
const child = spawn(command, [], {
|
|
80
|
-
cwd
|
|
80
|
+
// The harness reads its script from stdin, so cwd only needs to exist.
|
|
81
|
+
// ROOT is the build-time-baked path (absent in packaged installs) and
|
|
82
|
+
// made spawn throw ENOENT before the binary even resolved. Use a dir that
|
|
83
|
+
// exists at runtime.
|
|
84
|
+
cwd: pickExistingDir(PKG_ROOT, WORKSPACE),
|
|
81
85
|
shell: false,
|
|
82
86
|
detached: process.platform !== 'win32',
|
|
83
87
|
stdio: ['pipe', 'pipe', 'pipe'],
|
package/package.json
CHANGED