madarx 2.12.1 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +277 -284
- package/.next/standalone/.next/app-path-routes-manifest.json +67 -68
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/routes-manifest.json +0 -6
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/page.js +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/agents/[id]/page.js +4 -4
- package/.next/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/agents/page.js +1 -1
- package/.next/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/audit-export/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/share-links/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-memory/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/log/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-runs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/chain/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/memory/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/reports/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/create/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/ops/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/acl/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/protect/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/raw/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/artifacts/upload/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/audit/list/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/audit/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/join-bootstrap/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/brand/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/config/env/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/[service]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/[service]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/[linkId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/import/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/blob/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/[id]/transcribe/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/files/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/disk/folders/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/since/[cursor]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/stream/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/create-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/fs/pick-folder/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/blueprint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/diagnostic/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/governance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/interview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/pilot/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/quarterly/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/[id]/setup-package/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/engagements/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/responses/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/interviews/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/[id]/apply/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hail/setup-packages/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/tick/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/worker/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/heartbeat/worker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/help/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/hermes/jobs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/integrations/google/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/integrations/google/oauth/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/open-design/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/import-roots/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/portfolio/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/chunks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/diligence/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/import/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/[id]/publish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mines/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/missions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/onboarding/blueprint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/onboarding/launch/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/command/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/stream/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orchestrator/upload/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/org/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/invites/[inviteId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/invites/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/role/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/[userId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/members/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/invites/pending/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/join/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/join-complete/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/orgs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/clis/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/install/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/printing-press/security-mode/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/privacy/config/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/privacy/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/share-link/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/override/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/retry/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/processes/[id]/stages/[stageId]/submit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/[slug]/settings/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/definitions/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/processes/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/start-and-route/route.js +1 -1
- package/.next/standalone/.next/server/app/api/processes/start-and-route/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/processes/start-and-route/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/library/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[slug]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/approve-claude-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/claude-code-dry-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/competitor-report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/engine-ping/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/runs/marketing-plan/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/schedules/upsert/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/[name]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/secrets/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/settings/trust-mode/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/otp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/share/space/[token]/verify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/[id]/acl/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/publish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/shared/spaces/unpublish/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/system/update/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/active-run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/attachments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/[itemId]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checklist/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/checkout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/children/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/live-runs/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-allowlists/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-allowlists/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tool-egress/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/[name]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/[name]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tools/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/transcripts/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/providers/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/context/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/tool-result/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/realtime/tools/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/voice/tts/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/allowlist/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/disconnect/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/messages/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/qr/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/send/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/whatsapp/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/approvals/page.js +2 -2
- package/.next/standalone/.next/server/app/approvals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/architecture/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/architecture.html +2 -2
- package/.next/standalone/.next/server/app/architecture.rsc +1 -1
- package/.next/standalone/.next/server/app/audit/live/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/brand/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/brand.html +1 -1
- package/.next/standalone/.next/server/app/brand.rsc +1 -1
- package/.next/standalone/.next/server/app/disk/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/federated-ai.html +2 -2
- package/.next/standalone/.next/server/app/federated-ai.rsc +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/governance/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/governance/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/interview/page.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/interview/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/interview/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page.js +2 -2
- package/.next/standalone/.next/server/app/hail/[id]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/setup/page.js +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/hail/[id]/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hail/page.js +3 -3
- package/.next/standalone/.next/server/app/hail/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/hail/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/join/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/join.html +1 -1
- package/.next/standalone/.next/server/app/join.rsc +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/marketplace/page.js +2 -2
- package/.next/standalone/.next/server/app/marketplace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/[projectId]/results/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/mines/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/missions/page.js +2 -2
- package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/org/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
- package/.next/standalone/.next/server/app/org/page.js +1 -1
- package/.next/standalone/.next/server/app/org/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/org/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/[slug]/log/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/new/page.js +1 -1
- package/.next/standalone/.next/server/app/projects/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/new.html +1 -1
- package/.next/standalone/.next/server/app/projects/new.rsc +2 -2
- package/.next/standalone/.next/server/app/projects/page.js +28 -28
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/[file]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/reports/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/runtime/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/schedules/page.js +1 -1
- package/.next/standalone/.next/server/app/schedules/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/account/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/appearance/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/brand/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/brand.html +2 -2
- package/.next/standalone/.next/server/app/settings/brand.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connectors/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/engines/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/settings/onboarding.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/organization/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/runtime/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/team/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/tools/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/share/space/[token]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/[id]/page.js +2 -2
- package/.next/standalone/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tasks/page.js +2 -2
- package/.next/standalone/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/team/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/whatsapp.html +1 -1
- package/.next/standalone/.next/server/app/whatsapp.rsc +1 -1
- package/.next/standalone/.next/server/app/workflows/[caseId]/page.js +1 -1
- package/.next/standalone/.next/server/app/workflows/[caseId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workflows/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/[caseId]/page.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/[caseId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workflows/new/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/new/definition/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/page.js +1 -1
- package/.next/standalone/.next/server/app/workflows/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workflows/share/[caseId]/page.js +1 -1
- package/.next/standalone/.next/server/app/workflows/share/[caseId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workflows/share/[caseId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +67 -68
- package/.next/standalone/.next/server/chunks/1699.js +28 -28
- package/.next/standalone/.next/server/chunks/5185.js +4 -27
- package/.next/standalone/.next/server/chunks/5257.js +1 -1
- package/.next/standalone/.next/server/chunks/6355.js +1 -0
- package/.next/standalone/.next/server/chunks/{3784.js → 6474.js} +1 -1
- package/.next/standalone/.next/server/functions-config-manifest.json +24 -24
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/-LlttjOnKZXGqZXDKcj-4/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/app/projects/page-09e5c527e3ba83e2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/workflows/[caseId]/page-9949ff1c223e771d.js +1 -0
- package/.next/{static/chunks/app/workflows/page-25cb2c4cb90273a8.js → standalone/.next/static/chunks/app/workflows/page-d0484521369bce4c.js} +1 -1
- package/.next/standalone/CHANGELOG.md +31 -0
- package/.next/standalone/data/.artifacts-migrated-v1 +1 -1
- package/.next/standalone/data/.default-project-seeded +1 -1
- package/.next/standalone/data/madarx.sqlite +0 -0
- package/.next/standalone/data/madarx.sqlite-shm +0 -0
- package/.next/standalone/data/madarx.sqlite-wal +0 -0
- package/.next/standalone/lib/process/seeds/specs/mine-project-intake.json +12 -4
- package/.next/standalone/lib/process/seeds/specs/mine-valuation.json +6 -2
- package/.next/standalone/lib/process/stages/policy-dsl-legacy.js +178 -0
- package/.next/standalone/lib/process/stages/policy-gate.js +24 -168
- package/.next/standalone/package.json +4 -1
- package/.next/standalone/workspace/agents/ops-agent/skills.md +24 -0
- package/.next/standalone/workspace/agents/tool-smith-agent/skills.md +24 -0
- package/.next/static/-LlttjOnKZXGqZXDKcj-4/_buildManifest.js +1 -0
- package/.next/static/chunks/app/projects/page-09e5c527e3ba83e2.js +1 -0
- package/.next/static/chunks/app/workflows/[caseId]/page-9949ff1c223e771d.js +1 -0
- package/.next/{standalone/.next/static/chunks/app/workflows/page-25cb2c4cb90273a8.js → static/chunks/app/workflows/page-d0484521369bce4c.js} +1 -1
- package/CHANGELOG.md +31 -0
- package/ai-docs/process-engine.md +33 -1
- package/app/api/processes/start-and-route/route.js +5 -3
- package/app/workflows/[caseId]/case-detail-client.jsx +2 -2
- package/app/workflows/definition-card.jsx +12 -18
- package/app/workflows/new/[caseId]/page.js +8 -8
- package/app/workflows/page.js +0 -5
- package/app/workflows/share/[caseId]/page.js +0 -1
- package/lib/cli/banner.js +200 -21
- package/lib/cli/run.js +33 -11
- package/lib/cli/splash.js +120 -0
- package/lib/marketplace-seeds.js +141 -3
- package/lib/process/artifacts.js +12 -60
- package/lib/process/engine.js +5 -5
- package/lib/process/policy-predicates.js +116 -0
- package/lib/process/seeds/specs/mine-project-intake.json +12 -4
- package/lib/process/seeds/specs/mine-valuation.json +6 -2
- package/lib/process/spec-validator.js +46 -1
- package/lib/process/stages/policy-dsl-legacy.js +178 -0
- package/lib/process/stages/policy-gate.js +24 -168
- package/lib/runtime.js +52 -3
- package/lib/seeds.js +5 -1
- package/lib/tools/registry.js +20 -0
- package/package.json +4 -1
- package/scripts/postbuild-standalone.mjs +9 -0
- package/scripts/postinstall-splash.mjs +81 -0
- package/scripts/preview-banner.mjs +24 -0
- package/.next/standalone/.next/server/app/workflows/new/page.js +0 -2
- package/.next/standalone/.next/server/app/workflows/new/page.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/workflows/new/page_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/static/BTzAhaVl8-xEC5Te-d7Ns/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/app/projects/page-7b6c6e010183e070.js +0 -1
- package/.next/standalone/.next/static/chunks/app/workflows/[caseId]/page-423e4c194c7f5bf5.js +0 -1
- package/.next/standalone/.next/static/chunks/app/workflows/new/page-1eda41616cbfc4f3.js +0 -1
- package/.next/static/BTzAhaVl8-xEC5Te-d7Ns/_buildManifest.js +0 -1
- package/.next/static/chunks/app/projects/page-7b6c6e010183e070.js +0 -1
- package/.next/static/chunks/app/workflows/[caseId]/page-423e4c194c7f5bf5.js +0 -1
- package/.next/static/chunks/app/workflows/new/page-1eda41616cbfc4f3.js +0 -1
- package/app/workflows/new/new-case-flow.jsx +0 -256
- package/app/workflows/new/page.js +0 -27
- /package/.next/standalone/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → -LlttjOnKZXGqZXDKcj-4}/_ssgManifest.js +0 -0
- /package/.next/static/{BTzAhaVl8-xEC5Te-d7Ns → -LlttjOnKZXGqZXDKcj-4}/_ssgManifest.js +0 -0
|
@@ -151,7 +151,7 @@ ${c}`)}catch{}return b}let x=[{id:"claude-sonnet-4-6",label:"Sonnet 4.6",engine:
|
|
|
151
151
|
WHERE slug=?`).run(g.title,g.description,l,g.risk_level,m,j,g.slug):i.prepare(`INSERT INTO composite_tools
|
|
152
152
|
(slug, title, description, spec_json, risk_level, input_schema_json, status,
|
|
153
153
|
created_by_user_id, created_by_agent_id, created_at, updated_at)
|
|
154
|
-
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:()=>j});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)}function j(a,b={}){var c;let k,l=[],m=[];try{k=JSON.stringify(a)}catch{return{ok:!1,errors:["spec: not JSON-serialisable"],warnings:[],normalized:null}}if(!k||"undefined"===k)return{ok:!1,errors:["spec: required"],warnings:[],normalized:null};if(Buffer.byteLength(k,"utf8")>65536)return{ok:!1,errors:[`spec: serialized length ${Buffer.byteLength(k,"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(l,"slug",`does not match ${g} (lowercase, starts with letter, 3-64 chars, [a-z0-9-])`):h(l,"slug","required (string)"),a.name&&"string"==typeof a.name||h(l,"name","required (string)");let n=a.schema_version??1;if(null==a.schema_version||Number.isInteger(a.schema_version)||h(l,"schema_version","must be an integer"),null!=a.version&&(!Number.isInteger(a.version)||a.version<1)&&h(l,"version","must be a positive integer"),!Array.isArray(a.stages)||0===a.stages.length)return h(l,"stages","required (non-empty array)"),{ok:!1,errors:l,warnings:m,normalized:null};let o=new Set;a.stages.forEach((a,b)=>{let c=`stages[${b}]`;if(!i(a))return void h(l,c,"must be an object");a.slug&&"string"==typeof a.slug?g.test(a.slug)?o.has(a.slug)?h(l,`${c}.slug`,`duplicate stage slug "${a.slug}"`):o.add(a.slug):h(l,`${c}.slug`,`does not match ${g}`):h(l,`${c}.slug`,"required (string)"),a.name&&"string"==typeof a.name||h(l,`${c}.name`,"required (string)"),a.kind&&d.has(a.kind)||h(l,`${c}.kind`,`unknown kind "${a.kind}" (allowed: ${[...d].join(", ")})`)});let p=a.stages[0];if(p&&p.kind&&"intake_form"!==p.kind&&h(l,"stages[0].kind",`first stage must be "intake_form" (got "${p.kind}")`),a.stages.forEach((a,c)=>{if(!a||!d.has(a.kind))return;let g=`stages[${c}]`;if(!i(a.config))return void h(l,`${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,l,g);break;case"agent_run":let j=a.config||{};if(j.agent_template_slug&&"string"==typeof j.agent_template_slug?b.knownAgentTemplates&&!b.knownAgentTemplates.has(j.agent_template_slug)&&h(l,`${g}.config.agent_template_slug`,`unknown template "${j.agent_template_slug}"`):h(l,`${g}.config.agent_template_slug`,"required (string)"),j.prompt&&"string"==typeof j.prompt?j.prompt.length>8e3&&h(l,`${g}.config.prompt`,`exceeds 8000 chars (got ${j.prompt.length})`):h(l,`${g}.config.prompt`,"required (string)"),null!=j.timeout_ms&&(!Number.isInteger(j.timeout_ms)||j.timeout_ms<1e3||j.timeout_ms>6e5)&&h(l,`${g}.config.timeout_ms`,"must be integer 1000..600000"),null!=j.on_outcome)if(i(j.on_outcome))for(let[a,b]of Object.entries(j.on_outcome)){if("string"!=typeof b){h(l,`${g}.config.on_outcome.${a}`,'value must be a string (stage slug or "fail")');continue}"fail"!==b&&o&&!o.has(b)&&h(l,`${g}.config.on_outcome.${a}`,`references non-existent stage "${b}"`)}else h(l,`${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)?a.expr&&"string"==typeof a.expr&&a.expr.trim()||h(b,`${e}.expr`,"required (non-empty string)"):h(b,e,"rule must be a string or { expr, label } object")})}(a,l,g);break;case"human_approval":let k=a.config||{};k.action_type&&"string"==typeof k.action_type?k.action_type.startsWith("process.stage.")||h(l,`${g}.config.action_type`,'must start with "process.stage."'):h(l,`${g}.config.action_type`,"required (string)"),k.risk&&f.has(k.risk)||h(l,`${g}.config.risk`,`must be one of ${[...f].join(", ")}`),null!=k.summary_template&&"string"!=typeof k.summary_template&&h(l,`${g}.config.summary_template`,"must be a string");break;case"package":let m=a.config||{};m.title_template&&"string"==typeof m.title_template||h(l,`${g}.config.title_template`,"required (string)"),null!=m.include_stages&&(Array.isArray(m.include_stages)?m.include_stages.forEach((a,b)=>{"string"!=typeof a?h(l,`${g}.config.include_stages[${b}]`,"must be a string"):o.has(a)||h(l,`${g}.config.include_stages[${b}]`,`unknown stage slug "${a}"`)}):h(l,`${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||o.has(a.on_pass_stage_slug)||h(l,`${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||o.has(a.on_fail_stage_slug)||h(l,`${c}.on_fail_stage_slug`,`references non-existent stage "${a.on_fail_stage_slug}"`)}),0===l.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(l,"stages","routing graph contains a cycle"),0===l.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)||m.push(`stages[${c}] "${a.slug}": orphan stage (no inbound edges)`))})}return l.length>0?{ok:!1,errors:l,warnings:m,normalized:null}:{ok:!0,errors:[],warnings:m,normalized:{schema_version:n,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(`
|
|
154
|
+
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(`
|
|
155
155
|
INSERT INTO approval_requests (id, status, action_type, risk, summary, payload, requested_by, created_at, expires_at, project_id)
|
|
156
156
|
VALUES (?, 'pending', ?, ?, ?, ?, ?, ?, ?, ?)
|
|
157
157
|
`).run(k,a,b,c,JSON.stringify(d),f,l,g,n),i.prepare(`
|
|
@@ -874,7 +874,7 @@ ${b}
|
|
|
874
874
|
`).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(`
|
|
875
875
|
INSERT INTO tool_allowlists (id, tool_name, scope_key, scope_value, label, created_at)
|
|
876
876
|
VALUES (?, 'email_send', 'recipient_domain', ?, ?, ?)
|
|
877
|
-
`).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,n.y)({})}catch{}try{(0,i.fP)(a)}catch{}try{(0,k.yi)(a)}catch{}try{(0,r.r)(a),D&&(0,q.fx)()}catch{}try{(0,s._)(a),D&&((0,t.H6)(),(0,u.r1)()),(0,v.$F)()}catch{}try{(0,w.zc)(a)}catch{}if("1"===process.env.MADARX_SEED_DEFAULT_AGENTS)try{(0,x.g)()}catch{}if(D)try{(0,y.W)()}catch{}try{(0,z.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,l.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);try{(0,p.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,l.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,A.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,m.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,l.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,o.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)
|
|
877
|
+
`).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,n.y)({})}catch{}try{(0,i.fP)(a)}catch{}try{(0,k.yi)(a)}catch{}try{(0,r.r)(a),D&&(0,q.fx)()}catch{}try{(0,s._)(a),D&&((0,t.H6)(),(0,u.r1)()),(0,v.$F)()}catch{}try{(0,w.zc)(a)}catch{}if("1"===process.env.MADARX_SEED_DEFAULT_AGENTS)try{(0,x.g)()}catch{}if(D)try{(0,y.W)()}catch{}try{(0,z.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,l.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);try{(0,l.OH)()}catch(a){console.warn("[seeds] migrateDefaultAgentSkills failed:",a?.message||a)}try{(0,p.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,l.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,A.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,m.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,l.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,o.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)
|
|
878
878
|
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)
|
|
879
879
|
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}
|
|
880
880
|
|
|
@@ -2991,25 +2991,25 @@ HARD SAFETY RULES (non-negotiable — the package is rejected by the validator o
|
|
|
2991
2991
|
INSERT OR IGNORE INTO mines_spatial_assets
|
|
2992
2992
|
(id, project_id, kind, path, crs, bbox, file_size_bytes, indexed_at)
|
|
2993
2993
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
2994
|
-
`).run((0,e.newId)("msa"),b.project_id,d.kind,b.original_path,d.crs,d.bbox?JSON.stringify(d.bbox):null,d.file_size_bytes,(0,e.nowIso)()),a.prepare("UPDATE mines_source_documents SET extraction_status = ?, updated_at = ? WHERE id = ?").run("complete",(0,e.nowIso)(),b.id),!!c}async function i(a,b={}){let c=(0,e.getDb)();if(a?.source_document_id){let b=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE id = ?").get(a.source_document_id);if(!b)return{status:"error",error:"source_document_not_found"};let d=h(c,b);return{status:"ok",assets_indexed:+!d,assets_skipped:+!!d}}let d=a?.project_id;if(!d)return{status:"error",error:"project_id_required"};let f=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE project_id = ?").all(d).filter(a=>j.has(String(a.file_type||"").toLowerCase())),g=0,k=0;for(let a of f)try{h(c,a)?k++:g++}catch{k++}return{status:"ok",assets_indexed:g,assets_skipped:k}}d()}catch(a){d(a)}})},59400:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{IY:()=>B,dV:()=>A,tE:()=>x,vC:()=>y});var e=c(77030),f=c(24516),g=c(58282),h=a([f,g]);function i(a){return String(process.env[a]||"").trim()}function j(a){try{let b=(0,f.getSecret)(a);if(b)return String(b).trim()}catch{}return i(a)}function k(a={}){let b=String(a.query||a.q||"").trim();if(!b)throw Error("query is required");return b}function l(a={}){return Math.min(Math.max(Number(a.count||5),1),10)}function m({title:a,url:b,snippet:c,source:d,rank:e=0,metadata:f={}}){return{rank:e+1,title:String(a||""),url:String(b||""),snippet:String(c||""),source:d,metadata:f}}async function n(a,b={},c=fetch){let d=await c(a,b);if(!d.ok){let a=d.statusText||String(d.status);try{let b=await d.text();b&&(a=`${a}: ${b.slice(0,200)}`)}catch{}throw Error(`Request failed: ${d.status} ${a}`.trim())}return d.json()}function o(a={},b=0){return m({rank:b,title:a.title,url:a.url,snippet:a.description||a.snippet,source:"brave",metadata:{age:a.age||null,family_friendly:a.family_friendly??null}})}function p(){let a={Accept:"application/json","Content-Type":"application/json"},b=j("FIRECRAWL_API_KEY");return b&&(a.Authorization=`Bearer ${b}`),a}function q(){return(j("FIRECRAWL_API_URL")||"https://api.firecrawl.dev").replace(/\/+$/g,"")}async function r(a={},b=fetch){let c=k(a),d=l(a),e=await n(`${q()}/v1/search`,{method:"POST",headers:p(),body:JSON.stringify({query:c,limit:d})},b);return{query:c,source:"firecrawl",results:(function(a={}){return Array.isArray(a.data)?a.data:Array.isArray(a.results)?a.results:Array.isArray(a.web)?a.web:Array.isArray(a.web?.results)?a.web.results:[]})(e).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url||a.link,snippet:a.description||a.snippet||a.content||a.markdown,source:"firecrawl",metadata:a.metadata||{}})).filter(a=>a.url)}}async function s(a={},b=fetch){let c=k(a),d=l(a),e=j("SEARXNG_URL");if(!e)throw Error("SEARXNG_URL not configured");let f=new URL("/search",e.replace(/\/+$/g,""));f.searchParams.set("q",c),f.searchParams.set("format","json"),(a.search_lang||a.language)&&f.searchParams.set("language",String(a.search_lang||a.language));let g=await n(f,{headers:{Accept:"application/json"}},b);return{query:c,source:"searxng",results:(g.results||[]).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url,snippet:a.content||a.snippet,source:"searxng",metadata:a.metadata||{}})).filter(a=>a.url)}}async function t(a={},b=fetch){let c=j("BRAVE_SEARCH_API_KEY");if(!c)throw Error("BRAVE_SEARCH_API_KEY not configured");let d=k(a),e=l(a),f=new URL("https://api.search.brave.com/res/v1/web/search");f.searchParams.set("q",d),f.searchParams.set("count",String(e)),a.country&&f.searchParams.set("country",String(a.country)),a.search_lang&&f.searchParams.set("search_lang",String(a.search_lang));let g=await n(f,{headers:{Accept:"application/json","X-Subscription-Token":c}},b),h=(g.web?.results||[]).slice(0,e).map(o);return{query:d,source:"brave",results:h}}function u(a=""){return String(a).replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/'/g,"'")}function v(a=""){return u(String(a).replace(/<[^>]+>/g," ")).replace(/\s+/g," ").trim()}async function w(a={},b=fetch){let c=k(a),d=l(a),e=new URL("https://lite.duckduckgo.com/lite/");e.searchParams.set("q",c);let f=await b(e,{headers:{Accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"}});if(!f.ok)throw Error(`DuckDuckGo Lite search failed: ${f.status}`);let g=await f.text();return{query:c,source:"fetch",results:function(a="",b=5){let c=[...String(a).matchAll(/<a\b[^>]*href=["'][^"']+["'][^>]*>[\s\S]*?<\/a>/gi)],d=[...String(a).matchAll(/<td\b[^>]*class=["'][^"']*result-snippet[^"']*["'][^>]*>([\s\S]*?)<\/td>/gi)].map(a=>v(a[1])),e=[];for(let a of c){let c=a[0].match(/<a\b[^>]*>/i)?.[0]||"",f=v(a[0]),g=function(a=""){try{let b=new URL(a,"https://lite.duckduckgo.com"),c=b.searchParams.get("uddg");if(c)return c;if(["http:","https:"].includes(b.protocol))return b.toString()}catch{}return a}(function(a,b){let c=a.match(RegExp(`${b}\\s*=\\s*["']([^"']+)["']`,"i"));return c?u(c[1]):""}(c,"href"));if(f&&/^https?:\/\//i.test(g)&&(e.push(m({rank:e.length,title:f,url:g,snippet:d[e.length]||"",source:"duckduckgo_lite",metadata:{}})),e.length>=b))break}return e}(g,d)}}async function x(a={},b={}){let c=b.agent_id??null,d=function(){let a=i("MADARX_WEB_PROVIDER").toLowerCase();if(a){if(["firecrawl","searxng","brave","fetch"].includes(a))return a;throw Error(`Unsupported MADARX_WEB_PROVIDER: ${a}`)}return j("FIRECRAWL_API_URL")||j("FIRECRAWL_API_KEY")?"firecrawl":j("SEARXNG_URL")?"searxng":j("BRAVE_SEARCH_API_KEY")?"brave":"fetch"}();return"firecrawl"===d?r(a,(0,g.N)("web_search",c)):"searxng"===d?s(a,(0,g.N)("web_search",c)):"brave"===d?t(a,(0,g.N)("web_search",c)):w(a,(0,g.N)("web_search",c))}function y(a){let b;try{b=new URL(String(a||""))}catch{throw Error("url must be a valid URL")}if(!["http:","https:"].includes(b.protocol))throw Error("Only http and https URLs are supported");let c=b.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(!c)throw Error("URL host is required");if("localhost"===c||c.endsWith(".localhost")||c.endsWith(".local"))throw Error("Local/private network URLs are blocked");let d=e.isIP(c);if(4===d&&function(a){let b=a.split(".").map(Number);if(4!==b.length||b.some(a=>!Number.isInteger(a)||a<0||a>255))return!1;let[c,d]=b;return 10===c||127===c||169===c&&254===d||172===c&&d>=16&&d<=31||192===c&&168===d||0===c}(c)||6===d&&function(a){let b=a.toLowerCase();return"::1"===b||b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80:")||"::"===b||b.startsWith("0:")}(c))throw Error("Local/private network URLs are blocked");return b}function z(a){return String(a||"").replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi," ").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi," ").replace(/<noscript\b[^>]*>[\s\S]*?<\/noscript>/gi," ").replace(/<!--[\s\S]*?-->/g," ").replace(/<\/(p|div|section|article|header|footer|main|li|h[1-6]|tr)>/gi,"\n").replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").replace(/[ \t]{2,}/g," ").trim()}async function A(a={},b={}){let c=b.agent_id??null,d=(0,g.N)("web_fetch",c),e=y(a.url),f=Math.min(Math.max(Number(a.max_bytes||512e3),1024),512e3),h=await d(e,{headers:{Accept:"text/html,text/plain,application/xhtml+xml,application/json;q=0.8,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"},redirect:"follow"});if(!h.ok)throw Error(`Fetch failed: ${h.status}`);let i=Number(h.headers.get("content-length")||0);if(i&&i>f)throw Error(`Response too large: ${i} bytes`);let j=h.body?.getReader();if(!j){let a=await h.text();if(Buffer.byteLength(a,"utf8")>f)throw Error("Response too large");return{url:e.toString(),status:h.status,content_type:h.headers.get("content-type")||"",text:z(a)}}let k=[],l=0;for(;;){let{value:a,done:b}=await j.read();if(b)break;if((l+=a.byteLength)>f)throw Error("Response too large");k.push(a)}let m=Buffer.concat(k).toString("utf8"),n=h.headers.get("content-type")||"";return{url:h.url||e.toString(),status:h.status,content_type:n,text:z(m).slice(0,Math.min(f,12e4)),source:{url:h.url||e.toString(),fetched_at:new Date().toISOString()}}}async function B(a={},b={}){let c=b.agent_id??null,d=y(a.url);if(!j("FIRECRAWL_API_URL")&&!j("FIRECRAWL_API_KEY"))return A(a,b);let e=await n(`${q()}/v1/scrape`,{method:"POST",headers:p(),body:JSON.stringify({url:d.toString(),formats:["markdown"]})},(0,g.N)("web_extract",c)),f=e.data||e,h=String(f.markdown||f.content||f.text||"");return{url:d.toString(),status:200,content_type:"text/markdown",text:h.slice(0,12e4),metadata:f.metadata||{},source:{provider:"firecrawl",url:d.toString(),fetched_at:new Date().toISOString()}}}[f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},60105:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$S:()=>ap,AD:()=>at,CM:()=>Y,Ck:()=>K,Dg:()=>function a({title:b,kind:c="html",content:d,project_id:k=null,agent_id:l=null,space_id:n=null,heartbeat_task_id:o=null,dedupe_key:p=null}){(0,i.Jh)();let r=k||q.Sk,s=(0,q.hF)({status:"all"}).find(a=>a.id===r||a.slug===r),t=s?s.id:q.Sk,u=(0,j.Kg)(t),w=(b||"artifact").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"artifact",x=l||"main-orchestrator",y=""===p?null:p||function({agent_id:a,title:b,project_id:c}){let d=new Date().toISOString().slice(0,10),e=String(b||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");return g.createHash("sha256").update([a||"main-orchestrator",c||q.Sk,e,d].join("|")).digest("hex").slice(0,32)}({agent_id:x,title:b,project_id:t}),z=function({heartbeat_task_id:a,dedupe_key:b,project_id:c}){if(!a&&!b)return null;let d=(0,h.getDb)(),e=c||q.Sk;if(a){let b=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE heartbeat_task_id = ? LIMIT 1").get(String(a));if(b)return b}if(b){let a=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE dedupe_key = ? AND project_id = ? LIMIT 1").get(String(b),e);if(a)return a}return null}({heartbeat_task_id:o,dedupe_key:y,project_id:t});if(z)return{artifact_id:z.id,file_path:z.path,title:z.title||b,kind:z.kind||c,deduped:!0};let A=s&&s.org_id?s.org_id:"personal-org",B=(0,v.Pf)();function C(a,b){return B?(e.writeFileSync(a,(0,v.A5)(A,b)),{encrypted:1,encryption_key_id:A}):(e.writeFileSync(a,b,"utf8"),{encrypted:0,encryption_key_id:null})}let D="main-orchestrator"===x?"madarX Main Agent":(a=>{try{let b=a.prepare("SELECT name FROM agents WHERE id = ?").get(x);return b?.name||x}catch{return x}})((0,h.getDb)());if("markdown"===c||"text"===c){let a=(0,m.vr)(d||""),c=(0,m.j7)({title:b,markdown:a}),e=f.join(u,`${w}-${Date.now().toString(36)}.md`),{encrypted:g,encryption_key_id:h}=C(e,a),j=(0,i.z9)(e),k=U({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:x,artifact:j,preview:a.slice(0,200),triggered_by:"claude",status:"complete"}),l=V({run_id:k.id,agent_id:x,file_path:j,kind:"document",title:b,content:c,source_md:a,project_id:t,encrypted:g,encryption_key_id:h,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:x,run_id:k.id,title:`Created artifact: ${b}`,summary:`New document "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:l,kind:"document",folder_id:null}})}catch{}return{artifact_id:l,file_path:j,title:b,kind:"document"}}if("html"===c){let c=(d||"").trimStart().slice(0,200).toLowerCase();if(!(c.startsWith("<!doctype")||c.startsWith("<html")||c.includes("<body")))return a({title:b,kind:"markdown",content:d,project_id:k,agent_id:l,space_id:n,heartbeat_task_id:o,dedupe_key:p})}let E=(d||"").trimStart().slice(0,200).toLowerCase(),F=E.startsWith("<!doctype")||E.startsWith("<html")||E.includes("<body"),G="html"===c||F?(0,m.vr)(d||""):d||"",H=f.join(u,`${w}-${Date.now().toString(36)}.${"html"===c||F?"html":"txt"}`),{encrypted:I,encryption_key_id:J}=C(H,G),K=(0,i.z9)(H),L=U({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:x,artifact:K,preview:G.slice(0,200),triggered_by:"claude",status:"complete"}),M=V({run_id:L.id,agent_id:x,file_path:K,kind:c,title:b,content:G,project_id:t,encrypted:I,encryption_key_id:J,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:x,run_id:L.id,title:`Created artifact: ${b}`,summary:`New ${c} artifact "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:M,kind:c,folder_id:null}})}catch{}return{artifact_id:M,file_path:K,title:b,kind:c}},Gu:()=>ai,IG:()=>ag,K2:()=>G,Mh:()=>N,NK:()=>ae,Nv:()=>ac,PF:()=>O,RB:()=>_,RG:()=>L,S9:()=>Z,Sn:()=>$,UA:()=>ao,V1:()=>J,W1:()=>I,WU:()=>E,Xr:()=>H,YS:()=>al,_u:()=>P,appendAudit:()=>T,bC:()=>ab,eP:()=>X,fB:()=>an,fk:()=>am,jZ:()=>S,mk:()=>af,mo:()=>aq,n1:()=>R,nF:()=>ah,q:()=>ar,recordArtifact:()=>V,recordRun:()=>U,v:()=>M,vc:()=>D,wn:()=>Q,x4:()=>aa});var e=c(73024),f=c(76760),g=c(77598),h=c(34255),i=c(9381),j=c(73066),k=c(90712),l=c(14743),m=c(8727),n=c(40563),o=c(8437),p=c(72326),q=c(61423),r=c(83963),s=c(40718),t=c(9001),u=c(81833),v=c(79133),w=a([h,j,l,m,n,o,p,q,r,s,t,u]);function x(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}function y(){return new Date().toISOString().slice(0,10)}function z(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function A(a){return a?{id:a.id,name:a.name,type:a.type,engine:(0,p.$k)(a.engine),model:a.model||(0,p.Qp)(a.engine),mission:a.mission,schedule:a.schedule,tools:z(a.tools,[]),status:a.status,approval:a.approval,generated:1===a.generated,files:z(a.files,[]),system_prompt:a.system_prompt||null,expected_output:a.expected_output||null,memory:z(a.memory,[]),created_at:a.created_at,last_heartbeat:a.last_heartbeat,last_run_at:a.last_run_at,next_run_at:a.next_run_at,reports_to:a.reports_to||null,role:a.role||null,title:a.title||null,status_reason:a.status_reason||null,autonomy_mode:a.autonomy_mode||null,budget_monthly_cents:Number(a.budget_monthly_cents||0),spent_monthly_cents:Number(a.spent_monthly_cents||0),permissions_json:z(a.permissions_json,{}),metadata_json:z(a.metadata_json,{}),project_id:a.project_id||null,template_slug:a.template_slug||null,default_space_id:a.default_space_id||null}:null}function B(a){return a?{id:a.id,agent_id:a.agent_id,agent_name:a.agent_name,schedule:a.schedule,action_kind:a.action_kind,enabled:1===a.enabled,next_run_at:a.next_run_at,last_run_at:a.last_run_at,delivery:a.delivery,approval:a.approval,last_queued_at:a.last_queued_at,last_queued_window:a.last_queued_window,updated_at:a.updated_at}:null}function C(a){return a?{...a}:null}function D(){return(0,h.getDb)().prepare("SELECT * FROM agents ORDER BY generated ASC, name ASC").all().map(A)}function E(a){let b=(0,h.getDb)();return A(b.prepare("SELECT * FROM agents WHERE id = ?").get(a))}function F(a){return a?{id:a.id,agent_id:a.agent_id,tool_name:a.tool_name,mode:a.mode,created_at:a.created_at,updated_at:a.updated_at}:null}function G(a){return(0,h.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? ORDER BY tool_name ASC").all(a).map(F)}function H(a,b,c="approval_required"){if(!a||!b)throw Error("agent_id and tool_name are required");if(!["auto","approval_required","disabled"].includes(c))throw Error(`Invalid tool permission mode: ${c}`);let d=(0,h.getDb)(),e=(0,h.nowIso)(),f=`perm-${a}-${b}`.replace(/[^a-zA-Z0-9_-]/g,"-");return d.prepare(`
|
|
2994
|
+
`).run((0,e.newId)("msa"),b.project_id,d.kind,b.original_path,d.crs,d.bbox?JSON.stringify(d.bbox):null,d.file_size_bytes,(0,e.nowIso)()),a.prepare("UPDATE mines_source_documents SET extraction_status = ?, updated_at = ? WHERE id = ?").run("complete",(0,e.nowIso)(),b.id),!!c}async function i(a,b={}){let c=(0,e.getDb)();if(a?.source_document_id){let b=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE id = ?").get(a.source_document_id);if(!b)return{status:"error",error:"source_document_not_found"};let d=h(c,b);return{status:"ok",assets_indexed:+!d,assets_skipped:+!!d}}let d=a?.project_id;if(!d)return{status:"error",error:"project_id_required"};let f=c.prepare("SELECT id, project_id, original_path, file_type FROM mines_source_documents WHERE project_id = ?").all(d).filter(a=>j.has(String(a.file_type||"").toLowerCase())),g=0,k=0;for(let a of f)try{h(c,a)?k++:g++}catch{k++}return{status:"ok",assets_indexed:g,assets_skipped:k}}d()}catch(a){d(a)}})},59400:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{IY:()=>B,dV:()=>A,tE:()=>x,vC:()=>y});var e=c(77030),f=c(24516),g=c(58282),h=a([f,g]);function i(a){return String(process.env[a]||"").trim()}function j(a){try{let b=(0,f.getSecret)(a);if(b)return String(b).trim()}catch{}return i(a)}function k(a={}){let b=String(a.query||a.q||"").trim();if(!b)throw Error("query is required");return b}function l(a={}){return Math.min(Math.max(Number(a.count||5),1),10)}function m({title:a,url:b,snippet:c,source:d,rank:e=0,metadata:f={}}){return{rank:e+1,title:String(a||""),url:String(b||""),snippet:String(c||""),source:d,metadata:f}}async function n(a,b={},c=fetch){let d=await c(a,b);if(!d.ok){let a=d.statusText||String(d.status);try{let b=await d.text();b&&(a=`${a}: ${b.slice(0,200)}`)}catch{}throw Error(`Request failed: ${d.status} ${a}`.trim())}return d.json()}function o(a={},b=0){return m({rank:b,title:a.title,url:a.url,snippet:a.description||a.snippet,source:"brave",metadata:{age:a.age||null,family_friendly:a.family_friendly??null}})}function p(){let a={Accept:"application/json","Content-Type":"application/json"},b=j("FIRECRAWL_API_KEY");return b&&(a.Authorization=`Bearer ${b}`),a}function q(){return(j("FIRECRAWL_API_URL")||"https://api.firecrawl.dev").replace(/\/+$/g,"")}async function r(a={},b=fetch){let c=k(a),d=l(a),e=await n(`${q()}/v1/search`,{method:"POST",headers:p(),body:JSON.stringify({query:c,limit:d})},b);return{query:c,source:"firecrawl",results:(function(a={}){return Array.isArray(a.data)?a.data:Array.isArray(a.results)?a.results:Array.isArray(a.web)?a.web:Array.isArray(a.web?.results)?a.web.results:[]})(e).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url||a.link,snippet:a.description||a.snippet||a.content||a.markdown,source:"firecrawl",metadata:a.metadata||{}})).filter(a=>a.url)}}async function s(a={},b=fetch){let c=k(a),d=l(a),e=j("SEARXNG_URL");if(!e)throw Error("SEARXNG_URL not configured");let f=new URL("/search",e.replace(/\/+$/g,""));f.searchParams.set("q",c),f.searchParams.set("format","json"),(a.search_lang||a.language)&&f.searchParams.set("language",String(a.search_lang||a.language));let g=await n(f,{headers:{Accept:"application/json"}},b);return{query:c,source:"searxng",results:(g.results||[]).slice(0,d).map((a,b)=>m({rank:b,title:a.title,url:a.url,snippet:a.content||a.snippet,source:"searxng",metadata:a.metadata||{}})).filter(a=>a.url)}}async function t(a={},b=fetch){let c=j("BRAVE_SEARCH_API_KEY");if(!c)throw Error("BRAVE_SEARCH_API_KEY not configured");let d=k(a),e=l(a),f=new URL("https://api.search.brave.com/res/v1/web/search");f.searchParams.set("q",d),f.searchParams.set("count",String(e)),a.country&&f.searchParams.set("country",String(a.country)),a.search_lang&&f.searchParams.set("search_lang",String(a.search_lang));let g=await n(f,{headers:{Accept:"application/json","X-Subscription-Token":c}},b),h=(g.web?.results||[]).slice(0,e).map(o);return{query:d,source:"brave",results:h}}function u(a=""){return String(a).replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/'/g,"'")}function v(a=""){return u(String(a).replace(/<[^>]+>/g," ")).replace(/\s+/g," ").trim()}async function w(a={},b=fetch){let c=k(a),d=l(a),e=new URL("https://lite.duckduckgo.com/lite/");e.searchParams.set("q",c);let f=await b(e,{headers:{Accept:"text/html,application/xhtml+xml;q=0.9,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"}});if(!f.ok)throw Error(`DuckDuckGo Lite search failed: ${f.status}`);let g=await f.text();return{query:c,source:"fetch",results:function(a="",b=5){let c=[...String(a).matchAll(/<a\b[^>]*href=["'][^"']+["'][^>]*>[\s\S]*?<\/a>/gi)],d=[...String(a).matchAll(/<td\b[^>]*class=["'][^"']*result-snippet[^"']*["'][^>]*>([\s\S]*?)<\/td>/gi)].map(a=>v(a[1])),e=[];for(let a of c){let c=a[0].match(/<a\b[^>]*>/i)?.[0]||"",f=v(a[0]),g=function(a=""){try{let b=new URL(a,"https://lite.duckduckgo.com"),c=b.searchParams.get("uddg");if(c)return c;if(["http:","https:"].includes(b.protocol))return b.toString()}catch{}return a}(function(a,b){let c=a.match(RegExp(`${b}\\s*=\\s*["']([^"']+)["']`,"i"));return c?u(c[1]):""}(c,"href"));if(f&&/^https?:\/\//i.test(g)&&(e.push(m({rank:e.length,title:f,url:g,snippet:d[e.length]||"",source:"duckduckgo_lite",metadata:{}})),e.length>=b))break}return e}(g,d)}}async function x(a={},b={}){let c=b.agent_id??null,d=function(){let a=i("MADARX_WEB_PROVIDER").toLowerCase();if(a){if(["firecrawl","searxng","brave","fetch"].includes(a))return a;throw Error(`Unsupported MADARX_WEB_PROVIDER: ${a}`)}return j("FIRECRAWL_API_URL")||j("FIRECRAWL_API_KEY")?"firecrawl":j("SEARXNG_URL")?"searxng":j("BRAVE_SEARCH_API_KEY")?"brave":"fetch"}();return"firecrawl"===d?r(a,(0,g.N)("web_search",c)):"searxng"===d?s(a,(0,g.N)("web_search",c)):"brave"===d?t(a,(0,g.N)("web_search",c)):w(a,(0,g.N)("web_search",c))}function y(a){let b;try{b=new URL(String(a||""))}catch{throw Error("url must be a valid URL")}if(!["http:","https:"].includes(b.protocol))throw Error("Only http and https URLs are supported");let c=b.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(!c)throw Error("URL host is required");if("localhost"===c||c.endsWith(".localhost")||c.endsWith(".local"))throw Error("Local/private network URLs are blocked");let d=e.isIP(c);if(4===d&&function(a){let b=a.split(".").map(Number);if(4!==b.length||b.some(a=>!Number.isInteger(a)||a<0||a>255))return!1;let[c,d]=b;return 10===c||127===c||169===c&&254===d||172===c&&d>=16&&d<=31||192===c&&168===d||0===c}(c)||6===d&&function(a){let b=a.toLowerCase();return"::1"===b||b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80:")||"::"===b||b.startsWith("0:")}(c))throw Error("Local/private network URLs are blocked");return b}function z(a){return String(a||"").replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi," ").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi," ").replace(/<noscript\b[^>]*>[\s\S]*?<\/noscript>/gi," ").replace(/<!--[\s\S]*?-->/g," ").replace(/<\/(p|div|section|article|header|footer|main|li|h[1-6]|tr)>/gi,"\n").replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").replace(/[ \t]{2,}/g," ").trim()}async function A(a={},b={}){let c=b.agent_id??null,d=(0,g.N)("web_fetch",c),e=y(a.url),f=Math.min(Math.max(Number(a.max_bytes||512e3),1024),512e3),h=await d(e,{headers:{Accept:"text/html,text/plain,application/xhtml+xml,application/json;q=0.8,*/*;q=0.2","User-Agent":"MadarxOS/1.0 (+local research tool)"},redirect:"follow"});if(!h.ok)throw Error(`Fetch failed: ${h.status}`);let i=Number(h.headers.get("content-length")||0);if(i&&i>f)throw Error(`Response too large: ${i} bytes`);let j=h.body?.getReader();if(!j){let a=await h.text();if(Buffer.byteLength(a,"utf8")>f)throw Error("Response too large");return{url:e.toString(),status:h.status,content_type:h.headers.get("content-type")||"",text:z(a)}}let k=[],l=0;for(;;){let{value:a,done:b}=await j.read();if(b)break;if((l+=a.byteLength)>f)throw Error("Response too large");k.push(a)}let m=Buffer.concat(k).toString("utf8"),n=h.headers.get("content-type")||"";return{url:h.url||e.toString(),status:h.status,content_type:n,text:z(m).slice(0,Math.min(f,12e4)),source:{url:h.url||e.toString(),fetched_at:new Date().toISOString()}}}async function B(a={},b={}){let c=b.agent_id??null,d=y(a.url);if(!j("FIRECRAWL_API_URL")&&!j("FIRECRAWL_API_KEY"))return A(a,b);let e=await n(`${q()}/v1/scrape`,{method:"POST",headers:p(),body:JSON.stringify({url:d.toString(),formats:["markdown"]})},(0,g.N)("web_extract",c)),f=e.data||e,h=String(f.markdown||f.content||f.text||"");return{url:d.toString(),status:200,content_type:"text/markdown",text:h.slice(0,12e4),metadata:f.metadata||{},source:{provider:"firecrawl",url:d.toString(),fetched_at:new Date().toISOString()}}}[f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},60105:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$S:()=>ar,AD:()=>av,CM:()=>Z,Ck:()=>L,Dg:()=>function a({title:b,kind:c="html",content:d,project_id:k=null,agent_id:l=null,space_id:n=null,heartbeat_task_id:o=null,dedupe_key:p=null}){(0,i.Jh)();let r=k||q.Sk,s=(0,q.hF)({status:"all"}).find(a=>a.id===r||a.slug===r),t=s?s.id:q.Sk,u=(0,j.Kg)(t),v=(b||"artifact").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"artifact",x=l||"main-orchestrator",y=""===p?null:p||function({agent_id:a,title:b,project_id:c}){let d=new Date().toISOString().slice(0,10),e=String(b||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");return g.createHash("sha256").update([a||"main-orchestrator",c||q.Sk,e,d].join("|")).digest("hex").slice(0,32)}({agent_id:x,title:b,project_id:t}),z=function({heartbeat_task_id:a,dedupe_key:b,project_id:c}){if(!a&&!b)return null;let d=(0,h.getDb)(),e=c||q.Sk;if(a){let b=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE heartbeat_task_id = ? LIMIT 1").get(String(a));if(b)return b}if(b){let a=d.prepare("SELECT id, path, kind, title FROM artifacts WHERE dedupe_key = ? AND project_id = ? LIMIT 1").get(String(b),e);if(a)return a}return null}({heartbeat_task_id:o,dedupe_key:y,project_id:t});if(z)return{artifact_id:z.id,file_path:z.path,title:z.title||b,kind:z.kind||c,deduped:!0};let A=s&&s.org_id?s.org_id:"personal-org",B=(0,w.Pf)();function C(a,b){return B?(e.writeFileSync(a,(0,w.A5)(A,b)),{encrypted:1,encryption_key_id:A}):(e.writeFileSync(a,b,"utf8"),{encrypted:0,encryption_key_id:null})}let D="main-orchestrator"===x?"madarX Main Agent":(a=>{try{let b=a.prepare("SELECT name FROM agents WHERE id = ?").get(x);return b?.name||x}catch{return x}})((0,h.getDb)());if("markdown"===c||"text"===c){let a=(0,m.vr)(d||""),c=(0,m.j7)({title:b,markdown:a}),e=f.join(u,`${v}-${Date.now().toString(36)}.md`),{encrypted:g,encryption_key_id:h}=C(e,a),j=(0,i.z9)(e),k=V({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:x,artifact:j,preview:a.slice(0,200),triggered_by:"claude",status:"complete"}),l=W({run_id:k.id,agent_id:x,file_path:j,kind:"document",title:b,content:c,source_md:a,project_id:t,encrypted:g,encryption_key_id:h,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:x,run_id:k.id,title:`Created artifact: ${b}`,summary:`New document "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:l,kind:"document",folder_id:null}})}catch{}return{artifact_id:l,file_path:j,title:b,kind:"document"}}if("html"===c){let c=(d||"").trimStart().slice(0,200).toLowerCase();if(!(c.startsWith("<!doctype")||c.startsWith("<html")||c.includes("<body")))return a({title:b,kind:"markdown",content:d,project_id:k,agent_id:l,space_id:n,heartbeat_task_id:o,dedupe_key:p})}let E=(d||"").trimStart().slice(0,200).toLowerCase(),F=E.startsWith("<!doctype")||E.startsWith("<html")||E.includes("<body"),G="html"===c||F?(0,m.vr)(d||""):d||"",H=f.join(u,`${v}-${Date.now().toString(36)}.${"html"===c||F?"html":"txt"}`),{encrypted:I,encryption_key_id:J}=C(H,G),K=(0,i.z9)(H),L=V({kind:"artifact-created",title:`Created artifact: ${b}`,agent:D,agent_id:x,artifact:K,preview:G.slice(0,200),triggered_by:"claude",status:"complete"}),M=W({run_id:L.id,agent_id:x,file_path:K,kind:c,title:b,content:G,project_id:t,encrypted:I,encryption_key_id:J,space_id:n,heartbeat_task_id:o,dedupe_key:y});try{(0,q.Ip)(t,{action:"project.artifact.created",actor_type:"agent",agent_id:x,run_id:L.id,title:`Created artifact: ${b}`,summary:`New ${c} artifact "${b}" is in the library.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:M,kind:c,folder_id:null}})}catch{}return{artifact_id:M,file_path:K,title:b,kind:c}},Gu:()=>ak,IG:()=>ai,K2:()=>H,Mh:()=>O,NK:()=>ag,Nv:()=>ae,OH:()=>_,PF:()=>P,RB:()=>ab,RG:()=>M,S9:()=>$,Sn:()=>aa,UA:()=>aq,V1:()=>K,W1:()=>J,WU:()=>F,Xr:()=>I,YS:()=>an,_u:()=>Q,appendAudit:()=>U,bC:()=>ad,eP:()=>Y,fB:()=>ap,fk:()=>ao,jZ:()=>T,mk:()=>ah,mo:()=>as,n1:()=>S,nF:()=>aj,q:()=>at,recordArtifact:()=>W,recordRun:()=>V,v:()=>N,vc:()=>E,wn:()=>R,x4:()=>ac});var e=c(73024),f=c(76760),g=c(77598),h=c(34255),i=c(9381),j=c(73066),k=c(90712),l=c(14743),m=c(8727),n=c(40563),o=c(8437),p=c(72326),q=c(61423),r=c(83963),s=c(40718),t=c(60897),u=c(9001),v=c(81833),w=c(79133),x=a([h,j,l,m,n,o,p,q,r,s,u,v]);function y(a){return String(a||"agent").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}function z(){return new Date().toISOString().slice(0,10)}function A(a,b){if(!a)return b;try{return JSON.parse(a)}catch{return b}}function B(a){return a?{id:a.id,name:a.name,type:a.type,engine:(0,p.$k)(a.engine),model:a.model||(0,p.Qp)(a.engine),mission:a.mission,schedule:a.schedule,tools:A(a.tools,[]),status:a.status,approval:a.approval,generated:1===a.generated,files:A(a.files,[]),system_prompt:a.system_prompt||null,expected_output:a.expected_output||null,memory:A(a.memory,[]),created_at:a.created_at,last_heartbeat:a.last_heartbeat,last_run_at:a.last_run_at,next_run_at:a.next_run_at,reports_to:a.reports_to||null,role:a.role||null,title:a.title||null,status_reason:a.status_reason||null,autonomy_mode:a.autonomy_mode||null,budget_monthly_cents:Number(a.budget_monthly_cents||0),spent_monthly_cents:Number(a.spent_monthly_cents||0),permissions_json:A(a.permissions_json,{}),metadata_json:A(a.metadata_json,{}),project_id:a.project_id||null,template_slug:a.template_slug||null,default_space_id:a.default_space_id||null}:null}function C(a){return a?{id:a.id,agent_id:a.agent_id,agent_name:a.agent_name,schedule:a.schedule,action_kind:a.action_kind,enabled:1===a.enabled,next_run_at:a.next_run_at,last_run_at:a.last_run_at,delivery:a.delivery,approval:a.approval,last_queued_at:a.last_queued_at,last_queued_window:a.last_queued_window,updated_at:a.updated_at}:null}function D(a){return a?{...a}:null}function E(){return(0,h.getDb)().prepare("SELECT * FROM agents ORDER BY generated ASC, name ASC").all().map(B)}function F(a){let b=(0,h.getDb)();return B(b.prepare("SELECT * FROM agents WHERE id = ?").get(a))}function G(a){return a?{id:a.id,agent_id:a.agent_id,tool_name:a.tool_name,mode:a.mode,created_at:a.created_at,updated_at:a.updated_at}:null}function H(a){return(0,h.getDb)().prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? ORDER BY tool_name ASC").all(a).map(G)}function I(a,b,c="approval_required"){if(!a||!b)throw Error("agent_id and tool_name are required");if(!["auto","approval_required","disabled"].includes(c))throw Error(`Invalid tool permission mode: ${c}`);let d=(0,h.getDb)(),e=(0,h.nowIso)(),f=`perm-${a}-${b}`.replace(/[^a-zA-Z0-9_-]/g,"-");return d.prepare(`
|
|
2995
2995
|
INSERT INTO agent_tool_permissions (id, agent_id, tool_name, mode, created_at, updated_at)
|
|
2996
2996
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
2997
2997
|
ON CONFLICT(agent_id, tool_name) DO UPDATE SET mode=excluded.mode, updated_at=excluded.updated_at
|
|
2998
|
-
`).run(f,a,b,c,e,e),
|
|
2998
|
+
`).run(f,a,b,c,e,e),G(d.prepare("SELECT * FROM agent_tool_permissions WHERE agent_id = ? AND tool_name = ?").get(a,b))}function J({silent:a=!1}={}){let b=["directory_list","file_read","file_search","terminal_run","web_search","web_fetch"],c=aa({id:"ops-agent",name:"Caretaker",type:"ops",mission:"Run safe daily operations checks for madarX OS, inspect local workspace state, summarize risks, and prepare owner-ready next actions without external sends or destructive changes.",schedule:"daily 08:00",engine:"ollama",model:(0,p.Qp)("ollama"),tools:b,approval:"human-in-loop",suppress_live_event:a});for(let a of(ae({agent_id:"ops-agent",name:"Caretaker",schedule:"daily 08:00",action_kind:"agent-tick",approval:"human-in-loop"}),b)){let b=["directory_list","file_read","file_search","web_search","web_fetch"].includes(a)?"auto":"approval_required";I("ops-agent",a,b)}return U({type:"agent.ops.ensure",summary:"Ensured Caretaker",status:"complete",meta:{agent_id:"ops-agent"}}),{...c,permissions:H("ops-agent")}}function K(a){let b=(0,h.getDb)().prepare("SELECT memory FROM agents WHERE id = ?").get(a);return b?A(b.memory,[]):null}function L(a,b){let c=K(a);if(!c)return{ok:!1,error:"agent not found"};let d=Number(b);if(!Number.isInteger(d)||d<0||d>=c.length)return{ok:!1,error:"memory index out of range"};let e=c.splice(d,1)[0];return(0,h.getDb)().prepare("UPDATE agents SET memory = ? WHERE id = ?").run(JSON.stringify(c),a),U({type:"agent.memory.delete",summary:`Deleted memory entry for ${a}`,status:"complete",meta:{agent_id:a,index:d}}),{ok:!0,removed:e,memory:c}}function M(){return(0,h.getDb)().prepare("SELECT * FROM schedules ORDER BY enabled DESC, next_run_at ASC").all().map(C)}function N(a=20){return(0,h.getDb)().prepare("SELECT * FROM runs ORDER BY at DESC LIMIT ?").all(a).map(D)}function O(a){let b=(0,h.getDb)();return D(b.prepare("SELECT * FROM runs WHERE id = ?").get(a))}function P(a,b={}){let c=["status","artifact","preview","output"],d=Object.entries(b).filter(([a])=>c.includes(a));if(!d.length)return O(a);let e=(0,h.getDb)(),f=d.map(([a])=>`${a} = ?`).join(", "),g=d.map(([,a])=>a??null);return e.prepare(`UPDATE runs SET ${f} WHERE id = ?`).run(...g,a),O(a)}function Q(a=20){return(0,h.getDb)().prepare("SELECT * FROM audit_logs ORDER BY at DESC LIMIT ?").all(a)}function R(a=50){return(0,h.getDb)().prepare("SELECT * FROM artifacts ORDER BY created_at DESC LIMIT ?").all(a)}function S({title_query:a,agent_id:b,agent_name:c,kind:d,project_id:e,space_id:f,limit:g=10}={}){let i=(0,h.getDb)(),j=[],k=[];if(a){let b=String(a).toLowerCase().split(/\s+/).map(a=>a.replace(/[^a-z0-9]+/g,"")).filter(Boolean);if(0===b.length)j.push("LOWER(a.title) LIKE ?"),k.push(`%${String(a).toLowerCase()}%`);else for(let a of b)j.push("LOWER(a.title) LIKE ?"),k.push(`%${a}%`)}if(b&&(j.push("a.agent_id = ?"),k.push(String(b))),d&&(j.push("a.kind = ?"),k.push(String(d))),e){let a=String(e),b=(0,q.hF)({status:"all"}).find(b=>b.id===a||b.slug===a);j.push("a.project_id = ?"),k.push(b?b.id:a)}f&&(j.push("a.space_id = ?"),k.push(String(f)));let l=`
|
|
2999
2999
|
SELECT a.id, a.title, a.kind, a.agent_id, a.run_id, a.path, a.project_id, a.space_id, a.created_at,
|
|
3000
3000
|
ag.name AS agent_name
|
|
3001
3001
|
FROM artifacts a
|
|
3002
3002
|
LEFT JOIN agents ag ON ag.id = a.agent_id
|
|
3003
|
-
`;return c&&(j.push("LOWER(ag.name) LIKE ?"),k.push(`%${String(c).toLowerCase()}%`)),j.length&&(l+=`WHERE ${j.join(" AND ")} `),l+="ORDER BY a.created_at DESC LIMIT ?",k.push(Math.max(1,Math.min(50,Number(g)||10))),i.prepare(l).all(...k)}function
|
|
3003
|
+
`;return c&&(j.push("LOWER(ag.name) LIKE ?"),k.push(`%${String(c).toLowerCase()}%`)),j.length&&(l+=`WHERE ${j.join(" AND ")} `),l+="ORDER BY a.created_at DESC LIMIT ?",k.push(Math.max(1,Math.min(50,Number(g)||10))),i.prepare(l).all(...k)}function T(a){return a&&(0,h.getDb)().prepare("SELECT * FROM artifacts WHERE id = ?").get(String(a))||null}function U(a){let b=(0,h.getDb)(),c=(0,h.newId)("audit"),d=(0,h.nowIso)(),e=a.type||"info";b.prepare(`
|
|
3004
3004
|
INSERT INTO audit_logs (id, at, type, summary, status, meta)
|
|
3005
3005
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
3006
|
-
`).run(c,d,e,a.summary||"",a.status||null,a.meta?JSON.stringify(a.meta):null);let f=e?e.startsWith("agent.")?"agents":"run"===e||e.startsWith("run.")||e.startsWith("claude.")?"runs":e.startsWith("artifact")?"artifacts":e.startsWith("approval")?"approvals":e.startsWith("heartbeat")||e.startsWith("cron")||e.startsWith("schedule")?"heartbeat":e.startsWith("connector")?"connectors":e.startsWith("local.process")||e.startsWith("process.")?"local_processes":e.startsWith("local.tool")||e.startsWith("local.terminal")||e.startsWith("local_tool")?"local_actions":e.startsWith("hermes")?"hermes_jobs":null:null;if(f)try{(0,
|
|
3006
|
+
`).run(c,d,e,a.summary||"",a.status||null,a.meta?JSON.stringify(a.meta):null);let f=e?e.startsWith("agent.")?"agents":"run"===e||e.startsWith("run.")||e.startsWith("claude.")?"runs":e.startsWith("artifact")?"artifacts":e.startsWith("approval")?"approvals":e.startsWith("heartbeat")||e.startsWith("cron")||e.startsWith("schedule")?"heartbeat":e.startsWith("connector")?"connectors":e.startsWith("local.process")||e.startsWith("process.")?"local_processes":e.startsWith("local.tool")||e.startsWith("local.terminal")||e.startsWith("local_tool")?"local_actions":e.startsWith("hermes")?"hermes_jobs":null:null;if(f)try{(0,u.jO)(f)}catch{}return{id:c,at:d,...a}}function V(a){let b=(0,h.getDb)(),c=(0,h.newId)("run"),d=(0,h.nowIso)(),e=a.status||"complete";return b.prepare(`
|
|
3007
3007
|
INSERT INTO runs (id, kind, title, agent, agent_id, status, artifact, preview, output, command, triggered_by, at)
|
|
3008
3008
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
3009
|
-
`).run(c,a.kind,a.title||a.kind,a.agent||null,a.agent_id||null,e,a.artifact||null,a.preview||null,a.output||null,a.command||null,a.triggered_by||"manual",d),
|
|
3009
|
+
`).run(c,a.kind,a.title||a.kind,a.agent||null,a.agent_id||null,e,a.artifact||null,a.preview||null,a.output||null,a.command||null,a.triggered_by||"manual",d),U({type:"run",summary:a.title||a.kind,status:e,meta:{run_id:c,kind:a.kind}}),{id:c,at:d,status:e,...a}}function W({run_id:a,agent_id:b,file_path:c,kind:d,title:e,content:f,source_md:g=null,project_id:i=null,encrypted:j=0,encryption_key_id:k=null,space_id:l=null,heartbeat_task_id:m=null,dedupe_key:n=null}){let o=(0,h.getDb)(),p=(0,h.newId)("artifact"),r=i||q.Sk,s=null;if(b){let a=o.prepare("SELECT default_space_id FROM agents WHERE id = ?").get(String(b));s=a?.default_space_id||null}let t=(0,v.Om)([l,s]);return o.prepare(`
|
|
3010
3010
|
INSERT INTO artifacts (id, run_id, agent_id, path, kind, title, content, source_md, project_id, encrypted, encryption_key_id, space_id, heartbeat_task_id, dedupe_key, created_at)
|
|
3011
3011
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
3012
|
-
`).run(p,a||null,b||null,c,d||null,e||null,f||null,g,r,+!!j,k||null,t,m||null,n||null,(0,h.nowIso)()),p}function
|
|
3012
|
+
`).run(p,a||null,b||null,c,d||null,e||null,f||null,g,r,+!!j,k||null,t,m||null,n||null,(0,h.nowIso)()),p}function X(a){if(!a)return null;let b=f.resolve(i.Dl,a);if((0,j.kA)(b))return b;let c=f.resolve(i.m4)+f.sep;return b.startsWith(c)?b:null}function Y(a,{title:b,content:c}){let d=(0,h.getDb)(),f=d.prepare("SELECT * FROM artifacts WHERE id = ?").get(a);if(!f)throw Error(`Artifact not found: ${a}`);let g=b||f.title,i=X(f.path);if("document"===f.kind){let b=(0,m.vr)(c||""),f=(0,m.j7)({title:g,markdown:b});if(i)try{e.writeFileSync(i,b,"utf8")}catch{}d.prepare("UPDATE artifacts SET title = ?, content = ?, source_md = ? WHERE id = ?").run(g,f,b,a)}else{let b="html"===f.kind?(0,m.vr)(c||""):c||"";if(i)try{e.writeFileSync(i,b,"utf8")}catch{}d.prepare("UPDATE artifacts SET title = ?, content = ? WHERE id = ?").run(g,b,a)}if(f.project_id)try{(0,q.Ip)(f.project_id,{action:"project.artifact.updated",actor_type:"agent",agent_id:f.agent_id||"main-orchestrator",title:`Updated artifact: ${g}`,summary:`"${g}" was edited.`,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:f.kind,folder_id:null}})}catch{}return{artifact_id:a,title:g,kind:f.kind}}function Z(a){let b=(0,h.getDb)(),c=b.prepare("SELECT path FROM artifacts WHERE id = ?").get(a);if(!c)return{ok:!1,error:"not found"};b.prepare("DELETE FROM artifacts WHERE id = ?").run(a);try{let a=(0,i.ny)(c.path),b=a&&e.existsSync(a)?e.realpathSync(a):null;b&&(0,j.kA)(b)&&e.unlinkSync(b)}catch{}return{ok:!0}}function $(a,{target_project_id:b}){if(!a)return{ok:!1,error:"artifact_id required"};if(!b)return{ok:!1,error:"target_project_id required"};let c=(0,h.getDb)(),d=c.prepare("SELECT * FROM artifacts WHERE id = ?").get(a);if(!d)return{ok:!1,error:"artifact not found"};let g=(0,q.U1)(b);if(!g)return{ok:!1,error:`target project not found: ${b}`};let k=d.project_id||q.Sk;if(k===g.id)return{ok:!0,moved:!1,artifact_id:a,project_id:g.id,reason:"already in target project"};let l=(0,q.U1)(k),m=(0,j.Kg)(g),n=X(d.path),o=null;if(n){let a=f.basename(n),b=f.join(m,a);if(e.existsSync(b)){let c=f.extname(a),d=a.slice(0,a.length-c.length),g=1;for(;e.existsSync(f.join(m,`${d}-${g}${c}`));)g+=1;b=f.join(m,`${d}-${g}${c}`)}o=b}let p=d.encryption_key_id||l&&l.org_id||"personal-org",r=g.org_id||"personal-org",s=d.encryption_key_id;if(n&&o&&e.existsSync(n))try{if(1===d.encrypted&&p!==r){let a=e.readFileSync(n),b=(0,w.decryptFromDiskBuffer)(p,a);e.writeFileSync(o,(0,w.A5)(r,b)),e.unlinkSync(n),s=r}else e.renameSync(n,o)}catch(a){return{ok:!1,error:`disk move failed: ${a?.message||String(a)}`}}let t=o?(0,i.z9)(o):d.path;c.prepare("UPDATE artifacts SET project_id = ?, path = ?, encryption_key_id = ? WHERE id = ?").run(g.id,t,s,a);let u=`Moved "${d.title}" from ${l?.name||k} to ${g.name}`;try{(0,q.Ip)(k,{action:"project.artifact.moved_out",actor_type:"agent",agent_id:"main-orchestrator",title:`Moved artifact out: ${d.title}`,summary:u,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:d.kind,target_project_id:g.id,target_project_slug:g.slug}})}catch{}try{(0,q.Ip)(g.id,{action:"project.artifact.moved_in",actor_type:"agent",agent_id:"main-orchestrator",title:`Moved artifact in: ${d.title}`,summary:u,status:"complete",source:"artifact",update_kind:"progress",details:{artifact_id:a,kind:d.kind,source_project_id:k,source_project_slug:l?.slug||null}})}catch{}return U({type:"artifact.move",summary:u,status:"complete",meta:{artifact_id:a,source_project_id:k,target_project_id:g.id,old_path:d.path,new_path:t,re_encrypted:1===d.encrypted&&p!==r}}),{ok:!0,moved:!0,artifact_id:a,title:d.title,kind:d.kind,source_project_id:k,target_project_id:g.id,file_path:t}}function _(){let a,b=0,c=0;try{a=(0,t.R2)().trimEnd()+"\n"}catch{return{scanned:b,updated:c}}let d=[];try{d=e.readdirSync(i.bo,{withFileTypes:!0}).filter(a=>a.isDirectory())}catch{return{scanned:b,updated:c}}for(let g of d){let d,h,j=f.join(i.bo,g.name,"skills.md");try{d=e.readFileSync(j,"utf8")}catch{continue}if(b++,!d.includes("## Core playbooks"))continue;let k=d.indexOf("\n## Default skills");if((h=k>=0?d.slice(0,k).trimEnd()+"\n\n"+a:d.trimEnd()+"\n\n"+a)!==d)try{e.writeFileSync(j,h),c++}catch{}}return{scanned:b,updated:c}}function aa(a={}){let b=(0,h.getDb)(),c=a.name||"Client Workspace Custom Agent",d=y(a.id||c),g=a.type||"custom",j=a.mission||"Support Client Workspace operations as a local sub-agent.",k=a.schedule||"on demand",l=a.engine||"claude-code",m=(0,p.$k)(l),n=a.model||(0,p.Qp)(m),o=Array.isArray(a.tools)?a.tools:String(a.tools||"web-search,browser,files,cron").split(",").map(a=>a.trim()).filter(Boolean),q=a.approval||"human-in-loop",r=a.system_prompt||function({name:a,mission:b,tools:c=[],approval:d="human-in-loop"}={}){return`You are ${a||"a madarX OS agent"}, a local-first scheduled worker managed by the madarX Main Agent.
|
|
3013
3013
|
|
|
3014
3014
|
<agent_mission>
|
|
3015
3015
|
${b||"Support the user with concise, useful work."}
|
|
@@ -3028,7 +3028,7 @@ Rules:
|
|
|
3028
3028
|
Deliverable contract (read carefully):
|
|
3029
3029
|
- Your FINAL message is saved verbatim as the artifact the owner sees. It MUST be the complete result in clean markdown — the full report itself, not a status update, progress recap, run summary, or "what I did" note.
|
|
3030
3030
|
- Use working files only for your own scratch/dedup. The deliverable is the final message, so reproduce the full content there even if a prior version of today's output already exists on disk.
|
|
3031
|
-
- Structure for reading: a title, then well-organized sections with headings. Include every item in full (with sources, timestamps, and links where the mission calls for them), not just headlines or a scorecard.`}({name:c,mission:j,tools:o,approval:q}),s=Array.isArray(a.memory)?a.memory:[],
|
|
3031
|
+
- Structure for reading: a title, then well-organized sections with headings. Include every item in full (with sources, timestamps, and links where the mission calls for them), not just headlines or a scorecard.`}({name:c,mission:j,tools:o,approval:q}),s=Array.isArray(a.memory)?a.memory:[],v=(0,h.nowIso)(),w={id:d,name:c,type:g,engine:m,model:n,mission:j,schedule:k,tools:o,approval:q,system_prompt:r,expected_output:"string"==typeof a.expected_output?a.expected_output:null,memory:s,created_at:v,skills_markdown:"string"==typeof a.skills_markdown?a.skills_markdown:null,reports_to:a.reports_to||null,role:a.role||"individual_contributor",title:a.title||null,status_reason:a.status_reason||null,autonomy_mode:a.autonomy_mode||"managed",budget_monthly_cents:Number(a.budget_monthly_cents||0),spent_monthly_cents:Number(a.spent_monthly_cents||0),permissions_json:a.permissions_json||{},metadata_json:{...a.metadata_json||{},...void 0!==a.whatsapp_notify_chat_id?{whatsapp_notify_chat_id:a.whatsapp_notify_chat_id||null}:{}},project_id:a.project_id||null,template_slug:a.template_slug||null},x=function(a){let b;(0,i.Jh)();let c=f.join(i.bo,a.id);e.mkdirSync(c,{recursive:!0});let d=["AGENTS.md","skills.md","tools.md","heartbeat.json"].map(a=>(0,i.z9)(f.join(c,a)));if(e.writeFileSync(f.join(c,"AGENTS.md"),`# ${a.name}
|
|
3032
3032
|
|
|
3033
3033
|
Parent orchestrator: madarX Main Agent.
|
|
3034
3034
|
|
|
@@ -3047,7 +3047,7 @@ ${a.mission}
|
|
|
3047
3047
|
3. Save artifacts under your project's artifacts folder (workspace/projects/<slug>/artifacts/).
|
|
3048
3048
|
4. Never send emails, WhatsApp messages, social posts, deployments, purchases, or destructive commands without explicit approval.
|
|
3049
3049
|
5. Update heartbeat.json after each run.
|
|
3050
|
-
`)
|
|
3050
|
+
`),"string"==typeof a.skills_markdown&&a.skills_markdown.trim())b=a.skills_markdown.trim()+"\n";else{let c="";try{c="\n"+(0,t.R2)()}catch{}b=`# ${a.name} Skills
|
|
3051
3051
|
|
|
3052
3052
|
## Mission
|
|
3053
3053
|
${a.mission}
|
|
@@ -3058,7 +3058,7 @@ ${a.mission}
|
|
|
3058
3058
|
- Save every output as a local artifact under your project's artifacts folder (workspace/projects/<slug>/artifacts/).
|
|
3059
3059
|
- Hand off any external send, post, deployment, or destructive command to the main agent for approval.
|
|
3060
3060
|
- After each run, update heartbeat.json with status, summary, and next-run plan.
|
|
3061
|
-
|
|
3061
|
+
${c}`}e.writeFileSync(f.join(c,"skills.md"),b),e.writeFileSync(f.join(c,"tools.md"),`# ${a.name} Tools
|
|
3062
3062
|
|
|
3063
3063
|
Allowed tools/connectors:
|
|
3064
3064
|
${(a.tools||[]).map(a=>`- ${a}`).join("\n")}
|
|
@@ -3073,7 +3073,7 @@ ${(a.tools||[]).map(a=>`- ${a}`).join("\n")}
|
|
|
3073
3073
|
- Instagram/TikTok monitoring is public-view/mock until authenticated connectors are approved.
|
|
3074
3074
|
- Gmail/Calendar actions are draft or read mode unless the owner approves.
|
|
3075
3075
|
- Claude Code commands require visible command preview and audit log entry.
|
|
3076
|
-
`);let g={id:a.id,name:a.name,type:a.type,engine:a.engine,model:a.model,mission:a.mission,schedule:a.schedule,tools:a.tools,status:"created",approval:a.approval,created_at:a.created_at,last_run:null,next_run:"on demand"===a.schedule?null:"next scheduled window",files:
|
|
3076
|
+
`);let g={id:a.id,name:a.name,type:a.type,engine:a.engine,model:a.model,mission:a.mission,schedule:a.schedule,tools:a.tools,status:"created",approval:a.approval,created_at:a.created_at,last_run:null,next_run:"on demand"===a.schedule?null:"next scheduled window",files:d};return e.writeFileSync(f.join(c,"heartbeat.json"),JSON.stringify(g,null,2)),d}(w),z=b.prepare("SELECT 1 AS x FROM agents WHERE id = ?").get(d);return b.prepare(`
|
|
3077
3077
|
INSERT INTO agents (id, name, type, engine, model, mission, schedule, tools, status, approval, generated, files, system_prompt, expected_output, memory, created_at,
|
|
3078
3078
|
reports_to, role, title, status_reason, autonomy_mode, budget_monthly_cents, spent_monthly_cents, permissions_json, metadata_json, project_id, template_slug)
|
|
3079
3079
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'created', ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -3094,14 +3094,14 @@ ${(a.tools||[]).map(a=>`- ${a}`).join("\n")}
|
|
|
3094
3094
|
metadata_json=COALESCE(agents.metadata_json, excluded.metadata_json),
|
|
3095
3095
|
project_id=COALESCE(agents.project_id, excluded.project_id),
|
|
3096
3096
|
template_slug=COALESCE(agents.template_slug, excluded.template_slug)
|
|
3097
|
-
`).run(d,c,g,m,n,j,k,JSON.stringify(o),q,JSON.stringify(
|
|
3097
|
+
`).run(d,c,g,m,n,j,k,JSON.stringify(o),q,JSON.stringify(x),r,w.expected_output,JSON.stringify(s),v,w.reports_to,w.role,w.title,w.status_reason,w.autonomy_mode,w.budget_monthly_cents,w.spent_monthly_cents,JSON.stringify(w.permissions_json),JSON.stringify(w.metadata_json),w.project_id,w.template_slug),!z&&(U({type:"agent.create",summary:`Created ${c}`,meta:{agent_id:d,files:x}}),a.suppress_live_event||(0,u.AC)({type:"agent_created",agent_id:d,agent_name:c,triggered_by:a.triggered_by||null})),{agent:{...w,status:"created",generated:!0,files:x},files:x}}function ab(a){let b=(0,h.getDb)(),c=B(b.prepare("SELECT * FROM agents WHERE id = ?").get(a));if(!c)return{ok:!1,error:"agent not found"};b.prepare("DELETE FROM agents WHERE id = ?").run(a),b.prepare("DELETE FROM schedules WHERE agent_id = ?").run(a);try{let b=f.join(i.bo,a);e.existsSync(b)&&e.rmSync(b,{recursive:!0,force:!0})}catch{}return U({type:"agent.delete",summary:`Deleted ${c.name}`,status:"complete",meta:{agent_id:a}}),{ok:!0}}function ac(a,b={}){let c=(0,h.getDb)(),d=[],e=[];if(void 0!==b.engine){let a=(0,p.$k)(b.engine);d.push("engine = ?"),e.push(a),void 0===b.model&&(d.push("model = ?"),e.push((0,p.Qp)(a)))}for(let a of(void 0!==b.model&&(d.push("model = ?"),e.push(b.model)),void 0!==b.schedule&&(d.push("schedule = ?"),e.push(b.schedule)),["reports_to","role","title","status","status_reason","autonomy_mode","budget_monthly_cents","spent_monthly_cents"]))void 0!==b[a]&&(d.push(`${a} = ?`),e.push(b[a]??null));for(let a of["system_prompt","mission","expected_output"])if(void 0!==b[a]){let c=null==b[a]?null:String(b[a]).trim();d.push(`${a} = ?`),e.push(c||null)}if(void 0!==b.default_space_id){let a=b.default_space_id,f=null;if(null!==a&&""!==a){if(!c.prepare("SELECT id FROM dashboard_spaces WHERE id = ?").get(String(a)))return{ok:!1,error:`unknown space_id: ${a}`};f=String(a)}d.push("default_space_id = ?"),e.push(f)}for(let a of["permissions_json","metadata_json"])void 0!==b[a]&&(d.push(`${a} = ?`),e.push(JSON.stringify(b[a]||{})));return d.length?(e.push(a),c.prepare(`UPDATE agents SET ${d.join(", ")} WHERE id = ?`).run(...e),U({type:"agent.update",summary:`Updated ${a}`,meta:{id:a,patch:b}}),{ok:!0}):{ok:!1,error:"nothing to update"}}function ad(a,b){let c=(0,h.getDb)(),d=c.prepare("SELECT id, name, metadata_json FROM agents WHERE id = ?").get(String(a||""));if(!d)return{ok:!1,error:`agent not found: ${a}`};let e=A(d.metadata_json,{}),f=b?String(b).trim():null;return f?e.whatsapp_notify_chat_id=f:delete e.whatsapp_notify_chat_id,c.prepare("UPDATE agents SET metadata_json = ? WHERE id = ?").run(JSON.stringify(e),d.id),U({type:"agent.whatsapp_notify",summary:f?`Enabled WhatsApp artifact notify for ${d.name} → ${f}`:`Cleared WhatsApp artifact notify for ${d.name}`,status:"complete",meta:{agent_id:d.id,chat_id:f}}),{ok:!0,agent_id:d.id,whatsapp_notify_chat_id:f}}function ae(a={}){let b=(0,h.getDb)(),c=y(a.agent_id||a.agentId||a.id||a.name||"custom-agent"),d=F(c)||b.prepare("SELECT * FROM agents WHERE name = ?").get(a.name||""),e=d?B(d):{id:c,name:a.name||c,approval:"human-in-loop"},f=a.schedule||"daily 07:30",g=`schedule-${e.id}`,i=+(!1!==a.enabled),j=(0,k.F)(f),l=(0,h.nowIso)(),m=String(f).trim().toLowerCase().startsWith("every")?"fire_once":"fire_all",n=a.catchup_policy||m;return b.prepare(`
|
|
3098
3098
|
INSERT INTO schedules (id, agent_id, agent_name, schedule, action_kind, enabled, next_run_at, delivery, approval, updated_at, catchup_policy)
|
|
3099
3099
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
3100
3100
|
ON CONFLICT(id) DO UPDATE SET
|
|
3101
3101
|
schedule=excluded.schedule, action_kind=excluded.action_kind, enabled=excluded.enabled,
|
|
3102
3102
|
next_run_at=excluded.next_run_at, delivery=excluded.delivery, approval=excluded.approval,
|
|
3103
3103
|
updated_at=excluded.updated_at, catchup_policy=excluded.catchup_policy
|
|
3104
|
-
`).run(g,e.id,e.name,f,a.action_kind||"agent-tick",i,j,a.delivery||"dashboard + owner approval",a.approval||e.approval||"human-in-loop",l,n),
|
|
3104
|
+
`).run(g,e.id,e.name,f,a.action_kind||"agent-tick",i,j,a.delivery||"dashboard + owner approval",a.approval||e.approval||"human-in-loop",l,n),U({type:"schedule.upsert",summary:`Scheduled ${e.name} \xb7 ${f}`,status:i?"enabled":"paused",meta:{schedule_id:g}}),{ok:!0,schedule:C(b.prepare("SELECT * FROM schedules WHERE id = ?").get(g))}}function af(a){return(0,i.Jh)(),f.join(i.m4,`madarx-${a}-${z()}.md`)}function ag({triggered_by:a="manual"}={}){let b=af("competitor-report"),c=z(),d=`# Client Workspace Daily Competitor Report — ${c}
|
|
3105
3105
|
|
|
3106
3106
|
Generated by: Competitor Intelligence Agent
|
|
3107
3107
|
|
|
@@ -3131,7 +3131,7 @@ Client Workspace should defend its niche perfumery authority while bundling work
|
|
|
3131
3131
|
2. Draft 5 Instagram reel concepts and 3 WhatsApp concierge messages.
|
|
3132
3132
|
3. Build a one-page workshop campaign mockup.
|
|
3133
3133
|
4. Send owner report for approval at 08:00.
|
|
3134
|
-
`;e.writeFileSync(b,d);let f="Daily Client Workspace competitor report",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=
|
|
3134
|
+
`;e.writeFileSync(b,d);let f="Daily Client Workspace competitor report",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=V({kind:"competitor-report",title:f,agent:"Competitor Intelligence Agent",agent_id:"competitor-intelligence",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return W({run_id:j.id,agent_id:"competitor-intelligence",file_path:(0,i.z9)(b),kind:"document",title:f,content:h,source_md:g}),j}function ah({triggered_by:a="manual"}={}){let b=af("marketing-plan"),c=z(),d=`# Client Workspace 7-Day Marketing Plan — ${c}
|
|
3135
3135
|
|
|
3136
3136
|
Generated by: Marketing Strategist Agent
|
|
3137
3137
|
|
|
@@ -3157,17 +3157,17 @@ Day 7: Owner report — leads, bookings, content performance, next experiments.
|
|
|
3157
3157
|
- Claude Code: build/update landing page mockup and QA screenshot.
|
|
3158
3158
|
- Codex: analyze report data and campaign performance table.
|
|
3159
3159
|
- Hermes: schedule reminders, draft WhatsApp/email replies, deliver owner briefing.
|
|
3160
|
-
`;e.writeFileSync(b,d);let f="Client Workspace 7-day marketing plan",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=
|
|
3161
|
-
${e}`,triggered_by:b})}function
|
|
3160
|
+
`;e.writeFileSync(b,d);let f="Client Workspace 7-day marketing plan",g=(0,m.vr)(d),h=(0,m.j7)({title:f,markdown:g}),j=V({kind:"marketing-plan",title:f,agent:"Marketing Strategist Agent",agent_id:"marketing-strategist",artifact:(0,i.z9)(b),preview:d,triggered_by:a});return W({run_id:j.id,agent_id:"marketing-strategist",file_path:(0,i.z9)(b),kind:"document",title:f,content:h,source_md:g}),j}function ai({triggered_by:a="manual"}={}){let b=(0,h.getDb)(),c=(0,h.nowIso)(),d=b.prepare("SELECT * FROM agents WHERE generated = 1").all().map(B);for(let a of d){let d,g=f.join(i.bo,a.id,"heartbeat.json");try{d=JSON.parse(e.readFileSync(g,"utf8"))}catch{d={...a}}d.status="heartbeat ok",d.last_heartbeat=c,d.next_run="on demand"===d.schedule?null:"next scheduled window",e.mkdirSync(f.dirname(g),{recursive:!0}),e.writeFileSync(g,JSON.stringify(d,null,2)),b.prepare("UPDATE agents SET last_heartbeat = ?, status = ? WHERE id = ?").run(c,"heartbeat ok",a.id)}return V({kind:"heartbeat",title:"Heartbeat tick completed",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"workspace/agents/*/heartbeat.json",preview:`Heartbeat checked ${d.length} agents at ${c}`,triggered_by:a})}function aj(a={},{triggered_by:b="manual"}={}){let c=Math.max(1,Math.min(50,Number(process.env.MAX_CLAUDE_TURNS||12)||12)),d=String(a.prompt||"Build a Client Workspace UI mockup and run browser QA.").replace(/\s+/g," ").slice(0,500),e=`claude -p ${JSON.stringify(d)} --allowedTools "Read,Write,Edit,Bash" --max-turns ${c} --output-format json`;return V({kind:"claude-code-dry-run",title:"Claude Code local runner command prepared",agent:"madarX Main Agent",agent_id:"main-orchestrator",status:"approval-needed",artifact:"audit log only - not executed",command:e,preview:`Approval required before executing:
|
|
3161
|
+
${e}`,triggered_by:b})}function ak({project_id:a=null}={}){(0,i.Jh)();let b=(0,r.hC)(),c=a||null;if(c)try{let a=(0,q.hF)({status:"all"}).find(a=>a.id===c||a.slug===c);a&&(c=a.id)}catch{}let d=a=>!c||a?.project_id===c;return{ok:!0,product:"madarX OS",workspace:"Client Workspace",project_filter:c||null,projects:(0,q.hF)({status:"all"}),agents:E().filter(d),tasks:(0,r.Vk)({limit:100}).filter(d),runs:N(20).filter(d),audit:Q(20).filter(d),activity:(0,r.kP)({limit:50}).filter(d),schedules:M().filter(d),connectors:(0,h.getDb)().prepare("SELECT * FROM connectors ORDER BY name ASC").all(),artifacts:R(500).filter(a=>d(a)||a.pinned_to_space_at),heartbeat_tasks:(0,n.N$)(20).filter(d),heartbeat_task_events:(0,n.vK)({limit:100}).filter(a=>!c||a.project_id===c||(0,h.getDb)().prepare("SELECT project_id FROM heartbeat_tasks WHERE id=?").get(a.task_id)?.project_id===c),approvals:(0,o.ct)({project_id:c,limit:20}),pending_approvals:(0,o.ct)({status:"pending",project_id:c,limit:20}),local_processes:function(a=20){return(0,h.getDb)().prepare("SELECT * FROM local_processes ORDER BY updated_at DESC LIMIT ?").all(a)}(20),local_tool_audit:Q(50).filter(a=>String(a.type||"").startsWith("local.")&&d(a)).slice(0,20),main_agent_trust_mode:(0,s.yC)(),reporting:b,processes:function(a){try{let b=(0,h.getDb)(),c=a?"WHERE project_id = ?":"",d=a?[a]:[],e=b.prepare(`SELECT id, definition_slug, project_id, title, status, current_stage_slug, updated_at, completed_at
|
|
3162
3162
|
FROM process_cases ${c}
|
|
3163
3163
|
ORDER BY updated_at DESC
|
|
3164
|
-
LIMIT 20`).all(...d),f=b.prepare(`SELECT status, COUNT(*) AS n FROM process_cases ${c} GROUP BY status`).all(...d).reduce((a,b)=>(a[b.status]=b.n,a),{});return{active_count:["intake","running","awaiting_approval"].reduce((a,b)=>a+(f[b]||0),0),by_status:f,recent_cases:e}}catch{return{active_count:0,by_status:{},recent_cases:[]}}}(c),hail:function(){try{let a=(0,h.getDb)().prepare("SELECT current_stage AS stage, COUNT(*) AS n FROM hail_engagements WHERE status = 'active' GROUP BY current_stage").all().reduce((a,b)=>(a[b.stage]=b.n,a),{});return{active_count:Object.values(a).reduce((a,b)=>a+b,0),by_stage:a}}catch{return{active_count:0,by_stage:{}}}}()}}function
|
|
3164
|
+
LIMIT 20`).all(...d),f=b.prepare(`SELECT status, COUNT(*) AS n FROM process_cases ${c} GROUP BY status`).all(...d).reduce((a,b)=>(a[b.status]=b.n,a),{});return{active_count:["intake","running","awaiting_approval"].reduce((a,b)=>a+(f[b]||0),0),by_status:f,recent_cases:e}}catch{return{active_count:0,by_status:{},recent_cases:[]}}}(c),hail:function(){try{let a=(0,h.getDb)().prepare("SELECT current_stage AS stage, COUNT(*) AS n FROM hail_engagements WHERE status = 'active' GROUP BY current_stage").all().reduce((a,b)=>(a[b.stage]=b.n,a),{});return{active_count:Object.values(a).reduce((a,b)=>a+b,0),by_stage:a}}catch{return{active_count:0,by_stage:{}}}}()}}function al(a){return a?{id:a.id,title:a.title,model:a.model,created_at:a.created_at,last_message_at:a.last_message_at,message_count:a.message_count,total_input_tokens:a.total_input_tokens,total_output_tokens:a.total_output_tokens,total_cache_read_tokens:a.total_cache_read_tokens,total_cache_creation_tokens:a.total_cache_creation_tokens,last_context_tokens:a.last_context_tokens}:null}function am(a){return a?{id:a.id,session_id:a.session_id,role:a.role,content:a.content,tool_calls:A(a.tool_calls,null),model:a.model,input_tokens:a.input_tokens,output_tokens:a.output_tokens,cache_read_tokens:a.cache_read_tokens,cache_creation_tokens:a.cache_creation_tokens,at:a.at}:null}function an(a=50){return(0,h.getDb)().prepare("SELECT * FROM chat_sessions ORDER BY COALESCE(last_message_at, created_at) DESC LIMIT ?").all(a).map(al)}function ao(a){let b=(0,h.getDb)(),c=b.prepare("SELECT * FROM chat_sessions WHERE id = ?").get(a);if(!c)return null;let d=b.prepare("SELECT * FROM chat_messages WHERE session_id = ? ORDER BY at ASC").all(a).map(am);return{...al(c),messages:d}}function ap({title:a=null,model:b=null}={}){let c=(0,h.getDb)(),d=(0,h.newId)("chat"),e=(0,h.nowIso)();return c.prepare(`
|
|
3165
3165
|
INSERT INTO chat_sessions
|
|
3166
3166
|
(id, title, model, created_at, last_message_at, message_count,
|
|
3167
3167
|
total_input_tokens, total_output_tokens,
|
|
3168
3168
|
total_cache_read_tokens, total_cache_creation_tokens, last_context_tokens)
|
|
3169
3169
|
VALUES (?, ?, ?, ?, ?, 0, 0, 0, 0, 0, 0)
|
|
3170
|
-
`).run(d,a,b,e,e),{id:d,title:a,model:b,created_at:e,last_message_at:e}}function
|
|
3170
|
+
`).run(d,a,b,e,e),{id:d,title:a,model:b,created_at:e,last_message_at:e}}function aq(a,{role:b,content:c="",tool_calls:d=null,model:e=null,input_tokens:f=0,output_tokens:g=0,cache_read_tokens:i=0,cache_creation_tokens:j=0}={}){if(!b)throw Error("role required");let k=(0,h.getDb)(),l=k.prepare("SELECT * FROM chat_sessions WHERE id = ?").get(a);if(!l)throw Error(`chat session ${a} not found`);let m=(0,h.newId)("msg"),n=(0,h.nowIso)(),o=d?JSON.stringify(d):null;k.prepare(`
|
|
3171
3171
|
INSERT INTO chat_messages
|
|
3172
3172
|
(id, session_id, role, content, tool_calls, model,
|
|
3173
3173
|
input_tokens, output_tokens, cache_read_tokens, cache_creation_tokens, at)
|
|
@@ -3184,24 +3184,24 @@ ${e}`,triggered_by:b})}function ai({project_id:a=null}={}){(0,i.Jh)();let b=(0,r
|
|
|
3184
3184
|
total_cache_creation_tokens = total_cache_creation_tokens + ?,
|
|
3185
3185
|
last_context_tokens = CASE WHEN ? > 0 THEN ? ELSE last_context_tokens END
|
|
3186
3186
|
WHERE id = ?
|
|
3187
|
-
`).run(p,e,n,0|f,0|g,0|i,0|j,q,q,a),{id:m,session_id:a,role:b,at:n}}function
|
|
3187
|
+
`).run(p,e,n,0|f,0|g,0|i,0|j,q,q,a),{id:m,session_id:a,role:b,at:n}}function ar(a,b){let c=(0,h.getDb)(),d=String(b||"").slice(0,200);return{ok:c.prepare("UPDATE chat_sessions SET title = ? WHERE id = ?").run(d,a).changes>0}}function as(a){return{ok:(0,h.getDb)().prepare("DELETE FROM chat_sessions WHERE id = ?").run(a).changes>0}}function at(a={}){let b=String(a.prompt||"").trim(),c=b.toLowerCase(),d=String(a.channel||"http"),e=a.from?String(a.from):null,f=(a,b)=>"whatsapp"!==d?a:{...a,channel:d,from:e,reply_text:function(a,b){if(!a)return b||"";let c=[];return a.title&&c.push(a.title),a.preview&&c.push(a.preview),!c.length&&b&&c.push(b),c.join("\n\n").replace(/`{1,3}/g,"").replace(/\*\*/g,"").replace(/<\/?[^>]+>/g,"").trim()}(a,b)};if(!b)return f(V({kind:"orchestrator-note",title:"Empty orchestrator command",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"none",preview:"Type a command for the madarX Main Agent."}),"Type a command for the madarX Main Agent.");if(c.includes("create agent")||c.includes("new agent")){let a=[];c.includes("instagram")&&a.push("instagram-public-view"),c.includes("tiktok")&&a.push("tiktok-public-view"),c.includes("web")&&a.push("web-search"),c.includes("browser")&&a.push("browser"),(c.includes("scrap")||c.includes("scrape"))&&a.push("browser-scrape"),(c.includes("mail")||c.includes("email"))&&a.push("gmail-draft"),(c.includes("ui")||c.includes("mockup")||c.includes("landing"))&&a.push("claude-code","browser-qa"),a.length||a.push("web-search","browser","files","cron");let d=c.includes("noon")?"daily 12:00":c.includes("08:15")?"daily 08:15":c.includes("daily")?"daily 07:30":"on demand",e=aa({name:function(a){let b=String(a||"").match(/create(?: an)? agent\s+([a-z0-9][a-z0-9\s-]{2,60}?)(?:\s+with|\s+to|\s+for|\s+every|\s+daily|$)/i);return b?b[1].trim().replace(/\s+/g," "):"Client Workspace Custom Agent"}(b),type:"custom",mission:b,schedule:d,tools:a});"on demand"!==d&&ae({agent_id:e.agent.id,schedule:d,action_kind:"agent-tick"});let g=V({kind:"agent-created",title:`Created ${e.agent.name}`,agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:e.files.join(", "),preview:`${e.agent.name} created with ${e.files.length} local files.`,triggered_by:"orchestrator"});return f({...g,created_agent:e.agent,files:e.files},`${e.agent.name} created with ${e.files.length} local files.`)}return c.includes("marketing")||c.includes("content plan")||c.includes("social media")?f(ah({triggered_by:"orchestrator"}),"Marketing plan generated."):c.includes("competitor")||c.includes("daily report")?f(ag({triggered_by:"orchestrator"}),"Competitor report generated."):c.includes("heartbeat")||c.includes("schedule tick")?f(ai({triggered_by:"orchestrator"}),"Heartbeat tick completed."):c.includes("claude")||c.includes("ui mockup")||c.includes("website")||c.includes("landing page")?f(aj({prompt:b},{triggered_by:"orchestrator"}),"Claude Code command prepared. Approve in the dashboard to execute."):f(V({kind:"orchestrator-plan",title:"Main agent routed command",agent:"madarX Main Agent",agent_id:"main-orchestrator",artifact:"audit log",preview:`Main agent received: ${b}
|
|
3188
3188
|
|
|
3189
|
-
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
|
|
3189
|
+
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 au({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
|
|
3190
3190
|
WHERE enabled = 1 AND next_run_at IS NOT NULL AND next_run_at <= ?
|
|
3191
|
-
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)}T({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)&&T({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(U({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 at({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 as({once:!0})}[h,j,l,m,n,o,p,q,r,s,t,u]=w.then?(await w)():w,d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";c.d(b,{fP:()=>k});let d=[{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:"Use a fine-grained token. Grant only the scopes you need.",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.map(a=>a.slug);let e=[{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."}],f={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:e.map(a=>`skill:open-design-${a.slug}`),published_count:e.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."}},g=[{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"]}}],h=[{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 i(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;d?a.prepare(`
|
|
3191
|
+
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)}U({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)&&U({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(V({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 av({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 au({once:!0})}[h,j,l,m,n,o,p,q,r,s,u,v]=x.then?(await x)():x,d()}catch(a){d(a)}})},60897:(a,b,c)=>{"use strict";c.d(b,{R2:()=>n,fP:()=>l});let d=[{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:"Use a fine-grained token. Grant only the scopes you need.",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.map(a=>a.slug);let e=[{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."}],f={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:e.map(a=>`skill:open-design-${a.slug}`),published_count:e.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."}},g=[{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"]}}],h=[{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"]}],i=[{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 j(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(`
|
|
3192
3192
|
UPDATE marketplace_items
|
|
3193
3193
|
SET title=?, description=?, category=?, author=?, source_kind=?,
|
|
3194
3194
|
source_url=?, version=?, manifest_json=?, risk_summary=?, tags=?
|
|
3195
3195
|
WHERE id=?
|
|
3196
|
-
`).run(c.title,c.description,c.category,c.author,c.source_kind,c.source_url,c.version,f,c.risk_summary,g,e)
|
|
3196
|
+
`).run(c.title,c.description,c.category,c.author,c.source_kind,c.source_url,c.version,f,c.risk_summary,g,e);else{a.prepare(`
|
|
3197
3197
|
INSERT INTO marketplace_items
|
|
3198
3198
|
(id, kind, slug, title, description, category, author,
|
|
3199
3199
|
source_kind, source_url, version, manifest_json, risk_summary, tags, created_at)
|
|
3200
3200
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
3201
|
-
`).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())
|
|
3202
|
-
INSERT OR IGNORE INTO marketplace_installations (item_id, installed)
|
|
3203
|
-
VALUES (?,
|
|
3204
|
-
`).run(e))}let
|
|
3201
|
+
`).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(`
|
|
3202
|
+
INSERT OR IGNORE INTO marketplace_installations (item_id, installed, installed_at)
|
|
3203
|
+
VALUES (?, ?, ?)
|
|
3204
|
+
`).run(e,d,d?new Date().toISOString():null)}}let k={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"}]}};function l(a){try{for(let b of h)j(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 g)j(a,"skill",b);for(let b of i)j(a,"bundle",b);for(let b of e)j(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}});j(a,"bundle",f),function(a){try{for(let b of d){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(`
|
|
3205
3205
|
UPDATE marketplace_items
|
|
3206
3206
|
SET title = ?, description = ?, category = ?, author = ?, source_kind = ?,
|
|
3207
3207
|
source_url = ?, version = ?, manifest_json = ?, risk_summary = ?, tags = ?
|
|
@@ -3214,7 +3214,7 @@ Next action: choose a specialized agent, create a local run folder, keep human-i
|
|
|
3214
3214
|
`).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(`
|
|
3215
3215
|
INSERT OR IGNORE INTO marketplace_installations (item_id, installed)
|
|
3216
3216
|
VALUES (?, 0)
|
|
3217
|
-
`).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),
|
|
3217
|
+
`).run(d))}}catch(a){console.warn("[connection-seeds] seed failed:",a?.message||a)}}(a),j(a,"module",k)}catch(a){console.warn("[marketplace-seeds] seed failed:",a?.message||a)}}h.map(a=>a.slug);let m=["research","comms","documents","data","web"];function n(){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 h)a.has(b.category)||a.set(b.category,[]),a.get(b.category).push(b.slug);return m.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=h.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"}g.map(a=>a.slug),i.map(a=>a.slug),e.map(a=>`open-design-${a.slug}`),f.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(`
|
|
3218
3218
|
INSERT INTO activity_log
|
|
3219
3219
|
(id, actor_type, actor_id, agent_id, run_id, entity_type, entity_id, action, details_json, created_at, project_id)
|
|
3220
3220
|
VALUES (?, ?, ?, ?, ?, 'project', ?, ?, ?, ?, ?)
|