madarx 2.12.1 → 2.14.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 +277 -284
- package/.next/standalone/.next/app-path-routes-manifest.json +67 -68
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- 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 +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 +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 +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.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 +1 -1
- 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 +2 -2
- 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 +1 -1
- 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 +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 +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 +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 +28 -28
- 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 +1 -1
- 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 +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/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 +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 +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_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.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 +67 -68
- package/.next/standalone/.next/server/chunks/1699.js +28 -28
- 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/chunks/{3784.js → 6474.js} +1 -1
- package/.next/standalone/.next/server/functions-config-manifest.json +24 -24
- 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/-LlttjOnKZXGqZXDKcj-4/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/page-09e5c527e3ba83e2.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/CHANGELOG.md +31 -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 +4 -1
- package/.next/standalone/workspace/agents/ops-agent/skills.md +24 -0
- package/.next/standalone/workspace/agents/tool-smith-agent/skills.md +24 -0
- package/.next/static/-LlttjOnKZXGqZXDKcj-4/_buildManifest.js +1 -0
- package/.next/static/chunks/app/projects/page-09e5c527e3ba83e2.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/CHANGELOG.md +31 -0
- package/ai-docs/process-engine.md +33 -1
- package/app/api/processes/start-and-route/route.js +5 -3
- 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/banner.js +200 -21
- package/lib/cli/run.js +33 -11
- package/lib/cli/splash.js +120 -0
- package/lib/marketplace-seeds.js +141 -3
- 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 +52 -3
- package/lib/seeds.js +5 -1
- package/lib/tools/registry.js +20 -0
- package/package.json +4 -1
- package/scripts/postbuild-standalone.mjs +9 -0
- package/scripts/postinstall-splash.mjs +81 -0
- package/scripts/preview-banner.mjs +24 -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/static/BTzAhaVl8-xEC5Te-d7Ns/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/app/projects/page-7b6c6e010183e070.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/static/BTzAhaVl8-xEC5Te-d7Ns/_buildManifest.js +0 -1
- package/.next/static/chunks/app/projects/page-7b6c6e010183e070.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/app/workflows/new/new-case-flow.jsx +0 -256
- package/app/workflows/new/page.js +0 -27
- /package/.next/standalone/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → -LlttjOnKZXGqZXDKcj-4}/_ssgManifest.js +0 -0
- /package/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → -LlttjOnKZXGqZXDKcj-4}/_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
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "madarx",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.14.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",
|
|
@@ -44,6 +44,9 @@
|
|
|
44
44
|
"prepublishOnly": "npm run build",
|
|
45
45
|
"build": "NODE_OPTIONS=--no-warnings next build",
|
|
46
46
|
"postbuild": "node --no-warnings scripts/postbuild-standalone.mjs",
|
|
47
|
+
"postinstall": "node --no-warnings scripts/postinstall-splash.mjs",
|
|
48
|
+
"splash": "MADARX_FORCE_SPLASH=1 FORCE_COLOR=1 node --no-warnings scripts/postinstall-splash.mjs",
|
|
49
|
+
"banner": "FORCE_COLOR=1 node --no-warnings scripts/preview-banner.mjs",
|
|
47
50
|
"start": "next start -p 8787 -H 127.0.0.1",
|
|
48
51
|
"test": "node --no-warnings --test tests/*.test.js",
|
|
49
52
|
"daemon": "node --no-warnings --env-file-if-exists=.env.local scripts/cron-daemon.mjs",
|
|
@@ -9,3 +9,27 @@ Run safe daily operations checks for madarX OS, inspect local workspace state, s
|
|
|
9
9
|
- Save every output as a local artifact under your project's artifacts folder (workspace/projects/<slug>/artifacts/).
|
|
10
10
|
- Hand off any external send, post, deployment, or destructive command to the main agent for approval.
|
|
11
11
|
- After each run, update heartbeat.json with status, summary, and next-run plan.
|
|
12
|
+
|
|
13
|
+
## Default skills
|
|
14
|
+
|
|
15
|
+
You ship with these ready-to-use business skills. Reach for them by intent;
|
|
16
|
+
each is backed by your enabled tools and stays within the usual approval gates.
|
|
17
|
+
|
|
18
|
+
### Research
|
|
19
|
+
- **Market Research** (`/research`) — Research any market, company, or topic across the web and deliver a cited, structured brief. _Tools: web_search, web_fetch, file_write._
|
|
20
|
+
- **Competitor Watch** (`/watch`) — Track competitor pricing, features, and news on a schedule and alert you when something changes. _Tools: web_fetch, web_extract, email_send._
|
|
21
|
+
|
|
22
|
+
### Comms
|
|
23
|
+
- **Inbox Triage** (`/inbox`) — Summarize, prioritize, and draft replies across your inbox so you act on what matters first. _Tools: gmail_messages_list, gmail_thread_read, email_send._
|
|
24
|
+
- **Meeting Scheduler** (`/schedule-meeting`) — Find times, schedule meetings, and send invites from your calendar and email. _Tools: calendar_events_list, calendar_event_read, email_send._
|
|
25
|
+
|
|
26
|
+
### Documents
|
|
27
|
+
- **Document Extraction** (`/extract`) — Pull structured data and key facts from PDFs, documents, and audio into clean, usable output. _Tools: file_read, transcribe_audio, file_write._
|
|
28
|
+
- **Report Builder** (`/report`) — Turn raw data and notes into a polished, formatted report or one-pager ready to share. _Tools: file_read, file_write._
|
|
29
|
+
|
|
30
|
+
### Data
|
|
31
|
+
- **Database Q&A** (`/ask-data`) — Ask questions of your database in plain English and get answers, tables, and charts. _Tools: supabase_rest_select, supabase_sql._
|
|
32
|
+
- **Spreadsheet Analysis** (`/analyze-sheet`) — Clean, analyze, and summarize spreadsheets and CSVs — pivots, trends, and outliers. _Tools: file_read, file_write._
|
|
33
|
+
|
|
34
|
+
### Web
|
|
35
|
+
- **Web Automation** (`/automate-web`) — Fill forms, extract data, and run repetitive flows in a real browser, end to end. _Tools: browser_open, browser_act, browser_extract._
|
|
@@ -9,3 +9,27 @@ Authors reusable capabilities for the marketplace — declarative skills, compos
|
|
|
9
9
|
- Save every output as a local artifact under your project's artifacts folder (workspace/projects/<slug>/artifacts/).
|
|
10
10
|
- Hand off any external send, post, deployment, or destructive command to the main agent for approval.
|
|
11
11
|
- After each run, update heartbeat.json with status, summary, and next-run plan.
|
|
12
|
+
|
|
13
|
+
## Default skills
|
|
14
|
+
|
|
15
|
+
You ship with these ready-to-use business skills. Reach for them by intent;
|
|
16
|
+
each is backed by your enabled tools and stays within the usual approval gates.
|
|
17
|
+
|
|
18
|
+
### Research
|
|
19
|
+
- **Market Research** (`/research`) — Research any market, company, or topic across the web and deliver a cited, structured brief. _Tools: web_search, web_fetch, file_write._
|
|
20
|
+
- **Competitor Watch** (`/watch`) — Track competitor pricing, features, and news on a schedule and alert you when something changes. _Tools: web_fetch, web_extract, email_send._
|
|
21
|
+
|
|
22
|
+
### Comms
|
|
23
|
+
- **Inbox Triage** (`/inbox`) — Summarize, prioritize, and draft replies across your inbox so you act on what matters first. _Tools: gmail_messages_list, gmail_thread_read, email_send._
|
|
24
|
+
- **Meeting Scheduler** (`/schedule-meeting`) — Find times, schedule meetings, and send invites from your calendar and email. _Tools: calendar_events_list, calendar_event_read, email_send._
|
|
25
|
+
|
|
26
|
+
### Documents
|
|
27
|
+
- **Document Extraction** (`/extract`) — Pull structured data and key facts from PDFs, documents, and audio into clean, usable output. _Tools: file_read, transcribe_audio, file_write._
|
|
28
|
+
- **Report Builder** (`/report`) — Turn raw data and notes into a polished, formatted report or one-pager ready to share. _Tools: file_read, file_write._
|
|
29
|
+
|
|
30
|
+
### Data
|
|
31
|
+
- **Database Q&A** (`/ask-data`) — Ask questions of your database in plain English and get answers, tables, and charts. _Tools: supabase_rest_select, supabase_sql._
|
|
32
|
+
- **Spreadsheet Analysis** (`/analyze-sheet`) — Clean, analyze, and summarize spreadsheets and CSVs — pivots, trends, and outliers. _Tools: file_read, file_write._
|
|
33
|
+
|
|
34
|
+
### Web
|
|
35
|
+
- **Web Automation** (`/automate-web`) — Fill forms, extract data, and run repetitive flows in a real browser, end to end. _Tools: browser_open, browser_act, browser_extract._
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:140,errorRate:1e-4,numBits:2684,numHashes:14,bitArray:[0,1,1,e,e,0,e,r,r,e,r,r,e,r,r,r,e,e,r,r,r,r,e,e,e,e,e,e,r,r,e,e,e,e,e,r,r,r,e,e,r,e,r,e,e,r,r,e,r,r,r,r,e,e,e,r,r,r,e,e,r,e,e,e,r,r,e,r,e,e,e,r,e,e,r,e,e,r,e,e,e,e,e,e,r,e,r,r,r,r,r,r,r,e,e,e,r,r,e,r,r,r,r,r,e,r,e,r,e,r,e,e,e,r,r,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,e,e,r,e,e,r,e,e,r,e,e,e,e,r,r,e,e,e,e,r,e,e,r,e,e,e,e,e,r,e,e,r,e,r,e,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,r,r,r,e,r,e,r,r,e,r,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,e,e,r,e,e,e,e,e,e,e,e,r,e,e,e,r,e,e,e,r,r,r,e,e,r,e,e,e,e,r,e,r,e,e,e,r,e,r,r,e,e,r,r,r,r,r,e,r,r,e,e,e,r,r,e,e,r,r,r,e,r,r,e,e,e,e,e,e,e,r,r,e,r,r,r,e,e,r,r,e,e,e,e,e,r,e,r,e,e,e,e,e,e,e,e,e,r,r,e,e,e,e,e,r,r,e,r,e,r,e,e,r,r,r,e,e,r,e,r,r,r,r,r,e,e,r,e,e,r,e,r,e,r,r,r,r,e,r,e,r,r,r,r,r,e,r,r,r,e,e,r,r,r,e,r,e,r,e,e,r,r,r,r,r,e,e,r,e,r,r,r,e,r,r,r,e,e,e,r,e,r,e,r,e,r,r,r,e,e,e,r,e,r,e,r,e,e,e,e,e,e,r,e,e,e,r,e,r,e,r,r,e,e,r,r,r,r,r,e,e,r,r,r,r,r,e,e,r,r,r,e,r,r,e,r,r,e,e,e,r,e,r,e,e,e,e,e,e,r,e,r,r,e,e,r,r,r,r,r,e,e,e,e,r,r,e,e,e,r,r,r,e,e,e,r,r,e,r,r,r,r,e,r,r,r,r,e,r,r,r,r,e,e,e,e,r,r,e,e,e,e,r,e,e,r,r,e,r,e,e,e,r,e,e,r,e,r,r,r,r,r,e,e,r,r,e,r,e,e,r,e,e,e,r,r,e,r,e,e,e,e,e,e,e,e,r,r,e,r,r,r,e,r,r,r,r,r,r,r,e,r,e,e,r,e,e,e,r,e,r,r,e,e,r,r,e,e,e,e,e,e,r,r,e,e,r,e,r,e,e,r,r,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,e,e,r,r,r,r,e,r,e,e,e,r,e,e,e,r,e,r,r,e,e,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,r,r,r,e,r,r,e,e,e,e,e,r,r,e,e,e,r,e,r,e,r,r,r,r,r,e,r,r,r,r,e,r,e,r,r,e,r,e,e,r,r,e,e,r,e,r,r,e,e,r,r,r,r,e,e,e,r,r,r,e,r,r,e,r,r,e,r,r,r,r,r,r,r,r,r,r,e,e,e,e,e,r,e,r,r,r,e,e,r,r,r,e,r,e,r,e,e,r,e,r,e,r,e,r,e,e,r,e,r,r,e,r,e,r,r,r,r,r,e,r,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,e,e,r,r,e,e,r,e,r,r,r,r,r,e,r,e,e,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,r,e,e,r,r,r,e,r,r,r,r,r,r,e,e,r,e,r,e,e,e,r,e,r,r,e,e,e,e,r,e,r,r,r,e,r,e,e,r,e,e,e,r,r,e,r,r,e,e,e,e,e,e,e,e,r,r,e,e,e,e,e,r,r,r,r,e,r,e,e,r,r,r,e,r,e,r,e,e,e,e,e,e,e,e,e,e,r,r,e,e,r,e,e,e,e,r,r,e,e,e,e,r,r,r,e,e,r,e,e,e,r,e,r,e,r,r,e,r,r,e,e,e,e,r,r,e,r,r,r,e,e,r,e,r,r,r,e,e,r,e,r,e,r,e,e,e,e,r,e,r,r,e,r,r,r,r,e,e,r,e,e,r,r,e,r,e,e,r,r,e,r,e,r,e,e,e,e,r,e,r,r,e,e,r,e,e,e,e,e,e,e,e,r,r,e,r,r,e,r,r,e,r,e,r,r,r,r,e,r,e,r,e,e,r,r,e,r,r,r,r,e,r,e,e,r,e,e,r,r,r,r,e,e,r,e,e,r,r,e,r,e,r,e,r,e,r,e,e,e,e,e,e,e,e,e,e,e,e,e,r,e,e,r,e,e,r,e,e,e,r,r,e,e,r,r,r,e,e,e,e,r,e,e,r,r,r,e,e,r,e,e,e,r,e,e,e,e,e,r,r,e,e,r,e,r,r,e,e,e,e,e,e,r,e,r,e,r,e,e,r,e,e,e,e,r,e,r,r,e,e,r,r,e,e,r,e,r,e,r,e,e,e,r,e,e,r,e,r,e,r,r,e,r,r,e,e,r,r,e,e,r,e,e,e,r,e,r,r,e,r,e,r,r,e,r,r,e,e,r,e,e,e,e,r,e,e,e,e,e,r,r,e,e,e,r,r,r,e,e,e,r,r,e,r,e,r,r,r,e,e,e,r,e,e,e,r,r,r,r,e,r,e,r,r,e,r,r,e,r,e,r,r,r,e,r,r,r,r,r,e,e,r,e,r,e,r,e,e,e,e,e,e,r,r,r,r,e,e,r,r,r,e,r,r,e,e,r,e,e,r,e,e,r,r,r,r,r,r,e,e,r,e,e,e,r,e,r,r,r,r,e,r,r,e,e,r,e,e,e,e,e,e,r,r,r,e,e,e,r,r,e,e,e,r,e,e,e,e,e,r,r,r,r,e,e,e,r,r,e,r,r,e,e,r,r,e,r,e,r,r,e,e,r,r,r,e,e,r,r,r,e,e,e,e,r,e,e,e,e,r,r,r,r,e,r,r,r,e,r,r,e,r,r,r,e,r,e,e,e,r,e,r,e,r,e,r,e,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,e,r,r,e,r,r,r,r,r,e,r,r,e,r,e,r,e,r,r,e,r,e,e,e,e,r,e,r,r,r,e,r,e,r,r,e,e,e,r,r,r,e,r,e,r,e,e,e,e,e,r,r,r,r,e,e,r,r,r,e,r,r,e,r,r,r,e,r,r,r,r,r,r,r,r,e,e,e,r,r,r,e,e,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,e,e,e,e,r,e,e,r,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,r,r,r,r,e,r,e,e,r,r,e,r,e,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,e,e,e,r,r,r,e,e,e,r,e,r,e,e,r,e,r,e,r,r,r,e,e,r,r,e,e,r,r,e,r,r,e,e,e,e,e,r,e,e,e,e,r,r,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,r,r,r,e,e,r,e,e,r,e,r,e,r,e,r,e,r,e,e,r,r,r,r,e,r,r,e,e,r,r,e,r,r,e,r,r,r,r,r,e,e,e,r,r,e,e,r,r,e,r,r,e,e,r,r,e,e,r,e,r,r,r,r,e,e,e,r,e,r,e,e,r,r,r,r,e,r,r,e,e,e,r,e,e,e,r,e,e,r,e,e,e,e,e,r,e,r,e,r,e,r,e,r,r,e,e,e,r,e,r,e,r,r,r,e,e,e,e,e,e,r,e,e,r,e,r,e,e,e,r,r,r,e,e,e,r,e,e,r,r,e,e,r,e,r,e,e,e,e,e,r,r,e,e,r,r,e,e,r,e,r,r,e,e,r,r,r,r,e,r,r,e,e,e,e,r,r,e,e,e,e,e,e,r,e,e,e,e,r,e,r,r,r,e,e,e,e,e,r,e,e,e,r,e,r,e,e,r,r,e,e,r,r,r,e,r,e,r,e,e,e,r,r,r,e,e,r,e,r,r,e,e,e,r,e,r,r,r,r,e,e,r,r,e,r,r,r,r,r,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,e,r,r,r,r,r,e,r,e,r,e,e,r,e,e,e,r,r,r,r,r,r,e,r,e,r,r,e,e,e,e,r,e,e,e,r,e,e,r,e,r,r,e,r,r,r,r,r,e,r,r,e,r,r,e,r,e,r,e,r,e,e,e,e,r,r,e,r,e,r,r,r,e,e,r,r,e,r,e,r,e,e,r,r,e,e,e,e,e,r,e,r,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,e,r,r,r,r,r,e,e,e,r,r,e,e,r,r,e,r,e,e,e,r,r,r,r,r,r,r,r,e,r,r,r,r,r,r,e,e,r,e,r,e,r,e,r,e,e,e,e,r,r,e,r,r,e,e,r,r,e,e,e,r,e,e,e,r,r,e,e,e,r,e,e,r,e,e,e,e,e,r,r,e,r,e,r,r,r,r,r,e,e,r,r,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,e,r,e,e,r,e,r,e,e,e,r,e,e,e,e,r,e,e,r,r,e,r,r,r,e,e,r,e,r,r,e,e,e,e,r,e,e,r,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,e,e,r,r,e,e,e,e,r,r,e,e,r,e,r,r,e,e,r,e,e,r,e,r,e,r,r,r,e,r,r,e,e,r,e,e,e,r,r,r,r,e,e,e,r,r,e,e,e,e,r,e,r,e,r,e,r,r,r,r,r,e,r,r,r,e,r,r,e,e,r,r,r,e,e,r,e,r,r,r,r,e,e,e,r,e,e,e,r,r,r,e,r,e,r,e,r,r,e,r,e,e,e,e,r,r,r,r,r,r,r,e,e,e,e,e,e,r,r,r,e,r,r,e,e,r,e,e,e,e,e,r,r,r,r,r,e,r,r,r,r,r,r,e,e,e,r,r,e,e,e,r,e,e,r,e,e,r,e,r,e,e,e,e,e,e,e,r,e,e,e,e,r,e,r,e,e,r,r,e,r,r,e,r,r,r,e,e,e,e,e,r,e,r,r,e,e,e,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,r,e,r,e,e,r,r,e,r,r,e,e,e,e,r,e,e,e,r,e,e,r,r,r,r,r,r,e,e,r,e,r,e,r,r,r,e,r,e,e,e,e,e,r,e,r,e,e,r,r,e,r,r,r,r,r,e,e,r,e,r,e,r,e,r,e,e,e,e,r,r,e,e,r,e,e,e,r,e,r,r,e,e,r,r,e,r,r,r,r,r,e,e,e,r,r,r,e,r,r,r,e,r,e,e,e,r,e,r,e,e,e,r,e,r,e,e,e,e,r,e,r,e,r,r,e,e,r,r,r,r,r,r,e,e,e,r,e,r,e,e,e,r,e,e,r,e,e,r,r,e,r,r,e,e,e,e,e,r,r,e,e,r,r,r,e,e,r,e,e,e,e,e,r,r,e,r,e,e,r,r,e,r,e,e,r,e,r,r,e,e,e,e,r,e,r,e,r,e,e,e,e,e,e,r,e,e,r,r,e,e,e,r,r,e,e,e,e,e,e,r,r,e,r,r,r,r,r,r,r,e,e,r,e,r,e,r,r,e,e,e,e,e,e,e,r,r,r,r,e,r,e,e,e,e,e,e,e,e,e,r,r,r,e,r]},__routerFilterDynamic:{numItems:39,errorRate:1e-4,numBits:748,numHashes:14,bitArray:[r,e,r,r,e,e,e,e,r,r,r,e,r,r,e,r,e,r,e,r,e,e,r,e,e,r,e,e,e,e,r,r,e,r,e,r,e,r,e,r,e,e,e,r,r,r,r,r,e,r,r,r,e,e,r,e,e,r,r,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,e,r,r,e,r,e,e,e,e,e,e,r,e,e,r,r,r,e,e,e,r,e,r,e,r,r,e,r,e,r,e,e,e,r,e,e,e,e,r,r,e,e,r,r,e,r,r,r,r,e,e,r,e,e,e,r,e,e,e,r,r,r,r,r,e,r,r,r,r,e,r,e,e,r,r,e,e,r,e,r,e,r,r,r,r,r,e,r,r,e,r,e,r,r,e,r,r,e,e,e,e,e,r,r,r,e,r,r,e,e,r,r,e,e,e,r,r,e,r,e,e,e,r,r,e,e,r,e,r,r,e,r,e,e,e,e,e,r,r,r,e,r,r,r,e,r,e,e,e,r,e,e,e,e,r,e,r,e,e,r,e,e,r,e,e,r,r,r,r,e,e,r,e,r,r,r,e,e,r,r,r,r,e,e,r,r,e,r,r,r,e,e,e,r,r,e,e,r,e,e,e,e,e,e,e,r,r,e,r,e,r,e,e,r,r,r,r,r,r,r,e,r,r,e,r,r,e,r,e,e,r,e,e,e,e,r,r,e,r,e,e,r,r,r,e,e,e,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,r,e,e,e,r,r,e,r,e,r,r,e,r,e,r,e,e,e,r,e,e,r,r,r,r,r,r,r,r,e,e,e,e,r,r,e,r,e,e,r,r,e,e,r,e,e,r,e,e,e,e,e,e,e,r,r,e,e,e,r,r,e,e,r,r,e,e,r,r,r,r,r,r,r,r,e,e,r,r,r,e,e,r,r,e,e,e,e,r,r,e,r,r,r,r,r,r,e,r,e,r,e,e,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,e,e,r,r,r,r,e,r,r,e,r,r,r,e,e,e,e,r,e,e,e,e,r,r,r,r,r,e,e,e,r,e,e,e,e,r,r,e,r,r,r,e,r,r,e,e,r,r,r,e,e,e,r,r,r,e,r,e,r,r,e,r,e,e,e,e,e,r,r,e,r,r,e,r,e,r,e,r,e,r,e,r,r,r,e,r,e,e,r,r,e,e,r,r,e,e,e,e,r,r,r,e,r,r,e,e,e,e,e,e,e,r,e,r,e,e,r,e,r,e,r,r,e,r,e,e,e,e,e,e,r,r,e,e,r,r,e,e,e,e,e,e,r,e,r,e,e,r,r,r,r,e,r,e,e,e,e,r,r,r,r,e,e,e,r,e,r,r,r,r,e,e,r,e,r,r,r,e,r,e,e,r,e,r,r,e,e,e,r,r,r,r,e,r,r,r,e,r,e,e,r,e,e,r,e,r,r,r,e,r,r,e,e,e,r,e,r,e,e,e,e,r,e,e,e,e,e,e,e,e,r,e,e,r,r,r,r,e,r,e,e,e,r,r,e,r,e,e,r,e,e,e,e,r,e,r,e,e,r,e,e,e,e,e,r,e,e,e,r,e,r,r,e,r,e,e,e,e,r,r,r,e,e,r,e,e,r,e,r,e,r,r]},"/_error":["static/chunks/pages/_error-c970d8b55ace1b48.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
|
@@ -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(12115),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(64250);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]])})},5007:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(95155),n=t(12115),l=t(47650),r=t(85649),o=t(30926);let c=(0,o.createServerReference)("40b250a7023e1ea42d3b1c45a9b04d2d813b0ff025",o.callServer,void 0,o.findSourceMapURL,"updateProjectAction");var i=t(59097);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,{})]})]})})]})}},10677:(e,a,t)=>{"use strict";t.d(a,{default:()=>l});var s=t(95155),n=t(12115);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))]})})}},13185:(e,a,t)=>{"use strict";t.d(a,{A:()=>o});var s=t(12115),n=t(64250);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}},30926:(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(41209),n=t(85153),l=t(77197)},34788:(e,a,t)=>{"use strict";t.d(a,{A:()=>s});let s=(0,t(13185).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},43647:(e,a,t)=>{"use strict";t.d(a,{default:()=>m});var s=t(95155),n=t(12115),l=t(47650),r=t(85649),o=t(30926);let c=(0,o.createServerReference)("409dc1b44080f7a02c3ff6d5b6c4e8cb749d130a32",o.callServer,void 0,o.findSourceMapURL,"createProjectAction");var i=t(59097);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,{})]})]})})]})}},51301:(e,a,t)=>{"use strict";t.d(a,{default:()=>d});var s=t(95155),n=t(12115),l=t(47650),r=t(85649),o=t(30926);let c=(0,o.createServerReference)("401b4146db1fef872f202822dba0741afe77ced665",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})]})]})})]})}},59097:(e,a,t)=>{"use strict";t.d(a,{A:()=>l});var s=t(95155),n=t(12115);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]})}},64250:(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()}},85649:(e,a,t)=>{"use strict";t.d(a,{A:()=>r});var s=t(95155),n=t(12115),l=t(34788);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})}},99168:(e,a,t)=>{Promise.resolve().then(t.bind(t,10677)),Promise.resolve().then(t.bind(t,51301)),Promise.resolve().then(t.bind(t,5007)),Promise.resolve().then(t.bind(t,43647)),Promise.resolve().then(t.t.bind(t,52619,23))}},e=>{e.O(0,[2619,8441,1255,7358],()=>e(e.s=99168)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3427],{10677:(e,a,t)=>{"use strict";t.d(a,{default:()=>l});var s=t(95155),n=t(12115);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))]})})}},20063:(e,a,t)=>{"use strict";var s=t(47260);t.o(s,"usePathname")&&t.d(a,{usePathname:function(){return s.usePathname}}),t.o(s,"useRouter")&&t.d(a,{useRouter:function(){return s.useRouter}}),t.o(s,"useSearchParams")&&t.d(a,{useSearchParams:function(){return s.useSearchParams}})},22157:(e,a,t)=>{"use strict";t.d(a,{default:()=>j});var s=t(95155),n=t(12115),l=t(20063),r=t(55799);let i={intake:"neutral",running:"info",awaiting_approval:"warning",complete:"success",rejected:"danger",failed:"danger",cancelled:"neutral"},c={intake:"Intake",running:"Running",awaiting_approval:"Awaiting approval",complete:"Complete",rejected:"Rejected",failed:"Failed",cancelled:"Cancelled"},d={queued:"neutral",running:"info",awaiting_approval:"warning",pass:"success",fail:"danger",skipped:"neutral",cancelled:"neutral"},o=new Set(["complete","rejected","failed","cancelled"]);function u(e){return e?new Date(e).toLocaleString():"—"}function h(e){let{artifact:a}=e;if(!a)return null;let t="html"===a.kind;return(0,s.jsxs)("li",{className:"case-artifact-card",children:[(0,s.jsxs)("div",{className:"case-artifact-card-meta",children:[(0,s.jsx)("span",{className:"case-artifact-title",children:a.title||a.path}),(0,s.jsxs)("span",{className:"muted",children:[" \xb7 ",a.kind]})]}),t?(0,s.jsx)("iframe",{title:a.title||a.id,src:"/api/artifacts/".concat(a.id,"/raw"),sandbox:"allow-scripts",loading:"lazy"}):null]})}function m(e){let{title:a,label:t,artifact:n,helpText:l}=e,r=(null==n?void 0:n.kind)==="html";return(0,s.jsxs)("div",{className:"intake-artifact-card",children:[(0,s.jsxs)("header",{children:[(0,s.jsx)("h4",{children:t}),(0,s.jsx)("span",{className:"muted",children:(null==n?void 0:n.title)||""})]}),r?(0,s.jsx)("iframe",{title:a,src:"/api/artifacts/".concat(n.id,"/raw"),sandbox:"allow-scripts",loading:"lazy"}):(0,s.jsx)("p",{className:"muted",children:"Artifact content unavailable."}),l?(0,s.jsx)("small",{className:"muted",children:l}):null]})}function p(e){var a;let{caseRow:t,artifacts:n,latestExec:l}=e,r=null==t||null==(a=t.context)?void 0:a.intake_form_artifact_id,i=(null==l?void 0:l.artifact_ids)||[],c=n.find(e=>e.id===r),d=n.find(e=>i.includes(e.id)&&e.id!==r);return(0,s.jsxs)(s.Fragment,{children:[c?(0,s.jsx)(m,{title:"Intake form artifact",label:"Intake form artifact",artifact:c,helpText:"Artifact-first intake page \xb7 canonical presentation record for this case."}):null,t.intake_payload?null:(0,s.jsxs)("p",{children:["Intake form not submitted yet. Submit via"," ",(0,s.jsx)("a",{href:"/workflows/new/".concat(t.id),children:"the intake page"})," ","for this case."]}),d?(0,s.jsx)(m,{title:"Intake submission",label:"Intake submission",artifact:d,helpText:"Sensitive identifiers (passport / national IDs) are redacted in this artifact."}):null,t.intake_payload?(0,s.jsxs)("details",{className:"payload-card",children:[(0,s.jsx)("summary",{children:"Raw intake payload (engine state)"}),(0,s.jsx)("pre",{children:JSON.stringify(t.intake_payload,null,2)})]}):null]})}function f(e){let{artifacts:a}=e;return a&&0!==a.length?(0,s.jsxs)("section",{className:"case-artifacts-gallery",children:[(0,s.jsx)("h3",{children:"Case artifacts"}),(0,s.jsx)("p",{className:"muted",children:"Every workflow touchpoint is rendered as an HTML artifact. These artifacts are also visible in the project library."}),(0,s.jsx)("ul",{className:"case-artifact-list",children:a.map(e=>(0,s.jsx)(h,{artifact:e},e.id))})]}):null}function j(e){var a,t;let{caseRow:h,definition:m,stages:j,executions:x,approvals:g,artifacts:v}=e,N=(0,l.useRouter)(),[k,y]=(0,n.useState)(h),[w,_]=(0,n.useState)(x),[b,S]=(0,n.useState)(g),[P,C]=(0,n.useState)(v),[I,E]=(0,n.useState)(k.current_stage_slug||(null==(a=j[0])?void 0:a.slug)),[A,R]=(0,n.useState)(!1),[O,T]=(0,n.useState)(null);(0,n.useEffect)(()=>{if(o.has(k.status))return;let e=!1,a=setInterval(async()=>{try{var a;let t=await fetch("/api/processes/".concat(k.id));if(!t.ok)return;let s=await t.json();if(e)return;y(s.case),_(s.executions||[]),S(s.approvals||[]),C(s.artifacts||[]),(null==(a=s.case)?void 0:a.current_stage_slug)&&E(s.case.current_stage_slug)}catch(e){}},4e3);return()=>{e=!0,clearInterval(a)}},[k.id,k.status]);let q=(0,n.useMemo)(()=>(function(e){let a=new Map;for(let t of e){let e=a.get(t.stage_slug)||[];e.push(t),a.set(t.stage_slug,e)}return a})(w),[w]),J=(0,n.useMemo)(()=>j.find(e=>e.slug===I)||j[0],[j,I]);async function H(e){R(!0),T(null);try{let a=await fetch("/api/approvals/".concat(e),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({decision:"approved"})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error((null==e?void 0:e.error)||"approve failed")}}catch(e){T((null==e?void 0:e.message)||String(e))}finally{R(!1)}}async function M(e){R(!0),T(null);try{let a=await fetch("/api/approvals/".concat(e),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({decision:"denied"})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error((null==e?void 0:e.error)||"deny failed")}}catch(e){T((null==e?void 0:e.message)||String(e))}finally{R(!1)}}async function D(e){R(!0),T(null);try{let a=await fetch("/api/processes/".concat(k.id,"/stages/").concat(e,"/retry"),{method:"POST"});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error((null==e?void 0:e.error)||"retry failed")}}catch(e){T((null==e?void 0:e.message)||String(e))}finally{R(!1)}}async function F(){if(confirm("Cancel this case?")){R(!0);try{let e=await fetch("/api/processes/".concat(k.id),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({status:"cancelled"})});if(!e.ok){let a=await e.json().catch(()=>({}));throw Error((null==a?void 0:a.error)||"cancel failed")}N.refresh()}catch(e){T((null==e?void 0:e.message)||String(e))}finally{R(!1)}}}let L=q.get(null==J?void 0:J.slug)||[],z=L[L.length-1],U=b.find(e=>{var a;return"pending"===e.status&&(null==(a=e.payload)?void 0:a.stage_slug)===(null==J?void 0:J.slug)});return(0,s.jsxs)("div",{className:"case-detail","data-page":"case",children:[(0,s.jsxs)("header",{className:"case-header",children:[(0,s.jsx)(r.qs,{tone:i[k.status]||"neutral",children:c[k.status]||k.status}),(0,s.jsxs)("div",{className:"case-header-meta",children:[(0,s.jsxs)("span",{className:"muted",children:["Project: ",k.project_id]}),(0,s.jsxs)("span",{className:"muted",children:["Updated: ",u(k.updated_at)]})]}),o.has(k.status)?null:(0,s.jsx)("button",{className:"btn-tertiary",onClick:F,disabled:A,children:"Cancel case"})]}),O?(0,s.jsx)("p",{className:"form-error",role:"alert",children:O}):null,(0,s.jsxs)("div",{className:"case-grid",children:[(0,s.jsxs)("aside",{className:"case-timeline",children:[(0,s.jsx)("h3",{children:"Stages"}),(0,s.jsx)("ol",{children:j.map(e=>{let a=q.get(e.slug)||[],t=a[a.length-1],n=e.slug===(null==J?void 0:J.slug),l=e.slug===k.current_stage_slug,i=(null==t?void 0:t.status)||(l?"running":"pending");return(0,s.jsx)("li",{className:"stage-node ".concat(n?"active":""," ").concat(l?"current":""),"data-status":i,children:(0,s.jsxs)("button",{type:"button",onClick:()=>E(e.slug),children:[(0,s.jsx)("span",{className:"stage-name",children:e.name}),(0,s.jsx)("span",{className:"stage-kind muted",children:e.kind.replace("_"," ")}),(0,s.jsx)(r.qs,{tone:d[i]||"neutral",children:i})]})},e.id)})})]}),(0,s.jsx)("section",{className:"case-stage-panel",children:J?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("header",{children:[(0,s.jsx)("h3",{children:J.name}),(0,s.jsx)("span",{className:"muted",children:J.kind})]}),"intake_form"===J.kind?(0,s.jsx)(p,{caseRow:k,artifacts:P,latestExec:z}):null,"human_approval"===J.kind&&U?(0,s.jsxs)("div",{className:"approval-card",children:[(0,s.jsxs)("p",{children:[(0,s.jsx)("strong",{children:"Approval requested:"})," ",U.summary]}),(0,s.jsxs)("div",{className:"approval-actions",children:[(0,s.jsx)("button",{className:"btn-primary",onClick:()=>H(U.id),disabled:A,children:"Approve"}),(0,s.jsx)("button",{className:"btn-danger",onClick:()=>M(U.id),disabled:A,children:"Deny"})]}),(0,s.jsxs)("small",{className:"muted",children:["Risk: ",U.risk," \xb7 created ",u(U.created_at)]})]}):null,z?(0,s.jsxs)("div",{className:"exec-card",children:[(0,s.jsxs)("header",{children:[(0,s.jsx)("h4",{children:"Latest execution"}),(0,s.jsx)(r.qs,{tone:d[z.status]||"neutral",children:z.status}),z.attempt>1?(0,s.jsxs)("span",{className:"muted",children:["Attempt ",z.attempt]}):null]}),z.output?(0,s.jsxs)("details",{open:!0,children:[(0,s.jsx)("summary",{children:"Structured output"}),(0,s.jsx)("pre",{children:JSON.stringify(z.output,null,2)})]}):null,z.error?(0,s.jsxs)("p",{className:"form-error",children:["Error: ",z.error]}):null,"fail"===z.status?(0,s.jsx)("button",{className:"btn-secondary",onClick:()=>D(J.id),disabled:A,children:"Retry stage"}):null]}):(0,s.jsx)("p",{className:"muted",children:"No execution recorded yet."}),P.length&&((null==z||null==(t=z.artifact_ids)?void 0:t.length)||"package"===J.kind)?(0,s.jsxs)("div",{className:"artifacts-card",children:[(0,s.jsx)("h4",{children:"Stage artifacts"}),(0,s.jsx)("ul",{children:P.filter(e=>((null==z?void 0:z.artifact_ids)||[]).includes(e.id)).map(e=>(0,s.jsxs)("li",{children:[(0,s.jsx)("span",{className:"case-artifact-title",children:e.title||e.path}),(0,s.jsxs)("span",{className:"muted",children:[" \xb7 ",e.kind]})]},e.id))})]}):null]}):(0,s.jsx)("p",{children:"Pick a stage from the timeline."})})]}),(0,s.jsx)(f,{artifacts:P})]})}},55799:(e,a,t)=>{"use strict";t.d(a,{iN:()=>l,qs:()=>r});var s=t(95155),n=t(10677);function l(e){let{kicker:a="madarX OS v1.0",title:t,description:l,actions:r,hideProjectSwitcher:i,children:c}=e;return(0,s.jsxs)("main",{className:"admin-shell",children:[(0,s.jsxs)("header",{className:"admin-header",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"admin-kicker",children:a}),(0,s.jsx)("h1",{children:t}),l?(0,s.jsx)("p",{children:l}):null]}),(0,s.jsxs)("div",{className:"admin-header-actions",children:[i?null:(0,s.jsx)(n.default,{}),r]})]}),c]})}function r(e){let{children:a,tone:t="neutral"}=e;return(0,s.jsx)("span",{className:"admin-pill ".concat(t),children:a})}},59531:(e,a,t)=>{Promise.resolve().then(t.bind(t,10677)),Promise.resolve().then(t.bind(t,22157)),Promise.resolve().then(t.t.bind(t,52619,23))}},e=>{e.O(0,[2619,8441,1255,7358],()=>e(e.s=59531)),_N_E=e.O()}]);
|