madarx 2.13.0 → 2.15.0
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 +544 -551
- package/.next/standalone/.next/app-path-routes-manifest.json +76 -77
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/routes-manifest.json +0 -6
- 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 +2 -2
- package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/page.js +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/agents/[id]/page.js +4 -4
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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_client-reference-manifest.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_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_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/orchestrator/upload/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/join-complete/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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/start-and-route/route.js.nft.json +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_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/disconnect/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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/hail/[id]/governance/page.js.nft.json +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.js.nft.json +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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 +3 -3
- package/.next/standalone/.next/server/app/hail/page.js.nft.json +1 -1
- 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 +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/marketplace/page.js +2 -2
- 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 +1 -1
- 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 +2 -2
- 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 +3 -3
- package/.next/standalone/.next/server/app/projects/page.js +20 -20
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.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.js.nft.json +1 -1
- 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 +2 -2
- 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 +2 -2
- 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/team/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 +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/page.js +2 -2
- 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.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 +3 -3
- package/.next/standalone/.next/server/app/workflows/[caseId]/page.js +1 -1
- package/.next/standalone/.next/server/app/workflows/[caseId]/page.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/[caseId]/page.js.nft.json +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/page.js +1 -1
- package/.next/standalone/.next/server/app/workflows/page.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/workflows/share/[caseId]/page.js.nft.json +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 +76 -77
- package/.next/standalone/.next/server/chunks/1699.js +19 -19
- package/.next/standalone/.next/server/chunks/51.js +1 -0
- package/.next/standalone/.next/server/chunks/5185.js +4 -27
- package/.next/standalone/.next/server/chunks/5257.js +1 -1
- package/.next/standalone/.next/server/chunks/6355.js +1 -0
- package/.next/standalone/.next/server/functions-config-manifest.json +15 -15
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- 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/4119-cfb6260557a0a3d2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/page-f136822590202f9f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/workflows/[caseId]/page-9949ff1c223e771d.js +1 -0
- package/.next/{static/chunks/app/workflows/page-25cb2c4cb90273a8.js → standalone/.next/static/chunks/app/workflows/page-d0484521369bce4c.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-0cfb048137bd7fce.js → webpack-f916d679fe38a701.js} +1 -1
- package/.next/standalone/.next/static/css/0bd4c357d4f0c4f2.css +1 -0
- package/.next/standalone/.next/static/tMcPS9JR5cRXSe0u5ne95/_buildManifest.js +1 -0
- package/.next/standalone/CHANGELOG.md +28 -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/lib/process/seeds/specs/mine-project-intake.json +12 -4
- package/.next/standalone/lib/process/seeds/specs/mine-valuation.json +6 -2
- package/.next/standalone/lib/process/stages/policy-dsl-legacy.js +178 -0
- package/.next/standalone/lib/process/stages/policy-gate.js +24 -168
- package/.next/standalone/package.json +2 -2
- package/.next/static/chunks/4119-cfb6260557a0a3d2.js +1 -0
- package/.next/static/chunks/app/projects/page-f136822590202f9f.js +1 -0
- package/.next/static/chunks/app/workflows/[caseId]/page-9949ff1c223e771d.js +1 -0
- package/.next/{standalone/.next/static/chunks/app/workflows/page-25cb2c4cb90273a8.js → static/chunks/app/workflows/page-d0484521369bce4c.js} +1 -1
- package/.next/static/chunks/{webpack-0cfb048137bd7fce.js → webpack-f916d679fe38a701.js} +1 -1
- package/.next/static/css/0bd4c357d4f0c4f2.css +1 -0
- package/.next/static/tMcPS9JR5cRXSe0u5ne95/_buildManifest.js +1 -0
- package/CHANGELOG.md +28 -0
- package/ai-docs/process-engine.md +33 -1
- package/app/api/processes/start-and-route/route.js +5 -3
- package/app/components/dashboard/whatsapp-section.jsx +54 -13
- package/app/workflows/[caseId]/case-detail-client.jsx +2 -2
- package/app/workflows/definition-card.jsx +12 -18
- package/app/workflows/new/[caseId]/page.js +8 -8
- package/app/workflows/page.js +0 -5
- package/app/workflows/share/[caseId]/page.js +0 -1
- package/lib/cli/prompt.js +110 -0
- package/lib/cli/setup.js +152 -87
- package/lib/process/artifacts.js +12 -60
- package/lib/process/engine.js +5 -5
- package/lib/process/policy-predicates.js +116 -0
- package/lib/process/seeds/specs/mine-project-intake.json +12 -4
- package/lib/process/seeds/specs/mine-valuation.json +6 -2
- package/lib/process/spec-validator.js +46 -1
- package/lib/process/stages/policy-dsl-legacy.js +178 -0
- package/lib/process/stages/policy-gate.js +24 -168
- package/lib/runtime.js +8 -2
- package/package.json +2 -2
- package/scripts/postbuild-standalone.mjs +9 -0
- package/scripts/whatsapp-reset.mjs +15 -0
- package/.next/standalone/.next/server/app/workflows/new/page.js +0 -2
- package/.next/standalone/.next/server/app/workflows/new/page.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/workflows/new/page_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/chunks/1092.js +0 -1
- package/.next/standalone/.next/static/cR6E_4o8_rHXujVNesWiZ/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/4119-3b6adff3c7187ef3.js +0 -1
- package/.next/standalone/.next/static/chunks/app/projects/page-2166c214f854766e.js +0 -1
- package/.next/standalone/.next/static/chunks/app/workflows/[caseId]/page-423e4c194c7f5bf5.js +0 -1
- package/.next/standalone/.next/static/chunks/app/workflows/new/page-1eda41616cbfc4f3.js +0 -1
- package/.next/standalone/.next/static/css/0bfed9e12afa1dc1.css +0 -1
- package/.next/static/cR6E_4o8_rHXujVNesWiZ/_buildManifest.js +0 -1
- package/.next/static/chunks/4119-3b6adff3c7187ef3.js +0 -1
- package/.next/static/chunks/app/projects/page-2166c214f854766e.js +0 -1
- package/.next/static/chunks/app/workflows/[caseId]/page-423e4c194c7f5bf5.js +0 -1
- package/.next/static/chunks/app/workflows/new/page-1eda41616cbfc4f3.js +0 -1
- package/.next/static/css/0bfed9e12afa1dc1.css +0 -1
- package/app/workflows/new/new-case-flow.jsx +0 -256
- package/app/workflows/new/page.js +0 -27
- /package/.next/standalone/.next/static/{cR6E_4o8_rHXujVNesWiZ → tMcPS9JR5cRXSe0u5ne95}/_ssgManifest.js +0 -0
- /package/.next/static/{cR6E_4o8_rHXujVNesWiZ → tMcPS9JR5cRXSe0u5ne95}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// lib/process/stages/policy-dsl-legacy.js — DEPRECATED string-expression DSL.
|
|
2
|
+
//
|
|
3
|
+
// The hand-rolled tokenizer/parser kept for ONE release as a back-compat path
|
|
4
|
+
// while string rules migrate to JSON predicates (`../policy-predicates.js`).
|
|
5
|
+
// New workflows must author predicate JSON; the spec-validator accepts both
|
|
6
|
+
// forms for now and the policy_gate handler routes per-rule. Do not extend
|
|
7
|
+
// this grammar — it is on a removal track.
|
|
8
|
+
//
|
|
9
|
+
// Rule grammar:
|
|
10
|
+
// - intake.<field>
|
|
11
|
+
// - prior_stage('<slug>').<field>
|
|
12
|
+
// - Comparison: ==, !=, <, <=, >, >=
|
|
13
|
+
// - Logical: && ||, parens
|
|
14
|
+
// - String literals: 'foo'
|
|
15
|
+
// - Number literals: 1, 0.5
|
|
16
|
+
// - Membership: <left> IN [<lit>, <lit>, ...]
|
|
17
|
+
|
|
18
|
+
function readPath(obj, path) {
|
|
19
|
+
if (!obj || !path) return undefined;
|
|
20
|
+
return path.split('.').reduce((acc, key) => (acc == null ? acc : acc[key]), obj);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function tokenize(expr) {
|
|
24
|
+
const tokens = [];
|
|
25
|
+
let i = 0;
|
|
26
|
+
while (i < expr.length) {
|
|
27
|
+
const ch = expr[i];
|
|
28
|
+
if (/\s/.test(ch)) { i++; continue; }
|
|
29
|
+
if (ch === '(' || ch === ')' || ch === '[' || ch === ']' || ch === ',') {
|
|
30
|
+
tokens.push({ type: ch }); i++; continue;
|
|
31
|
+
}
|
|
32
|
+
if (ch === '&' && expr[i + 1] === '&') { tokens.push({ type: '&&' }); i += 2; continue; }
|
|
33
|
+
if (ch === '|' && expr[i + 1] === '|') { tokens.push({ type: '||' }); i += 2; continue; }
|
|
34
|
+
if (ch === '=' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '==' }); i += 2; continue; }
|
|
35
|
+
if (ch === '!' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '!=' }); i += 2; continue; }
|
|
36
|
+
if (ch === '<' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '<=' }); i += 2; continue; }
|
|
37
|
+
if (ch === '>' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '>=' }); i += 2; continue; }
|
|
38
|
+
if (ch === '<' || ch === '>') { tokens.push({ type: 'op', value: ch }); i++; continue; }
|
|
39
|
+
if (ch === "'" || ch === '"') {
|
|
40
|
+
const end = expr.indexOf(ch, i + 1);
|
|
41
|
+
if (end === -1) throw new Error(`policy-gate: unterminated string at ${i}`);
|
|
42
|
+
tokens.push({ type: 'string', value: expr.slice(i + 1, end) });
|
|
43
|
+
i = end + 1; continue;
|
|
44
|
+
}
|
|
45
|
+
if (/[0-9.]/.test(ch)) {
|
|
46
|
+
let j = i;
|
|
47
|
+
while (j < expr.length && /[0-9.]/.test(expr[j])) j++;
|
|
48
|
+
tokens.push({ type: 'number', value: Number(expr.slice(i, j)) });
|
|
49
|
+
i = j; continue;
|
|
50
|
+
}
|
|
51
|
+
if (/[A-Za-z_]/.test(ch)) {
|
|
52
|
+
let j = i;
|
|
53
|
+
while (j < expr.length && /[A-Za-z0-9_.]/.test(expr[j])) j++;
|
|
54
|
+
const word = expr.slice(i, j);
|
|
55
|
+
if (word === 'IN' || word === 'in') { tokens.push({ type: 'IN' }); }
|
|
56
|
+
else if (word === 'true') { tokens.push({ type: 'boolean', value: true }); }
|
|
57
|
+
else if (word === 'false') { tokens.push({ type: 'boolean', value: false }); }
|
|
58
|
+
else if (word === 'prior_stage' && expr[j] === '(') {
|
|
59
|
+
// Parse prior_stage('slug').field
|
|
60
|
+
const closeQuote = expr.indexOf(')', j);
|
|
61
|
+
const inner = expr.slice(j + 1, closeQuote).trim().replace(/^['"]|['"]$/g, '');
|
|
62
|
+
let k = closeQuote + 1;
|
|
63
|
+
// Expect .field
|
|
64
|
+
if (expr[k] !== '.') throw new Error("policy-gate: expected '.' after prior_stage(...)");
|
|
65
|
+
let m = k + 1;
|
|
66
|
+
while (m < expr.length && /[A-Za-z0-9_.]/.test(expr[m])) m++;
|
|
67
|
+
tokens.push({ type: 'ref', kind: 'prior_stage', stage: inner, path: expr.slice(k + 1, m) });
|
|
68
|
+
i = m; continue;
|
|
69
|
+
} else {
|
|
70
|
+
tokens.push({ type: 'ref', kind: 'path', path: word });
|
|
71
|
+
}
|
|
72
|
+
i = j; continue;
|
|
73
|
+
}
|
|
74
|
+
throw new Error(`policy-gate: unexpected character "${ch}" at ${i}`);
|
|
75
|
+
}
|
|
76
|
+
return tokens;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function resolveRef(token, ctx) {
|
|
80
|
+
if (token.kind === 'prior_stage') {
|
|
81
|
+
return readPath(ctx.context?.[token.stage], token.path);
|
|
82
|
+
}
|
|
83
|
+
// path like intake.email or stage_output.foo.bar
|
|
84
|
+
if (token.path.startsWith('intake.')) {
|
|
85
|
+
return readPath(ctx.intake, token.path.slice('intake.'.length));
|
|
86
|
+
}
|
|
87
|
+
if (token.path.startsWith('context.')) {
|
|
88
|
+
return readPath(ctx.context, token.path.slice('context.'.length));
|
|
89
|
+
}
|
|
90
|
+
return readPath(ctx, token.path);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function evalTokens(tokens, ctx) {
|
|
94
|
+
// Pratt-ish recursive descent. Grammar:
|
|
95
|
+
// expr := or
|
|
96
|
+
// or := and ('||' and)*
|
|
97
|
+
// and := cmp ('&&' cmp)*
|
|
98
|
+
// cmp := value (op value)?
|
|
99
|
+
// | value IN '[' values ']'
|
|
100
|
+
// value := ref | number | string | boolean | '(' or ')'
|
|
101
|
+
let pos = 0;
|
|
102
|
+
function peek() { return tokens[pos]; }
|
|
103
|
+
function consume(type) {
|
|
104
|
+
const t = tokens[pos];
|
|
105
|
+
if (!t || t.type !== type) throw new Error(`policy-gate: expected ${type}, got ${t?.type || 'EOF'}`);
|
|
106
|
+
pos++;
|
|
107
|
+
return t;
|
|
108
|
+
}
|
|
109
|
+
function value() {
|
|
110
|
+
const t = peek();
|
|
111
|
+
if (!t) throw new Error('policy-gate: unexpected end of expression');
|
|
112
|
+
if (t.type === '(') { pos++; const e = or(); consume(')'); return e; }
|
|
113
|
+
if (t.type === 'number' || t.type === 'string' || t.type === 'boolean') {
|
|
114
|
+
pos++;
|
|
115
|
+
return t.value;
|
|
116
|
+
}
|
|
117
|
+
if (t.type === 'ref') {
|
|
118
|
+
pos++;
|
|
119
|
+
return resolveRef(t, ctx);
|
|
120
|
+
}
|
|
121
|
+
throw new Error(`policy-gate: unexpected token ${t.type}`);
|
|
122
|
+
}
|
|
123
|
+
function cmp() {
|
|
124
|
+
const left = value();
|
|
125
|
+
const t = peek();
|
|
126
|
+
if (!t) return Boolean(left);
|
|
127
|
+
if (t.type === 'op') {
|
|
128
|
+
pos++;
|
|
129
|
+
const right = value();
|
|
130
|
+
switch (t.value) {
|
|
131
|
+
case '==': return left == right; // eslint-disable-line eqeqeq
|
|
132
|
+
case '!=': return left != right; // eslint-disable-line eqeqeq
|
|
133
|
+
case '<': return Number(left) < Number(right);
|
|
134
|
+
case '<=': return Number(left) <= Number(right);
|
|
135
|
+
case '>': return Number(left) > Number(right);
|
|
136
|
+
case '>=': return Number(left) >= Number(right);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (t.type === 'IN') {
|
|
140
|
+
pos++;
|
|
141
|
+
consume('[');
|
|
142
|
+
const list = [];
|
|
143
|
+
while (peek() && peek().type !== ']') {
|
|
144
|
+
const v = value();
|
|
145
|
+
list.push(v);
|
|
146
|
+
if (peek() && peek().type === ',') pos++;
|
|
147
|
+
}
|
|
148
|
+
consume(']');
|
|
149
|
+
return list.includes(left);
|
|
150
|
+
}
|
|
151
|
+
return Boolean(left);
|
|
152
|
+
}
|
|
153
|
+
function and() {
|
|
154
|
+
let left = cmp();
|
|
155
|
+
while (peek() && peek().type === '&&') { pos++; const right = cmp(); left = Boolean(left) && Boolean(right); }
|
|
156
|
+
return left;
|
|
157
|
+
}
|
|
158
|
+
function or() {
|
|
159
|
+
let left = and();
|
|
160
|
+
while (peek() && peek().type === '||') { pos++; const right = and(); left = Boolean(left) || Boolean(right); }
|
|
161
|
+
return left;
|
|
162
|
+
}
|
|
163
|
+
const result = or();
|
|
164
|
+
if (pos !== tokens.length) throw new Error(`policy-gate: unexpected trailing token at ${pos}`);
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// DEPRECATED — evaluate a legacy string-DSL rule. Returns { result, error }.
|
|
169
|
+
export function evaluateRule(rule, { intake, context }) {
|
|
170
|
+
if (!rule || typeof rule !== 'string') return { result: true, error: null };
|
|
171
|
+
try {
|
|
172
|
+
const tokens = tokenize(rule);
|
|
173
|
+
const result = Boolean(evalTokens(tokens, { intake, context }));
|
|
174
|
+
return { result, error: null };
|
|
175
|
+
} catch (err) {
|
|
176
|
+
return { result: false, error: err?.message || String(err) };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
// lib/process/stages/policy-gate.js — handler for policy_gate stages.
|
|
2
2
|
//
|
|
3
3
|
// Evaluates declarative rules against the case's intake + accumulated context.
|
|
4
|
-
//
|
|
5
|
-
// -
|
|
6
|
-
// -
|
|
7
|
-
//
|
|
8
|
-
// -
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// - Membership: <left> IN [<lit>, <lit>, ...]
|
|
4
|
+
// Each entry in `config.rules` is one of:
|
|
5
|
+
// - a JSON predicate → `../policy-predicates.js` (the canonical form)
|
|
6
|
+
// - a string expression → legacy DSL (`./policy-dsl-legacy.js`, deprecated,
|
|
7
|
+
// kept one release for back-compat; routed per-rule)
|
|
8
|
+
// - { expr, label } → legacy DSL wrapper
|
|
9
|
+
//
|
|
10
|
+
// All rules must pass (implicit AND across the array) for the gate to pass.
|
|
12
11
|
//
|
|
13
12
|
// Outcomes:
|
|
14
13
|
// - rules all pass → kind=pass
|
|
@@ -17,166 +16,25 @@
|
|
|
17
16
|
// downstream human_approval handles this)
|
|
18
17
|
|
|
19
18
|
import { createApprovalRequest } from '../../approvals.js';
|
|
19
|
+
import { evaluatePredicateSafe, isPredicateRule, describePredicate } from '../policy-predicates.js';
|
|
20
|
+
import { evaluateRule } from './policy-dsl-legacy.js';
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function tokenize(expr) {
|
|
27
|
-
const tokens = [];
|
|
28
|
-
let i = 0;
|
|
29
|
-
while (i < expr.length) {
|
|
30
|
-
const ch = expr[i];
|
|
31
|
-
if (/\s/.test(ch)) { i++; continue; }
|
|
32
|
-
if (ch === '(' || ch === ')' || ch === '[' || ch === ']' || ch === ',') {
|
|
33
|
-
tokens.push({ type: ch }); i++; continue;
|
|
34
|
-
}
|
|
35
|
-
if (ch === '&' && expr[i + 1] === '&') { tokens.push({ type: '&&' }); i += 2; continue; }
|
|
36
|
-
if (ch === '|' && expr[i + 1] === '|') { tokens.push({ type: '||' }); i += 2; continue; }
|
|
37
|
-
if (ch === '=' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '==' }); i += 2; continue; }
|
|
38
|
-
if (ch === '!' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '!=' }); i += 2; continue; }
|
|
39
|
-
if (ch === '<' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '<=' }); i += 2; continue; }
|
|
40
|
-
if (ch === '>' && expr[i + 1] === '=') { tokens.push({ type: 'op', value: '>=' }); i += 2; continue; }
|
|
41
|
-
if (ch === '<' || ch === '>') { tokens.push({ type: 'op', value: ch }); i++; continue; }
|
|
42
|
-
if (ch === "'" || ch === '"') {
|
|
43
|
-
const end = expr.indexOf(ch, i + 1);
|
|
44
|
-
if (end === -1) throw new Error(`policy-gate: unterminated string at ${i}`);
|
|
45
|
-
tokens.push({ type: 'string', value: expr.slice(i + 1, end) });
|
|
46
|
-
i = end + 1; continue;
|
|
47
|
-
}
|
|
48
|
-
if (/[0-9.]/.test(ch)) {
|
|
49
|
-
let j = i;
|
|
50
|
-
while (j < expr.length && /[0-9.]/.test(expr[j])) j++;
|
|
51
|
-
tokens.push({ type: 'number', value: Number(expr.slice(i, j)) });
|
|
52
|
-
i = j; continue;
|
|
53
|
-
}
|
|
54
|
-
if (/[A-Za-z_]/.test(ch)) {
|
|
55
|
-
let j = i;
|
|
56
|
-
while (j < expr.length && /[A-Za-z0-9_.]/.test(expr[j])) j++;
|
|
57
|
-
const word = expr.slice(i, j);
|
|
58
|
-
if (word === 'IN' || word === 'in') { tokens.push({ type: 'IN' }); }
|
|
59
|
-
else if (word === 'true') { tokens.push({ type: 'boolean', value: true }); }
|
|
60
|
-
else if (word === 'false') { tokens.push({ type: 'boolean', value: false }); }
|
|
61
|
-
else if (word === 'prior_stage' && expr[j] === '(') {
|
|
62
|
-
// Parse prior_stage('slug').field
|
|
63
|
-
const closeQuote = expr.indexOf(')', j);
|
|
64
|
-
const inner = expr.slice(j + 1, closeQuote).trim().replace(/^['"]|['"]$/g, '');
|
|
65
|
-
let k = closeQuote + 1;
|
|
66
|
-
// Expect .field
|
|
67
|
-
if (expr[k] !== '.') throw new Error("policy-gate: expected '.' after prior_stage(...)");
|
|
68
|
-
let m = k + 1;
|
|
69
|
-
while (m < expr.length && /[A-Za-z0-9_.]/.test(expr[m])) m++;
|
|
70
|
-
tokens.push({ type: 'ref', kind: 'prior_stage', stage: inner, path: expr.slice(k + 1, m) });
|
|
71
|
-
i = m; continue;
|
|
72
|
-
} else {
|
|
73
|
-
tokens.push({ type: 'ref', kind: 'path', path: word });
|
|
74
|
-
}
|
|
75
|
-
i = j; continue;
|
|
76
|
-
}
|
|
77
|
-
throw new Error(`policy-gate: unexpected character "${ch}" at ${i}`);
|
|
78
|
-
}
|
|
79
|
-
return tokens;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function resolveRef(token, ctx) {
|
|
83
|
-
if (token.kind === 'prior_stage') {
|
|
84
|
-
return readPath(ctx.context?.[token.stage], token.path);
|
|
85
|
-
}
|
|
86
|
-
// path like intake.email or stage_output.foo.bar
|
|
87
|
-
if (token.path.startsWith('intake.')) {
|
|
88
|
-
return readPath(ctx.intake, token.path.slice('intake.'.length));
|
|
89
|
-
}
|
|
90
|
-
if (token.path.startsWith('context.')) {
|
|
91
|
-
return readPath(ctx.context, token.path.slice('context.'.length));
|
|
92
|
-
}
|
|
93
|
-
return readPath(ctx, token.path);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function evalTokens(tokens, ctx) {
|
|
97
|
-
// Pratt-ish recursive descent. Grammar:
|
|
98
|
-
// expr := or
|
|
99
|
-
// or := and ('||' and)*
|
|
100
|
-
// and := cmp ('&&' cmp)*
|
|
101
|
-
// cmp := value (op value)?
|
|
102
|
-
// | value IN '[' values ']'
|
|
103
|
-
// value := ref | number | string | boolean | '(' or ')'
|
|
104
|
-
let pos = 0;
|
|
105
|
-
function peek() { return tokens[pos]; }
|
|
106
|
-
function consume(type) {
|
|
107
|
-
const t = tokens[pos];
|
|
108
|
-
if (!t || t.type !== type) throw new Error(`policy-gate: expected ${type}, got ${t?.type || 'EOF'}`);
|
|
109
|
-
pos++;
|
|
110
|
-
return t;
|
|
111
|
-
}
|
|
112
|
-
function value() {
|
|
113
|
-
const t = peek();
|
|
114
|
-
if (!t) throw new Error('policy-gate: unexpected end of expression');
|
|
115
|
-
if (t.type === '(') { pos++; const e = or(); consume(')'); return e; }
|
|
116
|
-
if (t.type === 'number' || t.type === 'string' || t.type === 'boolean') {
|
|
117
|
-
pos++;
|
|
118
|
-
return t.value;
|
|
119
|
-
}
|
|
120
|
-
if (t.type === 'ref') {
|
|
121
|
-
pos++;
|
|
122
|
-
return resolveRef(t, ctx);
|
|
123
|
-
}
|
|
124
|
-
throw new Error(`policy-gate: unexpected token ${t.type}`);
|
|
125
|
-
}
|
|
126
|
-
function cmp() {
|
|
127
|
-
const left = value();
|
|
128
|
-
const t = peek();
|
|
129
|
-
if (!t) return Boolean(left);
|
|
130
|
-
if (t.type === 'op') {
|
|
131
|
-
pos++;
|
|
132
|
-
const right = value();
|
|
133
|
-
switch (t.value) {
|
|
134
|
-
case '==': return left == right; // eslint-disable-line eqeqeq
|
|
135
|
-
case '!=': return left != right; // eslint-disable-line eqeqeq
|
|
136
|
-
case '<': return Number(left) < Number(right);
|
|
137
|
-
case '<=': return Number(left) <= Number(right);
|
|
138
|
-
case '>': return Number(left) > Number(right);
|
|
139
|
-
case '>=': return Number(left) >= Number(right);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if (t.type === 'IN') {
|
|
143
|
-
pos++;
|
|
144
|
-
consume('[');
|
|
145
|
-
const list = [];
|
|
146
|
-
while (peek() && peek().type !== ']') {
|
|
147
|
-
const v = value();
|
|
148
|
-
list.push(v);
|
|
149
|
-
if (peek() && peek().type === ',') pos++;
|
|
150
|
-
}
|
|
151
|
-
consume(']');
|
|
152
|
-
return list.includes(left);
|
|
153
|
-
}
|
|
154
|
-
return Boolean(left);
|
|
155
|
-
}
|
|
156
|
-
function and() {
|
|
157
|
-
let left = cmp();
|
|
158
|
-
while (peek() && peek().type === '&&') { pos++; const right = cmp(); left = Boolean(left) && Boolean(right); }
|
|
159
|
-
return left;
|
|
160
|
-
}
|
|
161
|
-
function or() {
|
|
162
|
-
let left = and();
|
|
163
|
-
while (peek() && peek().type === '||') { pos++; const right = and(); left = Boolean(left) || Boolean(right); }
|
|
164
|
-
return left;
|
|
165
|
-
}
|
|
166
|
-
const result = or();
|
|
167
|
-
if (pos !== tokens.length) throw new Error(`policy-gate: unexpected trailing token at ${pos}`);
|
|
168
|
-
return result;
|
|
169
|
-
}
|
|
22
|
+
// Re-exported for back-compat: tests and any callers still importing the
|
|
23
|
+
// legacy string-DSL evaluator from this module keep working during the
|
|
24
|
+
// deprecation window.
|
|
25
|
+
export { evaluateRule };
|
|
170
26
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const result =
|
|
176
|
-
return { result, error:
|
|
177
|
-
} catch (err) {
|
|
178
|
-
return { result: false, error: err?.message || String(err) };
|
|
27
|
+
// Evaluate one rule entry — predicate JSON or legacy string — returning a
|
|
28
|
+
// uniform { result, error, label } record for the trace.
|
|
29
|
+
function evaluateRuleEntry(rule, ctx) {
|
|
30
|
+
if (isPredicateRule(rule)) {
|
|
31
|
+
const { result, error } = evaluatePredicateSafe(rule, ctx);
|
|
32
|
+
return { result, error, label: rule.label || describePredicate(rule) };
|
|
179
33
|
}
|
|
34
|
+
const expr = typeof rule === 'string' ? rule : rule?.expr;
|
|
35
|
+
const label = typeof rule === 'string' ? rule : (rule?.label || rule?.expr);
|
|
36
|
+
const { result, error } = evaluateRule(expr, ctx);
|
|
37
|
+
return { result, error, label };
|
|
180
38
|
}
|
|
181
39
|
|
|
182
40
|
export async function executeStage({ case: c, stage }) {
|
|
@@ -187,9 +45,7 @@ export async function executeStage({ case: c, stage }) {
|
|
|
187
45
|
const trace = [];
|
|
188
46
|
let allPass = true;
|
|
189
47
|
for (const rule of rules) {
|
|
190
|
-
const
|
|
191
|
-
const label = typeof rule === 'string' ? rule : (rule?.label || rule?.expr);
|
|
192
|
-
const { result, error } = evaluateRule(expr, { intake, context });
|
|
48
|
+
const { result, error, label } = evaluateRuleEntry(rule, { intake, context });
|
|
193
49
|
trace.push({ rule: label, result, error });
|
|
194
50
|
if (!result) allPass = false;
|
|
195
51
|
}
|
package/lib/runtime.js
CHANGED
|
@@ -14,6 +14,7 @@ import { DEFAULT_PROJECT_ID, appendProjectChangelog, getProject } from './projec
|
|
|
14
14
|
import { listActivity, listTasks, reportingSnapshot } from './delegation.js';
|
|
15
15
|
import { getMainAgentTrustMode } from './tools/registry.js';
|
|
16
16
|
import { defaultSkillsMarkdown } from './marketplace-seeds.js';
|
|
17
|
+
import { getConfig } from './config.js';
|
|
17
18
|
import { publishLiveEvent, publishStateChanged } from './live-events.js';
|
|
18
19
|
import { resolveTargetSpace } from './dashboard-spaces.js';
|
|
19
20
|
|
|
@@ -862,9 +863,14 @@ export function createAgent(payload = {}) {
|
|
|
862
863
|
const type = payload.type || 'custom';
|
|
863
864
|
const mission = payload.mission || 'Support Client Workspace operations as a local sub-agent.';
|
|
864
865
|
const schedule = payload.schedule || 'on demand';
|
|
865
|
-
|
|
866
|
+
// Default engine/model come from the setup wizard's choices (config keys
|
|
867
|
+
// default_agent_engine / default_agent_model) when the caller didn't specify.
|
|
868
|
+
let cfgEngine = null;
|
|
869
|
+
let cfgModel = null;
|
|
870
|
+
try { cfgEngine = getConfig('default_agent_engine', null); cfgModel = getConfig('default_agent_model', null); } catch { /* config optional */ }
|
|
871
|
+
const engine = payload.engine || cfgEngine || 'claude-code';
|
|
866
872
|
const normalizedEngine = normalizeAgentEngine(engine);
|
|
867
|
-
const model = payload.model || defaultModelForEngine(normalizedEngine);
|
|
873
|
+
const model = payload.model || (!payload.engine && cfgModel) || defaultModelForEngine(normalizedEngine);
|
|
868
874
|
const tools = Array.isArray(payload.tools)
|
|
869
875
|
? payload.tools
|
|
870
876
|
: String(payload.tools || 'web-search,browser,files,cron')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "madarx",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Madarx OS — Next.js product with SQLite-backed runtime, scheduled cron daemon, and approval-gated local runners.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"hermes:job": "node --no-warnings --env-file-if-exists=.env.local scripts/hermes-job-runner.mjs",
|
|
57
57
|
"whatsapp:bridge": "node --no-warnings --env-file-if-exists=.env.local scripts/whatsapp-daemon.mjs",
|
|
58
58
|
"whatsapp:once": "WHATSAPP_DAEMON_ONCE=1 node --no-warnings --env-file-if-exists=.env.local scripts/whatsapp-daemon.mjs",
|
|
59
|
-
"whatsapp:reset": "node -
|
|
59
|
+
"whatsapp:reset": "node --no-warnings --env-file-if-exists=.env.local scripts/whatsapp-reset.mjs",
|
|
60
60
|
"smoke:routes": "node --no-warnings scripts/smoke-routes.mjs",
|
|
61
61
|
"vendor:open-design": "node --no-warnings scripts/vendor-open-design.mjs",
|
|
62
62
|
"check:disk-enc": "node --no-warnings scripts/check-disk-encryption.mjs",
|
|
@@ -38,4 +38,13 @@ if (!fs.existsSync(STANDALONE)) {
|
|
|
38
38
|
|
|
39
39
|
copyInto(path.join('.next', 'static'), path.join('.next', 'static'));
|
|
40
40
|
copyInto('public', 'public');
|
|
41
|
+
|
|
42
|
+
for (const envName of ['.env', '.env.local', '.env.development', '.env.production', '.env.test']) {
|
|
43
|
+
const envPath = path.join(STANDALONE, envName);
|
|
44
|
+
if (fs.existsSync(envPath)) {
|
|
45
|
+
fs.rmSync(envPath, { force: true });
|
|
46
|
+
console.log(`[postbuild] removed ${path.join('.next', 'standalone', envName)} from publish bundle`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
41
50
|
console.log('[postbuild] standalone bundle is self-serving.');
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Wipe the WhatsApp Baileys session so the bridge offers a fresh pairing QR.
|
|
3
|
+
// Resolves the session dir from lib/paths.js so it honours $MADARX_HOME /
|
|
4
|
+
// MADARX_DATA_DIR (global installs live under ~/.madarx, not the repo cwd).
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import { WHATSAPP_SESSION_DIR } from '../lib/paths.js';
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
fs.rmSync(WHATSAPP_SESSION_DIR, { recursive: true, force: true });
|
|
10
|
+
console.log('[whatsapp:reset] wiped', WHATSAPP_SESSION_DIR);
|
|
11
|
+
console.log('[whatsapp:reset] restart madarx (or the WhatsApp bridge) to generate a fresh pairing QR.');
|
|
12
|
+
} catch (err) {
|
|
13
|
+
console.error('[whatsapp:reset] failed to wipe', WHATSAPP_SESSION_DIR, '—', err.message);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(()=>{var a={};a.id=106,a.ids=[106],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},19445:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/madarx-os/madarx-os/app/workflows/new/new-case-flow.jsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/madarx-os/madarx-os/app/workflows/new/new-case-flow.jsx","default")},24433:(a,b,c)=>{Promise.resolve().then(c.bind(c,94657)),Promise.resolve().then(c.bind(c,59839))},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},26848:a=>{"use strict";a.exports=require("node:readline/promises")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31421:a=>{"use strict";a.exports=require("node:child_process")},33873:a=>{"use strict";a.exports=require("path")},34161:(a,b,c)=>{Promise.resolve().then(c.bind(c,35271)),Promise.resolve().then(c.bind(c,19445))},35271:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/madarx-os/madarx-os/app/components/admin/project-switcher.jsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/madarx-os/madarx-os/app/components/admin/project-switcher.jsx","default")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},44898:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{default:()=>k,dynamic:()=>l});var e=c(75338),f=c(86893),g=c(9013),h=c(61423),i=c(19445),j=a([g,h]);[g,h]=j.then?(await j)():j;let l="force-dynamic";async function k({searchParams:a}){let b=await a||{},c="string"==typeof b.definition?b.definition:null,d=(0,g.Pb)(),j=(0,h.hF)({status:"active"});return(0,e.jsx)(f.iN,{kicker:"Workflows",title:"Start a new case",description:"Pick a process, the project it belongs to, and fill out the intake form.",children:(0,e.jsx)(i.default,{definitions:d,projects:j,initialDefinitionSlug:c})})}d()}catch(a){d(a)}})},48161:a=>{"use strict";a.exports=require("node:os")},50832:a=>{"use strict";a.exports=import("@anthropic-ai/sdk")},59839:(a,b,c)=>{"use strict";c.d(b,{default:()=>i});var d=c(21124),e=c(38301),f=c(42378);function g({value:a,onChange:b}){let c=Array.isArray(a)?a:[],e=c.reduce((a,b)=>a+Number(b.percentage||0),0);return(0,d.jsxs)("div",{className:"shareholders-field",children:[c.map((a,e)=>(0,d.jsxs)("div",{className:"shareholder-row",children:[(0,d.jsx)("input",{type:"text",value:a.name,placeholder:"Shareholder name",onChange:a=>b(c.map((b,c)=>c===e?{...b,name:a.target.value}:b))}),(0,d.jsx)("input",{type:"number",value:a.percentage,min:0,max:100,step:.01,onChange:a=>b(c.map((b,c)=>c===e?{...b,percentage:Number(a.target.value)}:b))}),(0,d.jsx)("span",{children:"%"}),c.length>1?(0,d.jsx)("button",{type:"button",className:"btn-tertiary",onClick:()=>b(c.filter((a,b)=>b!==e)),children:"Remove"}):null]},e)),(0,d.jsxs)("div",{className:"shareholder-actions",children:[(0,d.jsx)("button",{type:"button",className:"btn-secondary",onClick:()=>b([...c,{name:"",percentage:0}]),children:"Add shareholder"}),(0,d.jsxs)("span",{className:"muted",children:["Total: ",e,"%"]})]})]})}function h({field:a,value:b,error:c,onChange:e}){let f={id:`f-${a.name}`,name:a.name,required:a.required,"aria-invalid":c?"true":void 0};return(0,d.jsxs)("label",{className:`form-field${c?" has-error":""}`,children:[(0,d.jsxs)("span",{className:"form-field-label",children:[a.label,a.required?(0,d.jsx)("span",{className:"req",children:" *"}):null]}),"textarea"===a.type?(0,d.jsx)("textarea",{...f,value:b||"",rows:5,placeholder:a.placeholder||"",onChange:a=>e(a.target.value)}):"select"===a.type?(0,d.jsxs)("select",{...f,value:b||"",onChange:a=>e(a.target.value),children:[(0,d.jsx)("option",{value:"",disabled:!0,children:"Pick one…"}),(a.options||[]).map(a=>(0,d.jsx)("option",{value:a,children:a},a))]}):"shareholders"===a.type?(0,d.jsx)(g,{value:b,onChange:e}):(0,d.jsx)("input",{...f,type:"number"===a.type?"number":"email"===a.type?"email":"text",value:b||"",placeholder:a.placeholder||"",min:a.min,onChange:b=>e((a.type,b.target.value))}),a.help?(0,d.jsx)("small",{className:"form-help",children:a.help}):null,c?(0,d.jsx)("small",{className:"form-error",children:c}):null]})}function i({definitions:a,projects:b,initialDefinitionSlug:c}){let g=(0,f.useRouter)(),[i,j]=(0,e.useState)(c||a[0]?.slug||""),[k,l]=(0,e.useState)(b[0]?.id||"personal"),[m,n]=(0,e.useState)(""),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)({}),[s,t]=(0,e.useState)({}),[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(null),y=(0,e.useMemo)(()=>o?.fields||[],[o]);async function z(a){a.preventDefault(),x(null);let b=function(a,b){let c={};for(let d of a?.fields||[]){let a=b[d.name];if(d.required)if("shareholders"===d.type){let b=Array.isArray(a)?a:[];0===b.length&&(c[d.name]="At least one shareholder required.");let e=b.reduce((a,b)=>a+Number(b.percentage||0),0);Math.abs(e-100)>.01&&(c[d.name]=`Shareholder percentages must total 100. Got ${e}.`),b.some(a=>!String(a.name||"").trim())&&(c[d.name]="Each shareholder needs a name.")}else(null==a||""===String(a).trim())&&(c[d.name]="Required.");if("number"===d.type&&""!==a&&null!=a){let b=Number(a);Number.isFinite(b)?"number"==typeof d.min&&b<d.min&&(c[d.name]=`Must be at least ${d.min}.`):c[d.name]="Must be a number."}d.min_length&&"string"==typeof a&&a.length<d.min_length&&(c[d.name]=`Must be at least ${d.min_length} characters.`)}return c}(o,q);if(t(b),!(Object.keys(b).length>0)){v(!0);try{let a=await fetch("/api/processes",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({definition_slug:i,project_id:k,title:m||null,intake_payload:{...q,share_capital_usd:Number(q.share_capital_usd)||0}})}),b=await a.json();if(!a.ok)throw Error(b?.error||"Failed to start case");g.push(`/workflows/${b.case.id}`)}catch(a){x(a?.message||String(a))}finally{v(!1)}}}return(0,d.jsxs)("form",{className:"new-case-form",onSubmit:z,children:[(0,d.jsxs)("section",{className:"form-section",children:[(0,d.jsx)("h2",{children:"Process and project"}),(0,d.jsxs)("div",{className:"form-row",children:[(0,d.jsxs)("label",{className:"form-field",children:[(0,d.jsx)("span",{className:"form-field-label",children:"Process definition"}),(0,d.jsx)("select",{value:i,onChange:a=>j(a.target.value),children:a.map(a=>(0,d.jsx)("option",{value:a.slug,children:a.name},a.slug))})]}),(0,d.jsxs)("label",{className:"form-field",children:[(0,d.jsx)("span",{className:"form-field-label",children:"Project"}),(0,d.jsx)("select",{value:k,onChange:a=>l(a.target.value),children:b.map(a=>(0,d.jsx)("option",{value:a.id,children:a.name},a.id))})]})]}),(0,d.jsxs)("label",{className:"form-field",children:[(0,d.jsx)("span",{className:"form-field-label",children:"Case title"}),(0,d.jsx)("input",{type:"text",value:m,onChange:a=>n(a.target.value),placeholder:"e.g. ADGM setup — Acme Holdings Ltd"})]})]}),(0,d.jsxs)("section",{className:"form-section",children:[(0,d.jsx)("h2",{children:o?.title||"Intake form"}),o?.description?(0,d.jsx)("p",{className:"muted",children:o.description}):null,y.map(a=>(0,d.jsx)(h,{field:a,value:q[a.name],error:s[a.name],onChange:b=>r(c=>({...c,[a.name]:b}))},a.name))]}),w?(0,d.jsx)("p",{className:"form-error",role:"alert",children:w}):null,(0,d.jsx)("div",{className:"form-actions",children:(0,d.jsx)("button",{type:"submit",className:"btn-primary",disabled:u,children:u?"Starting case…":"Start case"})})]})}},62433:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>E.a,__next_app__:()=>K,handler:()=>M,pages:()=>J,routeModule:()=>L,tree:()=>I});var d=c(49754),e=c(9117),f=c(46595),g=c(32324),h=c(39326),i=c(38928),j=c(20175),k=c(12),l=c(54290),m=c(12696),n=c(52574),o=c(82802),p=c(77533),q=c(45229),r=c(32822),s=c(261),t=c(26453),u=c(52474),v=c(26713),w=c(51356),x=c(62685),y=c(36225),z=c(63446),A=c(2762),B=c(45742),C=c(86439),D=c(81170),E=c.n(D),F=c(62506),G=c(91203),H={};for(let a in F)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(H[a]=()=>F[a]);c.d(b,H);let I={children:["",{children:["workflows",{children:["new",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,44898)),"/home/runner/work/madarx-os/madarx-os/app/workflows/new/page.js"]}]},{}]},{metadata:{icon:[async a=>(await Promise.resolve().then(c.bind(c,2987))).default(a)],apple:[],openGraph:[],twitter:[],manifest:void 0}}]},{layout:[()=>Promise.resolve().then(c.bind(c,70715)),"/home/runner/work/madarx-os/madarx-os/app/layout.js"],loading:[()=>Promise.resolve().then(c.bind(c,90391)),"/home/runner/work/madarx-os/madarx-os/app/loading.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,81170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,87028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,90461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,32768,23)),"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[async a=>(await Promise.resolve().then(c.bind(c,2987))).default(a)],apple:[],openGraph:[],twitter:[],manifest:void 0}}]}.children,J=["/home/runner/work/madarx-os/madarx-os/app/workflows/new/page.js"],K={require:c,loadChunk:()=>Promise.resolve()},L=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/workflows/new/page",pathname:"/workflows/new",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:I},distDir:".next",relativeProjectDir:""});async function M(a,b,d){var D;let H="/workflows/new/page";"/index"===H&&(H="/");let N=(0,h.getRequestMeta)(a,"postponed"),O=(0,h.getRequestMeta)(a,"minimalMode"),P=await L.prepare(a,b,{srcPage:H,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,parsedUrl:T,pageIsDynamic:U,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,serverActionsManifest:Y,clientReferenceManifest:Z,subresourceIntegrityManifest:$,prerenderManifest:_,isDraftMode:aa,resolvedPathname:ab,revalidateOnlyGenerated:ac,routerServerContext:ad,nextConfig:ae,interceptionRoutePatterns:af}=P,ag=T.pathname||"/",ah=(0,s.normalizeAppPath)(H),{isOnDemandRevalidate:ai}=P,aj=L.match(ag,_),ak=!!_.routes[ab],al=!!(aj||ak||_.routes[ah]),am=a.headers["user-agent"]||"",an=(0,v.getBotType)(am),ao=(0,q.isHtmlBotRequest)(a),ap=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aq=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[u.RSC_HEADER]),ar=(0,t.getIsPossibleServerAction)(a),as=(0,m.checkIsAppPPREnabled)(ae.experimental.ppr)&&(null==(D=_.routes[ah]??_.dynamicRoutes[ah])?void 0:D.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?N:void 0,aw=as&&aq&&!ap,ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=!am||(0,q.shouldServeStreamingMetadata)(am,ae.htmlLimitedBots);ao&&as&&(al=!1,ay=!1);let az=!0===L.isDev||!al||"string"==typeof N||aw,aA=ao&&as,aB=null;aa||!al||az||ar||av||aw||(aB=ab);let aC=aB;!aC&&L.isDev&&(aC=ab),L.isDev||aa||!al||!aq||aw||(0,k.d)(a.headers);let aD={...F,tree:I,pages:J,GlobalError:E(),handler:M,routeModule:L,__next_app__:K};Y&&Z&&(0,p.setReferenceManifestsSingleton)({page:H,clientReferenceManifest:Z,serverActionsManifest:Y,serverModuleMap:(0,r.createServerModuleMap)({serverActionsManifest:Y})});let aE=a.method||"GET",aF=(0,g.getTracer)(),aG=aF.getActiveScopeSpan();try{let f=L.getVaryHeader(ab,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return L.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aF.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aE} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aE} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aD,Component:(0,j.T)(aD),params:S,routeModule:L,page:H,postponed:f,shouldWaitOnAllReady:aA,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||az,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,subresourceIntegrityManifest:$,serverActionsManifest:Y,clientReferenceManifest:Z,setIsrStatus:null==ad?void 0:ad.setIsrStatus,dir:c(33873).join(process.cwd(),L.relativeProjectDir),isDraftMode:aa,isRevalidate:al&&!f&&!aw,botType:an,isOnDemandRevalidate:ai,isPossibleServerAction:ar,assetPrefix:ae.assetPrefix,nextConfigOutput:ae.output,crossOrigin:ae.crossOrigin,trailingSlash:ae.trailingSlash,previewProps:_.preview,deploymentId:ae.deploymentId,enableTainting:ae.experimental.taint,htmlLimitedBots:ae.htmlLimitedBots,devtoolSegmentExplorer:ae.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ae.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ae.experimental.cacheLife,basePath:ae.basePath,serverActions:ae.experimental.serverActions,...at?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:at}:{},experimental:{isRoutePPREnabled:as,expireTime:ae.expireTime,staleTimes:ae.experimental.staleTimes,cacheComponents:!!ae.experimental.cacheComponents,clientSegmentCache:!!ae.experimental.clientSegmentCache,clientParamParsing:!!ae.experimental.clientParamParsing,dynamicOnHover:!!ae.experimental.dynamicOnHover,inlineCss:!!ae.experimental.inlineCss,authInterrupts:!!ae.experimental.authInterrupts,clientTraceMetadata:ae.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>L.onRequestError(a,b,d,ad),err:(0,h.getRequestMeta)(a,"invokeError"),dev:L.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[z.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,al&&(null==n?void 0:n.revalidate)===0&&!L.isDev&&!as){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ab}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
|
|
2
|
-
see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:w.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},n=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===L.isDev,l=c||b.writableEnded;if(ai&&ac&&!f&&!O)return(null==ad?void 0:ad.render404)?await ad.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(j=(0,x.parseFallbackField)(aj.fallback)),j===x.FallbackMode.PRERENDER&&(0,v.isBot)(am)&&(!as||ao)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(j!==x.FallbackMode.NOT_FOUND||f)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),!O&&j!==x.FallbackMode.BLOCKING_STATIC_RENDER&&aC&&!l&&!aa&&U&&(k||!ak)){let b;if((k||aj)&&j===x.FallbackMode.NOT_FOUND)throw new C.NoFallbackError;if(as&&!aq){let c="string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:k?ah:null;if(b=await L.handleResponse({cacheKey:c,req:a,nextConfig:ae,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:_,isRoutePPREnabled:as,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||au?(0,o.u)(ah):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let n=ai||g||!av?void 0:av;if(at&&void 0!==n)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:w.CachedRouteKind.PAGES,html:y.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=U&&as&&((0,h.getRequestMeta)(a,"renderFallbackShell")||au)?(0,o.u)(ag):null;return m({span:i,postponed:n,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,o=await L.handleResponse({cacheKey:aB,responseGenerator:a=>n({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ae,prerenderManifest:_,waitUntil:d.waitUntil});if(aa&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),L.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!o){if(aB)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=o.value)?void 0:f.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=o.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof o.value.postponed;al&&!aw&&(!p||ap)&&(O||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":o.isMiss?"MISS":o.isStale?"STALE":"HIT"),b.setHeader(u.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=o;if(av)l={revalidate:0,expire:void 0};else if(O&&aq&&!ap&&as)l={revalidate:0,expire:void 0};else if(!L.isDev)if(aa)l={revalidate:0,expire:void 0};else if(al){if(o.cacheControl)if("number"==typeof o.cacheControl.revalidate){if(o.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${o.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:o.cacheControl.revalidate,expire:(null==(j=o.cacheControl)?void 0:j.expire)??ae.expireTime}}else l={revalidate:z.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(o.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===w.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[z.NEXT_CACHE_TAGS_HEADER];O&&al&&c&&"string"==typeof c&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(d,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.EMPTY,cacheControl:o.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...o,value:{...o.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&av)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(O&&al||delete a[z.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[z.NEXT_CACHE_TAGS_HEADER];if(O&&al&&s&&"string"==typeof s&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,s),!q.status||aq&&as||(b.statusCode=q.status),!O&&q.status&&G.RedirectStatusCode[q.status]&&aq&&(b.statusCode=200),p&&b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"1"),aq&&!aa){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:q.html,cacheControl:aw?{revalidate:0,expire:void 0}:o.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(q.rscData,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl})}let t=q.html;if(!p||O||aq)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:o.cacheControl});if(at)return t.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}});let v=new TransformStream;return t.push(v.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(v.writable)}).catch(a=>{v.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}})};if(!aG)return await aF.withPropagatedContext(a.headers,()=>aF.trace(i.BaseServerSpan.handleRequest,{spanName:`${aE} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aE,"http.target":a.url}},p));await p(aG)}catch(b){throw b instanceof C.NoFallbackError||await L.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:al,isOnDemandRevalidate:ai})},ad),b}}},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},71553:a=>{"use strict";a.exports=require("node:dns/promises")},73024:a=>{"use strict";a.exports=require("node:fs")},73136:a=>{"use strict";a.exports=require("node:url")},76760:a=>{"use strict";a.exports=require("node:path")},77030:a=>{"use strict";a.exports=require("node:net")},77598:a=>{"use strict";a.exports=require("node:crypto")},78608:a=>{"use strict";a.exports=require("exceljs")},80099:a=>{"use strict";a.exports=require("node:sqlite")},83237:a=>{"use strict";a.exports=import("playwright")},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},86893:(a,b,c)=>{"use strict";c.d(b,{hI:()=>g,iN:()=>f,pp:()=>i,qs:()=>h});var d=c(75338),e=c(35271);function f({kicker:a="madarX OS v1.0",title:b,description:c,actions:f,hideProjectSwitcher:g,children:h}){return(0,d.jsxs)("main",{className:"admin-shell",children:[(0,d.jsxs)("header",{className:"admin-header",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("span",{className:"admin-kicker",children:a}),(0,d.jsx)("h1",{children:b}),c?(0,d.jsx)("p",{children:c}):null]}),(0,d.jsxs)("div",{className:"admin-header-actions",children:[g?null:(0,d.jsx)(e.default,{}),f]})]}),h]})}function g({label:a,value:b,tone:c}){return(0,d.jsxs)("div",{className:`admin-stat ${c||""}`,children:[(0,d.jsx)("b",{children:b}),(0,d.jsx)("span",{children:a})]})}function h({children:a,tone:b="neutral"}){return(0,d.jsx)("span",{className:`admin-pill ${b}`,children:a})}function i({title:a,children:b}){return(0,d.jsxs)("div",{className:"admin-empty",children:[(0,d.jsx)("b",{children:a}),(0,d.jsx)("p",{children:b})]})}},94657:(a,b,c)=>{"use strict";c.d(b,{default:()=>f});var d=c(21124),e=c(38301);function f(){let[a,b]=(0,e.useState)([]),[c,f]=(0,e.useState)("");return(0,d.jsx)("div",{className:"project-switcher","data-project-switcher":!0,children:(0,d.jsxs)("select",{value:c,onChange:a=>{var b;f(b=a.target.value),b?localStorage.setItem("madarx.activeProjectId",b):localStorage.removeItem("madarx.activeProjectId"),window.dispatchEvent(new CustomEvent("madarx:project-change",{detail:{project_id:b||null}}))},"aria-label":"Active project",children:[(0,d.jsx)("option",{value:"",children:"All projects"}),a.map(a=>(0,d.jsx)("option",{value:a.id,children:a.name},a.id))]})})}}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,3940,3676,1699,3230,6059],()=>b(b.s=62433));module.exports=c})();
|