leedab 0.7.2 → 0.8.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/apps/console/.next/standalone/.next/BUILD_ID +1 -1
- package/apps/console/.next/standalone/.next/app-build-manifest.json +198 -177
- package/apps/console/.next/standalone/.next/app-path-routes-manifest.json +53 -50
- package/apps/console/.next/standalone/.next/build-manifest.json +2 -2
- package/apps/console/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/apps/console/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/agent/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/agent/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/approvals/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/approvals/stream/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/approvals/stream/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/automation/workflow-blueprint/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/automation/workflow-blueprint/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/backend/endpoint-spec/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/backend/endpoint-spec/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/bootstrap-admin-token/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/brand/brand-audit/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/brand/brand-audit/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/campaigns/campaign-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/campaigns/campaign-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/confidence/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/confidence/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/customer/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/customer/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/dispatches/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/dispatches/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/engagement/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/engagement/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/escalate/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/escalate/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/profile/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/profile/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/screenshare/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/screenshare/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/track-question/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/track-question/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/champion/use-case-wiki/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/compliance/risk-register-seed/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/compliance/risk-register-seed/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/computer-use/[id]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/computer-use/[id]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/computer-use/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/computer-use/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/concierge/morning-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/concierge/morning-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/contacts/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/contacts/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/content/seo-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/content/seo-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/conversations/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/conversations/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/coo/roster/route.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/coo/roster/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/coo/roster/route_client-reference-manifest.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/coo/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/coo/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/cx/escalation-triage/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/cx/escalation-triage/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/cx/health-score/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/cx/health-score/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/data/cohort-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/data/cohort-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/delegate/route.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/delegate/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/delegate/route_client-reference-manifest.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/delegate/stream/route.js +4 -0
- package/apps/console/.next/standalone/.next/server/app/api/delegate/stream/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/delegate/stream/route_client-reference-manifest.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/delivery/qbr-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/delivery/qbr-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/delivery/weekly-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/delivery/weekly-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/dev/invalidate-cache/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/dev/invalidate-cache/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/devops/runbook/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/devops/runbook/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/email/sequence-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/email/sequence-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/engineering/adr-draft/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/engineering/adr-draft/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/finance/runway-snapshot/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/finance/runway-snapshot/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/frontend/component-spec/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/frontend/component-spec/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/scaffold-migration-script/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/scaffold-migration-script/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/scaffold-n8n-workflow/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/scaffold-n8n-workflow/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/scaffold-skill-override/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/implementation/scaffold-skill-override/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/inbox/stream/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/inbox/stream/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/investor/kpi-tracker/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/investor/kpi-tracker/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/channels/status/route.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/channels/status/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/channels/telegram/connect/route.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/channels/telegram/connect/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/channels/whatsapp/connect/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/gtm/leads/[id]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/gtm/leads/[id]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/gtm/leads/[id]/status/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/gtm/leads/[id]/status/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/gtm/templates/[name]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/gtm/templates/[name]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/license/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/models/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/providers/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/sessions/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/team/[id]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/team/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/vault/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/leedab/workflows/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/legal/clause-template/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/legal/clause-template/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/manifest/agents/custom/draft/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/manifest/agents/custom/draft/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/manifest/agents/custom/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/manifest/agents/custom/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/manifest/agents/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/manifest/agents/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/marketing/cadence-planner/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/marketing/cadence-planner/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/marketing/competitive-snapshot/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/marketing/competitive-snapshot/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/marketplace/catalogue/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/marketplace/catalogue/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/onboarding/engagement-plan/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/onboarding/engagement-plan/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/onboarding/kickoff-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/onboarding/kickoff-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/openclaw/status/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/ops/dispatch-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/ops/dispatch-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/pack/route.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/pack/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/pack/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/people/job-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/people/job-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/preferences/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/procurement/po-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/procurement/po-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/product/prd-draft/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/product/prd-draft/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/research/prospect-intel/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/research/prospect-intel/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/research/search/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/research/search/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/routing/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/routing/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/runs/route.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/runs/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/runs/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/sales/pipeline-summary/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/sales/pipeline-summary/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/sales/prospect-brief/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/sales/prospect-brief/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/solutions/build/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/solutions/build/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/solutions/quickstart-regenerate/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/solutions/quickstart-regenerate/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/solutions/refine/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/solutions/refine/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/strategy/market-pulse/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/strategy/market-pulse/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/telegram/[customerId]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/telegram/[customerId]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/templates/regenerate/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/templates/regenerate/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/templates/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/uploads/[id]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/uploads/[id]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/uploads/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/uploads/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/usage/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/usage/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/video/video-script/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/video/video-script/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/webhooks/workflow/[id]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/webhooks/workflow/[id]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/history/[runId]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/history/[runId]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/history/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/history/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/run/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/[id]/run/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/gtm/page.js.nft.json +1 -1
- package/apps/console/.next/standalone/.next/server/app/gtm/page_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app/index.html +1 -1
- package/apps/console/.next/standalone/.next/server/app/index.rsc +2 -2
- package/apps/console/.next/standalone/.next/server/app/page.js +2 -2
- package/apps/console/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/apps/console/.next/standalone/.next/server/app-paths-manifest.json +53 -50
- package/apps/console/.next/standalone/.next/server/chunks/381.js +1 -1
- package/apps/console/.next/standalone/.next/server/chunks/4768.js +1 -1
- package/apps/console/.next/standalone/.next/server/chunks/6255.js +1 -1
- package/apps/console/.next/standalone/.next/server/functions-config-manifest.json +53 -50
- package/apps/console/.next/standalone/.next/server/pages/404.html +1 -1
- package/apps/console/.next/standalone/.next/server/pages/500.html +1 -1
- package/apps/console/.next/standalone/.next/server/pages/_error.js +2 -2
- package/apps/console/.next/standalone/.next/static/9Vdc730qexSZxzkAAgkcG/_buildManifest.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/agent/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/approvals/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/approvals/stream/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/automation/workflow-blueprint/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/backend/endpoint-spec/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/bootstrap-admin-token/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brand/brand-audit/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/campaigns/campaign-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/confidence/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/customer/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/dispatches/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/engagement/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/escalate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/profile/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/screenshare/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/track-question/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/use-case-wiki/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/chat/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/compliance/risk-register-seed/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/computer-use/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/computer-use/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/concierge/morning-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/contacts/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/content/seo-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/conversations/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/coo/roster/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/coo/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/cx/escalation-triage/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/cx/health-score/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/data/cohort-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delegate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delegate/stream/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delivery/qbr-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delivery/weekly-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/dev/invalidate-cache/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/devops/runbook/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/email/sequence-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/engineering/adr-draft/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/finance/runway-snapshot/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/frontend/component-spec/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/health/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-migration-script/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-n8n-workflow/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-skill-override/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/inbox/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/inbox/stream/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/investor/kpi-tracker/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/status/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/telegram/connect/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/whatsapp/connect/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/leads/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/leads/[id]/status/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/templates/[name]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/license/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/models/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/providers/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/sessions/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/sessions/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/team/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/team/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/vault/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/workflows/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/legal/clause-template/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/custom/draft/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/custom/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketing/cadence-planner/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketing/competitive-snapshot/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketplace/catalogue/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/onboarding/engagement-plan/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/onboarding/kickoff-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/openclaw/status/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/ops/dispatch-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/pack/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/people/job-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/preferences/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/procurement/po-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/product/prd-draft/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/research/prospect-intel/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/research/search/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/routing/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/runs/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/sales/pipeline-summary/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/sales/prospect-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/build/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/quickstart-regenerate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/refine/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/strategy/market-pulse/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/telegram/[customerId]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/templates/regenerate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/templates/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/uploads/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/uploads/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/usage/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/video/video-script/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/webhooks/workflow/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/history/[runId]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/history/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/run/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/page-f3050e38f4fe72a7.js +1 -0
- package/apps/console/.next/static/9Vdc730qexSZxzkAAgkcG/_buildManifest.js +1 -0
- package/apps/console/.next/static/chunks/app/api/agent/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/approvals/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/approvals/stream/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/automation/workflow-blueprint/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/backend/endpoint-spec/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/bootstrap-admin-token/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/brand/brand-audit/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/campaigns/campaign-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/confidence/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/customer/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/dispatches/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/engagement/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/escalate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/profile/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/screenshare/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/track-question/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/use-case-wiki/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/chat/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/compliance/risk-register-seed/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/computer-use/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/computer-use/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/concierge/morning-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/contacts/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/content/seo-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/conversations/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/coo/roster/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/coo/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/cx/escalation-triage/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/cx/health-score/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/data/cohort-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delegate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delegate/stream/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delivery/qbr-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delivery/weekly-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/dev/invalidate-cache/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/devops/runbook/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/email/sequence-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/engineering/adr-draft/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/finance/runway-snapshot/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/frontend/component-spec/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/health/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-migration-script/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-n8n-workflow/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-skill-override/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/inbox/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/inbox/stream/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/investor/kpi-tracker/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/channels/status/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/channels/telegram/connect/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/channels/whatsapp/connect/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/leads/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/leads/[id]/status/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/templates/[name]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/license/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/models/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/providers/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/sessions/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/sessions/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/team/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/team/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/vault/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/workflows/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/legal/clause-template/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/manifest/agents/custom/draft/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/manifest/agents/custom/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/manifest/agents/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/marketing/cadence-planner/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/marketing/competitive-snapshot/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/marketplace/catalogue/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/onboarding/engagement-plan/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/onboarding/kickoff-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/openclaw/status/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/ops/dispatch-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/pack/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/people/job-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/preferences/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/procurement/po-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/product/prd-draft/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/research/prospect-intel/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/research/search/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/routing/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/runs/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/sales/pipeline-summary/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/sales/prospect-brief/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/solutions/build/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/solutions/quickstart-regenerate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/solutions/refine/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/strategy/market-pulse/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/telegram/[customerId]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/templates/regenerate/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/templates/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/uploads/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/uploads/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/usage/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/video/video-script/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/webhooks/workflow/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/history/[runId]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/history/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/run/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/route-734e01b852d6a51a.js +1 -0
- package/apps/console/.next/static/chunks/app/page-f3050e38f4fe72a7.js +1 -0
- package/bin/leedab.js +245 -2
- package/dist/backup/index.d.ts +30 -0
- package/dist/backup/index.js +273 -0
- package/dist/gateway.js +58 -13
- package/dist/onboard/steps/provider.js +20 -4
- package/dist/paths.d.ts +9 -0
- package/dist/paths.js +9 -0
- package/dist/templates/workspace/AGENTS.md +4 -3
- package/dist/templates/workspace/COO.md +70 -0
- package/dist/templates/workspace/SOUL.md +71 -7
- package/package.json +3 -2
- package/apps/console/.next/standalone/.next/static/CLtH7rcbrrXTBpzawMULl/_buildManifest.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/agent/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/approvals/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/approvals/stream/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/automation/workflow-blueprint/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/backend/endpoint-spec/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/bootstrap-admin-token/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brand/brand-audit/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/campaigns/campaign-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/confidence/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/customer/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/dispatches/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/engagement/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/escalate/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/profile/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/screenshare/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/track-question/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/use-case-wiki/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/chat/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/compliance/risk-register-seed/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/computer-use/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/computer-use/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/concierge/morning-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/contacts/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/content/seo-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/conversations/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/coo/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/cx/escalation-triage/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/cx/health-score/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/data/cohort-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delivery/qbr-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delivery/weekly-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/dev/invalidate-cache/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/devops/runbook/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/email/sequence-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/engineering/adr-draft/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/finance/runway-snapshot/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/frontend/component-spec/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/health/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-migration-script/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-n8n-workflow/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-skill-override/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/inbox/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/inbox/stream/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/investor/kpi-tracker/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/status/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/telegram/connect/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/whatsapp/connect/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/leads/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/leads/[id]/status/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/templates/[name]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/license/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/models/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/providers/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/sessions/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/sessions/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/team/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/team/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/vault/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/workflows/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/legal/clause-template/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/custom/draft/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/custom/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketing/cadence-planner/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketing/competitive-snapshot/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketplace/catalogue/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/onboarding/engagement-plan/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/onboarding/kickoff-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/openclaw/status/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/ops/dispatch-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/pack/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/people/job-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/preferences/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/procurement/po-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/product/prd-draft/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/research/prospect-intel/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/research/search/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/routing/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/runs/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/sales/pipeline-summary/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/sales/prospect-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/build/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/quickstart-regenerate/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/refine/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/strategy/market-pulse/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/telegram/[customerId]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/templates/regenerate/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/templates/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/uploads/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/uploads/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/usage/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/video/video-script/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/webhooks/workflow/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/history/[runId]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/history/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/run/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/standalone/.next/static/chunks/app/page-efaf5b25f1b4bcdf.js +0 -1
- package/apps/console/.next/standalone/data/conversations/concierge.json +0 -33
- package/apps/console/.next/standalone/data/conversations/coo.json +0 -292
- package/apps/console/.next/standalone/data/conversations/cx.json +0 -21
- package/apps/console/.next/standalone/data/conversations/finance.json +0 -86
- package/apps/console/.next/standalone/data/conversations/people.json +0 -21
- package/apps/console/.next/standalone/data/conversations/procurement.json +0 -65
- package/apps/console/.next/standalone/data/conversations/product.json +0 -14
- package/apps/console/.next/standalone/data/conversations/sales.json +0 -21
- package/apps/console/.next/standalone/data/preferences.json +0 -7
- package/apps/console/.next/standalone/data/retry-queue.json +0 -1
- package/apps/console/.next/standalone/data/uploads/316e1ef7-870d-4666-93fa-e439548fc0b6.pdf +0 -0
- package/apps/console/.next/standalone/data/uploads/_index.json +0 -11
- package/apps/console/.next/standalone/data/usage.json +0 -362
- package/apps/console/.next/static/CLtH7rcbrrXTBpzawMULl/_buildManifest.js +0 -1
- package/apps/console/.next/static/chunks/app/api/agent/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/approvals/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/approvals/stream/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/automation/workflow-blueprint/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/backend/endpoint-spec/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/bootstrap-admin-token/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/brand/brand-audit/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/campaigns/campaign-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/confidence/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/customer/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/dispatches/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/engagement/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/escalate/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/profile/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/screenshare/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/track-question/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/champion/use-case-wiki/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/chat/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/compliance/risk-register-seed/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/computer-use/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/computer-use/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/concierge/morning-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/contacts/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/content/seo-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/conversations/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/coo/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/cx/escalation-triage/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/cx/health-score/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/data/cohort-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/delivery/qbr-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/delivery/weekly-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/dev/invalidate-cache/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/devops/runbook/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/email/sequence-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/engineering/adr-draft/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/finance/runway-snapshot/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/frontend/component-spec/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/health/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/implementation/brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-migration-script/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-n8n-workflow/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-skill-override/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/inbox/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/inbox/stream/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/investor/kpi-tracker/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/channels/status/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/channels/telegram/connect/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/channels/whatsapp/connect/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/leads/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/leads/[id]/status/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/templates/[name]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/license/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/models/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/providers/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/sessions/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/sessions/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/team/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/team/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/vault/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/leedab/workflows/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/legal/clause-template/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/manifest/agents/custom/draft/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/manifest/agents/custom/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/manifest/agents/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/marketing/cadence-planner/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/marketing/competitive-snapshot/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/marketplace/catalogue/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/onboarding/engagement-plan/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/onboarding/kickoff-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/openclaw/status/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/ops/dispatch-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/pack/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/people/job-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/preferences/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/procurement/po-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/product/prd-draft/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/research/prospect-intel/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/research/search/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/routing/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/runs/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/sales/pipeline-summary/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/sales/prospect-brief/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/solutions/build/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/solutions/quickstart-regenerate/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/solutions/refine/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/strategy/market-pulse/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/telegram/[customerId]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/templates/regenerate/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/templates/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/uploads/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/uploads/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/usage/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/video/video-script/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/webhooks/workflow/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/history/[runId]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/history/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/run/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/api/workflows/route-2d8162b887d31980.js +0 -1
- package/apps/console/.next/static/chunks/app/page-efaf5b25f1b4bcdf.js +0 -1
- /package/apps/console/.next/standalone/.next/static/{CLtH7rcbrrXTBpzawMULl → 9Vdc730qexSZxzkAAgkcG}/_ssgManifest.js +0 -0
- /package/apps/console/.next/static/{CLtH7rcbrrXTBpzawMULl → 9Vdc730qexSZxzkAAgkcG}/_ssgManifest.js +0 -0
package/bin/leedab.js
CHANGED
|
@@ -15,6 +15,7 @@ import { loadConfig, initConfig } from "../dist/config/index.js";
|
|
|
15
15
|
import { setupChannels } from "../dist/channels/index.js";
|
|
16
16
|
import { runOnboard } from "../dist/onboard/index.js";
|
|
17
17
|
import { ensureFirstRun } from "../dist/first-run/ensure.js";
|
|
18
|
+
import { createBackup, listBackups, restoreBackup, deleteBackup, humanBytes } from "../dist/backup/index.js";
|
|
18
19
|
import { startConsole, stopConsole } from "../dist/console-launcher.js";
|
|
19
20
|
import { execBranded } from "../dist/brand.js";
|
|
20
21
|
import { resolveOpenClawBin, openclawArgs, openclawEnv } from "../dist/openclaw.js";
|
|
@@ -140,8 +141,8 @@ function ensureAdminToken() {
|
|
|
140
141
|
// inline before any operations that depend on a configured workspace or
|
|
141
142
|
// license; the project + license guards would bail too eagerly on a fresh
|
|
142
143
|
// install otherwise.
|
|
143
|
-
const NO_PROJECT_REQUIRED = new Set(["onboard", "init", "help", "start"]);
|
|
144
|
-
const NO_LICENSE_REQUIRED = new Set(["onboard", "init", "help", "stop", "start"]);
|
|
144
|
+
const NO_PROJECT_REQUIRED = new Set(["onboard", "init", "help", "start", "reset", "backup"]);
|
|
145
|
+
const NO_LICENSE_REQUIRED = new Set(["onboard", "init", "help", "stop", "start", "reset", "backup"]);
|
|
145
146
|
|
|
146
147
|
/**
|
|
147
148
|
* Auto-recover from the "two-state-dirs" footgun. If the current working
|
|
@@ -555,6 +556,248 @@ program
|
|
|
555
556
|
console.log(chalk.green("LeedAB agent stopped."));
|
|
556
557
|
});
|
|
557
558
|
|
|
559
|
+
program
|
|
560
|
+
.command("reset")
|
|
561
|
+
.description("Wipe local state (~/.leedab including the agent workspace, ~/.openclaw, console data, plus any legacy ./workspace) and start fresh. Destructive.")
|
|
562
|
+
.option("-y, --yes", "Skip both prompts (backup + confirmation). NOT recommended outside CI.", false)
|
|
563
|
+
.option("--no-backup", "Skip the backup-before-reset prompt and reset directly.")
|
|
564
|
+
.action(async (opts) => {
|
|
565
|
+
// Targets. Each is independent — a missing path is a no-op, not a
|
|
566
|
+
// failure. The set covers everything the gateway, openclaw daemon, and
|
|
567
|
+
// Next.js console write to during a normal run, so a reset puts the
|
|
568
|
+
// box into the same state a brand new install would see.
|
|
569
|
+
//
|
|
570
|
+
// The console's data directory is critical — it holds runs.json,
|
|
571
|
+
// usage.json, conversations/, workflows/, retry-queue.json and lives
|
|
572
|
+
// under apps/console/.next/standalone/data/ (Next.js standalone build
|
|
573
|
+
// cwd). Earlier resets only wiped ~/.leedab and ~/.openclaw, which left
|
|
574
|
+
// the previous tenant's chat history and run records visible to the
|
|
575
|
+
// next licensee on the same machine.
|
|
576
|
+
const cwdState = resolve(process.cwd(), ".leedab");
|
|
577
|
+
const cwdWorkspace = resolve(process.cwd(), "workspace");
|
|
578
|
+
const homeOpenclaw = resolve(homedir(), ".openclaw");
|
|
579
|
+
const PACKAGE_ROOT = findPackageRoot();
|
|
580
|
+
// Both prod (next standalone, run via leedab start) and dev (next dev,
|
|
581
|
+
// run via `npm --prefix apps/console run dev`) end up with a `data/`
|
|
582
|
+
// directory next to the cwd the console was launched from. Wipe both.
|
|
583
|
+
const consoleStandaloneData = resolve(PACKAGE_ROOT, "apps", "console", ".next", "standalone", "data");
|
|
584
|
+
const consoleDevData = resolve(PACKAGE_ROOT, "apps", "console", "data");
|
|
585
|
+
const targets = [
|
|
586
|
+
{ path: STATE_DIR, label: "~/.leedab" },
|
|
587
|
+
{ path: homeOpenclaw, label: "~/.openclaw" },
|
|
588
|
+
{ path: consoleStandaloneData, label: "apps/console/.next/standalone/data (runs, chats, usage)" },
|
|
589
|
+
{ path: consoleDevData, label: "apps/console/data (dev-mode runs, chats, usage)" },
|
|
590
|
+
// Legacy: the agent workspace used to be cwd-relative. Newer installs
|
|
591
|
+
// keep it under ~/.leedab/agent-workspace/ (wiped by the STATE_DIR
|
|
592
|
+
// target above). Still wipe any stale cwd workspace so an operator
|
|
593
|
+
// upgrading from the old layout doesn't end up with two copies.
|
|
594
|
+
{ path: cwdWorkspace, label: `${process.cwd()}/workspace (legacy)` },
|
|
595
|
+
{ path: cwdState, label: `${process.cwd()}/.leedab` },
|
|
596
|
+
];
|
|
597
|
+
|
|
598
|
+
const existing = targets.filter((t) => existsSync(t.path));
|
|
599
|
+
if (existing.length === 0) {
|
|
600
|
+
console.log(chalk.dim("\n Nothing to reset. State is already clean.\n"));
|
|
601
|
+
return;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
console.log(chalk.bold("\n This will permanently delete:\n"));
|
|
605
|
+
for (const t of existing) console.log(chalk.red(` × ${t.label}`));
|
|
606
|
+
console.log();
|
|
607
|
+
console.log(chalk.yellow(" Includes: license, model config, vault, run history,"));
|
|
608
|
+
console.log(chalk.yellow(" chat transcripts, memory, seeded workspace."));
|
|
609
|
+
console.log(chalk.dim(" Run ") + chalk.cyan("leedab start") + chalk.dim(" after to re-enter your license and pick a model.\n"));
|
|
610
|
+
|
|
611
|
+
// Offer a backup-before-reset by default. The reset itself is the
|
|
612
|
+
// destructive moment; the backup is a soft-delete safety net that
|
|
613
|
+
// makes restore possible. Users running with --yes (CI, demo wipes)
|
|
614
|
+
// skip both prompts; --no-backup skips just the backup ask.
|
|
615
|
+
if (!opts.yes && opts.backup !== false) {
|
|
616
|
+
const { default: inquirer } = await import("inquirer");
|
|
617
|
+
let wantBackup = true;
|
|
618
|
+
try {
|
|
619
|
+
const ans = await inquirer.prompt([
|
|
620
|
+
{
|
|
621
|
+
type: "confirm",
|
|
622
|
+
name: "wantBackup",
|
|
623
|
+
message: "Back this up first so you can restore later?",
|
|
624
|
+
default: true,
|
|
625
|
+
},
|
|
626
|
+
]);
|
|
627
|
+
wantBackup = ans.wantBackup;
|
|
628
|
+
} catch {
|
|
629
|
+
wantBackup = false;
|
|
630
|
+
}
|
|
631
|
+
if (wantBackup) {
|
|
632
|
+
const spinner = ora("Creating backup...").start();
|
|
633
|
+
try {
|
|
634
|
+
const result = await createBackup({ label: "pre-reset" });
|
|
635
|
+
spinner.succeed(
|
|
636
|
+
chalk.green(`Backup saved: ${result.archive} (${humanBytes(result.bytes)})`)
|
|
637
|
+
);
|
|
638
|
+
console.log(chalk.dim(` Restore later with: `) + chalk.cyan(`leedab backup restore ${result.archive}`));
|
|
639
|
+
console.log();
|
|
640
|
+
} catch (err) {
|
|
641
|
+
spinner.fail(chalk.red(`Backup failed: ${err.message}`));
|
|
642
|
+
console.log(chalk.yellow(" Reset aborted because the safety net failed."));
|
|
643
|
+
console.log(chalk.dim(" Re-run with ") + chalk.cyan("--no-backup") + chalk.dim(" to reset without a backup.\n"));
|
|
644
|
+
process.exit(1);
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
if (!opts.yes) {
|
|
650
|
+
const { default: inquirer } = await import("inquirer");
|
|
651
|
+
let confirmed;
|
|
652
|
+
try {
|
|
653
|
+
const ans = await inquirer.prompt([
|
|
654
|
+
{ type: "confirm", name: "confirmed", message: "Wipe and reset?", default: false },
|
|
655
|
+
]);
|
|
656
|
+
confirmed = ans.confirmed;
|
|
657
|
+
} catch {
|
|
658
|
+
// ctrl-c bails — treat as no
|
|
659
|
+
confirmed = false;
|
|
660
|
+
}
|
|
661
|
+
if (!confirmed) {
|
|
662
|
+
console.log(chalk.dim("\n Aborted. Nothing was deleted.\n"));
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
// Best-effort shutdown. If nothing is running these silently no-op.
|
|
668
|
+
await stopConsole().catch(() => {});
|
|
669
|
+
await stopGateway().catch(() => {});
|
|
670
|
+
|
|
671
|
+
let removed = 0;
|
|
672
|
+
for (const t of existing) {
|
|
673
|
+
try {
|
|
674
|
+
rmSync(t.path, { recursive: true, force: true });
|
|
675
|
+
console.log(chalk.green(` ✓ removed ${t.label}`));
|
|
676
|
+
removed++;
|
|
677
|
+
} catch (err) {
|
|
678
|
+
console.error(chalk.red(` × failed to remove ${t.label}: ${err.message}`));
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
console.log();
|
|
683
|
+
console.log(chalk.bold(` ${removed} path${removed === 1 ? "" : "s"} wiped. Fresh slate.`));
|
|
684
|
+
console.log(chalk.dim(" Next step: ") + chalk.cyan("leedab start"));
|
|
685
|
+
console.log();
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
const backup = program
|
|
689
|
+
.command("backup")
|
|
690
|
+
.description("Snapshot runs, chats, memory, workspace, license + config to a tarball under ~/.leedab/backups/")
|
|
691
|
+
.option("--label <slug>", "Optional label appended to the archive name (e.g. before-pilot-demo)")
|
|
692
|
+
.action(async (opts) => {
|
|
693
|
+
const spinner = ora("Creating backup...").start();
|
|
694
|
+
try {
|
|
695
|
+
const result = await createBackup({ label: opts.label });
|
|
696
|
+
spinner.succeed(chalk.green(`Backup saved: ${result.archive} (${humanBytes(result.bytes)})`));
|
|
697
|
+
const present = result.manifest.items.filter((i) => i.present);
|
|
698
|
+
const skipped = result.manifest.items.filter((i) => !i.present);
|
|
699
|
+
console.log();
|
|
700
|
+
console.log(chalk.bold(" Included:"));
|
|
701
|
+
for (const i of present) {
|
|
702
|
+
console.log(chalk.dim(` ${i.archiveName.padEnd(18)} ${humanBytes(i.bytes).padStart(8)} ${i.absPath}`));
|
|
703
|
+
}
|
|
704
|
+
if (skipped.length > 0) {
|
|
705
|
+
console.log();
|
|
706
|
+
console.log(chalk.dim(" Skipped (absent on this machine):"));
|
|
707
|
+
for (const i of skipped) console.log(chalk.dim(` ${i.archiveName}`));
|
|
708
|
+
}
|
|
709
|
+
console.log();
|
|
710
|
+
console.log(chalk.dim(" Restore with: ") + chalk.cyan(`leedab backup restore ${result.archive}`));
|
|
711
|
+
console.log();
|
|
712
|
+
} catch (err) {
|
|
713
|
+
spinner.fail(chalk.red(`Backup failed: ${err.message}`));
|
|
714
|
+
process.exit(1);
|
|
715
|
+
}
|
|
716
|
+
});
|
|
717
|
+
|
|
718
|
+
backup
|
|
719
|
+
.command("list")
|
|
720
|
+
.description("List all local backups under ~/.leedab/backups/")
|
|
721
|
+
.action(async () => {
|
|
722
|
+
const backups = await listBackups();
|
|
723
|
+
if (backups.length === 0) {
|
|
724
|
+
console.log(chalk.dim("\n No backups yet. Run ") + chalk.cyan("leedab backup") + chalk.dim(" to create one.\n"));
|
|
725
|
+
return;
|
|
726
|
+
}
|
|
727
|
+
console.log();
|
|
728
|
+
console.log(chalk.bold(` ${backups.length} backup${backups.length === 1 ? "" : "s"}:`));
|
|
729
|
+
console.log();
|
|
730
|
+
for (const b of backups) {
|
|
731
|
+
const when = b.createdAt ? new Date(b.createdAt).toLocaleString() : "unknown";
|
|
732
|
+
console.log(` ${chalk.cyan(b.archive)}`);
|
|
733
|
+
console.log(chalk.dim(` ${when} · ${humanBytes(b.bytes)}` + (b.manifest?.leedabVersion ? ` · v${b.manifest.leedabVersion}` : "")));
|
|
734
|
+
}
|
|
735
|
+
console.log();
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
backup
|
|
739
|
+
.command("restore <archive>")
|
|
740
|
+
.description("Extract a backup tarball back over the current state. Overwrites existing files.")
|
|
741
|
+
.option("-y, --yes", "Skip the confirmation prompt", false)
|
|
742
|
+
.action(async (archive, opts) => {
|
|
743
|
+
const abs = resolve(archive);
|
|
744
|
+
if (!existsSync(abs)) {
|
|
745
|
+
console.error(chalk.red(`\n Backup not found: ${abs}\n`));
|
|
746
|
+
process.exit(1);
|
|
747
|
+
}
|
|
748
|
+
console.log(chalk.bold(`\n About to restore: ${chalk.cyan(abs)}`));
|
|
749
|
+
console.log(chalk.yellow(" This OVERWRITES existing runs, chats, memory, workspace, and state."));
|
|
750
|
+
console.log(chalk.dim(" Stop the agent first if it's running.\n"));
|
|
751
|
+
|
|
752
|
+
if (!opts.yes) {
|
|
753
|
+
const { default: inquirer } = await import("inquirer");
|
|
754
|
+
let confirmed;
|
|
755
|
+
try {
|
|
756
|
+
const ans = await inquirer.prompt([
|
|
757
|
+
{ type: "confirm", name: "confirmed", message: "Continue?", default: false },
|
|
758
|
+
]);
|
|
759
|
+
confirmed = ans.confirmed;
|
|
760
|
+
} catch {
|
|
761
|
+
confirmed = false;
|
|
762
|
+
}
|
|
763
|
+
if (!confirmed) {
|
|
764
|
+
console.log(chalk.dim("\n Aborted. Nothing was restored.\n"));
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
await stopConsole().catch(() => {});
|
|
770
|
+
await stopGateway().catch(() => {});
|
|
771
|
+
|
|
772
|
+
const spinner = ora("Restoring...").start();
|
|
773
|
+
try {
|
|
774
|
+
const manifest = await restoreBackup(abs);
|
|
775
|
+
spinner.succeed(chalk.green("Restore complete."));
|
|
776
|
+
if (manifest?.createdAt) {
|
|
777
|
+
console.log(chalk.dim(` Snapshot from: ${new Date(manifest.createdAt).toLocaleString()}`));
|
|
778
|
+
if (manifest.leedabVersion) console.log(chalk.dim(` leedab v${manifest.leedabVersion}`));
|
|
779
|
+
}
|
|
780
|
+
console.log(chalk.dim(" Next step: ") + chalk.cyan("leedab start"));
|
|
781
|
+
console.log();
|
|
782
|
+
} catch (err) {
|
|
783
|
+
spinner.fail(chalk.red(`Restore failed: ${err.message}`));
|
|
784
|
+
process.exit(1);
|
|
785
|
+
}
|
|
786
|
+
});
|
|
787
|
+
|
|
788
|
+
backup
|
|
789
|
+
.command("delete <archive>")
|
|
790
|
+
.description("Delete a backup tarball")
|
|
791
|
+
.action((archive) => {
|
|
792
|
+
const abs = resolve(archive);
|
|
793
|
+
if (!existsSync(abs)) {
|
|
794
|
+
console.error(chalk.red(`\n Backup not found: ${abs}\n`));
|
|
795
|
+
process.exit(1);
|
|
796
|
+
}
|
|
797
|
+
deleteBackup(abs);
|
|
798
|
+
console.log(chalk.green(`\n Removed ${abs}\n`));
|
|
799
|
+
});
|
|
800
|
+
|
|
558
801
|
const pairing = program
|
|
559
802
|
.command("pairing")
|
|
560
803
|
.description("Manage channel pairing (approve users to message the agent)");
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type BackupManifest = {
|
|
2
|
+
createdAt: string;
|
|
3
|
+
leedabVersion: string;
|
|
4
|
+
hostname: string;
|
|
5
|
+
items: Array<{
|
|
6
|
+
archiveName: string;
|
|
7
|
+
absPath: string;
|
|
8
|
+
bytes: number;
|
|
9
|
+
present: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
12
|
+
export type CreateResult = {
|
|
13
|
+
archive: string;
|
|
14
|
+
manifest: BackupManifest;
|
|
15
|
+
bytes: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function createBackup(opts?: {
|
|
18
|
+
label?: string;
|
|
19
|
+
}): Promise<CreateResult>;
|
|
20
|
+
export type BackupListing = {
|
|
21
|
+
archive: string;
|
|
22
|
+
bytes: number;
|
|
23
|
+
createdAt: string | null;
|
|
24
|
+
manifest: BackupManifest | null;
|
|
25
|
+
};
|
|
26
|
+
export declare function listBackups(): Promise<BackupListing[]>;
|
|
27
|
+
export declare function restoreBackup(archive: string): Promise<BackupManifest | null>;
|
|
28
|
+
export declare function deleteBackup(archive: string): void;
|
|
29
|
+
export declare function backupDir(): string;
|
|
30
|
+
export declare function humanBytes(n: number): string;
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, unlinkSync, } from "node:fs";
|
|
2
|
+
import { cp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { basename, dirname, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { hostname, tmpdir } from "node:os";
|
|
6
|
+
import { create as tarCreate, extract as tarExtract } from "tar";
|
|
7
|
+
import { STATE_DIR, AGENT_WORKSPACE_DIR } from "../paths.js";
|
|
8
|
+
// Backup helper used by `leedab backup` and by `leedab reset` (as the
|
|
9
|
+
// soft-delete safety net). Captures the data and configuration a tenant
|
|
10
|
+
// would lose on a reset: runs, usage, chats, workflows, memory, license,
|
|
11
|
+
// and the seeded workspace. Skips logs, the admin token, pid files, and
|
|
12
|
+
// anything regenerable. Produces a single .tar.gz at a predictable path
|
|
13
|
+
// so list + restore can find it without parsing names.
|
|
14
|
+
const BACKUP_DIR = resolve(STATE_DIR, "backups");
|
|
15
|
+
function timestampSlug() {
|
|
16
|
+
const d = new Date();
|
|
17
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
18
|
+
return (`${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}` +
|
|
19
|
+
`-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`);
|
|
20
|
+
}
|
|
21
|
+
function dirBytes(path) {
|
|
22
|
+
if (!existsSync(path))
|
|
23
|
+
return 0;
|
|
24
|
+
let total = 0;
|
|
25
|
+
const walk = (p) => {
|
|
26
|
+
const st = statSync(p);
|
|
27
|
+
if (st.isFile()) {
|
|
28
|
+
total += st.size;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (st.isDirectory()) {
|
|
32
|
+
for (const child of readdirSync(p))
|
|
33
|
+
walk(resolve(p, child));
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
walk(path);
|
|
37
|
+
return total;
|
|
38
|
+
}
|
|
39
|
+
function packageRoot() {
|
|
40
|
+
// Walk up from this module looking for the leedab package.json. Works
|
|
41
|
+
// for both source (src/backup/index.ts) and dist (dist/backup/index.js).
|
|
42
|
+
let dir = dirname(fileURLToPath(import.meta.url));
|
|
43
|
+
for (let i = 0; i < 10; i++) {
|
|
44
|
+
const candidate = resolve(dir, "package.json");
|
|
45
|
+
if (existsSync(candidate)) {
|
|
46
|
+
try {
|
|
47
|
+
const pkg = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
48
|
+
if (pkg.name === "leedab")
|
|
49
|
+
return dir;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* ignore */
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const parent = resolve(dir, "..");
|
|
56
|
+
if (parent === dir)
|
|
57
|
+
break;
|
|
58
|
+
dir = parent;
|
|
59
|
+
}
|
|
60
|
+
throw new Error("Could not locate leedab package root from src/backup");
|
|
61
|
+
}
|
|
62
|
+
function leedabVersion() {
|
|
63
|
+
try {
|
|
64
|
+
const pkg = JSON.parse(readFileSync(resolve(packageRoot(), "package.json"), "utf-8"));
|
|
65
|
+
return pkg.version ?? "0.0.0";
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return "0.0.0";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function captureSet() {
|
|
72
|
+
const PACKAGE_ROOT = packageRoot();
|
|
73
|
+
return [
|
|
74
|
+
{
|
|
75
|
+
absPath: resolve(PACKAGE_ROOT, "apps", "console", ".next", "standalone", "data"),
|
|
76
|
+
archiveName: "console-data",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
absPath: resolve(PACKAGE_ROOT, "apps", "console", "data"),
|
|
80
|
+
archiveName: "console-data-dev",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
absPath: resolve(STATE_DIR, "memory"),
|
|
84
|
+
archiveName: "memory",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
absPath: AGENT_WORKSPACE_DIR,
|
|
88
|
+
archiveName: "workspace",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
absPath: STATE_DIR,
|
|
92
|
+
archiveName: "state",
|
|
93
|
+
filter: (p) => {
|
|
94
|
+
const name = basename(p);
|
|
95
|
+
if (name === "logs")
|
|
96
|
+
return false;
|
|
97
|
+
if (name === "admin-token")
|
|
98
|
+
return false;
|
|
99
|
+
if (name === "console.pid")
|
|
100
|
+
return false;
|
|
101
|
+
if (name === "update-check.json")
|
|
102
|
+
return false;
|
|
103
|
+
if (name === "backups")
|
|
104
|
+
return false;
|
|
105
|
+
// The agent workspace is captured as its own top-level archive
|
|
106
|
+
// entry above; exclude it here so the state archive doesn't
|
|
107
|
+
// double-pack it.
|
|
108
|
+
if (name === "agent-workspace")
|
|
109
|
+
return false;
|
|
110
|
+
return true;
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
];
|
|
114
|
+
}
|
|
115
|
+
export async function createBackup(opts = {}) {
|
|
116
|
+
await mkdir(BACKUP_DIR, { recursive: true });
|
|
117
|
+
const slug = timestampSlug() + (opts.label ? `-${opts.label}` : "");
|
|
118
|
+
const archive = resolve(BACKUP_DIR, `${slug}.tar.gz`);
|
|
119
|
+
const sidecarManifest = resolve(BACKUP_DIR, `.${slug}.manifest.json`);
|
|
120
|
+
const items = captureSet();
|
|
121
|
+
const manifestEntries = [];
|
|
122
|
+
const toArchive = [];
|
|
123
|
+
for (const item of items) {
|
|
124
|
+
const present = existsSync(item.absPath);
|
|
125
|
+
manifestEntries.push({
|
|
126
|
+
archiveName: item.archiveName,
|
|
127
|
+
absPath: item.absPath,
|
|
128
|
+
bytes: present ? dirBytes(item.absPath) : 0,
|
|
129
|
+
present,
|
|
130
|
+
});
|
|
131
|
+
if (present) {
|
|
132
|
+
toArchive.push({
|
|
133
|
+
src: item.absPath,
|
|
134
|
+
rename: item.archiveName,
|
|
135
|
+
filter: item.filter,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const manifest = {
|
|
140
|
+
createdAt: new Date().toISOString(),
|
|
141
|
+
leedabVersion: leedabVersion(),
|
|
142
|
+
hostname: hostname(),
|
|
143
|
+
items: manifestEntries,
|
|
144
|
+
};
|
|
145
|
+
await writeFile(sidecarManifest, JSON.stringify(manifest, null, 2) + "\n");
|
|
146
|
+
// Pre-stage with fs.cp so the archive contains clean rewritten top-
|
|
147
|
+
// level directory names regardless of where the sources live on disk.
|
|
148
|
+
// Cross-platform (tar's --transform syntax differs between GNU + BSD)
|
|
149
|
+
// and keeps the implementation small.
|
|
150
|
+
//
|
|
151
|
+
// Staging lives in the OS tmpdir, not inside BACKUP_DIR. Earlier versions
|
|
152
|
+
// staged at `BACKUP_DIR/.<slug>.staging`, which sits *inside* STATE_DIR.
|
|
153
|
+
// The state capture's source is STATE_DIR itself, so fs.cp refused with
|
|
154
|
+
// EINVAL ("cannot copy a directory to a subdirectory of itself") — the
|
|
155
|
+
// backups-folder filter would have skipped the nested copy, but Node's
|
|
156
|
+
// pre-flight check fires before the filter is consulted.
|
|
157
|
+
const stagingDir = resolve(tmpdir(), `leedab-backup-${slug}.staging`);
|
|
158
|
+
await mkdir(stagingDir, { recursive: true });
|
|
159
|
+
try {
|
|
160
|
+
const stagedNames = [];
|
|
161
|
+
for (const a of toArchive) {
|
|
162
|
+
const dest = resolve(stagingDir, a.rename);
|
|
163
|
+
await cp(a.src, dest, {
|
|
164
|
+
recursive: true,
|
|
165
|
+
filter: a.filter ? (src) => a.filter(src) : undefined,
|
|
166
|
+
});
|
|
167
|
+
stagedNames.push(a.rename);
|
|
168
|
+
}
|
|
169
|
+
// Include the manifest inside the archive so restore can verify
|
|
170
|
+
// without needing the sidecar sibling file.
|
|
171
|
+
await writeFile(resolve(stagingDir, "manifest.json"), JSON.stringify(manifest, null, 2) + "\n");
|
|
172
|
+
stagedNames.push("manifest.json");
|
|
173
|
+
await tarCreate({
|
|
174
|
+
file: archive,
|
|
175
|
+
cwd: stagingDir,
|
|
176
|
+
gzip: true,
|
|
177
|
+
portable: true,
|
|
178
|
+
}, stagedNames);
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
await rm(stagingDir, { recursive: true, force: true });
|
|
182
|
+
}
|
|
183
|
+
const bytes = statSync(archive).size;
|
|
184
|
+
return { archive, manifest, bytes };
|
|
185
|
+
}
|
|
186
|
+
export async function listBackups() {
|
|
187
|
+
if (!existsSync(BACKUP_DIR))
|
|
188
|
+
return [];
|
|
189
|
+
const files = readdirSync(BACKUP_DIR).filter((f) => f.endsWith(".tar.gz"));
|
|
190
|
+
const out = [];
|
|
191
|
+
for (const f of files) {
|
|
192
|
+
const archive = resolve(BACKUP_DIR, f);
|
|
193
|
+
const st = statSync(archive);
|
|
194
|
+
const slug = f.replace(/\.tar\.gz$/, "");
|
|
195
|
+
const sidecar = resolve(BACKUP_DIR, `.${slug}.manifest.json`);
|
|
196
|
+
let manifest = null;
|
|
197
|
+
if (existsSync(sidecar)) {
|
|
198
|
+
try {
|
|
199
|
+
manifest = JSON.parse(await readFile(sidecar, "utf-8"));
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
manifest = null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
out.push({
|
|
206
|
+
archive,
|
|
207
|
+
bytes: st.size,
|
|
208
|
+
createdAt: manifest?.createdAt ?? st.mtime.toISOString(),
|
|
209
|
+
manifest,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return out.sort((a, b) => (a.createdAt ?? "") < (b.createdAt ?? "") ? 1 : -1);
|
|
213
|
+
}
|
|
214
|
+
export async function restoreBackup(archive) {
|
|
215
|
+
if (!existsSync(archive)) {
|
|
216
|
+
throw new Error(`Backup not found at ${archive}`);
|
|
217
|
+
}
|
|
218
|
+
const stagingDir = resolve(BACKUP_DIR, `.restore-${timestampSlug()}`);
|
|
219
|
+
await mkdir(stagingDir, { recursive: true });
|
|
220
|
+
await tarExtract({ file: archive, cwd: stagingDir });
|
|
221
|
+
let manifest = null;
|
|
222
|
+
const manifestPath = resolve(stagingDir, "manifest.json");
|
|
223
|
+
if (existsSync(manifestPath)) {
|
|
224
|
+
try {
|
|
225
|
+
manifest = JSON.parse(await readFile(manifestPath, "utf-8"));
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
manifest = null;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const PACKAGE_ROOT = packageRoot();
|
|
232
|
+
const targetByName = {
|
|
233
|
+
"console-data": resolve(PACKAGE_ROOT, "apps", "console", ".next", "standalone", "data"),
|
|
234
|
+
"console-data-dev": resolve(PACKAGE_ROOT, "apps", "console", "data"),
|
|
235
|
+
memory: resolve(STATE_DIR, "memory"),
|
|
236
|
+
workspace: AGENT_WORKSPACE_DIR,
|
|
237
|
+
state: STATE_DIR,
|
|
238
|
+
};
|
|
239
|
+
for (const [name, dest] of Object.entries(targetByName)) {
|
|
240
|
+
if (!dest)
|
|
241
|
+
continue;
|
|
242
|
+
const src = resolve(stagingDir, name);
|
|
243
|
+
if (!existsSync(src))
|
|
244
|
+
continue;
|
|
245
|
+
await mkdir(dirname(dest), { recursive: true });
|
|
246
|
+
await cp(src, dest, { recursive: true, force: true });
|
|
247
|
+
}
|
|
248
|
+
await rm(stagingDir, { recursive: true, force: true });
|
|
249
|
+
return manifest;
|
|
250
|
+
}
|
|
251
|
+
export function deleteBackup(archive) {
|
|
252
|
+
if (!existsSync(archive))
|
|
253
|
+
return;
|
|
254
|
+
unlinkSync(archive);
|
|
255
|
+
const slug = basename(archive).replace(/\.tar\.gz$/, "");
|
|
256
|
+
const sidecar = resolve(dirname(archive), `.${slug}.manifest.json`);
|
|
257
|
+
if (existsSync(sidecar))
|
|
258
|
+
unlinkSync(sidecar);
|
|
259
|
+
}
|
|
260
|
+
export function backupDir() {
|
|
261
|
+
if (!existsSync(BACKUP_DIR))
|
|
262
|
+
mkdirSync(BACKUP_DIR, { recursive: true });
|
|
263
|
+
return BACKUP_DIR;
|
|
264
|
+
}
|
|
265
|
+
export function humanBytes(n) {
|
|
266
|
+
if (n < 1024)
|
|
267
|
+
return `${n}B`;
|
|
268
|
+
if (n < 1024 * 1024)
|
|
269
|
+
return `${(n / 1024).toFixed(1)}KB`;
|
|
270
|
+
if (n < 1024 * 1024 * 1024)
|
|
271
|
+
return `${(n / (1024 * 1024)).toFixed(1)}MB`;
|
|
272
|
+
return `${(n / (1024 * 1024 * 1024)).toFixed(2)}GB`;
|
|
273
|
+
}
|
package/dist/gateway.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { spawn, execFile } from "node:child_process";
|
|
2
2
|
import { createWriteStream } from "node:fs";
|
|
3
3
|
import { resolve, dirname, join } from "node:path";
|
|
4
|
-
import { readFile, writeFile, readdir, copyFile, mkdir
|
|
4
|
+
import { readFile, writeFile, readdir, copyFile, mkdir } from "node:fs/promises";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { promisify } from "node:util";
|
|
7
7
|
import { resolveOpenClawBin, openclawArgs, openclawEnv } from "./openclaw.js";
|
|
8
8
|
import { ensureLicense } from "./license.js";
|
|
9
|
-
import { STATE_DIR } from "./paths.js";
|
|
9
|
+
import { STATE_DIR, AGENT_WORKSPACE_DIR } from "./paths.js";
|
|
10
10
|
const execFileAsync = promisify(execFile);
|
|
11
11
|
let gatewayProcess = null;
|
|
12
12
|
/**
|
|
@@ -23,6 +23,11 @@ export async function startGateway(config) {
|
|
|
23
23
|
const env = openclawEnv(stateDir);
|
|
24
24
|
// Seed workspace templates (skip files that already exist)
|
|
25
25
|
await seedWorkspace();
|
|
26
|
+
// Point openclaw's default agent at our seeded workspace. Without this,
|
|
27
|
+
// openclaw reads SOUL.md and friends from ~/.openclaw/workspace/ (its
|
|
28
|
+
// own default install location, with the generic openclaw SOUL) instead
|
|
29
|
+
// of LeedAB's COO contract in ./workspace/.
|
|
30
|
+
await pinAgentWorkspace(stateDir);
|
|
26
31
|
// Auto-approve all tool executions (enterprise local deployment)
|
|
27
32
|
await ensureAutoApprove(bin, env);
|
|
28
33
|
// Make sure the OpenAI-compat /v1/chat/completions HTTP endpoint is on.
|
|
@@ -153,6 +158,44 @@ async function registerChannels(bin, stateDir, config) {
|
|
|
153
158
|
}
|
|
154
159
|
}
|
|
155
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Pin openclaw's default agent at the repo-local ./workspace/ instead of
|
|
163
|
+
* its own ~/.openclaw/workspace/. The "main" agent's workspace path is
|
|
164
|
+
* resolved from `agents.defaults.workspace` in openclaw.json. Openclaw's
|
|
165
|
+
* onboard sets that to ~/.openclaw/workspace/, which has the generic
|
|
166
|
+
* openclaw SOUL — so on Telegram the bot reads a generic-assistant
|
|
167
|
+
* identity and has no idea about LeedAB's COO routing or the licensed
|
|
168
|
+
* AB roster. Pointing it at ./workspace/ (where seedWorkspace just
|
|
169
|
+
* wrote SOUL.md + COO.md + AGENTS.md + BOOTSTRAP.md) makes the
|
|
170
|
+
* channel-facing agent IS the COO.
|
|
171
|
+
*
|
|
172
|
+
* Idempotent: no-op when the path is already correct or when
|
|
173
|
+
* openclaw.json doesn't exist yet (onboard hasn't run).
|
|
174
|
+
*/
|
|
175
|
+
async function pinAgentWorkspace(stateDir) {
|
|
176
|
+
const workspacePath = AGENT_WORKSPACE_DIR;
|
|
177
|
+
const configPath = resolve(stateDir, "openclaw.json");
|
|
178
|
+
let raw;
|
|
179
|
+
try {
|
|
180
|
+
raw = await readFile(configPath, "utf-8");
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return; // openclaw.json not created yet — onboard hasn't run
|
|
184
|
+
}
|
|
185
|
+
let cfg;
|
|
186
|
+
try {
|
|
187
|
+
cfg = JSON.parse(raw);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
cfg.agents = cfg.agents ?? {};
|
|
193
|
+
cfg.agents.defaults = cfg.agents.defaults ?? {};
|
|
194
|
+
if (cfg.agents.defaults.workspace === workspacePath)
|
|
195
|
+
return;
|
|
196
|
+
cfg.agents.defaults.workspace = workspacePath;
|
|
197
|
+
await writeFile(configPath, JSON.stringify(cfg, null, 2) + "\n");
|
|
198
|
+
}
|
|
156
199
|
/**
|
|
157
200
|
* Idempotently flip `gateway.http.endpoints.chatCompletions.enabled` to true
|
|
158
201
|
* in ~/.leedab/openclaw.json. The console (Next.js, apps/console) proxies
|
|
@@ -265,24 +308,26 @@ async function ensureAutoApprove(bin, env, gateway = false) {
|
|
|
265
308
|
console.warn("[leedab] auto-approve setup failed:", lastErr?.message ?? lastErr);
|
|
266
309
|
}
|
|
267
310
|
/**
|
|
268
|
-
* Copy
|
|
269
|
-
* on
|
|
311
|
+
* Copy the framework workspace files (AGENTS.md, SOUL.md, COO.md,
|
|
312
|
+
* BOOTSTRAP.md) into AGENT_WORKSPACE_DIR on every start. These four are
|
|
313
|
+
* framework-level identity files that define how the COO routes work
|
|
314
|
+
* across channels — they always reflect the templates the build ships
|
|
315
|
+
* with. Operator-specific content lives in USER.md and per-agent files,
|
|
316
|
+
* neither of which is templated.
|
|
317
|
+
*
|
|
318
|
+
* The destination is anchored under STATE_DIR (~/.leedab/agent-workspace/)
|
|
319
|
+
* rather than cwd-relative, so the path doesn't drift between directories
|
|
320
|
+
* across customer installs. pinAgentWorkspace points openclaw at this
|
|
321
|
+
* same path so the channel-facing agent reads from here.
|
|
270
322
|
*/
|
|
271
323
|
async function seedWorkspace() {
|
|
272
324
|
const srcDir = join(dirname(fileURLToPath(import.meta.url)), "templates", "workspace");
|
|
273
|
-
const destDir =
|
|
325
|
+
const destDir = AGENT_WORKSPACE_DIR;
|
|
274
326
|
await mkdir(destDir, { recursive: true });
|
|
275
327
|
try {
|
|
276
328
|
const files = await readdir(srcDir);
|
|
277
329
|
for (const file of files) {
|
|
278
|
-
|
|
279
|
-
try {
|
|
280
|
-
await access(dest);
|
|
281
|
-
// Already exists — don't overwrite
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
await copyFile(join(srcDir, file), dest);
|
|
285
|
-
}
|
|
330
|
+
await copyFile(join(srcDir, file), join(destDir, file));
|
|
286
331
|
}
|
|
287
332
|
}
|
|
288
333
|
catch (err) {
|