madarx 2.19.0 → 2.21.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 +699 -692
- package/.next/standalone/.next/app-path-routes-manifest.json +80 -79
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- 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 +3 -3
- package/.next/standalone/.next/server/app/agents/[id]/page.js.nft.json +1 -1
- 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]/active-run/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.js.nft.json +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/agents/resume-approval/route.js +1 -0
- package/.next/standalone/.next/server/app/api/agents/resume-approval/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/agents/resume-approval/route_client-reference-manifest.js +1 -0
- 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/brand/share/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/cloud/schema/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.js +2 -2
- package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_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.js.nft.json +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.js.nft.json +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/attach/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/stream/route.js +40 -62
- 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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/state/route_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 +2 -2
- package/.next/standalone/.next/server/app/brand.rsc +1 -1
- package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai.html +2 -2
- package/.next/standalone/.next/server/app/federated-ai.rsc +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/join.html +1 -1
- package/.next/standalone/.next/server/app/join.rsc +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 +3 -3
- 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/team/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.js +4 -4
- 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 +3 -3
- package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/new.html +2 -2
- package/.next/standalone/.next/server/app/projects/new.rsc +2 -2
- package/.next/standalone/.next/server/app/projects/page.js +22 -22
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/schedules/page.js +2 -2
- package/.next/standalone/.next/server/app/schedules/page_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 +1 -1
- package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/page.js +2 -2
- package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp.html +2 -2
- package/.next/standalone/.next/server/app/whatsapp.rsc +1 -1
- package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +80 -79
- package/.next/standalone/.next/server/chunks/1699.js +216 -46
- package/.next/standalone/.next/server/chunks/3230.js +11 -11
- package/.next/standalone/.next/server/chunks/511.js +7 -7
- package/.next/standalone/.next/server/chunks/8352.js +1 -0
- package/.next/standalone/.next/server/functions-config-manifest.json +58 -57
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/app/activity/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/agents/[id]/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/agents/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/activity/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/audit-export/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/share-links/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-memory/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/events/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/log/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/active-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/chain/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/memory/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/reports/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/skills/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/create/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/ops/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/resume-approval/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/approvals/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/approvals/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/acl/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/protect/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/raw/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/artifacts/upload/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/audit/list/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/audit/search/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/config/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/join-bootstrap/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/brand/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/brand/share/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/chat/sessions/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/chat/sessions/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/cloud/schema/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/config/env/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/config/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/connections/[service]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/connections/[service]/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/connections/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/cron/tick/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/import/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/blob/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/disk/files/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/disk/folders/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/since/[cursor]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/stream/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/fs/create-folder/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/fs/pick-folder/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/validate/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/heartbeat/tick/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/heartbeat/worker/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/help/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/integrations/google/callback/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/integrations/google/oauth/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/marketplace/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/marketplace/open-design/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/marketplace/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mines/import-roots/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mines/portfolio/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/import/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/publish/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/missions/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/models/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/onboarding/blueprint/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/onboarding/launch/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/command/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/attach/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/upload/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/org/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/invites/pending/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/join/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/join-complete/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/orgs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/printing-press/clis/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/printing-press/install/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/printing-press/security-mode/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/privacy/config/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/privacy/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/share-link/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/validate/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/processes/start-and-route/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/library/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/runs/approve-claude-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/runs/claude-code-dry-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/runs/competitor-report/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/runs/engine-ping/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/runs/marketing-plan/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/schedules/upsert/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/secrets/[name]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/secrets/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/settings/trust-mode/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/share/[token]/otp/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/share/[token]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/share/[token]/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/otp/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/publish/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/status/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/unpublish/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/state/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/system/update/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/active-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/attachments/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checkout/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/children/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/comments/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/events/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/live-runs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/release/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tool-egress/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tools/[name]/approve/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tools/[name]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tools/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/transcripts/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/voice/providers/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/context/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/session/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tool-result/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tools/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/voice/tts/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/allowlist/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/disconnect/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/messages/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/qr/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/send/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/status/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/approvals/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/architecture/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/audit/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/brand/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/disk/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/federated-ai/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/help/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/marketplace/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/missions/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/org/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/page-aa1d178b557f45b7.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/[slug]/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/page-61f935c0aaf292ef.js +1 -0
- package/.next/standalone/.next/static/chunks/app/reports/[file]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/reports/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/runtime/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/schedules/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/settings/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/settings/page-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/tasks/[id]/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/tasks/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/tools/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/tools/page-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/whatsapp/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/workflows/share/[caseId]/page-fc50c67f9bcca1d8.js +1 -0
- package/.next/standalone/.next/static/chunks/webpack-0613e32ff96b6e16.js +1 -0
- package/.next/standalone/.next/static/mu47BRCkKEvvz6S5ipLGz/_buildManifest.js +1 -0
- package/.next/standalone/CHANGELOG.md +14 -0
- package/.next/standalone/package.json +1 -1
- package/.next/static/chunks/app/activity/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/agents/[id]/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/agents/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/activity/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/admin/audit-export/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/admin/share-links/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agent-memory/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agent-runs/[id]/events/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agent-runs/[id]/log/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agent-runs/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agent-runs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/[id]/active-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/[id]/chain/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/[id]/memory/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/[id]/reports/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/[id]/run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/[id]/skills/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/create/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/ops/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/agents/resume-approval/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/approvals/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/approvals/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/artifacts/[id]/acl/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/artifacts/[id]/protect/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/artifacts/[id]/raw/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/artifacts/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/artifacts/[id]/share-link/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/artifacts/upload/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/audit/list/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/audit/search/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/auth/callback/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/auth/config/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/auth/join-bootstrap/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/auth/session/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/brand/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/brand/share/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/chat/sessions/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/chat/sessions/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/cloud/schema/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/config/env/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/config/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/connections/[service]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/connections/[service]/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/connections/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/cron/tick/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/dashboard/spaces/import/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/dashboard/spaces/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/disk/files/[id]/blob/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/disk/files/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/disk/files/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/disk/folders/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/events/since/[cursor]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/events/stream/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/fs/create-folder/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/fs/pick-folder/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/engagements/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/interviews/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hail/setup-packages/validate/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/heartbeat/tick/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/heartbeat/worker/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/help/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hermes/jobs/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/hermes/jobs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/integrations/google/callback/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/integrations/google/oauth/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/marketplace/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/marketplace/open-design/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/marketplace/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/mines/import-roots/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/mines/portfolio/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/mines/projects/[id]/import/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/mines/projects/[id]/publish/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/mines/projects/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/missions/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/models/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/onboarding/blueprint/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/onboarding/launch/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orchestrator/command/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orchestrator/stream/attach/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orchestrator/stream/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orchestrator/upload/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/org/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/[id]/invites/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/[id]/members/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/invites/pending/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/join/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/join-complete/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/orgs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/printing-press/clis/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/printing-press/install/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/printing-press/security-mode/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/privacy/config/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/privacy/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/[id]/share-link/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/definitions/[slug]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/definitions/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/definitions/validate/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/processes/start-and-route/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/projects/[slug]/library/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/projects/[slug]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/projects/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/runs/approve-claude-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/runs/claude-code-dry-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/runs/competitor-report/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/runs/engine-ping/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/runs/marketing-plan/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/schedules/upsert/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/secrets/[name]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/secrets/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/settings/trust-mode/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/share/[token]/otp/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/share/[token]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/share/[token]/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/share/space/[token]/otp/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/share/space/[token]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/share/space/[token]/verify/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/shared/spaces/publish/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/shared/spaces/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/shared/spaces/status/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/shared/spaces/unpublish/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/state/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/system/update/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/active-run/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/attachments/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/checklist/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/checkout/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/children/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/comments/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/events/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/live-runs/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/release/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tasks/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tool-allowlists/[id]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tool-allowlists/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tool-egress/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tools/[name]/approve/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tools/[name]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/tools/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/transcripts/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/voice/providers/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/voice/realtime/context/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/voice/realtime/session/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/voice/realtime/tool-result/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/voice/realtime/tools/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/voice/tts/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/whatsapp/allowlist/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/whatsapp/disconnect/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/whatsapp/messages/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/whatsapp/qr/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/whatsapp/send/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/api/whatsapp/status/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/approvals/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/architecture/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/audit/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/brand/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/disk/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/federated-ai/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/help/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/marketplace/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/missions/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/onboarding/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/org/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/page-aa1d178b557f45b7.js +1 -0
- package/.next/static/chunks/app/projects/[slug]/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/projects/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/projects/page-61f935c0aaf292ef.js +1 -0
- package/.next/static/chunks/app/reports/[file]/route-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/reports/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/runtime/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/schedules/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/settings/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/settings/page-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/tasks/[id]/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/tasks/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/tools/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/tools/page-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/whatsapp/loading-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/app/workflows/share/[caseId]/page-fc50c67f9bcca1d8.js +1 -0
- package/.next/static/chunks/webpack-0613e32ff96b6e16.js +1 -0
- package/.next/static/mu47BRCkKEvvz6S5ipLGz/_buildManifest.js +1 -0
- package/CHANGELOG.md +14 -0
- package/app/api/agents/resume-approval/route.js +102 -0
- package/app/api/connections/[service]/verify/route.js +83 -0
- package/app/api/orchestrator/stream/route.js +71 -50
- package/app/components/dashboard/apply-stream-event.js +15 -0
- package/app/components/dashboard/chat-panel.jsx +56 -0
- package/app/components/dashboard/use-stream-command.js +65 -2
- package/lib/agent-config.js +20 -15
- package/lib/agent-routing.js +142 -0
- package/lib/agent-runner.js +192 -7
- package/lib/agent-templates.js +1 -0
- package/lib/connection-seeds.js +44 -0
- package/lib/higgsfield-media-card.js +221 -0
- package/lib/marketplace-seeds.js +85 -0
- package/lib/marketplace.js +57 -5
- package/lib/orchestrator-tools.js +62 -5
- package/lib/role-capability-map.js +89 -0
- package/lib/seeds.js +24 -0
- package/lib/tools/adapters/higgsfield.js +329 -0
- package/lib/tools/registry.js +87 -0
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/5030.js +0 -1
- package/.next/standalone/.next/static/chunks/app/activity/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/agents/[id]/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/agents/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/activity/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/audit-export/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/share-links/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-memory/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/log/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-runs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/chain/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/memory/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/reports/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[id]/skills/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/create/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/ops/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/approvals/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/approvals/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/protect/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/raw/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/artifacts/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/artifacts/upload/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/audit/list/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/audit/search/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/config/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/join-bootstrap/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/brand/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/brand/share/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/chat/sessions/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/chat/sessions/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/cloud/schema/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/config/env/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/config/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/connections/[service]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/connections/[service]/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/connections/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/cron/tick/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/import/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/dashboard/spaces/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/blob/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/disk/files/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/disk/folders/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/since/[cursor]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/stream/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/fs/create-folder/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/fs/pick-folder/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/engagements/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/interviews/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hail/setup-packages/validate/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/heartbeat/tick/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/heartbeat/worker/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/help/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/hermes/jobs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/integrations/google/callback/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/integrations/google/oauth/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/marketplace/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/marketplace/open-design/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/marketplace/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mines/import-roots/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mines/portfolio/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/import/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/[id]/publish/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mines/projects/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/missions/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/models/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/onboarding/blueprint/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/onboarding/launch/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/command/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/attach/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/stream/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orchestrator/upload/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/org/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/invites/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/members/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/invites/pending/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/join/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/join-complete/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/orgs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/printing-press/clis/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/printing-press/install/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/printing-press/security-mode/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/privacy/config/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/privacy/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/definitions/validate/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/processes/start-and-route/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/library/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[slug]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/runs/approve-claude-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/runs/claude-code-dry-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/runs/competitor-report/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/runs/engine-ping/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/runs/marketing-plan/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/schedules/upsert/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/secrets/[name]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/secrets/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/settings/trust-mode/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/share/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/share/[token]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/share/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/share/space/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/publish/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/status/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/shared/spaces/unpublish/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/state/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/system/update/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/attachments/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checklist/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/checkout/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/children/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/comments/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/events/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/live-runs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/release/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tool-allowlists/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tool-egress/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tools/[name]/approve/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tools/[name]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tools/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/transcripts/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/voice/providers/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/context/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/session/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tool-result/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/voice/realtime/tools/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/voice/tts/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/allowlist/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/disconnect/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/messages/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/qr/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/send/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/whatsapp/status/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/approvals/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/architecture/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/audit/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/brand/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/disk/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/federated-ai/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/help/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/marketplace/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/missions/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/org/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/page-8b485e954b4da5be.js +0 -1
- package/.next/standalone/.next/static/chunks/app/projects/[slug]/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/projects/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/projects/page-8b61f1179feb9d4b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/reports/[file]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/reports/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/runtime/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/schedules/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/settings/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/settings/page-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/tasks/[id]/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/tasks/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/tools/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/tools/page-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/whatsapp/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/workflows/share/[caseId]/page-31bb6a3d587a09ca.js +0 -1
- package/.next/standalone/.next/static/chunks/webpack-a7e11ef0747e2718.js +0 -1
- package/.next/standalone/.next/static/sO4ApzzsDEnqk70DEBOS6/_buildManifest.js +0 -1
- package/.next/static/chunks/app/activity/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/agents/[id]/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/agents/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/activity/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/admin/audit-export/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/admin/share-links/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agent-memory/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agent-runs/[id]/cancel/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agent-runs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agent-runs/[id]/log/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agent-runs/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agent-runs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/[id]/chain/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/[id]/memory/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/[id]/reports/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/[id]/run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/[id]/skills/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/create/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/agents/ops/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/approvals/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/approvals/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/artifacts/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/artifacts/[id]/protect/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/artifacts/[id]/raw/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/artifacts/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/artifacts/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/artifacts/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/artifacts/upload/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/audit/list/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/audit/search/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/auth/callback/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/auth/config/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/auth/join-bootstrap/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/auth/session/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/brand/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/brand/share/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/chat/sessions/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/chat/sessions/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/cloud/schema/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/config/env/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/config/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/connections/[service]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/connections/[service]/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/connections/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/cron/tick/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/move/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/[linkId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/dashboard/spaces/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/dashboard/spaces/import/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/dashboard/spaces/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/disk/files/[id]/blob/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/disk/files/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/disk/files/[id]/transcribe/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/disk/files/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/disk/folders/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/events/since/[cursor]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/events/stream/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/fs/create-folder/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/fs/pick-folder/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/blueprint/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/diagnostic/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/governance/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/interview/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/pilot/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/quarterly/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/[id]/setup-package/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/engagements/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/interviews/[id]/responses/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/interviews/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/setup-packages/[id]/apply/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hail/setup-packages/validate/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/heartbeat/tick/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/heartbeat/worker/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/help/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hermes/jobs/[id]/events/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hermes/jobs/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/hermes/jobs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/integrations/google/callback/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/integrations/google/oauth/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/marketplace/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/marketplace/open-design/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/marketplace/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/mines/import-roots/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/mines/portfolio/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/mines/projects/[id]/chunks/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/mines/projects/[id]/diligence/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/mines/projects/[id]/import/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/mines/projects/[id]/publish/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/mines/projects/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/missions/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/models/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/onboarding/blueprint/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/onboarding/launch/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orchestrator/command/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orchestrator/stream/attach/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orchestrator/stream/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orchestrator/upload/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/org/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/[id]/invites/[inviteId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/[id]/invites/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/role/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/[id]/members/[userId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/[id]/members/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/invites/pending/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/join/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/join-complete/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/orgs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/printing-press/clis/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/printing-press/install/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/printing-press/security-mode/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/privacy/config/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/privacy/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/[id]/share-link/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/override/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/retry/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/[id]/stages/[stageId]/submit/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/definitions/[slug]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/definitions/[slug]/settings/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/definitions/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/definitions/validate/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/processes/start-and-route/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/projects/[slug]/library/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/projects/[slug]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/projects/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/runs/approve-claude-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/runs/claude-code-dry-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/runs/competitor-report/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/runs/engine-ping/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/runs/marketing-plan/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/schedules/upsert/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/secrets/[name]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/secrets/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/settings/trust-mode/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/share/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/share/[token]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/share/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/share/space/[token]/otp/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/share/space/[token]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/share/space/[token]/verify/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/shared/spaces/[id]/acl/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/shared/spaces/publish/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/shared/spaces/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/shared/spaces/status/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/shared/spaces/unpublish/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/state/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/system/update/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/active-run/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/attachments/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/checklist/[itemId]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/checklist/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/checkout/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/children/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/comments/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/events/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/live-runs/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/release/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tasks/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tool-allowlists/[id]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tool-allowlists/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tool-egress/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tools/[name]/approve/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tools/[name]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/tools/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/transcripts/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/voice/providers/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/voice/realtime/context/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/voice/realtime/session/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/voice/realtime/tool-result/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/voice/realtime/tools/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/voice/tts/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/whatsapp/allowlist/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/whatsapp/disconnect/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/whatsapp/messages/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/whatsapp/qr/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/whatsapp/send/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/api/whatsapp/status/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/approvals/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/architecture/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/audit/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/brand/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/disk/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/federated-ai/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/help/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/marketplace/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/missions/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/onboarding/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/org/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/page-8b485e954b4da5be.js +0 -1
- package/.next/static/chunks/app/projects/[slug]/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/projects/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/projects/page-8b61f1179feb9d4b.js +0 -1
- package/.next/static/chunks/app/reports/[file]/route-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/reports/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/runtime/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/schedules/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/settings/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/settings/page-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/tasks/[id]/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/tasks/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/tools/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/tools/page-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/whatsapp/loading-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/app/workflows/share/[caseId]/page-31bb6a3d587a09ca.js +0 -1
- package/.next/static/chunks/webpack-a7e11ef0747e2718.js +0 -1
- package/.next/static/sO4ApzzsDEnqk70DEBOS6/_buildManifest.js +0 -1
- /package/.next/standalone/.next/static/{sO4ApzzsDEnqk70DEBOS6 → mu47BRCkKEvvz6S5ipLGz}/_ssgManifest.js +0 -0
- /package/.next/static/{sO4ApzzsDEnqk70DEBOS6 → mu47BRCkKEvvz6S5ipLGz}/_ssgManifest.js +0 -0
|
@@ -44,12 +44,14 @@ Return ONLY corrected JSON in a \`\`\`json fence that matches the schema. No oth
|
|
|
44
44
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run((0,g.newId)("audit"),(0,g.nowIso)(),"auth.membership.revoked_detected",`Membership revoked detected for user ${a} in org ${b}`,"denied",JSON.stringify({user_id:a,org_id:b}),a,b)}catch(a){console.error("[auth] Failed to write membership_revoked audit row:",a.message)}}function w(a,b,c){try{(0,g.getDb)().prepare(`INSERT INTO audit_logs (id, at, type, summary, status, meta, user_id, org_id)
|
|
45
45
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run((0,g.newId)("audit"),(0,g.nowIso)(),"auth.live_check_unavailable",`Membership live check unavailable for user ${a} in org ${b}`,"error",JSON.stringify({user_id:a,org_id:b,reason:c}),a,b)}catch(a){console.error("[auth] Failed to write live_check_unavailable audit row:",a.message)}}d()}catch(a){d(a)}})},1623:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$b:()=>m,E1:()=>r,JD:()=>k,OD:()=>A,PA:()=>j,VS:()=>l,Wr:()=>u,iS:()=>s,q9:()=>w,sR:()=>n,uB:()=>o,uR:()=>v,wA:()=>t,zr:()=>q});var e=c(34255),f=c(40718),g=c(91648),h=c(72326),i=a([e,f,g,h]);[e,f,g,h]=i.then?(await i)():i;let v=`IDENTITY
|
|
46
46
|
You are madarX — Chief of Staff to the principal. Local-first orchestrator. Your job is routing, presentation, escalation. You are NOT the doer; you conduct. Every specialist, tool, or sub-agent in this workspace is an instrument you direct. You translate principal intent into action and bring back verified results.`,w=`ORCHESTRATOR_MODE (NON-NEGOTIABLE)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
You DELEGATE specialist work; you do not perform it yourself. Specialist domain tools (flights, hotels, email, GitHub writes, calendar, database, deploys, browser automation, voice) are intentionally absent from your toolset — they live with the specialist agents that own them. Do not try to work around this.
|
|
48
|
+
|
|
49
|
+
For ANY request longer than a one-line factual reply, set the goal in one sentence, then call route_goal(goal) FIRST. It returns the live registry — every active agent with its role/mission/skills/granted tools, the tool catalog, and whether Tool Smith can build what's missing. Reason over it and pick exactly one ladder step:
|
|
50
|
+
1. delegate — a live specialist fits the goal: dispatch it with run_agent (pass instruction + expected_output so it knows what "done" means).
|
|
51
|
+
2. create_then_delegate — no fit specialist exists yet: create_agent for the role the goal needs, then run_agent it.
|
|
52
|
+
3. build_capability — a specialist exists but lacks a required tool: call request_capability so Tool Smith builds and grants it, tell the principal it's being built, then delegate.
|
|
53
|
+
4. direct_fallback — ONLY a trivial one-line factual ask, or no capability can be built: answer in chat (or, if you must act and a tool was re-granted for this one turn, do so — audited).
|
|
54
|
+
This works for ANY goal, not a fixed list of domains — route_goal grounds the decision in real capabilities. fast_path_hint is a shortcut for obvious cases, never the whole answer. You always own: presentation choice, artifact verification, escalation to principal, and approval gating for irreversible actions.
|
|
53
55
|
|
|
54
56
|
TOOL_USE_DISCIPLINE
|
|
55
57
|
- Never end a turn with a promise of future action. If you say you will do X, call the tool for X in the same response.
|
|
@@ -59,15 +61,18 @@ TOOL_USE_DISCIPLINE
|
|
|
59
61
|
- If required context is missing, do NOT guess. Fetch it with a tool, OR ask the principal one specific targeted question. Never hallucinate.
|
|
60
62
|
- Act-don't-ask: when there is an obvious default interpretation, act on it. Ask only when the ambiguity changes which tool you would call.
|
|
61
63
|
|
|
62
|
-
LIVE_DATA_RESEARCH_RULE (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
1. web_search to
|
|
66
|
-
2.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
64
|
+
LIVE_DATA_RESEARCH_RULE (CEO-report standard — applies to whoever does the work)
|
|
65
|
+
The deliverable is the actual answer with concrete values, never a list of places to look. Domain lookups (flights, hotels, prices, schedules) are SPECIALIST work — route_goal and delegate to the agent that owns the tool (e.g. the Travel Concierge owns flight_search / hotel_search). Do not run those tools yourself; you do not have them.
|
|
66
|
+
You DO keep a quick-fact allowance: web_search and web_fetch remain on your toolset for a fast factual lookup that does not warrant a specialist (a single date, a definition, one current number). When you use them:
|
|
67
|
+
1. web_search to find the 2-4 most authoritative sources, then web_fetch to pull the concrete value — never stop at snippets.
|
|
68
|
+
2. Present real values in a table or structured list with a short "Sources" footnote; write "Not listed" for a genuinely missing value.
|
|
69
|
+
When you (or a specialist you delegate to) return results, NEVER deliver "Results for X" sections of search titles and snippets — that is a failure mode. If the goal needs real booking/operator data behind a JS-heavy site, that is the specialist's job via its browser/domain tools, not a web_fetch from you.
|
|
70
|
+
|
|
71
|
+
GOAL_COMPLETION_RULE (non-negotiable)
|
|
72
|
+
The principal's goal must be met FULLY, not half-way. Before finishing:
|
|
73
|
+
- When you delegated, you MUST have passed an expected_output / acceptance contract, and you MUST check the specialist's returned artifact actually satisfies it (every part of the ask, real values, right format).
|
|
74
|
+
- If the result is partial, wrong, or the specialist returned blocked/escalated (missing capability), do NOT present it as the answer. Re-dispatch once with a sharper instruction, follow the build_capability ladder step, or tell the principal exactly what is blocked and what happens next.
|
|
75
|
+
- Only present a result you have verified meets the goal. A confirmed-partial delivered as if complete is the worst failure.
|
|
71
76
|
|
|
72
77
|
FORMAT_DECISION_RULE (NON-NEGOTIABLE)
|
|
73
78
|
Before choosing a tool, decide the output medium:
|
|
@@ -158,7 +163,7 @@ ${c}`)}catch{}return b}let x=[{id:"claude-sonnet-4-6",label:"Sonnet 4.6",engine:
|
|
|
158
163
|
WHERE slug=?`).run(g.title,g.description,l,g.risk_level,m,j,g.slug):i.prepare(`INSERT INTO composite_tools
|
|
159
164
|
(slug, title, description, spec_json, risk_level, input_schema_json, status,
|
|
160
165
|
created_by_user_id, created_by_agent_id, created_at, updated_at)
|
|
161
|
-
VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?)`).run(g.slug,g.title,g.description,l,g.risk_level,m,b.created_by_user_id||null,b.created_by_agent_id||null,j,j),{slug:g.slug,risk_level:g.risk_level,warnings:d.warnings}}function i(a){let b=(0,e.getDb)();return b.prepare("SELECT slug FROM composite_tools WHERE slug=?").get(a)?(b.prepare("UPDATE composite_tools SET status='archived', updated_at=? WHERE slug=?").run((0,e.nowIso)(),a),{ok:!0,slug:a}):{ok:!1,error:"not_found",slug:a}}function j(a){return(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE slug=? AND status='active'").get(a)||null}function k(a){let b=j(a);if(!b)return null;try{return JSON.parse(b.spec_json)}catch{return null}}function l(){let a;try{a=(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE status='active' ORDER BY slug ASC").all()}catch{return[]}return a.map(a=>{let b,{approval_required:c,approval_mode:d}=function(a){let b=f.pE.indexOf(a)>=f.pE.indexOf("medium");return{approval_required:b,approval_mode:b?"approval_required":"auto"}}(a.risk_level);try{b=JSON.parse(a.input_schema_json||"")||{type:"object",properties:{}}}catch{b={type:"object",properties:{}}}return{name:a.slug,title:a.title||a.slug,description:a.description||`Composite tool: ${a.slug}`,category:"composite",risk_level:a.risk_level,approval_required:c,approval_mode:d,required_env:[],enabled:!0,available:!0,missing_env:[],allowlist_required:!1,allowlist_scope_key:null,allowlist_default_allow:!1,input_schema:b,source:{kind:"composite",composite_slug:a.slug}}})}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},5735:(a,b,c)=>{"use strict";c.d(b,{zP:()=>l});let d=new Set(["intake_form","agent_run","policy_gate","human_approval","package"]),e=new Set(["text","email","number","textarea","select","shareholders"]),f=new Set(["low","medium","high","irreversible_external"]),g=/^[a-z][a-z0-9-]{2,63}$/;function h(a,b,c){a.push(`${b}: ${c}`)}function i(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}let j=new Set(["and","or"]),k=new Set(["eq","neq","lt","lte","gt","gte","in","nin"]);function l(a,b={}){var c;let m,n=[],o=[];try{m=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!m||"undefined"===m)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(m,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(m,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!i(a))return{ok:!1,errors:["spec: must be an object"],warnings:[],normalized:null};a.slug&&"string"==typeof a.slug?g.test(a.slug)||h(n,"slug",`does not match ${g} (lowercase, starts with letter, 3-64 chars, [a-z0-9-])`):h(n,"slug","required (string)"),a.name&&"string"==typeof a.name||h(n,"name","required (string)");let p=a.schema_version??1;if(null==a.schema_version||Number.isInteger(a.schema_version)||h(n,"schema_version","must be an integer"),null!=a.version&&(!Number.isInteger(a.version)||a.version<1)&&h(n,"version","must be a positive integer"),!Array.isArray(a.stages)||0===a.stages.length)return h(n,"stages","required (non-empty array)"),{ok:!1,errors:n,warnings:o,normalized:null};let q=new Set;a.stages.forEach((a,b)=>{let c=`stages[${b}]`;if(!i(a))return void h(n,c,"must be an object");a.slug&&"string"==typeof a.slug?g.test(a.slug)?q.has(a.slug)?h(n,`${c}.slug`,`duplicate stage slug "${a.slug}"`):q.add(a.slug):h(n,`${c}.slug`,`does not match ${g}`):h(n,`${c}.slug`,"required (string)"),a.name&&"string"==typeof a.name||h(n,`${c}.name`,"required (string)"),a.kind&&d.has(a.kind)||h(n,`${c}.kind`,`unknown kind "${a.kind}" (allowed: ${[...d].join(", ")})`)});let r=a.stages[0];if(r&&r.kind&&"intake_form"!==r.kind&&h(n,"stages[0].kind",`first stage must be "intake_form" (got "${r.kind}")`),a.stages.forEach((a,c)=>{if(!a||!d.has(a.kind))return;let g=`stages[${c}]`;if(!i(a.config))return void h(n,`${g}.config`,"must be an object");switch(a.kind){case"intake_form":!function(a,b,c){let d=a?.config?.form_schema;if(!i(d))return h(b,`${c}.config.form_schema`,"required (must be object)");if(!Array.isArray(d.fields)||0===d.fields.length)return h(b,`${c}.config.form_schema.fields`,"must be a non-empty array");let f=new Set;d.fields.forEach((a,d)=>{let g=`${c}.config.form_schema.fields[${d}]`;if(!i(a))return void h(b,g,"must be an object");a.name&&"string"==typeof a.name||h(b,`${g}.name`,"required (string)"),a.label&&"string"==typeof a.label||h(b,`${g}.label`,"required (string)"),a.type&&e.has(a.type)||h(b,`${g}.type`,`unknown type "${a.type}" (allowed: ${[...e].join(", ")})`),"select"!==a.type||Array.isArray(a.options)&&0!==a.options.length||h(b,`${g}.options`,"select requires a non-empty options[] array"),a.name&&(f.has(a.name)&&h(b,`${g}.name`,`duplicate field name "${a.name}"`),f.add(a.name))})}(a,n,g);break;case"agent_run":let l=a.config||{};if(l.agent_template_slug&&"string"==typeof l.agent_template_slug?b.knownAgentTemplates&&!b.knownAgentTemplates.has(l.agent_template_slug)&&h(n,`${g}.config.agent_template_slug`,`unknown template "${l.agent_template_slug}"`):h(n,`${g}.config.agent_template_slug`,"required (string)"),l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&h(n,`${g}.config.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):h(n,`${g}.config.prompt`,"required (string)"),null!=l.timeout_ms&&(!Number.isInteger(l.timeout_ms)||l.timeout_ms<1e3||l.timeout_ms>6e5)&&h(n,`${g}.config.timeout_ms`,"must be integer 1000..600000"),null!=l.on_outcome)if(i(l.on_outcome))for(let[a,b]of Object.entries(l.on_outcome)){if("string"!=typeof b){h(n,`${g}.config.on_outcome.${a}`,'value must be a string (stage slug or "fail")');continue}"fail"!==b&&q&&!q.has(b)&&h(n,`${g}.config.on_outcome.${a}`,`references non-existent stage "${b}"`)}else h(n,`${g}.config.on_outcome`,"must be an object");break;case"policy_gate":!function(a,b,c){let d=a.config||{};if(!Array.isArray(d.rules)||0===d.rules.length)return h(b,`${c}.config.rules`,"required (non-empty array)");d.rules.forEach((a,d)=>{let e=`${c}.config.rules[${d}]`;"string"==typeof a?a.trim()||h(b,e,"empty rule expression"):i(a)&&"string"==typeof a.op?function a(b,c,d,e=0){if(e>20)return void h(c,d,"predicate nesting too deep");if(!i(b))return void h(c,d,"predicate must be an object");let f=b.op;j.has(f)?Array.isArray(b.rules)&&0!==b.rules.length?b.rules.forEach((b,f)=>a(b,c,`${d}.rules[${f}]`,e+1)):h(c,`${d}.rules`,`"${f}" requires a non-empty rules[] array`):"not"===f?i(b.rule)?a(b.rule,c,`${d}.rule`,e+1):h(c,`${d}.rule`,'"not" requires a rule object'):k.has(f)?("string"==typeof b.path&&b.path.trim()||h(c,`${d}.path`,"required (non-empty string)"),"value"in b?"in"!==f&&"nin"!==f||Array.isArray(b.value)||h(c,`${d}.value`,`"${f}" requires an array value`):h(c,`${d}.value`,"required")):h(c,`${d}.op`,`unknown predicate op "${f}"`)}(a,b,e):i(a)?a.expr&&"string"==typeof a.expr&&a.expr.trim()||h(b,`${e}.expr`,"required (non-empty string)"):h(b,e,"rule must be a JSON predicate, a string, or { expr, label }")})}(a,n,g);break;case"human_approval":let m=a.config||{};m.action_type&&"string"==typeof m.action_type?m.action_type.startsWith("process.stage.")||h(n,`${g}.config.action_type`,'must start with "process.stage."'):h(n,`${g}.config.action_type`,"required (string)"),m.risk&&f.has(m.risk)||h(n,`${g}.config.risk`,`must be one of ${[...f].join(", ")}`),null!=m.summary_template&&"string"!=typeof m.summary_template&&h(n,`${g}.config.summary_template`,"must be a string");break;case"package":let o=a.config||{};o.title_template&&"string"==typeof o.title_template||h(n,`${g}.config.title_template`,"required (string)"),null!=o.include_stages&&(Array.isArray(o.include_stages)?o.include_stages.forEach((a,b)=>{"string"!=typeof a?h(n,`${g}.config.include_stages[${b}]`,"must be a string"):q.has(a)||h(n,`${g}.config.include_stages[${b}]`,`unknown stage slug "${a}"`)}):h(n,`${g}.config.include_stages`,"must be an array of stage slugs"))}}),a.stages.forEach((a,b)=>{if(!i(a))return;let c=`stages[${b}]`;null==a.on_pass_stage_slug||"fail"===a.on_pass_stage_slug||q.has(a.on_pass_stage_slug)||h(n,`${c}.on_pass_stage_slug`,`references non-existent stage "${a.on_pass_stage_slug}"`),null==a.on_fail_stage_slug||"fail"===a.on_fail_stage_slug||q.has(a.on_fail_stage_slug)||h(n,`${c}.on_fail_stage_slug`,`references non-existent stage "${a.on_fail_stage_slug}"`)}),0===n.length&&function(a){let b=new Map(a.map(a=>[a.slug,a])),c=new Map(a.map(a=>[a.slug,0]));for(let d of a)if(0===c.get(d.slug)&&function a(d){if(!b.has(d))return!1;let e=c.get(d);if(1===e)return!0;if(2===e)return!1;c.set(d,1);let f=b.get(d).on_pass_stage_slug;return!!(f&&"fail"!==f&&a(f))||(c.set(d,2),!1)}(d.slug))return!0;return!1}(a.stages)&&h(n,"stages","routing graph contains a cycle"),0===n.length){let b=new Set;a.stages.forEach(a=>{a.on_pass_stage_slug&&"fail"!==a.on_pass_stage_slug&&b.add(a.on_pass_stage_slug),a.on_fail_stage_slug&&"fail"!==a.on_fail_stage_slug&&b.add(a.on_fail_stage_slug);let c=a?.config?.on_outcome;if(i(c))for(let a of Object.values(c))"string"==typeof a&&"fail"!==a&&b.add(a)}),a.stages.forEach((a,c)=>{0!==c&&(b.has(a.slug)||o.push(`stages[${c}] "${a.slug}": orphan stage (no inbound edges)`))})}return n.length>0?{ok:!1,errors:n,warnings:o,normalized:null}:{ok:!0,errors:[],warnings:o,normalized:{schema_version:p,slug:(c=a).slug,name:c.name,version:c.version||1,description:c.description||null,category:c.category||null,source:c.source||"api",status:c.status||"draft",stages:c.stages.map(a=>({slug:a.slug,name:a.name,kind:a.kind,config:structuredClone(a.config||{}),on_pass_stage_slug:a.on_pass_stage_slug||null,on_fail_stage_slug:a.on_fail_stage_slug||null,required:!1!==a.required}))}}}},7183:(a,b,c)=>{"use strict";c.d(b,{X:()=>e});let d=Object.create(null);for(let a of["00_historic","01_arcgis_data","02_assay_labs","03_cad_files","04_official_database","05_drill_campaign","06_exploration_geos","07_geophysics","08_backup_bd","09_petrography","10_presentations","11_general_pictures","12_safety","13_reports","14_inegi_data","15_sgm_data","16_claims_properties","17_minesight","18_exported_maps","19_survey","20_geotechnical","21_general_files","22_qa_qc","uncategorized"]){let b=a.match(/^(\d{2})_/);b&&(d[b[1]]=a)}function e(a){let b=String(a||"").split(/[/\\]/).filter(Boolean),c=null;for(let a of b){let b=a.match(/^(\d{2})[-_ ]/i);if(!b)continue;let e=b[1];Object.prototype.hasOwnProperty.call(d,e)&&(c=d[e])}return c??"uncategorized"}},7945:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{H6:()=>j,WV:()=>l});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/hail-engagement-lifecycle.js")),l="hail-engagement-lifecycle",m=null;function j(){let a=(m||(m=function(){let a=(0,g.join)(k,"specs","hail-engagement-lifecycle.json");return JSON.parse((0,e.readFileSync)(a,"utf8"))}()),m);return(0,h.R1)(a,{source_spec_json:JSON.stringify(a)})}d()}catch(a){d(a)}})},8437:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{D6:()=>l,ct:()=>n,jT:()=>m,r2:()=>o,t6:()=>p,v:()=>q,zU:()=>i});var e=c(34255),f=c(40563),g=c(9001),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let r=new Set;function i(a){return"function"!=typeof a?()=>{}:(r.add(a),()=>{r.delete(a)})}function j(){try{(0,g.jO)("approvals")}catch{}}function k(a){return a?{...a,payload:function(a,b=null){try{return JSON.parse(a)}catch{return b}}(a.payload,{})}:null}function l({action_type:a,risk:b="medium",summary:c,payload:d={},requested_by:f="system",expires_at:g=null,project_id:h=null}){let i=(0,e.getDb)(),k=(0,e.newId)("approval"),l=(0,e.nowIso)(),n=h||d?.project_id||d?.projectId||null;return i.prepare(`
|
|
166
|
+
VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?)`).run(g.slug,g.title,g.description,l,g.risk_level,m,b.created_by_user_id||null,b.created_by_agent_id||null,j,j),{slug:g.slug,risk_level:g.risk_level,warnings:d.warnings}}function i(a){let b=(0,e.getDb)();return b.prepare("SELECT slug FROM composite_tools WHERE slug=?").get(a)?(b.prepare("UPDATE composite_tools SET status='archived', updated_at=? WHERE slug=?").run((0,e.nowIso)(),a),{ok:!0,slug:a}):{ok:!1,error:"not_found",slug:a}}function j(a){return(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE slug=? AND status='active'").get(a)||null}function k(a){let b=j(a);if(!b)return null;try{return JSON.parse(b.spec_json)}catch{return null}}function l(){let a;try{a=(0,e.getDb)().prepare("SELECT * FROM composite_tools WHERE status='active' ORDER BY slug ASC").all()}catch{return[]}return a.map(a=>{let b,{approval_required:c,approval_mode:d}=function(a){let b=f.pE.indexOf(a)>=f.pE.indexOf("medium");return{approval_required:b,approval_mode:b?"approval_required":"auto"}}(a.risk_level);try{b=JSON.parse(a.input_schema_json||"")||{type:"object",properties:{}}}catch{b={type:"object",properties:{}}}return{name:a.slug,title:a.title||a.slug,description:a.description||`Composite tool: ${a.slug}`,category:"composite",risk_level:a.risk_level,approval_required:c,approval_mode:d,required_env:[],enabled:!0,available:!0,missing_env:[],allowlist_required:!1,allowlist_scope_key:null,allowlist_default_allow:!1,input_schema:b,source:{kind:"composite",composite_slug:a.slug}}})}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},5295:(a,b,c)=>{"use strict";c.d(b,{W6:()=>i,Wp:()=>h,Wq:()=>f,xU:()=>g});let d=new Set(["travel","email","calendar","supabase","vercel","mines"]),e={travel:"travel_concierge",email:"personal_assistant",github:"engineering_lead",calendar:"ops_manager",supabase:"web_ecommerce",vercel:"web_ecommerce",browser:"web_ecommerce",voice:"content_social"},f=[[/\b(flight|flights|fly|airfare|airline|hotel|hotels|itinerary|trip|travel|book a (room|stay))\b/i,"travel"],[/\b(email|inbox|reply to .*(mail|message)|draft a (reply|mail|email)|gmail)\b/i,"email"],[/\b(pull request|\bpr\b|open an? issue|github|merge|commit|repo|repository)\b/i,"github"],[/\b(calendar|schedule a (meeting|call)|book (a )?(meeting|slot|30 ?min)|invite .* to)\b/i,"calendar"],[/\b(deploy|vercel|production build|ship the site)\b/i,"vercel"],[/\b(supabase|database row|insert into|update the table|sql)\b/i,"supabase"]],g=["travel-concierge"];function h(a){return!!(a&&d.has(a.category))}function i(a){return e[a]||null}},5735:(a,b,c)=>{"use strict";c.d(b,{zP:()=>l});let d=new Set(["intake_form","agent_run","policy_gate","human_approval","package"]),e=new Set(["text","email","number","textarea","select","shareholders"]),f=new Set(["low","medium","high","irreversible_external"]),g=/^[a-z][a-z0-9-]{2,63}$/;function h(a,b,c){a.push(`${b}: ${c}`)}function i(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}let j=new Set(["and","or"]),k=new Set(["eq","neq","lt","lte","gt","gte","in","nin"]);function l(a,b={}){var c;let m,n=[],o=[];try{m=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!m||"undefined"===m)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(m,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(m,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!i(a))return{ok:!1,errors:["spec: must be an object"],warnings:[],normalized:null};a.slug&&"string"==typeof a.slug?g.test(a.slug)||h(n,"slug",`does not match ${g} (lowercase, starts with letter, 3-64 chars, [a-z0-9-])`):h(n,"slug","required (string)"),a.name&&"string"==typeof a.name||h(n,"name","required (string)");let p=a.schema_version??1;if(null==a.schema_version||Number.isInteger(a.schema_version)||h(n,"schema_version","must be an integer"),null!=a.version&&(!Number.isInteger(a.version)||a.version<1)&&h(n,"version","must be a positive integer"),!Array.isArray(a.stages)||0===a.stages.length)return h(n,"stages","required (non-empty array)"),{ok:!1,errors:n,warnings:o,normalized:null};let q=new Set;a.stages.forEach((a,b)=>{let c=`stages[${b}]`;if(!i(a))return void h(n,c,"must be an object");a.slug&&"string"==typeof a.slug?g.test(a.slug)?q.has(a.slug)?h(n,`${c}.slug`,`duplicate stage slug "${a.slug}"`):q.add(a.slug):h(n,`${c}.slug`,`does not match ${g}`):h(n,`${c}.slug`,"required (string)"),a.name&&"string"==typeof a.name||h(n,`${c}.name`,"required (string)"),a.kind&&d.has(a.kind)||h(n,`${c}.kind`,`unknown kind "${a.kind}" (allowed: ${[...d].join(", ")})`)});let r=a.stages[0];if(r&&r.kind&&"intake_form"!==r.kind&&h(n,"stages[0].kind",`first stage must be "intake_form" (got "${r.kind}")`),a.stages.forEach((a,c)=>{if(!a||!d.has(a.kind))return;let g=`stages[${c}]`;if(!i(a.config))return void h(n,`${g}.config`,"must be an object");switch(a.kind){case"intake_form":!function(a,b,c){let d=a?.config?.form_schema;if(!i(d))return h(b,`${c}.config.form_schema`,"required (must be object)");if(!Array.isArray(d.fields)||0===d.fields.length)return h(b,`${c}.config.form_schema.fields`,"must be a non-empty array");let f=new Set;d.fields.forEach((a,d)=>{let g=`${c}.config.form_schema.fields[${d}]`;if(!i(a))return void h(b,g,"must be an object");a.name&&"string"==typeof a.name||h(b,`${g}.name`,"required (string)"),a.label&&"string"==typeof a.label||h(b,`${g}.label`,"required (string)"),a.type&&e.has(a.type)||h(b,`${g}.type`,`unknown type "${a.type}" (allowed: ${[...e].join(", ")})`),"select"!==a.type||Array.isArray(a.options)&&0!==a.options.length||h(b,`${g}.options`,"select requires a non-empty options[] array"),a.name&&(f.has(a.name)&&h(b,`${g}.name`,`duplicate field name "${a.name}"`),f.add(a.name))})}(a,n,g);break;case"agent_run":let l=a.config||{};if(l.agent_template_slug&&"string"==typeof l.agent_template_slug?b.knownAgentTemplates&&!b.knownAgentTemplates.has(l.agent_template_slug)&&h(n,`${g}.config.agent_template_slug`,`unknown template "${l.agent_template_slug}"`):h(n,`${g}.config.agent_template_slug`,"required (string)"),l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&h(n,`${g}.config.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):h(n,`${g}.config.prompt`,"required (string)"),null!=l.timeout_ms&&(!Number.isInteger(l.timeout_ms)||l.timeout_ms<1e3||l.timeout_ms>6e5)&&h(n,`${g}.config.timeout_ms`,"must be integer 1000..600000"),null!=l.on_outcome)if(i(l.on_outcome))for(let[a,b]of Object.entries(l.on_outcome)){if("string"!=typeof b){h(n,`${g}.config.on_outcome.${a}`,'value must be a string (stage slug or "fail")');continue}"fail"!==b&&q&&!q.has(b)&&h(n,`${g}.config.on_outcome.${a}`,`references non-existent stage "${b}"`)}else h(n,`${g}.config.on_outcome`,"must be an object");break;case"policy_gate":!function(a,b,c){let d=a.config||{};if(!Array.isArray(d.rules)||0===d.rules.length)return h(b,`${c}.config.rules`,"required (non-empty array)");d.rules.forEach((a,d)=>{let e=`${c}.config.rules[${d}]`;"string"==typeof a?a.trim()||h(b,e,"empty rule expression"):i(a)&&"string"==typeof a.op?function a(b,c,d,e=0){if(e>20)return void h(c,d,"predicate nesting too deep");if(!i(b))return void h(c,d,"predicate must be an object");let f=b.op;j.has(f)?Array.isArray(b.rules)&&0!==b.rules.length?b.rules.forEach((b,f)=>a(b,c,`${d}.rules[${f}]`,e+1)):h(c,`${d}.rules`,`"${f}" requires a non-empty rules[] array`):"not"===f?i(b.rule)?a(b.rule,c,`${d}.rule`,e+1):h(c,`${d}.rule`,'"not" requires a rule object'):k.has(f)?("string"==typeof b.path&&b.path.trim()||h(c,`${d}.path`,"required (non-empty string)"),"value"in b?"in"!==f&&"nin"!==f||Array.isArray(b.value)||h(c,`${d}.value`,`"${f}" requires an array value`):h(c,`${d}.value`,"required")):h(c,`${d}.op`,`unknown predicate op "${f}"`)}(a,b,e):i(a)?a.expr&&"string"==typeof a.expr&&a.expr.trim()||h(b,`${e}.expr`,"required (non-empty string)"):h(b,e,"rule must be a JSON predicate, a string, or { expr, label }")})}(a,n,g);break;case"human_approval":let m=a.config||{};m.action_type&&"string"==typeof m.action_type?m.action_type.startsWith("process.stage.")||h(n,`${g}.config.action_type`,'must start with "process.stage."'):h(n,`${g}.config.action_type`,"required (string)"),m.risk&&f.has(m.risk)||h(n,`${g}.config.risk`,`must be one of ${[...f].join(", ")}`),null!=m.summary_template&&"string"!=typeof m.summary_template&&h(n,`${g}.config.summary_template`,"must be a string");break;case"package":let o=a.config||{};o.title_template&&"string"==typeof o.title_template||h(n,`${g}.config.title_template`,"required (string)"),null!=o.include_stages&&(Array.isArray(o.include_stages)?o.include_stages.forEach((a,b)=>{"string"!=typeof a?h(n,`${g}.config.include_stages[${b}]`,"must be a string"):q.has(a)||h(n,`${g}.config.include_stages[${b}]`,`unknown stage slug "${a}"`)}):h(n,`${g}.config.include_stages`,"must be an array of stage slugs"))}}),a.stages.forEach((a,b)=>{if(!i(a))return;let c=`stages[${b}]`;null==a.on_pass_stage_slug||"fail"===a.on_pass_stage_slug||q.has(a.on_pass_stage_slug)||h(n,`${c}.on_pass_stage_slug`,`references non-existent stage "${a.on_pass_stage_slug}"`),null==a.on_fail_stage_slug||"fail"===a.on_fail_stage_slug||q.has(a.on_fail_stage_slug)||h(n,`${c}.on_fail_stage_slug`,`references non-existent stage "${a.on_fail_stage_slug}"`)}),0===n.length&&function(a){let b=new Map(a.map(a=>[a.slug,a])),c=new Map(a.map(a=>[a.slug,0]));for(let d of a)if(0===c.get(d.slug)&&function a(d){if(!b.has(d))return!1;let e=c.get(d);if(1===e)return!0;if(2===e)return!1;c.set(d,1);let f=b.get(d).on_pass_stage_slug;return!!(f&&"fail"!==f&&a(f))||(c.set(d,2),!1)}(d.slug))return!0;return!1}(a.stages)&&h(n,"stages","routing graph contains a cycle"),0===n.length){let b=new Set;a.stages.forEach(a=>{a.on_pass_stage_slug&&"fail"!==a.on_pass_stage_slug&&b.add(a.on_pass_stage_slug),a.on_fail_stage_slug&&"fail"!==a.on_fail_stage_slug&&b.add(a.on_fail_stage_slug);let c=a?.config?.on_outcome;if(i(c))for(let a of Object.values(c))"string"==typeof a&&"fail"!==a&&b.add(a)}),a.stages.forEach((a,c)=>{0!==c&&(b.has(a.slug)||o.push(`stages[${c}] "${a.slug}": orphan stage (no inbound edges)`))})}return n.length>0?{ok:!1,errors:n,warnings:o,normalized:null}:{ok:!0,errors:[],warnings:o,normalized:{schema_version:p,slug:(c=a).slug,name:c.name,version:c.version||1,description:c.description||null,category:c.category||null,source:c.source||"api",status:c.status||"draft",stages:c.stages.map(a=>({slug:a.slug,name:a.name,kind:a.kind,config:structuredClone(a.config||{}),on_pass_stage_slug:a.on_pass_stage_slug||null,on_fail_stage_slug:a.on_fail_stage_slug||null,required:!1!==a.required}))}}}},7183:(a,b,c)=>{"use strict";c.d(b,{X:()=>e});let d=Object.create(null);for(let a of["00_historic","01_arcgis_data","02_assay_labs","03_cad_files","04_official_database","05_drill_campaign","06_exploration_geos","07_geophysics","08_backup_bd","09_petrography","10_presentations","11_general_pictures","12_safety","13_reports","14_inegi_data","15_sgm_data","16_claims_properties","17_minesight","18_exported_maps","19_survey","20_geotechnical","21_general_files","22_qa_qc","uncategorized"]){let b=a.match(/^(\d{2})_/);b&&(d[b[1]]=a)}function e(a){let b=String(a||"").split(/[/\\]/).filter(Boolean),c=null;for(let a of b){let b=a.match(/^(\d{2})[-_ ]/i);if(!b)continue;let e=b[1];Object.prototype.hasOwnProperty.call(d,e)&&(c=d[e])}return c??"uncategorized"}},7945:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{H6:()=>j,WV:()=>l});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/hail-engagement-lifecycle.js")),l="hail-engagement-lifecycle",m=null;function j(){let a=(m||(m=function(){let a=(0,g.join)(k,"specs","hail-engagement-lifecycle.json");return JSON.parse((0,e.readFileSync)(a,"utf8"))}()),m);return(0,h.R1)(a,{source_spec_json:JSON.stringify(a)})}d()}catch(a){d(a)}})},8437:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{D6:()=>l,ct:()=>n,jT:()=>m,r2:()=>o,t6:()=>p,v:()=>q,zU:()=>i});var e=c(34255),f=c(40563),g=c(9001),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let r=new Set;function i(a){return"function"!=typeof a?()=>{}:(r.add(a),()=>{r.delete(a)})}function j(){try{(0,g.jO)("approvals")}catch{}}function k(a){return a?{...a,payload:function(a,b=null){try{return JSON.parse(a)}catch{return b}}(a.payload,{})}:null}function l({action_type:a,risk:b="medium",summary:c,payload:d={},requested_by:f="system",expires_at:g=null,project_id:h=null}){let i=(0,e.getDb)(),k=(0,e.newId)("approval"),l=(0,e.nowIso)(),n=h||d?.project_id||d?.projectId||null;return i.prepare(`
|
|
162
167
|
INSERT INTO approval_requests (id, status, action_type, risk, summary, payload, requested_by, created_at, expires_at, project_id)
|
|
163
168
|
VALUES (?, 'pending', ?, ?, ?, ?, ?, ?, ?, ?)
|
|
164
169
|
`).run(k,a,b,c,JSON.stringify(d),f,l,g,n),i.prepare(`
|
|
@@ -598,47 +603,54 @@ ${A||' <p class="cl-sub">No notable changes recorded for this release.</p>'}
|
|
|
598
603
|
SELECT sample_id, width_m, cu_pct, ag_ppm, other_grades_json
|
|
599
604
|
FROM mines_assay_samples WHERE project_id = ? AND sample_type = 'drill_core'
|
|
600
605
|
ORDER BY (cu_pct * width_m) DESC LIMIT 8
|
|
601
|
-
`).all(d),k=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(d).n,l=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(d).n,p=b=>a.prepare("SELECT price_usd, price_unit, source FROM mines_market_snapshots WHERE lower(commodity)=lower(?) ORDER BY fetched_at DESC LIMIT 1").get(b),r=p("Cu"),t=p("Ag"),u=a.prepare("SELECT scenario, assumptions_json, result_json FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%' ORDER BY scenario").all(d);f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"Cu"} | **Jurisdiction:** ${b.state_province||"Sonora"}, ${b.country}`),f.push(""),f.push("> This memorandum is generated by autonomous agents from the project document archive and structured database. Every figure traces to a source document, a database aggregate, or a labelled estimate. Figures attributed to an operator scenario are conceptual and are **not** mineral resources."),f.push(""),f.push("## 1. Executive summary"),f.push("");let v=s(e,"deposit_type"),w=s(e,"asset_stage"),x=q(c,"exec_summary");x&&(f.push(x),f.push("")),v&&f.push(`- **Deposit type:** ${v.text} ${v.cite}`);let y=q(c,"thesis");y&&(f.push(`**Investment thesis.** ${y}`),f.push("")),w&&f.push(`- **Stage / resource status:** ${w.text} ${w.cite}`),i?.n&&f.push(`- **Drilling to date:** ${i.n} holes for ${o(i.m)} m [DrillHole aggregate]`),h?.n&&f.push(`- **Surface geochemistry:** ${h.n} trench channel samples averaging ${m(h.avg_cu,3)}% Cu [AssaySample aggregate]`),f.push(`- **Definitive valuation:** Not available — no declared resource. See \xa76 for a labelled operator scenario.`),f.push(""),f.push("## 2. Project overview"),f.push("");{let a=q(c,"overview");a&&(f.push(a),f.push(""))}for(let a of["property","mineralization","asset_stage"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push(""),f.push("## 3. Geology & mineralization"),f.push("");{let a=q(c,"geology");a&&(f.push(a),f.push(""))}for(let a of["deposit_type","geophysics"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push("");let z=[...e.keys()].filter(a=>a.startsWith("target_")).sort();if(z.length){for(let a of(f.push("### Defined targets"),f.push(""),z)){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("target_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push("")}f.push("## 4. Exploration results"),f.push("");{let a=q(c,"exploration");a&&(f.push(a),f.push(""))}let A=s(e,"drilling_summary");if(A&&f.push(`${A.text} ${A.cite}`),f.push(""),j.length){for(let a of(f.push("**Best drill intercepts (Cu \xd7 width ranked):**"),f.push(""),f.push("| Interval | Width (m) | Cu % | Ag g/t | CuEq % |"),f.push("|----------|-----------|------|--------|--------|"),j)){let b={};try{b=JSON.parse(a.other_grades_json||"{}")}catch{}f.push(`| \`${a.sample_id}\` | ${o(a.width_m,1)} | ${m(a.cu_pct,3)} | ${null!=a.ag_ppm?m(a.ag_ppm,1):"—"} | ${null!=b.cueq_pct?m(b.cueq_pct,3):"—"} |`)}f.push(""),f.push("_[AssaySample drill_core rows; CuEq per source-report formula]_"),f.push("")}let B=s(e,"trenching_summary");B&&(f.push(`${B.text} ${B.cite}`),f.push(""));let C=[...e.keys()].filter(a=>a.startsWith("comparable_")).sort();if(C.length){f.push("## 5. Comparable assets (analogues in the same belt)"),f.push("");{let a=q(c,"comparables");a&&(f.push(a),f.push(""))}for(let a of C){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("comparable_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push(""),f.push("_Analogues establish the geological model and the in-ground value range for a successful porphyry discovery in this belt. They are not a prediction of Batamote tonnage or grade._"),f.push("")}if(f.push("## 6. Valuation framework & indicative scenario"),f.push(""),f.push("No mineral resource has been declared for the project, therefore **no definitive (T1 in-situ or T2 DCF) valuation is produced** — the system does not assign tonnage or value to undefined mineralization. The figures below are a **conceptual operator scenario**, not a mineral resource and not a valuation opinion."),f.push(""),(r||t)&&(f.push(`**Metal price basis:** ${r?`Cu ${n(r.price_usd)}/lb`:""}${r&&t?" \xb7 ":""}${t?`Ag ${n(t.price_usd)}/oz`:""} (${r?.source||t?.source||"snapshot"}).`),f.push("")),u.length){for(let a of(f.push("| Scenario | Target tonnage | Cu grade | Indicative in-situ value |"),f.push("|----------|----------------|----------|--------------------------|"),u)){let b={},c={};try{b=JSON.parse(a.assumptions_json||"{}")}catch{}try{c=JSON.parse(a.result_json||"{}")}catch{}let d=a.scenario.replace("operator_","");f.push(`| ${d} | ${o(b.resource_tonnes)} t | ${m(b.grade_cu_pct,3)}% | ${n(c.in_situ_value_usd)} |`)}f.push(""),f.push("> **CONCEPTUAL EXPLORATION TARGET — IMPORTANT.** The tonnage and grade above are an operator-supplied conceptual exploration target expressed as a range. They are conceptual in nature; there has been insufficient exploration to define a mineral resource; and it is uncertain whether further exploration will result in the target being delineated as a mineral resource. These figures must not be construed as a mineral resource or a mineral reserve, and the in-situ values are an order-of-magnitude indication of exploration optionality only."),f.push("")}f.push("## 7. Data inventory & quality control"),f.push(""),f.push(`- **Documents catalogued:** ${o(k)} files across the project archive.`),f.push(`- **Text chunks indexed:** ${o(l)} for retrieval.`),i?.n&&f.push(`- **Structured drill holes:** ${i.n}; **trench assays:** ${h?.n||0}; **drill intercepts:** ${j.length}.`);let D=s(e,"qa_qc");D&&f.push(`- **QA/QC:** ${D.text} ${D.cite}`);let E=s(e,"data_verification");E&&f.push(`- **Data verification:** ${E.text} ${E.cite}`),f.push(""),f.push("## 8. Risk register"),f.push("");{let a=q(c,"risk_intro");a&&(f.push(a),f.push(""))}f.push("| Risk | Severity | Mitigation |"),f.push("|------|----------|------------|"),f.push("| No declared mineral resource (exploration risk) | High | Maiden resource drill program at El Choclo NW / Bata Sur |"),f.push("| Grade continuity not yet demonstrated at depth | Medium | Infill + step-out drilling; clay-alteration vectoring |"),f.push("| Metal price volatility | Medium | Long-dated optionality; copper structural demand |"),f.push("| Permitting / surface rights (Sonora) | Medium | Confirm tenure & community agreements in legal DD |"),f.push("| Data provenance (historic operators) | Low–Med | Teck data verified vs lab certificates; re-log key holes |"),f.push(""),f.push("## 9. Recommended work program"),f.push("");let F=s(e,"work_program");F&&(f.push(`${F.text} ${F.cite}`),f.push(""));let G=q(c,"recommendation");return G&&(f.push("_Indicative next-phase program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(G),f.push("")),f.push("## 10. Limitations & disclaimers"),f.push(""),f.push("Structured figures are transcribed/extracted from the project NI 43-101 technical report and archive; comparable-asset figures are from public S-K 1300 reports referenced therein. Metal prices are dated market snapshots. The operator scenario is conceptual and not a mineral resource. This memorandum is decision-support analysis, not a qualified person's valuation opinion, and does not constitute investment advice."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (due_diligence_memo). Numeric claims trace to `mines_extracted_facts`, SQL aggregates, or persisted `mines_valuation_scenarios` rows._"),{markdown:f.join("\n"),facts_cited:[...e.values()].reduce((a,b)=>a+b.length,0),comparables:C.length,targets:z.length,scenario_rows:u.length}}(w,y,B);c=a.markdown,d=`Investment Diligence Memo — ${y.name}`,z={facts_cited:a.facts_cited,comparables:a.comparables,targets:a.targets,scenario_rows:a.scenario_rows}}else if("pfs_readiness_report"===l){let a=function(a,b,c={}){let d=b.id,e=function(a,b){let c=new Set(a.prepare("SELECT DISTINCT fact_type FROM mines_extracted_facts WHERE project_id = ?").all(b).map(a=>a.fact_type)),d=(...a)=>[...c].some(b=>a.some(a=>b===a||b.startsWith(`${a}_`)||b.includes(a))),e=a.prepare("SELECT COUNT(*) n, SUM(total_depth_m) m FROM mines_drill_holes WHERE project_id = ?").get(b),f=a.prepare("SELECT COUNT(*) n FROM mines_assay_samples WHERE project_id = ?").get(b),g=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(b).n,h=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(b).n,i=[...c].filter(a=>a.startsWith("target_")).length,j=[...c].filter(a=>a.startsWith("comparable_")).length,k=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario NOT LIKE 'operator_%'").get(b).n,l=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%'").get(b).n,m=d("mineral_resource","resource_estimate","resource_statement","resource_classification","measured_indicated"),n=d("mineral_reserve","reserve_estimate","proven","probable"),o=d("metallurg","recovery","met_testwork","processing"),p=d("mine_plan","production_schedule","mining_method","pit","geotech"),q=d("capex","opex","cost_estimate","aisc"),r=d("market","price_deck","offtake")||a.prepare("SELECT COUNT(*) n FROM mines_market_snapshots").get().n>0,s=c.has("qa_qc"),t=c.has("data_verification"),u=d("deposit_type","mineralization","geophysics","property")||i>0,v=(e?.n||0)>0||d("drilling_summary","trenching_summary");return{factTypes:c,drill:e,assay:f,docCount:g,chunkCount:h,targets:i,comparables:j,indicativeScenarios:k,conceptualScenarios:l,hasResource:m,hasReserve:n,hasMetTestwork:o,hasMinePlan:p,hasCostEstimate:q,hasMarket:r,hasQaQc:s,hasDataVerification:t,hasGeology:u,hasDrilling:v}}(a,d),f=[],g=new Date().toISOString().slice(0,10),h=e.hasResource&&e.hasReserve;f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"n/a"} | **Jurisdiction:** ${b.state_province||"n/a"}, ${b.country||"n/a"}`),f.push(""),f.push("> **This is a PFS-READINESS ASSESSMENT, not a Pre-Feasibility Study.** A PFS requires a Mineral Reserve converted from Measured & Indicated Resources (no Inferred), with Modifying Factors, a mine plan, recovery testwork, and capex/opex to \xb125% (AACE Class 4), each signed off by a competent QP/CP. This report measures the asset against that standard, inventories the data that exists (every count traces to a database row), and lists the gaps and work program required to reach PFS confidence. It does **not** declare a resource, a reserve, or any figure the source data does not contain."),f.push(""),f.push("## 1. Readiness verdict"),f.push("");{let a=q(c,"verdict");a&&(f.push(a),f.push(""))}h?f.push("**A Mineral Reserve appears to exist in the dataset.** A PFS may be supportable — proceed to the section-by-section coverage below to confirm each discipline meets PFS confidence, then route reserve/economics work to the valuation analyst and a competent QP."):e.hasResource&&!e.hasReserve?f.push("**A Mineral Resource is present but no Mineral Reserve has been declared.** A PFS is **not yet supportable**. The defining PFS step — conversion of Measured & Indicated Resources to a Proven/Probable Reserve via Modifying Factors (template \xa715) — has not been done. This is the critical path."):(f.push("**No Mineral Resource is declared for this asset.** A PFS is **not supportable and must not be produced.** Per the PFS contract (template \xa71, checklist gate G3) reserves derive from Measured & Indicated Resources only — and there is no resource to convert. The asset sits at an **exploration / scoping** confidence level. The work below maps a path from exploration data to a maiden resource, and from there toward PFS."),e.conceptualScenarios>0&&(f.push(""),f.push(`> The project carries ${e.conceptualScenarios} conceptual operator scenario(s) in \`mines_valuation_scenarios\`. These are exploration-target order-of-magnitude figures, **not** a mineral resource, and cannot seed a reserve or a PFS economic case.`))),f.push("");let i=e.hasResource?x.ready:e.hasDrilling&&(e.hasQaQc||e.hasDataVerification)||e.hasGeology?x.partial:x.gap,j=e.hasMinePlan&&e.hasMetTestwork?x.ready:e.hasMinePlan||e.hasMetTestwork?x.partial:x.gap,k=e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked,l=e.hasReserve&&e.hasCostEstimate?x.ready:e.hasReserve?x.partial:x.blocked,m=h?x.partial:x.blocked;f.push("## 2. Decision-gate status"),f.push(""),f.push("_Gates are sequential (template \xa72). A downstream gate is `Blocked` until its prerequisite passes — no amount of work on a later gate substitutes for the gate before it._"),f.push(""),f.push("| Gate | Requirement | Status |"),f.push("|------|-------------|--------|"),f.push(`| **G0** Study launch | Charter, code, scope, QPs, budget, gates fixed | ${x.gap} (no study charter in dataset) |`),f.push(`| **G1** Geological foundation | DB validated; QA/QC documented; M/I/I classified; RPEEE shown | ${i} |`),f.push(`| **G2** Options / trade-off | Mining method, process route, tailings, power/water selected | ${j} |`),f.push(`| **G3** Reserve declaration | M&I only; no Inferred; dilution & losses; Modifying Factors | ${k} |`),f.push(`| **G4** Estimate & economics | Capex/opex \xb125%; ~15% contingency; reserve-based model | ${l} |`),f.push(`| **G5** Assurance & disclosure | Risk register, fatal-flaw + independent review, QP sign-offs | ${m} |`),f.push("");let n=a=>a?x.partial:x.gap,p=[["1–3 \xb7 Summary / Introduction / Reliance",e.docCount>0,`${o(e.docCount)} source documents catalogued`],["4 \xb7 Property Description & Location",e.factTypes.has("property"),e.factTypes.has("property")?"property fact present":"no tenure/location fact extracted"],["5 \xb7 Accessibility, Climate, Infrastructure",!1,"not extracted — requires site/infrastructure data"],["6 \xb7 History",e.factTypes.has("deposit_type")||e.docCount>0,"historic archive present"],["7 \xb7 Geological Setting & Mineralization",e.hasGeology,e.hasGeology?`geology facts + ${e.targets} target(s)`:"no geology facts"],["8 \xb7 Deposit Types",e.factTypes.has("deposit_type"),e.factTypes.has("deposit_type")?"deposit_type fact present":"no deposit_type fact"],["9–10 \xb7 Exploration & Drilling",e.hasDrilling,`${e.drill?.n||0} drill holes; drilling/trenching summaries`],["11–12 \xb7 Sampling, Analyses, Data Verification",e.hasQaQc||e.hasDataVerification,`${e.assay?.n||0} assay samples; QA/QC=${e.hasQaQc}; verification=${e.hasDataVerification}`],["13 \xb7 Mineral Processing & Metallurgical Testing",e.hasMetTestwork,e.hasMetTestwork?"testwork present":"no metallurgical testwork — required for recovery model"],["14 \xb7 Mineral Resource Estimate",e.hasResource,e.hasResource?"resource present":"NO RESOURCE — blocks reserve & economics"],["15 \xb7 Mineral Reserve Estimate (defining PFS section)",e.hasReserve,e.hasReserve?"reserve present":"NO RESERVE — the PFS cannot exist without this"],["16 \xb7 Mining Methods",e.hasMinePlan,e.hasMinePlan?"mine-plan/geotech facts present":"no mine plan / geotechnical model"],["17 \xb7 Recovery Methods",e.hasMetTestwork,e.hasMetTestwork?"derived from testwork":"blocked on metallurgical testwork"],["18 \xb7 Project Infrastructure",!1,"not extracted — power/water/tailings/access required"],["19 \xb7 Market Studies & Contracts",e.hasMarket,e.hasMarket?"market snapshots/facts present":"no price deck / offtake"],["20 \xb7 Environmental, Permitting, Social",!1,"not extracted — baseline/permitting register required"],["21 \xb7 Capital & Operating Costs",e.hasCostEstimate,e.hasCostEstimate?"cost facts present":"no capex/opex estimate (need AACE Class 4)"],["22 \xb7 Economic Analysis",e.hasReserve&&e.hasCostEstimate,"requires a reserve-based model"],["23 \xb7 Adjacent Properties",e.comparables>0,`${e.comparables} comparable asset(s)`],["25–26 \xb7 Interpretation, Conclusions & Recommendations",e.docCount>0,"authored from the above"]];for(let[a,b,c]of(f.push("## 3. PFS section coverage (NI 43-101 body)"),f.push(""),f.push("| Section | Status | Evidence in dataset |"),f.push("|---------|--------|---------------------|"),p)){let d=a.startsWith("14 ")?e.hasResource?x.ready:x.gap:a.startsWith("15 ")?e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked:n(b);f.push(`| ${a} | ${d} | ${c} |`)}for(let[a,b]of(f.push(""),f.push("_Status is computed from `mines_extracted_facts` types and SQL aggregates — a `Gap` means the data type is absent from the database, not that it was judged inadequate._"),f.push(""),f.push("## 4. The PFS contract (must all hold to declare a PFS)"),f.push(""),[["Reserves from Measured & Indicated only (no Inferred)",e.hasReserve],["Dilution & mining losses incorporated",e.hasReserve&&e.hasMinePlan],["Modifying Factors formally applied & documented",e.hasReserve],["Capex/opex \xb125%, ~15% contingency, AACE Class 4",e.hasCostEstimate],["Reserve-based financial model, positive across a downside",e.hasReserve&&e.hasCostEstimate],["Each discipline signed off by a competent QP/CP",h]]))f.push(`- [${b?"x":" "}] ${a}`);f.push(""),h||f.push("Until every box is checked, the asset is **pre-PFS**. The earliest unchecked box on the critical path is where work must start (see \xa76)."),f.push(""),f.push("## 5. Data inventory"),f.push(""),f.push(`- **Documents catalogued:** ${o(e.docCount)} \xb7 **text chunks indexed:** ${o(e.chunkCount)}`),f.push(`- **Structured drill holes:** ${e.drill?.n||0}${e.drill?.m?` for ${o(e.drill.m)} m`:""} \xb7 **assay samples:** ${e.assay?.n||0}`),f.push(`- **Extracted fact types:** ${e.factTypes.size} \xb7 **defined targets:** ${e.targets} \xb7 **comparables:** ${e.comparables}`),f.push(`- **Valuation scenarios:** ${e.indicativeScenarios} indicative (T1/T2 runs) \xb7 ${e.conceptualScenarios} conceptual operator-target — neither is a declared resource`),f.push(""),f.push("_Counts are read directly from `mines_source_documents`, `mines_document_chunks`, `mines_drill_holes`, `mines_assay_samples`, `mines_extracted_facts`, and `mines_valuation_scenarios`._"),f.push(""),f.push("## 6. Critical-path gaps (ordered)"),f.push("");{let a=q(c,"gap_intro");a&&(f.push(a),f.push(""))}let r=[];e.hasResource||r.push("**Maiden Mineral Resource estimate** — the single hard blocker. Requires sufficient drill density, QA/QC-validated assays, density data, domaining, a block model, classification (M/I/I), and RPEEE within a constraining shape. Until this exists, no reserve, no economics, no PFS."),e.hasMetTestwork||r.push("**Metallurgical testwork** — representative samples across lithology/alteration/oxidation/depth/grade; a recovery model by domain (not a single point). Blocks \xa713/\xa717."),e.hasResource&&!e.hasMinePlan&&r.push("**Mine plan & geotechnical model** — method/pit-configuration trade-off, slope/support parameters, production schedule. Required before reserve conversion."),e.hasResource&&!e.hasReserve&&r.push("**Reserve conversion (\xa715)** — apply Modifying Factors to M&I, incorporate dilution & mining losses, derive Proven/Probable. This is the defining PFS step."),e.hasCostEstimate||r.push("**Capex/opex estimate to \xb125% (AACE Class 4)** — formal Basis of Estimate, vendor budget quotes on major items, ~15% risk-based contingency. Blocks \xa721/\xa722."),r.push("**Infrastructure, water & tailings study** — power/water/access; site water balance; tailings option + GISTM alignment; confirm no fatal flaw."),r.push("**Environmental / permitting / social baseline** — multi-season baseline, permitting register on the critical path, closure cost flowed to the model."),r.push("**Competent QP/CP sign-off per discipline** — and an independent / peer technical review before any disclosure."),r.forEach((a,b)=>f.push(`${b+1}. ${a}`)),f.push(""),f.push("## 7. Recommended work program to reach PFS"),f.push("");let s=a.prepare("SELECT id, value_text, page_or_location FROM mines_extracted_facts WHERE project_id = ? AND fact_type = 'work_program' LIMIT 1").get(d);s&&(f.push(`${s.value_text} [ExtractedFact:${s.id}${s.page_or_location?`, ${s.page_or_location}`:""}]`),f.push(""));let t=q(c,"work_program")||q(c,"recommendation");return t?(f.push("_Indicative phased program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(t),f.push("")):s||(f.push("Phase the program to the gate sequence above: (1) resource-definition drilling → maiden resource (G1); (2) metallurgical testwork + mining/geotech trade-off (G2); (3) reserve conversion with Modifying Factors (G3); (4) Class 4 cost estimate + reserve-based model (G4); (5) risk, independent review, QP sign-off (G5). Budget and schedule each phase before launch."),f.push("")),f.push("## 8. Limitations & disclaimers"),f.push(""),f.push("This is a readiness assessment generated by autonomous agents from the project database and document archive. Statuses reflect the **presence** of data types, not a competent person's judgement of their adequacy. The absence of a resource/reserve in the database is reported as a gap, never filled with an estimate. This document is decision-support analysis; it is not a Pre-Feasibility Study, not a qualified person's opinion, and does not constitute investment advice. Producing an actual PFS requires the work program above and competent-person sign-off under the applicable reporting code (NI 43-101 / S-K 1300 / JORC)."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (pfs_readiness_report). Gate/section statuses derive from `mines_extracted_facts` types and SQL aggregates; no figure is asserted that the source data does not contain. Rubric: `docs/mines/pfs-best-practice-template.md` + `pfs-best-practice-checklist.md`._"),{markdown:f.join("\n"),pfs_feasible:h,has_resource:e.hasResource,has_reserve:e.hasReserve,gaps_count:r.length,fact_types:e.factTypes.size,documents:e.docCount}}(w,y,B);c=a.markdown,d=`PFS-Readiness Assessment — ${y.name}`,z={pfs_feasible:a.pfs_feasible,has_resource:a.has_resource,has_reserve:a.has_reserve,gaps_count:a.gaps_count,fact_types:a.fact_types,documents:a.documents}}else{let a=await r(w,y,B);c=a.markdown,d=`Interpretation Memo — ${y.name}`,z={numeric_claims_count:a.numeric_claims_count,chunk_citations_count:a.chunk_citations_count,retrieval_mode:a.retrieval_mode}}let C=(0,k.Om)([a?.space_id,y.default_space_id],{fallback:null}),D=function(a,b){let c=a.prepare("SELECT os_project_id FROM mines_projects WHERE id = ?").get(b);return c?.os_project_id||null}(w,h);try{for(let a of C?w.prepare("SELECT id FROM artifacts WHERE title = ? AND space_id = ?").all(d,C):w.prepare("SELECT id FROM artifacts WHERE title = ? AND project_id = ?").all(d,D||"personal"))try{(0,f.CM)(a.id)}catch{}}catch{}let E=(0,f.Dg)({title:d,kind:A,content:c,project_id:D,agent_id:b.agent_id||null,space_id:C,dedupe_key:""});if(C&&!E.deduped)try{(0,k.h5)(E.artifact_id,C)}catch{}try{(0,i.appendComplianceAudit)({user_id:b.acting_on_behalf_of_user_id||b.user_id||"system",org_id:"personal-org",action:"mines.report.generated",status:"success",summary:`Generated ${l} for ${y.name}`,action_target_id:E.artifact_id,action_target_type:"artifact",meta:{project_id:h,report_kind:l,artifact_id:E.artifact_id,...z}})}catch{}return{status:"ok",artifact_id:E.artifact_id,report_kind:l,space_id:C,chunk_citations_count:z.chunk_citations_count??0,...z}}d()}catch(a){d(a)}})},14207:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{xI:()=>j});var e=c(73024),f=c(76760),g=c(26531),h=c(1441),i=a([h]);h=(i.then?(await i)():i)[0];let k=new Set(["node_modules",".git",".ssh"]),l=new Set([".ssh"]);function j({org_id:a}={}){function b(b){let c=f.resolve(String(b||""));if(!b)throw Error("allowlist_violation: empty path");if(function(a){if(a.split(f.sep).filter(Boolean).some(a=>l.has(a)))return!0;let b=f.basename(a);return".env.local"===b||/^\.env($|\.)/.test(b)}(c))throw Error("allowlist_violation: path is a secret/system path: "+c);if(!(0,g.wn)(c)&&!(0,h.RB)(c,{org_id:a}))throw Error("allowlist_violation: path is outside the OS-allowed or approved Mines import roots: "+c);return c}return{listFolder(a){let c=b(a),d=[],g=[c];for(;g.length;){let a,b=g.pop();try{a=e.readdirSync(b,{withFileTypes:!0})}catch{continue}for(let c of a){let a=c.name;if(a.startsWith("."))continue;let e=f.join(b,a);if(!c.isSymbolicLink())if(c.isDirectory()){if(k.has(a))continue;g.push(e)}else c.isFile()&&d.push(e)}}return d},readDocument(a){let c=b(a);return e.readFileSync(c)},statFile(a){let c,d=b(a);try{c=e.statSync(d)}catch{return null}return{size:c.size,mtimeMs:c.mtimeMs,isDirectory:c.isDirectory(),isFile:c.isFile()}}}}j(),d()}catch(a){d(a)}})},14743:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{G:()=>x});var e=c(73024),f=c(76760),g=c(19151),h=c(72326),i=c(1623),j=c(8727),k=c(34255),l=c(9381),m=c(40718),n=c(16494),o=c(63289),p=c(9001),q=c(69286),r=c(83963),s=a([g,h,i,j,k,m,n,p,r]);function t(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function u(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"agent"}async function v({agent:a,artifactTitle:b,renderedHtml:d,runId:e,triggeredBy:f,appendAudit:g}){let h,i,j=function(a){if(!a?.metadata_json)return null;let b=a.metadata_json;if("string"==typeof b)try{b=JSON.parse(b)}catch{return null}let c=b?.whatsapp_notify_chat_id;return"string"==typeof c&&c.trim()?c.trim():null}(a);if(!j||!d||!String(d).trim())return;try{({getBridgeHealth:h,sendWhatsAppDocument:i}=await c.e(4143).then(c.bind(c,64143)))}catch(b){g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp module unavailable for ${a.name}: ${b.message}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j}});return}let k=await h();if(!k||!1===k.ok||"paired"!==k.pairing_state)return void g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp bridge not paired — skipped artifact notify for ${a.name}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j,pairing_state:k?.pairing_state||null,bridge_error:k?.error||null}});try{let c=await i({chat_id:j,content:d,filename:function(a){let b=String(a||"agent-report").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"agent-report";return`${b}.html`}(b),mimetype:"text/html",caption:`${b} (${f||"scheduled"})`});g({type:"agent.whatsapp_notify.sent",summary:`Sent "${b}" to ${j} via WhatsApp`,status:"sent",meta:{agent_id:a.id,run_id:e,chat_id:j,message_id:c?.message_id||null}}),(0,p.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:"whatsapp_notify",status:"done"})}catch(b){g({type:"agent.whatsapp_notify.failed",summary:`Failed to WhatsApp artifact for ${a.name}: ${b.message}`,status:"error",meta:{agent_id:a.id,run_id:e,chat_id:j}})}}async function w({agent:a,systemPrompt:b,userMessage:c,onToolStart:d,onToolResult:e,onToolError:f,acting_on_behalf_of_user_id:i,heartbeat_task_id:j}){if(process.env.MADARX_MOCK_CLAUDE_TICK)return{output:process.env.MADARX_MOCK_CLAUDE_TICK,toolEvents:[]};let k=Math.max(256,Math.min(8192,Number(process.env.MAX_TOKENS_PER_TICK||1024)||1024)),l=(0,m.IC)(a.id),n=[{role:"user",content:c}],o=[],q="";for(let c=0;c<4;c+=1){let c=await (0,g.chatWithClaude)(n,b,l,{max_tokens:k,model:a.model}),h=(c?.content||[]).filter(a=>a?.type==="text"||"string"==typeof a?.text).map(a=>a.text||"").join("\n").trim();h&&(q=h);let r=(c?.content||[]).filter(a=>a?.type==="tool_use"&&a.name&&a.id);if(!r.length)break;n.push({role:"assistant",content:c.content});let s=[];for(let b of r){let c={name:b.name,input:b.input||{},status:"pending"},g=function(a,b){if(!b||"object"!=typeof b)return null;let c={};if("web_search"===a&&"string"==typeof b.query)c.query=b.query.slice(0,80);else if("web_fetch"===a&&"string"==typeof b.url)try{c.host=new URL(b.url).hostname}catch{}else"create_artifact"===a&&"string"==typeof b.title?c.title=b.title.slice(0,60):"create_agent"===a&&"string"==typeof b.name&&(c.name=b.name.slice(0,60));return Object.keys(c).length?c:null}(b.name,b.input);(0,p.AC)({type:"agent_tool_start",agent_id:a.id,agent_name:a.name,tool:b.name,input_summary:g}),await d?.({toolUse:b,inputSummary:g});try{let d=await (0,m.executeRegistryTool)(b.name,b.input||{},{agent_id:a.id,acting_on_behalf_of_user_id:i||null,heartbeat_task_id:j||null});c.status=d?.status||"complete",c.result=d,s.push({type:"tool_result",tool_use_id:b.id,content:function(a){try{return JSON.stringify(a).slice(0,4e3)}catch{return String(a).slice(0,4e3)}}(d),is_error:d?.ok===!1&&d?.status!=="approval_required"}),(0,p.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:c.status,isError:d?.ok===!1&&d?.status!=="approval_required"}),await e?.({toolUse:b,result:d,inputSummary:g,event:c})}catch(d){c.status="failed",c.error=d.message,s.push({type:"tool_result",tool_use_id:b.id,content:d.message,is_error:!0}),(0,p.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:"failed",isError:!0,message:d.message}),await f?.({toolUse:b,error:d,inputSummary:g,event:c})}o.push(c)}n.push({role:"user",content:s})}if(!q)throw Error("Claude returned no text for scheduled agent tick");return{output:q,toolEvents:o,engine:"anthropic",model:a.model||(0,h.Qp)("anthropic")}}async function x(a,{triggered_by:b="cron",task_id:d=null,agent_run_id:g=null,wake_reason:m=null,instruction:s=null,expected_output:y=null,acting_on_behalf_of_user_id:z=null,heartbeat_task_id:A=null}={}){(0,l.Jh)();let B=(0,k.getDb)(),C="object"==typeof a&&a?.id?a:(0,k.getDb)().prepare("SELECT * FROM agents WHERE id = ?").get(String(a||""));if(!C)return null;let D=d?g?(0,r.rN)(g):(0,r.n5)({task_id:d,agent_id:C.id,trigger_source:b,trigger_detail:m||b}):null;D&&((0,r.V0)(D.id),(0,r.lC)(d,{status:"in_progress",actor_type:"agent",actor_id:C.id})),(0,q.XI)(C.id),(0,p.AC)({type:"agent_run_start",agent_id:C.id,agent_name:C.name,triggered_by:b,run_id:D?.id||null,task_id:d});try{let a=t(C.memory,[]),g=a.slice(-10),m=function(a){let b=f.join(l.bo,a,"skills.md");try{return e.readFileSync(b,"utf8").trim()}catch{return""}}(C.id),q=new Date().toISOString().slice(0,10),x=C.system_prompt||`You are ${C.name}, a scheduled madarX OS worker.
|
|
606
|
+
`).all(d),k=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(d).n,l=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(d).n,p=b=>a.prepare("SELECT price_usd, price_unit, source FROM mines_market_snapshots WHERE lower(commodity)=lower(?) ORDER BY fetched_at DESC LIMIT 1").get(b),r=p("Cu"),t=p("Ag"),u=a.prepare("SELECT scenario, assumptions_json, result_json FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%' ORDER BY scenario").all(d);f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"Cu"} | **Jurisdiction:** ${b.state_province||"Sonora"}, ${b.country}`),f.push(""),f.push("> This memorandum is generated by autonomous agents from the project document archive and structured database. Every figure traces to a source document, a database aggregate, or a labelled estimate. Figures attributed to an operator scenario are conceptual and are **not** mineral resources."),f.push(""),f.push("## 1. Executive summary"),f.push("");let v=s(e,"deposit_type"),w=s(e,"asset_stage"),x=q(c,"exec_summary");x&&(f.push(x),f.push("")),v&&f.push(`- **Deposit type:** ${v.text} ${v.cite}`);let y=q(c,"thesis");y&&(f.push(`**Investment thesis.** ${y}`),f.push("")),w&&f.push(`- **Stage / resource status:** ${w.text} ${w.cite}`),i?.n&&f.push(`- **Drilling to date:** ${i.n} holes for ${o(i.m)} m [DrillHole aggregate]`),h?.n&&f.push(`- **Surface geochemistry:** ${h.n} trench channel samples averaging ${m(h.avg_cu,3)}% Cu [AssaySample aggregate]`),f.push(`- **Definitive valuation:** Not available — no declared resource. See \xa76 for a labelled operator scenario.`),f.push(""),f.push("## 2. Project overview"),f.push("");{let a=q(c,"overview");a&&(f.push(a),f.push(""))}for(let a of["property","mineralization","asset_stage"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push(""),f.push("## 3. Geology & mineralization"),f.push("");{let a=q(c,"geology");a&&(f.push(a),f.push(""))}for(let a of["deposit_type","geophysics"]){let b=s(e,a);b&&f.push(`- **${a.replace(/_/g," ")}:** ${b.text} ${b.cite}`)}f.push("");let z=[...e.keys()].filter(a=>a.startsWith("target_")).sort();if(z.length){for(let a of(f.push("### Defined targets"),f.push(""),z)){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("target_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push("")}f.push("## 4. Exploration results"),f.push("");{let a=q(c,"exploration");a&&(f.push(a),f.push(""))}let A=s(e,"drilling_summary");if(A&&f.push(`${A.text} ${A.cite}`),f.push(""),j.length){for(let a of(f.push("**Best drill intercepts (Cu \xd7 width ranked):**"),f.push(""),f.push("| Interval | Width (m) | Cu % | Ag g/t | CuEq % |"),f.push("|----------|-----------|------|--------|--------|"),j)){let b={};try{b=JSON.parse(a.other_grades_json||"{}")}catch{}f.push(`| \`${a.sample_id}\` | ${o(a.width_m,1)} | ${m(a.cu_pct,3)} | ${null!=a.ag_ppm?m(a.ag_ppm,1):"—"} | ${null!=b.cueq_pct?m(b.cueq_pct,3):"—"} |`)}f.push(""),f.push("_[AssaySample drill_core rows; CuEq per source-report formula]_"),f.push("")}let B=s(e,"trenching_summary");B&&(f.push(`${B.text} ${B.cite}`),f.push(""));let C=[...e.keys()].filter(a=>a.startsWith("comparable_")).sort();if(C.length){f.push("## 5. Comparable assets (analogues in the same belt)"),f.push("");{let a=q(c,"comparables");a&&(f.push(a),f.push(""))}for(let a of C){let b=(e.get(a)||[])[0];b&&f.push(`- **${a.replace("comparable_","").replace(/_/g," ")}:** ${b.value_text} [ExtractedFact:${b.id}${b.page_or_location?`, ${b.page_or_location}`:""}]`)}f.push(""),f.push("_Analogues establish the geological model and the in-ground value range for a successful porphyry discovery in this belt. They are not a prediction of Batamote tonnage or grade._"),f.push("")}if(f.push("## 6. Valuation framework & indicative scenario"),f.push(""),f.push("No mineral resource has been declared for the project, therefore **no definitive (T1 in-situ or T2 DCF) valuation is produced** — the system does not assign tonnage or value to undefined mineralization. The figures below are a **conceptual operator scenario**, not a mineral resource and not a valuation opinion."),f.push(""),(r||t)&&(f.push(`**Metal price basis:** ${r?`Cu ${n(r.price_usd)}/lb`:""}${r&&t?" \xb7 ":""}${t?`Ag ${n(t.price_usd)}/oz`:""} (${r?.source||t?.source||"snapshot"}).`),f.push("")),u.length){for(let a of(f.push("| Scenario | Target tonnage | Cu grade | Indicative in-situ value |"),f.push("|----------|----------------|----------|--------------------------|"),u)){let b={},c={};try{b=JSON.parse(a.assumptions_json||"{}")}catch{}try{c=JSON.parse(a.result_json||"{}")}catch{}let d=a.scenario.replace("operator_","");f.push(`| ${d} | ${o(b.resource_tonnes)} t | ${m(b.grade_cu_pct,3)}% | ${n(c.in_situ_value_usd)} |`)}f.push(""),f.push("> **CONCEPTUAL EXPLORATION TARGET — IMPORTANT.** The tonnage and grade above are an operator-supplied conceptual exploration target expressed as a range. They are conceptual in nature; there has been insufficient exploration to define a mineral resource; and it is uncertain whether further exploration will result in the target being delineated as a mineral resource. These figures must not be construed as a mineral resource or a mineral reserve, and the in-situ values are an order-of-magnitude indication of exploration optionality only."),f.push("")}f.push("## 7. Data inventory & quality control"),f.push(""),f.push(`- **Documents catalogued:** ${o(k)} files across the project archive.`),f.push(`- **Text chunks indexed:** ${o(l)} for retrieval.`),i?.n&&f.push(`- **Structured drill holes:** ${i.n}; **trench assays:** ${h?.n||0}; **drill intercepts:** ${j.length}.`);let D=s(e,"qa_qc");D&&f.push(`- **QA/QC:** ${D.text} ${D.cite}`);let E=s(e,"data_verification");E&&f.push(`- **Data verification:** ${E.text} ${E.cite}`),f.push(""),f.push("## 8. Risk register"),f.push("");{let a=q(c,"risk_intro");a&&(f.push(a),f.push(""))}f.push("| Risk | Severity | Mitigation |"),f.push("|------|----------|------------|"),f.push("| No declared mineral resource (exploration risk) | High | Maiden resource drill program at El Choclo NW / Bata Sur |"),f.push("| Grade continuity not yet demonstrated at depth | Medium | Infill + step-out drilling; clay-alteration vectoring |"),f.push("| Metal price volatility | Medium | Long-dated optionality; copper structural demand |"),f.push("| Permitting / surface rights (Sonora) | Medium | Confirm tenure & community agreements in legal DD |"),f.push("| Data provenance (historic operators) | Low–Med | Teck data verified vs lab certificates; re-log key holes |"),f.push(""),f.push("## 9. Recommended work program"),f.push("");let F=s(e,"work_program");F&&(f.push(`${F.text} ${F.cite}`),f.push(""));let G=q(c,"recommendation");return G&&(f.push("_Indicative next-phase program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(G),f.push("")),f.push("## 10. Limitations & disclaimers"),f.push(""),f.push("Structured figures are transcribed/extracted from the project NI 43-101 technical report and archive; comparable-asset figures are from public S-K 1300 reports referenced therein. Metal prices are dated market snapshots. The operator scenario is conceptual and not a mineral resource. This memorandum is decision-support analysis, not a qualified person's valuation opinion, and does not constitute investment advice."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (due_diligence_memo). Numeric claims trace to `mines_extracted_facts`, SQL aggregates, or persisted `mines_valuation_scenarios` rows._"),{markdown:f.join("\n"),facts_cited:[...e.values()].reduce((a,b)=>a+b.length,0),comparables:C.length,targets:z.length,scenario_rows:u.length}}(w,y,B);c=a.markdown,d=`Investment Diligence Memo — ${y.name}`,z={facts_cited:a.facts_cited,comparables:a.comparables,targets:a.targets,scenario_rows:a.scenario_rows}}else if("pfs_readiness_report"===l){let a=function(a,b,c={}){let d=b.id,e=function(a,b){let c=new Set(a.prepare("SELECT DISTINCT fact_type FROM mines_extracted_facts WHERE project_id = ?").all(b).map(a=>a.fact_type)),d=(...a)=>[...c].some(b=>a.some(a=>b===a||b.startsWith(`${a}_`)||b.includes(a))),e=a.prepare("SELECT COUNT(*) n, SUM(total_depth_m) m FROM mines_drill_holes WHERE project_id = ?").get(b),f=a.prepare("SELECT COUNT(*) n FROM mines_assay_samples WHERE project_id = ?").get(b),g=a.prepare("SELECT COUNT(*) n FROM mines_source_documents WHERE project_id = ?").get(b).n,h=a.prepare("SELECT COUNT(*) n FROM mines_document_chunks WHERE project_id = ?").get(b).n,i=[...c].filter(a=>a.startsWith("target_")).length,j=[...c].filter(a=>a.startsWith("comparable_")).length,k=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario NOT LIKE 'operator_%'").get(b).n,l=a.prepare("SELECT COUNT(*) n FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%'").get(b).n,m=d("mineral_resource","resource_estimate","resource_statement","resource_classification","measured_indicated"),n=d("mineral_reserve","reserve_estimate","proven","probable"),o=d("metallurg","recovery","met_testwork","processing"),p=d("mine_plan","production_schedule","mining_method","pit","geotech"),q=d("capex","opex","cost_estimate","aisc"),r=d("market","price_deck","offtake")||a.prepare("SELECT COUNT(*) n FROM mines_market_snapshots").get().n>0,s=c.has("qa_qc"),t=c.has("data_verification"),u=d("deposit_type","mineralization","geophysics","property")||i>0,v=(e?.n||0)>0||d("drilling_summary","trenching_summary");return{factTypes:c,drill:e,assay:f,docCount:g,chunkCount:h,targets:i,comparables:j,indicativeScenarios:k,conceptualScenarios:l,hasResource:m,hasReserve:n,hasMetTestwork:o,hasMinePlan:p,hasCostEstimate:q,hasMarket:r,hasQaQc:s,hasDataVerification:t,hasGeology:u,hasDrilling:v}}(a,d),f=[],g=new Date().toISOString().slice(0,10),h=e.hasResource&&e.hasReserve;f.push(`**Prepared by:** MadarX OS \xb7 Mines | **Date:** ${g} | **Project:** \`${d}\``),f.push(`**Asset stage:** ${b.asset_stage} | **Commodity:** ${b.commodity||"n/a"} | **Jurisdiction:** ${b.state_province||"n/a"}, ${b.country||"n/a"}`),f.push(""),f.push("> **This is a PFS-READINESS ASSESSMENT, not a Pre-Feasibility Study.** A PFS requires a Mineral Reserve converted from Measured & Indicated Resources (no Inferred), with Modifying Factors, a mine plan, recovery testwork, and capex/opex to \xb125% (AACE Class 4), each signed off by a competent QP/CP. This report measures the asset against that standard, inventories the data that exists (every count traces to a database row), and lists the gaps and work program required to reach PFS confidence. It does **not** declare a resource, a reserve, or any figure the source data does not contain."),f.push(""),f.push("## 1. Readiness verdict"),f.push("");{let a=q(c,"verdict");a&&(f.push(a),f.push(""))}h?f.push("**A Mineral Reserve appears to exist in the dataset.** A PFS may be supportable — proceed to the section-by-section coverage below to confirm each discipline meets PFS confidence, then route reserve/economics work to the valuation analyst and a competent QP."):e.hasResource&&!e.hasReserve?f.push("**A Mineral Resource is present but no Mineral Reserve has been declared.** A PFS is **not yet supportable**. The defining PFS step — conversion of Measured & Indicated Resources to a Proven/Probable Reserve via Modifying Factors (template \xa715) — has not been done. This is the critical path."):(f.push("**No Mineral Resource is declared for this asset.** A PFS is **not supportable and must not be produced.** Per the PFS contract (template \xa71, checklist gate G3) reserves derive from Measured & Indicated Resources only — and there is no resource to convert. The asset sits at an **exploration / scoping** confidence level. The work below maps a path from exploration data to a maiden resource, and from there toward PFS."),e.conceptualScenarios>0&&(f.push(""),f.push(`> The project carries ${e.conceptualScenarios} conceptual operator scenario(s) in \`mines_valuation_scenarios\`. These are exploration-target order-of-magnitude figures, **not** a mineral resource, and cannot seed a reserve or a PFS economic case.`))),f.push("");let i=e.hasResource?x.ready:e.hasDrilling&&(e.hasQaQc||e.hasDataVerification)||e.hasGeology?x.partial:x.gap,j=e.hasMinePlan&&e.hasMetTestwork?x.ready:e.hasMinePlan||e.hasMetTestwork?x.partial:x.gap,k=e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked,l=e.hasReserve&&e.hasCostEstimate?x.ready:e.hasReserve?x.partial:x.blocked,m=h?x.partial:x.blocked;f.push("## 2. Decision-gate status"),f.push(""),f.push("_Gates are sequential (template \xa72). A downstream gate is `Blocked` until its prerequisite passes — no amount of work on a later gate substitutes for the gate before it._"),f.push(""),f.push("| Gate | Requirement | Status |"),f.push("|------|-------------|--------|"),f.push(`| **G0** Study launch | Charter, code, scope, QPs, budget, gates fixed | ${x.gap} (no study charter in dataset) |`),f.push(`| **G1** Geological foundation | DB validated; QA/QC documented; M/I/I classified; RPEEE shown | ${i} |`),f.push(`| **G2** Options / trade-off | Mining method, process route, tailings, power/water selected | ${j} |`),f.push(`| **G3** Reserve declaration | M&I only; no Inferred; dilution & losses; Modifying Factors | ${k} |`),f.push(`| **G4** Estimate & economics | Capex/opex \xb125%; ~15% contingency; reserve-based model | ${l} |`),f.push(`| **G5** Assurance & disclosure | Risk register, fatal-flaw + independent review, QP sign-offs | ${m} |`),f.push("");let n=a=>a?x.partial:x.gap,p=[["1–3 \xb7 Summary / Introduction / Reliance",e.docCount>0,`${o(e.docCount)} source documents catalogued`],["4 \xb7 Property Description & Location",e.factTypes.has("property"),e.factTypes.has("property")?"property fact present":"no tenure/location fact extracted"],["5 \xb7 Accessibility, Climate, Infrastructure",!1,"not extracted — requires site/infrastructure data"],["6 \xb7 History",e.factTypes.has("deposit_type")||e.docCount>0,"historic archive present"],["7 \xb7 Geological Setting & Mineralization",e.hasGeology,e.hasGeology?`geology facts + ${e.targets} target(s)`:"no geology facts"],["8 \xb7 Deposit Types",e.factTypes.has("deposit_type"),e.factTypes.has("deposit_type")?"deposit_type fact present":"no deposit_type fact"],["9–10 \xb7 Exploration & Drilling",e.hasDrilling,`${e.drill?.n||0} drill holes; drilling/trenching summaries`],["11–12 \xb7 Sampling, Analyses, Data Verification",e.hasQaQc||e.hasDataVerification,`${e.assay?.n||0} assay samples; QA/QC=${e.hasQaQc}; verification=${e.hasDataVerification}`],["13 \xb7 Mineral Processing & Metallurgical Testing",e.hasMetTestwork,e.hasMetTestwork?"testwork present":"no metallurgical testwork — required for recovery model"],["14 \xb7 Mineral Resource Estimate",e.hasResource,e.hasResource?"resource present":"NO RESOURCE — blocks reserve & economics"],["15 \xb7 Mineral Reserve Estimate (defining PFS section)",e.hasReserve,e.hasReserve?"reserve present":"NO RESERVE — the PFS cannot exist without this"],["16 \xb7 Mining Methods",e.hasMinePlan,e.hasMinePlan?"mine-plan/geotech facts present":"no mine plan / geotechnical model"],["17 \xb7 Recovery Methods",e.hasMetTestwork,e.hasMetTestwork?"derived from testwork":"blocked on metallurgical testwork"],["18 \xb7 Project Infrastructure",!1,"not extracted — power/water/tailings/access required"],["19 \xb7 Market Studies & Contracts",e.hasMarket,e.hasMarket?"market snapshots/facts present":"no price deck / offtake"],["20 \xb7 Environmental, Permitting, Social",!1,"not extracted — baseline/permitting register required"],["21 \xb7 Capital & Operating Costs",e.hasCostEstimate,e.hasCostEstimate?"cost facts present":"no capex/opex estimate (need AACE Class 4)"],["22 \xb7 Economic Analysis",e.hasReserve&&e.hasCostEstimate,"requires a reserve-based model"],["23 \xb7 Adjacent Properties",e.comparables>0,`${e.comparables} comparable asset(s)`],["25–26 \xb7 Interpretation, Conclusions & Recommendations",e.docCount>0,"authored from the above"]];for(let[a,b,c]of(f.push("## 3. PFS section coverage (NI 43-101 body)"),f.push(""),f.push("| Section | Status | Evidence in dataset |"),f.push("|---------|--------|---------------------|"),p)){let d=a.startsWith("14 ")?e.hasResource?x.ready:x.gap:a.startsWith("15 ")?e.hasReserve?x.ready:e.hasResource?x.gap:x.blocked:n(b);f.push(`| ${a} | ${d} | ${c} |`)}for(let[a,b]of(f.push(""),f.push("_Status is computed from `mines_extracted_facts` types and SQL aggregates — a `Gap` means the data type is absent from the database, not that it was judged inadequate._"),f.push(""),f.push("## 4. The PFS contract (must all hold to declare a PFS)"),f.push(""),[["Reserves from Measured & Indicated only (no Inferred)",e.hasReserve],["Dilution & mining losses incorporated",e.hasReserve&&e.hasMinePlan],["Modifying Factors formally applied & documented",e.hasReserve],["Capex/opex \xb125%, ~15% contingency, AACE Class 4",e.hasCostEstimate],["Reserve-based financial model, positive across a downside",e.hasReserve&&e.hasCostEstimate],["Each discipline signed off by a competent QP/CP",h]]))f.push(`- [${b?"x":" "}] ${a}`);f.push(""),h||f.push("Until every box is checked, the asset is **pre-PFS**. The earliest unchecked box on the critical path is where work must start (see \xa76)."),f.push(""),f.push("## 5. Data inventory"),f.push(""),f.push(`- **Documents catalogued:** ${o(e.docCount)} \xb7 **text chunks indexed:** ${o(e.chunkCount)}`),f.push(`- **Structured drill holes:** ${e.drill?.n||0}${e.drill?.m?` for ${o(e.drill.m)} m`:""} \xb7 **assay samples:** ${e.assay?.n||0}`),f.push(`- **Extracted fact types:** ${e.factTypes.size} \xb7 **defined targets:** ${e.targets} \xb7 **comparables:** ${e.comparables}`),f.push(`- **Valuation scenarios:** ${e.indicativeScenarios} indicative (T1/T2 runs) \xb7 ${e.conceptualScenarios} conceptual operator-target — neither is a declared resource`),f.push(""),f.push("_Counts are read directly from `mines_source_documents`, `mines_document_chunks`, `mines_drill_holes`, `mines_assay_samples`, `mines_extracted_facts`, and `mines_valuation_scenarios`._"),f.push(""),f.push("## 6. Critical-path gaps (ordered)"),f.push("");{let a=q(c,"gap_intro");a&&(f.push(a),f.push(""))}let r=[];e.hasResource||r.push("**Maiden Mineral Resource estimate** — the single hard blocker. Requires sufficient drill density, QA/QC-validated assays, density data, domaining, a block model, classification (M/I/I), and RPEEE within a constraining shape. Until this exists, no reserve, no economics, no PFS."),e.hasMetTestwork||r.push("**Metallurgical testwork** — representative samples across lithology/alteration/oxidation/depth/grade; a recovery model by domain (not a single point). Blocks \xa713/\xa717."),e.hasResource&&!e.hasMinePlan&&r.push("**Mine plan & geotechnical model** — method/pit-configuration trade-off, slope/support parameters, production schedule. Required before reserve conversion."),e.hasResource&&!e.hasReserve&&r.push("**Reserve conversion (\xa715)** — apply Modifying Factors to M&I, incorporate dilution & mining losses, derive Proven/Probable. This is the defining PFS step."),e.hasCostEstimate||r.push("**Capex/opex estimate to \xb125% (AACE Class 4)** — formal Basis of Estimate, vendor budget quotes on major items, ~15% risk-based contingency. Blocks \xa721/\xa722."),r.push("**Infrastructure, water & tailings study** — power/water/access; site water balance; tailings option + GISTM alignment; confirm no fatal flaw."),r.push("**Environmental / permitting / social baseline** — multi-season baseline, permitting register on the critical path, closure cost flowed to the model."),r.push("**Competent QP/CP sign-off per discipline** — and an independent / peer technical review before any disclosure."),r.forEach((a,b)=>f.push(`${b+1}. ${a}`)),f.push(""),f.push("## 7. Recommended work program to reach PFS"),f.push("");let s=a.prepare("SELECT id, value_text, page_or_location FROM mines_extracted_facts WHERE project_id = ? AND fact_type = 'work_program' LIMIT 1").get(d);s&&(f.push(`${s.value_text} [ExtractedFact:${s.id}${s.page_or_location?`, ${s.page_or_location}`:""}]`),f.push(""));let t=q(c,"work_program")||q(c,"recommendation");return t?(f.push("_Indicative phased program (MadarX planning view, not from the technical report):_"),f.push(""),f.push(t),f.push("")):s||(f.push("Phase the program to the gate sequence above: (1) resource-definition drilling → maiden resource (G1); (2) metallurgical testwork + mining/geotech trade-off (G2); (3) reserve conversion with Modifying Factors (G3); (4) Class 4 cost estimate + reserve-based model (G4); (5) risk, independent review, QP sign-off (G5). Budget and schedule each phase before launch."),f.push("")),f.push("## 8. Limitations & disclaimers"),f.push(""),f.push("This is a readiness assessment generated by autonomous agents from the project database and document archive. Statuses reflect the **presence** of data types, not a competent person's judgement of their adequacy. The absence of a resource/reserve in the database is reported as a gap, never filled with an estimate. This document is decision-support analysis; it is not a Pre-Feasibility Study, not a qualified person's opinion, and does not constitute investment advice. Producing an actual PFS requires the work program above and competent-person sign-off under the applicable reporting code (NI 43-101 / S-K 1300 / JORC)."),f.push(""),f.push("---"),f.push("_Generated by `mines_report_generate` (pfs_readiness_report). Gate/section statuses derive from `mines_extracted_facts` types and SQL aggregates; no figure is asserted that the source data does not contain. Rubric: `docs/mines/pfs-best-practice-template.md` + `pfs-best-practice-checklist.md`._"),{markdown:f.join("\n"),pfs_feasible:h,has_resource:e.hasResource,has_reserve:e.hasReserve,gaps_count:r.length,fact_types:e.factTypes.size,documents:e.docCount}}(w,y,B);c=a.markdown,d=`PFS-Readiness Assessment — ${y.name}`,z={pfs_feasible:a.pfs_feasible,has_resource:a.has_resource,has_reserve:a.has_reserve,gaps_count:a.gaps_count,fact_types:a.fact_types,documents:a.documents}}else{let a=await r(w,y,B);c=a.markdown,d=`Interpretation Memo — ${y.name}`,z={numeric_claims_count:a.numeric_claims_count,chunk_citations_count:a.chunk_citations_count,retrieval_mode:a.retrieval_mode}}let C=(0,k.Om)([a?.space_id,y.default_space_id],{fallback:null}),D=function(a,b){let c=a.prepare("SELECT os_project_id FROM mines_projects WHERE id = ?").get(b);return c?.os_project_id||null}(w,h);try{for(let a of C?w.prepare("SELECT id FROM artifacts WHERE title = ? AND space_id = ?").all(d,C):w.prepare("SELECT id FROM artifacts WHERE title = ? AND project_id = ?").all(d,D||"personal"))try{(0,f.CM)(a.id)}catch{}}catch{}let E=(0,f.Dg)({title:d,kind:A,content:c,project_id:D,agent_id:b.agent_id||null,space_id:C,dedupe_key:""});if(C&&!E.deduped)try{(0,k.h5)(E.artifact_id,C)}catch{}try{(0,i.appendComplianceAudit)({user_id:b.acting_on_behalf_of_user_id||b.user_id||"system",org_id:"personal-org",action:"mines.report.generated",status:"success",summary:`Generated ${l} for ${y.name}`,action_target_id:E.artifact_id,action_target_type:"artifact",meta:{project_id:h,report_kind:l,artifact_id:E.artifact_id,...z}})}catch{}return{status:"ok",artifact_id:E.artifact_id,report_kind:l,space_id:C,chunk_citations_count:z.chunk_citations_count??0,...z}}d()}catch(a){d(a)}})},14207:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{xI:()=>j});var e=c(73024),f=c(76760),g=c(26531),h=c(1441),i=a([h]);h=(i.then?(await i)():i)[0];let k=new Set(["node_modules",".git",".ssh"]),l=new Set([".ssh"]);function j({org_id:a}={}){function b(b){let c=f.resolve(String(b||""));if(!b)throw Error("allowlist_violation: empty path");if(function(a){if(a.split(f.sep).filter(Boolean).some(a=>l.has(a)))return!0;let b=f.basename(a);return".env.local"===b||/^\.env($|\.)/.test(b)}(c))throw Error("allowlist_violation: path is a secret/system path: "+c);if(!(0,g.wn)(c)&&!(0,h.RB)(c,{org_id:a}))throw Error("allowlist_violation: path is outside the OS-allowed or approved Mines import roots: "+c);return c}return{listFolder(a){let c=b(a),d=[],g=[c];for(;g.length;){let a,b=g.pop();try{a=e.readdirSync(b,{withFileTypes:!0})}catch{continue}for(let c of a){let a=c.name;if(a.startsWith("."))continue;let e=f.join(b,a);if(!c.isSymbolicLink())if(c.isDirectory()){if(k.has(a))continue;g.push(e)}else c.isFile()&&d.push(e)}}return d},readDocument(a){let c=b(a);return e.readFileSync(c)},statFile(a){let c,d=b(a);try{c=e.statSync(d)}catch{return null}return{size:c.size,mtimeMs:c.mtimeMs,isDirectory:c.isDirectory(),isFile:c.isFile()}}}}j(),d()}catch(a){d(a)}})},14743:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{G:()=>y});var e=c(73024),f=c(76760),g=c(19151),h=c(72326),i=c(1623),j=c(8727),k=c(66469),l=c(34255),m=c(9381),n=c(40718),o=c(16494),p=c(63289),q=c(9001),r=c(69286),s=c(83963),t=a([g,h,i,j,l,n,o,q,s]);[g,h,i,j,l,n,o,q,s]=t.then?(await t)():t;let z=/```madarx-escalate\s*([\s\S]*?)```/i;function u(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function v(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"agent"}async function w({agent:a,artifactTitle:b,renderedHtml:d,runId:e,triggeredBy:f,appendAudit:g}){let h,i,j=function(a){if(!a?.metadata_json)return null;let b=a.metadata_json;if("string"==typeof b)try{b=JSON.parse(b)}catch{return null}let c=b?.whatsapp_notify_chat_id;return"string"==typeof c&&c.trim()?c.trim():null}(a);if(!j||!d||!String(d).trim())return;try{({getBridgeHealth:h,sendWhatsAppDocument:i}=await c.e(4143).then(c.bind(c,64143)))}catch(b){g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp module unavailable for ${a.name}: ${b.message}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j}});return}let k=await h();if(!k||!1===k.ok||"paired"!==k.pairing_state)return void g({type:"agent.whatsapp_notify.skipped",summary:`WhatsApp bridge not paired — skipped artifact notify for ${a.name}`,status:"skipped",meta:{agent_id:a.id,run_id:e,chat_id:j,pairing_state:k?.pairing_state||null,bridge_error:k?.error||null}});try{let c=await i({chat_id:j,content:d,filename:function(a){let b=String(a||"agent-report").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,60)||"agent-report";return`${b}.html`}(b),mimetype:"text/html",caption:`${b} (${f||"scheduled"})`});g({type:"agent.whatsapp_notify.sent",summary:`Sent "${b}" to ${j} via WhatsApp`,status:"sent",meta:{agent_id:a.id,run_id:e,chat_id:j,message_id:c?.message_id||null}}),(0,q.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:"whatsapp_notify",status:"done"})}catch(b){g({type:"agent.whatsapp_notify.failed",summary:`Failed to WhatsApp artifact for ${a.name}: ${b.message}`,status:"error",meta:{agent_id:a.id,run_id:e,chat_id:j}})}}async function x({agent:a,systemPrompt:b,userMessage:c,onToolStart:d,onToolResult:e,onToolError:f,acting_on_behalf_of_user_id:i,heartbeat_task_id:j,pending_approvals:k=[]}){if(process.env.MADARX_MOCK_CLAUDE_TICK)return{output:process.env.MADARX_MOCK_CLAUDE_TICK,toolEvents:[],created_approvals:[]};let l=Math.max(256,Math.min(8192,Number(process.env.MAX_TOKENS_PER_TICK||1024)||1024)),m=(0,n.IC)(a.id),o=[{role:"user",content:c}],p=[],r=(Array.isArray(k)?k:[]).filter(a=>a&&"string"==typeof a.approval_id&&"string"==typeof a.tool_name).map(a=>({approval_id:a.approval_id,tool_name:a.tool_name,used:!1})),s=[],t="";for(let c=0;c<4;c+=1){let c=await (0,g.chatWithClaude)(o,b,m,{max_tokens:l,model:a.model}),h=(c?.content||[]).filter(a=>a?.type==="text"||"string"==typeof a?.text).map(a=>a.text||"").join("\n").trim();h&&(t=h);let k=(c?.content||[]).filter(a=>a?.type==="tool_use"&&a.name&&a.id);if(!k.length)break;o.push({role:"assistant",content:c.content});let u=[];for(let b of k){let c={name:b.name,input:b.input||{},status:"pending"},g=function(a,b){if(!b||"object"!=typeof b)return null;let c={};if("web_search"===a&&"string"==typeof b.query)c.query=b.query.slice(0,80);else if("web_fetch"===a&&"string"==typeof b.url)try{c.host=new URL(b.url).hostname}catch{}else"create_artifact"===a&&"string"==typeof b.title?c.title=b.title.slice(0,60):"create_agent"===a&&"string"==typeof b.name&&(c.name=b.name.slice(0,60));return Object.keys(c).length?c:null}(b.name,b.input);(0,q.AC)({type:"agent_tool_start",agent_id:a.id,agent_name:a.name,tool:b.name,input_summary:g}),await d?.({toolUse:b,inputSummary:g});try{let d=await (0,n.executeRegistryTool)(b.name,function(a,b){let c=r.find(b=>!b.used&&b.tool_name===a);return c?(c.used=!0,{...b||{},approval_id:c.approval_id}):b}(b.name,b.input||{}),{agent_id:a.id,acting_on_behalf_of_user_id:i||null,heartbeat_task_id:j||null});c.status=d?.status||"complete",c.result=d,d?.status==="approval_required"&&d?.approval_request_id&&s.push({approval_request_id:d.approval_request_id,tool_name:b.name,summary:d.reason||`Approval required for ${b.name}`}),u.push({type:"tool_result",tool_use_id:b.id,content:function(a){try{return JSON.stringify(a).slice(0,4e3)}catch{return String(a).slice(0,4e3)}}(d),is_error:d?.ok===!1&&d?.status!=="approval_required"}),(0,q.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:c.status,isError:d?.ok===!1&&d?.status!=="approval_required"}),await e?.({toolUse:b,result:d,inputSummary:g,event:c})}catch(d){c.status="failed",c.error=d.message,u.push({type:"tool_result",tool_use_id:b.id,content:d.message,is_error:!0}),(0,q.AC)({type:"agent_tool_result",agent_id:a.id,agent_name:a.name,tool:b.name,status:"failed",isError:!0,message:d.message}),await f?.({toolUse:b,error:d,inputSummary:g,event:c})}p.push(c)}o.push({role:"user",content:u})}if(!t)throw Error("Claude returned no text for scheduled agent tick");return{output:t,toolEvents:p,created_approvals:s,engine:"anthropic",model:a.model||(0,h.Qp)("anthropic")}}async function y(a,{triggered_by:b="cron",task_id:d=null,agent_run_id:g=null,wake_reason:n=null,instruction:t=null,expected_output:A=null,pending_approvals:B=[],acting_on_behalf_of_user_id:C=null,heartbeat_task_id:D=null}={}){(0,m.Jh)();let E=(0,l.getDb)(),F="object"==typeof a&&a?.id?a:(0,l.getDb)().prepare("SELECT * FROM agents WHERE id = ?").get(String(a||""));if(!F)return null;let G=d?g?(0,s.rN)(g):(0,s.n5)({task_id:d,agent_id:F.id,trigger_source:b,trigger_detail:n||b}):null;G&&((0,s.V0)(G.id),(0,s.lC)(d,{status:"in_progress",actor_type:"agent",actor_id:F.id})),(0,r.XI)(F.id),(0,q.AC)({type:"agent_run_start",agent_id:F.id,agent_name:F.name,triggered_by:b,run_id:G?.id||null,task_id:d});try{let a=u(F.memory,[]),g=a.slice(-10),n=function(a){let b=f.join(m.bo,a,"skills.md");try{return e.readFileSync(b,"utf8").trim()}catch{return""}}(F.id),r=new Date().toISOString().slice(0,10),y=F.system_prompt||`You are ${F.name}, a scheduled madarX OS worker.
|
|
602
607
|
|
|
603
608
|
<agent_mission>
|
|
604
|
-
${
|
|
609
|
+
${F.mission||"Support the user with useful scheduled work."}
|
|
605
610
|
</agent_mission>
|
|
606
611
|
|
|
607
|
-
Approval mode: ${
|
|
612
|
+
Approval mode: ${F.approval||"human-in-loop"}.
|
|
608
613
|
|
|
609
|
-
Produce a structured markdown report. Never perform external sends, posts, deployments, purchases, or destructive operations.`,
|
|
614
|
+
Produce a structured markdown report. Never perform external sends, posts, deployments, purchases, or destructive operations.`,H=(0,h.$k)(F.engine),I=F.model||(0,h.Qp)(H);process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK||(0,o.W1)({...F,engine:H});let J=`${y.includes("CURRENT_DATE")?y:`${(0,i.uB)()}
|
|
610
615
|
|
|
611
|
-
${
|
|
616
|
+
${y}`}
|
|
612
617
|
|
|
613
|
-
${
|
|
614
|
-
${
|
|
618
|
+
${n?`<skills>
|
|
619
|
+
${n}
|
|
615
620
|
</skills>
|
|
616
621
|
`:""}
|
|
617
|
-
You are running as a scheduled cron tick. Your FINAL message is saved verbatim as the deliverable the owner sees — make it the complete result in clean markdown, not a status summary, progress recap, or "what I did" note. Reproduce the full content in your final message even if a prior version already exists on disk
|
|
622
|
+
You are running as a scheduled cron tick. Your FINAL message is saved verbatim as the deliverable the owner sees — make it the complete result in clean markdown, not a status summary, progress recap, or "what I did" note. Reproduce the full content in your final message even if a prior version already exists on disk.
|
|
623
|
+
|
|
624
|
+
ESCALATION_PROTOCOL (non-negotiable): if you CANNOT fully achieve the goal because you are missing a tool or capability (a tool you need is not in your toolset, or returns "not permitted"), do NOT guess, fabricate, or deliver a half-answer. Instead make your FINAL message exactly one fenced block:
|
|
625
|
+
\`\`\`madarx-escalate
|
|
626
|
+
{"capability":"<plain-language capability you need, e.g. create pages in Notion>","reason":"<what you were blocked on>"}
|
|
627
|
+
\`\`\`
|
|
628
|
+
madarX will route this to Tool Smith to build the capability and grant it to you, then re-run you. Use this only for a genuine missing capability — not for a transient error you can retry.`,K=d?(0,s.gg)(d):null,{instruction:L,expected_output:M}=function({instruction:a,expected_output:b,task:c,agent:d}={}){let e=a=>"string"==typeof a&&a.trim()?a.trim():null;return{instruction:e(a)||c&&(e(c.description)||e(c.title))||e(d?.mission)||"Execute your mission.",expected_output:e(b)||c&&e(c.acceptance_criteria)||e(d?.expected_output)||"A complete, structured markdown report covering the full result — not a status summary."}}({instruction:t,expected_output:A,task:K,agent:F}),N=`Scheduled tick - today is ${r}. Carry out the instruction below and deliver exactly what the expected-output contract requires.
|
|
618
629
|
|
|
619
630
|
<task_instruction>
|
|
620
|
-
${
|
|
631
|
+
${L}
|
|
621
632
|
</task_instruction>
|
|
622
633
|
|
|
623
634
|
<expected_output>
|
|
624
|
-
${
|
|
635
|
+
${M}
|
|
625
636
|
</expected_output>
|
|
626
637
|
|
|
627
638
|
<agent>
|
|
628
|
-
Name: ${
|
|
629
|
-
Mission: ${
|
|
630
|
-
Schedule: ${
|
|
631
|
-
Tools: ${
|
|
639
|
+
Name: ${F.name}
|
|
640
|
+
Mission: ${F.mission||""}
|
|
641
|
+
Schedule: ${F.schedule||""}
|
|
642
|
+
Tools: ${u(F.tools,[]).join(", ")||"none listed"}
|
|
632
643
|
</agent>
|
|
633
644
|
|
|
634
645
|
<recent_memory>
|
|
635
646
|
${g.length?g.map((a,b)=>`${b+1}. ${a}`).join("\n"):"No prior memory."}
|
|
636
|
-
</recent_memory>`,{output:
|
|
647
|
+
</recent_memory>`,{output:O,toolEvents:P,engine:Q,model:R,created_approvals:S=[]}=process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK?{output:process.env.MADARX_MOCK_AGENT_TICK||process.env.MADARX_MOCK_CLAUDE_TICK,toolEvents:[],engine:H,model:I}:"anthropic"===H?await x({agent:{...F,engine:H,model:I},systemPrompt:J,userMessage:N,acting_on_behalf_of_user_id:C,heartbeat_task_id:D,pending_approvals:B,onToolStart:({toolUse:a,inputSummary:b})=>{G&&(0,s.Dn)(G.id,{agent_id:F.id,task_id:d,event_type:"tool_start",stream:"tool",message:a.name,payload:{tool:a.name,input_summary:b}})},onToolResult:({toolUse:a,result:b,event:c})=>{if(G){if(b?.status==="approval_required")return void(0,s.qt)(G.id,{message:`Approval required for ${a.name}`,payload:{tool:a.name,approval_request_id:b.approval_request_id}});(0,s.Dn)(G.id,{agent_id:F.id,task_id:d,event_type:"tool_result",stream:"tool",level:b?.ok===!1&&b?.status!=="approval_required"?"error":"info",message:`${a.name} ${c.status}`,payload:{tool:a.name,status:c.status,approval_request_id:b?.approval_request_id||null}})}},onToolError:({toolUse:a,error:b})=>{G&&(0,s.Dn)(G.id,{agent_id:F.id,task_id:d,event_type:"error",stream:"tool",level:"error",message:b.message,payload:{tool:a.name}})}}):{output:await (0,h.d)({agent:{...F,engine:H,model:I},systemPrompt:J,userMessage:N}),toolEvents:[],engine:H,model:I};if(!P.length&&!process.env.MADARX_MOCK_AGENT_TICK&&!process.env.MADARX_MOCK_CLAUDE_TICK&&(0,p.S)(O)){let a=Error(`${F.name} produced a fabricated tool transcript (it role-played tool calls and invented results) instead of running real tools — nothing actually executed, so no deliverable was saved. Switch this agent's engine to "Anthropic API" so madarX dispatches its tools for real.`);throw a.code="fabricated_tool_output",a}let T=function(a){let b=z.exec(String(a||""));if(!b)return null;try{let a=JSON.parse(b[1].trim()),c=String(a.capability||a.capability_description||"").trim();if(!c)return null;return{capability:c,reason:String(a.reason||"").trim()}}catch{return null}}(O);if(T){let a=null;try{a=(0,s.createTask)({title:`Build capability: ${T.capability.slice(0,80)}`,description:[`Specialist "${F.name}" (${F.id}) is blocked — it needs a capability that does not exist yet:`,` "${T.capability}"`,T.reason?`
|
|
648
|
+
Blocked on: ${T.reason}`:"","\nAuthor the right path (composite tool / REST connector / skill / propose_tool) and grant it to the requester.",`Grant the result to agent: ${F.id}.`].join("\n"),acceptance_criteria:"Capability authored and granted to the requesting specialist so its goal can be completed on re-run.",assignee_agent_id:"tool-smith-agent",created_by_agent_id:F.id,priority:"high",project_id:F.project_id||null}).id}catch(a){process.env.MADARX_DEBUG&&console.error("[agent-runner] escalation task creation failed:",a?.message||a)}let e=`Blocked: missing capability "${T.capability}". Routed to Tool Smith${a?` (task ${a})`:""} to build and grant it; this agent will re-run once available.`,{recordRun:f,appendAudit:g}=await Promise.resolve().then(c.bind(c,60105));if(f({kind:"agent-tick",title:`${F.name} escalated a missing capability`,agent:F.name,agent_id:F.id,status:"blocked",preview:e,output:e,triggered_by:b}),g({type:"agent.capability.escalated",summary:`${F.name} escalated missing capability: ${T.capability}`,status:"blocked",meta:{agent_id:F.id,tool_smith_task_id:a,capability:T.capability,triggered_by:b}}),G)try{(0,s.WH)(d,{body:e,author_agent_id:F.id,created_by_run_id:G.id}),(0,s.lC)(d,{status:"blocked",blocked_reason:e,actor_type:"agent",actor_id:F.id}),(0,s.G)(G.id,{status:"failed",error:e})}catch{}return(0,q.AC)({type:"agent_run_complete",agent_id:F.id,agent_name:F.name,status:"blocked",triggered_by:b,run_id:G?.id||null,task_id:d}),{id:G?.id||null,status:"blocked",escalated:!0,tool_smith_task_id:a,capability:T.capability,preview:e}}let U=P.length?`${O}
|
|
637
649
|
|
|
638
650
|
## Tool events
|
|
639
|
-
${
|
|
651
|
+
${P.map(a=>`- ${a.name}: ${a.status}`).join("\n")}`:O,V=function({agentId:a,today:b,fallback:c}){let d=c||"",g=Buffer.byteLength(d,"utf8");try{let c=v(a),h=null;for(let a of e.readdirSync(m.m4)){if(!a.endsWith(".md")||!a.startsWith(c)||!a.includes(b))continue;let d=f.join(m.m4,a),g=0;try{g=e.statSync(d).size}catch{continue}(!h||g>h.size)&&(h={full:d,size:g})}if(h&&h.size>Math.max(2048,1.5*g)){let a=e.readFileSync(h.full,"utf8");if(a.trim().length>d.trim().length)return a}}catch{}return d}({agentId:F.id,today:r,fallback:U}),W=new Date().toISOString().replace(/[:.]/g,"-"),X=f.join(m.m4,`${v(F.id)}-${r}-${W}.md`);e.writeFileSync(X,V,"utf8");let Y=(0,m.z9)(X),Z=P.filter(a=>"string"==typeof a.name&&a.name.startsWith("higgsfield_")&&a.result?.ok&&a.result?.url).map(a=>({url:a.result.url,kind:"higgsfield_generate_video"===a.name?"video":"image",thumbnail:a.result.thumbnail||null,prompt:a.input?.prompt||""})),$=(0,j.vr)(V),_=Z.length?`${F.name} — ${"video"===Z[0].kind?"video":"image"}`:`${F.name} scheduled report`,aa=Z.length?(0,k.o)(Z,{title:_,caption:Z[0].prompt||""}):(0,j.j7)({title:_,markdown:$}),{recordRun:ab,recordArtifact:ac,appendAudit:ad}=await Promise.resolve().then(c.bind(c,60105)),ae=ab({kind:"agent-tick",title:`${F.name} scheduled tick`,agent:F.name,agent_id:F.id,status:"complete",artifact:Y,preview:U.slice(0,1e3),output:U,engine:Q,model:R,triggered_by:b}),af=ac({run_id:ae.id,agent_id:F.id,file_path:Y,kind:"document",title:_,content:aa,source_md:$,project_id:F.project_id||null});ae.artifact_id=af,ae.artifact_title=_,await w({agent:F,artifactTitle:_,renderedHtml:aa,runId:ae.id,triggeredBy:b,appendAudit:ad});let ag=Math.max(1,Math.min(500,Number(process.env.MEMORY_MAX_ENTRIES||50)||50)),ah=[...a,`${(0,l.nowIso)()} - ${(String(U||"").split(/\r?\n/).map(a=>a.replace(/^#+\s*/,"").trim()).find(a=>a&&!a.startsWith("-"))||"Completed a scheduled tick and saved a report.").slice(0,240)}`].slice(-ag),ai=(0,l.nowIso)();E.prepare("UPDATE agents SET memory = ?, last_run_at = ?, status = ? WHERE id = ?").run(JSON.stringify(ah),ai,"last cron tick complete",F.id);let aj=f.join(m.bo,F.id,"heartbeat.json");try{let a=u(e.readFileSync(aj,"utf8"),{});a.status="last cron tick complete",a.last_run=ai,a.last_artifact=Y,e.writeFileSync(aj,JSON.stringify(a,null,2),"utf8")}catch{ad({type:"agent.heartbeat.missing",summary:`Heartbeat file missing for ${F.name}`,status:"warning",meta:{agent_id:F.id}})}if((0,q.AC)({type:"agent_run_complete",agent_id:F.id,agent_name:F.name,status:"complete",triggered_by:b,run_id:G?.id||null,task_id:d}),G){let a=U.replace(/\s+/g," ").slice(0,800);(0,s.WH)(d,{body:`Execution update from ${F.name}:
|
|
640
652
|
|
|
641
|
-
${a}`,author_agent_id:
|
|
653
|
+
${a}`,author_agent_id:F.id,created_by_run_id:G.id}),(0,s.G)(G.id,{status:"succeeded",result:{report_path:Y,legacy_run_id:ae.id},stdout_excerpt:a}),(0,s.lC)(d,{status:"in_review",actor_type:"agent",actor_id:F.id}),(0,s.ij)(F.id,{last_run_id:G.id,last_run_status:"succeeded",state:{last_task_id:d,last_report:Y}})}if(Array.isArray(S)&&S.length){let a={agent_id:F.id,agent_name:F.name,instruction:t||null,expected_output:A||null,triggered_by:b};for(let b of S)try{let c=E.prepare("SELECT payload FROM approval_requests WHERE id = ?").get(b.approval_request_id),d=c?.payload?u(c.payload,{}):{};d.resume=a,E.prepare("UPDATE approval_requests SET payload = ? WHERE id = ?").run(JSON.stringify(d),b.approval_request_id)}catch{}let c=S[0];ae.pending_approval={approval_id:c.approval_request_id,tool_name:c.tool_name,summary:c.summary,agent_id:F.id,agent_name:F.name}}return ae}catch(e){let a=(e?.message||String(e)).slice(0,1e3);if(G)try{(0,s.G)(G.id,{status:"failed",error:a})}catch{}else try{let{recordRun:d,appendAudit:f}=await Promise.resolve().then(c.bind(c,60105));d({kind:"agent-tick",title:`${F.name} run failed`,agent:F.name,agent_id:F.id,status:"failed",preview:a,output:a,triggered_by:b}),f({type:"agent.run.failed",summary:`${F.name} run failed: ${a}`,status:"error",meta:{agent_id:F.id,code:e?.code||null,triggered_by:b}})}catch{}throw(0,q.AC)({type:"agent_run_complete",agent_id:F.id,agent_name:F.name,status:"failed",isError:!0,triggered_by:b,run_id:G?.id||null,task_id:d,error:a}),e}finally{(0,r.fd)(F.id)}}d()}catch(a){d(a)}})},14972:(a,b,c)=>{"use strict";function d(a){let b=String(a||"").toLowerCase();return"cu"===b||"copper"===b?.85:"ag"===b||"silver"===b?.75:.9}function e(a){let b=Number(a);return Number.isFinite(b)?b:null}function f(a,b=2){if(null==a||!Number.isFinite(a))return null;let c=10**b;return Math.round(a*c)/c}function g(a={}){let b=e(a.resource_tonnes),c=e(a.grade_au_gpt??a.au_gpt),h=e(a.grade_ag_gpt??a.ag_gpt),i=e(a.grade_cu_pct??a.cu_pct),j=e(a.recovery_au)??d("Au"),k=e(a.recovery_ag)??d("Ag"),l=e(a.recovery_cu)??d("Cu"),m=e(a.price_au_usd_oz),n=e(a.price_ag_usd_oz),o=e(a.price_cu_usd_lb),p=e(a.in_situ_factor)??function(a="exploration"){let b=String(a||"").toLowerCase();return b.includes("production")?.12:b.includes("development")||b.includes("resource")?.06:.03}(a.asset_stage);if(null==b||b<=0)return{valuation_tier:"t1_in_situ",resource_tonnes:null,contained_au_oz:null,contained_ag_oz:null,contained_cu_lb:null,gross_metal_value_usd:null,in_situ_value_usd:null,recovery_au_used:j,recovery_ag_used:k,recovery_cu_used:l,in_situ_factor_used:p,usd_per_oz_au:null,usd_per_lb_cu:null,usd_per_tonne:null};let q=null==c?null:b*c/1e6*32150.7466*j,r=null==h?null:b*h/1e6*32150.7466*k,s=null==i?null:i/100*b*2204.62*l,t=(null==q||null==m?0:q*m)+(null==r||null==n?0:r*n)+(null==s||null==o?0:s*o),u=t>0,v=u?t*p:null;return{valuation_tier:"t1_in_situ",resource_tonnes:f(b,3),contained_au_oz:f(q,3),contained_ag_oz:f(r,3),contained_cu_lb:f(s,3),gross_metal_value_usd:u?t:null,in_situ_value_usd:v,recovery_au_used:j,recovery_ag_used:k,recovery_cu_used:l,in_situ_factor_used:p,usd_per_oz_au:f(null!=v&&q?v/q:null,3),usd_per_lb_cu:f(null!=v&&s?v/s:null,3),usd_per_tonne:f(null!=v?v/b:null,3)}}c.d(b,{uX:()=>g})},15709:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{r1:()=>j});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/hail-quarterly-review.js")),l=null;function j(){let a=(l||(l=JSON.parse((0,e.readFileSync)((0,g.join)(k,"specs","hail-quarterly-review.json"),"utf8"))),l);return(0,h.R1)(a,{source_spec_json:JSON.stringify(a)})}d()}catch(a){d(a)}})},15769:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W:()=>j});var e=c(73024),f=c(73136),g=c(76760),h=c(9013),i=a([h]);h=(i.then?(await i)():i)[0];let k=(0,g.dirname)((0,f.fileURLToPath)("file:///home/runner/work/madarx-os/madarx-os/lib/process/seeds/mines-workflows.js")),l=["mine-project-intake","mine-valuation","mine-market-trend-monitor","mine-portfolio-screen"];function j(){for(let a of l)try{let b=function(a){let b=(0,g.join)(k,"specs",`${a}.json`);return JSON.parse((0,e.readFileSync)(b,"utf8"))}(a);(0,h.R1)(b,{source_spec_json:JSON.stringify(b),created_by_user_id:null,skipValidation:!0})}catch(b){console.warn(`[mines-workflows] failed to seed ${a}:`,b?.message||b)}}d()}catch(a){d(a)}})},16494:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{W1:()=>h});var e=c(72326),f=c(40718),g=a([e,f]);[e,f]=g.then?(await g)():g;let i=new Set(["anthropic","claude-code","codex"]);function h(a){let b=(0,e.$k)(a?.engine),c=i.has((0,e.$k)(b)),d=function(a){if(!a?.id)return!1;try{return(0,f.IC)(a.id).length>0}catch{return!1}}(a);if(!d||c)return{needsTools:d,engineCanExecuteTools:c};let g=Error(`This agent has live tools enabled but its engine (${b}) cannot run tools — it only completes text, so it would fabricate a tool transcript instead of doing real work. The run was stopped. Fix: switch this agent's engine to "Anthropic API" (governed tools) or "Claude Code" in its Details view.`);throw g.code="engine_cannot_run_tools",g.engine=b,g}d()}catch(a){d(a)}})},16838:(a,b,c)=>{"use strict";c.d(b,{Z:()=>k});let d=[{name:"La Caridad",status:"Producing",dist:"~25 km SE",tonnes:"2,100 Mt",cu:"0.21% Cu",note:"9,737 Mlb contained Cu"},{name:"Cananea / Buenavista",status:"Producing",dist:"Same belt",tonnes:"2,413 Mt",cu:"0.44% Cu",note:"one of the largest Cu mines on earth"},{name:"La Colorada breccia",status:"Historic",dist:"Same belt",tonnes:"7 Mt",cu:"6.0% Cu",note:"high-grade breccia analogue"}];function e(a){return String(a??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function f(a,b=0){return null!=a&&Number.isFinite(Number(a))?new Intl.NumberFormat("en-US",{maximumFractionDigits:b}).format(Number(a)):"—"}function g(a){if(null==a||!Number.isFinite(Number(a)))return"—";let b=Number(a);return b>=1e9?`$${(b/1e9).toFixed(2)}B`:b>=1e6?`$${Math.round(b/1e6)}M`:b>=1e3?`$${Math.round(b/1e3)}k`:`$${Math.round(b)}`}function h(a){try{return JSON.parse(a)||{}}catch{return{}}}function i(a,b){let c=b.scen[0]?.r?.in_situ_value_usd,d=b.scen[b.scen.length-1]?.r?.in_situ_value_usd;return{hero_headline:"District-scale copper optionality, next to two world-class mines.",hero_subhead:`${a.name} sits in the Cananea–La Caridad porphyry belt of Sonora, Mexico — one of the most productive copper districts on earth. Four drill-confirmed targets, one untested high-priority blanket, and no resource yet declared: the value today is exploration optionality.`,opportunity:[`The case for ${a.name} is location and evidence. It lies in the same belt — and within ~25 km — of La Caridad and Cananea, two of the largest copper mines in the world. The same geology that built them runs through this ground.`,`Teck drilled it. Their 2011–2012 program returned copper across multiple targets and walked away mid-story, leaving the highest-priority target (a chalcocite blanket at El Choclo NW) untested. That is the optionality a partner is buying.`,`No mineral resource has been declared, and we do not pretend one exists. What follows is the evidence on the ground and a clearly-labelled conceptual scenario — not a valuation opinion.`],findings_lead:"The asset is not a concept on a map. There is drilled copper, surface geochemistry, and a geological model anchored to producing neighbours.",upside_lead:"Four defined targets, each a distinct shot on goal. El Choclo NW — a leached-capping blanket target — was proposed for drilling but never tested before Teck withdrew.",risk_lead:"We lead with the risk because credibility is the point. This is exploration: no declared resource, grade continuity at depth unproven. The mitigation is a focused, sequenced work program.",the_ask:`${a.name}'s operator (Grupo Factor) is seeking an incoming partner under NDA. The near-term path: re-interpret the geophysics, vector with clay-alteration (SWIR) core analysis, then drill the untested El Choclo NW blanket — and, if it confirms, define a maiden resource.`,value_range_label:null!=c&&null!=d?`${g(c)} – ${g(d)}`:"—"}}function j(a){return`<span class="kick"><svg class="kick-mark" width="22" height="8" viewBox="0 0 22 8" aria-hidden="true"><path d="M0 4h14" stroke="currentColor" stroke-width="1.4"/><circle cx="19" cy="4" r="2.4" fill="currentColor"/></svg>${e(a)}</span>`}function k(a,b,c={}){let l=function(a,b){let c=b.id,d=(b,...c)=>a.prepare(b).all(...c),e=(b,...c)=>a.prepare(b).get(...c),f=d("SELECT fact_type, value_text, page_or_location FROM mines_extracted_facts WHERE project_id = ?",c),g=new Map;for(let a of f)g.has(a.fact_type)||g.set(a.fact_type,a);let i=d("SELECT scenario, assumptions_json, result_json FROM mines_valuation_scenarios WHERE project_id = ? AND scenario LIKE 'operator_%'",c).map(a=>({key:a.scenario.replace("operator_",""),a:h(a.assumptions_json),r:h(a.result_json)})),j=["low","base","high"];i.sort((a,b)=>j.indexOf(a.key)-j.indexOf(b.key));let k=d(`SELECT sample_id, width_m, cu_pct, ag_ppm, other_grades_json
|
|
642
654
|
FROM mines_assay_samples WHERE project_id = ? AND sample_type = 'drill_core'
|
|
643
655
|
ORDER BY (cu_pct * width_m) DESC LIMIT 5`,c),l=e(`SELECT COUNT(*) n, AVG(cu_pct) avg_cu, MAX(cu_pct) max_cu, AVG(ag_ppm) avg_ag
|
|
644
656
|
FROM mines_assay_samples WHERE project_id = ? AND sample_type = 'trench_channel'`,c),m=e("SELECT COUNT(*) n, SUM(total_depth_m) m FROM mines_drill_holes WHERE project_id = ? AND extracted_by_agent_id = ?",c,"mines-geo-analyst"),n=f.filter(a=>a.fact_type.startsWith("target_")).map(a=>({name:a.fact_type.replace("target_","").replace(/_/g," "),text:a.value_text})),o=a=>e("SELECT price_usd, source FROM mines_market_snapshots WHERE lower(commodity)=lower(?) ORDER BY fetched_at DESC LIMIT 1",a);return{factBy:g,scen:i,intercepts:k,trench:l,drill:m,targets:n,priceCu:o("Cu"),priceAg:o("Ag"),base:i.find(a=>"base"===a.key)||i[0]||null}}(a,b),m={...i(b,l),...c||{}};m.value_range_label=i(b,l).value_range_label;let n=[function(a,b,c){let d=[a.deposit_type||"Porphyry copper (\xb1Ag)",`${a.asset_stage||"exploration"} stage`,`${a.state_province||"Sonora"}, ${a.country||"Mexico"}`].map(a=>`<span class="chip">${e(a)}</span>`).join("");return`
|
|
@@ -871,7 +883,7 @@ ${b}
|
|
|
871
883
|
`).run((0,e.newId)("audit"),h,"tool_allowlist.add",`Allowlist entry added: ${a} / ${b} = ${c}`,"ok",JSON.stringify({tool_name:a,scope_key:b,scope_value:c,label:i,entry_id:g})),{id:g,tool_name:a,scope_key:b,scope_value:c,label:i,created_at:h}}function i(a){if(!a)throw Error("id is required");let b=(0,e.getDb)(),c=b.prepare("SELECT tool_name, scope_key, scope_value FROM tool_allowlists WHERE id = ?").get(a);if(!c)throw Error(`Allowlist entry not found: ${a}`);b.prepare("DELETE FROM tool_allowlists WHERE id = ?").run(a),b.prepare(`
|
|
872
884
|
INSERT INTO audit_logs (id, at, type, summary, status, meta)
|
|
873
885
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
874
|
-
`).run((0,e.newId)("audit"),(0,e.nowIso)(),"tool_allowlist.remove",`Allowlist entry removed: ${c.tool_name} / ${c.scope_key} = ${c.scope_value}`,"ok",JSON.stringify({tool_name:c.tool_name,scope_key:c.scope_key,scope_value:c.scope_value,entry_id:a}))}function j(){let a=(0,e.getDb)().prepare("SELECT id, tool_name, scope_key, scope_value, label, created_at FROM tool_allowlists ORDER BY tool_name ASC, created_at ASC").all(),b={};for(let c of a)b[c.tool_name]||(b[c.tool_name]=[]),b[c.tool_name].push(c);return b}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},22434:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{le:()=>n,y$:()=>m});var e=c(34255),f=c(4638),g=c(40718),h=a([e,f,g]);function i(a){return a?.acting_on_behalf_of_user_id||a?.user_id||null}function j(a={}){if(a.owner_trusted||"owner"===a.actor_role||"admin"===a.actor_role)return!0;let b=i(a);if(!b||"system"===b)return!1;try{let c=(0,e.getDb)().prepare("SELECT role FROM org_memberships WHERE user_id=? AND org_id=COALESCE(?, 'personal-org')").get(b,a.org_id||"personal-org");return c?.role==="owner"||c?.role==="admin"}catch{return!1}}function k(){return{ok:!1,status:"error",error:"insufficient_role",message:"Composite tool authoring requires owner/admin authority in addition to tool approval."}}function l(a){return a?.code==="spec_invalid"?{ok:!1,status:"error",error:"spec_invalid",errors:a.errors||[a.message]}:null}async function m(a,b={}){if(!j(b))return k();let c=a?.spec;if(!c||"object"!=typeof c)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!c.slug||"string"!=typeof c.slug)return{ok:!1,error:"slug_required",message:"spec.slug required (string)"};if((0,f.uu)(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug};let d=(0,g.VM)();if(d.names.has(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug,message:"slug collides with an existing tool"};try{let a=(0,f.Hy)(c,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:d.names,toolRiskByName:d.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}async function n(a,b={}){if(!j(b))return k();let c="string"==typeof a?.slug?a.slug.trim():"",d=a?.spec;if(!c)return{ok:!1,status:"error",error:"slug_required",message:"slug required (string)"};if(!d||"object"!=typeof d)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!(0,f.uu)(c))return{ok:!1,status:"error",error:"not_found",slug:c};let e=(0,g.VM)(),h={...d,slug:c};try{let a=(0,f.Hy)(h,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:e.names,toolRiskByName:e.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}[e,f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},23167:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ef:()=>
|
|
886
|
+
`).run((0,e.newId)("audit"),(0,e.nowIso)(),"tool_allowlist.remove",`Allowlist entry removed: ${c.tool_name} / ${c.scope_key} = ${c.scope_value}`,"ok",JSON.stringify({tool_name:c.tool_name,scope_key:c.scope_key,scope_value:c.scope_value,entry_id:a}))}function j(){let a=(0,e.getDb)().prepare("SELECT id, tool_name, scope_key, scope_value, label, created_at FROM tool_allowlists ORDER BY tool_name ASC, created_at ASC").all(),b={};for(let c of a)b[c.tool_name]||(b[c.tool_name]=[]),b[c.tool_name].push(c);return b}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},21526:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{lu:()=>n,tR:()=>o,xg:()=>m});var e=c(24516),f=c(58282),g=a([e,f]);[e,f]=g.then?(await g)():g;let p="https://platform.higgsfield.ai",q="/v1/text2image/soul",r=a=>[`/requests/${encodeURIComponent(a)}/status`,`/v1/job-sets/${encodeURIComponent(a)}`],s=new Set(["completed","failed","nsfw","canceled","cancelled"]);function h(a,b={}){try{let c=(0,e.getSecret)(a,{agent_id:b.agent_id,project_id:b.project_id});if(c)return c}catch{}return process.env[a]||null}let t=a=>new Promise(b=>setTimeout(b,a));async function i(a){try{let b=await a.json(),c=b?.detail;if("string"==typeof c)return c;if(Array.isArray(c))return c.map(a=>[Array.isArray(a?.loc)?a.loc.filter(a=>"body"!==a).join("."):"",a?.msg].filter(Boolean).join(": ")).filter(Boolean).join("; ")||`HTTP ${a.status}`;return b?.message||b?.error||`HTTP ${a.status}`}catch{return`HTTP ${a.status}`}}function j(a){return a?.id||a?.request_id||a?.jobset_id||a?.job_set_id||a?.jobSetId||a?.requestId||null}function k(a){let b=Array.isArray(a?.jobs)?a.jobs[0]:null,c=String(a?.status||b?.status||a?.state||"in_progress").toLowerCase(),d=b?.results||a?.results||null,e=d?.raw?.url||d?.min?.url||b?.url||a?.url||(Array.isArray(a?.images)?a.images[0]?.url:null)||a?.video?.url||null,f=d?.min?.url||null;return{status:c,url:e,thumbnail:f}}async function l({toolName:a,path:b,body:c,options:d,maxPolls:e}){let g=function(a={}){let b=h("HIGGSFIELD_CREDENTIALS",a);if(b&&b.includes(":"))return`Key ${b.trim()}`;let c=h("HIGGSFIELD_KEY_ID",a),d=h("HIGGSFIELD_KEY_SECRET",a);if(!c||!d)throw Error("Higgsfield is not connected. Add your HIGGSFIELD_KEY_ID and HIGGSFIELD_KEY_SECRET in the Higgsfield connection (marketplace → Connections).");return`Key ${c.trim()}:${d.trim()}`}(d),l=d.agent_id??null,m=(0,f.N)(a,l),n=await m(`${p}${b}`,{method:"POST",headers:{Authorization:g,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(c)});if(!n.ok){if(401===n.status)throw Error("Higgsfield rejected the credentials (401). Re-check the key in the Higgsfield connection.");let a=await i(n);throw Error(`Higgsfield API error (${n.status}): ${a}`)}let o=await n.json().catch(()=>({})),q=k(o);if(q.url)return{ok:!0,status:"completed",job_set_id:j(o),url:q.url,thumbnail:q.thumbnail};let u=j(o);if(!u)throw Error("Higgsfield did not return a job id; cannot poll for the result.");let v=Number.isFinite(e)?e:48;for(let a=0;a<v;a++){await t(2500);let a=null;for(let b of r(u)){let c=await m(`${p}${b}`,{method:"GET",headers:{Authorization:g,Accept:"application/json"}});if(c.ok){a=await c.json().catch(()=>null);break}if(404!==c.status){let a=await i(c);throw Error(`Higgsfield status error (${c.status}): ${a}`)}}if(!a)continue;let{status:b,url:c,thumbnail:d}=k(a);if(s.has(b)){if("completed"===b&&c)return{ok:!0,status:b,job_set_id:u,url:c,thumbnail:d};if("nsfw"===b)return{ok:!1,status:b,job_set_id:u,url:null,thumbnail:null,error:"Generation flagged NSFW by Higgsfield."};return{ok:!1,status:b,job_set_id:u,url:c||null,thumbnail:d||null,error:`Generation ${b}.`}}}return{ok:!1,status:"in_progress",job_set_id:u,url:null,thumbnail:null,timed_out:!0}}async function m(a={},b={}){let c=String(a.prompt||"").trim();if(!c)throw Error('"prompt" is required');let d={prompt:c,width_and_height:a.width_and_height||"1536x1536",quality:a.quality||"720p",batch_size:a.batch_size||1,...a.style_id?{style_id:String(a.style_id)}:{},...null!=a.style_strength?{style_strength:Number(a.style_strength)}:{},...null!=a.seed?{seed:Number(a.seed)}:{},...a.model?{model:String(a.model)}:{}},e=await l({toolName:"higgsfield_generate_image",path:q,body:{params:d},options:b,maxPolls:a.max_polls});if(!e.ok&&!e.timed_out)throw Error(e.error||`Higgsfield image generation ${e.status}.`);return e}async function n(a={},b={}){let c=String(a.image_url||"").trim();if(!c)throw Error('"image_url" is required (the source product image)');if(!/^https?:\/\//i.test(c))throw Error('"image_url" must be a public http(s) URL');let d=String(a.prompt||"").trim();if(!d)throw Error('"prompt" is required (the scene/style, e.g. "on a marble podium, studio lighting")');let e={prompt:d,width_and_height:a.width_and_height||"1536x1536",quality:a.quality||"720p",batch_size:a.batch_size||1,input_images:[{type:"image_url",image_url:c}],...a.style_id?{style_id:String(a.style_id)}:{},...null!=a.seed?{seed:Number(a.seed)}:{}},f=await l({toolName:"higgsfield_product_photoshoot",path:q,body:{params:e},options:b,maxPolls:a.max_polls});if(!f.ok&&!f.timed_out)throw Error(f.error||`Higgsfield product photoshoot ${f.status}.`);return f}async function o(a={},b={}){let c=String(a.image_url||"").trim();if(!c)throw Error('"image_url" is required (the source image to animate)');if(!/^https?:\/\//i.test(c))throw Error('"image_url" must be a public http(s) URL');let d={model:a.model?String(a.model):"dop-turbo",...a.prompt?{prompt:String(a.prompt)}:{},input_images:[{type:"image_url",image_url:c}],...a.motions?{motions:a.motions}:{},...null!=a.seed?{seed:Number(a.seed)}:{}},e=await l({toolName:"higgsfield_generate_video",path:"/v1/image2video/dop",body:{params:d},options:b,maxPolls:null!=a.max_polls?a.max_polls:90});if(!e.ok&&!e.timed_out)throw Error(e.error||`Higgsfield video generation ${e.status}.`);return e}d()}catch(a){d(a)}})},22434:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{le:()=>n,y$:()=>m});var e=c(34255),f=c(4638),g=c(40718),h=a([e,f,g]);function i(a){return a?.acting_on_behalf_of_user_id||a?.user_id||null}function j(a={}){if(a.owner_trusted||"owner"===a.actor_role||"admin"===a.actor_role)return!0;let b=i(a);if(!b||"system"===b)return!1;try{let c=(0,e.getDb)().prepare("SELECT role FROM org_memberships WHERE user_id=? AND org_id=COALESCE(?, 'personal-org')").get(b,a.org_id||"personal-org");return c?.role==="owner"||c?.role==="admin"}catch{return!1}}function k(){return{ok:!1,status:"error",error:"insufficient_role",message:"Composite tool authoring requires owner/admin authority in addition to tool approval."}}function l(a){return a?.code==="spec_invalid"?{ok:!1,status:"error",error:"spec_invalid",errors:a.errors||[a.message]}:null}async function m(a,b={}){if(!j(b))return k();let c=a?.spec;if(!c||"object"!=typeof c)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!c.slug||"string"!=typeof c.slug)return{ok:!1,error:"slug_required",message:"spec.slug required (string)"};if((0,f.uu)(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug};let d=(0,g.VM)();if(d.names.has(c.slug))return{ok:!1,status:"error",error:"slug_in_use",slug:c.slug,message:"slug collides with an existing tool"};try{let a=(0,f.Hy)(c,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:d.names,toolRiskByName:d.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}async function n(a,b={}){if(!j(b))return k();let c="string"==typeof a?.slug?a.slug.trim():"",d=a?.spec;if(!c)return{ok:!1,status:"error",error:"slug_required",message:"slug required (string)"};if(!d||"object"!=typeof d)return{ok:!1,status:"error",error:"spec_required",message:"spec required (object)"};if(!(0,f.uu)(c))return{ok:!1,status:"error",error:"not_found",slug:c};let e=(0,g.VM)(),h={...d,slug:c};try{let a=(0,f.Hy)(h,{created_by_user_id:i(b),created_by_agent_id:b?.agent_id||null},{knownToolNames:e.names,toolRiskByName:e.riskByName});return{ok:!0,status:"complete",slug:a.slug,risk_level:a.risk_level,warnings:a.warnings||[]}}catch(b){let a=l(b);if(a)return a;throw b}}[e,f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},23167:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ef:()=>D});var e=c(31421),f=c(73024),g=c(76760),h=c(9381),i=c(60897),j=c(61423),k=c(93154),l=c(5295),m=c(60105),n=c(8727),o=c(54858),p=c(37745),q=c(81833),r=c(44545),s=c(88101),t=c(58076),u=c(7945),v=c(15709),w=c(57223),x=c(69722),y=c(54488),z=c(15769),A=c(91648),B=c(81553),C=a([j,k,m,n,o,q,r,s,t,u,v,w,x,y,z,A]);[j,k,m,n,o,q,r,s,t,u,v,w,x,y,z,A]=C.then?(await C)():C;let E="1"===process.env.MADARX_SEED_DEFAULT_WORKFLOWS;function D(a){globalThis.__madarxSuppressStateEmits=!0;try{try{!function(a){if(a.prepare("SELECT id FROM heartbeat_tasks WHERE type = 'tool_rate_limit_gc' AND status IN ('queued','leased','running') LIMIT 1").get())return;let b=`hbtask-rl-gc-${Date.now().toString(36)}`,c=JSON.stringify({type:"tool_rate_limit_gc"}),d=new Date().toISOString(),e=new Date(Date.now()+864e5).toISOString();a.prepare(`
|
|
875
887
|
INSERT INTO heartbeat_tasks
|
|
876
888
|
(id, agent_id, schedule_id, type, status, priority, payload, attempts, max_attempts, run_after, created_at, updated_at)
|
|
877
889
|
VALUES (?, NULL, NULL, ?, 'queued', 0, ?, 0, 99, ?, ?, ?)
|
|
@@ -882,7 +894,7 @@ ${b}
|
|
|
882
894
|
`).run(b,"update_check",c,e,d,d)}(a)}catch{}try{!function(a){try{if(a.prepare("SELECT id FROM tool_allowlists WHERE tool_name = 'email_send' LIMIT 1").get())return;let b=null;try{let a=(0,e.execFileSync)("git",["config","user.email"],{stdio:["ignore","pipe","ignore"],timeout:3e3}).toString().trim();a.includes("@")&&(b=a.split("@").pop().toLowerCase().trim())}catch{}if(!b)return void console.warn("[seeds] Could not determine email domain from git config user.email. Add a recipient_domain allowlist entry for email_send manually via the dashboard.");let c=`tal-seed-email-${Date.now().toString(36)}`,d=new Date().toISOString();a.prepare(`
|
|
883
895
|
INSERT INTO tool_allowlists (id, tool_name, scope_key, scope_value, label, created_at)
|
|
884
896
|
VALUES (?, 'email_send', 'recipient_domain', ?, ?, ?)
|
|
885
|
-
`).run(c,b,"Seeded from git config on first install",d),console.info(`[seeds] Email allowlist seeded: email_send / recipient_domain = ${b}`)}catch(a){console.warn("[seeds] seedDefaultEmailAllowlist failed:",a?.message||a)}}(a)}catch{}try{(0,j.jz)(a)}catch{}try{(0,
|
|
897
|
+
`).run(c,b,"Seeded from git config on first install",d),console.info(`[seeds] Email allowlist seeded: email_send / recipient_domain = ${b}`)}catch(a){console.warn("[seeds] seedDefaultEmailAllowlist failed:",a?.message||a)}}(a)}catch{}try{(0,j.jz)(a)}catch{}try{(0,o.y)({})}catch{}try{(0,i.fP)(a)}catch{}try{(0,k.yi)(a)}catch{}try{(0,s.r)(a),E&&(0,r.fx)()}catch{}try{(0,t._)(a),E&&((0,u.H6)(),(0,v.r1)()),(0,w.$F)()}catch{}try{(0,x.zc)(a)}catch{}if("1"===process.env.MADARX_SEED_DEFAULT_AGENTS)try{(0,y.g)()}catch{}if(E)try{(0,z.W)()}catch{}try{(0,A.mx)(a)}catch{}!function(a){try{let b=a.prepare("SELECT id, name FROM agents WHERE id = 'ops-agent' LIMIT 1").get();if(b){"Ops Agent"===b.name&&(a.prepare("UPDATE agents SET name = 'Caretaker' WHERE id = 'ops-agent'").run(),a.prepare("UPDATE schedules SET name = 'Caretaker' WHERE agent_id = 'ops-agent' AND name = 'Ops Agent'").run());return}(0,m.W1)({silent:!0})}catch(a){console.warn("[seeds] seedOpsAgentIfMissing failed:",a?.message||a)}}(a),function(a){try{if(a.prepare("SELECT id FROM agents WHERE id = 'tool-smith-agent' LIMIT 1").get())return;(0,k.pz)("tool-smith","personal",{seed:!0,agent_id:"tool-smith-agent"})}catch(a){console.warn("[seeds] seedToolSmithAgentIfMissing failed:",a?.message||a)}}(a);for(let b of l.xU)try{if(a.prepare("SELECT agent_id FROM agent_template_installations WHERE template_slug = ? LIMIT 1").get(b))continue;(0,k.pz)(b,"personal",{seed:!0})}catch(a){console.warn(`[seeds] seedSpecialistAgentsIfMissing(${b}) failed:`,a?.message||a)}try{(0,m.OH)()}catch(a){console.warn("[seeds] migrateDefaultAgentSkills failed:",a?.message||a)}try{(0,q.k2)()}catch{}try{!function(a){try{if(a.prepare("SELECT value FROM config WHERE key = 'cto_brief_seeded'").get())return;let b=g.join(h.Dl,"seed-assets","cto-brief.html");if(!f.existsSync(b))return;let c=f.readFileSync(b,"utf8");(0,m.Dg)({title:"madarX OS — Vision, Plan & Open Questions (CTO Brief)",kind:"html",content:c,space_id:"default",agent_id:"main-orchestrator",dedupe_key:""}),a.prepare("INSERT OR REPLACE INTO config (key, value) VALUES ('cto_brief_seeded', '1')").run()}catch(a){console.warn("[seeds] seedCtoBriefArtifact failed:",a?.message||a)}}(a)}catch{}try{!function(a){try{let b=(0,B.YO)();if(!b||"0.0.0"===b)return;let c=a.prepare("SELECT value FROM config WHERE key = 'last_release_noted'").get(),d=c?.value||null;if(d===b)return;let e=()=>a.prepare("INSERT OR REPLACE INTO config (key, value) VALUES ('last_release_noted', ?)").run(b);if(!d)return void e();let i=function(a,b){if(!a||!b)return null;let c=a.split("\n"),d=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e=RegExp(`^##\\s*\\[${d}\\]`),f=-1;for(let a=0;a<c.length;a++)if(e.test(c[a])){f=a;break}if(-1===f)return null;let g=c.length;for(let a=f+1;a<c.length;a++)if(/^##\s*\[/.test(c[a])){g=a;break}return c.slice(f,g).join("\n").trim()||null}(function(){for(let a of[g.join(h.Dl,"CHANGELOG.md"),g.join(process.cwd(),"CHANGELOG.md"),g.join(process.cwd(),".next","standalone","CHANGELOG.md")])try{if(f.existsSync(a))return f.readFileSync(a,"utf8")}catch{}return null}(),b);if(!i)return void e();let j=i,k="markdown";try{let a=(0,n.K8)({version:b,markdown:i});a&&a.includes("<!DOCTYPE")&&(j=a,k="html")}catch(a){console.warn("[seeds] renderChangelogHtml failed, using markdown:",a?.message||a)}(0,m.Dg)({title:`madarX ${b} — What's new`,kind:k,content:j,space_id:"default",agent_id:"main-orchestrator",dedupe_key:""}),e()}catch(a){console.warn("[seeds] seedReleaseNotesArtifact failed:",a?.message||a)}}(a)}catch{}try{(0,p.d)(a)}catch{}if(!process.env.MADARX_DATA_DIR&&!process.env.VILLA515_DATA_DIR)try{!function(a){if(!globalThis.__madarxDiskEncryptionCheckRan){if(globalThis.__madarxDiskEncryptionCheckRan=!0,a)try{if(a.prepare("SELECT id FROM audit_logs WHERE type = 'disk_encryption.health' AND at > datetime('now', '-1 hour') LIMIT 1").get())return}catch{}try{let a=new c.U(c(123)).pathname;(0,e.spawnSync)(process.execPath,["--no-warnings",a],{stdio:"ignore",detached:!1,timeout:1e4,env:{...process.env}})}catch{}}}(a)}catch{}}finally{globalThis.__madarxSuppressStateEmits=!1}}d()}catch(a){d(a)}})},23737:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{n:()=>l});var e=c(40718),f=c(4638),g=c(60105),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let m=new Set(["__composite_slug","approval_id"]);function i(a,b){let c=a;for(let a of b.split(".")){if(null==c)return;c=c[a]}return c}function j(a,b){if("string"==typeof a){let c=a.match(/^\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}$/);if(c){let a=i(b,c[1]);return void 0===a?"":a}return a.replace(/\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}/g,(a,c)=>{let d=i(b,c);return void 0===d?"":"string"==typeof d?d:JSON.stringify(d)})}if(Array.isArray(a))return a.map(a=>j(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=j(e,b);return c}return a}async function k(a,b,d){let e=j(a.prompt,b);if("function"==typeof d.__synthesize)try{let a=await d.__synthesize(e);return{ok:!0,text:String(a??"")}}catch(a){return{ok:!0,text:"",skipped:!0,reason:String(a?.message||a)}}try{let{chatWithClaude:a}=await Promise.resolve().then(c.bind(c,19151)),b=await a({messages:[{role:"user",content:e}]}),d="string"==typeof b?b:b?.text||b?.content||"";return{ok:!0,text:String(d||"")}}catch(a){return{ok:!0,text:"",skipped:!0,reason:String(a?.message||a)}}}async function l(a={},b={}){let c=a.__composite_slug,d=c?(0,f.t2)(c):null;if(!d)return{ok:!1,status:"error",error:"not_found",message:`Unknown composite tool: ${c||"(none)"}`};let h={};for(let[b,c]of Object.entries(a))m.has(b)||(h[b]=c);let i={input:h},n=[],o={agent_id:b.agent_id,project_id:b.project_id,org_id:b.org_id,actor_role:b.actor_role,owner_trusted:b.owner_trusted,acting_on_behalf_of_user_id:b.acting_on_behalf_of_user_id||b.user_id||null};for(let a of d.steps)if("tool_call"===a.kind){let b,d=j(a.input_template||{},i);try{b=await (0,e.executeRegistryTool)(a.tool,d,o)}catch(b){return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,failed_tool:a.tool,message:`Composite ${c} aborted at step '${a.id}' (${a.tool}): ${String(b?.message||b)}`,completed_steps:n.map(a=>a.id)}}if(!(b&&!1!==b.ok&&"approval_required"!==b.status&&"allowlist_violation"!==b.status&&"rate_limited"!==b.status&&"error"!==b.status))return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,failed_tool:a.tool,step_result:b,message:`Composite ${c} aborted at step '${a.id}' (${a.tool}): ${b?.status||b?.error||"failed"}`,completed_steps:n.map(a=>a.id)};i[a.id]=b,n.push({id:a.id,kind:"tool_call",tool:a.tool,ok:!0,status:b.status})}else if("llm_synthesis"===a.kind){let c=await k(a,i,b);i[a.id]=c,n.push({id:a.id,kind:"llm_synthesis",ok:!0,skipped:!!c.skipped})}else if("artifact_write"===a.kind)try{let d=j(a.title_template||`${c} output`,i),e=a.content_ref?j(a.content_ref,i):"",f=(0,g.Dg)({title:String(d),kind:"markdown",content:"string"==typeof e?e:JSON.stringify(e,null,2),agent_id:b.agent_id||null,project_id:b.project_id||null});i[a.id]=f,n.push({id:a.id,kind:"artifact_write",ok:!0,artifact_id:f?.id||null})}catch(b){return{ok:!1,status:"error",error:"step_failed",failed_step:a.id,message:`Composite ${c} aborted at artifact_write '${a.id}': ${String(b?.message||b)}`,completed_steps:n.map(a=>a.id)}}return{ok:!0,status:"complete",composite:c,steps:n,result:n.length?i[n[n.length-1].id]:null}}d()}catch(a){d(a)}})},24516:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{AQ:()=>r,e3:()=>q,getSecret:()=>n,setSecret:()=>o,yz:()=>p});var e=c(77598),f=c(34255),g=c(87181),h=a([f]);f=(h.then?(await h)():h)[0];let s="aes-256-gcm",t=new Map;function i(){return(0,g.K2)({db:(0,f.getDb)(),allowGenerate:!0})}function j(a={}){return a.scope?String(a.scope):a.agent_id?`agent:${a.agent_id}`:a.project_id?`project:${a.project_id}`:"global"}function k(a,b={}){return b.project_id?String(b.project_id):String(a).startsWith("project:")?String(a).slice(8):null}function l(a,b,c){return`${a}::${b}::${c||""}`}function m(a,b,c){return(0,f.getDb)().prepare("SELECT * FROM secrets WHERE name = ? AND scope = ? AND COALESCE(project_id, '') = COALESCE(?, '') AND status = 'active' LIMIT 1").get(a,b,c||null)}function n(a,b={}){let c=[];b.agent_id&&c.push([`agent:${b.agent_id}`,null]),b.project_id&&c.push([`project:${b.project_id}`,String(b.project_id)]);let d=j(b);c.push([d,k(d,b)]),c.push(["global",null]);let g=new Set;for(let[b,d]of c){let c=l(a,b,d);if(g.has(c))continue;if(g.add(c),t.has(c))return t.get(c);let h=m(a,b,d);if(h)return function(a,b){let c;try{c=function(a,b,c,d){let f=(0,e.createDecipheriv)(s,d,b);return f.setAuthTag(c),Buffer.concat([f.update(a),f.final()]).toString("utf8")}(Buffer.from(a.value_encrypted),Buffer.from(a.iv),Buffer.from(a.auth_tag),i())}catch(b){throw console.warn(`[secrets] decrypt failed for ${a.name} (scope=${a.scope}, id=${a.id}): ${b?.message||b}. The active MADARX_MASTER_KEY does not match the key that encrypted this row. Either restore the original key or re-store this secret with the current key.`),b}return(0,f.getDb)().prepare("UPDATE secrets SET last_used_at = ? WHERE id = ?").run((0,f.nowIso)(),a.id),t.set(b,c),c}(h,c)}return Object.prototype.hasOwnProperty.call(process.env,a)?process.env[a]:null}function o(a,b,c={}){if(!a||"string"!=typeof a)throw Error("name is required");if(null==b)throw Error("value is required");let d=j(c),g=k(d,c),h=(0,f.getDb)(),n=(0,f.nowIso)(),p=m(a,d,g);p&&h.prepare("UPDATE secrets SET status = ?, rotated_at = ? WHERE id = ?").run("rotated",n,p.id),t.delete(l(a,d,g));let{iv:q,encrypted:r,authTag:u}=function(a,b){let c=(0,e.randomBytes)(12),d=(0,e.createCipheriv)(s,b,c),f=Buffer.concat([d.update(String(a),"utf8"),d.final()]);return{iv:c,encrypted:f,authTag:d.getAuthTag()}}(b,i());h.prepare(`INSERT INTO secrets (id, name, scope, value_encrypted, iv, auth_tag, status, source, metadata_json, project_id, created_at)
|
|
886
898
|
VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?)`).run((0,f.newId)("sec"),a,d,r,q,u,c.source||"manual",c.metadata?JSON.stringify(c.metadata):null,g,n),t.set(l(a,d,g),String(b))}function p(a,b,c={}){o(a,b,{...c,source:"rotation"})}function q(a,b={}){let c=j(b),d=k(c,b),e=m(a,c,d);if(!e)throw Error(`Secret not found: ${a} (scope: ${c})`);(0,f.getDb)().prepare("UPDATE secrets SET status = ?, rotated_at = ? WHERE id = ?").run("revoked",(0,f.nowIso)(),e.id),t.delete(l(a,c,d))}function r(){return(0,f.getDb)().prepare("SELECT id, name, scope, project_id, status, source, last_used_at, created_at, rotated_at FROM secrets WHERE status = 'active' ORDER BY name ASC, scope ASC").all()}d()}catch(a){d(a)}})},25938:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{r:()=>h,s:()=>i});var e=c(24516),f=c(58282),g=a([e,f]);async function h(a={},b="google_oauth"){if(a.access_token)return a.access_token;let c=(0,e.getSecret)("GOOGLE_ACCESS_TOKEN",a);if(c&&!a.force_refresh)return c;let d=(0,e.getSecret)("GOOGLE_REFRESH_TOKEN",a),g=(0,e.getSecret)("GOOGLE_OAUTH_CLIENT_ID",a)||process.env.GOOGLE_CLIENT_ID,i=(0,e.getSecret)("GOOGLE_OAUTH_CLIENT_SECRET",a)||process.env.GOOGLE_CLIENT_SECRET;if(!d)throw Error("GOOGLE_REFRESH_TOKEN missing");if(!g||!i)throw Error("GOOGLE_OAUTH_CLIENT_ID/GOOGLE_OAUTH_CLIENT_SECRET missing");let j=new URLSearchParams({client_id:g,client_secret:i,refresh_token:d,grant_type:"refresh_token"}),k=(0,f.N)(b,a.agent_id??null,a.fetch||fetch),l=await k("https://oauth2.googleapis.com/token",{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:j});if(!l.ok)throw Error(`google token refresh failed: ${l.status}`);let m=await l.json();if(!m.access_token)throw Error("google token refresh returned no access_token");return(0,e.setSecret)("GOOGLE_ACCESS_TOKEN",m.access_token,{...a,source:"oauth_access",metadata:{expires_in:m.expires_in||null,refreshed_at:new Date().toISOString()}}),m.access_token}function i(a,b={}){return(0,f.N)(a,b.agent_id??null,b.fetch||fetch)}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},26531:(a,b,c)=>{"use strict";c.d(b,{IB:()=>s,Oe:()=>m,hC:()=>r,nc:()=>t,wn:()=>q});var d=c(73024),e=c(76760),f=c(48161),g=c(9381);let h=new Set([".ssh"]),i=/(;|&&|\|\||\||>|<|\$\(|`)/;function j(){return String(process.env.MADARX_ALLOWED_ROOTS||"").split(",").map(a=>a.trim()).filter(Boolean)}function k(){return String(process.env.MADARX_READONLY_ROOTS||"").split(",").map(a=>a.trim().replace(/^~/,f.homedir())).filter(Boolean)}function l(){return[...new Set([g.Dl,g.un,...j(),...k()].map(a=>p(e.resolve(a))))]}function m(a){let b=p(e.resolve(a)),c=[...new Set(k().map(a=>p(e.resolve(a))))];return!(0===c.length||[g.Dl,g.un,...j()].map(a=>p(e.resolve(a))).some(a=>n(b,a)))&&c.some(a=>n(b,a))}function n(a,b){let c=e.relative(b,a);return""===c||!!c&&!c.startsWith("..")&&!e.isAbsolute(c)}function o(a){if(a.split(e.sep).filter(Boolean).some(a=>h.has(a)))return!0;let b=e.basename(a);return!!(".env.local"===b||/^\.env($|\.)/.test(b))}function p(a){if(d.existsSync(a))return d.realpathSync(a);let b=[],c=a;for(;!d.existsSync(c);){b.unshift(e.basename(c));let d=e.dirname(c);if(d===c)return a;c=d}return e.join(d.realpathSync(c),...b)}function q(a,b={}){let c=(b.allowedRoots||l()).map(a=>e.resolve(a)),d=p(e.resolve(String(a||".")));return c.some(a=>n(d,a))}function r(a,b={}){let c=(b.allowedRoots||l()).map(a=>e.resolve(a)),d=b.base?e.resolve(b.base):g.Dl,f=e.resolve(d,String(a||".")),h=p(f),i=c.find(a=>n(h,a));if(!i)throw Error(`Path is outside allowed roots: ${a}`);if(o(f)||o(h))throw Error(`Path is blocked by safety policy: ${a}`);for(let b of["/System","/Library","/private","/etc","/var"])if(h===b||h.startsWith(`${b}/`))throw Error(`Path is blocked by safety policy: ${a}`);return{path:f,root:i}}function s(a,b=[],c={}){let d=String(a||"").trim(),e=Array.isArray(b)?b.map(String):[],f=[d,...e].join(" ");return d?c.rawString&&i.test(d)?{risk:"high",approval_required:!0,blocked:!1,reason:"Shell metacharacters require approval"}:"sudo"===d||f.includes("rm -rf")||"git"===d&&"reset"===e[0]&&e.includes("--hard")?{risk:"blocked",approval_required:!0,blocked:!0,reason:"Destructive command is blocked"}:"git"===d&&"push"===e[0]&&(e.includes("--force")||e.includes("-f"))?{risk:"irreversible_external",approval_required:!0,blocked:!1,reason:"Force-push rewrites remote history and cannot be undone"}:"kubectl"===d&&"delete"===e[0]?{risk:"irreversible_external",approval_required:!0,blocked:!1,reason:"kubectl delete removes live cluster resources and cannot be undone"}:["psql","mysql","sqlite3","pgcli","mycli"].includes(d)&&/\b(DROP\s+TABLE|DROP\s+DATABASE|TRUNCATE|DELETE\s+FROM\s+\w+\s*(?:;|$))/i.test(f)?{risk:"irreversible_external",approval_required:!0,blocked:!1,reason:"Destructive SQL (DROP/TRUNCATE/DELETE without WHERE) cannot be undone"}:"git"===d&&["commit","push"].includes(e[0])||["chmod","chown","kill","pkill"].includes(d)||f.includes("deploy")?{risk:"high",approval_required:!0,blocked:!1,reason:"Command can modify history, permissions, processes, or deployments"}:["npm","pnpm","yarn","bun"].includes(d)&&["install","add","remove"].includes(e[0])?{risk:"medium",approval_required:!0,blocked:!1,reason:"Package manager mutation requires approval"}:["curl","wget","python","python3","node"].includes(d)&&("node"!==d||"--version"!==e[0])?{risk:"medium",approval_required:!0,blocked:!1,reason:"General command execution requires approval"}:[["pwd"],["date"],["node","--version"],["npm","test"],["npm","run","check"],["git","status"],["git","diff"],["git","log"]].some(a=>a.every((a,b)=>[d,...e][b]===a))?{risk:"low",approval_required:!1,blocked:!1,reason:"Read-only or verification command"}:{risk:"medium",approval_required:!0,blocked:!1,reason:"Command is not on the low-risk allowlist"}:{risk:"blocked",approval_required:!0,blocked:!0,reason:"No command provided"}}function t(a){return String(a||"").replace(/\b(sk|pk|xox[baprs]|ghp|github_pat|AIza)[A-Za-z0-9_\-]{12,}\b/g,"[REDACTED_TOKEN]").replace(/\b[A-Za-z0-9._%+-]+_API_KEY\s*=\s*[^\s]+/gi,"[REDACTED_API_KEY]").replace(/\b(api[_-]?key|token|secret|password)\s*[:=]\s*['"]?[^'"\s]+/gi,"$1=[REDACTED]")}},28741:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Q:()=>n,o:()=>o});var e=c(73024),f=c(31421),g=c(34255),h=c(73912),i=c(24516),j=c(58282),k=a([g,h,i,j]);async function l(a,b={}){let c=(0,i.getSecret)("OPENAI_API_KEY",b)||process.env.OPENAI_API_KEY;if(!c)throw Error("OPENAI_API_KEY missing for OpenAI Whisper transcription");let d=e.readFileSync(a.storage_path),f=new FormData;f.set("model",b.model||"whisper-1"),f.set("file",new Blob([d],{type:a.mime_type||"application/octet-stream"}),a.name),b.language&&f.set("language",b.language);let g=(0,j.N)("transcribe_audio",b.agent_id??null,b.fetch||fetch),h=await g("https://api.openai.com/v1/audio/transcriptions",{method:"POST",headers:{Authorization:`Bearer ${c}`},body:f});if(!h.ok)throw Error(`openai whisper failed: ${h.status}`);let k=await h.json();return{text:k.text||"",language:k.language||b.language||null,duration_seconds:k.duration_seconds??k.duration??null}}async function m(a,b={}){let c=(0,i.getSecret)("ELEVENLABS_API_KEY",b)||process.env.ELEVENLABS_API_KEY;if(!c)throw Error("ELEVENLABS_API_KEY missing for ElevenLabs Scribe transcription");let d=e.readFileSync(a.storage_path),f=new FormData;f.set("model_id",b.model||"scribe_v1"),f.set("file",new Blob([d],{type:a.mime_type||"application/octet-stream"}),a.name),b.language&&f.set("language_code",b.language);let g=(0,j.N)("transcribe_audio",b.agent_id??null,b.fetch||fetch),h=await g("https://api.elevenlabs.io/v1/speech-to-text",{method:"POST",headers:{"xi-api-key":c},body:f});if(!h.ok){let a="";try{a=(await h.text()).slice(0,256)}catch{}throw Error(`elevenlabs scribe failed: ${h.status} ${a.replace(c,"***")}`)}let k=await h.json();return{text:k.text||"",language:k.language_code||b.language||null,duration_seconds:k.duration_seconds??null}}[g,h,i,j]=k.then?(await k)():k;let p={openai:"openai_whisper",elevenlabs:"elevenlabs_scribe",local:"local_whisper"};async function n(a,b={}){let c=(0,h.mM)(a);if(!c)throw Error("source file not found");let d=function(a={}){if(a.use_local||"1"===process.env.LOCAL_WHISPER)return"local";let b=String(a.provider||process.env.TRANSCRIBE_DEFAULT_PROVIDER||"openai").toLowerCase();return["openai","whisper"].includes(b)?"openai":["elevenlabs","scribe","elevenlabs_scribe"].includes(b)?(0,i.getSecret)("ELEVENLABS_API_KEY",a)||process.env.ELEVENLABS_API_KEY?"elevenlabs":(console.warn("[transcribe] ELEVENLABS_API_KEY missing — falling back to openai whisper"),"openai"):"local"===b?"local":"openai"}(b),e="local"===d,j=p[d];if(c.local_only&&!e)return{status:"allowlist_violation",error:`local_only audio cannot be sent to ${d}`};if((0,h.AB)(a,j).redacted)return{status:"allowlist_violation",error:"audio source redacted for engine"};let k=(0,g.getDb)(),o=(0,g.nowIso)(),q=(0,g.newId)("tr");k.prepare(`INSERT INTO transcripts (id, source_file_id, project_id, status, provider, engine, text, created_at, updated_at)
|
|
887
899
|
VALUES (?, ?, ?, 'pending', ?, ?, '', ?, ?)`).run(q,a,c.project_id,d,j,o,o);let r="local"===d?()=>(function(a,b={}){if(b.mock_text)return{text:b.mock_text,language:b.language||null,duration_seconds:b.duration_seconds||null};let c=b.whisper_command||process.env.WHISPER_CPP_BIN||process.env.LOCAL_WHISPER_BIN;if(!c)return{text:`Transcript for ${a.name}`,language:b.language||null,duration_seconds:null};let d=(0,f.spawnSync)(c,["-f",a.storage_path],{encoding:"utf8",timeout:b.timeout_ms||12e4});if(0!==d.status)throw Error(`local whisper failed: ${d.stderr||d.stdout||d.status}`);return{text:String(d.stdout||"").trim(),language:b.language||null,duration_seconds:null}})(c,b):"elevenlabs"===d?()=>m(c,b):()=>l(c,b);try{k.prepare("UPDATE transcripts SET status='running', updated_at=? WHERE id=?").run((0,g.nowIso)(),q);let a=await r(),b=a.text||`Transcript for ${c.name}`,d=function(a){let b=(0,g.getDb)(),c=(0,h.dh)(a),d=b.prepare("SELECT * FROM disk_folders WHERE project_id = ? AND parent_id = ? AND name = ? LIMIT 1").get(a,c.id,"transcripts");return d||(0,h.vV)(a,c.id,"transcripts")}(c.project_id),e=(0,h.QM)(c.project_id,d.id,{name:`${c.name}.transcript.md`,content:`# Transcript: ${c.name}
|
|
888
900
|
|
|
@@ -1022,30 +1034,30 @@ Review, wire into lib/tools/registry.js (see registry-snippet.txt), add tests, r
|
|
|
1022
1034
|
UPDATE heartbeat_tasks
|
|
1023
1035
|
SET status='queued', lease_owner=NULL, lease_expires_at=NULL, updated_at=?, error='Recovered stale lease'
|
|
1024
1036
|
WHERE id=?
|
|
1025
|
-
`).run((0,e.nowIso)(),a.id),r(a.id,{type:"stale_recovered",message:"Recovered stale lease"});return b.length&&h(),b.length}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},40718:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Cz:()=>aj,G7:()=>am,IC:()=>al,TRUST_MODE_CONFIG_KEY:()=>at,VM:()=>ae,executeRegistryTool:()=>ar,h7:()=>au,is:()=>as,kt:()=>av,n4:()=>ag,sd:()=>ai,yC:()=>_});var e=c(77598),f=c(34255),g=c(8437),h=c(67179),i=c(26531),j=c(24516),k=c(20086),l=c(2163),m=c(1511),n=c(4160),o=c(59400),p=c(69635),q=c(48446),r=c(2583),s=c(29827),t=c(72189),u=c(68732),v=c(49567),w=c(32668),x=c(81992),y=c(98278),z=c(29327),A=c(13099),B=c(89833),C=c(17607),D=c(85803),E=c(95019),F=c(80987),G=c(51542),H=c(18630),I=c(10088),J=c(22434),K=c(51218),L=c(38708),M=c(56050),N=c(23737),O=c(4638),P=c(45907),Q=c(91437),R=c(30918),S=c(29559),T=c(70952),U=c(59224),V=c(48409),W=c(97190),X=c(87466),Y=c(13331),Z=c(43466),$=a([f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z]);[f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z]=$.then?(await $)():$;let at="tool_approval_global_mode",au="approval_required",av=new Set(["approval_required","auto"]);function _(){let a=(0,h.getConfig)(at,au);return av.has(a)?a:au}let aw=[{name:"file_read",title:"Read file",description:"Read a bounded file inside approved local roots. Secret files are blocked.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},offset:{type:"number"},limit:{type:"number"}},required:["path"]}},{name:"directory_list",title:"List folder",description:"List directory entries inside approved local roots.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},limit:{type:"number"}}}},{name:"file_search",title:"Search files",description:"Search safe local files while skipping build output, dependencies, databases, and secret files.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{pattern:{type:"string"},path:{type:"string"},target:{type:"string"},file_glob:{type:"string"},limit:{type:"number"}},required:["pattern"]}},{name:"file_write",title:"Write file",description:"Write a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},content:{type:"string"},create_dirs:{type:"boolean"},approval_id:{type:"string"}},required:["path","content"]}},{name:"file_patch",title:"Edit file",description:"Patch a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},old_string:{type:"string"},new_string:{type:"string"},replace_all:{type:"boolean"},approval_id:{type:"string"}},required:["path","old_string","new_string"]}},{name:"terminal_run",title:"Run command",description:"Run a bounded local command with spawn command and args, never shell:true.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},timeout_ms:{type:"number"},approval_id:{type:"string"}},required:["command"]}},{name:"process_start",title:"Start process",description:"Start a madarX-owned local process and persist process state.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},approval_id:{type:"string"}},required:["command"]}},{name:"process_poll",title:"Check process",description:"Poll a madarX-owned local process row.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{process_id:{type:"string"}},required:["process_id"]}},{name:"process_kill",title:"Stop process",description:"Stop a madarX-owned process after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{process_id:{type:"string"},approval_id:{type:"string"}},required:["process_id"]}},{name:"web_search",title:"Search the web",description:"Search the public web with Firecrawl, SearXNG, Brave Search, or the no-key DuckDuckGo Lite fallback, returning ranked results with title, URL, snippet, and source metadata.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{query:{type:"string",description:"Search query."},count:{type:"number",description:"Number of results, 1-10. Default 5."},country:{type:"string",description:"Optional Brave country code, e.g. US."},search_lang:{type:"string",description:"Optional search language, e.g. en."}},required:["query"]}},{name:"web_fetch",title:"Fetch a webpage",description:"Fetch a public URL, block local/private network targets, strip HTML to readable text, and cap response size.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to fetch."},max_bytes:{type:"number",description:"Maximum response bytes, capped at 512000."}},required:["url"]}},{name:"web_extract",title:"Extract from webpage",description:"Extract readable content from a public URL with Firecrawl scrape when configured, otherwise fall back to direct web fetch.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to extract."},max_bytes:{type:"number",description:"Maximum response bytes for direct fetch fallback, capped at 512000."}},required:["url"]}},{name:"browser_harness_run",title:"Browser Harness",description:"Run a bounded browser-harness Python snippet against an activated Chrome CDP browser. This is local-code-execution risk: it starts disabled and requires owner approval for every main-agent or sub-agent execution.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{script:{type:"string",description:"Python code executed by browser-harness. Helpers are pre-imported; use new_tab(url), wait_for_load(), page_info(), capture_screenshot(), click_at_xy(), js(), or cdp()."},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 120000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["script"]}},{name:"skill_bridge_run",title:"Skill Bridge",description:"Run one allowlisted first-party gstack CLI skill (connect-chrome, browse, qa-only) to drive the real visible browser the operator can watch live. Crosses the Claude Code CLI trust boundary, so it is ALWAYS approval-gated for every run (even in trust-mode auto) and disabled by default. Pass the skill slug and a plain-language instruction; the bridge invokes only that skill, bounded by the .claude deny list.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:300,max:10},input_schema:{type:"object",properties:{skill:{type:"string",description:"Skill slug to invoke. One of: connect-chrome, browse, qa-only.",enum:["connect-chrome","browse","qa-only"]},instruction:{type:"string",description:'Plain-language instruction for the skill (e.g. "open Google News and search US Iran war, read the top 3 headlines"). Max 4000 chars.'},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 180000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["skill","instruction"]}},{name:"browser_open",title:"Browser Open (Playwright)",description:"Open a URL in a real headless Chromium and return the final URL, page title, and visible text. Use this (not browser_navigate) for JavaScript-rendered pages, SPAs, or anything that needs a real browser. The page persists across calls so you can browser_act / browser_extract on it next.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to open."},wait_for:{type:"string",description:"Optional CSS selector to wait for after load."},timeout_ms:{type:"number",description:"Navigation timeout in ms (default 30000, max 120000)."}},required:["url"]}},{name:"browser_act",title:"Browser Act (Playwright)",description:"Interact with the currently open page: click, fill, type, select, press a key, scroll, or wait. State-changing — gated for approval in approval-required trust mode. Locate elements with a CSS selector or a Playwright text= selector. Does NOT expand the agent's permissions; it only drives the page already loaded by browser_open.",category:"browser",risk_level:"high",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{action:{type:"string",enum:["click","fill","type","select","press","scroll","wait"],description:"Interaction to perform."},selector:{type:"string",description:"CSS selector or Playwright text= selector for the target element. Required for click/fill/type/select/press."},text:{type:"string",description:"Text to fill/type (for fill/type), or option value (for select)."},value:{type:"string",description:"Option value for select (alternative to text)."},key:{type:"string",description:"Key to press for the press action (default Enter)."},timeout_ms:{type:"number",description:"Action timeout in ms (default 30000, max 120000)."}},required:["action"]}},{name:"browser_extract",title:"Browser Extract (Playwright)",description:"Read content from the currently open page: visible text (default), raw HTML, or JSON-LD blocks. Optionally scoped to a CSS selector. Use after browser_open / browser_act to pull the rendered result.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{mode:{type:"string",enum:["text","html","json-ld"],default:"text",description:"What to extract."},selector:{type:"string",description:"Optional CSS selector to scope extraction."}}}},{name:"browser_screenshot",title:"Browser Screenshot (Playwright)",description:"Capture a PNG screenshot of the currently open page (or a selector / full page). Saved to disk under data/browser-screenshots; returns the file path.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{selector:{type:"string",description:"Optional CSS selector to screenshot just one element."},full_page:{type:"boolean",description:"Capture the full scrollable page (default false)."}}}},{name:"browser_navigate",title:"Browser Navigate",description:"Fetch a URL with Chrome 124 headers, cookie jar, redirect following, and configurable extraction (text, markdown, json-ld, metadata, raw). Falls back gracefully on JS-only pages.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"HTTP/HTTPS URL"},extract:{type:"string",enum:["text","markdown","json-ld","metadata","raw"],default:"text"},selector:{type:"string",description:"Optional CSS-like selector: tag, #id, or .class"},wait_for:{type:"string",description:"Optional substring expected in response; returns hint if missing"},max_chars:{type:"integer",default:12e3,maximum:5e4}},required:["url"]}},{name:"browser_extract_structured",title:"Browser Extract Structured",description:"Fetch a URL and extract both JSON-LD structured data and page metadata (title, og:*, meta tags) in one call.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string"}},required:["url"]}},{name:"supabase_list_projects",title:"List Supabase projects",description:"List Supabase projects available to the configured personal access token.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_ACCESS_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{}}},{name:"supabase_rest_select",title:"Read database rows",description:"Read rows from a Supabase table using the REST API with optional filters and limit.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{table:{type:"string",description:"Table name."},select:{type:"string",description:"PostgREST select expression. Default *."},filters:{type:"object",description:"Column filters. Values may be raw PostgREST operators or plain values for eq."},limit:{type:"number",description:"Maximum rows, 1-100. Default 25."}},required:["table"]}},{name:"supabase_rest_insert",title:"Add database rows",description:"Insert one or more rows into a Supabase table using the REST API. Returns the inserted rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name (schema-qualified allowed, e.g. auth.users)."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to insert."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_upsert",title:"Add or update rows",description:"Upsert one or more rows into a Supabase table. Merges on conflict. Returns affected rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to upsert."},on_conflict:{type:"string",description:"Comma-separated column(s) to resolve conflicts on."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_update",title:"Update database rows",description:"Update rows in a Supabase table matching the given filters. Filters are required — table-wide updates are blocked.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},patch:{type:"object",description:"Column values to set on matching rows."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","patch","filters"]}},{name:"supabase_rest_delete",title:"Delete database rows",description:"Delete rows from a Supabase table matching the given filters. Filters are required — bulk table truncation is blocked. Always requires approval regardless of trust mode.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","filters"]}},{name:"supabase_rpc",title:"Call database function",description:"Call a Postgres function via the Supabase REST RPC endpoint.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"function_name",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{function_name:{type:"string",description:"Postgres function name to call."},params:{type:"object",description:"Parameters passed as the request body."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["function_name"]}},{name:"supabase_sql",title:"Run SQL query",description:"Execute raw SQL via the madarx_exec_sql() Postgres function. Uses the service-role key and BYPASSES Row-Level Security. Always requires approval regardless of trust mode. Requires creating the madarx_exec_sql() function in your project.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{query:{type:"string",description:"SQL query to execute via madarx_exec_sql()."},params:{type:"object",description:"Optional named parameters for the query."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["query"]}},{name:"vercel_list_projects",title:"List Vercel projects",description:"List Vercel projects visible to the configured token.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},limit:{type:"number",description:"Maximum projects."}}}},{name:"vercel_list_deployments",title:"List Vercel deployments",description:"List Vercel deployments, optionally scoped by project.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},project_id:{type:"string",description:"Optional Vercel project id."},project_name:{type:"string",description:"Optional Vercel project name."},limit:{type:"number",description:"Maximum deployments."}}}},{name:"vercel_create_deployment",title:"Deploy to Vercel",description:"Stage a Vercel deployment request for owner approval. This does not deploy until approved.",category:"vercel",risk_level:"high",required_env:["VERCEL_TOKEN"],enabled_default:!1,approval_required:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{summary:{type:"string",description:"Deployment purpose and requested target."}}}},{name:"email_send",title:"Send email",description:"Send a transactional email via Resend. Approval is required.",category:"email",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"recipient_domain",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{from:{type:"string",description:"Sender address. Defaults to RESEND_FROM_EMAIL secret/env."},to:{type:"string",description:'Single recipient email address, e.g. "user@example.com".'},subject:{type:"string",description:"Email subject line."},text:{type:"string",description:"Plain-text email body. Either text or html is required."},html:{type:"string",description:"HTML email body. Either text or html is required."},reply_to:{type:"string",description:"Reply-to address."},recipient_domain:{type:"string",description:'Domain portion of the "to" address, e.g. "example.com". Must match the domain in "to" exactly — used by the allowlist gate.'},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["to","subject"]}},{name:"email_status_lookup",title:"Check email delivery",description:"Look up the delivery status of a previously-sent email.",category:"email",risk_level:"low",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{email_id:{type:"string",description:"Resend email ID returned by email_send."}},required:["email_id"]}},{name:"gh_repo_read",title:"Read a GitHub repo",description:"Read metadata for a GitHub repository (name, visibility, default branch, stars, forks).",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format, e.g. acme/api."}},required:["repo_full_name"]}},{name:"gh_repo_list",title:"List GitHub repos",description:"List GitHub repositories the token can access. Without `org`, lists across all affiliations (owned + collaborator + organization_member). Pass `org` to list a specific organization's repos you were granted access to.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{org:{type:"string",description:"List repos for this organization/owner (GET /orgs/{org}/repos). Use this to reach org repos you were granted access to."},affiliation:{type:"string",description:"Comma-separated: owner, collaborator, organization_member. Default lists all three. Ignored when `org` is set."},visibility:{type:"string",description:"Filter by visibility: all, public, private. Ignored when `org` is set."},type:{type:"string",description:"Without org: all|owner|member (mutually exclusive with affiliation). With org: all|public|private|forks|sources|member."},sort:{type:"string",description:"Sort by: created, updated, pushed, full_name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."},page:{type:"number",description:"Page number for pagination. Default 1."}}}},{name:"gh_issue_list",title:"List issues",description:"List issues in a GitHub repository with optional state and label filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"Issue state: open, closed, all. Default open."},labels:{type:"string",description:"Comma-separated label names to filter by."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_issue_create",title:"Create an issue",description:"Create an issue in an allowlisted GitHub repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"Issue title."},body:{type:"string",description:"Issue body in Markdown."},labels:{type:"array",items:{type:"string"},description:"Labels to apply."},assignees:{type:"array",items:{type:"string"},description:"GitHub usernames to assign."}},required:["repo_full_name","title"]}},{name:"gh_issue_comment",title:"Comment on an issue",description:"Post a comment on a GitHub issue in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},issue_number:{type:"number",description:"Issue number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","issue_number","body"]}},{name:"gh_pr_list",title:"List pull requests",description:"List pull requests in a GitHub repository with optional filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"PR state: open, closed, all. Default open."},head:{type:"string",description:"Filter by head branch (user:branch)."},base:{type:"string",description:"Filter by base branch name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_pr_create",title:"Open a pull request",description:"Open a pull request in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"PR title."},head:{type:"string",description:"Head branch (source)."},base:{type:"string",description:"Base branch (target)."},body:{type:"string",description:"PR description in Markdown."},draft:{type:"boolean",description:"Open as a draft PR."}},required:["repo_full_name","title","head","base"]}},{name:"gh_pr_comment",title:"Comment on a pull request",description:"Post a comment on a GitHub pull request in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","pr_number","body"]}},{name:"gh_pr_merge",title:"Merge a pull request",description:"Merge a pull request in an allowlisted GitHub repository. This action is irreversible once completed.",category:"github",risk_level:"irreversible_external",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},commit_title:{type:"string",description:"Custom commit title for squash merge."},commit_message:{type:"string",description:"Custom commit message for squash merge."},merge_method:{type:"string",description:"Merge method: merge, squash, rebase. Default squash."}},required:["repo_full_name","pr_number"]}},{name:"gh_actions_dispatch",title:"Run a GitHub workflow",description:"Trigger a workflow dispatch event in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},workflow_id:{type:"string",description:"Workflow filename or ID (e.g. deploy.yml)."},ref:{type:"string",description:"Branch or tag to run the workflow on."},inputs:{type:"object",description:"Optional workflow dispatch inputs."}},required:["repo_full_name","workflow_id","ref"]}},{name:"gh_release_create",title:"Publish a release",description:"Create a release in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},tag_name:{type:"string",description:"Git tag for the release."},target_commitish:{type:"string",description:"Commit SHA or branch to tag."},name:{type:"string",description:"Release title."},body:{type:"string",description:"Release notes in Markdown."},draft:{type:"boolean",description:"Create as a draft release."},prerelease:{type:"boolean",description:"Mark as a pre-release."}},required:["repo_full_name","tag_name"]}},{name:"flight_search",title:"Search flights",description:"Search flight offers and return curated price + itinerary data. Uses Amadeus when AMADEUS_CLIENT_ID and AMADEUS_CLIENT_SECRET are configured, otherwise falls back to a free, key-less Google Flights backend lookup.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{origin:{type:"string",description:'Origin airport IATA code, e.g. "JFK".'},destination:{type:"string",description:'Destination airport IATA code, e.g. "LHR".'},departure_date:{type:"string",description:"Departure date YYYY-MM-DD."},return_date:{type:"string",description:"Optional return date YYYY-MM-DD for round-trip search."},adults:{type:"number",description:"Adult passengers 1-9. Default 1."},children:{type:"number",description:"Child passengers 0-8."},travel_class:{type:"string",description:"ECONOMY | PREMIUM_ECONOMY | BUSINESS | FIRST."},currency:{type:"string",description:"3-letter ISO currency code. Default USD."},non_stop:{type:"boolean",description:"Only return non-stop itineraries."},max_results:{type:"number",description:"Max offers 1-25. Default 5."}},required:["origin","destination","departure_date"]}},{name:"flight_status",title:"Check flight status",description:"Look up live or scheduled flight status via Aviationstack. Returns departure, arrival, delay, and live position.",category:"travel",risk_level:"low",required_env:["AVIATIONSTACK_API_KEY"],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{flight_iata:{type:"string",description:'Flight IATA code, e.g. "BA283".'},flight_icao:{type:"string",description:"Flight ICAO code."},airline_iata:{type:"string",description:'Filter by airline IATA, e.g. "BA".'},dep_iata:{type:"string",description:"Departure airport IATA."},arr_iata:{type:"string",description:"Arrival airport IATA."},flight_date:{type:"string",description:"Flight date YYYY-MM-DD."},limit:{type:"number",description:"Max results 1-100. Default 5."}}}},{name:"hotel_search",title:"Search hotels",description:"List hotels at a TripAdvisor location via Xotelo. No API key required. Returns hotel_keys you can pass to hotel_rates.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{location_key:{type:"string",description:'TripAdvisor geo location key, e.g. "g60763" for New York City.'},offset:{type:"number",description:"Pagination offset. Default 0."},limit:{type:"number",description:"Results 1-30. Default 10."},sort:{type:"string",description:"popularity | price | rating."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},hotel_class:{type:"string",description:'Filter by star class, e.g. "4,5".'}},required:["location_key"]}},{name:"hotel_rates",title:"Check hotel rates",description:"Get real-time hotel rates from Booking.com, Expedia, Hotels.com, Agoda, etc. via Xotelo. No API key required.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{hotel_key:{type:"string",description:'TripAdvisor hotel key, e.g. "g60763-d224867". Obtain from hotel_search.'},chk_in:{type:"string",description:"Check-in date YYYY-MM-DD."},chk_out:{type:"string",description:"Check-out date YYYY-MM-DD (must be after chk_in)."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},rooms:{type:"number",description:"Rooms 1-9. Default 1."},adults:{type:"number",description:"Adults 1-9. Default 2."}},required:["hotel_key","chk_in","chk_out"]}},{name:"gmail_messages_list",title:"List Gmail messages",description:"Read message metadata from the operator Gmail inbox.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{max_results:{type:"number"},q:{type:"string"}}}},{name:"gmail_message_read",title:"Read a Gmail message",description:"Read one Gmail message for summarization or drafting.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{message_id:{type:"string"}},required:["message_id"]}},{name:"gmail_thread_read",title:"Read a Gmail thread",description:"Read a Gmail thread for context.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{thread_id:{type:"string"}},required:["thread_id"]}},{name:"calendar_events_list",title:"List calendar events",description:"Read upcoming Google Calendar events.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{calendar_id:{type:"string"},time_min:{type:"string"},time_max:{type:"string"},max_results:{type:"number"}}}},{name:"calendar_event_read",title:"Read a calendar event",description:"Read one Google Calendar event.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{event_id:{type:"string"},calendar_id:{type:"string"}},required:["event_id"]}},{name:"transcribe_audio",title:"Transcribe audio",description:"Transcribe a Disk audio file and save the transcript as a Disk artifact. Provider: openai (whisper, default), elevenlabs (Scribe), or local.",category:"local_machine",risk_level:"medium",approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string"},use_local:{type:"boolean"},provider:{type:"string",description:'Transcription provider: openai | elevenlabs | local. Defaults to TRANSCRIBE_DEFAULT_PROVIDER or "openai".'},language:{type:"string"}},required:["file_id"]}},{name:"voice_speak",title:"Speak text aloud",description:"Synthesize a short text reply to audio via OpenAI TTS (default) or ElevenLabs. Returns base64 audio; optionally saves to Disk.",category:"voice",risk_level:"low",approval_mode:"auto",required_env:[["OPENAI_API_KEY","ELEVENLABS_API_KEY"]],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{text:{type:"string",description:"Text to synthesize. Up to 4000 chars."},provider:{type:"string",description:"Provider: openai (default) or elevenlabs."},voice:{type:"string",description:"Provider-specific voice id. OpenAI: alloy|echo|fable|onyx|nova|shimmer. ElevenLabs: voice id."},model:{type:"string"},format:{type:"string",description:"mp3 (default) or wav."},save_to_disk:{type:"boolean"},project_id:{type:"string"}},required:["text"]}},{name:"printing_press_install",title:"Install Printing Press sub-package",description:"Install the printing-press sub-package required to generate scoped CLIs. Always approval-gated.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{},required:[]}},{name:"printing_press_generate",title:"Generate a scoped CLI",description:"Generate a new scoped CLI from a starter pack, GitHub repo, or local source.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Lowercase kebab-case CLI slug."},source:{type:"string",description:"starter-pack | github | local | spec"},source_url:{type:"string",description:"Required when source is not starter-pack."}},required:["slug"]}},{name:"printing_press_run",title:"Run an installed CLI",description:"Execute a previously-installed printing-press CLI with bounded args.",category:"cli_generator",risk_level:"high",approval_mode:"approval_required",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug to run."},args:{type:"array",items:{type:"string"},description:"Bounded arg list (no shell metacharacters)."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal `slug`."}},required:["slug"]}},{name:"create_workflow_definition",title:"Create workflow definition",description:'Create a new process workflow from a JSON spec. The spec is validated against lib/process/spec-validator.js. The new definition is published immediately at status="published" — cases can be started from it. Risk-gated by approval.',category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{spec:{type:"object",description:"Full workflow spec JSON. Must include schema_version, slug, name, version, stages[]. First stage must be intake_form. See ai-docs/process-engine.md and the validator at lib/process/spec-validator.js for the full schema."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["spec"]}},{name:"update_workflow_definition",title:"Update workflow definition",description:"Update an existing process workflow at a given slug. Spec is re-validated. version must be bumped if the stage list changed structurally. In-flight cases keep their old definition_id; new cases use the new version.",category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Slug of the existing workflow to update."},spec:{type:"object",description:"Full workflow spec JSON. slug is forced to match the path slug."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["slug","spec"]}},{name:"self_update",title:"Update madarX OS",description:"Update the madarX OS install to the latest published version (npm i -g madarx@latest). Irreversible-external: an agent calling this ALWAYS requires owner approval — it can never silently replace the running binary. A restart is required after a successful update.",category:"system",risk_level:"irreversible_external",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:86400,max:4},input_schema:{type:"object",properties:{approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:[]}},{name:"printing_press_query",title:"Query an installed CLI SQLite mirror",description:"Run a single read-only SELECT against a CLI local SQLite mirror, if it exposes one.",category:"cli_generator",risk_level:"low",approval_mode:"auto",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug whose SQLite mirror to query."},sql:{type:"string",description:"Single SELECT statement. Multi-statement SQL is refused."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal the slug."}},required:["slug","sql"]}},{name:"mines_project_create",title:"Create mine project",description:"Create a new mine project workspace and register it in the Mines module.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{name:{type:"string"},slug:{type:"string",description:'Lowercase kebab-case, e.g. "batamote"'},asset_stage:{type:"string",enum:["exploration","development","production","care_and_maintenance","unknown"]},commodity:{type:"string"},deposit_type:{type:"string"},approval_id:{type:"string"}},required:["name","slug"]}},{name:"mines_project_read",title:"Read mine project summary",description:"Read a mine project record including data completeness and document counts by category.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"}},required:["project_id"]}},{name:"mines_catalog_import",title:"Import portfolio catalog",description:"Load a master project catalog XLSX into Portfolio and PortfolioEntry records.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string",description:"Disk file ID of the XLSX catalog."},portfolio_name:{type:"string"},sheet_name:{type:"string",description:"Optional sheet override."},approval_id:{type:"string"}},required:["file_id","portfolio_name"]}},{name:"mines_data_import",title:"Bulk import mine data directory",description:"Walk a directory tree, auto-classify files by folder taxonomy, and enqueue each file for ingestion. Incremental and resumable.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},directory_path:{type:"string"},resume:{type:"boolean",description:"Skip files already past queued status."},approval_id:{type:"string"}},required:["project_id","directory_path"]}},{name:"mines_document_extract",title:"Extract and embed document",description:"Parse a source document (PDF/DOCX/PPTX), OCR if scanned, chunk text, and embed chunks. Spanish-first.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{source_document_id:{type:"string"},force_ocr:{type:"boolean"},approval_id:{type:"string"}},required:["source_document_id"]}},{name:"mines_spatial_index",title:"Index spatial assets",description:"Read GIS/CAD file metadata (kind, CRS, bounding box) without rendering geometry.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Index a single already-catalogued file."}},required:["project_id"]}},{name:"mines_extract_facts",title:"Extract structured facts from documents (LLM)",description:"Read a project document's indexed chunks and extract structured, provenance-cited geology/economics facts into mines_extracted_facts. Every fact is validated to cite a real chunk + verbatim quote; uncited facts are rejected. Never declares a mineral resource the source did not. Feeds mines_report_generate and mines_valuation_run.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Document to extract from. Defaults to the project's most-chunked document (its technical report)."},max_chunks:{type:"number",description:"Max chunks fed to the model. Default 48."},char_budget:{type:"number",description:"Max source characters per call. Default 32000."},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_assumption_validate",title:"Validate valuation assumptions",description:"Check completeness of data required for T1 or T2 valuation and return a gap list.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},target_tier:{type:"string",enum:["t1_in_situ","t2_dcf","auto"]}},required:["project_id"]}},{name:"mines_valuation_run",title:"Run tiered mine valuation",description:"Compute base/downside/upside valuation. Selects T1 (in-situ) or T2 (DCF) based on asset stage and data completeness. States tier and rationale.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{project_id:{type:"string"},commodity_prices_json:{type:"string",description:'JSON price override e.g. {"Au":2300,"Cu":4.2}. Defaults to latest mines_market_snapshots.'},in_situ_factor_override:{type:"number"},force_tier:{type:"string",enum:["t1_in_situ","t2_dcf"]},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_sensitivity_run",title:"Run valuation sensitivity analysis",description:"Compute sensitivity of valuation to key drivers (grade, price, recovery, in_situ_factor, discount_rate).",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{scenario_id:{type:"string"},drivers:{type:"array",items:{type:"string"}},steps:{type:"number",description:"Steps per driver. Default 5."},approval_id:{type:"string"}},required:["scenario_id"]}},{name:"mines_market_snapshot",title:"Fetch commodity market data",description:"Retrieve current commodity prices from an approved market data provider.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:["MINES_MARKET_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"market_provider_host",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{commodities:{type:"array",items:{type:"string"}},market_provider_host:{type:"string",description:'e.g. "metals-api.com". Must be in allowlist.'},approval_id:{type:"string"}},required:["market_provider_host"]}},{name:"mines_report_generate",title:"Generate mine project report",description:"Generate a cited, structured report artifact. External email send always requires separate irreversible_external approval.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},report_kind:{type:"string",enum:["interpretation_memo","due_diligence_memo","data_quality_report","investor_presentation","pfs_readiness_report","valuation_report","due_diligence_questions","project_package","portfolio_screen"]},scenario_id:{type:"string",description:"Required for valuation_report."},space_id:{type:"string",description:"Optional dashboard space to publish into. Defaults to the project’s configured default space; the artifact is pinned there so it appears as a window on the dashboard board."},language:{type:"string",enum:["en","es"],description:'Default "en".'},narrative:{type:"object",description:"LLM-authored prose slots (all optional, each falls back to data-driven copy). For investor_presentation: hero_headline, hero_subhead (strings); opportunity (array of paragraph strings); findings_lead, upside_lead, risk_lead, the_ask (strings). For pfs_readiness_report: verdict, gap_intro, work_program, recommendation (strings). Numbers/figures are never taken from here — they always come from cited DB rows.",properties:{hero_headline:{type:"string"},hero_subhead:{type:"string"},opportunity:{type:"array",items:{type:"string"}},findings_lead:{type:"string"},upside_lead:{type:"string"},risk_lead:{type:"string"},the_ask:{type:"string"},verdict:{type:"string"},gap_intro:{type:"string"},work_program:{type:"string"},recommendation:{type:"string"}}},send_email:{type:"boolean"},recipient_email:{type:"string"},approval_id:{type:"string"}},required:["project_id","report_kind"]}},{name:"create_skill",title:"Author skill",description:"Author a declarative skill (SKILL.md + marketplace row) any agent can invoke. Instructions only — no code executes. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:"{ slug, title, description?, markdown, invocation?, trigger_examples?[], category? }"},approval_id:{type:"string"}},required:["spec"]}},{name:"update_skill",title:"Update skill",description:"Update an existing authored skill by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_composite_tool",title:"Author composite tool",description:"Author a composite tool: a declarative recipe chaining EXISTING primitive tools + LLM steps. Inherits the MAX risk of its steps; every gate re-fires per sub-step. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:'{ slug, title, description?, input_schema?, steps:[{kind:"tool_call"|"llm_synthesis"|"artifact_write", id, ...}] }'},approval_id:{type:"string"}},required:["spec"]}},{name:"update_composite_tool",title:"Update composite tool",description:"Update an existing composite tool by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_connector",title:"Author API connector",description:"Author a declarative REST API connector (Option D). Each endpoint becomes a callable <slug>.<endpoint> tool backed by the generic http_api_call executor. Manifest is inert data: https-only, secret-by-reference auth, host allowlist, per-endpoint risk ceiling. Owner/admin authority required. The owner supplies the API key once.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{manifest:{type:"object",description:"{ slug, base_url(https), allowed_hosts[], auth:{type,secret_ref|username_ref/password_ref,header?,prefix?,query_param?}, default_headers?, endpoints:{ name:{method,path,risk?,input_schema?} } }"},approval_id:{type:"string"}},required:["manifest"]}},{name:"update_connector",title:"Update API connector",description:"Update an existing API connector by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},manifest:{type:"object"},approval_id:{type:"string"}},required:["slug","manifest"]}},{name:"propose_tool",title:"Propose new tool (code-gen)",description:"Option B escape hatch for non-REST integrations: generate an adapter scaffold + registry snippet + tests into a staging dir. The proposal is INERT — it is never callable until a human reviews, merges, and restarts. Writes files only; executes nothing.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string",description:"snake_case tool name"},summary:{type:"string"},risk:{type:"string",enum:["low","medium","high","irreversible_external"]},approval_id:{type:"string"}},required:["slug"]}}],ax={web_search:o.tE,web_fetch:o.dV,web_extract:o.IY,email_send:p.x,email_status_lookup:p.f,supabase_list_projects:q.NO,supabase_rest_select:q.TP,supabase_rest_insert:q.c3,supabase_rest_upsert:q.mD,supabase_rest_update:q.sX,supabase_rest_delete:q.oc,supabase_rpc:q.wm,supabase_sql:q.l8,vercel_list_projects:r.Q$,vercel_list_deployments:r.I6,vercel_create_deployment:r.vV,gh_repo_read:s.Sj,gh_repo_list:s.AU,gh_issue_list:s.jj,gh_issue_create:s.vj,gh_issue_comment:s.iP,gh_pr_list:s.gn,gh_pr_create:s.Ud,gh_pr_comment:s.J,gh_pr_merge:s.wt,gh_actions_dispatch:s.zI,gh_release_create:s.Bb,file_read:t.dd,directory_list:t.sv,file_search:t.X,file_write:t.sq,file_patch:t.vO,terminal_run:u.y,process_start:v.gy,process_poll:v.p3,process_kill:v.MU,flight_search:w.R5,flight_status:w.zP,hotel_search:w.FE,hotel_rates:w.Y$,gmail_messages_list:x.r_,gmail_message_read:x.cS,gmail_thread_read:x.vg,calendar_events_list:y.u,calendar_event_read:y.r,transcribe_audio:z.b,browser_harness_run:A.K,skill_bridge_run:B.eE,browser_open:D.D6,browser_act:D.Hz,browser_extract:D.aU,browser_screenshot:D.Jz,browser_navigate:C.M,browser_extract_structured:C.B,voice_speak:E.o,printing_press_install:F.gE,printing_press_generate:F.ID,printing_press_run:F.Cw,printing_press_query:F.VC,create_workflow_definition:G.h,update_workflow_definition:G.m,self_update:H.m,create_skill:I.S,update_skill:I.f,create_composite_tool:J.y$,update_composite_tool:J.le,create_connector:K.U$,update_connector:K.zc,propose_tool:L.B,http_api_call:M.p,composite_tool_run:N.n,mines_project_create:Q.m,mines_project_read:Q.I,mines_catalog_import:R.b,mines_data_import:S.I,mines_document_extract:T.f,mines_extract_facts:Z.$,mines_spatial_index:U.d,mines_assumption_validate:V.w,mines_valuation_run:W.R,mines_sensitivity_run:W.h,mines_market_snapshot:X.V,mines_report_generate:Y.Q},ay={file_write:t.Z6,file_patch:t.mr,terminal_run:u.x,process_start:v.H7,process_kill:v.L7,browser_harness_run:A.r,skill_bridge_run:B.zE},az=new Set;function aa(a){try{if((0,j.getSecret)(a))return!0}catch{}return!!process.env[a]&&(az.has(a)||(az.add(a),console.warn(`[secrets] ${a} is being read from process.env as a fallback. Migrate it to the vault with: node scripts/migrate-env-to-secrets.mjs`)),!0)}function ab(a=[]){return a.filter(a=>Array.isArray(a)?!a.some(a=>aa(a)):!aa(a)).map(a=>Array.isArray(a)?a.join(" or "):a)}let aA=[{marker:"tool.repair.flight_search_enable_v1",tool_name:"flight_search",summary:"One-shot: enable flight_search on installs where the Amadeus→Google fallback shipped after the row was created."}];function ac(){let a=(0,f.getDb)(),b=(0,f.nowIso)();for(let c of aw){let d=a.prepare("SELECT name, enabled, required_env FROM tool_installations WHERE name=?").get(c.name),e={name:c.name,title:c.title,description:c.description,category:c.category,enabled:+!!c.enabled_default,risk_level:c.risk_level,required_env:JSON.stringify(c.required_env||[])};if(!d){a.prepare(`
|
|
1037
|
+
`).run((0,e.nowIso)(),a.id),r(a.id,{type:"stale_recovered",message:"Recovered stale lease"});return b.length&&h(),b.length}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},40718:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Cz:()=>ak,G7:()=>an,IC:()=>am,TRUST_MODE_CONFIG_KEY:()=>au,VM:()=>af,executeRegistryTool:()=>as,h7:()=>av,is:()=>at,kt:()=>aw,n4:()=>ah,sd:()=>aj,yC:()=>aa});var e=c(77598),f=c(34255),g=c(8437),h=c(67179),i=c(26531),j=c(24516),k=c(20086),l=c(2163),m=c(1511),n=c(4160),o=c(59400),p=c(69635),q=c(21526),r=c(48446),s=c(2583),t=c(29827),u=c(72189),v=c(68732),w=c(49567),x=c(32668),y=c(81992),z=c(98278),A=c(29327),B=c(13099),C=c(89833),D=c(17607),E=c(85803),F=c(95019),G=c(80987),H=c(51542),I=c(18630),J=c(10088),K=c(22434),L=c(51218),M=c(38708),N=c(56050),O=c(23737),P=c(4638),Q=c(45907),R=c(91437),S=c(30918),T=c(29559),U=c(70952),V=c(59224),W=c(48409),X=c(97190),Y=c(87466),Z=c(13331),$=c(43466),_=a([f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,C,D,E,F,G,H,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Z,$]);[f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,C,D,E,F,G,H,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Z,$]=_.then?(await _)():_;let au="tool_approval_global_mode",av="approval_required",aw=new Set(["approval_required","auto"]);function aa(){let a=(0,h.getConfig)(au,av);return aw.has(a)?a:av}let ax=[{name:"file_read",title:"Read file",description:"Read a bounded file inside approved local roots. Secret files are blocked.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},offset:{type:"number"},limit:{type:"number"}},required:["path"]}},{name:"directory_list",title:"List folder",description:"List directory entries inside approved local roots.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{path:{type:"string"},limit:{type:"number"}}}},{name:"file_search",title:"Search files",description:"Search safe local files while skipping build output, dependencies, databases, and secret files.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{pattern:{type:"string"},path:{type:"string"},target:{type:"string"},file_glob:{type:"string"},limit:{type:"number"}},required:["pattern"]}},{name:"file_write",title:"Write file",description:"Write a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},content:{type:"string"},create_dirs:{type:"boolean"},approval_id:{type:"string"}},required:["path","content"]}},{name:"file_patch",title:"Edit file",description:"Patch a file inside approved local roots after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{path:{type:"string"},old_string:{type:"string"},new_string:{type:"string"},replace_all:{type:"boolean"},approval_id:{type:"string"}},required:["path","old_string","new_string"]}},{name:"terminal_run",title:"Run command",description:"Run a bounded local command with spawn command and args, never shell:true.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},timeout_ms:{type:"number"},approval_id:{type:"string"}},required:["command"]}},{name:"process_start",title:"Start process",description:"Start a madarX-owned local process and persist process state.",category:"local_machine",risk_level:"medium",approval_mode:"policy",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}},cwd:{type:"string"},approval_id:{type:"string"}},required:["command"]}},{name:"process_poll",title:"Check process",description:"Poll a madarX-owned local process row.",category:"local_machine",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{process_id:{type:"string"}},required:["process_id"]}},{name:"process_kill",title:"Stop process",description:"Stop a madarX-owned process after owner approval.",category:"local_machine",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{process_id:{type:"string"},approval_id:{type:"string"}},required:["process_id"]}},{name:"web_search",title:"Search the web",description:"Search the public web with Firecrawl, SearXNG, Brave Search, or the no-key DuckDuckGo Lite fallback, returning ranked results with title, URL, snippet, and source metadata.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{query:{type:"string",description:"Search query."},count:{type:"number",description:"Number of results, 1-10. Default 5."},country:{type:"string",description:"Optional Brave country code, e.g. US."},search_lang:{type:"string",description:"Optional search language, e.g. en."}},required:["query"]}},{name:"web_fetch",title:"Fetch a webpage",description:"Fetch a public URL, block local/private network targets, strip HTML to readable text, and cap response size.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to fetch."},max_bytes:{type:"number",description:"Maximum response bytes, capped at 512000."}},required:["url"]}},{name:"web_extract",title:"Extract from webpage",description:"Extract readable content from a public URL with Firecrawl scrape when configured, otherwise fall back to direct web fetch.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to extract."},max_bytes:{type:"number",description:"Maximum response bytes for direct fetch fallback, capped at 512000."}},required:["url"]}},{name:"browser_harness_run",title:"Browser Harness",description:"Run a bounded browser-harness Python snippet against an activated Chrome CDP browser. This is local-code-execution risk: it starts disabled and requires owner approval for every main-agent or sub-agent execution.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{script:{type:"string",description:"Python code executed by browser-harness. Helpers are pre-imported; use new_tab(url), wait_for_load(), page_info(), capture_screenshot(), click_at_xy(), js(), or cdp()."},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 120000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["script"]}},{name:"skill_bridge_run",title:"Skill Bridge",description:"Run one allowlisted first-party gstack CLI skill (connect-chrome, browse, qa-only) to drive the real visible browser the operator can watch live. Crosses the Claude Code CLI trust boundary, so it is ALWAYS approval-gated for every run (even in trust-mode auto) and disabled by default. Pass the skill slug and a plain-language instruction; the bridge invokes only that skill, bounded by the .claude deny list.",category:"browser",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:300,max:10},input_schema:{type:"object",properties:{skill:{type:"string",description:"Skill slug to invoke. One of: connect-chrome, browse, qa-only.",enum:["connect-chrome","browse","qa-only"]},instruction:{type:"string",description:'Plain-language instruction for the skill (e.g. "open Google News and search US Iran war, read the top 3 headlines"). Max 4000 chars.'},timeout_ms:{type:"number",description:"Timeout in milliseconds, capped at 600000. Default 180000."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["skill","instruction"]}},{name:"browser_open",title:"Browser Open (Playwright)",description:"Open a URL in a real headless Chromium and return the final URL, page title, and visible text. Use this (not browser_navigate) for JavaScript-rendered pages, SPAs, or anything that needs a real browser. The page persists across calls so you can browser_act / browser_extract on it next.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"Public http(s) URL to open."},wait_for:{type:"string",description:"Optional CSS selector to wait for after load."},timeout_ms:{type:"number",description:"Navigation timeout in ms (default 30000, max 120000)."}},required:["url"]}},{name:"browser_act",title:"Browser Act (Playwright)",description:"Interact with the currently open page: click, fill, type, select, press a key, scroll, or wait. State-changing — gated for approval in approval-required trust mode. Locate elements with a CSS selector or a Playwright text= selector. Does NOT expand the agent's permissions; it only drives the page already loaded by browser_open.",category:"browser",risk_level:"high",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{action:{type:"string",enum:["click","fill","type","select","press","scroll","wait"],description:"Interaction to perform."},selector:{type:"string",description:"CSS selector or Playwright text= selector for the target element. Required for click/fill/type/select/press."},text:{type:"string",description:"Text to fill/type (for fill/type), or option value (for select)."},value:{type:"string",description:"Option value for select (alternative to text)."},key:{type:"string",description:"Key to press for the press action (default Enter)."},timeout_ms:{type:"number",description:"Action timeout in ms (default 30000, max 120000)."}},required:["action"]}},{name:"browser_extract",title:"Browser Extract (Playwright)",description:"Read content from the currently open page: visible text (default), raw HTML, or JSON-LD blocks. Optionally scoped to a CSS selector. Use after browser_open / browser_act to pull the rendered result.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{mode:{type:"string",enum:["text","html","json-ld"],default:"text",description:"What to extract."},selector:{type:"string",description:"Optional CSS selector to scope extraction."}}}},{name:"browser_screenshot",title:"Browser Screenshot (Playwright)",description:"Capture a PNG screenshot of the currently open page (or a selector / full page). Saved to disk under data/browser-screenshots; returns the file path.",category:"browser",risk_level:"medium",required_env:[],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:20},input_schema:{type:"object",properties:{selector:{type:"string",description:"Optional CSS selector to screenshot just one element."},full_page:{type:"boolean",description:"Capture the full scrollable page (default false)."}}}},{name:"browser_navigate",title:"Browser Navigate",description:"Fetch a URL with Chrome 124 headers, cookie jar, redirect following, and configurable extraction (text, markdown, json-ld, metadata, raw). Falls back gracefully on JS-only pages.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string",description:"HTTP/HTTPS URL"},extract:{type:"string",enum:["text","markdown","json-ld","metadata","raw"],default:"text"},selector:{type:"string",description:"Optional CSS-like selector: tag, #id, or .class"},wait_for:{type:"string",description:"Optional substring expected in response; returns hint if missing"},max_chars:{type:"integer",default:12e3,maximum:5e4}},required:["url"]}},{name:"browser_extract_structured",title:"Browser Extract Structured",description:"Fetch a URL and extract both JSON-LD structured data and page metadata (title, og:*, meta tags) in one call.",category:"web",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_ms:6e4,max:30},input_schema:{type:"object",properties:{url:{type:"string"}},required:["url"]}},{name:"supabase_list_projects",title:"List Supabase projects",description:"List Supabase projects available to the configured personal access token.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_ACCESS_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{}}},{name:"supabase_rest_select",title:"Read database rows",description:"Read rows from a Supabase table using the REST API with optional filters and limit.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{table:{type:"string",description:"Table name."},select:{type:"string",description:"PostgREST select expression. Default *."},filters:{type:"object",description:"Column filters. Values may be raw PostgREST operators or plain values for eq."},limit:{type:"number",description:"Maximum rows, 1-100. Default 25."}},required:["table"]}},{name:"supabase_rest_insert",title:"Add database rows",description:"Insert one or more rows into a Supabase table using the REST API. Returns the inserted rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name (schema-qualified allowed, e.g. auth.users)."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to insert."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_upsert",title:"Add or update rows",description:"Upsert one or more rows into a Supabase table. Merges on conflict. Returns affected rows.",category:"supabase",risk_level:"medium",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},rows:{type:"array",items:{type:"object"},description:"Array of row objects to upsert."},on_conflict:{type:"string",description:"Comma-separated column(s) to resolve conflicts on."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","rows"]}},{name:"supabase_rest_update",title:"Update database rows",description:"Update rows in a Supabase table matching the given filters. Filters are required — table-wide updates are blocked.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},patch:{type:"object",description:"Column values to set on matching rows."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","patch","filters"]}},{name:"supabase_rest_delete",title:"Delete database rows",description:"Delete rows from a Supabase table matching the given filters. Filters are required — bulk table truncation is blocked. Always requires approval regardless of trust mode.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"table",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{table:{type:"string",description:"Target table name."},filters:{type:"object",description:"Row filters. At least one filter is required."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["table","filters"]}},{name:"supabase_rpc",title:"Call database function",description:"Call a Postgres function via the Supabase REST RPC endpoint.",category:"supabase",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"function_name",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{function_name:{type:"string",description:"Postgres function name to call."},params:{type:"object",description:"Parameters passed as the request body."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["function_name"]}},{name:"supabase_sql",title:"Run SQL query",description:"Execute raw SQL via the madarx_exec_sql() Postgres function. Uses the service-role key and BYPASSES Row-Level Security. Always requires approval regardless of trust mode. Requires creating the madarx_exec_sql() function in your project.",category:"supabase",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["SUPABASE_URL",["SUPABASE_SERVICE_ROLE_KEY","SUPABASE_ANON_KEY"]],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{query:{type:"string",description:"SQL query to execute via madarx_exec_sql()."},params:{type:"object",description:"Optional named parameters for the query."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["query"]}},{name:"vercel_list_projects",title:"List Vercel projects",description:"List Vercel projects visible to the configured token.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},limit:{type:"number",description:"Maximum projects."}}}},{name:"vercel_list_deployments",title:"List Vercel deployments",description:"List Vercel deployments, optionally scoped by project.",category:"vercel",risk_level:"medium",required_env:["VERCEL_TOKEN"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{team_id:{type:"string",description:"Optional Vercel team id."},project_id:{type:"string",description:"Optional Vercel project id."},project_name:{type:"string",description:"Optional Vercel project name."},limit:{type:"number",description:"Maximum deployments."}}}},{name:"vercel_create_deployment",title:"Deploy to Vercel",description:"Stage a Vercel deployment request for owner approval. This does not deploy until approved.",category:"vercel",risk_level:"high",required_env:["VERCEL_TOKEN"],enabled_default:!1,approval_required:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{summary:{type:"string",description:"Deployment purpose and requested target."}}}},{name:"email_send",title:"Send email",description:"Send a transactional email via Resend. Approval is required.",category:"email",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"recipient_domain",allowlist_default_allow:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{from:{type:"string",description:"Sender address. Defaults to RESEND_FROM_EMAIL secret/env."},to:{type:"string",description:'Single recipient email address, e.g. "user@example.com".'},subject:{type:"string",description:"Email subject line."},text:{type:"string",description:"Plain-text email body. Either text or html is required."},html:{type:"string",description:"HTML email body. Either text or html is required."},reply_to:{type:"string",description:"Reply-to address."},recipient_domain:{type:"string",description:'Domain portion of the "to" address, e.g. "example.com". Must match the domain in "to" exactly — used by the allowlist gate.'},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["to","subject"]}},{name:"email_status_lookup",title:"Check email delivery",description:"Look up the delivery status of a previously-sent email.",category:"email",risk_level:"low",required_env:["RESEND_API_KEY"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{email_id:{type:"string",description:"Resend email ID returned by email_send."}},required:["email_id"]}},{name:"gh_repo_read",title:"Read a GitHub repo",description:"Read metadata for a GitHub repository (name, visibility, default branch, stars, forks).",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format, e.g. acme/api."}},required:["repo_full_name"]}},{name:"gh_repo_list",title:"List GitHub repos",description:"List GitHub repositories the token can access. Without `org`, lists across all affiliations (owned + collaborator + organization_member). Pass `org` to list a specific organization's repos you were granted access to.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{org:{type:"string",description:"List repos for this organization/owner (GET /orgs/{org}/repos). Use this to reach org repos you were granted access to."},affiliation:{type:"string",description:"Comma-separated: owner, collaborator, organization_member. Default lists all three. Ignored when `org` is set."},visibility:{type:"string",description:"Filter by visibility: all, public, private. Ignored when `org` is set."},type:{type:"string",description:"Without org: all|owner|member (mutually exclusive with affiliation). With org: all|public|private|forks|sources|member."},sort:{type:"string",description:"Sort by: created, updated, pushed, full_name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."},page:{type:"number",description:"Page number for pagination. Default 1."}}}},{name:"gh_issue_list",title:"List issues",description:"List issues in a GitHub repository with optional state and label filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"Issue state: open, closed, all. Default open."},labels:{type:"string",description:"Comma-separated label names to filter by."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_issue_create",title:"Create an issue",description:"Create an issue in an allowlisted GitHub repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"Issue title."},body:{type:"string",description:"Issue body in Markdown."},labels:{type:"array",items:{type:"string"},description:"Labels to apply."},assignees:{type:"array",items:{type:"string"},description:"GitHub usernames to assign."}},required:["repo_full_name","title"]}},{name:"gh_issue_comment",title:"Comment on an issue",description:"Post a comment on a GitHub issue in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},issue_number:{type:"number",description:"Issue number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","issue_number","body"]}},{name:"gh_pr_list",title:"List pull requests",description:"List pull requests in a GitHub repository with optional filters.",category:"github",risk_level:"low",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},state:{type:"string",description:"PR state: open, closed, all. Default open."},head:{type:"string",description:"Filter by head branch (user:branch)."},base:{type:"string",description:"Filter by base branch name."},per_page:{type:"number",description:"Results per page, 1-100. Default 30."}},required:["repo_full_name"]}},{name:"gh_pr_create",title:"Open a pull request",description:"Open a pull request in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},title:{type:"string",description:"PR title."},head:{type:"string",description:"Head branch (source)."},base:{type:"string",description:"Base branch (target)."},body:{type:"string",description:"PR description in Markdown."},draft:{type:"boolean",description:"Open as a draft PR."}},required:["repo_full_name","title","head","base"]}},{name:"gh_pr_comment",title:"Comment on a pull request",description:"Post a comment on a GitHub pull request in an allowlisted repository.",category:"github",risk_level:"medium",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},body:{type:"string",description:"Comment body in Markdown."}},required:["repo_full_name","pr_number","body"]}},{name:"gh_pr_merge",title:"Merge a pull request",description:"Merge a pull request in an allowlisted GitHub repository. This action is irreversible once completed.",category:"github",risk_level:"irreversible_external",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},pr_number:{type:"number",description:"Pull request number."},commit_title:{type:"string",description:"Custom commit title for squash merge."},commit_message:{type:"string",description:"Custom commit message for squash merge."},merge_method:{type:"string",description:"Merge method: merge, squash, rebase. Default squash."}},required:["repo_full_name","pr_number"]}},{name:"gh_actions_dispatch",title:"Run a GitHub workflow",description:"Trigger a workflow dispatch event in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},workflow_id:{type:"string",description:"Workflow filename or ID (e.g. deploy.yml)."},ref:{type:"string",description:"Branch or tag to run the workflow on."},inputs:{type:"object",description:"Optional workflow dispatch inputs."}},required:["repo_full_name","workflow_id","ref"]}},{name:"gh_release_create",title:"Publish a release",description:"Create a release in an allowlisted GitHub repository.",category:"github",risk_level:"high",required_env:["GITHUB_TOKEN"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"repo_full_name",rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{repo_full_name:{type:"string",description:"Repository in owner/repo format."},tag_name:{type:"string",description:"Git tag for the release."},target_commitish:{type:"string",description:"Commit SHA or branch to tag."},name:{type:"string",description:"Release title."},body:{type:"string",description:"Release notes in Markdown."},draft:{type:"boolean",description:"Create as a draft release."},prerelease:{type:"boolean",description:"Mark as a pre-release."}},required:["repo_full_name","tag_name"]}},{name:"flight_search",title:"Search flights",description:"Search flight offers and return curated price + itinerary data. Uses Amadeus when AMADEUS_CLIENT_ID and AMADEUS_CLIENT_SECRET are configured, otherwise falls back to a free, key-less Google Flights backend lookup.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{origin:{type:"string",description:'Origin airport IATA code, e.g. "JFK".'},destination:{type:"string",description:'Destination airport IATA code, e.g. "LHR".'},departure_date:{type:"string",description:"Departure date YYYY-MM-DD."},return_date:{type:"string",description:"Optional return date YYYY-MM-DD for round-trip search."},adults:{type:"number",description:"Adult passengers 1-9. Default 1."},children:{type:"number",description:"Child passengers 0-8."},travel_class:{type:"string",description:"ECONOMY | PREMIUM_ECONOMY | BUSINESS | FIRST."},currency:{type:"string",description:"3-letter ISO currency code. Default USD."},non_stop:{type:"boolean",description:"Only return non-stop itineraries."},max_results:{type:"number",description:"Max offers 1-25. Default 5."}},required:["origin","destination","departure_date"]}},{name:"flight_status",title:"Check flight status",description:"Look up live or scheduled flight status via Aviationstack. Returns departure, arrival, delay, and live position.",category:"travel",risk_level:"low",required_env:["AVIATIONSTACK_API_KEY"],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{flight_iata:{type:"string",description:'Flight IATA code, e.g. "BA283".'},flight_icao:{type:"string",description:"Flight ICAO code."},airline_iata:{type:"string",description:'Filter by airline IATA, e.g. "BA".'},dep_iata:{type:"string",description:"Departure airport IATA."},arr_iata:{type:"string",description:"Arrival airport IATA."},flight_date:{type:"string",description:"Flight date YYYY-MM-DD."},limit:{type:"number",description:"Max results 1-100. Default 5."}}}},{name:"hotel_search",title:"Search hotels",description:"List hotels at a TripAdvisor location via Xotelo. No API key required. Returns hotel_keys you can pass to hotel_rates.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{location_key:{type:"string",description:'TripAdvisor geo location key, e.g. "g60763" for New York City.'},offset:{type:"number",description:"Pagination offset. Default 0."},limit:{type:"number",description:"Results 1-30. Default 10."},sort:{type:"string",description:"popularity | price | rating."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},hotel_class:{type:"string",description:'Filter by star class, e.g. "4,5".'}},required:["location_key"]}},{name:"hotel_rates",title:"Check hotel rates",description:"Get real-time hotel rates from Booking.com, Expedia, Hotels.com, Agoda, etc. via Xotelo. No API key required.",category:"travel",risk_level:"low",required_env:[],enabled_default:!0,allowlist_required:!1,allowlist_default_allow:!0,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{hotel_key:{type:"string",description:'TripAdvisor hotel key, e.g. "g60763-d224867". Obtain from hotel_search.'},chk_in:{type:"string",description:"Check-in date YYYY-MM-DD."},chk_out:{type:"string",description:"Check-out date YYYY-MM-DD (must be after chk_in)."},currency:{type:"string",description:"3-letter ISO currency. Default USD."},rooms:{type:"number",description:"Rooms 1-9. Default 1."},adults:{type:"number",description:"Adults 1-9. Default 2."}},required:["hotel_key","chk_in","chk_out"]}},{name:"gmail_messages_list",title:"List Gmail messages",description:"Read message metadata from the operator Gmail inbox.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{max_results:{type:"number"},q:{type:"string"}}}},{name:"gmail_message_read",title:"Read a Gmail message",description:"Read one Gmail message for summarization or drafting.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{message_id:{type:"string"}},required:["message_id"]}},{name:"gmail_thread_read",title:"Read a Gmail thread",description:"Read a Gmail thread for context.",category:"email",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{thread_id:{type:"string"}},required:["thread_id"]}},{name:"calendar_events_list",title:"List calendar events",description:"Read upcoming Google Calendar events.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{calendar_id:{type:"string"},time_min:{type:"string"},time_max:{type:"string"},max_results:{type:"number"}}}},{name:"calendar_event_read",title:"Read a calendar event",description:"Read one Google Calendar event.",category:"calendar",risk_level:"low",approval_mode:"auto",required_env:["GOOGLE_REFRESH_TOKEN"],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{event_id:{type:"string"},calendar_id:{type:"string"}},required:["event_id"]}},{name:"transcribe_audio",title:"Transcribe audio",description:"Transcribe a Disk audio file and save the transcript as a Disk artifact. Provider: openai (whisper, default), elevenlabs (Scribe), or local.",category:"local_machine",risk_level:"medium",approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string"},use_local:{type:"boolean"},provider:{type:"string",description:'Transcription provider: openai | elevenlabs | local. Defaults to TRANSCRIBE_DEFAULT_PROVIDER or "openai".'},language:{type:"string"}},required:["file_id"]}},{name:"voice_speak",title:"Speak text aloud",description:"Synthesize a short text reply to audio via OpenAI TTS (default) or ElevenLabs. Returns base64 audio; optionally saves to Disk.",category:"voice",risk_level:"low",approval_mode:"auto",required_env:[["OPENAI_API_KEY","ELEVENLABS_API_KEY"]],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{text:{type:"string",description:"Text to synthesize. Up to 4000 chars."},provider:{type:"string",description:"Provider: openai (default) or elevenlabs."},voice:{type:"string",description:"Provider-specific voice id. OpenAI: alloy|echo|fable|onyx|nova|shimmer. ElevenLabs: voice id."},model:{type:"string"},format:{type:"string",description:"mp3 (default) or wav."},save_to_disk:{type:"boolean"},project_id:{type:"string"}},required:["text"]}},{name:"printing_press_install",title:"Install Printing Press sub-package",description:"Install the printing-press sub-package required to generate scoped CLIs. Always approval-gated.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{},required:[]}},{name:"printing_press_generate",title:"Generate a scoped CLI",description:"Generate a new scoped CLI from a starter pack, GitHub repo, or local source.",category:"cli_generator",risk_level:"irreversible_external",approval_required:!0,approval_mode:"approval_required",enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Lowercase kebab-case CLI slug."},source:{type:"string",description:"starter-pack | github | local | spec"},source_url:{type:"string",description:"Required when source is not starter-pack."}},required:["slug"]}},{name:"printing_press_run",title:"Run an installed CLI",description:"Execute a previously-installed printing-press CLI with bounded args.",category:"cli_generator",risk_level:"high",approval_mode:"approval_required",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:30},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug to run."},args:{type:"array",items:{type:"string"},description:"Bounded arg list (no shell metacharacters)."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal `slug`."}},required:["slug"]}},{name:"create_workflow_definition",title:"Create workflow definition",description:'Create a new process workflow from a JSON spec. The spec is validated against lib/process/spec-validator.js. The new definition is published immediately at status="published" — cases can be started from it. Risk-gated by approval.',category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{spec:{type:"object",description:"Full workflow spec JSON. Must include schema_version, slug, name, version, stages[]. First stage must be intake_form. See ai-docs/process-engine.md and the validator at lib/process/spec-validator.js for the full schema."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["spec"]}},{name:"update_workflow_definition",title:"Update workflow definition",description:"Update an existing process workflow at a given slug. Spec is re-validated. version must be bumped if the stage list changed structurally. In-flight cases keep their old definition_id; new cases use the new version.",category:"workflow",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{slug:{type:"string",description:"Slug of the existing workflow to update."},spec:{type:"object",description:"Full workflow spec JSON. slug is forced to match the path slug."},approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:["slug","spec"]}},{name:"self_update",title:"Update madarX OS",description:"Update the madarX OS install to the latest published version (npm i -g madarx@latest). Irreversible-external: an agent calling this ALWAYS requires owner approval — it can never silently replace the running binary. A restart is required after a successful update.",category:"system",risk_level:"irreversible_external",required_env:[],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:86400,max:4},input_schema:{type:"object",properties:{approval_id:{type:"string",description:"Approval request ID for one-shot execution."}},required:[]}},{name:"printing_press_query",title:"Query an installed CLI SQLite mirror",description:"Run a single read-only SELECT against a CLI local SQLite mirror, if it exposes one.",category:"cli_generator",risk_level:"low",approval_mode:"auto",enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"printing_press_cli",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{slug:{type:"string",description:"CLI slug whose SQLite mirror to query."},sql:{type:"string",description:"Single SELECT statement. Multi-statement SQL is refused."},printing_press_cli:{type:"string",description:"Slug used by the allowlist gate. Must equal the slug."}},required:["slug","sql"]}},{name:"mines_project_create",title:"Create mine project",description:"Create a new mine project workspace and register it in the Mines module.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{name:{type:"string"},slug:{type:"string",description:'Lowercase kebab-case, e.g. "batamote"'},asset_stage:{type:"string",enum:["exploration","development","production","care_and_maintenance","unknown"]},commodity:{type:"string"},deposit_type:{type:"string"},approval_id:{type:"string"}},required:["name","slug"]}},{name:"mines_project_read",title:"Read mine project summary",description:"Read a mine project record including data completeness and document counts by category.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"}},required:["project_id"]}},{name:"mines_catalog_import",title:"Import portfolio catalog",description:"Load a master project catalog XLSX into Portfolio and PortfolioEntry records.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{file_id:{type:"string",description:"Disk file ID of the XLSX catalog."},portfolio_name:{type:"string"},sheet_name:{type:"string",description:"Optional sheet override."},approval_id:{type:"string"}},required:["file_id","portfolio_name"]}},{name:"mines_data_import",title:"Bulk import mine data directory",description:"Walk a directory tree, auto-classify files by folder taxonomy, and enqueue each file for ingestion. Incremental and resumable.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},directory_path:{type:"string"},resume:{type:"boolean",description:"Skip files already past queued status."},approval_id:{type:"string"}},required:["project_id","directory_path"]}},{name:"mines_document_extract",title:"Extract and embed document",description:"Parse a source document (PDF/DOCX/PPTX), OCR if scanned, chunk text, and embed chunks. Spanish-first.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{source_document_id:{type:"string"},force_ocr:{type:"boolean"},approval_id:{type:"string"}},required:["source_document_id"]}},{name:"mines_spatial_index",title:"Index spatial assets",description:"Read GIS/CAD file metadata (kind, CRS, bounding box) without rendering geometry.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Index a single already-catalogued file."}},required:["project_id"]}},{name:"mines_extract_facts",title:"Extract structured facts from documents (LLM)",description:"Read a project document's indexed chunks and extract structured, provenance-cited geology/economics facts into mines_extracted_facts. Every fact is validated to cite a real chunk + verbatim quote; uncited facts are rejected. Never declares a mineral resource the source did not. Feeds mines_report_generate and mines_valuation_run.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:20},input_schema:{type:"object",properties:{project_id:{type:"string"},source_document_id:{type:"string",description:"Document to extract from. Defaults to the project's most-chunked document (its technical report)."},max_chunks:{type:"number",description:"Max chunks fed to the model. Default 48."},char_budget:{type:"number",description:"Max source characters per call. Default 32000."},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_assumption_validate",title:"Validate valuation assumptions",description:"Check completeness of data required for T1 or T2 valuation and return a gap list.",category:"mines",risk_level:"low",approval_mode:"auto",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{project_id:{type:"string"},target_tier:{type:"string",enum:["t1_in_situ","t2_dcf","auto"]}},required:["project_id"]}},{name:"mines_valuation_run",title:"Run tiered mine valuation",description:"Compute base/downside/upside valuation. Selects T1 (in-situ) or T2 (DCF) based on asset stage and data completeness. States tier and rationale.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{project_id:{type:"string"},commodity_prices_json:{type:"string",description:'JSON price override e.g. {"Au":2300,"Cu":4.2}. Defaults to latest mines_market_snapshots.'},in_situ_factor_override:{type:"number"},force_tier:{type:"string",enum:["t1_in_situ","t2_dcf"]},approval_id:{type:"string"}},required:["project_id"]}},{name:"mines_sensitivity_run",title:"Run valuation sensitivity analysis",description:"Compute sensitivity of valuation to key drivers (grade, price, recovery, in_situ_factor, discount_rate).",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:10},input_schema:{type:"object",properties:{scenario_id:{type:"string"},drivers:{type:"array",items:{type:"string"}},steps:{type:"number",description:"Steps per driver. Default 5."},approval_id:{type:"string"}},required:["scenario_id"]}},{name:"mines_market_snapshot",title:"Fetch commodity market data",description:"Retrieve current commodity prices from an approved market data provider.",category:"mines",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:["MINES_MARKET_API_KEY"],enabled_default:!1,allowlist_required:!0,allowlist_scope_key:"market_provider_host",allowlist_default_allow:!1,rate_limit:{window_seconds:60,max:60},input_schema:{type:"object",properties:{commodities:{type:"array",items:{type:"string"}},market_provider_host:{type:"string",description:'e.g. "metals-api.com". Must be in allowlist.'},approval_id:{type:"string"}},required:["market_provider_host"]}},{name:"mines_report_generate",title:"Generate mine project report",description:"Generate a cited, structured report artifact. External email send always requires separate irreversible_external approval.",category:"mines",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,rate_limit:{window_seconds:3600,max:5},input_schema:{type:"object",properties:{project_id:{type:"string"},report_kind:{type:"string",enum:["interpretation_memo","due_diligence_memo","data_quality_report","investor_presentation","pfs_readiness_report","valuation_report","due_diligence_questions","project_package","portfolio_screen"]},scenario_id:{type:"string",description:"Required for valuation_report."},space_id:{type:"string",description:"Optional dashboard space to publish into. Defaults to the project’s configured default space; the artifact is pinned there so it appears as a window on the dashboard board."},language:{type:"string",enum:["en","es"],description:'Default "en".'},narrative:{type:"object",description:"LLM-authored prose slots (all optional, each falls back to data-driven copy). For investor_presentation: hero_headline, hero_subhead (strings); opportunity (array of paragraph strings); findings_lead, upside_lead, risk_lead, the_ask (strings). For pfs_readiness_report: verdict, gap_intro, work_program, recommendation (strings). Numbers/figures are never taken from here — they always come from cited DB rows.",properties:{hero_headline:{type:"string"},hero_subhead:{type:"string"},opportunity:{type:"array",items:{type:"string"}},findings_lead:{type:"string"},upside_lead:{type:"string"},risk_lead:{type:"string"},the_ask:{type:"string"},verdict:{type:"string"},gap_intro:{type:"string"},work_program:{type:"string"},recommendation:{type:"string"}}},send_email:{type:"boolean"},recipient_email:{type:"string"},approval_id:{type:"string"}},required:["project_id","report_kind"]}},{name:"create_skill",title:"Author skill",description:"Author a declarative skill (SKILL.md + marketplace row) any agent can invoke. Instructions only — no code executes. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:"{ slug, title, description?, markdown, invocation?, trigger_examples?[], category? }"},approval_id:{type:"string"}},required:["spec"]}},{name:"update_skill",title:"Update skill",description:"Update an existing authored skill by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_composite_tool",title:"Author composite tool",description:"Author a composite tool: a declarative recipe chaining EXISTING primitive tools + LLM steps. Inherits the MAX risk of its steps; every gate re-fires per sub-step. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{spec:{type:"object",description:'{ slug, title, description?, input_schema?, steps:[{kind:"tool_call"|"llm_synthesis"|"artifact_write", id, ...}] }'},approval_id:{type:"string"}},required:["spec"]}},{name:"update_composite_tool",title:"Update composite tool",description:"Update an existing composite tool by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},spec:{type:"object"},approval_id:{type:"string"}},required:["slug","spec"]}},{name:"create_connector",title:"Author API connector",description:"Author a declarative REST API connector (Option D). Each endpoint becomes a callable <slug>.<endpoint> tool backed by the generic http_api_call executor. Manifest is inert data: https-only, secret-by-reference auth, host allowlist, per-endpoint risk ceiling. Owner/admin authority required. The owner supplies the API key once.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{manifest:{type:"object",description:"{ slug, base_url(https), allowed_hosts[], auth:{type,secret_ref|username_ref/password_ref,header?,prefix?,query_param?}, default_headers?, endpoints:{ name:{method,path,risk?,input_schema?} } }"},approval_id:{type:"string"}},required:["manifest"]}},{name:"update_connector",title:"Update API connector",description:"Update an existing API connector by slug. Owner/admin authority required.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string"},manifest:{type:"object"},approval_id:{type:"string"}},required:["slug","manifest"]}},{name:"propose_tool",title:"Propose new tool (code-gen)",description:"Option B escape hatch for non-REST integrations: generate an adapter scaffold + registry snippet + tests into a staging dir. The proposal is INERT — it is never callable until a human reviews, merges, and restarts. Writes files only; executes nothing.",category:"authoring",risk_level:"medium",approval_required:!0,approval_mode:"approval_required",required_env:[],enabled_default:!0,allowlist_required:!1,input_schema:{type:"object",properties:{slug:{type:"string",description:"snake_case tool name"},summary:{type:"string"},risk:{type:"string",enum:["low","medium","high","irreversible_external"]},approval_id:{type:"string"}},required:["slug"]}},{name:"higgsfield_generate_image",title:"Generate image (Higgsfield)",description:"Generate an image from a text prompt via the Higgsfield AI Soul model. Spends Higgsfield credits — gated by default. Returns the resulting image URL.",category:"media",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["HIGGSFIELD_KEY_ID","HIGGSFIELD_KEY_SECRET"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{prompt:{type:"string",description:"Text description of the image to generate."},width_and_height:{type:"string",description:'Output size, e.g. "1536x1536". Defaults to "1536x1536".'},quality:{type:"string",description:'Render quality, e.g. "720p" or "1080p". Defaults to "720p".'},batch_size:{type:"number",description:"Number of images to generate (default 1)."},style_id:{type:"string",description:"Optional Higgsfield style/identity reference id (e.g. a trained Soul ID)."},style_strength:{type:"number",description:"Optional style strength 0–1."},seed:{type:"number",description:"Optional seed for reproducibility."},model:{type:"string",description:"Optional model override."},max_polls:{type:"number",description:"Optional cap on status polls before returning the job id (default ~48)."},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["prompt"]}},{name:"higgsfield_product_photoshoot",title:"Product photoshoot (Higgsfield)",description:"Turn a source product image into brand-quality product imagery (studio, lifestyle, hero banner, etc.) via the Higgsfield Soul model. Spends Higgsfield credits — gated by default. Returns the resulting image URL.",category:"media",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["HIGGSFIELD_KEY_ID","HIGGSFIELD_KEY_SECRET"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:60},input_schema:{type:"object",properties:{image_url:{type:"string",description:"Public http(s) URL of the source product image to feature."},prompt:{type:"string",description:'Scene / style direction, e.g. "on a marble podium, soft studio lighting, minimal background".'},width_and_height:{type:"string",description:'Output size, e.g. "1536x1536". Defaults to "1536x1536".'},quality:{type:"string",description:'Render quality, e.g. "720p" or "1080p". Defaults to "720p".'},batch_size:{type:"number",description:"Number of variations to generate (default 1)."},style_id:{type:"string",description:"Optional Higgsfield style/identity reference id."},seed:{type:"number",description:"Optional seed for reproducibility."},max_polls:{type:"number",description:"Optional cap on status polls before returning the job id (default ~48)."},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["image_url","prompt"]}},{name:"higgsfield_generate_video",title:"Generate video (Higgsfield)",description:"Animate a source image into a video via the Higgsfield AI DoP model. Spends Higgsfield credits — gated by default. Returns the resulting video URL.",category:"media",risk_level:"high",approval_required:!0,approval_mode:"approval_required",required_env:["HIGGSFIELD_KEY_ID","HIGGSFIELD_KEY_SECRET"],enabled_default:!1,allowlist_required:!1,rate_limit:{window_seconds:3600,max:30},input_schema:{type:"object",properties:{image_url:{type:"string",description:"Public http(s) URL of the source image to animate."},prompt:{type:"string",description:"Optional motion/scene prompt."},model:{type:"string",description:'Optional DoP model variant. Defaults to "dop-turbo".'},motions:{description:"Optional Higgsfield motion descriptors."},seed:{type:"number",description:"Optional seed for reproducibility."},max_polls:{type:"number",description:"Optional cap on status polls before returning the job id (default ~90)."},approval_id:{type:"string",description:"Approval request ID to consume for one-shot execution."}},required:["image_url"]}}],ay={web_search:o.tE,web_fetch:o.dV,web_extract:o.IY,email_send:p.x,email_status_lookup:p.f,higgsfield_generate_image:q.xg,higgsfield_generate_video:q.tR,higgsfield_product_photoshoot:q.lu,supabase_list_projects:r.NO,supabase_rest_select:r.TP,supabase_rest_insert:r.c3,supabase_rest_upsert:r.mD,supabase_rest_update:r.sX,supabase_rest_delete:r.oc,supabase_rpc:r.wm,supabase_sql:r.l8,vercel_list_projects:s.Q$,vercel_list_deployments:s.I6,vercel_create_deployment:s.vV,gh_repo_read:t.Sj,gh_repo_list:t.AU,gh_issue_list:t.jj,gh_issue_create:t.vj,gh_issue_comment:t.iP,gh_pr_list:t.gn,gh_pr_create:t.Ud,gh_pr_comment:t.J,gh_pr_merge:t.wt,gh_actions_dispatch:t.zI,gh_release_create:t.Bb,file_read:u.dd,directory_list:u.sv,file_search:u.X,file_write:u.sq,file_patch:u.vO,terminal_run:v.y,process_start:w.gy,process_poll:w.p3,process_kill:w.MU,flight_search:x.R5,flight_status:x.zP,hotel_search:x.FE,hotel_rates:x.Y$,gmail_messages_list:y.r_,gmail_message_read:y.cS,gmail_thread_read:y.vg,calendar_events_list:z.u,calendar_event_read:z.r,transcribe_audio:A.b,browser_harness_run:B.K,skill_bridge_run:C.eE,browser_open:E.D6,browser_act:E.Hz,browser_extract:E.aU,browser_screenshot:E.Jz,browser_navigate:D.M,browser_extract_structured:D.B,voice_speak:F.o,printing_press_install:G.gE,printing_press_generate:G.ID,printing_press_run:G.Cw,printing_press_query:G.VC,create_workflow_definition:H.h,update_workflow_definition:H.m,self_update:I.m,create_skill:J.S,update_skill:J.f,create_composite_tool:K.y$,update_composite_tool:K.le,create_connector:L.U$,update_connector:L.zc,propose_tool:M.B,http_api_call:N.p,composite_tool_run:O.n,mines_project_create:R.m,mines_project_read:R.I,mines_catalog_import:S.b,mines_data_import:T.I,mines_document_extract:U.f,mines_extract_facts:$.$,mines_spatial_index:V.d,mines_assumption_validate:W.w,mines_valuation_run:X.R,mines_sensitivity_run:X.h,mines_market_snapshot:Y.V,mines_report_generate:Z.Q},az={file_write:u.Z6,file_patch:u.mr,terminal_run:v.x,process_start:w.H7,process_kill:w.L7,browser_harness_run:B.r,skill_bridge_run:C.zE},aA=new Set;function ab(a){try{if((0,j.getSecret)(a))return!0}catch{}return!!process.env[a]&&(aA.has(a)||(aA.add(a),console.warn(`[secrets] ${a} is being read from process.env as a fallback. Migrate it to the vault with: node scripts/migrate-env-to-secrets.mjs`)),!0)}function ac(a=[]){return a.filter(a=>Array.isArray(a)?!a.some(a=>ab(a)):!ab(a)).map(a=>Array.isArray(a)?a.join(" or "):a)}let aB=[{marker:"tool.repair.flight_search_enable_v1",tool_name:"flight_search",summary:"One-shot: enable flight_search on installs where the Amadeus→Google fallback shipped after the row was created."}];function ad(){let a=(0,f.getDb)(),b=(0,f.nowIso)();for(let c of ax){let d=a.prepare("SELECT name, enabled, required_env FROM tool_installations WHERE name=?").get(c.name),e={name:c.name,title:c.title,description:c.description,category:c.category,enabled:+!!c.enabled_default,risk_level:c.risk_level,required_env:JSON.stringify(c.required_env||[])};if(!d){a.prepare(`
|
|
1026
1038
|
INSERT INTO tool_installations
|
|
1027
1039
|
(name, title, description, category, enabled, risk_level, required_env, created_at, updated_at)
|
|
1028
1040
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1029
|
-
`).run(e.name,e.title,e.description,e.category,e.enabled,e.risk_level,e.required_env,b,b);continue}let g=
|
|
1041
|
+
`).run(e.name,e.title,e.description,e.category,e.enabled,e.risk_level,e.required_env,b,b);continue}let g=ae(d.required_env,[]),h=c.required_env||[],i=d.enabled,j=!1;g.length>0&&0===h.length&&0===Number(d.enabled)&&!0===c.enabled_default&&(i=1,j=!0),a.prepare(`
|
|
1030
1042
|
UPDATE tool_installations
|
|
1031
1043
|
SET title=?, description=?, category=?, risk_level=?, required_env=?, enabled=?, updated_at=?
|
|
1032
1044
|
WHERE name=?
|
|
1033
1045
|
`).run(e.title,e.description,e.category,e.risk_level,e.required_env,i,b,e.name),j&&a.prepare(`
|
|
1034
1046
|
INSERT INTO audit_logs (id, at, type, summary, status, meta)
|
|
1035
1047
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
1036
|
-
`).run((0,f.newId)("audit"),b,"tool.auto_enabled_after_creds_removed",`Auto-enabled ${c.name} after credential requirements were removed.`,"success",JSON.stringify({tool_name:c.name,previous_required_env:g,new_required_env:h}))}let c=(0,f.getDb)(),d=(0,f.nowIso)();for(let a of
|
|
1048
|
+
`).run((0,f.newId)("audit"),b,"tool.auto_enabled_after_creds_removed",`Auto-enabled ${c.name} after credential requirements were removed.`,"success",JSON.stringify({tool_name:c.name,previous_required_env:g,new_required_env:h}))}let c=(0,f.getDb)(),d=(0,f.nowIso)();for(let a of aB){if(c.prepare("SELECT id FROM audit_logs WHERE type=? LIMIT 1").get(a.marker))continue;let b=ax.find(b=>b.name===a.tool_name);if(!b||0!==(b.required_env||[]).length||!0!==b.enabled_default)continue;let e=c.prepare("SELECT name, enabled FROM tool_installations WHERE name=?").get(a.tool_name);if(e){if(0!==Number(e.enabled)){c.prepare(`
|
|
1037
1049
|
INSERT INTO audit_logs (id, at, type, summary, status, meta)
|
|
1038
1050
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
1039
1051
|
`).run((0,f.newId)("audit"),d,a.marker,`${a.summary} (no-op: already enabled)`,"success",JSON.stringify({tool_name:a.tool_name,action:"noop"}));continue}c.prepare("UPDATE tool_installations SET enabled=1, updated_at=? WHERE name=?").run(d,a.tool_name),c.prepare(`
|
|
1040
1052
|
INSERT INTO audit_logs (id, at, type, summary, status, meta)
|
|
1041
1053
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
1042
|
-
`).run((0,f.newId)("audit"),d,a.marker,a.summary,"success",JSON.stringify({tool_name:a.tool_name,action:"enabled"}))}}}function
|
|
1054
|
+
`).run((0,f.newId)("audit"),d,a.marker,a.summary,"success",JSON.stringify({tool_name:a.tool_name,action:"enabled"}))}}}function ae(a,b){try{let c=JSON.parse(a||"[]");return Array.isArray(c)?c:b}catch{return b}}function af(){let a=new Set,b=new Map;for(let c of ax)a.add(c.name),b.set(c.name,c.risk_level||"medium");return{names:a,riskByName:b}}function ag(){let a=[],b=[];try{a=(0,P.n_)()}catch{a=[]}try{b=(0,Q.R$)()}catch{b=[]}return[...a,...b].map(a=>({kind:"tool",connector:null,...a}))}function ah(){return ad(),[...(0,f.getDb)().prepare("SELECT * FROM tool_installations ORDER BY category ASC, name ASC").all().map(a=>{let b=ax.find(b=>b.name===a.name),c=ae(a.required_env,b?.required_env||[]),d=ac(c);return{kind:"tool",name:a.name,title:a.title,description:a.description,category:a.category,enabled:!!a.enabled,available:0===d.length,missing_env:d,required_env:function(a=[]){return a.flatMap(a=>Array.isArray(a)?a:[a])}(c),risk_level:a.risk_level,approval_required:!!b?.approval_required,approval_mode:b?.approval_mode||(b?.approval_required?"approval_required":"auto"),allowlist_required:!!b?.allowlist_required,allowlist_scope_key:b?.allowlist_scope_key??null,allowlist_default_allow:!!b?.allowlist_default_allow,connector:ai(a.category),input_schema:b?.input_schema||{type:"object",properties:{}}}}),...ag()]}function ai(a){var b=a;let c=ax.filter(a=>a.category===b);if(!c.length)return null;let d=[...new Set(c.flatMap(a=>ac(a.required_env||[])))];return{type:b,status:d.length?"missing_env":"ready",missing_env:d}}function aj(a=[]){return{core:a.map(a=>({...a,enabled:!0,available:!0,category:"core",risk_level:"local"})),marketplace:ah(),connectors:["local_machine","web","browser","supabase","vercel","github","email","travel","voice"].map(ai).filter(Boolean)}}function ak(a=[]){let b=ah().filter(a=>a.enabled&&a.available).map(a=>({name:a.name,description:a.approval_required?`${a.description} Approval is required before external writes are executed.`:a.description,input_schema:a.input_schema}));return[...a,...b]}function al({agent_id:a,tool_name:b,status:c,summary:d,meta:e={}}){a&&(0,f.getDb)().prepare(`
|
|
1043
1055
|
INSERT INTO audit_logs (id, at, type, summary, status, meta)
|
|
1044
1056
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
1045
|
-
`).run((0,f.newId)("audit"),(0,f.nowIso)(),`agent.tool.${c}`,d,c,JSON.stringify({agent_id:a,tool_name:b,...e}))}function
|
|
1057
|
+
`).run((0,f.newId)("audit"),(0,f.nowIso)(),`agent.tool.${c}`,d,c,JSON.stringify({agent_id:a,tool_name:b,...e}))}function am(a,b=[]){if(!a)return ak(b);let c=(0,f.getDb)().prepare("SELECT tool_name, mode FROM agent_tool_permissions WHERE agent_id = ?").all(a),d=new Map(c.filter(a=>"disabled"!==a.mode).map(a=>[a.tool_name,a.mode])),e=ah().filter(a=>a.enabled&&a.available&&d.has(a.name)).map(a=>({name:a.name,description:"approval_required"===d.get(a.name)?`${a.description} Agent permission requires owner approval before execution.`:a.description,input_schema:a.input_schema}));return[...b,...e]}function an(a,b){ad();let c=(0,f.getDb)();if(c.prepare("SELECT name FROM tool_installations WHERE name=?").get(a))return c.prepare("UPDATE tool_installations SET enabled=?, updated_at=? WHERE name=?").run(+!!b,(0,f.nowIso)(),a),ah().find(b=>b.name===a);let d=ag().find(b=>b.name===a);if(!d)throw Error(`Unknown tool: ${a}`);return b||d.source?.kind!=="composite"?b||d.source?.kind!=="connector"||(0,Q.w$)(d.source.connector_slug):(0,P.u5)(d.source.composite_slug),ag().find(b=>b.name===a)||{name:a,enabled:!!b,available:!0}}function ao(a,b){if("irreversible_external"===a.risk_level)return!0;if("terminal_run"===a.name||"process_start"===a.name){let a=String(b?.command||"");if(!a)return!1;let c=Array.isArray(b?.args)?b.args.map(String):[];return"irreversible_external"===(0,i.IB)(a,c).risk}return!1}function ap(a={}){let b={...a};return"string"==typeof b.content&&b.content.length>500&&(b.content=`[${b.content.length} chars]`),"string"==typeof b.new_string&&b.new_string.length>500&&(b.new_string=`[${b.new_string.length} chars]`),"approval_id"in b&&delete b.approval_id,b}let aC={create_workflow_definition:a=>({slug:a?.spec?.slug||null}),update_workflow_definition:a=>({slug:a?.slug||a?.spec?.slug||null,version:a?.spec?.version||null})};function aq(a,b={}){let c=aC[a],d=c?c(b):(()=>{let a={...b};return delete a.approval_id,a})();return(0,e.createHash)("sha256").update(`${a}|${function a(b){if(null===b||"object"!=typeof b)return JSON.stringify(b);if(Array.isArray(b))return`[${b.map(b=>a(b)).join(",")}]`;let c=Object.keys(b).sort();return`{${c.map(c=>`${JSON.stringify(c)}:${a(b[c])}`).join(",")}}`}(d)}`).digest("hex")}function ar({tool_name:a,status:b,summary:c,meta:d={}}){(0,f.getDb)().prepare(`
|
|
1046
1058
|
INSERT INTO audit_logs (id, at, type, summary, status, meta)
|
|
1047
1059
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
1048
|
-
`).run((0,f.newId)("audit"),(0,f.nowIso)(),`main_agent.tool.${b}`,c,b,JSON.stringify({tool_name:a,...d}))}async function ar(a,b={},c={}){let d=ag().find(b=>b.name===a);if(!d)throw Error(`Unknown tool: ${a}`);if(!d.enabled)throw Error(`Tool disabled: ${a}`);if(!d.available)throw Error(`Tool unavailable; missing environment: ${d.missing_env.join(", ")}`);let e=ay[a];e&&e(b);{let b=c?.acting_on_behalf_of_user_id||c?.user_id||null,d=new Set(["system","whatsapp-service"]);if(b&&!d.has(b)){let d="personal-org";try{let a=(0,f.getDb)(),b=c.agent_id?a.prepare("SELECT project_id FROM agents WHERE id = ?").get(c.agent_id):null;if(b?.project_id){let c=a.prepare("SELECT org_id FROM projects WHERE id = ?").get(b.project_id);c?.org_id&&(d=c.org_id)}}catch{}try{await (0,m.aS)({user_id:b,org_id:d},d)}catch(e){if(e&&(403===e.status||"membership_revoked"===e.error)){if(c?.heartbeat_task_id)try{(0,f.getDb)().prepare("UPDATE heartbeat_tasks SET status = 'approval_required', updated_at = ? WHERE id = ?").run((0,f.nowIso)(),c.heartbeat_task_id)}catch(a){console.error("[registry] Gate 0: failed to pause heartbeat task:",a.message)}try{(0,n.appendComplianceAudit)({user_id:b,org_id:d,action:"auth.membership.revoked_detected",status:"denied",summary:`Tool ${a} blocked — membership revoked for user ${b}`,action_target_type:"tool",action_target_id:a,meta:{tool_name:a,agent_id:c.agent_id||null,org_id:d}})}catch{}return{ok:!1,status:"approval_required",approval_request_id:null,reason:"membership_revoked"}}throw e}}}let h=!1,j=null;if(!c.agent_id&&an(d,b)){let c=`main_agent_tool_irreversible:${a}`,d=ap(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===d})){let e=(0,g.D6)({action_type:c,risk:"irreversible_external",summary:`Allow the main agent to run irreversible external tool ${a}`,payload:{tool_name:a,input:ao(b),input_signature:d,...function(a,b={}){return"supabase_sql"===a?{warning:"This call uses the service-role key and BYPASSES Row-Level Security. Only approve if you have reviewed the exact SQL.",query:String(b.query||"")}:{}}(a,b)},requested_by:"main_agent"});return aq({tool_name:a,status:"irreversible_external_approval_required",summary:`Main agent irreversible-external approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}h=!0,j=b.approval_id||null,aq({tool_name:a,status:"irreversible_external_approved",summary:`Main agent irreversible-external approval consumed for ${a}`})}if(!c.agent_id&&!h&&!c.owner_trusted&&function(a,b){if(a.approval_required)return!0;if("terminal_run"===a.name||"process_start"===a.name){let a=String(b?.command||"");if(!a)return!1;let c=Array.isArray(b?.args)?b.args.map(String):[];return(0,i.IB)(a,c).approval_required}return!1}(d,b)){let c=_();if("auto"===c)h=!0,aq({tool_name:a,status:"auto_approved",summary:`Main agent trust mode auto-approved ${a}`});else{let c=`main_agent_tool:${a}`,e=ap(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===e})){let f=(0,g.D6)({action_type:c,risk:d.risk_level||"medium",summary:`Allow the main agent to run ${a}`,payload:{tool_name:a,input:ao(b),input_signature:e},requested_by:"main_agent"});return aq({tool_name:a,status:"approval_required",summary:`Main agent approval required for ${a}`,meta:{approval_request_id:f.id}}),{ok:!1,status:"approval_required",approval_request_id:f.id,reason:`Main agent tool ${a} requires owner approval`}}h=!0,j=b.approval_id||null,aq({tool_name:a,status:"approved",summary:`Main agent approval consumed for ${a}`})}}let o=function(a,b){var c;if(!a)return{ok:!0,mode:"legacy"};let d=(c=b.name,a&&c&&(0,f.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,c)||null);if(!d)throw ak({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: missing agent permission`}),Error(`Agent ${a} is not permitted to use ${b.name}`);if("disabled"===d.mode)throw ak({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: permission disabled`}),Error(`Tool disabled for agent ${a}: ${b.name}`);return{ok:!0,mode:d.mode}}(c.agent_id,d),p=an(d,b)&&("browser_harness_run"===a||"skill_bridge_run"===a||!!d.source);if(c.agent_id&&p&&!(0,g.v)(b.approval_id,{action_type:`agent_tool_irreversible:${a}`})){let d=(0,g.D6)({action_type:`agent_tool_irreversible:${a}`,risk:"irreversible_external",summary:`Allow ${c.agent_id} to run irreversible external tool ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ao(b)},requested_by:c.agent_id});return ak({agent_id:c.agent_id,tool_name:a,status:"irreversible_external_approval_required",summary:`Irreversible-external approval required for ${a}`,meta:{approval_request_id:d.id}}),{ok:!1,status:"approval_required",approval_request_id:d.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}if(c.agent_id&&"approval_required"===o.mode&&!(0,g.v)(b.approval_id,{action_type:`agent_tool:${a}`})){let e=(0,g.D6)({action_type:`agent_tool:${a}`,risk:d.risk_level||"medium",summary:`Allow ${c.agent_id} to run ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ao(b)},requested_by:c.agent_id});return ak({agent_id:c.agent_id,tool_name:a,status:"approval_required",summary:`Approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Agent tool permission requires approval for ${a}`}}if(d.allowlist_required&&d.allowlist_scope_key){let e;if("recipient_domain"===d.allowlist_scope_key){let a=String(b?.to||""),c=a.lastIndexOf("@");e=c>=0?a.slice(c+1).toLowerCase():a.toLowerCase()}else e=String(b?.[d.allowlist_scope_key]??"");let f=!!d.allowlist_default_allow,g=(0,k.Bs)(a,{scope_key:d.allowlist_scope_key,scope_value:e},{default_allow:f});if(!g.ok){let b=c.agent_id?ak:aq,f=c.agent_id?{agent_id:c.agent_id,tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}}:{tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}};return b(f),{ok:!1,status:"allowlist_violation",missing_entry:g.missing_entry}}}let q=aw.find(b=>b.name===a),r=(0,l.ab)(a,c.agent_id,q);if(!r.ok){let b="rate_limited",d=`Rate limit exceeded for ${a}: ${r.current_count}/${r.max} in window`;return c.agent_id?ak({agent_id:c.agent_id,tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}):aq({tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}),{ok:!1,status:"rate_limited",retry_after_seconds:r.retry_after_seconds,current_count:r.current_count,max:r.max}}let s=ax[a],t=b;if(s||d.source?.kind!=="connector"?s||d.source?.kind!=="composite"||(s=ax.composite_tool_run,t={...b,__composite_slug:d.source.composite_slug}):(s=ax.http_api_call,t={...b,__connector_slug:d.source.connector_slug,__endpoint:d.source.endpoint}),!s)throw Error(`No adapter registered for tool: ${a}`);let u=await s(t,{owner_trusted:h||!!c.owner_trusted,agent_id:c.agent_id,project_id:c.project_id,org_id:c.org_id,actor_role:c.actor_role||c.role,engine:c.engine,acting_on_behalf_of_user_id:c.acting_on_behalf_of_user_id||c.user_id||null}),v=u?.status==="error"||u?.ok===!1,w=new Set(["spec_invalid","spec_required","slug_required","slug_in_use","version_bump_required","not_found","insufficient_role"]);v&&w.has(u?.error)&&j&&(0,g.t6)(j),v||(0,l.Cu)(a,c.agent_id,q);let x=v?{error:u?.error,errors:u?.errors,message:u?.message}:{};return c.agent_id?ak({agent_id:c.agent_id,tool_name:a,status:u?.status||"complete",summary:`Ran ${a}`,meta:x}):aq({tool_name:a,status:u?.status||"complete",summary:`Main agent ran ${a}`,meta:x}),u}function as(){return ag().some(a=>a.enabled&&a.available&&["web_search","web_fetch"].includes(a.name))}aw.length,d()}catch(a){d(a)}})},40924:(a,b,c)=>{"use strict";c.d(b,{O6:()=>f,Z2:()=>g,fb:()=>h});var d=c(77598);let e=new Map;function f(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function g(a){let b=e.get(a);return b?Date.now()>b.expires_at?(e.delete(a),null):(e.delete(a),e.set(a,b),b.value):null}function h(a,b){for(e.has(a)&&e.delete(a),e.set(a,{value:b,expires_at:Date.now()+9e5});e.size>200;){let a=e.keys().next().value;e.delete(a)}}},41249:(a,b,c)=>{"use strict";c.d(b,{Es:()=>h,K4:()=>g,Qw:()=>n,U5:()=>m,Zx:()=>f,v4:()=>l});var d=c(76760),e=c(80099);let f=Object.freeze(["strict","balanced","permissive"]),g="strict",h="MADARX_PRINTING_PRESS_SECURITY_MODE",i=new Set,j=null,k=0;function l(){k=0,j=null}function m(a){let b=a??function(){let a=Date.now();if(a-k<1500)return j;try{let a=process.env.MADARX_DATA_DIR||process.env.VILLA515_DATA_DIR,b=a?d.resolve(a):process.env.MADARX_HOME?d.join(d.resolve(process.env.MADARX_HOME),"data"):d.resolve(process.cwd(),"data"),c=d.join(b,"madarx.sqlite"),f=new e.DatabaseSync(c,{readOnly:!0});try{let a=f.prepare("SELECT value FROM config WHERE key = ?").get("printing_press_security_mode_override");j=a?.value||null}finally{f.close()}}catch{j=null}return k=a,j}()??process.env[h];if(!b)return g;let c=String(b).trim().toLowerCase();return f.includes(c)?c:(i.has(c)||(i.add(c),console.warn(`[printing-press] Unknown ${h}="${b}" — defaulting to "${g}".`)),g)}function n(a){let b=f.includes(a)?a:g;return"strict"===b?Object.freeze({mode:"strict",force_approval:!0,allowlist_default_allow:!1,allow_network_write_clis:!1,allow_mcp_mount:!1,rate_limit_multiplier:1,production_safe:!0,warn_in_production:!1,allow_install_at_runtime:!0,banner:"red",banner_message:"Strict mode: every Printing Press action requires explicit approval."}):"balanced"===b?Object.freeze({mode:"balanced",force_approval:!1,allowlist_default_allow:!1,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:2,production_safe:!0,warn_in_production:!0,allow_install_at_runtime:!0,banner:"amber",banner_message:"Balanced mode: trust-mode rules apply. Allowlist still default-deny."}):Object.freeze({mode:"permissive",force_approval:!1,allowlist_default_allow:!0,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:5,production_safe:!1,warn_in_production:!0,allow_install_at_runtime:!0,banner:"grey",banner_message:"Permissive mode: only suitable for sandboxes. Not allowed in production."})}},41416:(a,b,c)=>{"use strict";c.d(b,{M2:()=>h});var d=c(73024),e=c(76760);let f={".shp":"shp",".shx":"shp",".dbf":"shp",".prj":"prj",".gdb":"gdb",".mxd":"mxd",".dxf":"dxf",".dwg":"dwg",".adf":"adf",".tif":"raster",".tiff":"raster",".img":"raster",".ecw":"raster"};function g(a){try{return d.readFileSync(a,"utf8").trim()||null}catch{return null}}function h(a){let b=e.extname(a).toLowerCase(),c=f[String(b||"").toLowerCase()]||"other_spatial",h=null;try{h=d.statSync(a).size}catch{}let i=null,j=null;if(".prj"===b)i=g(a);else if(".shp"===b){j=function(a){try{let b=d.openSync(a,"r");try{let a=Buffer.alloc(100);if(68>d.readSync(b,a,0,100,0))return null;let c=a.readDoubleLE(36),e=a.readDoubleLE(44),f=a.readDoubleLE(52),g=a.readDoubleLE(60);if(![c,e,f,g].every(Number.isFinite))return null;return{min_x:c,min_y:e,max_x:f,max_y:g}}finally{d.closeSync(b)}}catch{return null}}(a);let b=a.replace(/\.shp$/i,".prj");b!==a&&d.existsSync(b)&&(i=g(b))}return{kind:c,crs:i,bbox:j,file_size_bytes:h}}},43466:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$:()=>k});var e=c(34255),f=c(19151),g=c(1423),h=c(4160),i=a([e,f,g,h]);[e,f,g,h]=i.then?(await i)():i;let l=Number(process.env.MINES_EXTRACT_CHAR_BUDGET)||9e4,m=Number(process.env.MINES_EXTRACT_MAX_CHUNKS)||120,n=["porphyry","deposit","mineraliz","mineralis","chalcocite","breccia","drill","sondaje","barren","trench","trinchera","channel","grade","ley","cu ","copper","cobre","au ","gold","oro","silver","plata","resource","recurso","reserve","reserva","tonn","tonelad","target","objetivo","qa/qc","qaqc","quality control","assay","ensaye","la caridad","cananea","la colorada","geophys","magnetic","gravity","recommend","recomend","work program","programa"],o=["property","asset_stage","deposit_type","mineralization","drilling_summary","trenching_summary","geophysics","qa_qc","data_verification","work_program","resource_estimate"],p={name:"emit_mining_facts",description:"Emit the structured facts extracted from the supplied document chunks. Call exactly once.",input_schema:{type:"object",properties:{facts:{type:"array",description:"One entry per distinct fact found in the chunks. Omit any fact not supported by the text.",items:{type:"object",properties:{fact_type:{type:"string",description:"Canonical key. Use one of: property, asset_stage, deposit_type, mineralization, drilling_summary, trenching_summary, geophysics, qa_qc, data_verification, work_program, resource_estimate. For each defined exploration target use target_<slug> (e.g. target_el_choclo_nw). For each comparable/analogue deposit use comparable_<slug> (e.g. comparable_la_caridad)."},value_text:{type:"string",description:"The fact stated concisely in English (preserve Spanish technical terms in parentheses on first use). Quote figures exactly as written."},source_chunk_id:{type:"string",description:"The exact [chunk_id] of the chunk this fact came from. Must be one of the provided ids."},source_quote:{type:"string",description:"A short verbatim span (10–200 chars) copied EXACTLY from that chunk that supports the fact. Must appear in the chunk text character-for-character."},confidence:{type:"number",description:"0..1 — how directly the chunk supports the fact. 0.9+ for explicit statements, lower for inferred."}},required:["fact_type","value_text","source_chunk_id","source_quote"]}}},required:["facts"]}};function j(a){return String(a||"").toLowerCase().replace(/\s+/g," ").replace(/[‘’]/g,"'").trim()}async function k(a,b={}){let c=a?.project_id;if(!c)return{status:"error",error:"project_id_required"};let d=(0,e.getDb)(),f=d.prepare("SELECT id, name, commodity, asset_stage FROM mines_projects WHERE id = ?").get(c);if(!f)return{status:"error",error:"project_not_found"};let i=function(a,b,c){if(c)return a.prepare("SELECT id, file_name, page_count FROM mines_source_documents WHERE id = ? AND project_id = ?").get(c,b);let d=a.prepare(`
|
|
1060
|
+
`).run((0,f.newId)("audit"),(0,f.nowIso)(),`main_agent.tool.${b}`,c,b,JSON.stringify({tool_name:a,...d}))}async function as(a,b={},c={}){let d=ah().find(b=>b.name===a);if(!d)throw Error(`Unknown tool: ${a}`);if(!d.enabled)throw Error(`Tool disabled: ${a}`);if(!d.available)throw Error(`Tool unavailable; missing environment: ${d.missing_env.join(", ")}`);let e=az[a];e&&e(b);{let b=c?.acting_on_behalf_of_user_id||c?.user_id||null,d=new Set(["system","whatsapp-service"]);if(b&&!d.has(b)){let d="personal-org";try{let a=(0,f.getDb)(),b=c.agent_id?a.prepare("SELECT project_id FROM agents WHERE id = ?").get(c.agent_id):null;if(b?.project_id){let c=a.prepare("SELECT org_id FROM projects WHERE id = ?").get(b.project_id);c?.org_id&&(d=c.org_id)}}catch{}try{await (0,m.aS)({user_id:b,org_id:d},d)}catch(e){if(e&&(403===e.status||"membership_revoked"===e.error)){if(c?.heartbeat_task_id)try{(0,f.getDb)().prepare("UPDATE heartbeat_tasks SET status = 'approval_required', updated_at = ? WHERE id = ?").run((0,f.nowIso)(),c.heartbeat_task_id)}catch(a){console.error("[registry] Gate 0: failed to pause heartbeat task:",a.message)}try{(0,n.appendComplianceAudit)({user_id:b,org_id:d,action:"auth.membership.revoked_detected",status:"denied",summary:`Tool ${a} blocked — membership revoked for user ${b}`,action_target_type:"tool",action_target_id:a,meta:{tool_name:a,agent_id:c.agent_id||null,org_id:d}})}catch{}return{ok:!1,status:"approval_required",approval_request_id:null,reason:"membership_revoked"}}throw e}}}let h=!1,j=null;if(!c.agent_id&&ao(d,b)){let c=`main_agent_tool_irreversible:${a}`,d=aq(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===d})){let e=(0,g.D6)({action_type:c,risk:"irreversible_external",summary:`Allow the main agent to run irreversible external tool ${a}`,payload:{tool_name:a,input:ap(b),input_signature:d,...function(a,b={}){return"supabase_sql"===a?{warning:"This call uses the service-role key and BYPASSES Row-Level Security. Only approve if you have reviewed the exact SQL.",query:String(b.query||"")}:{}}(a,b)},requested_by:"main_agent"});return ar({tool_name:a,status:"irreversible_external_approval_required",summary:`Main agent irreversible-external approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}h=!0,j=b.approval_id||null,ar({tool_name:a,status:"irreversible_external_approved",summary:`Main agent irreversible-external approval consumed for ${a}`})}if(!c.agent_id&&!h&&!c.owner_trusted&&function(a,b){if(a.approval_required)return!0;if("terminal_run"===a.name||"process_start"===a.name){let a=String(b?.command||"");if(!a)return!1;let c=Array.isArray(b?.args)?b.args.map(String):[];return(0,i.IB)(a,c).approval_required}return!1}(d,b)){let c=aa();if("auto"===c)h=!0,ar({tool_name:a,status:"auto_approved",summary:`Main agent trust mode auto-approved ${a}`});else{let c=`main_agent_tool:${a}`,e=aq(a,b);if(!(0,g.v)(b.approval_id,{action_type:c,matches:a=>a?.input_signature===e})){let f=(0,g.D6)({action_type:c,risk:d.risk_level||"medium",summary:`Allow the main agent to run ${a}`,payload:{tool_name:a,input:ap(b),input_signature:e},requested_by:"main_agent"});return ar({tool_name:a,status:"approval_required",summary:`Main agent approval required for ${a}`,meta:{approval_request_id:f.id}}),{ok:!1,status:"approval_required",approval_request_id:f.id,reason:`Main agent tool ${a} requires owner approval`}}h=!0,j=b.approval_id||null,ar({tool_name:a,status:"approved",summary:`Main agent approval consumed for ${a}`})}}let o=function(a,b){var c;if(!a)return{ok:!0,mode:"legacy"};let d=(c=b.name,a&&c&&(0,f.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,c)||null);if(!d)throw al({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: missing agent permission`}),Error(`Agent ${a} is not permitted to use ${b.name}`);if("disabled"===d.mode)throw al({agent_id:a,tool_name:b.name,status:"denied",summary:`Denied ${b.name}: permission disabled`}),Error(`Tool disabled for agent ${a}: ${b.name}`);return{ok:!0,mode:d.mode}}(c.agent_id,d),p=ao(d,b)&&("browser_harness_run"===a||"skill_bridge_run"===a||!!d.source);if(c.agent_id&&p&&!(0,g.v)(b.approval_id,{action_type:`agent_tool_irreversible:${a}`})){let d=(0,g.D6)({action_type:`agent_tool_irreversible:${a}`,risk:"irreversible_external",summary:`Allow ${c.agent_id} to run irreversible external tool ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ap(b)},requested_by:c.agent_id});return al({agent_id:c.agent_id,tool_name:a,status:"irreversible_external_approval_required",summary:`Irreversible-external approval required for ${a}`,meta:{approval_request_id:d.id}}),{ok:!1,status:"approval_required",approval_request_id:d.id,reason:`Tool ${a} is irreversible and always requires owner approval`}}if(c.agent_id&&"approval_required"===o.mode&&!(0,g.v)(b.approval_id,{action_type:`agent_tool:${a}`})){let e=(0,g.D6)({action_type:`agent_tool:${a}`,risk:d.risk_level||"medium",summary:`Allow ${c.agent_id} to run ${a}`,payload:{agent_id:c.agent_id,tool_name:a,input:ap(b)},requested_by:c.agent_id});return al({agent_id:c.agent_id,tool_name:a,status:"approval_required",summary:`Approval required for ${a}`,meta:{approval_request_id:e.id}}),{ok:!1,status:"approval_required",approval_request_id:e.id,reason:`Agent tool permission requires approval for ${a}`}}if(d.allowlist_required&&d.allowlist_scope_key){let e;if("recipient_domain"===d.allowlist_scope_key){let a=String(b?.to||""),c=a.lastIndexOf("@");e=c>=0?a.slice(c+1).toLowerCase():a.toLowerCase()}else e=String(b?.[d.allowlist_scope_key]??"");let f=!!d.allowlist_default_allow,g=(0,k.Bs)(a,{scope_key:d.allowlist_scope_key,scope_value:e},{default_allow:f});if(!g.ok){let b=c.agent_id?al:ar,f=c.agent_id?{agent_id:c.agent_id,tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}}:{tool_name:a,status:"allowlist_violation",summary:`Allowlist violation for ${a}: ${d.allowlist_scope_key}=${e}`,meta:{scope_key:d.allowlist_scope_key,scope_value:e}};return b(f),{ok:!1,status:"allowlist_violation",missing_entry:g.missing_entry}}}let q=ax.find(b=>b.name===a),r=(0,l.ab)(a,c.agent_id,q);if(!r.ok){let b="rate_limited",d=`Rate limit exceeded for ${a}: ${r.current_count}/${r.max} in window`;return c.agent_id?al({agent_id:c.agent_id,tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}):ar({tool_name:a,status:b,summary:d,meta:{current_count:r.current_count,max:r.max,retry_after_seconds:r.retry_after_seconds}}),{ok:!1,status:"rate_limited",retry_after_seconds:r.retry_after_seconds,current_count:r.current_count,max:r.max}}let s=ay[a],t=b;if(s||d.source?.kind!=="connector"?s||d.source?.kind!=="composite"||(s=ay.composite_tool_run,t={...b,__composite_slug:d.source.composite_slug}):(s=ay.http_api_call,t={...b,__connector_slug:d.source.connector_slug,__endpoint:d.source.endpoint}),!s)throw Error(`No adapter registered for tool: ${a}`);let u=await s(t,{owner_trusted:h||!!c.owner_trusted,agent_id:c.agent_id,project_id:c.project_id,org_id:c.org_id,actor_role:c.actor_role||c.role,engine:c.engine,acting_on_behalf_of_user_id:c.acting_on_behalf_of_user_id||c.user_id||null}),v=u?.status==="error"||u?.ok===!1,w=new Set(["spec_invalid","spec_required","slug_required","slug_in_use","version_bump_required","not_found","insufficient_role"]);v&&w.has(u?.error)&&j&&(0,g.t6)(j),v||(0,l.Cu)(a,c.agent_id,q);let x=v?{error:u?.error,errors:u?.errors,message:u?.message}:{};return c.agent_id?al({agent_id:c.agent_id,tool_name:a,status:u?.status||"complete",summary:`Ran ${a}`,meta:x}):ar({tool_name:a,status:u?.status||"complete",summary:`Main agent ran ${a}`,meta:x}),u}function at(){return ah().some(a=>a.enabled&&a.available&&["web_search","web_fetch"].includes(a.name))}ax.length,d()}catch(a){d(a)}})},40924:(a,b,c)=>{"use strict";c.d(b,{O6:()=>f,Z2:()=>g,fb:()=>h});var d=c(77598);let e=new Map;function f(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function g(a){let b=e.get(a);return b?Date.now()>b.expires_at?(e.delete(a),null):(e.delete(a),e.set(a,b),b.value):null}function h(a,b){for(e.has(a)&&e.delete(a),e.set(a,{value:b,expires_at:Date.now()+9e5});e.size>200;){let a=e.keys().next().value;e.delete(a)}}},41249:(a,b,c)=>{"use strict";c.d(b,{Es:()=>h,K4:()=>g,Qw:()=>n,U5:()=>m,Zx:()=>f,v4:()=>l});var d=c(76760),e=c(80099);let f=Object.freeze(["strict","balanced","permissive"]),g="strict",h="MADARX_PRINTING_PRESS_SECURITY_MODE",i=new Set,j=null,k=0;function l(){k=0,j=null}function m(a){let b=a??function(){let a=Date.now();if(a-k<1500)return j;try{let a=process.env.MADARX_DATA_DIR||process.env.VILLA515_DATA_DIR,b=a?d.resolve(a):process.env.MADARX_HOME?d.join(d.resolve(process.env.MADARX_HOME),"data"):d.resolve(process.cwd(),"data"),c=d.join(b,"madarx.sqlite"),f=new e.DatabaseSync(c,{readOnly:!0});try{let a=f.prepare("SELECT value FROM config WHERE key = ?").get("printing_press_security_mode_override");j=a?.value||null}finally{f.close()}}catch{j=null}return k=a,j}()??process.env[h];if(!b)return g;let c=String(b).trim().toLowerCase();return f.includes(c)?c:(i.has(c)||(i.add(c),console.warn(`[printing-press] Unknown ${h}="${b}" — defaulting to "${g}".`)),g)}function n(a){let b=f.includes(a)?a:g;return"strict"===b?Object.freeze({mode:"strict",force_approval:!0,allowlist_default_allow:!1,allow_network_write_clis:!1,allow_mcp_mount:!1,rate_limit_multiplier:1,production_safe:!0,warn_in_production:!1,allow_install_at_runtime:!0,banner:"red",banner_message:"Strict mode: every Printing Press action requires explicit approval."}):"balanced"===b?Object.freeze({mode:"balanced",force_approval:!1,allowlist_default_allow:!1,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:2,production_safe:!0,warn_in_production:!0,allow_install_at_runtime:!0,banner:"amber",banner_message:"Balanced mode: trust-mode rules apply. Allowlist still default-deny."}):Object.freeze({mode:"permissive",force_approval:!1,allowlist_default_allow:!0,allow_network_write_clis:!0,allow_mcp_mount:!0,rate_limit_multiplier:5,production_safe:!1,warn_in_production:!0,allow_install_at_runtime:!0,banner:"grey",banner_message:"Permissive mode: only suitable for sandboxes. Not allowed in production."})}},41416:(a,b,c)=>{"use strict";c.d(b,{M2:()=>h});var d=c(73024),e=c(76760);let f={".shp":"shp",".shx":"shp",".dbf":"shp",".prj":"prj",".gdb":"gdb",".mxd":"mxd",".dxf":"dxf",".dwg":"dwg",".adf":"adf",".tif":"raster",".tiff":"raster",".img":"raster",".ecw":"raster"};function g(a){try{return d.readFileSync(a,"utf8").trim()||null}catch{return null}}function h(a){let b=e.extname(a).toLowerCase(),c=f[String(b||"").toLowerCase()]||"other_spatial",h=null;try{h=d.statSync(a).size}catch{}let i=null,j=null;if(".prj"===b)i=g(a);else if(".shp"===b){j=function(a){try{let b=d.openSync(a,"r");try{let a=Buffer.alloc(100);if(68>d.readSync(b,a,0,100,0))return null;let c=a.readDoubleLE(36),e=a.readDoubleLE(44),f=a.readDoubleLE(52),g=a.readDoubleLE(60);if(![c,e,f,g].every(Number.isFinite))return null;return{min_x:c,min_y:e,max_x:f,max_y:g}}finally{d.closeSync(b)}}catch{return null}}(a);let b=a.replace(/\.shp$/i,".prj");b!==a&&d.existsSync(b)&&(i=g(b))}return{kind:c,crs:i,bbox:j,file_size_bytes:h}}},43466:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$:()=>k});var e=c(34255),f=c(19151),g=c(1423),h=c(4160),i=a([e,f,g,h]);[e,f,g,h]=i.then?(await i)():i;let l=Number(process.env.MINES_EXTRACT_CHAR_BUDGET)||9e4,m=Number(process.env.MINES_EXTRACT_MAX_CHUNKS)||120,n=["porphyry","deposit","mineraliz","mineralis","chalcocite","breccia","drill","sondaje","barren","trench","trinchera","channel","grade","ley","cu ","copper","cobre","au ","gold","oro","silver","plata","resource","recurso","reserve","reserva","tonn","tonelad","target","objetivo","qa/qc","qaqc","quality control","assay","ensaye","la caridad","cananea","la colorada","geophys","magnetic","gravity","recommend","recomend","work program","programa"],o=["property","asset_stage","deposit_type","mineralization","drilling_summary","trenching_summary","geophysics","qa_qc","data_verification","work_program","resource_estimate"],p={name:"emit_mining_facts",description:"Emit the structured facts extracted from the supplied document chunks. Call exactly once.",input_schema:{type:"object",properties:{facts:{type:"array",description:"One entry per distinct fact found in the chunks. Omit any fact not supported by the text.",items:{type:"object",properties:{fact_type:{type:"string",description:"Canonical key. Use one of: property, asset_stage, deposit_type, mineralization, drilling_summary, trenching_summary, geophysics, qa_qc, data_verification, work_program, resource_estimate. For each defined exploration target use target_<slug> (e.g. target_el_choclo_nw). For each comparable/analogue deposit use comparable_<slug> (e.g. comparable_la_caridad)."},value_text:{type:"string",description:"The fact stated concisely in English (preserve Spanish technical terms in parentheses on first use). Quote figures exactly as written."},source_chunk_id:{type:"string",description:"The exact [chunk_id] of the chunk this fact came from. Must be one of the provided ids."},source_quote:{type:"string",description:"A short verbatim span (10–200 chars) copied EXACTLY from that chunk that supports the fact. Must appear in the chunk text character-for-character."},confidence:{type:"number",description:"0..1 — how directly the chunk supports the fact. 0.9+ for explicit statements, lower for inferred."}},required:["fact_type","value_text","source_chunk_id","source_quote"]}}},required:["facts"]}};function j(a){return String(a||"").toLowerCase().replace(/\s+/g," ").replace(/[‘’]/g,"'").trim()}async function k(a,b={}){let c=a?.project_id;if(!c)return{status:"error",error:"project_id_required"};let d=(0,e.getDb)(),f=d.prepare("SELECT id, name, commodity, asset_stage FROM mines_projects WHERE id = ?").get(c);if(!f)return{status:"error",error:"project_not_found"};let i=function(a,b,c){if(c)return a.prepare("SELECT id, file_name, page_count FROM mines_source_documents WHERE id = ? AND project_id = ?").get(c,b);let d=a.prepare(`
|
|
1049
1061
|
SELECT d.id, d.file_name, d.page_count, COUNT(c.id) AS chunk_count
|
|
1050
1062
|
FROM mines_source_documents d
|
|
1051
1063
|
JOIN mines_document_chunks c ON c.source_document_id = d.id
|
|
@@ -3246,7 +3258,7 @@ ${e}`,triggered_by:b})}function am({project_id:a=null}={}){(0,i.Jh)();let b=(0,r
|
|
|
3246
3258
|
|
|
3247
3259
|
Next action: choose a specialized agent, create a local run folder, keep human-in-loop approval before external actions.`,triggered_by:"orchestrator"}),`Received: ${b}`)}async function ax({once:a=!0}={}){let b=(0,h.getDb)(),c=(0,h.nowIso)(),d=Number(process.env.MADARX_BACKFILL_MAX_WINDOWS||10),e=b.prepare(`SELECT *, created_by_user_id FROM schedules
|
|
3248
3260
|
WHERE enabled = 1 AND next_run_at IS NOT NULL AND next_run_at <= ?
|
|
3249
|
-
ORDER BY next_run_at ASC`).all(c),f=[];for(let a of e)try{let e=a.created_by_user_id||null,g=a.catchup_policy||"fire_all",i=[],j=a.next_run_at;for(;j<=c&&i.length<d&&(i.push(j),j=(0,k.F)(a.schedule,j)););let l=0;if(j&&j<=c){let b=j;for(;b&&b<=c;)l++,b=(0,k.F)(a.schedule,b);j=b}let m="fire_once"===g?i.slice(-1):"skip"===g?[]:i;for(let c of m){let d=`hbtask-${a.id}-${String(c).replace(/[^a-zA-Z0-9]/g,"")}`,g=(0,n.aJ)({id:d,type:"agent_tick",agent_id:a.agent_id,schedule_id:a.id,max_attempts:Number(process.env.MADARX_AGENT_TICK_MAX_ATTEMPTS||1),payload:{type:a.action_kind||"agent-tick",agent_id:a.agent_id,schedule_id:a.id,prompt:`Run ${a.agent_name||a.agent_id} scheduled heartbeat`,tools_allowed:["web_search","file_read","create_artifact"]},run_after:c});if(e&&g?.id)try{b.prepare("UPDATE heartbeat_tasks SET acting_on_behalf_of_user_id = ? WHERE id = ?").run(e,g.id)}catch(a){console.warn("[cron] acting_on_behalf_of_user_id update failed:",a.message)}W({type:"cron.schedule.queued",summary:`Queued ${a.agent_name||a.agent_id} \xb7 ${a.action_kind}`,status:"queued",meta:{schedule_id:a.id,task_id:g?.id,window:c,acting_on_behalf_of_user_id:e}}),f.push(g)}let o=i.at(-1)||a.next_run_at;b.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, last_queued_at=?, last_queued_window=?, updated_at=? WHERE id=?").run(o,j,(0,h.nowIso)(),o,(0,h.nowIso)(),a.id),(i.length>1||l>0||"fire_all"!==g&&i.length>0)&&W({type:"cron.schedule.backfilled",summary:`Backfilled ${a.agent_name||a.agent_id}: fired ${m.length}/${i.length} missed windows`,status:"queued",meta:{schedule_id:a.id,missed_count:i.length,fired_count:m.length,truncated_count:l,policy:g,oldest:i[0]||null,newest:i.at(-1)||null}})}catch(b){f.push(X({kind:"cron-error",title:`Cron failed: ${a.id}`,status:"failed",agent:a.agent_name,agent_id:a.agent_id,preview:b.message,triggered_by:"cron"})),function(a,b=null){let c=(0,h.getDb)(),d=c.prepare("SELECT * FROM schedules WHERE id = ?").get(a);if(!d)return;let e=b||(0,h.nowIso)(),f=(0,k.F)(d.schedule,e),g=(0,h.nowIso)();c.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, updated_at=? WHERE id=?").run(e,f,g,a)}(a.id,a.next_run_at)}return{ok:!0,once:a,executed:f.filter(Boolean).length,tasks:f}}async function ay({lastTickAt:a=null,intervalMs:b=3e4}={}){let{recoverStaleHeartbeatTasks:d}=await Promise.resolve().then(c.bind(c,40563));if(null!==a&&Date.now()-a>2*b)try{await d()}catch(a){console.warn("[cron] stale recovery failed:",a?.message||a)}return ax({once:!0})}d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";function d({slug:a,title:b,description:c,category:d="integration",provider:e,scopes:f,prefix:g,extraCredentials:h=[],unlocks:i,healthEndpoint:j,risk:k,tags:l}){let m=`${g}_ACCESS_TOKEN`;return{slug:a,title:b,description:c,category:d,author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:k,tags:l,manifest:{service_key:a,setup_kind:"oauth2",benefit:`Sign in with ${b} to unlock ${i.length} tool${1===i.length?"":"s"}. No code, no .env editing.`,credentials:[{name:`${g}_CLIENT_ID`,label:`${b} client ID`,type:"text",required:!0,help_text:`Create an app on the ${b} developer console and paste its client ID.`},{name:`${g}_CLIENT_SECRET`,label:`${b} client secret`,type:"password",required:!0,help_text:"Stored encrypted in the local vault — never echoed back."},...h],oauth:{provider:e,scopes:f,pkce:"google"===e||"tiktok"===e,redirect_path:`/api/connections/${a}/oauth/callback`,client_id_ref:`${g}_CLIENT_ID`,client_secret_ref:`${g}_CLIENT_SECRET`,access_token_ref:m,refresh_token_ref:`${g}_REFRESH_TOKEN`},health_check:{endpoint:j,method:"GET",expect_status:200,auth:{in:"header",name:"Authorization",prefix:"Bearer ",credential:m}},verify_endpoint:`/api/connections/${a}/verify`,verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:i,engines:[],logo_glyph:a}}}c.d(b,{R2:()=>q,fP:()=>o});let e=[{slug:"anthropic",title:"Anthropic",description:"Power any agent running on the Anthropic engine (Claude Opus, Sonnet, Haiku). Your key is encrypted on this Mac and never leaves the vault.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://console.anthropic.com/settings/keys",version:null,risk_summary:"API key only — no destructive scope.",tags:["engine","anthropic","claude"],manifest:{service_key:"anthropic",setup_kind:"api_key",benefit:"Unlock the Anthropic engine for sub-agents and the main agent. Required for /api/orchestrator/command on default mode.",credentials:[{name:"ANTHROPIC_API_KEY",label:"API key",type:"password",placeholder:"sk-ant-…",help_url:"https://console.anthropic.com/settings/keys",help_text:"Generate a key in the Anthropic console.",required:!0}],verify_endpoint:"/api/connections/anthropic/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["anthropic"],logo_glyph:"anthropic"}},{slug:"openai",title:"OpenAI",description:"Use OpenAI models for agents that prefer GPT. Stored encrypted; never echoed back.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.openai.com/api-keys",version:null,risk_summary:"API key only.",tags:["engine","openai","gpt"],manifest:{service_key:"openai",setup_kind:"api_key",benefit:"Unlock OpenAI models for agents and transcription.",credentials:[{name:"OPENAI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.openai.com/api-keys",help_text:"Create a key in the OpenAI dashboard.",required:!0}],verify_endpoint:"/api/connections/openai/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["openai"],logo_glyph:"openai"}},{slug:"kimi",title:"Kimi (Moonshot)",description:"Connect Moonshot AI — Kimi models for long-context Chinese + English reasoning. Stored encrypted.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.moonshot.ai/console/api-keys",version:null,risk_summary:"API key only.",tags:["engine","kimi","moonshot"],manifest:{service_key:"kimi",setup_kind:"api_key",benefit:"Unlock Kimi (Moonshot) models for the kimi engine.",credentials:[{name:"KIMI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.moonshot.ai/console/api-keys",help_text:"Create a key in the Moonshot console.",required:!0}],verify_endpoint:"/api/connections/kimi/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["kimi"],logo_glyph:"kimi"}},{slug:"github",title:"GitHub",description:"Unlock 11 GitHub tools: read repos, list PRs, create issues, dispatch workflows, and (with approval) merge PRs. Token is encrypted at rest.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://github.com/settings/tokens",version:null,risk_summary:"Some GitHub tools are irreversible (e.g. gh_pr_merge) and always require approval.",tags:["integration","github","git"],manifest:{service_key:"github",setup_kind:"api_key",benefit:"Unlock 11 GitHub tools across read, issue, and PR workflows.",credentials:[{name:"GITHUB_TOKEN",label:"Personal access token",type:"password",placeholder:"ghp_…",help_url:"https://github.com/settings/tokens",help_text:'To read repos beyond your own, the token must be granted access to them. Fine-grained PAT: under "Repository access" pick the orgs/repos (org owner may need to approve); classic PAT: enable the "repo" scope and, for SSO orgs, click "Authorize" / "Configure SSO" next to the token.',required:!0}],verify_endpoint:"/api/connections/github/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["gh_repo_read","gh_repo_list","gh_issue_list","gh_issue_create","gh_issue_comment","gh_pr_list","gh_pr_create","gh_pr_comment","gh_pr_merge","gh_actions_dispatch","gh_release_create"],engines:[],logo_glyph:"github"}},{slug:"resend",title:"Resend",description:"Send transactional email. A default recipient_domain allowlist is seeded from git config user.email — add more in the marketplace afterwards.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://resend.com/api-keys",version:null,risk_summary:"email_send is irreversible and always requires approval.",tags:["integration","email","resend"],manifest:{service_key:"resend",setup_kind:"api_key",benefit:"Unlock email_send and email_status_lookup for transactional email.",credentials:[{name:"RESEND_API_KEY",label:"API key",type:"password",placeholder:"re_…",help_url:"https://resend.com/api-keys",help_text:"Create a Resend API key.",required:!0},{name:"RESEND_FROM_EMAIL",label:"From email",type:"text",placeholder:"agent@yourdomain.com",help_url:"https://resend.com/domains",help_text:"A verified sender address on a verified Resend domain.",required:!0}],verify_endpoint:"/api/connections/resend/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["email_send","email_status_lookup"],engines:[],logo_glyph:"resend"}},{slug:"supabase",title:"Supabase",description:"Connect a Supabase project. Service role key bypasses RLS — destructive ops (supabase_rest_delete, supabase_sql) are always approval-gated.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://supabase.com/dashboard",version:null,risk_summary:"Service role key bypasses Row-Level Security. Some tools (supabase_sql) always require approval.",tags:["integration","database","supabase"],manifest:{service_key:"supabase",setup_kind:"api_key",benefit:"Unlock 7 Supabase tools: REST select/insert/upsert/update/delete, RPC, and SQL.",credentials:[{name:"SUPABASE_URL",label:"Project URL",type:"text",placeholder:"https://xxxx.supabase.co",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → Project URL.",required:!0},{name:"SUPABASE_SERVICE_ROLE_KEY",label:"Service role key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → service_role. Treat as a database password.",required:!1},{name:"SUPABASE_ANON_KEY",label:"Anon key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → anon. Used for verify when service-role is absent.",required:!1},{name:"SUPABASE_ACCESS_TOKEN",label:"Personal access token",type:"password",placeholder:"sbp_…",help_url:"https://supabase.com/dashboard/account/tokens",help_text:"Required only if you want the agent to list / manage your Supabase projects via the Management API. Distinct from the project keys above.",required:!1}],verify_endpoint:"/api/connections/supabase/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["supabase_list_projects","supabase_rest_select","supabase_rest_insert","supabase_rest_upsert","supabase_rest_update","supabase_rest_delete","supabase_rpc","supabase_sql"],engines:[],logo_glyph:"supabase"}},{slug:"vercel",title:"Vercel",description:"Trigger deployments and read project state. v1 saves the token without a live verify — failures surface on first call.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://vercel.com/account/tokens",version:null,risk_summary:"vercel_create_deployment is high risk and approval-gated.",tags:["integration","vercel","deploy"],manifest:{service_key:"vercel",setup_kind:"api_key",benefit:"Unlock 3 Vercel tools: list projects, list deployments, create deployment.",credentials:[{name:"VERCEL_TOKEN",label:"Access token",type:"password",placeholder:"vercel_…",help_url:"https://vercel.com/account/tokens",help_text:"Create a token scoped to the right team.",required:!0},{name:"VERCEL_TEAM_ID",label:"Team ID (optional)",type:"text",placeholder:"team_…",help_url:"https://vercel.com/teams",help_text:"Only required for team-scoped tokens.",required:!1}],verify_endpoint:"/api/connections/vercel/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["vercel_list_projects","vercel_list_deployments","vercel_create_deployment"],engines:[],logo_glyph:"vercel"}},{slug:"whatsapp",title:"WhatsApp",description:"Text the main agent like you text Hermes. Pairs a dedicated WhatsApp number via Baileys. Operations (allowlist, message log) live at /whatsapp.",category:"channel",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Pair only a dedicated number — Baileys is an unofficial Web client; the paired account can be banned.",tags:["channel","whatsapp","messaging"],manifest:{service_key:"whatsapp",setup_kind:"qr_pair",benefit:"Receive WhatsApp messages and let the main agent reply through your number.",credentials:[],verify_endpoint:"/api/connections/whatsapp/verify",verify_supported:!0,deep_link:"/whatsapp",requires_daemon:"npm run whatsapp:bridge",supports_scopes:["global"],unlocks_tool_slugs:["whatsapp_send"],engines:[],logo_glyph:"whatsapp"}},{slug:"hermes",title:"Hermes Agent",description:"Route long-running orchestrator jobs to the local Hermes binary. Detection probes ../hermes-agent and scripts/hermes-command.py.",category:"engine",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Local subprocess execution — Hermes jobs inherit your local env.",tags:["engine","hermes","local"],manifest:{service_key:"hermes",setup_kind:"binary_detect",benefit:"Unlock the Hermes engine and the start_hermes_job orchestrator tool.",credentials:[{name:"HERMES_AGENT_DIR",label:"Hermes agent directory (optional)",type:"text",placeholder:"/Users/you/Projects/hermes-agent",help_url:null,help_text:"Defaults to ../hermes-agent relative to this repo. Override to point at a different checkout.",required:!1}],verify_endpoint:"/api/connections/hermes/verify",verify_supported:!0,deep_link:null,supports_scopes:["global"],unlocks_tool_slugs:["start_hermes_job","send_to_hermes"],engines:["hermes"],logo_glyph:"hermes"}},d({slug:"meta-ads",title:"Meta Ads",description:"Build and report on Facebook + Instagram ad campaigns. Campaign/budget writes are always approval-gated.",category:"marketing",provider:"meta",prefix:"META",scopes:["ads_management","ads_read","business_management"],unlocks:["meta_ads.insights_read","meta_ads.campaign_create","meta_ads.adset_create","meta_ads.budget_set"],healthEndpoint:"https://graph.facebook.com/v19.0/me",risk:"Campaign create, budget set, and audience create are irreversible and always require approval.",tags:["marketing","ads","meta","oauth"]}),d({slug:"google-ads",title:"Google Ads",description:"Manage Google Ads campaigns and pull GAQL reports. Requires a developer token in addition to OAuth sign-in.",category:"marketing",provider:"google",prefix:"GOOGLE_ADS",scopes:["https://www.googleapis.com/auth/adwords"],extraCredentials:[{name:"GOOGLE_ADS_DEVELOPER_TOKEN",label:"Developer token",type:"password",required:!0,help_text:"Google Ads API access requires a developer token alongside OAuth."}],unlocks:["google_ads.report","google_ads.campaign_create","google_ads.budget_set"],healthEndpoint:"https://googleads.googleapis.com/v17/customers:listAccessibleCustomers",risk:"Campaign create and budget set are irreversible and always require approval.",tags:["marketing","ads","google","oauth"]}),d({slug:"ga4",title:"Google Analytics 4",description:"Read GA4 metrics for marketing reports. Read-only — no external writes.",category:"analytics",provider:"google",prefix:"GA4",scopes:["https://www.googleapis.com/auth/analytics.readonly"],unlocks:["ga4.run_report","ga4.realtime_report"],healthEndpoint:"https://analyticsdata.googleapis.com/v1beta/properties",risk:"Read-only analytics access.",tags:["analytics","ga4","google","oauth"]}),d({slug:"hubspot-crm",title:"HubSpot CRM",description:"Read and (with approval) write contacts, deals, and activity in HubSpot.",category:"sales",provider:"hubspot",prefix:"HUBSPOT",scopes:["crm.objects.contacts.read","crm.objects.deals.read","crm.objects.contacts.write"],unlocks:["hubspot.contacts_read","hubspot.deals_read","hubspot.contact_upsert"],healthEndpoint:"https://api.hubapi.com/crm/v3/objects/contacts",risk:"CRM writes (contact/deal upsert) require approval.",tags:["sales","crm","hubspot","oauth"]})];e.map(a=>a.slug);let f=[{slug:"web-prototype",title:"Open Design — Web Prototype",description:"Generate a complete production-quality web prototype from a brief."},{slug:"saas-landing",title:"Open Design — SaaS Landing",description:"Build a SaaS landing page with hero, features, social proof, pricing."},{slug:"dashboard",title:"Open Design — Dashboard",description:"Information-dense, hierarchy-driven dashboard scaffold."},{slug:"mobile-app",title:"Open Design — Mobile App",description:"Mobile-first product UI scaffold with touch targets and gestures."},{slug:"social-carousel",title:"Open Design — Social Carousel",description:"Editorial social carousel with platform-aware aspect ratios."},{slug:"magazine-poster",title:"Open Design — Magazine Poster",description:"Editorial magazine/poster typography with high contrast."},{slug:"deck-guizang-editorial",title:"Open Design — Editorial Deck",description:"Guizang editorial-style slide deck system."},{slug:"email-marketing",title:"Open Design — Email Marketing",description:"Transactional/marketing email scaffold with bulletproof HTML."},{slug:"design-brief",title:"Open Design — Design Brief",description:"Structured design brief used to seed the rest of the pipeline."},{slug:"design-review",title:"Open Design — Design Review",description:"Designer's eye plan review and visual QA pass."},{slug:"brand-guidelines",title:"Open Design — Brand Guidelines",description:"Distill or author a brand guidelines book."},{slug:"copywriting",title:"Open Design — Copywriting",description:"High-signal product copywriting craft notes and structure."}],g={slug:"open-design",title:"Open Design (nexu-io)",description:"Vendored design corpus from nexu-io/open-design: craft notes, 130+ skills, ~140 design systems, prompt + design templates. Apache-2.0.",category:"design",author:"nexu-io",source_kind:"github",source_url:"https://github.com/nexu-io/open-design",version:null,risk_summary:"Read-only design content. No code executes; no external writes.",tags:["design","craft","systems","templates","open-source","apache-2.0"],manifest:{item_refs:f.map(a=>`skill:open-design-${a.slug}`),published_count:f.length,license:"Apache-2.0",note:"Vendored under workspace/skills/open-design/. Re-vendor with `npm run vendor:open-design`. See NOTICE.md for attribution."}},h=[{slug:"design-shotgun",title:"Design Shotgun",description:"Generate multiple AI design variants for any UI surface, open a comparison board, and iterate from approved options.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only ideation — no external writes.",tags:["design","mockups","exploration"],manifest:{invocation:"/design-shotgun",file_paths:["skills/design-shotgun/SKILL.md"],trigger_examples:["explore designs","show me design variants","visual brainstorm"]}},{slug:"design-review",title:"Design Review",description:"Visual QA pass on live pages: extracts the design system in use, audits hierarchy, typography, color, and spacing, and proposes fixes.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit — fixes are proposed, not applied.",tags:["design","review","visual-qa"],manifest:{invocation:"/design-review",file_paths:["skills/design-review/SKILL.md"],trigger_examples:["review the design","visual QA","audit this page"]}},{slug:"qa-only",title:"QA Only",description:"Systematically QA a web app and produce a structured report with health score, screenshots, and repro steps. Never modifies code.",category:"review",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Report-only — no auto-fix.",tags:["qa","testing","report"],manifest:{invocation:"/qa-only",file_paths:["skills/qa-only/SKILL.md"],trigger_examples:["just report bugs","qa report only","test but do not fix"]}},{slug:"cso-audit",title:"CSO Audit",description:"Chief Security Officer mode: infrastructure-first security audit covering secrets archaeology, supply chain, OWASP Top 10, and threat modeling.",category:"security",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit; never executes destructive commands.",tags:["security","audit","owasp","threat-model"],manifest:{invocation:"/cso",file_paths:["skills/cso/SKILL.md"],trigger_examples:["security audit","threat model","OWASP review"]}}],i=[{slug:"market-research",title:"Market Research",category:"research",description:"Research any market, company, or topic across the web and deliver a cited, structured brief.",tools:["web_search","web_fetch","file_write"],risk_summary:"Read-only research; writes only the report file.",tags:["research","web","brief"],invocation:"/research",trigger_examples:["research this market","competitive landscape for X","brief me on company Y"]},{slug:"competitor-watch",title:"Competitor Watch",category:"research",description:"Track competitor pricing, features, and news on a schedule and alert you when something changes.",tools:["web_fetch","web_extract","email_send"],risk_summary:"Read-only monitoring; sends a summary email.",tags:["research","monitoring","competitive"],invocation:"/watch",trigger_examples:["watch competitor pricing","alert me when X changes","track this page weekly"]},{slug:"inbox-triage",title:"Inbox Triage",category:"comms",description:"Summarize, prioritize, and draft replies across your inbox so you act on what matters first.",tools:["gmail_messages_list","gmail_thread_read","email_send"],risk_summary:"Drafts replies; sending is approval-gated.",tags:["email","inbox","comms"],invocation:"/inbox",trigger_examples:["triage my inbox","summarize unread email","draft replies"]},{slug:"meeting-scheduler",title:"Meeting Scheduler",category:"comms",description:"Find times, schedule meetings, and send invites from your calendar and email.",tools:["calendar_events_list","calendar_event_read","email_send"],risk_summary:"Proposes times; invites are approval-gated.",tags:["calendar","scheduling","comms"],invocation:"/schedule-meeting",trigger_examples:["schedule a meeting","find a time with X","book a call next week"]},{slug:"document-extract",title:"Document Extraction",category:"documents",description:"Pull structured data and key facts from PDFs, documents, and audio into clean, usable output.",tools:["file_read","transcribe_audio","file_write"],risk_summary:"Read-only extraction; writes only the output file.",tags:["documents","extraction","pdf"],invocation:"/extract",trigger_examples:["extract data from this PDF","pull the numbers from these docs","transcribe this audio"]},{slug:"report-builder",title:"Report Builder",category:"documents",description:"Turn raw data and notes into a polished, formatted report or one-pager ready to share.",tools:["file_read","file_write"],risk_summary:"Generates a document; no external writes.",tags:["documents","reporting","writing"],invocation:"/report",trigger_examples:["build a report from this data","write a one-pager","summarize into a deck outline"]},{slug:"database-query",title:"Database Q&A",category:"data",description:"Ask questions of your database in plain English and get answers, tables, and charts.",tools:["supabase_rest_select","supabase_sql"],risk_summary:"Read-only queries by default; writes are approval-gated.",tags:["data","sql","analytics"],invocation:"/ask-data",trigger_examples:["how many orders last month","query the users table","top customers by revenue"]},{slug:"spreadsheet-analysis",title:"Spreadsheet Analysis",category:"data",description:"Clean, analyze, and summarize spreadsheets and CSVs — pivots, trends, and outliers.",tools:["file_read","file_write"],risk_summary:"Local file analysis; no external writes.",tags:["data","spreadsheet","csv"],invocation:"/analyze-sheet",trigger_examples:["analyze this spreadsheet","summarize this CSV","find trends in this data"]},{slug:"web-automation",title:"Web Automation",category:"web",description:"Fill forms, extract data, and run repetitive flows in a real browser, end to end.",tools:["browser_open","browser_act","browser_extract"],risk_summary:"Browser actions are bounded and audited.",tags:["web","automation","browser"],invocation:"/automate-web",trigger_examples:["automate this form","scrape this site","run this flow for each row"]}],j=[{slug:"paid-campaign-build",title:"Paid Campaign Build",category:"marketing",description:"Structure a paid campaign — objective, audiences, ad sets, creative spec, and budget — ready for approval-gated launch.",tools:["create_artifact","web_search"],risk_summary:"Plans campaigns; every publish/budget set stays approval-gated.",tags:["marketing","ads","campaign"],invocation:"/paid-campaign",trigger_examples:["build a Meta campaign","plan a paid launch","structure ad sets"]},{slug:"ads-reporting",title:"Ads Reporting",category:"marketing",description:"Pull spend, CPA, ROAS, and reach from connected ad accounts into one weekly performance report.",tools:["create_artifact","file_write"],risk_summary:"Read-only reporting; no external writes.",tags:["marketing","ads","reporting"],invocation:"/ads-report",trigger_examples:["weekly ads report","how did campaigns perform","ROAS summary"]},{slug:"content-calendar",title:"Content Calendar",category:"content",description:"Plan a multi-channel content calendar with post drafts, captions, and a scheduled queue.",tools:["create_artifact","file_write"],risk_summary:"Drafts and schedules; every publish stays approval-gated.",tags:["content","social","calendar"],invocation:"/content-calendar",trigger_examples:["plan this month of content","build a content calendar","draft social posts"]},{slug:"lead-research",title:"Lead Research",category:"sales",description:"Build a qualified target list, enrich it, and prep a personalized outreach sequence.",tools:["web_search","web_fetch","create_artifact"],risk_summary:"Research + drafts; sequence enrollment and bulk sends are approval-gated.",tags:["sales","outreach","leads"],invocation:"/lead-research",trigger_examples:["build a target list","find leads for X","prep an outreach sequence"]},{slug:"ticket-reply",title:"Ticket Reply",category:"support",description:"Triage support tickets, draft replies in brand voice, and flag escalations.",tools:["gmail_messages_list","file_write"],risk_summary:"Drafts replies; outbound sends/status changes are approval-gated.",tags:["support","helpdesk","tickets"],invocation:"/ticket-reply",trigger_examples:["triage support tickets","draft ticket replies","escalate this ticket"]},{slug:"runway-model",title:"Runway Model",category:"finance",description:"Turn revenue/expense data into a runway model and P&L summary with scenario sensitivity.",tools:["file_read","create_artifact"],risk_summary:"Advisory analysis; any money movement is approval-gated.",tags:["finance","runway","modeling"],invocation:"/runway",trigger_examples:["model our runway","P&L summary","how many months of cash"]}],k=[{slug:"gstack",title:"gstack",description:'"Senior engineering team in your terminal." 8 power tools + a stack of specialist skills for design, QA, review, security, and shipping. MIT licensed.',category:"engineering",author:"garrytan",source_kind:"builtin",source_url:"https://github.com/garrytan/gstack",version:null,risk_summary:"Mixed-risk bundle: includes read-only review skills and write-capable workflows (e.g. /ship runs git push). Per-item risk surfaces in Phase 2 when install is wired up.",tags:["engineering","skills-pack","mit"],manifest:{item_refs:["skill:design-shotgun","skill:design-review","skill:qa-only","skill:cso-audit"],published_count:4,license:"MIT",note:"Agent personas in this bundle will surface in the Agent Marketplace when it ships."}}];function l(a,b,c){let d=a.prepare("SELECT id FROM marketplace_items WHERE kind=? AND slug=?").get(b,c.slug),e=d?.id||`${b}:${c.slug}`,f=c.manifest?JSON.stringify(c.manifest):null,g=c.tags?JSON.stringify(c.tags):null;if(d)a.prepare(`
|
|
3261
|
+
ORDER BY next_run_at ASC`).all(c),f=[];for(let a of e)try{let e=a.created_by_user_id||null,g=a.catchup_policy||"fire_all",i=[],j=a.next_run_at;for(;j<=c&&i.length<d&&(i.push(j),j=(0,k.F)(a.schedule,j)););let l=0;if(j&&j<=c){let b=j;for(;b&&b<=c;)l++,b=(0,k.F)(a.schedule,b);j=b}let m="fire_once"===g?i.slice(-1):"skip"===g?[]:i;for(let c of m){let d=`hbtask-${a.id}-${String(c).replace(/[^a-zA-Z0-9]/g,"")}`,g=(0,n.aJ)({id:d,type:"agent_tick",agent_id:a.agent_id,schedule_id:a.id,max_attempts:Number(process.env.MADARX_AGENT_TICK_MAX_ATTEMPTS||1),payload:{type:a.action_kind||"agent-tick",agent_id:a.agent_id,schedule_id:a.id,prompt:`Run ${a.agent_name||a.agent_id} scheduled heartbeat`,tools_allowed:["web_search","file_read","create_artifact"]},run_after:c});if(e&&g?.id)try{b.prepare("UPDATE heartbeat_tasks SET acting_on_behalf_of_user_id = ? WHERE id = ?").run(e,g.id)}catch(a){console.warn("[cron] acting_on_behalf_of_user_id update failed:",a.message)}W({type:"cron.schedule.queued",summary:`Queued ${a.agent_name||a.agent_id} \xb7 ${a.action_kind}`,status:"queued",meta:{schedule_id:a.id,task_id:g?.id,window:c,acting_on_behalf_of_user_id:e}}),f.push(g)}let o=i.at(-1)||a.next_run_at;b.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, last_queued_at=?, last_queued_window=?, updated_at=? WHERE id=?").run(o,j,(0,h.nowIso)(),o,(0,h.nowIso)(),a.id),(i.length>1||l>0||"fire_all"!==g&&i.length>0)&&W({type:"cron.schedule.backfilled",summary:`Backfilled ${a.agent_name||a.agent_id}: fired ${m.length}/${i.length} missed windows`,status:"queued",meta:{schedule_id:a.id,missed_count:i.length,fired_count:m.length,truncated_count:l,policy:g,oldest:i[0]||null,newest:i.at(-1)||null}})}catch(b){f.push(X({kind:"cron-error",title:`Cron failed: ${a.id}`,status:"failed",agent:a.agent_name,agent_id:a.agent_id,preview:b.message,triggered_by:"cron"})),function(a,b=null){let c=(0,h.getDb)(),d=c.prepare("SELECT * FROM schedules WHERE id = ?").get(a);if(!d)return;let e=b||(0,h.nowIso)(),f=(0,k.F)(d.schedule,e),g=(0,h.nowIso)();c.prepare("UPDATE schedules SET last_run_at=?, next_run_at=?, updated_at=? WHERE id=?").run(e,f,g,a)}(a.id,a.next_run_at)}return{ok:!0,once:a,executed:f.filter(Boolean).length,tasks:f}}async function ay({lastTickAt:a=null,intervalMs:b=3e4}={}){let{recoverStaleHeartbeatTasks:d}=await Promise.resolve().then(c.bind(c,40563));if(null!==a&&Date.now()-a>2*b)try{await d()}catch(a){console.warn("[cron] stale recovery failed:",a?.message||a)}return ax({once:!0})}d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";function d({slug:a,title:b,description:c,category:d="integration",provider:e,scopes:f,prefix:g,extraCredentials:h=[],unlocks:i,healthEndpoint:j,risk:k,tags:l}){let m=`${g}_ACCESS_TOKEN`;return{slug:a,title:b,description:c,category:d,author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:k,tags:l,manifest:{service_key:a,setup_kind:"oauth2",benefit:`Sign in with ${b} to unlock ${i.length} tool${1===i.length?"":"s"}. No code, no .env editing.`,credentials:[{name:`${g}_CLIENT_ID`,label:`${b} client ID`,type:"text",required:!0,help_text:`Create an app on the ${b} developer console and paste its client ID.`},{name:`${g}_CLIENT_SECRET`,label:`${b} client secret`,type:"password",required:!0,help_text:"Stored encrypted in the local vault — never echoed back."},...h],oauth:{provider:e,scopes:f,pkce:"google"===e||"tiktok"===e,redirect_path:`/api/connections/${a}/oauth/callback`,client_id_ref:`${g}_CLIENT_ID`,client_secret_ref:`${g}_CLIENT_SECRET`,access_token_ref:m,refresh_token_ref:`${g}_REFRESH_TOKEN`},health_check:{endpoint:j,method:"GET",expect_status:200,auth:{in:"header",name:"Authorization",prefix:"Bearer ",credential:m}},verify_endpoint:`/api/connections/${a}/verify`,verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:i,engines:[],logo_glyph:a}}}c.d(b,{R2:()=>s,fP:()=>q});let e=[{slug:"anthropic",title:"Anthropic",description:"Power any agent running on the Anthropic engine (Claude Opus, Sonnet, Haiku). Your key is encrypted on this Mac and never leaves the vault.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://console.anthropic.com/settings/keys",version:null,risk_summary:"API key only — no destructive scope.",tags:["engine","anthropic","claude"],manifest:{service_key:"anthropic",setup_kind:"api_key",benefit:"Unlock the Anthropic engine for sub-agents and the main agent. Required for /api/orchestrator/command on default mode.",credentials:[{name:"ANTHROPIC_API_KEY",label:"API key",type:"password",placeholder:"sk-ant-…",help_url:"https://console.anthropic.com/settings/keys",help_text:"Generate a key in the Anthropic console.",required:!0}],verify_endpoint:"/api/connections/anthropic/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["anthropic"],logo_glyph:"anthropic"}},{slug:"openai",title:"OpenAI",description:"Use OpenAI models for agents that prefer GPT. Stored encrypted; never echoed back.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.openai.com/api-keys",version:null,risk_summary:"API key only.",tags:["engine","openai","gpt"],manifest:{service_key:"openai",setup_kind:"api_key",benefit:"Unlock OpenAI models for agents and transcription.",credentials:[{name:"OPENAI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.openai.com/api-keys",help_text:"Create a key in the OpenAI dashboard.",required:!0}],verify_endpoint:"/api/connections/openai/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["openai"],logo_glyph:"openai"}},{slug:"kimi",title:"Kimi (Moonshot)",description:"Connect Moonshot AI — Kimi models for long-context Chinese + English reasoning. Stored encrypted.",category:"engine",author:"madarx",source_kind:"builtin",source_url:"https://platform.moonshot.ai/console/api-keys",version:null,risk_summary:"API key only.",tags:["engine","kimi","moonshot"],manifest:{service_key:"kimi",setup_kind:"api_key",benefit:"Unlock Kimi (Moonshot) models for the kimi engine.",credentials:[{name:"KIMI_API_KEY",label:"API key",type:"password",placeholder:"sk-…",help_url:"https://platform.moonshot.ai/console/api-keys",help_text:"Create a key in the Moonshot console.",required:!0}],verify_endpoint:"/api/connections/kimi/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:[],engines:["kimi"],logo_glyph:"kimi"}},{slug:"github",title:"GitHub",description:"Unlock 11 GitHub tools: read repos, list PRs, create issues, dispatch workflows, and (with approval) merge PRs. Token is encrypted at rest.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://github.com/settings/tokens",version:null,risk_summary:"Some GitHub tools are irreversible (e.g. gh_pr_merge) and always require approval.",tags:["integration","github","git"],manifest:{service_key:"github",setup_kind:"api_key",benefit:"Unlock 11 GitHub tools across read, issue, and PR workflows.",credentials:[{name:"GITHUB_TOKEN",label:"Personal access token",type:"password",placeholder:"ghp_…",help_url:"https://github.com/settings/tokens",help_text:'To read repos beyond your own, the token must be granted access to them. Fine-grained PAT: under "Repository access" pick the orgs/repos (org owner may need to approve); classic PAT: enable the "repo" scope and, for SSO orgs, click "Authorize" / "Configure SSO" next to the token.',required:!0}],verify_endpoint:"/api/connections/github/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["gh_repo_read","gh_repo_list","gh_issue_list","gh_issue_create","gh_issue_comment","gh_pr_list","gh_pr_create","gh_pr_comment","gh_pr_merge","gh_actions_dispatch","gh_release_create"],engines:[],logo_glyph:"github"}},{slug:"resend",title:"Resend",description:"Send transactional email. A default recipient_domain allowlist is seeded from git config user.email — add more in the marketplace afterwards.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://resend.com/api-keys",version:null,risk_summary:"email_send is irreversible and always requires approval.",tags:["integration","email","resend"],manifest:{service_key:"resend",setup_kind:"api_key",benefit:"Unlock email_send and email_status_lookup for transactional email.",credentials:[{name:"RESEND_API_KEY",label:"API key",type:"password",placeholder:"re_…",help_url:"https://resend.com/api-keys",help_text:"Create a Resend API key.",required:!0},{name:"RESEND_FROM_EMAIL",label:"From email",type:"text",placeholder:"agent@yourdomain.com",help_url:"https://resend.com/domains",help_text:"A verified sender address on a verified Resend domain.",required:!0}],verify_endpoint:"/api/connections/resend/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["email_send","email_status_lookup"],engines:[],logo_glyph:"resend"}},{slug:"supabase",title:"Supabase",description:"Connect a Supabase project. Service role key bypasses RLS — destructive ops (supabase_rest_delete, supabase_sql) are always approval-gated.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://supabase.com/dashboard",version:null,risk_summary:"Service role key bypasses Row-Level Security. Some tools (supabase_sql) always require approval.",tags:["integration","database","supabase"],manifest:{service_key:"supabase",setup_kind:"api_key",benefit:"Unlock 7 Supabase tools: REST select/insert/upsert/update/delete, RPC, and SQL.",credentials:[{name:"SUPABASE_URL",label:"Project URL",type:"text",placeholder:"https://xxxx.supabase.co",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → Project URL.",required:!0},{name:"SUPABASE_SERVICE_ROLE_KEY",label:"Service role key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → service_role. Treat as a database password.",required:!1},{name:"SUPABASE_ANON_KEY",label:"Anon key",type:"password",placeholder:"eyJ…",help_url:"https://supabase.com/dashboard",help_text:"Project Settings → API → anon. Used for verify when service-role is absent.",required:!1},{name:"SUPABASE_ACCESS_TOKEN",label:"Personal access token",type:"password",placeholder:"sbp_…",help_url:"https://supabase.com/dashboard/account/tokens",help_text:"Required only if you want the agent to list / manage your Supabase projects via the Management API. Distinct from the project keys above.",required:!1}],verify_endpoint:"/api/connections/supabase/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["supabase_list_projects","supabase_rest_select","supabase_rest_insert","supabase_rest_upsert","supabase_rest_update","supabase_rest_delete","supabase_rpc","supabase_sql"],engines:[],logo_glyph:"supabase"}},{slug:"vercel",title:"Vercel",description:"Trigger deployments and read project state. v1 saves the token without a live verify — failures surface on first call.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://vercel.com/account/tokens",version:null,risk_summary:"vercel_create_deployment is high risk and approval-gated.",tags:["integration","vercel","deploy"],manifest:{service_key:"vercel",setup_kind:"api_key",benefit:"Unlock 3 Vercel tools: list projects, list deployments, create deployment.",credentials:[{name:"VERCEL_TOKEN",label:"Access token",type:"password",placeholder:"vercel_…",help_url:"https://vercel.com/account/tokens",help_text:"Create a token scoped to the right team.",required:!0},{name:"VERCEL_TEAM_ID",label:"Team ID (optional)",type:"text",placeholder:"team_…",help_url:"https://vercel.com/teams",help_text:"Only required for team-scoped tokens.",required:!1}],verify_endpoint:"/api/connections/vercel/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["vercel_list_projects","vercel_list_deployments","vercel_create_deployment"],engines:[],logo_glyph:"vercel"}},{slug:"whatsapp",title:"WhatsApp",description:"Text the main agent like you text Hermes. Pairs a dedicated WhatsApp number via Baileys. Operations (allowlist, message log) live at /whatsapp.",category:"channel",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Pair only a dedicated number — Baileys is an unofficial Web client; the paired account can be banned.",tags:["channel","whatsapp","messaging"],manifest:{service_key:"whatsapp",setup_kind:"qr_pair",benefit:"Receive WhatsApp messages and let the main agent reply through your number.",credentials:[],verify_endpoint:"/api/connections/whatsapp/verify",verify_supported:!0,deep_link:"/whatsapp",requires_daemon:"npm run whatsapp:bridge",supports_scopes:["global"],unlocks_tool_slugs:["whatsapp_send"],engines:[],logo_glyph:"whatsapp"}},{slug:"hermes",title:"Hermes Agent",description:"Route long-running orchestrator jobs to the local Hermes binary. Detection probes ../hermes-agent and scripts/hermes-command.py.",category:"engine",author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:"Local subprocess execution — Hermes jobs inherit your local env.",tags:["engine","hermes","local"],manifest:{service_key:"hermes",setup_kind:"binary_detect",benefit:"Unlock the Hermes engine and the start_hermes_job orchestrator tool.",credentials:[{name:"HERMES_AGENT_DIR",label:"Hermes agent directory (optional)",type:"text",placeholder:"/Users/you/Projects/hermes-agent",help_url:null,help_text:"Defaults to ../hermes-agent relative to this repo. Override to point at a different checkout.",required:!1}],verify_endpoint:"/api/connections/hermes/verify",verify_supported:!0,deep_link:null,supports_scopes:["global"],unlocks_tool_slugs:["start_hermes_job","send_to_hermes"],engines:["hermes"],logo_glyph:"hermes"}},d({slug:"meta-ads",title:"Meta Ads",description:"Build and report on Facebook + Instagram ad campaigns. Campaign/budget writes are always approval-gated.",category:"marketing",provider:"meta",prefix:"META",scopes:["ads_management","ads_read","business_management"],unlocks:["meta_ads.insights_read","meta_ads.campaign_create","meta_ads.adset_create","meta_ads.budget_set"],healthEndpoint:"https://graph.facebook.com/v19.0/me",risk:"Campaign create, budget set, and audience create are irreversible and always require approval.",tags:["marketing","ads","meta","oauth"]}),d({slug:"google-ads",title:"Google Ads",description:"Manage Google Ads campaigns and pull GAQL reports. Requires a developer token in addition to OAuth sign-in.",category:"marketing",provider:"google",prefix:"GOOGLE_ADS",scopes:["https://www.googleapis.com/auth/adwords"],extraCredentials:[{name:"GOOGLE_ADS_DEVELOPER_TOKEN",label:"Developer token",type:"password",required:!0,help_text:"Google Ads API access requires a developer token alongside OAuth."}],unlocks:["google_ads.report","google_ads.campaign_create","google_ads.budget_set"],healthEndpoint:"https://googleads.googleapis.com/v17/customers:listAccessibleCustomers",risk:"Campaign create and budget set are irreversible and always require approval.",tags:["marketing","ads","google","oauth"]}),d({slug:"ga4",title:"Google Analytics 4",description:"Read GA4 metrics for marketing reports. Read-only — no external writes.",category:"analytics",provider:"google",prefix:"GA4",scopes:["https://www.googleapis.com/auth/analytics.readonly"],unlocks:["ga4.run_report","ga4.realtime_report"],healthEndpoint:"https://analyticsdata.googleapis.com/v1beta/properties",risk:"Read-only analytics access.",tags:["analytics","ga4","google","oauth"]}),d({slug:"hubspot-crm",title:"HubSpot CRM",description:"Read and (with approval) write contacts, deals, and activity in HubSpot.",category:"sales",provider:"hubspot",prefix:"HUBSPOT",scopes:["crm.objects.contacts.read","crm.objects.deals.read","crm.objects.contacts.write"],unlocks:["hubspot.contacts_read","hubspot.deals_read","hubspot.contact_upsert"],healthEndpoint:"https://api.hubapi.com/crm/v3/objects/contacts",risk:"CRM writes (contact/deal upsert) require approval.",tags:["sales","crm","hubspot","oauth"]}),{slug:"higgsfield",title:"Higgsfield AI",description:"Generate images and videos via Higgsfield AI. Pair once with your API key/secret to unlock the generation tools.",category:"integration",author:"madarx",source_kind:"builtin",source_url:"https://cloud.higgsfield.ai/",version:null,risk_summary:"Generation spends paid Higgsfield credits; both tools stay approval-gated by default.",tags:["integration","media","image-generation","video-generation","higgsfield"],manifest:{service_key:"higgsfield",setup_kind:"api_key",benefit:"Unlock higgsfield_generate_image and higgsfield_generate_video.",credentials:[{name:"HIGGSFIELD_KEY_ID",label:"API key ID",type:"password",placeholder:"key id",help_url:"https://cloud.higgsfield.ai/",help_text:"From your Higgsfield dashboard → API section. Create a key, then copy its ID.",required:!0},{name:"HIGGSFIELD_KEY_SECRET",label:"API key secret",type:"password",placeholder:"key secret",help_url:"https://cloud.higgsfield.ai/",help_text:"The matching secret for the key ID. Stored encrypted in the local vault — never echoed back.",required:!0}],verify_endpoint:"/api/connections/higgsfield/verify",verify_supported:!0,deep_link:null,supports_scopes:["global","project","agent"],unlocks_tool_slugs:["higgsfield_generate_image","higgsfield_product_photoshoot","higgsfield_generate_video"],engines:[],logo_glyph:"higgsfield"}}];e.map(a=>a.slug);let f=[{slug:"web-prototype",title:"Open Design — Web Prototype",description:"Generate a complete production-quality web prototype from a brief."},{slug:"saas-landing",title:"Open Design — SaaS Landing",description:"Build a SaaS landing page with hero, features, social proof, pricing."},{slug:"dashboard",title:"Open Design — Dashboard",description:"Information-dense, hierarchy-driven dashboard scaffold."},{slug:"mobile-app",title:"Open Design — Mobile App",description:"Mobile-first product UI scaffold with touch targets and gestures."},{slug:"social-carousel",title:"Open Design — Social Carousel",description:"Editorial social carousel with platform-aware aspect ratios."},{slug:"magazine-poster",title:"Open Design — Magazine Poster",description:"Editorial magazine/poster typography with high contrast."},{slug:"deck-guizang-editorial",title:"Open Design — Editorial Deck",description:"Guizang editorial-style slide deck system."},{slug:"email-marketing",title:"Open Design — Email Marketing",description:"Transactional/marketing email scaffold with bulletproof HTML."},{slug:"design-brief",title:"Open Design — Design Brief",description:"Structured design brief used to seed the rest of the pipeline."},{slug:"design-review",title:"Open Design — Design Review",description:"Designer's eye plan review and visual QA pass."},{slug:"brand-guidelines",title:"Open Design — Brand Guidelines",description:"Distill or author a brand guidelines book."},{slug:"copywriting",title:"Open Design — Copywriting",description:"High-signal product copywriting craft notes and structure."}],g={slug:"open-design",title:"Open Design (nexu-io)",description:"Vendored design corpus from nexu-io/open-design: craft notes, 130+ skills, ~140 design systems, prompt + design templates. Apache-2.0.",category:"design",author:"nexu-io",source_kind:"github",source_url:"https://github.com/nexu-io/open-design",version:null,risk_summary:"Read-only design content. No code executes; no external writes.",tags:["design","craft","systems","templates","open-source","apache-2.0"],manifest:{item_refs:f.map(a=>`skill:open-design-${a.slug}`),published_count:f.length,license:"Apache-2.0",note:"Vendored under workspace/skills/open-design/. Re-vendor with `npm run vendor:open-design`. See NOTICE.md for attribution."}},h=[{slug:"design-shotgun",title:"Design Shotgun",description:"Generate multiple AI design variants for any UI surface, open a comparison board, and iterate from approved options.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only ideation — no external writes.",tags:["design","mockups","exploration"],manifest:{invocation:"/design-shotgun",file_paths:["skills/design-shotgun/SKILL.md"],trigger_examples:["explore designs","show me design variants","visual brainstorm"]}},{slug:"design-review",title:"Design Review",description:"Visual QA pass on live pages: extracts the design system in use, audits hierarchy, typography, color, and spacing, and proposes fixes.",category:"design",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit — fixes are proposed, not applied.",tags:["design","review","visual-qa"],manifest:{invocation:"/design-review",file_paths:["skills/design-review/SKILL.md"],trigger_examples:["review the design","visual QA","audit this page"]}},{slug:"qa-only",title:"QA Only",description:"Systematically QA a web app and produce a structured report with health score, screenshots, and repro steps. Never modifies code.",category:"review",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Report-only — no auto-fix.",tags:["qa","testing","report"],manifest:{invocation:"/qa-only",file_paths:["skills/qa-only/SKILL.md"],trigger_examples:["just report bugs","qa report only","test but do not fix"]}},{slug:"cso-audit",title:"CSO Audit",description:"Chief Security Officer mode: infrastructure-first security audit covering secrets archaeology, supply chain, OWASP Top 10, and threat modeling.",category:"security",author:"gstack",source_kind:"builtin",source_url:null,version:null,risk_summary:"Read-only audit; never executes destructive commands.",tags:["security","audit","owasp","threat-model"],manifest:{invocation:"/cso",file_paths:["skills/cso/SKILL.md"],trigger_examples:["security audit","threat model","OWASP review"]}}],i=[{slug:"market-research",title:"Market Research",category:"research",description:"Research any market, company, or topic across the web and deliver a cited, structured brief.",tools:["web_search","web_fetch","file_write"],risk_summary:"Read-only research; writes only the report file.",tags:["research","web","brief"],invocation:"/research",trigger_examples:["research this market","competitive landscape for X","brief me on company Y"]},{slug:"competitor-watch",title:"Competitor Watch",category:"research",description:"Track competitor pricing, features, and news on a schedule and alert you when something changes.",tools:["web_fetch","web_extract","email_send"],risk_summary:"Read-only monitoring; sends a summary email.",tags:["research","monitoring","competitive"],invocation:"/watch",trigger_examples:["watch competitor pricing","alert me when X changes","track this page weekly"]},{slug:"inbox-triage",title:"Inbox Triage",category:"comms",description:"Summarize, prioritize, and draft replies across your inbox so you act on what matters first.",tools:["gmail_messages_list","gmail_thread_read","email_send"],risk_summary:"Drafts replies; sending is approval-gated.",tags:["email","inbox","comms"],invocation:"/inbox",trigger_examples:["triage my inbox","summarize unread email","draft replies"]},{slug:"meeting-scheduler",title:"Meeting Scheduler",category:"comms",description:"Find times, schedule meetings, and send invites from your calendar and email.",tools:["calendar_events_list","calendar_event_read","email_send"],risk_summary:"Proposes times; invites are approval-gated.",tags:["calendar","scheduling","comms"],invocation:"/schedule-meeting",trigger_examples:["schedule a meeting","find a time with X","book a call next week"]},{slug:"document-extract",title:"Document Extraction",category:"documents",description:"Pull structured data and key facts from PDFs, documents, and audio into clean, usable output.",tools:["file_read","transcribe_audio","file_write"],risk_summary:"Read-only extraction; writes only the output file.",tags:["documents","extraction","pdf"],invocation:"/extract",trigger_examples:["extract data from this PDF","pull the numbers from these docs","transcribe this audio"]},{slug:"report-builder",title:"Report Builder",category:"documents",description:"Turn raw data and notes into a polished, formatted report or one-pager ready to share.",tools:["file_read","file_write"],risk_summary:"Generates a document; no external writes.",tags:["documents","reporting","writing"],invocation:"/report",trigger_examples:["build a report from this data","write a one-pager","summarize into a deck outline"]},{slug:"database-query",title:"Database Q&A",category:"data",description:"Ask questions of your database in plain English and get answers, tables, and charts.",tools:["supabase_rest_select","supabase_sql"],risk_summary:"Read-only queries by default; writes are approval-gated.",tags:["data","sql","analytics"],invocation:"/ask-data",trigger_examples:["how many orders last month","query the users table","top customers by revenue"]},{slug:"spreadsheet-analysis",title:"Spreadsheet Analysis",category:"data",description:"Clean, analyze, and summarize spreadsheets and CSVs — pivots, trends, and outliers.",tools:["file_read","file_write"],risk_summary:"Local file analysis; no external writes.",tags:["data","spreadsheet","csv"],invocation:"/analyze-sheet",trigger_examples:["analyze this spreadsheet","summarize this CSV","find trends in this data"]},{slug:"web-automation",title:"Web Automation",category:"web",description:"Fill forms, extract data, and run repetitive flows in a real browser, end to end.",tools:["browser_open","browser_act","browser_extract"],risk_summary:"Browser actions are bounded and audited.",tags:["web","automation","browser"],invocation:"/automate-web",trigger_examples:["automate this form","scrape this site","run this flow for each row"]}],j=[{slug:"paid-campaign-build",title:"Paid Campaign Build",category:"marketing",description:"Structure a paid campaign — objective, audiences, ad sets, creative spec, and budget — ready for approval-gated launch.",tools:["create_artifact","web_search"],risk_summary:"Plans campaigns; every publish/budget set stays approval-gated.",tags:["marketing","ads","campaign"],invocation:"/paid-campaign",trigger_examples:["build a Meta campaign","plan a paid launch","structure ad sets"]},{slug:"ads-reporting",title:"Ads Reporting",category:"marketing",description:"Pull spend, CPA, ROAS, and reach from connected ad accounts into one weekly performance report.",tools:["create_artifact","file_write"],risk_summary:"Read-only reporting; no external writes.",tags:["marketing","ads","reporting"],invocation:"/ads-report",trigger_examples:["weekly ads report","how did campaigns perform","ROAS summary"]},{slug:"content-calendar",title:"Content Calendar",category:"content",description:"Plan a multi-channel content calendar with post drafts, captions, and a scheduled queue.",tools:["create_artifact","file_write"],risk_summary:"Drafts and schedules; every publish stays approval-gated.",tags:["content","social","calendar"],invocation:"/content-calendar",trigger_examples:["plan this month of content","build a content calendar","draft social posts"]},{slug:"lead-research",title:"Lead Research",category:"sales",description:"Build a qualified target list, enrich it, and prep a personalized outreach sequence.",tools:["web_search","web_fetch","create_artifact"],risk_summary:"Research + drafts; sequence enrollment and bulk sends are approval-gated.",tags:["sales","outreach","leads"],invocation:"/lead-research",trigger_examples:["build a target list","find leads for X","prep an outreach sequence"]},{slug:"ticket-reply",title:"Ticket Reply",category:"support",description:"Triage support tickets, draft replies in brand voice, and flag escalations.",tools:["gmail_messages_list","file_write"],risk_summary:"Drafts replies; outbound sends/status changes are approval-gated.",tags:["support","helpdesk","tickets"],invocation:"/ticket-reply",trigger_examples:["triage support tickets","draft ticket replies","escalate this ticket"]},{slug:"runway-model",title:"Runway Model",category:"finance",description:"Turn revenue/expense data into a runway model and P&L summary with scenario sensitivity.",tools:["file_read","create_artifact"],risk_summary:"Advisory analysis; any money movement is approval-gated.",tags:["finance","runway","modeling"],invocation:"/runway",trigger_examples:["model our runway","P&L summary","how many months of cash"]}],k=[{slug:"higgsfield-generate",title:"Higgsfield — Generate",invocation:"/higgsfield:generate",upstream:"higgsfield-generate",description:"Generate images and videos across 30+ models (Flux, Kling, Veo, etc.), with Marketing Studio for branded ads and a Virality Predictor for scoring.",trigger_examples:["generate an image","make a video with kling","predict virality"],uses_tools:["higgsfield_generate_image","higgsfield_generate_video"]},{slug:"higgsfield-soul-id",title:"Higgsfield — Soul ID",invocation:"/higgsfield:soul-id",upstream:"higgsfield-soul-id",description:"Train reusable, face-faithful identity models and return reference IDs for use in later generation tasks.",trigger_examples:["train a soul id","create a face identity model","reusable avatar identity"],uses_tools:["higgsfield_generate_image"]},{slug:"higgsfield-product-photoshoot",title:"Higgsfield — Product Photoshoot",invocation:"/higgsfield:product-photoshoot",upstream:"higgsfield-product-photoshoot",description:"Create brand-quality product imagery in 10 modes — studio, lifestyle, Pinterest, hero banner, ad packs, virtual try-on, and more.",trigger_examples:["product photoshoot","studio shots of this product","lifestyle product images"],uses_tools:["higgsfield_product_photoshoot","higgsfield_generate_image"]},{slug:"higgsfield-marketplace-cards",title:"Higgsfield — Marketplace Cards",invocation:"/higgsfield:marketplace-cards",upstream:"higgsfield-marketplace-cards",description:"Generate marketplace product cards with compliant images and A+ style modules.",trigger_examples:["marketplace product card","a+ content module","listing card images"],uses_tools:["higgsfield_generate_image"]}],l={slug:"higgsfield",title:"Higgsfield AI Skills",description:"MIT-licensed image and video generation pack from higgsfield-ai/skills: generate across 30+ models, train Soul ID identities, run product photoshoots, and build marketplace cards.",category:"media",author:"higgsfield-ai",source_kind:"github",source_url:"https://github.com/higgsfield-ai/skills",version:null,risk_summary:"External generation bundle — every skill calls the Higgsfield AI API and needs a Higgsfield API key. No code executes locally, but generation is an external write; keep approval-gated.",tags:["design","media","image-generation","video-generation","higgsfield","mit"],manifest:{item_refs:k.map(a=>`skill:${a.slug}`),published_count:k.length,license:"MIT",requires_connection:"higgsfield",unlocks_tool_slugs:["higgsfield_generate_image","higgsfield_product_photoshoot","higgsfield_generate_video"],install_hint:"npx skills add higgsfield-ai/skills",note:"Requires a Higgsfield API key. Connect Higgsfield (Connections) to add your key, then the generate image/video tools are usable."}},m=[{slug:"gstack",title:"gstack",description:'"Senior engineering team in your terminal." 8 power tools + a stack of specialist skills for design, QA, review, security, and shipping. MIT licensed.',category:"engineering",author:"garrytan",source_kind:"builtin",source_url:"https://github.com/garrytan/gstack",version:null,risk_summary:"Mixed-risk bundle: includes read-only review skills and write-capable workflows (e.g. /ship runs git push). Per-item risk surfaces in Phase 2 when install is wired up.",tags:["engineering","skills-pack","mit"],manifest:{item_refs:["skill:design-shotgun","skill:design-review","skill:qa-only","skill:cso-audit"],published_count:4,license:"MIT",note:"Agent personas in this bundle will surface in the Agent Marketplace when it ships."}}];function n(a,b,c){let d=a.prepare("SELECT id FROM marketplace_items WHERE kind=? AND slug=?").get(b,c.slug),e=d?.id||`${b}:${c.slug}`,f=c.manifest?JSON.stringify(c.manifest):null,g=c.tags?JSON.stringify(c.tags):null;if(d)a.prepare(`
|
|
3250
3262
|
UPDATE marketplace_items
|
|
3251
3263
|
SET title=?, description=?, category=?, author=?, source_kind=?,
|
|
3252
3264
|
source_url=?, version=?, manifest_json=?, risk_summary=?, tags=?
|
|
@@ -3259,7 +3271,7 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
|
|
|
3259
3271
|
`).run(e,b,c.slug,c.title,c.description,c.category,c.author,c.source_kind,c.source_url,c.version,f,c.risk_summary,g,new Date().toISOString());let d=+!!c?.manifest?.default;a.prepare(`
|
|
3260
3272
|
INSERT OR IGNORE INTO marketplace_installations (item_id, installed, installed_at)
|
|
3261
3273
|
VALUES (?, ?, ?)
|
|
3262
|
-
`).run(e,d,d?new Date().toISOString():null)}}let
|
|
3274
|
+
`).run(e,d,d?new Date().toISOString():null)}}let o={slug:"mines",title:"Mines",description:"Mining project analysis: portfolio screening, data interpretation, tiered valuation, market intelligence, and NI 43-101 report packaging.",category:"industry",author:"madarx",source_kind:"builtin",source_url:null,version:"0.1.0",risk_summary:"High-risk valuation and report tools are gated; external providers disabled by default.",tags:["mining","metals","due-diligence","valuation"],manifest:{module_id:"mines",manifest_path:"config/madarx-module.json",agents:["mines-analyst","mines-data-interpreter","mines-valuation-analyst","mines-market-researcher","mines-report-packager"],tools:["mines_project_create","mines_project_read","mines_catalog_import","mines_data_import","mines_document_extract","mines_extract_facts","mines_spatial_index","mines_assumption_validate","mines_valuation_run","mines_sensitivity_run","mines_market_snapshot","mines_report_generate"],skill_packs:["mines-taxonomy-classification","mines-ocr-spanish","mines-tiered-valuation","mines-ni43101-template","mines-provenance-rules"],workflow_templates:["mine-project-intake","mine-valuation","mine-market-trend-monitor","mine-portfolio-screen"],nav:[{label:"Mines",href:"/mines",icon:"Pickaxe",group:"Industry"}]}},p={slug:"business-suite",title:"Business Agent Suite",description:"A whole company in a box: a cross-department roster of business agents, department skill packs, and the connections they need. Marketing, ads, content, sales, support, ops, finance, legal, product, web, analyst, and a Chief of Staff to run the cadence.",category:"business",author:"madarx",source_kind:"builtin",source_url:null,version:"0.1.0",risk_summary:"Agents install with safe built-in tools only. Ad spend, sends, CRM writes, and deploys stay approval-gated and require connecting + granting the matching service first.",tags:["business","company","marketing","sales","ops","starter"],manifest:{module_id:"business-suite",agents:["chief-of-staff","marketing-lead","ads-media-buyer","content-social","sales-bd","customer-support","ops-manager","finance-ops","legal-compliance","product-pm","web-ecommerce","competitor-scout"],tools:["web_search","web_fetch","file_read","file_write","create_artifact","email_send","gmail_messages_list","calendar_events_list","create_workflow_definition"],skill_packs:["market-research","report-builder","paid-campaign-build","ads-reporting","content-calendar","lead-research","ticket-reply","runway-model"],connections:["resend","meta-ads","google-ads","ga4","hubspot-crm"],workflow_templates:[],nav:[]}};function q(a){try{for(let b of i)n(a,"skill",{slug:b.slug,title:b.title,description:b.description,category:b.category,author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:b.risk_summary,tags:b.tags,manifest:{invocation:b.invocation,default:!0,uses_tools:b.tools,trigger_examples:b.trigger_examples}});for(let b of j)n(a,"skill",{slug:b.slug,title:b.title,description:b.description,category:b.category,author:"madarx",source_kind:"builtin",source_url:null,version:null,risk_summary:b.risk_summary,tags:b.tags,manifest:{invocation:b.invocation,uses_tools:b.tools,trigger_examples:b.trigger_examples}});for(let b of h)n(a,"skill",b);for(let b of k)n(a,"skill",{slug:b.slug,title:b.title,description:b.description,category:"media",author:"higgsfield-ai",source_kind:"github",source_url:`https://github.com/higgsfield-ai/skills/tree/main/${b.upstream}`,version:null,risk_summary:"Calls the external Higgsfield AI generation API and requires a Higgsfield API key. Generation is an external write — keep approval-gated.",tags:["design","media","image-generation","video-generation","higgsfield","mit"],manifest:{invocation:b.invocation,upstream_slug:b.upstream,trigger_examples:b.trigger_examples,uses_tools:b.uses_tools,requires_connection:"higgsfield"}});for(let b of(n(a,"bundle",l),m))n(a,"bundle",b);for(let b of f)n(a,"skill",{slug:`open-design-${b.slug}`,title:b.title,description:b.description,category:"design",author:"nexu-io",source_kind:"github",source_url:`https://github.com/nexu-io/open-design/tree/main/skills/${b.slug}`,version:null,risk_summary:"Read-only design corpus — no external writes.",tags:["design","open-design","nexu-io"],manifest:{invocation:`/open-design/${b.slug}`,file_paths:[`workspace/skills/open-design/skills/${b.slug}/SKILL.md`],trigger_examples:[`apply ${b.slug.replace(/-/g," ")}`,"design using open-design"],upstream_slug:b.slug}});n(a,"bundle",g),function(a){try{for(let b of e){let c=a.prepare("SELECT id FROM marketplace_items WHERE kind = 'connection' AND slug = ?").get(b.slug),d=c?.id||`connection:${b.slug}`,e=b.manifest?JSON.stringify(b.manifest):null,f=b.tags?JSON.stringify(b.tags):null;c?a.prepare(`
|
|
3263
3275
|
UPDATE marketplace_items
|
|
3264
3276
|
SET title = ?, description = ?, category = ?, author = ?, source_kind = ?,
|
|
3265
3277
|
source_url = ?, version = ?, manifest_json = ?, risk_summary = ?, tags = ?
|
|
@@ -3272,7 +3284,7 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
|
|
|
3272
3284
|
`).run(d,b.slug,b.title,b.description,b.category,b.author,b.source_kind,b.source_url,b.version,e,b.risk_summary,f,new Date().toISOString()),a.prepare(`
|
|
3273
3285
|
INSERT OR IGNORE INTO marketplace_installations (item_id, installed)
|
|
3274
3286
|
VALUES (?, 0)
|
|
3275
|
-
`).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),
|
|
3287
|
+
`).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),n(a,"module",o),n(a,"module",p)}catch(a){console.warn("[marketplace-seeds] seed failed:",a?.message||a)}}i.map(a=>a.slug);let r=["research","comms","documents","data","web"];function s(){let a=a=>a.charAt(0).toUpperCase()+a.slice(1),b=["## Default skills","","You ship with these ready-to-use business skills. Reach for them by intent;","each is backed by your enabled tools and stays within the usual approval gates.",""];for(let c of function(){let a=new Map;for(let b of i)a.has(b.category)||a.set(b.category,[]),a.get(b.category).push(b.slug);return r.filter(b=>a.has(b)).map(b=>({category:b,count:a.get(b).length,names:a.get(b)}))}()){for(let d of(b.push(`### ${a(c.category)}`),c.names)){let a=i.find(a=>a.slug===d);a&&b.push(`- **${a.title}** (\`${a.invocation}\`) — ${a.description} _Tools: ${a.tools.join(", ")}._`)}b.push("")}return b.join("\n").trimEnd()+"\n"}j.map(a=>a.slug),h.map(a=>a.slug),m.map(a=>a.slug),k.map(a=>a.slug),l.slug,f.map(a=>`open-design-${a.slug}`),g.slug},61423:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DJ:()=>j,Im:()=>u,Ip:()=>n,Rt:()=>p,Sk:()=>B,U1:()=>s,W6:()=>o,ct:()=>l,gA:()=>q,hF:()=>r,jz:()=>x,vr:()=>t,xx:()=>w,yK:()=>y});var e=c(73024),f=c(76760),g=c(34255),h=c(9381),i=a([g]);g=(i.then?(await i)():i)[0];let z=f.join(h.nJ,"disk"),A=f.join(h.nJ,".default-project-seeded"),B="personal",C=["agents","agent_template_installations","agent_memory","disk_files","disk_folders","missions","transcripts","artifacts","heartbeat_tasks","approval_requests","audit_logs","activity_log","tool_egress","secrets"];function j(a){return String(a||"project").toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"project"}function k(a){return a?{...a}:null}function l(a){return f.join(h.un,"projects",a)}function m(a,b=900){let c=String(a||"").replace(/\s+/g," ").trim();return c.length>b?`${c.slice(0,b).trim()}...`:c}let D=new Set(["md","markdown","text","txt","html","htm"]);function n(a,b={}){if(!a)throw Error("project_id is required");let c=(0,g.getDb)(),d=(0,g.newId)("activity"),e=b.created_at||(0,g.nowIso)(),f=void 0!==b.folder_id?b.folder_id:b.details&&void 0!==b.details.folder_id?b.details.folder_id:null,h={title:b.title||b.summary||"Project update",summary:b.summary||b.title||"Project update",status:b.status||null,source:b.source||"system",update_kind:b.update_kind||null,...b.details,folder_id:f};return c.prepare(`
|
|
3276
3288
|
INSERT INTO activity_log
|
|
3277
3289
|
(id, actor_type, actor_id, agent_id, run_id, entity_type, entity_id, action, details_json, created_at, project_id)
|
|
3278
3290
|
VALUES (?, ?, ?, ?, ?, 'project', ?, ?, ?, ?, ?)
|
|
@@ -3297,7 +3309,165 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
|
|
|
3297
3309
|
`).all(c.id),u=Math.max(12,Math.min(500,Number(b.changelogLimit)||200)),v=o(c.id,{limit:u}),w=function(a=[]){let b={root:[]};for(let c of a){let a=(c.details?.folder_id??null)||"root";b[a]||(b[a]=[]),b[a].push(c)}return b}(v);return{project:c,folders:k,files:j,artifacts:l,libraryItems:[...j,...l].sort((a,b)=>String(b.updated_at||b.created_at||"").localeCompare(String(a.updated_at||a.created_at||""))).slice(0,2*i),agents:n,activeTasks:Number(q),activeMissions:Number(r),recentRuns:t,changelog:v,changelogByFolder:w,counts:{folders:k.length,files:d.prepare("SELECT COUNT(*) AS count FROM disk_files WHERE project_id = ?").get(c.id)?.count||0,artifacts:d.prepare("SELECT COUNT(*) AS count FROM artifacts WHERE project_id = ?").get(c.id)?.count||0,localOnly:d.prepare("SELECT COUNT(*) AS count FROM disk_files WHERE project_id = ? AND local_only = 1").get(c.id)?.count||0,agents:n.length,activeTasks:Number(q),activeMissions:Number(r)}}}function q(a={}){let b=String(a.name||"").trim();if(!b)throw Error("name is required");let c=(0,g.getDb)(),d=a.slug?j(a.slug):j(b);if(a.slug&&c.prepare("SELECT 1 FROM projects WHERE slug = ?").get(d)){let a=Error("project slug already exists");throw a.code="PROJECT_SLUG_EXISTS",a}let h=a.slug?d:function(a,b){let c=j(b),d=2;for(;a.prepare("SELECT 1 FROM projects WHERE slug = ?").get(c);)c=`${j(b)}-${d++}`;return c}(c,d),i=a.id||h,k=function(a,b){let c=String(a||"").trim();if(!c)return l(b);let d=c.startsWith("~")?f.join(process.env.HOME||"",c.slice(1)):c;if(!f.isAbsolute(d)){let a=Error("folder_path must be an absolute path (or start with ~)");throw a.code="PROJECT_FOLDER_NOT_ABSOLUTE",a}return f.normalize(d)}(a.folder_path,h);try{e.mkdirSync(k,{recursive:!0})}catch(b){let a=Error(`failed to create project folder: ${b.message}`);throw a.code="PROJECT_FOLDER_MKDIR_FAILED",a.cause=b,a}let m=(0,g.nowIso)();return c.prepare(`
|
|
3298
3310
|
INSERT INTO projects (id, slug, name, color, description, status, folder_path, created_at)
|
|
3299
3311
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
3300
|
-
`).run(i,h,b,a.color||"#111318",a.description||null,a.status||"active",k,m),y(i,h),s(h)}function r(a={}){let b=(0,g.getDb)(),c=a.status||"active";return"all"===c?b.prepare("SELECT * FROM projects ORDER BY status ASC, created_at ASC").all().map(k):b.prepare("SELECT * FROM projects WHERE status = ? ORDER BY created_at ASC").all(c).map(k)}function s(a){let b=(0,g.getDb)();return k(b.prepare("SELECT * FROM projects WHERE id = ? OR slug = ? LIMIT 1").get(a,a))}function t(a,b={}){let c=s(a);if(!c)return null;let d=["name","color","description","status","folder_path"],e=Object.entries(b).filter(([a,b])=>d.includes(a)&&void 0!==b);if(!e.length)return c;let f=e.map(([a])=>`${a} = ?`).join(", "),h=e.map(([,a])=>a);return(0,g.getDb)().prepare(`UPDATE projects SET ${f} WHERE id = ?`).run(...h,c.id),s(c.id)}function u(a){let b=s(a);if(!b)return null;if(b.id===B){let a=Error("The Personal project is the default scope and cannot be archived.");throw a.code="PROJECT_PROTECTED",a}return t(a,{status:"archived"})}function v(a=(0,g.getDb)()){try{return a.prepare("UPDATE artifacts SET project_id = ? WHERE project_id IS NULL OR project_id = ''").run(B).changes||0}catch{return 0}}function w(a){let b=s(a);if(!b)return{deleted:!1,reason:"not_found"};if(b.id===B){let a=Error("The Personal project is the default scope and cannot be deleted.");throw a.code="PROJECT_PROTECTED",a}let c=(0,g.getDb)();c.exec("BEGIN");try{for(let a of C)try{c.prepare(`DELETE FROM ${a} WHERE project_id = ?`).run(b.id)}catch(a){if(!/no such (table|column)/i.test(String(a?.message||a)))throw a}c.prepare("DELETE FROM projects WHERE id = ?").run(b.id),c.exec("COMMIT")}catch(a){try{c.exec("ROLLBACK")}catch{}throw a}try{let a=f.join(z,b.slug);e.rmSync(a,{recursive:!0,force:!0})}catch{}return{deleted:!0,project:b}}function x(a=(0,g.getDb)()){let b=a.prepare("SELECT * FROM projects WHERE id = 'personal' OR slug = 'personal'").get();if(b){if(!b.folder_path){let c=l(b.slug);try{e.mkdirSync(c,{recursive:!0})}catch{}a.prepare("UPDATE projects SET folder_path = ? WHERE id = ?").run(c,b.id)}return y(b.id,b.slug,a),v(a),k(a.prepare("SELECT * FROM projects WHERE id = 'personal'").get())}let c=(()=>{try{return e.existsSync(A)}catch{return!1}})(),d=a.prepare("SELECT 1 FROM projects LIMIT 1").get();if(c||d)return null;let f=(0,g.nowIso)(),h=l(B);try{e.mkdirSync(h,{recursive:!0})}catch{}a.prepare("INSERT INTO projects (id, slug, name, color, description, status, folder_path, created_at) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)").run(B,B,"Personal","#c2452a","Your personal project — keep agents, files, memory, and integrations scoped to you.",h,f),y(B,B,a),v(a);try{e.writeFileSync(A,f)}catch{}return k(a.prepare("SELECT * FROM projects WHERE id = ?").get(B))}function y(a,b,c=(0,g.getDb)()){try{let d=c.prepare("SELECT id FROM disk_folders WHERE project_id = ? AND parent_id IS NULL LIMIT 1").get(a);if(d)return d.id;let e=`df-root-${a}`.replace(/[^a-zA-Z0-9_-]/g,"-"),f=(0,g.nowIso)();return c.prepare("INSERT INTO disk_folders (id, project_id, parent_id, name, path, created_at, updated_at) VALUES (?, ?, NULL, ?, ?, ?, ?)").run(e,a,b||a,`/${b||a}/`,f,f),e}catch{return null}}d()}catch(a){d(a)}})},63289:(a,b,c)=>{"use strict";c.d(b,{S:()=>g});let d=/<\s*tool_(call|response)\s*>/i,e=/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/i,f=/"(snippet|tool_response)"\s*:/i;function g(a){let b=String(a||"").replace(/```[\s\S]*?```/g," ").replace(/~~~[\s\S]*?~~~/g," ").replace(/`[^`\n]*`/g," ");return!!b.trim()&&(!!(d.test(b)||e.test(b)&&((b.match(/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/gi)||[]).length>=2||f.test(b)))||!1)}},65451:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{resolveAnthropicApiKey:()=>g});var e=c(24516),f=a([e]);function g(){try{let a=(0,e.getSecret)("ANTHROPIC_API_KEY");if(a)return a}catch{}return process.env.ANTHROPIC_API_KEY||null}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},
|
|
3312
|
+
`).run(i,h,b,a.color||"#111318",a.description||null,a.status||"active",k,m),y(i,h),s(h)}function r(a={}){let b=(0,g.getDb)(),c=a.status||"active";return"all"===c?b.prepare("SELECT * FROM projects ORDER BY status ASC, created_at ASC").all().map(k):b.prepare("SELECT * FROM projects WHERE status = ? ORDER BY created_at ASC").all(c).map(k)}function s(a){let b=(0,g.getDb)();return k(b.prepare("SELECT * FROM projects WHERE id = ? OR slug = ? LIMIT 1").get(a,a))}function t(a,b={}){let c=s(a);if(!c)return null;let d=["name","color","description","status","folder_path"],e=Object.entries(b).filter(([a,b])=>d.includes(a)&&void 0!==b);if(!e.length)return c;let f=e.map(([a])=>`${a} = ?`).join(", "),h=e.map(([,a])=>a);return(0,g.getDb)().prepare(`UPDATE projects SET ${f} WHERE id = ?`).run(...h,c.id),s(c.id)}function u(a){let b=s(a);if(!b)return null;if(b.id===B){let a=Error("The Personal project is the default scope and cannot be archived.");throw a.code="PROJECT_PROTECTED",a}return t(a,{status:"archived"})}function v(a=(0,g.getDb)()){try{return a.prepare("UPDATE artifacts SET project_id = ? WHERE project_id IS NULL OR project_id = ''").run(B).changes||0}catch{return 0}}function w(a){let b=s(a);if(!b)return{deleted:!1,reason:"not_found"};if(b.id===B){let a=Error("The Personal project is the default scope and cannot be deleted.");throw a.code="PROJECT_PROTECTED",a}let c=(0,g.getDb)();c.exec("BEGIN");try{for(let a of C)try{c.prepare(`DELETE FROM ${a} WHERE project_id = ?`).run(b.id)}catch(a){if(!/no such (table|column)/i.test(String(a?.message||a)))throw a}c.prepare("DELETE FROM projects WHERE id = ?").run(b.id),c.exec("COMMIT")}catch(a){try{c.exec("ROLLBACK")}catch{}throw a}try{let a=f.join(z,b.slug);e.rmSync(a,{recursive:!0,force:!0})}catch{}return{deleted:!0,project:b}}function x(a=(0,g.getDb)()){let b=a.prepare("SELECT * FROM projects WHERE id = 'personal' OR slug = 'personal'").get();if(b){if(!b.folder_path){let c=l(b.slug);try{e.mkdirSync(c,{recursive:!0})}catch{}a.prepare("UPDATE projects SET folder_path = ? WHERE id = ?").run(c,b.id)}return y(b.id,b.slug,a),v(a),k(a.prepare("SELECT * FROM projects WHERE id = 'personal'").get())}let c=(()=>{try{return e.existsSync(A)}catch{return!1}})(),d=a.prepare("SELECT 1 FROM projects LIMIT 1").get();if(c||d)return null;let f=(0,g.nowIso)(),h=l(B);try{e.mkdirSync(h,{recursive:!0})}catch{}a.prepare("INSERT INTO projects (id, slug, name, color, description, status, folder_path, created_at) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)").run(B,B,"Personal","#c2452a","Your personal project — keep agents, files, memory, and integrations scoped to you.",h,f),y(B,B,a),v(a);try{e.writeFileSync(A,f)}catch{}return k(a.prepare("SELECT * FROM projects WHERE id = ?").get(B))}function y(a,b,c=(0,g.getDb)()){try{let d=c.prepare("SELECT id FROM disk_folders WHERE project_id = ? AND parent_id IS NULL LIMIT 1").get(a);if(d)return d.id;let e=`df-root-${a}`.replace(/[^a-zA-Z0-9_-]/g,"-"),f=(0,g.nowIso)();return c.prepare("INSERT INTO disk_folders (id, project_id, parent_id, name, path, created_at, updated_at) VALUES (?, ?, NULL, ?, ?, ?, ?)").run(e,a,b||a,`/${b||a}/`,f,f),e}catch{return null}}d()}catch(a){d(a)}})},63289:(a,b,c)=>{"use strict";c.d(b,{S:()=>g});let d=/<\s*tool_(call|response)\s*>/i,e=/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/i,f=/"(snippet|tool_response)"\s*:/i;function g(a){let b=String(a||"").replace(/```[\s\S]*?```/g," ").replace(/~~~[\s\S]*?~~~/g," ").replace(/`[^`\n]*`/g," ");return!!b.trim()&&(!!(d.test(b)||e.test(b)&&((b.match(/\{\s*"name"\s*:\s*"[a-z0-9._-]+"\s*,\s*"(parameters|arguments)"\s*:/gi)||[]).length>=2||f.test(b)))||!1)}},65451:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{resolveAnthropicApiKey:()=>g});var e=c(24516),f=a([e]);function g(){try{let a=(0,e.getSecret)("ANTHROPIC_API_KEY");if(a)return a}catch{}return process.env.ANTHROPIC_API_KEY||null}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},66469:(a,b,c)=>{"use strict";function d(a){return String(a??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function e(a=[],b={}){let c=(Array.isArray(a)?a:[]).filter(a=>a&&a.url),f=d(b.title||"Higgsfield"),g=d(b.caption||""),h=c.map(a=>{let b=d(a.url);return"video"===a.kind?`<video class="media" src="${b}" controls loop muted playsinline poster="${d(a.thumbnail||"")}"></video>`:`<a class="frame" href="${b}" target="_blank" rel="noopener"><img class="media" src="${b}" alt="${g||"Generated media"}" loading="lazy" /></a>`}).join("\n");return`<!DOCTYPE html>
|
|
3313
|
+
<html lang="en">
|
|
3314
|
+
<head>
|
|
3315
|
+
<meta charset="utf-8" />
|
|
3316
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
3317
|
+
<title>${f}</title>
|
|
3318
|
+
<style>
|
|
3319
|
+
:root { --onyx:#0f0f10; --graphite:#1b1b1e; --bone:#f4f1ea; --muted:#9a968d; --mars:#d4452f; --line:#2a2a2e; }
|
|
3320
|
+
* { box-sizing:border-box; margin:0; padding:0; }
|
|
3321
|
+
body { background:radial-gradient(120% 100% at 50% 0%, #161618 0%, var(--onyx) 60%); color:var(--bone);
|
|
3322
|
+
font-family:ui-sans-serif,-apple-system,"SF Pro Text","Segoe UI",system-ui,sans-serif; min-height:100vh;
|
|
3323
|
+
padding:clamp(20px,4vw,48px); display:flex; flex-direction:column; align-items:center; gap:18px; }
|
|
3324
|
+
.head { width:min(960px,100%); display:flex; align-items:baseline; justify-content:space-between; gap:16px; }
|
|
3325
|
+
.brand { font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:var(--muted); }
|
|
3326
|
+
.brand b { color:var(--bone); font-weight:600; }
|
|
3327
|
+
.grid { width:min(960px,100%); display:grid; gap:14px;
|
|
3328
|
+
grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); }
|
|
3329
|
+
.frame { display:block; border:1px solid var(--line); border-radius:16px; overflow:hidden; background:#0b0b0c;
|
|
3330
|
+
box-shadow:0 30px 80px -45px rgba(0,0,0,.9); }
|
|
3331
|
+
.media { display:block; width:100%; height:auto; max-height:78vh; object-fit:contain; background:#0b0b0c; }
|
|
3332
|
+
.cap { width:min(960px,100%); font-size:14px; line-height:1.5; color:#d9d5cc; }
|
|
3333
|
+
.report { width:min(960px,100%); border-top:1px solid var(--line); padding-top:16px; }
|
|
3334
|
+
.report summary { cursor:pointer; color:var(--muted); font-size:12px; letter-spacing:.08em; text-transform:uppercase; }
|
|
3335
|
+
.report-body { margin-top:12px; font-size:13.5px; line-height:1.55; color:#cfcabf; }
|
|
3336
|
+
.report-body table { border-collapse:collapse; width:100%; margin:8px 0; }
|
|
3337
|
+
.report-body td, .report-body th { border:1px solid var(--line); padding:6px 9px; text-align:left; }
|
|
3338
|
+
</style>
|
|
3339
|
+
</head>
|
|
3340
|
+
<body>
|
|
3341
|
+
<header class="head"><span class="brand"><b>Higgsfield</b> · ${f}</span></header>
|
|
3342
|
+
<div class="grid">${h||'<p class="cap">No media returned.</p>'}</div>
|
|
3343
|
+
${g?`<p class="cap">${g}</p>`:""}
|
|
3344
|
+
${b.reportHtml?`<details class="report"><summary>Design spec & notes</summary><div class="report-body">${b.reportHtml}</div></details>`:""}
|
|
3345
|
+
</body>
|
|
3346
|
+
</html>`}function f(a={},b={}){let c="video"===b.kind?"video":"image",e=d(a.url||""),g=d(b.prompt||""),h=d(a.status||"completed"),i="video"===c?"Video":"Image",j="video"===c?`<video class="media" src="${e}" controls autoplay loop muted playsinline poster="${d(a.thumbnail||"")}"></video>`:`<img class="media" src="${e}" alt="${g||"Generated image"}" />`,k=g?`<p class="prompt">${g}</p>`:"";return`<!DOCTYPE html>
|
|
3347
|
+
<html lang="en">
|
|
3348
|
+
<head>
|
|
3349
|
+
<meta charset="utf-8" />
|
|
3350
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
3351
|
+
<title>Higgsfield ${i}</title>
|
|
3352
|
+
<style>
|
|
3353
|
+
:root {
|
|
3354
|
+
--onyx: #0f0f10;
|
|
3355
|
+
--graphite: #1b1b1e;
|
|
3356
|
+
--bone: #f4f1ea;
|
|
3357
|
+
--muted: #9a968d;
|
|
3358
|
+
--mars: #d4452f;
|
|
3359
|
+
--line: #2a2a2e;
|
|
3360
|
+
}
|
|
3361
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
3362
|
+
body {
|
|
3363
|
+
background: radial-gradient(120% 100% at 50% 0%, #161618 0%, var(--onyx) 60%);
|
|
3364
|
+
color: var(--bone);
|
|
3365
|
+
font-family: ui-sans-serif, -apple-system, "SF Pro Text", "Segoe UI", system-ui, sans-serif;
|
|
3366
|
+
min-height: 100vh;
|
|
3367
|
+
display: flex;
|
|
3368
|
+
align-items: center;
|
|
3369
|
+
justify-content: center;
|
|
3370
|
+
padding: clamp(20px, 5vw, 56px);
|
|
3371
|
+
}
|
|
3372
|
+
.card {
|
|
3373
|
+
width: min(880px, 100%);
|
|
3374
|
+
background: var(--graphite);
|
|
3375
|
+
border: 1px solid var(--line);
|
|
3376
|
+
border-radius: 18px;
|
|
3377
|
+
overflow: hidden;
|
|
3378
|
+
box-shadow: 0 30px 80px -40px rgba(0,0,0,0.9);
|
|
3379
|
+
}
|
|
3380
|
+
.head {
|
|
3381
|
+
display: flex;
|
|
3382
|
+
align-items: baseline;
|
|
3383
|
+
justify-content: space-between;
|
|
3384
|
+
gap: 16px;
|
|
3385
|
+
padding: 18px 22px;
|
|
3386
|
+
border-bottom: 1px solid var(--line);
|
|
3387
|
+
}
|
|
3388
|
+
.brand {
|
|
3389
|
+
font-size: 12px;
|
|
3390
|
+
letter-spacing: 0.18em;
|
|
3391
|
+
text-transform: uppercase;
|
|
3392
|
+
color: var(--muted);
|
|
3393
|
+
}
|
|
3394
|
+
.brand b { color: var(--bone); font-weight: 600; }
|
|
3395
|
+
.status {
|
|
3396
|
+
font-size: 11px;
|
|
3397
|
+
letter-spacing: 0.12em;
|
|
3398
|
+
text-transform: uppercase;
|
|
3399
|
+
color: var(--mars);
|
|
3400
|
+
display: inline-flex;
|
|
3401
|
+
align-items: center;
|
|
3402
|
+
gap: 7px;
|
|
3403
|
+
}
|
|
3404
|
+
.status::before {
|
|
3405
|
+
content: "";
|
|
3406
|
+
width: 7px; height: 7px; border-radius: 50%;
|
|
3407
|
+
background: var(--mars);
|
|
3408
|
+
}
|
|
3409
|
+
.stage {
|
|
3410
|
+
background: #0b0b0c;
|
|
3411
|
+
display: flex;
|
|
3412
|
+
align-items: center;
|
|
3413
|
+
justify-content: center;
|
|
3414
|
+
padding: 0;
|
|
3415
|
+
}
|
|
3416
|
+
.media {
|
|
3417
|
+
display: block;
|
|
3418
|
+
width: 100%;
|
|
3419
|
+
max-height: 70vh;
|
|
3420
|
+
object-fit: contain;
|
|
3421
|
+
background: #0b0b0c;
|
|
3422
|
+
}
|
|
3423
|
+
.foot { padding: 18px 22px 22px; }
|
|
3424
|
+
.prompt {
|
|
3425
|
+
font-size: 15px;
|
|
3426
|
+
line-height: 1.55;
|
|
3427
|
+
color: #d9d5cc;
|
|
3428
|
+
}
|
|
3429
|
+
.meta {
|
|
3430
|
+
margin-top: 14px;
|
|
3431
|
+
display: flex;
|
|
3432
|
+
flex-wrap: wrap;
|
|
3433
|
+
gap: 10px;
|
|
3434
|
+
}
|
|
3435
|
+
.pill {
|
|
3436
|
+
font-size: 12px;
|
|
3437
|
+
color: var(--muted);
|
|
3438
|
+
border: 1px solid var(--line);
|
|
3439
|
+
border-radius: 999px;
|
|
3440
|
+
padding: 5px 11px;
|
|
3441
|
+
}
|
|
3442
|
+
.open {
|
|
3443
|
+
margin-top: 16px;
|
|
3444
|
+
display: inline-block;
|
|
3445
|
+
font-size: 13px;
|
|
3446
|
+
color: var(--bone);
|
|
3447
|
+
text-decoration: none;
|
|
3448
|
+
border-bottom: 1px solid var(--mars);
|
|
3449
|
+
padding-bottom: 2px;
|
|
3450
|
+
}
|
|
3451
|
+
</style>
|
|
3452
|
+
</head>
|
|
3453
|
+
<body>
|
|
3454
|
+
<main class="card">
|
|
3455
|
+
<header class="head">
|
|
3456
|
+
<span class="brand"><b>Higgsfield</b> · ${i}</span>
|
|
3457
|
+
<span class="status">${h}</span>
|
|
3458
|
+
</header>
|
|
3459
|
+
<div class="stage">${j}</div>
|
|
3460
|
+
<div class="foot">
|
|
3461
|
+
${k}
|
|
3462
|
+
<div class="meta">
|
|
3463
|
+
<span class="pill">Source: Higgsfield AI</span>
|
|
3464
|
+
<span class="pill">Type: ${i}</span>
|
|
3465
|
+
</div>
|
|
3466
|
+
${e?`<a class="open" href="${e}" target="_blank" rel="noopener">Open original</a>`:""}
|
|
3467
|
+
</div>
|
|
3468
|
+
</main>
|
|
3469
|
+
</body>
|
|
3470
|
+
</html>`}c.d(b,{i:()=>f,o:()=>e})},67179:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{getConfig:()=>g,setConfig:()=>h});var e=c(34255),f=a([e]);function g(a,b=null){if(!a)return b;let c=(0,e.getDb)().prepare("SELECT value FROM config WHERE key = ?").get(String(a));return c?c.value:b}function h(a,b){if(!a)throw Error("config key is required");let c=null==b?"":String(b);return(0,e.getDb)().prepare(`
|
|
3301
3471
|
INSERT INTO config (key, value) VALUES (?, ?)
|
|
3302
3472
|
ON CONFLICT(key) DO UPDATE SET value = excluded.value
|
|
3303
3473
|
`).run(String(a),c),c}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},68732:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{x:()=>k,y:()=>l});var e=c(31421),f=c(60105),g=c(8437),h=c(26531),i=a([f,g]);function j(a){return(0,h.nc)(String(a||"").slice(0,Number(process.env.MADARX_TOOL_OUTPUT_MAX_BYTES||5e4)))}function k(a={}){let b=String(a.command||""),c=Array.isArray(a.args)?a.args.map(String):[],{path:d}=(0,h.hC)(a.cwd||"."),e=(0,h.IB)(b,c);if(e.blocked)throw Error(e.reason);return{command:b,args:c,cwd:d,classified:e}}async function l(a={},b={}){let{command:c,args:d,cwd:h,classified:i}=k(a);if(i.approval_required&&!b.owner_trusted&&!(0,g.v)(a.approval_id,{action_type:"terminal_run",matches:a=>{var b;return a.command===c&&(b=a.args,JSON.stringify(b||[])===JSON.stringify(d||[]))&&a.cwd===h}})){let a=(0,g.D6)({action_type:"terminal_run",risk:i.risk,summary:`Run ${c} ${d.join(" ")}`.trim(),payload:{command:c,args:d,cwd:h,reason:i.reason}});return{ok:!1,status:"approval_required",approval_request_id:a.id,reason:i.reason}}let m=Math.max(1,Math.min(6e5,Number(a.timeout_ms||process.env.MADARX_TERMINAL_TIMEOUT_MS||18e4))),n=Date.now();return await new Promise(a=>{let b="",g="",i=(0,e.spawn)(c,d,{cwd:h,shell:!1,stdio:["ignore","pipe","pipe"]}),k=setTimeout(()=>i.kill("SIGTERM"),m);i.stdout.on("data",a=>{b+=a}),i.stderr.on("data",a=>{g+=a}),i.on("error",e=>{clearTimeout(k),(0,f.appendAudit)({type:"local.terminal_run",summary:`terminal_run failed: ${c}`,status:"failed",meta:{command:c,args:d,cwd:h,error:e.message}}),a({ok:!1,tool:"terminal_run",status:"failed",command:c,args:d,cwd:h,error:e.message,stdout:j(b),stderr:j(g)})}),i.on("close",(e,i)=>{clearTimeout(k);let l=i?"timeout":0===e?"complete":"failed";(0,f.appendAudit)({type:"local.terminal_run",summary:`terminal_run ${l}: ${c}`,status:l,meta:{command:c,args:d,cwd:h,exit_code:e,signal:i,duration_ms:Date.now()-n,stdout_preview:j(b),stderr_preview:j(g)}}),a({ok:0===e&&!i,tool:"terminal_run",status:l,command:c,args:d,cwd:h,exit_code:e,signal:i,stdout:j(b),stderr:j(g),duration_ms:Date.now()-n})})})}[f,g]=i.then?(await i)():i,d()}catch(a){d(a)}})},69102:(a,b,c)=>{"use strict";let d,e;c.d(b,{K3:()=>f,rU:()=>l,tj:()=>j});let f=Number(process.env.MINES_OCR_THRESHOLD_CHARS_PER_PAGE)||80,g=process.env.MINES_OCR_LANGS||"spa+eng";async function h(){return void 0===d&&(d=(async()=>{try{return await import("tesseract.js")}catch{return null}})().catch(()=>null)),d}async function i(){return void 0===e&&(e=(async()=>{try{let a=await import("pdf-to-png-converter");if("function"==typeof a?.pdfToPng)return async b=>(await a.pdfToPng(b,{viewportScale:2})).map((a,b)=>({page:a.pageNumber||b+1,buffer:a.content}))}catch{}return null})().catch(()=>null)),e}function j(a,b){let c=b;return(null==c||Number.isNaN(Number(c)))&&(c=String(a??"").trim().length),Number(c)<f}async function k(a,b=g){let c=await h(),d=c?.recognize||c?.default?.recognize;if("function"!=typeof d)return null;try{let{data:c}=await d(a,b);return{text:String(c?.text||""),confidence:Number(c?.confidence??0)}}catch{return null}}async function l(a,b){let c,d=await i(),e=await h();if(!d||!e)return{available:!1,pages:[]};try{c=await d(a)}catch{return{available:!1,pages:[]}}let[f,g]=Array.isArray(b)?b:[null,null],j=[];for(let a of c){if(null!=f&&a.page<f||null!=g&&a.page>g)continue;let b=await k(a.buffer);j.push({page:a.page,text:b?.text||"",confidence:b?.confidence??0})}return{available:!0,pages:j}}},69143:a=>{"use strict";a.exports=JSON.parse('{"schema_version":1,"slug":"contract-review","name":"Contract Review","version":1,"description":"Paste a contract draft and route it through an automated clause review, then counsel approval, then a packaged review report.","category":"legal","source":"marketplace","status":"published","stages":[{"slug":"intake","name":"Contract intake","kind":"intake_form","config":{"form_schema":{"title":"Contract Review — Intake","description":"Paste the contract text and a few details for the reviewer.","fields":[{"name":"counterparty","label":"Counterparty name","type":"text","required":true},{"name":"contract_title","label":"Contract title","type":"text","required":true},{"name":"contract_type","label":"Contract type","type":"select","required":true,"options":["MSA","SOW","NDA","DPA","Order Form","Other"]},{"name":"value_usd","label":"Contract value (USD)","type":"number","required":false,"min":0},{"name":"contract_text","label":"Contract text","type":"textarea","required":true,"min_length":200,"placeholder":"Paste the full contract text here. Minimum 200 characters."},{"name":"notes","label":"Reviewer notes","type":"textarea","required":false}]}}},{"slug":"clause-review","name":"Automated clause review","kind":"agent_run","config":{"agent_template_slug":"contract-reviewer","prompt":"You are a contract reviewer. Read the contract text in the intake payload and produce a structured review. Return strict JSON only, no surrounding prose: { \\"outcome\\": \\"pass\\" | \\"reject\\", \\"flags\\": [{ \\"clause\\": string, \\"severity\\": \\"low\\" | \\"medium\\" | \\"high\\", \\"concern\\": string, \\"suggested_edit\\": string }], \\"overall_recommendation\\": \\"approve\\" | \\"amend\\" | \\"reject\\", \\"summary\\": \\"one paragraph\\" }. Set outcome=\\"reject\\" only when the contract is so broken counsel cannot fix it (corrupted text, wrong document, illegal clauses). Set outcome=\\"pass\\" otherwise — counsel approval is the real gate. Focus on: indemnity scope, liability cap, IP assignment, auto-renewal, termination for convenience, data-processing addendum, governing law. If a clause is missing entirely from the contract, list it as severity high with concern \\"missing\\".","output_schema":"contract_review_v1","timeout_ms":90000,"on_outcome":{"pass":"counsel-approval","reject":"fail"}},"on_pass_stage_slug":"counsel-approval","on_fail_stage_slug":null},{"slug":"counsel-approval","name":"Counsel approval","kind":"human_approval","config":{"action_type":"process.stage.approve","risk":"high","summary_template":"Approve contract review for {{intake.contract_title}} with {{intake.counterparty}} — recommendation {{clause-review.overall_recommendation}}"},"on_pass_stage_slug":"final-package","on_fail_stage_slug":null},{"slug":"final-package","name":"Review report","kind":"package","config":{"title_template":"Contract review — {{intake.contract_title}}","include_stages":["intake","clause-review","counsel-approval"]}}]}')},69286:(a,b,c)=>{"use strict";c.d(b,{XI:()=>e,fd:()=>f,yQ:()=>g});let d=new Map;function e(a){let b=String(a||"");b&&d.set(b,(d.get(b)||0)+1)}function f(a){let b=String(a||"");if(!b)return;let c=(d.get(b)||0)-1;c<=0?d.delete(b):d.set(b,c)}function g(a){return(d.get(String(a||""))||0)>0}},69635:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{f:()=>l,x:()=>k});var e=c(24516),f=c(58282),g=a([e,f]);[e,f]=g.then?(await g)():g;let m="https://api.resend.com";function h(a,b={}){try{let c=(0,e.getSecret)(a,{agent_id:b.agent_id,project_id:b.project_id});if(c)return c}catch{}return process.env[a]||null}function i(a,b={}){let c=h(a,b);if(!c)throw Error(`${a} not configured`);return c}async function j(a){try{let b=await a.json();return b?.message||b?.name||`HTTP ${a.status}`}catch{return`HTTP ${a.status}`}}async function k(a={},b={}){let c=String(a.to||"").trim();if(!c)throw Error('"to" is required');let d=String(a.subject||"").trim();if(!d)throw Error('"subject" is required');if(!a.text&&!a.html)throw Error('Either "text" or "html" body content is required');let e=function(a){let b=String(a||"").trim(),c=b.lastIndexOf("@");return c<0?null:b.slice(c+1).toLowerCase().trim()}(c);if(!e)throw Error(`"to" must be a valid email address containing "@"; got: ${c}`);let g=a.recipient_domain?String(a.recipient_domain).toLowerCase().trim():null;if(!g)throw Error(`"recipient_domain" is required and must be set to "${e}" (the domain of the "to" address). Retry with: { ..., recipient_domain: "${e}" }`);if(g!==e)throw Error(`"recipient_domain" mismatch: declared "${g}" but "to" address "${c}" has domain "${e}". Set recipient_domain: "${e}" and retry.`);let l=i("RESEND_API_KEY",b),n=b.agent_id??null,o=a.from?String(a.from).trim():null;if(o||(o=h("RESEND_FROM_EMAIL",b)),!o)throw Error('Sender address not configured. Set RESEND_FROM_EMAIL via the secrets vault or pass "from" explicitly in the input. Resend\'s test sender (onboarding@resend.dev) requires a verified account.');let p={from:o,to:c,subject:d,...a.text?{text:String(a.text)}:{},...a.html?{html:String(a.html)}:{},...a.reply_to?{reply_to:String(a.reply_to)}:{}},q=(0,f.N)("email_send",n),r=await q(`${m}/emails`,{method:"POST",headers:{Authorization:`Bearer ${l}`,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(p)});if(!r.ok){let a=await j(r);throw Error(`Resend API error (${r.status}): ${a}`)}let s=await r.json();return{ok:!0,id:s.id,to:c,recipient_domain:e}}async function l(a={},b={}){let c=String(a.email_id||"").trim();if(!c)throw Error('"email_id" is required');let d=i("RESEND_API_KEY",b),e=b.agent_id??null,g=(0,f.N)("email_status_lookup",e),h=await g(`${m}/emails/${encodeURIComponent(c)}`,{headers:{Authorization:`Bearer ${d}`,Accept:"application/json"}});if(!h.ok){let a=await j(h);throw Error(`Resend API error (${h.status}): ${a}`)}let k=await h.json();return{id:k.id,to:k.to,from:k.from,subject:k.subject,last_event:k.last_event,created_at:k.created_at}}d()}catch(a){d(a)}})},69722:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{zc:()=>j});var e=c(34255),f=c(18530),g=c(69143),h=c(4249),i=a([e]);e=(i.then?(await i)():i)[0];let k={"vendor-onboarding":f,"contract-review":g,"support-escalation":h},l=[{slug:"vendor-onboarding",title:"Vendor Onboarding",category:"procurement",tags:["workflow","procurement","starter"],risk_summary:"Intake → automated risk review → buyer sign-off → onboarding pack. All write actions are gated by human_approval."},{slug:"contract-review",title:"Contract Review",category:"legal",tags:["workflow","legal","starter"],risk_summary:"Intake → automated clause review → counsel approval (high-risk gate) → review report. Drafts only; no signature step."},{slug:"support-escalation",title:"Support Escalation",category:"support",tags:["workflow","support","starter"],risk_summary:"Intake → automated triage → supervisor sign-off → resolution pack. Customer-visible copy never sent without human approval."}].map(a=>{let b=k[a.slug];return{...a,description:b.description,author:"madarx",source_kind:"builtin",source_url:null,version:"1.0",spec:b}});function j(a){try{for(let b of l)!function(a,b){let c=`workflow:${b.slug}`,d=JSON.stringify({summary:b.description,source_spec_json:b.spec}),f=JSON.stringify(b.tags||[]),g=a.prepare("SELECT id FROM marketplace_items WHERE kind='workflow' AND slug=?").get(b.slug),h=[b.title,b.description,b.category,b.author,b.source_kind,b.source_url,b.version,d,b.risk_summary,f];if(g)return a.prepare("UPDATE marketplace_items SET title=?, description=?, category=?, author=?, source_kind=?, source_url=?, version=?, manifest_json=?, risk_summary=?, tags=? WHERE id=?").run(...h,c);a.prepare("INSERT INTO marketplace_items (id, kind, slug, title, description, category, author, source_kind, source_url, version, manifest_json, risk_summary, tags, created_at) VALUES (?, 'workflow', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(c,b.slug,...h,(0,e.nowIso)()),a.prepare("INSERT OR IGNORE INTO marketplace_installations (item_id, installed) VALUES (?, 0)").run(c)}(a,b)}catch(a){console.warn("[marketplace-workflows] seed failed:",a?.message||a)}}l.map(a=>a.slug),d()}catch(a){d(a)}})},70845:(a,b,c)=>{"use strict";c.d(b,{H:()=>f});var d=c(14972);function e(a,b,c){var e;let f=(0,d.uX)(b);return{label:a,value_usd:f.in_situ_value_usd,delta_pct:(e=f.in_situ_value_usd,null==e||null==c||0===c?null:Math.round((e-c)/c*1e4)/100),assumptions:b}}function f(a={},b={}){let c=(0,d.uX)(a),g=c.in_situ_value_usd,h=Number(b.grade_std_au_gpt??a.grade_std_au_gpt??0)||0,i=Number(b.grade_std_cu_pct??a.grade_std_cu_pct??0)||0,j=Number(b.grade_std_ag_gpt??a.grade_std_ag_gpt??0)||0,k=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},price_au_usd_oz:null==a.price_au_usd_oz?a.price_au_usd_oz:a.price_au_usd_oz*c,price_ag_usd_oz:null==a.price_ag_usd_oz?a.price_ag_usd_oz:a.price_ag_usd_oz*c,price_cu_usd_lb:null==a.price_cu_usd_lb?a.price_cu_usd_lb:a.price_cu_usd_lb*c},g)),l=[["-2σ",-2],["-1σ",-1],["base",0],["+1σ",1],["+2σ",2]].map(([b,c])=>e(b,{...{...a},grade_au_gpt:null==a.grade_au_gpt?a.grade_au_gpt:Math.max(0,a.grade_au_gpt+c*h),grade_ag_gpt:null==a.grade_ag_gpt?a.grade_ag_gpt:Math.max(0,a.grade_ag_gpt+c*j),grade_cu_pct:null==a.grade_cu_pct?a.grade_cu_pct:Math.max(0,a.grade_cu_pct+c*i)},g)),m=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},recovery_au:null==a.recovery_au?a.recovery_au:Math.min(1,Math.max(0,a.recovery_au*c)),recovery_ag:null==a.recovery_ag?a.recovery_ag:Math.min(1,Math.max(0,a.recovery_ag*c)),recovery_cu:null==a.recovery_cu?a.recovery_cu:Math.min(1,Math.max(0,a.recovery_cu*c))},g)),n=[["-20%",.8],["-10%",.9],["base",1],["+10%",1.1],["+20%",1.2]].map(([b,c])=>e(b,{...{...a},in_situ_factor:null==a.in_situ_factor?a.in_situ_factor:a.in_situ_factor*c},g));return{base_value_usd:g,base_result:c,drivers:{commodity_price:k,grade:l,recovery:m,in_situ_factor:n}}}},70952:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{f:()=>n});var e=c(34255),f=c(44986),g=c(69102),h=c(14207),i=a([e,h]);[e,h]=i.then?(await i)():i;let o=Number(process.env.MINES_CHUNK_TOKENS)||600,p=Number(process.env.MINES_CHUNK_OVERLAP_TOKENS)||100;async function j(a){try{switch(a){case"pdf-parse":return await import("pdf-parse");case"mammoth":return await import("mammoth");case"officeparser":return await import("officeparser");default:return null}}catch{return null}}function k(a){return Math.ceil(String(a||"").length/4)}let q=["de","la","el","que","en","los","para","con","del","una","por","se","su"],r=["the","of","and","to","in","for","is","that","with","from","this","are"];function l(a){let b=String(a||"").toLowerCase().split(/[^a-záéíóúñ]+/i).filter(Boolean).slice(0,400);if(b.length<5)return"es";let c=0,d=0;for(let a of b)q.includes(a)&&c++,r.includes(a)&&d++;return d>1.2*c?"en":"es"}async function m(a,b,c,d){if("pdf"===b){let b=await j("pdf-parse"),e="function"==typeof b?b:"function"==typeof b?.default?b.default:null,f=b?.PDFParse||b?.default?.PDFParse||null;if(!e&&!f)return{available:!1,error:"parser_unavailable:pdf",pages:[]};let h=d.readDocument(a),i="",k=1,l=null;try{if(f){let a=new f({data:h}),b=await a.getText();try{a.destroy?.()}catch{}i=String(b?.text||""),k=Number(b?.total)||(Array.isArray(b?.pages)?b.pages.length:1)||1,Array.isArray(b?.pages)&&(l=b.pages.map((a,b)=>({page:Number(a?.num??a?.page??b+1),text:String(a?.text||"")})))}else{let a=await e(h);i=String(a?.text||""),k=Number(a?.numpages)||1}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"pdf"),pages:[]}}let m=i.length/k;if(c||(0,g.tj)(i,m)){let b=await (0,g.rU)(a);return b.available?{available:!0,isScanned:!0,ocrApplied:!0,pageCount:b.pages.length||k,pages:b.pages.map(a=>({page:a.page,text:a.text}))}:{available:!0,isScanned:!0,ocrApplied:!1,ocrSkipped:!0,pageCount:k,pages:[]}}if(l)return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:k,pages:l};let n=i.includes("\f")?i.split("\f"):[i];return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:k,pages:n.map((a,b)=>({page:b+1,text:a}))}}if("docx"===b){let b=await j("mammoth"),c=b?.extractRawText||b?.default?.extractRawText;if("function"!=typeof c)return{available:!1,error:"parser_unavailable:docx",pages:[]};try{let b=await c({path:a});return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:1,pages:[{page:1,text:b?.value||""}]}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"docx"),pages:[]}}}if("pptx"===b){let b=await j("officeparser"),c=b?.parseOfficeAsync||b?.default?.parseOfficeAsync||b?.parseOffice||b?.default?.parseOffice;if("function"!=typeof c)return{available:!1,error:"parser_unavailable:pptx",pages:[]};try{let b=await c(a);return{available:!0,isScanned:!1,ocrApplied:!1,pageCount:1,pages:[{page:1,text:String(b||"")}]}}catch(a){return{available:!0,error:"parse_error:"+(a?.message||"pptx"),pages:[]}}}return{available:!1,error:"unsupported_file_type:"+b,pages:[]}}async function n(a,b={}){let c=a?.source_document_id;if(!c)return{status:"error",error:"source_document_id_required"};let d=(0,e.getDb)(),i=d.prepare("SELECT id, project_id, document_category, original_path, file_type FROM mines_source_documents WHERE id = ?").get(c);if(!i)return{status:"error",error:"source_document_not_found"};let j=d.prepare(`
|
|
@@ -3520,7 +3690,7 @@ ${k}`;try{let a=(c=await (0,e.M2)({systemPrompt:n,userMessage:o,maxTurns:25,time
|
|
|
3520
3690
|
- Voice: ${d||"match the configured brand voice"}.
|
|
3521
3691
|
- Document types: ${e||"reports, briefs, proposals, presentations"}.
|
|
3522
3692
|
- Presentation style: ${a.presentation_style||"follow the configured brand guidelines"}.
|
|
3523
|
-
- Do not invent off-brand palettes, logos, typography, or tone unless the owner explicitly asks for a different brand.`}d()}catch(a){d(a)}})},91937:(a,b,c)=>{"use strict";c.d(b,{ho:()=>l,pE:()=>f});let d=/^[a-z][a-z0-9-]{2,63}$/,e=new Set(["tool_call","llm_synthesis","artifact_write"]),f=["low","medium","high","irreversible_external"],g=/^[a-z][a-z0-9-]{0,63}$/,h=/\{\{([a-z][a-z0-9-]*)/g;function i(a,b,c){a.push(`${b}: ${c}`)}function j(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function k(a){return f.indexOf(a)}function l(a,b={}){let c,m=[],n=[];try{c=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!c||"undefined"===c)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(c,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(c,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!j(a))return{ok:!1,errors:["spec: must be a plain object"],warnings:[],normalized:null};if(a.slug&&"string"==typeof a.slug?d.test(a.slug)||i(m,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, hyphens allowed)`):i(m,"slug","required (string)"),a.title&&"string"==typeof a.title||i(m,"title","required (non-empty string)"),null!=a.description&&"string"!=typeof a.description&&i(m,"description","must be a string"),null==a.input_schema||j(a.input_schema)||i(m,"input_schema","must be a plain object"),!Array.isArray(a.steps)||0===a.steps.length)return i(m,"steps","required (non-empty array)"),{ok:!1,errors:m,warnings:n,normalized:null};if(a.steps.length>25)return i(m,"steps","exceeds 25"),{ok:!1,errors:m,warnings:n,normalized:null};let o=new Set,p="low",q=[];for(let c=0;c<a.steps.length;c++){var r,s;let d,l=a.steps[c],n=`steps[${c}]`;if(!j(l)){i(m,n,"must be a plain object");continue}if(!l.kind||!e.has(l.kind)){i(m,`${n}.kind`,`must be one of ${[...e].join(", ")}`);continue}l.id&&"string"==typeof l.id?g.test(l.id)?o.has(l.id)?i(m,`${n}.id`,`duplicate step id '${l.id}'`):o.add(l.id):i(m,`${n}.id`,`does not match ${g}`):i(m,`${n}.id`,"required (slug-like string)");let t=new Set(o);l.id&&t.delete(l.id);let u={};for(let[a,b]of("tool_call"===l.kind&&j(l.input_template)&&(u.input_template=l.input_template),"artifact_write"===l.kind&&(null!=l.title_template&&(u.title_template=l.title_template),null!=l.content_ref&&(u.content_ref=l.content_ref)),"llm_synthesis"===l.kind&&null!=l.prompt&&(u.prompt=l.prompt),Object.entries(u)))for(let c of function a(b){let c=new Set;if("string"==typeof b){let a;for(h.lastIndex=0;null!==(a=h.exec(b));){let b=a[1];"input"!==b&&c.add(b)}return c}if(j(b))for(let d of Object.values(b))for(let b of a(d))c.add(b);if(Array.isArray(b))for(let d of b)for(let b of a(d))c.add(b);return c}(b))t.has(c)||i(m,n,`references later/unknown step '${c}' in ${a}`);switch(l.kind){case"tool_call":d=function(a,b,c,d){let e;return a.tool&&"string"==typeof a.tool?d.knownToolNames&&!d.knownToolNames.has(a.tool)&&i(b,`${c}.tool`,`unknown tool '${a.tool}'`):i(b,`${c}.tool`,"required (string)"),null==a.input_template||j(a.input_template)||i(b,`${c}.input_template`,"must be a plain object (data only)"),null!=a.risk?f.includes(a.risk)?e=a.risk:(i(b,`${c}.risk`,`must be one of ${f.join(", ")}`),e="medium"):e=d.toolRiskByName&&"string"==typeof a.tool?d.toolRiskByName.get(a.tool)??"medium":"medium",e}(l,m,n,b);break;case"llm_synthesis":l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&i(m,`${n}.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):i(m,`${n}.prompt`,"required (non-empty string)"),d="low";break;case"artifact_write":d="low"}r=p,s=d,p=k(r)>=k(s)?r:s;let v={kind:l.kind,id:l.id};"tool_call"===l.kind?(v.tool=l.tool??null,null!=l.input_template&&(v.input_template=structuredClone(l.input_template)),v.risk=d):"llm_synthesis"===l.kind?v.prompt=l.prompt??null:"artifact_write"===l.kind&&(null!=l.title_template&&(v.title_template=l.title_template),null!=l.content_ref&&(v.content_ref=l.content_ref)),q.push(v)}return m.length>0?{ok:!1,errors:m,warnings:n,normalized:null}:{ok:!0,errors:[],warnings:n,normalized:{slug:a.slug,title:a.title,description:a.description??null,input_schema:null!=a.input_schema?structuredClone(a.input_schema):{type:"object",properties:{}},steps:q,risk_level:p}}}},93154:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{I2:()=>n,Z3:()=>o,cK:()=>p,pz:()=>m,yi:()=>l});var e=c(73024),f=c(76760),g=c(34255),h=c(9381),i=c(60105),j=c(88101),k=a([g,i,j]);[g,i,j]=k.then?(await k)():k;let q=[["project-watcher","Project Watcher","project_watcher","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","web_fetch","file_read"],["investigate","retro"],"Watches repos, issues, PRs, deploys, and produces weekly project pulses."],["personal-assistant","Personal Assistant","personal_assistant","anthropic",["gmail_messages_list","gmail_message_read","calendar_events_list","whatsapp_send"],[],"Reads inbox and calendar context, drafts replies, and keeps the operator organized."],["engineering-lead","Engineering Lead","engineering_lead","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","terminal_run","file_read","file_write"],["investigate","review","ship","qa"],"Leads implementation, review, QA, and preview deploys with explicit approval gates."],["marketing-lead","Marketing Lead","marketing_lead","anthropic",["web_search","web_fetch","file_write","create_artifact"],["design-shotgun","impeccable"],"Creates market research, launch copy, positioning, and design briefs."],["meeting-notes","Meeting Notes Taker","meeting_notes","anthropic",["transcribe_audio","file_write","create_artifact"],[],"Turns recordings into transcripts, decisions, action items, and follow-ups."],["bug-triage","Bug Triage Specialist","bug_triage","claude-code",["gh_issue_list","gh_pr_list","file_read"],["investigate"],"Classifies incoming bugs and proposes severity and next actions."],["phase-runner","Phase Runner","phase_runner","claude-code",["file_read","file_write","terminal_run"],["ship"],"Executes approved implementation phases and reports blockers."],["code-reviewer","Code Reviewer","code_reviewer","claude-code",["file_read","gh_pr_list"],["review"],"Provides independent diff review before merge."],["competitor-scout","Competitor Scout","competitor_scout","anthropic",["web_search","web_fetch","create_artifact"],[],"Tracks competitor movement and summarizes weekly signals."],["finance-ops","Finance and Ops","finance_ops","anthropic",["file_read","create_artifact"],[],"Reads finance docs and drafts advisory runway and ops summaries."],["legal-compliance","Legal and Compliance","legal_compliance","anthropic",["file_read","web_fetch","create_artifact"],[],"Reviews policy and compliance documents as advisory output only."],["customer-support","Customer Support","customer_support","anthropic",["gmail_message_read","file_write"],[],"Drafts customer replies and escalates approval-required sends."],["chief-of-staff","Chief of Staff","chief_of_staff","anthropic",["web_search","file_read","file_write","create_artifact","create_workflow_definition"],["report-builder","market-research"],"Translates founder intent into delegated work across the company, runs the weekly cadence, and surfaces decisions. No direct external writes."],["ads-media-buyer","Ads / Media Buyer","ads_media_buyer","anthropic",["web_search","file_write","create_artifact"],["design-shotgun"],"Plans, builds, and reports on paid campaigns across Meta/Google/TikTok within budget caps. Every campaign publish and budget set is approval-gated."],["content-social","Content / Social Manager","content_social","anthropic",["web_search","file_write","create_artifact","voice_speak"],["design-shotgun"],"Produces and schedules organic posts, reels, and videos and maintains brand voice. Every publish is approval-gated."],["sales-bd","Sales / BD","sales_bd","anthropic",["web_search","web_fetch","gmail_messages_list","email_send","create_artifact"],["inbox-triage"],"Builds target lists, enriches leads, runs outreach, and logs CRM activity. Bulk sends and CRM writes are approval-gated."],["ops-manager","Operations","ops_manager","anthropic",["calendar_events_list","calendar_event_read","file_read","file_write","create_artifact"],["meeting-scheduler","report-builder"],"Keeps the business running — scheduling, internal docs, recurring checklists, vendor coordination. Calendar invites and webhooks are approval-gated."],["product-pm","Product / Project Manager","product_pm","claude-code",["gh_repo_read","gh_issue_list","gh_issue_create","gh_pr_list","file_read","file_write","create_workflow_definition"],["review"],"Maintains the roadmap, writes specs, tracks delivery, and runs standups. Issue/PR creates respect the GitHub allowlist."],["web-ecommerce","Web / Ecommerce","web_ecommerce","claude-code",["web_fetch","supabase_rest_select","browser_open","file_read","file_write","create_artifact"],["web-automation"],"Manages site/store content, products, SEO, and deploys. Deploys, store writes, and DB writes are approval-gated."]].map(([a,b,c,d,e,f,g])=>({slug:a,title:b,role:c,engine_default:d,tools_required:e,tools_optional:[],skills:f,memory_scopes:["agent","project"],approval_profile:"personal_assistant"===c?"strict":"standard",description_long:g}));q.push({slug:"tool-smith",title:"Tool Smith",role:"tool_smith",engine_default:"claude-code",tools_required:["create_skill","update_skill","create_composite_tool","update_composite_tool","create_connector","update_connector","propose_tool","web_search","web_fetch","file_read"],tools_optional:[],skills:["plan","review"],memory_scopes:["agent","project"],approval_profile:"standard",description_long:"Authors reusable capabilities for the marketplace — declarative skills, composite tools chaining existing primitives, and REST API connectors. For non-REST integrations it proposes reviewable code; it never executes self-authored code.",system_prompt:'You are Tool Smith, the capability-authoring agent. Your only job is to author\nreusable capabilities other agents can use, and publish them to the marketplace.\n\nPick the RIGHT authoring path for each request:\n • A recipe chaining tools that ALREADY exist -> author a COMPOSITE TOOL\n (create_composite_tool). Reference only existing primitive tools; the\n composite inherits the MAX risk of its steps and every gate re-fires per\n step. Use this for "do X then Y then summarize" style capabilities.\n • A new REST API (Notion, Linear, Stripe, Airtable, ...) -> author a CONNECTOR\n (create_connector) with a declarative manifest: https base_url, allowed_hosts,\n secret-by-reference auth (NEVER paste a raw key — reference it by name, e.g.\n NOTION_TOKEN), and per-endpoint method/path/risk. Each endpoint becomes a\n callable <slug>.<endpoint> tool the instant the owner supplies the key once.\n • A reusable instruction/prompt recipe an LLM follows with tools it already\n has -> author a SKILL (create_skill).\n • A genuinely new integration that is NOT REST (binary, SDK-only, websockets,\n complex OAuth) -> propose_tool. This stages reviewable code; it is INERT and\n a human must merge + restart. You never execute self-authored code.\n\nHard rules: never put a raw secret in a connector manifest. Never declare a\ndestructive endpoint as low risk — the validator clamps writes to medium and\nhigh/irreversible endpoints always require human approval at run time. When asked\nfor a capability that already exists, say so instead of duplicating it.'});let r=["project-watcher","personal-assistant","engineering-lead","marketing-lead","meeting-notes"];function l(a=(0,g.getDb)()){if(globalThis.__madarxAgentTemplatesSeeded)return;let b=(0,g.nowIso)();for(let c of q)a.prepare(`INSERT INTO marketplace_items (id, kind, slug, title, description, category, author, source_kind, version, manifest_json, risk_summary, tags, created_at)
|
|
3693
|
+
- Do not invent off-brand palettes, logos, typography, or tone unless the owner explicitly asks for a different brand.`}d()}catch(a){d(a)}})},91937:(a,b,c)=>{"use strict";c.d(b,{ho:()=>l,pE:()=>f});let d=/^[a-z][a-z0-9-]{2,63}$/,e=new Set(["tool_call","llm_synthesis","artifact_write"]),f=["low","medium","high","irreversible_external"],g=/^[a-z][a-z0-9-]{0,63}$/,h=/\{\{([a-z][a-z0-9-]*)/g;function i(a,b,c){a.push(`${b}: ${c}`)}function j(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function k(a){return f.indexOf(a)}function l(a,b={}){let c,m=[],n=[];try{c=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!c||"undefined"===c)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(c,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(c,"utf8")} bytes exceeds 65536-byte cap`],warnings:[],normalized:null};if(!j(a))return{ok:!1,errors:["spec: must be a plain object"],warnings:[],normalized:null};if(a.slug&&"string"==typeof a.slug?d.test(a.slug)||i(m,"slug",`does not match ${d} (lowercase, starts with letter, 3-64 chars, hyphens allowed)`):i(m,"slug","required (string)"),a.title&&"string"==typeof a.title||i(m,"title","required (non-empty string)"),null!=a.description&&"string"!=typeof a.description&&i(m,"description","must be a string"),null==a.input_schema||j(a.input_schema)||i(m,"input_schema","must be a plain object"),!Array.isArray(a.steps)||0===a.steps.length)return i(m,"steps","required (non-empty array)"),{ok:!1,errors:m,warnings:n,normalized:null};if(a.steps.length>25)return i(m,"steps","exceeds 25"),{ok:!1,errors:m,warnings:n,normalized:null};let o=new Set,p="low",q=[];for(let c=0;c<a.steps.length;c++){var r,s;let d,l=a.steps[c],n=`steps[${c}]`;if(!j(l)){i(m,n,"must be a plain object");continue}if(!l.kind||!e.has(l.kind)){i(m,`${n}.kind`,`must be one of ${[...e].join(", ")}`);continue}l.id&&"string"==typeof l.id?g.test(l.id)?o.has(l.id)?i(m,`${n}.id`,`duplicate step id '${l.id}'`):o.add(l.id):i(m,`${n}.id`,`does not match ${g}`):i(m,`${n}.id`,"required (slug-like string)");let t=new Set(o);l.id&&t.delete(l.id);let u={};for(let[a,b]of("tool_call"===l.kind&&j(l.input_template)&&(u.input_template=l.input_template),"artifact_write"===l.kind&&(null!=l.title_template&&(u.title_template=l.title_template),null!=l.content_ref&&(u.content_ref=l.content_ref)),"llm_synthesis"===l.kind&&null!=l.prompt&&(u.prompt=l.prompt),Object.entries(u)))for(let c of function a(b){let c=new Set;if("string"==typeof b){let a;for(h.lastIndex=0;null!==(a=h.exec(b));){let b=a[1];"input"!==b&&c.add(b)}return c}if(j(b))for(let d of Object.values(b))for(let b of a(d))c.add(b);if(Array.isArray(b))for(let d of b)for(let b of a(d))c.add(b);return c}(b))t.has(c)||i(m,n,`references later/unknown step '${c}' in ${a}`);switch(l.kind){case"tool_call":d=function(a,b,c,d){let e;return a.tool&&"string"==typeof a.tool?d.knownToolNames&&!d.knownToolNames.has(a.tool)&&i(b,`${c}.tool`,`unknown tool '${a.tool}'`):i(b,`${c}.tool`,"required (string)"),null==a.input_template||j(a.input_template)||i(b,`${c}.input_template`,"must be a plain object (data only)"),null!=a.risk?f.includes(a.risk)?e=a.risk:(i(b,`${c}.risk`,`must be one of ${f.join(", ")}`),e="medium"):e=d.toolRiskByName&&"string"==typeof a.tool?d.toolRiskByName.get(a.tool)??"medium":"medium",e}(l,m,n,b);break;case"llm_synthesis":l.prompt&&"string"==typeof l.prompt?l.prompt.length>8e3&&i(m,`${n}.prompt`,`exceeds 8000 chars (got ${l.prompt.length})`):i(m,`${n}.prompt`,"required (non-empty string)"),d="low";break;case"artifact_write":d="low"}r=p,s=d,p=k(r)>=k(s)?r:s;let v={kind:l.kind,id:l.id};"tool_call"===l.kind?(v.tool=l.tool??null,null!=l.input_template&&(v.input_template=structuredClone(l.input_template)),v.risk=d):"llm_synthesis"===l.kind?v.prompt=l.prompt??null:"artifact_write"===l.kind&&(null!=l.title_template&&(v.title_template=l.title_template),null!=l.content_ref&&(v.content_ref=l.content_ref)),q.push(v)}return m.length>0?{ok:!1,errors:m,warnings:n,normalized:null}:{ok:!0,errors:[],warnings:n,normalized:{slug:a.slug,title:a.title,description:a.description??null,input_schema:null!=a.input_schema?structuredClone(a.input_schema):{type:"object",properties:{}},steps:q,risk_level:p}}}},93154:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{I2:()=>n,Z3:()=>o,cK:()=>p,pz:()=>m,yi:()=>l});var e=c(73024),f=c(76760),g=c(34255),h=c(9381),i=c(60105),j=c(88101),k=a([g,i,j]);[g,i,j]=k.then?(await k)():k;let q=[["project-watcher","Project Watcher","project_watcher","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","web_fetch","file_read"],["investigate","retro"],"Watches repos, issues, PRs, deploys, and produces weekly project pulses."],["personal-assistant","Personal Assistant","personal_assistant","anthropic",["gmail_messages_list","gmail_message_read","calendar_events_list","whatsapp_send"],[],"Reads inbox and calendar context, drafts replies, and keeps the operator organized."],["travel-concierge","Travel Concierge","travel_concierge","anthropic",["flight_search","flight_status","hotel_search","hotel_rates","web_search","web_fetch","create_artifact"],[],"Plans trips end to end — flights, hotels, and itineraries — and returns a booking-ready comparison with real prices, times, and sources. Bookings and purchases stay approval-gated."],["engineering-lead","Engineering Lead","engineering_lead","claude-code",["gh_repo_read","gh_issue_list","gh_pr_list","terminal_run","file_read","file_write"],["investigate","review","ship","qa"],"Leads implementation, review, QA, and preview deploys with explicit approval gates."],["marketing-lead","Marketing Lead","marketing_lead","anthropic",["web_search","web_fetch","file_write","create_artifact"],["design-shotgun","impeccable"],"Creates market research, launch copy, positioning, and design briefs."],["meeting-notes","Meeting Notes Taker","meeting_notes","anthropic",["transcribe_audio","file_write","create_artifact"],[],"Turns recordings into transcripts, decisions, action items, and follow-ups."],["bug-triage","Bug Triage Specialist","bug_triage","claude-code",["gh_issue_list","gh_pr_list","file_read"],["investigate"],"Classifies incoming bugs and proposes severity and next actions."],["phase-runner","Phase Runner","phase_runner","claude-code",["file_read","file_write","terminal_run"],["ship"],"Executes approved implementation phases and reports blockers."],["code-reviewer","Code Reviewer","code_reviewer","claude-code",["file_read","gh_pr_list"],["review"],"Provides independent diff review before merge."],["competitor-scout","Competitor Scout","competitor_scout","anthropic",["web_search","web_fetch","create_artifact"],[],"Tracks competitor movement and summarizes weekly signals."],["finance-ops","Finance and Ops","finance_ops","anthropic",["file_read","create_artifact"],[],"Reads finance docs and drafts advisory runway and ops summaries."],["legal-compliance","Legal and Compliance","legal_compliance","anthropic",["file_read","web_fetch","create_artifact"],[],"Reviews policy and compliance documents as advisory output only."],["customer-support","Customer Support","customer_support","anthropic",["gmail_message_read","file_write"],[],"Drafts customer replies and escalates approval-required sends."],["chief-of-staff","Chief of Staff","chief_of_staff","anthropic",["web_search","file_read","file_write","create_artifact","create_workflow_definition"],["report-builder","market-research"],"Translates founder intent into delegated work across the company, runs the weekly cadence, and surfaces decisions. No direct external writes."],["ads-media-buyer","Ads / Media Buyer","ads_media_buyer","anthropic",["web_search","file_write","create_artifact"],["design-shotgun"],"Plans, builds, and reports on paid campaigns across Meta/Google/TikTok within budget caps. Every campaign publish and budget set is approval-gated."],["content-social","Content / Social Manager","content_social","anthropic",["web_search","file_write","create_artifact","voice_speak"],["design-shotgun"],"Produces and schedules organic posts, reels, and videos and maintains brand voice. Every publish is approval-gated."],["sales-bd","Sales / BD","sales_bd","anthropic",["web_search","web_fetch","gmail_messages_list","email_send","create_artifact"],["inbox-triage"],"Builds target lists, enriches leads, runs outreach, and logs CRM activity. Bulk sends and CRM writes are approval-gated."],["ops-manager","Operations","ops_manager","anthropic",["calendar_events_list","calendar_event_read","file_read","file_write","create_artifact"],["meeting-scheduler","report-builder"],"Keeps the business running — scheduling, internal docs, recurring checklists, vendor coordination. Calendar invites and webhooks are approval-gated."],["product-pm","Product / Project Manager","product_pm","claude-code",["gh_repo_read","gh_issue_list","gh_issue_create","gh_pr_list","file_read","file_write","create_workflow_definition"],["review"],"Maintains the roadmap, writes specs, tracks delivery, and runs standups. Issue/PR creates respect the GitHub allowlist."],["web-ecommerce","Web / Ecommerce","web_ecommerce","claude-code",["web_fetch","supabase_rest_select","browser_open","file_read","file_write","create_artifact"],["web-automation"],"Manages site/store content, products, SEO, and deploys. Deploys, store writes, and DB writes are approval-gated."]].map(([a,b,c,d,e,f,g])=>({slug:a,title:b,role:c,engine_default:d,tools_required:e,tools_optional:[],skills:f,memory_scopes:["agent","project"],approval_profile:"personal_assistant"===c?"strict":"standard",description_long:g}));q.push({slug:"tool-smith",title:"Tool Smith",role:"tool_smith",engine_default:"claude-code",tools_required:["create_skill","update_skill","create_composite_tool","update_composite_tool","create_connector","update_connector","propose_tool","web_search","web_fetch","file_read"],tools_optional:[],skills:["plan","review"],memory_scopes:["agent","project"],approval_profile:"standard",description_long:"Authors reusable capabilities for the marketplace — declarative skills, composite tools chaining existing primitives, and REST API connectors. For non-REST integrations it proposes reviewable code; it never executes self-authored code.",system_prompt:'You are Tool Smith, the capability-authoring agent. Your only job is to author\nreusable capabilities other agents can use, and publish them to the marketplace.\n\nPick the RIGHT authoring path for each request:\n • A recipe chaining tools that ALREADY exist -> author a COMPOSITE TOOL\n (create_composite_tool). Reference only existing primitive tools; the\n composite inherits the MAX risk of its steps and every gate re-fires per\n step. Use this for "do X then Y then summarize" style capabilities.\n • A new REST API (Notion, Linear, Stripe, Airtable, ...) -> author a CONNECTOR\n (create_connector) with a declarative manifest: https base_url, allowed_hosts,\n secret-by-reference auth (NEVER paste a raw key — reference it by name, e.g.\n NOTION_TOKEN), and per-endpoint method/path/risk. Each endpoint becomes a\n callable <slug>.<endpoint> tool the instant the owner supplies the key once.\n • A reusable instruction/prompt recipe an LLM follows with tools it already\n has -> author a SKILL (create_skill).\n • A genuinely new integration that is NOT REST (binary, SDK-only, websockets,\n complex OAuth) -> propose_tool. This stages reviewable code; it is INERT and\n a human must merge + restart. You never execute self-authored code.\n\nHard rules: never put a raw secret in a connector manifest. Never declare a\ndestructive endpoint as low risk — the validator clamps writes to medium and\nhigh/irreversible endpoints always require human approval at run time. When asked\nfor a capability that already exists, say so instead of duplicating it.'});let r=["project-watcher","personal-assistant","engineering-lead","marketing-lead","meeting-notes"];function l(a=(0,g.getDb)()){if(globalThis.__madarxAgentTemplatesSeeded)return;let b=(0,g.nowIso)();for(let c of q)a.prepare(`INSERT INTO marketplace_items (id, kind, slug, title, description, category, author, source_kind, version, manifest_json, risk_summary, tags, created_at)
|
|
3524
3694
|
VALUES (?, 'agent', ?, ?, ?, ?, 'madarx', 'builtin', '1.0', ?, ?, ?, ?)
|
|
3525
3695
|
ON CONFLICT(kind, slug) DO UPDATE SET title=excluded.title, description=excluded.description, manifest_json=excluded.manifest_json, tags=excluded.tags`).run(`agent:${c.slug}`,c.slug,c.title,c.description_long,c.role,JSON.stringify({agent:c}),c.approval_profile,JSON.stringify([c.role,c.engine_default]),b);if("1"!==process.env.MADARX_SEED_DEFAULT_AGENTS){globalThis.__madarxAgentTemplatesSeeded=!0;return}let c=r.map(()=>"?").join(","),d=a.prepare(`SELECT COUNT(*) AS c FROM agent_template_installations
|
|
3526
3696
|
WHERE project_id = 'personal' AND template_slug IN (${c})`).get(...r);if(d?.c>=r.length){globalThis.__madarxAgentTemplatesSeeded=!0;return}for(let a of r)try{m(a,"personal",{seed:!0})}catch{}globalThis.__madarxAgentTemplatesSeeded=!0}function m(a,b="personal",c={}){let d=function(a){var b;let c=q.find(b=>b.slug===a);return c?c:(b=j.S.find(b=>b.slug===a))?{slug:b.slug,title:b.title,role:b.role,engine_default:b.engine_default,tools_required:Array.isArray(b.tools_required)?b.tools_required:[],tools_optional:Array.isArray(b.tools_optional)?b.tools_optional:[],skills:Array.isArray(b.skills)?b.skills:[],memory_scopes:["agent","project"],approval_profile:b.approval_profile||"standard",description_long:b.description_long,system_prompt:"string"==typeof b.system_prompt?b.system_prompt:null}:null}(a);if(!d)throw Error("agent template not found");let e=(0,g.getDb)(),f=e.prepare("SELECT * FROM agent_template_installations WHERE template_slug = ? AND project_id = ?").get(a,b);if(f&&!c.overwrite)return f;let h=c.agent_id||`${b}-${a}`.replace(/[^a-zA-Z0-9_-]/g,"-"),k=(0,i.Sn)({id:h,name:d.title,type:d.role,role:d.role,title:d.title,engine:d.engine_default,tools:d.tools_required,mission:d.description_long,system_prompt:d.system_prompt||void 0,approval:d.approval_profile,project_id:b,template_slug:a,suppress_live_event:!!c.seed});for(let a of d.tools_required)(0,i.Xr)(h,a,a.includes("write")||a.includes("send")||a.includes("terminal")?"approval_required":"auto");let l=(0,g.nowIso)();return e.prepare(`INSERT INTO agent_template_installations (id, template_slug, agent_id, project_id, installed_at, status)
|