leedab 0.7.2 → 0.9.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/_schema/entitlements.fixture.json +30 -0
- package/apps/console/.next/standalone/.next/BUILD_ID +1 -1
- package/apps/console/.next/standalone/.next/app-build-manifest.json +230 -174
- package/apps/console/.next/standalone/.next/app-path-routes-manifest.json +56 -48
- 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/brain/add-folder/route.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/add-folder/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/add-folder/route_client-reference-manifest.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/forget/route.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/forget/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/forget/route_client-reference-manifest.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/scan/route.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/scan/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/scan/route_client-reference-manifest.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/search/route.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/search/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/search/route_client-reference-manifest.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/status/route.js +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/status/route.js.nft.json +1 -0
- package/apps/console/.next/standalone/.next/server/app/api/brain/status/route_client-reference-manifest.js +1 -0
- 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 +3 -3
- 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 +56 -48
- 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 +50 -42
- 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/chunks/app/api/agent/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/approvals/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/approvals/stream/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/automation/workflow-blueprint/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/backend/endpoint-spec/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/bootstrap-admin-token/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brain/add-folder/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brain/forget/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brain/scan/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brain/search/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brain/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/brand/brand-audit/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/campaigns/campaign-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/confidence/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/customer/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/dispatches/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/engagement/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/escalate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/profile/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/screenshare/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/track-question/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/champion/use-case-wiki/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/chat/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/compliance/risk-register-seed/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/computer-use/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/computer-use/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/concierge/morning-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/contacts/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/content/seo-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/conversations/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/coo/roster/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/coo/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/cx/escalation-triage/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/cx/health-score/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/data/cohort-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delegate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delegate/stream/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delivery/qbr-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/delivery/weekly-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/dev/invalidate-cache/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/devops/runbook/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/email/sequence-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/engineering/adr-draft/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/finance/runway-snapshot/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/frontend/component-spec/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/health/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-migration-script/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-n8n-workflow/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/implementation/scaffold-skill-override/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/inbox/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/inbox/stream/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/investor/kpi-tracker/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/telegram/connect/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/channels/whatsapp/connect/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/leads/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/leads/[id]/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/gtm/templates/[name]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/license/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/models/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/providers/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/sessions/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/sessions/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/team/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/team/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/vault/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/leedab/workflows/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/legal/clause-template/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/custom/draft/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/custom/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/manifest/agents/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketing/cadence-planner/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketing/competitive-snapshot/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/marketplace/catalogue/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/onboarding/engagement-plan/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/onboarding/kickoff-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/openclaw/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/ops/dispatch-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/pack/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/people/job-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/preferences/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/procurement/po-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/product/prd-draft/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/research/prospect-intel/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/research/search/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/routing/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/runs/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/sales/pipeline-summary/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/sales/prospect-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/build/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/quickstart-regenerate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/solutions/refine/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/strategy/market-pulse/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/telegram/[customerId]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/templates/regenerate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/templates/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/uploads/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/uploads/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/usage/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/video/video-script/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/webhooks/workflow/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/history/[runId]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/history/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/[id]/run/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/api/workflows/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/standalone/.next/static/chunks/app/page-a85bd367b676799b.js +1 -0
- package/apps/console/.next/standalone/.next/static/pI-RunP5kCTXBDuNkwoV1/_buildManifest.js +1 -0
- package/apps/console/.next/static/chunks/app/api/agent/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/approvals/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/approvals/stream/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/automation/workflow-blueprint/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/backend/endpoint-spec/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/bootstrap-admin-token/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/brain/add-folder/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/brain/forget/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/brain/scan/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/brain/search/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/brain/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/brand/brand-audit/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/campaigns/campaign-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/confidence/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/customer/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/dispatches/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/engagement/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/escalate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/profile/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/screenshare/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/track-question/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/champion/use-case-wiki/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/chat/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/compliance/risk-register-seed/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/computer-use/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/computer-use/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/concierge/morning-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/contacts/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/content/seo-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/conversations/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/coo/roster/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/coo/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/cx/escalation-triage/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/cx/health-score/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/data/cohort-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delegate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delegate/stream/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delivery/qbr-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/delivery/weekly-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/dev/invalidate-cache/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/devops/runbook/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/email/sequence-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/engineering/adr-draft/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/finance/runway-snapshot/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/frontend/component-spec/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/health/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-migration-script/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-n8n-workflow/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/implementation/scaffold-skill-override/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/inbox/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/inbox/stream/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/investor/kpi-tracker/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/channels/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/channels/telegram/connect/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/channels/whatsapp/connect/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/leads/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/leads/[id]/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/gtm/templates/[name]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/license/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/models/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/providers/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/sessions/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/sessions/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/team/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/team/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/vault/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/leedab/workflows/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/legal/clause-template/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/manifest/agents/custom/draft/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/manifest/agents/custom/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/manifest/agents/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/marketing/cadence-planner/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/marketing/competitive-snapshot/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/marketplace/catalogue/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/onboarding/engagement-plan/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/onboarding/kickoff-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/openclaw/status/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/ops/dispatch-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/pack/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/people/job-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/preferences/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/procurement/po-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/product/prd-draft/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/research/prospect-intel/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/research/search/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/routing/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/runs/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/sales/pipeline-summary/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/sales/prospect-brief/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/solutions/build/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/solutions/quickstart-regenerate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/solutions/refine/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/strategy/market-pulse/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/telegram/[customerId]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/templates/regenerate/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/templates/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/uploads/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/uploads/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/usage/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/video/video-script/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/webhooks/workflow/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/history/[runId]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/history/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/[id]/run/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/api/workflows/route-e7d105b160fdcdb6.js +1 -0
- package/apps/console/.next/static/chunks/app/page-a85bd367b676799b.js +1 -0
- package/apps/console/.next/static/pI-RunP5kCTXBDuNkwoV1/_buildManifest.js +1 -0
- package/bin/leedab.js +330 -2
- package/dist/backup/index.d.ts +30 -0
- package/dist/backup/index.js +273 -0
- package/dist/brain/cli.d.ts +26 -0
- package/dist/brain/cli.js +124 -0
- package/dist/brain/db/connection.d.ts +4 -0
- package/dist/brain/db/connection.js +38 -0
- package/dist/brain/db/migrate.d.ts +5 -0
- package/dist/brain/db/migrate.js +38 -0
- package/dist/brain/db/migrations/0001_init.sql +134 -0
- package/dist/brain/ingest/classifier.d.ts +6 -0
- package/dist/brain/ingest/classifier.js +21 -0
- package/dist/brain/ingest/indexer.d.ts +4 -0
- package/dist/brain/ingest/indexer.js +175 -0
- package/dist/brain/ingest/parsers/text.d.ts +4 -0
- package/dist/brain/ingest/parsers/text.js +38 -0
- package/dist/brain/ingest/scanner.d.ts +19 -0
- package/dist/brain/ingest/scanner.js +181 -0
- package/dist/brain/search/bm25.d.ts +6 -0
- package/dist/brain/search/bm25.js +55 -0
- package/dist/brain/types.d.ts +53 -0
- package/dist/brain/types.js +1 -0
- package/dist/gateway.js +58 -13
- package/dist/license/entitlements.d.ts +12 -0
- package/dist/license/entitlements.js +37 -0
- package/dist/onboard/steps/provider.js +20 -4
- package/dist/paths.d.ts +21 -0
- package/dist/paths.js +27 -0
- package/dist/templates/workspace/AGENTS.md +4 -3
- package/dist/templates/workspace/COO.md +82 -0
- package/dist/templates/workspace/SOUL.md +71 -7
- package/package.json +7 -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 → pI-RunP5kCTXBDuNkwoV1}/_ssgManifest.js +0 -0
- /package/apps/console/.next/static/{CLtH7rcbrrXTBpzawMULl → pI-RunP5kCTXBDuNkwoV1}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:99,errorRate:1e-4,numBits:1898,numHashes:14,bitArray:[1,1,0,0,e,e,r,r,r,r,e,r,r,r,r,r,e,e,e,e,e,r,r,e,r,r,e,r,e,e,e,e,e,e,e,e,e,r,r,r,e,r,r,r,e,e,e,r,e,r,e,e,e,e,r,r,r,e,e,r,e,r,r,r,e,e,r,e,r,r,e,e,r,r,r,e,r,e,r,e,e,e,r,r,e,e,e,r,r,r,e,e,r,e,e,r,r,r,r,r,r,e,e,e,r,r,e,e,e,r,r,r,r,r,e,e,r,r,e,r,e,e,r,e,e,r,r,r,r,e,r,r,e,r,e,e,r,r,r,e,e,e,e,e,r,r,r,e,r,r,r,e,r,e,r,r,e,r,e,e,e,r,e,r,r,e,e,e,r,r,r,r,r,r,e,r,r,e,e,e,e,e,r,r,e,r,e,e,r,r,r,r,e,e,r,e,e,r,e,e,e,r,r,r,e,e,r,e,e,r,r,e,r,r,e,r,r,e,e,e,r,r,e,e,r,e,r,e,r,r,r,r,r,e,e,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,e,e,e,r,r,e,r,r,r,e,e,e,e,r,e,r,r,e,r,e,r,r,e,r,e,r,e,r,r,e,r,r,e,e,r,e,e,e,r,r,e,e,e,e,r,e,e,r,r,e,r,r,r,e,e,e,r,r,r,r,e,e,r,e,r,r,e,e,e,e,e,e,e,e,r,e,e,e,r,e,e,r,e,r,e,e,r,e,r,r,r,r,r,e,e,r,r,e,e,r,r,e,r,e,e,e,e,r,e,r,r,e,e,e,r,e,r,r,r,e,e,r,e,r,r,e,r,r,r,e,r,r,r,e,e,e,e,e,e,e,e,r,e,e,e,e,r,r,e,r,r,e,r,r,e,r,e,e,r,e,e,r,r,e,r,e,e,r,e,e,e,e,e,e,e,e,r,e,r,e,r,e,e,r,r,r,e,e,e,r,e,e,r,e,e,r,e,r,e,r,r,e,e,r,e,e,e,e,r,e,r,r,r,r,e,e,r,e,e,r,r,r,r,e,e,r,e,r,r,r,e,r,r,e,e,r,e,r,r,r,r,e,e,r,e,e,e,e,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,e,e,r,e,e,e,e,e,r,r,e,r,e,e,e,e,e,e,r,r,r,e,r,r,e,e,e,e,r,r,e,e,e,e,r,e,e,r,e,e,e,e,r,e,e,e,r,r,e,r,e,r,e,r,r,e,r,r,e,r,e,e,r,e,r,e,r,e,e,r,e,e,e,e,e,r,e,e,r,r,r,r,e,e,r,e,r,r,r,e,r,r,r,r,e,e,r,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,e,e,e,r,r,e,r,r,r,r,e,r,e,e,e,e,e,r,e,e,e,e,e,e,e,e,r,r,r,e,r,e,r,r,r,e,e,e,e,e,r,e,e,e,r,e,e,e,r,e,e,r,e,e,e,r,e,e,r,r,r,e,e,r,e,r,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,e,e,e,r,r,e,e,r,e,r,e,e,r,e,r,e,r,r,e,r,r,e,e,e,r,r,r,e,r,e,e,e,e,e,r,r,r,r,e,r,e,r,e,r,e,r,r,r,e,r,e,e,e,r,r,r,r,e,r,e,r,e,e,r,e,r,e,e,e,e,r,e,r,e,e,r,e,r,e,e,e,r,r,r,r,e,r,r,e,e,r,r,r,r,e,r,r,e,e,e,e,e,r,r,e,e,e,e,e,e,r,r,r,r,e,e,r,r,e,e,r,r,e,r,e,r,r,r,e,e,e,e,r,r,e,r,e,r,r,r,r,e,e,r,e,e,e,e,r,r,e,r,r,r,e,e,e,e,e,e,e,e,r,r,e,e,e,e,r,e,e,r,r,r,e,r,e,r,e,r,r,r,e,e,r,e,e,e,r,e,r,e,r,e,r,e,e,r,e,e,e,r,r,e,r,r,r,r,r,r,r,e,r,r,e,r,r,r,e,e,e,e,e,e,r,e,r,r,e,e,e,e,e,r,r,r,r,e,e,e,e,e,e,r,e,e,e,r,e,e,r,e,r,r,r,r,r,e,e,r,r,r,r,e,e,e,r,e,e,r,e,r,e,r,r,r,e,e,r,r,e,r,e,r,e,e,e,e,r,r,r,r,r,e,r,r,e,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,r,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,e,e,e,e,e,r,e,r,e,e,r,r,r,e,r,e,r,r,e,r,e,e,r,e,r,r,e,r,e,r,r,r,r,r,r,e,r,r,e,e,r,e,r,r,r,e,e,e,r,r,e,r,r,r,e,e,e,e,e,r,r,r,e,r,r,e,r,e,r,e,e,r,r,e,e,r,e,e,r,r,e,e,e,e,e,e,r,e,e,r,r,e,e,r,r,r,r,r,e,r,e,e,e,r,r,r,e,r,r,e,r,r,e,e,e,e,e,r,r,e,r,r,r,r,e,r,e,e,e,e,r,e,e,r,r,r,e,e,r,e,e,r,r,e,r,r,r,r,e,e,e,e,e,r,r,e,e,r,r,e,r,e,r,r,e,e,r,e,r,e,r,r,e,e,e,r,e,e,e,r,e,e,r,r,r,r,e,r,e,r,r,e,r,r,r,r,r,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,e,e,r,r,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,e,r,e,e,r,e,r,r,r,r,r,r,r,r,e,r,r,r,e,e,r,r,e,r,r,e,r,e,r,e,r,e,r,e,e,r,e,e,r,r,e,r,r,r,e,r,r,r,e,r,r,r,r,e,e,r,r,r,e,e,r,e,e,r,r,r,r,r,e,r,e,r,r,e,r,r,e,e,e,e,e,e,e,e,r,e,r,r,e,e,r,r,e,e,e,e,e,e,r,e,e,e,e,r,e,r,r,e,r,e,r,r,e,r,e,e,r,r,e,r,e,r,e,e,e,r,e,e,e,r,e,e,e,r,e,e,r,e,r,e,e,e,e,e,r,r,e,r,e,e,r,e,e,r,e,e,r,r,e,r,r,r,r,e,r,e,r,r,e,e,r,r,r,r,r,e,e,e,e,e,e,e,r,r,r,e,r,r,r,e,r,e,e,r,e,r,e,e,e,r,e,r,r,r,e,r,e,r,e,r,e,r,e,r,r,e,e,e,e,r,r,r,r,r,e,r,e,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,e,e,e,r,r,r,e,e,r,e,e,e,e,e,e,e,r,r,e,r,e,e,r,e,e,e,r,e,e,r,r,r,r,e,e,r,r,r,r,r,e,e,r,r,e,r,e,e,r,e,e,r,e,e,r,r,e,r,e,r,r,r,e,r,e,r,e,r,r,r,e,e,r,r,e,r,r,e,r,e,r,e,r,r,e,e,r,r,e,r,r,r,e,r,r,r,r,e,e,e,e,e,e,r,e,r,r,r,e,r,r,e,e,e,r,e,r,e,r,e,e,e,e,e,r,e,e,e,e,e,r,e,e,e,e,r,r,e,e,e,r,e,r,e,r,e,e,e,e,e,r,e,e,e,r,r,r,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,e,e,r,e,e,r,r,r,e,r,e,e,e,r,e,r,r,e,r,r,e,r,r,e,e,r,r,r,r,e,e,e,e,e,r,e,e,e,r,e,e,r,e,r,e,e,e,r,e,e,e,r,r,r,e,e,e,e,r,r,e,r,e,r,r,r,e,e,r,r,r,r,e,e,e,e,e,e,e,r,e,e,e,r,e,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,r,r,r,e,e,r,e,r,r,r,e,e,e,r,e,e,r,r,r,e,e,e,r,e,e,r,r,r,r,e,e,r,e,r,r,e,e,e,e,e,r,e,e,e,e,e,e,r,r,r,e,r,r,r,r,e,e,r,r,e,r,r,e,e,r,r,e,e,r,r,e,e,r,e,e,e,e,e,e,e,r,r,e,r,e,r,r,e,e,r,e,e,e,r,r]},__routerFilterDynamic:{numItems:9,errorRate:1e-4,numBits:173,numHashes:14,bitArray:[r,r,e,r,e,e,r,r,e,e,r,e,e,e,e,e,e,e,e,e,e,e,r,e,e,r,e,e,r,e,e,e,e,e,r,r,e,e,r,e,e,r,e,r,r,e,e,e,r,r,r,e,r,e,r,r,e,e,r,r,e,r,r,r,r,r,e,e,e,e,e,e,e,r,r,e,r,e,r,e,e,r,e,r,e,e,r,r,e,e,e,e,r,r,r,r,r,r,e,r,e,r,r,e,r,r,e,e,r,r,r,r,r,e,e,r,r,r,e,e,e,r,r,e,e,r,e,e,e,e,e,e,e,r,e,e,r,e,r,e,r,r,e,e,r,e,e,e,r,r,r,r,r,e,r,e,e,r,e,r,r,r,r,r,r,e,e,r,r,e,e,e,r]},"/_error":["static/chunks/pages/_error-94812ad32cad7365.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
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)");
|
|
@@ -1061,6 +1304,91 @@ gtm
|
|
|
1061
1304
|
}
|
|
1062
1305
|
});
|
|
1063
1306
|
|
|
1307
|
+
// ---------------------------------------------------------------------------
|
|
1308
|
+
// `leedab brain` — search-index over the customer's markdown vault plus any
|
|
1309
|
+
// registered external folders. See docs/plans/brain-bootstrap.md for the
|
|
1310
|
+
// full design. Phase 1 ships scan / search / status / forget / add-folder.
|
|
1311
|
+
// ---------------------------------------------------------------------------
|
|
1312
|
+
const brain = program
|
|
1313
|
+
.command("brain")
|
|
1314
|
+
.description("Search-index over the customer's vault + registered external folders");
|
|
1315
|
+
|
|
1316
|
+
brain
|
|
1317
|
+
.command("add-folder <path>")
|
|
1318
|
+
.description("Register an external folder as a brain source")
|
|
1319
|
+
.option("-c, --client <id>", "Client id (default: $LEEDAB_CLIENT_ID or 'default')")
|
|
1320
|
+
.option("--root-id <id>", "Explicit root id (default: auto-generated)")
|
|
1321
|
+
.action(async (path, opts) => {
|
|
1322
|
+
const { cmdAddFolder } = await import("../dist/brain/cli.js");
|
|
1323
|
+
try {
|
|
1324
|
+
await cmdAddFolder(path, { clientId: opts.client, rootId: opts.rootId });
|
|
1325
|
+
} catch (err) {
|
|
1326
|
+
console.error(chalk.red(`Add-folder failed: ${err.message}`));
|
|
1327
|
+
process.exit(1);
|
|
1328
|
+
}
|
|
1329
|
+
});
|
|
1330
|
+
|
|
1331
|
+
brain
|
|
1332
|
+
.command("scan")
|
|
1333
|
+
.description("Scan every registered root and index changed files")
|
|
1334
|
+
.option("-c, --client <id>", "Client id (default: $LEEDAB_CLIENT_ID or 'default')")
|
|
1335
|
+
.option("--json", "Emit machine-readable JSON instead of formatted output")
|
|
1336
|
+
.action(async (opts) => {
|
|
1337
|
+
const { cmdScan } = await import("../dist/brain/cli.js");
|
|
1338
|
+
try {
|
|
1339
|
+
await cmdScan({ clientId: opts.client, json: opts.json });
|
|
1340
|
+
} catch (err) {
|
|
1341
|
+
console.error(chalk.red(`Scan failed: ${err.message}`));
|
|
1342
|
+
process.exit(1);
|
|
1343
|
+
}
|
|
1344
|
+
});
|
|
1345
|
+
|
|
1346
|
+
brain
|
|
1347
|
+
.command("search <query...>")
|
|
1348
|
+
.description("BM25 search across indexed chunks")
|
|
1349
|
+
.option("-c, --client <id>", "Client id")
|
|
1350
|
+
.option("-n, --limit <n>", "Max hits", (v) => parseInt(v, 10), 10)
|
|
1351
|
+
.option("--json", "Emit machine-readable JSON instead of formatted output")
|
|
1352
|
+
.action(async (query, opts) => {
|
|
1353
|
+
const { cmdSearch } = await import("../dist/brain/cli.js");
|
|
1354
|
+
try {
|
|
1355
|
+
cmdSearch(query.join(" "), { clientId: opts.client, limit: opts.limit, json: opts.json });
|
|
1356
|
+
} catch (err) {
|
|
1357
|
+
console.error(chalk.red(`Search failed: ${err.message}`));
|
|
1358
|
+
process.exit(1);
|
|
1359
|
+
}
|
|
1360
|
+
});
|
|
1361
|
+
|
|
1362
|
+
brain
|
|
1363
|
+
.command("status")
|
|
1364
|
+
.description("Brain index status — doc count, errors, last scan")
|
|
1365
|
+
.option("-c, --client <id>", "Client id")
|
|
1366
|
+
.option("--json", "Emit machine-readable JSON instead of formatted output")
|
|
1367
|
+
.action(async (opts) => {
|
|
1368
|
+
const { cmdStatus } = await import("../dist/brain/cli.js");
|
|
1369
|
+
try {
|
|
1370
|
+
cmdStatus({ clientId: opts.client, json: opts.json });
|
|
1371
|
+
} catch (err) {
|
|
1372
|
+
console.error(chalk.red(`Status failed: ${err.message}`));
|
|
1373
|
+
process.exit(1);
|
|
1374
|
+
}
|
|
1375
|
+
});
|
|
1376
|
+
|
|
1377
|
+
brain
|
|
1378
|
+
.command("forget")
|
|
1379
|
+
.description("Wipe the brain search-index cache (markdown vault is untouched)")
|
|
1380
|
+
.option("-c, --client <id>", "Client id")
|
|
1381
|
+
.requiredOption("--confirm <clientId>", "Pass the client id to confirm")
|
|
1382
|
+
.action(async (opts) => {
|
|
1383
|
+
const { cmdForget } = await import("../dist/brain/cli.js");
|
|
1384
|
+
try {
|
|
1385
|
+
cmdForget({ clientId: opts.client, confirm: opts.confirm });
|
|
1386
|
+
} catch (err) {
|
|
1387
|
+
console.error(chalk.red(`Forget failed: ${err.message}`));
|
|
1388
|
+
process.exit(1);
|
|
1389
|
+
}
|
|
1390
|
+
});
|
|
1391
|
+
|
|
1064
1392
|
// Default action: show status if in a project, nudge to onboard if not
|
|
1065
1393
|
if (process.argv.length <= 2) {
|
|
1066
1394
|
if (!existsSync(STATE_DIR)) {
|
|
@@ -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
|
+
}
|