milagre 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +42 -2
- package/node_modules/@milagre/core/package.json +29 -0
- package/node_modules/@milagre/core/src/account-mcp.cjs +119 -0
- package/node_modules/@milagre/core/src/account-routing.cjs +40 -0
- package/node_modules/@milagre/core/src/accounts.cjs +459 -0
- package/node_modules/@milagre/core/src/advisor-delivery.cjs +139 -0
- package/node_modules/@milagre/core/src/advisor-reads.cjs +140 -0
- package/node_modules/@milagre/core/src/advisor-store.cjs +66 -0
- package/node_modules/@milagre/core/src/advisor-tools.cjs +50 -0
- package/node_modules/@milagre/core/src/advisors.cjs +413 -0
- package/node_modules/@milagre/core/src/agent-folders.cjs +157 -0
- package/node_modules/@milagre/core/src/agents/acp-events.cjs +314 -0
- package/node_modules/@milagre/core/src/agents/acp-rpc.cjs +143 -0
- package/node_modules/@milagre/core/src/agents/acp-session.cjs +611 -0
- package/node_modules/@milagre/core/src/agents/advisor-policy.cjs +53 -0
- package/node_modules/@milagre/core/src/agents/antigravity-acp.cjs +151 -0
- package/node_modules/@milagre/core/src/agents/antigravity-install.cjs +457 -0
- package/node_modules/@milagre/core/src/agents/antigravity-model-list.cjs +44 -0
- package/node_modules/@milagre/core/src/agents/antigravity-subagents.cjs +584 -0
- package/node_modules/@milagre/core/src/agents/antigravity-text.cjs +137 -0
- package/node_modules/@milagre/core/src/agents/chat-host.cjs +1366 -0
- package/node_modules/@milagre/core/src/agents/claude-provider.cjs +623 -0
- package/node_modules/@milagre/core/src/agents/cli-update.cjs +227 -0
- package/node_modules/@milagre/core/src/agents/cli.cjs +113 -0
- package/node_modules/@milagre/core/src/agents/codex-provider.cjs +729 -0
- package/node_modules/@milagre/core/src/agents/codex-rpc.cjs +126 -0
- package/node_modules/@milagre/core/src/agents/command.cjs +39 -0
- package/node_modules/@milagre/core/src/agents/design-drafts.cjs +65 -0
- package/node_modules/@milagre/core/src/agents/environment.cjs +235 -0
- package/node_modules/@milagre/core/src/agents/environment.d.cts +9 -0
- package/node_modules/@milagre/core/src/agents/events.cjs +492 -0
- package/node_modules/@milagre/core/src/agents/handover.cjs +213 -0
- package/node_modules/@milagre/core/src/agents/models.cjs +220 -0
- package/node_modules/@milagre/core/src/agents/permissions.cjs +464 -0
- package/node_modules/@milagre/core/src/agents/ports.cjs +361 -0
- package/node_modules/@milagre/core/src/agents/process-tree.cjs +170 -0
- package/node_modules/@milagre/core/src/agents/provider-updates.cjs +48 -0
- package/node_modules/@milagre/core/src/agents/questions.cjs +169 -0
- package/node_modules/@milagre/core/src/agents/session-manager.cjs +346 -0
- package/node_modules/@milagre/core/src/agents/status.cjs +148 -0
- package/node_modules/@milagre/core/src/agents/steps.cjs +327 -0
- package/node_modules/@milagre/core/src/agents/subagents.cjs +299 -0
- package/node_modules/@milagre/core/src/agents/tasks.cjs +87 -0
- package/node_modules/@milagre/core/src/agents/test-helpers.cjs +46 -0
- package/node_modules/@milagre/core/src/agents/windows-job.cjs +283 -0
- package/node_modules/@milagre/core/src/antigravity-account.cjs +205 -0
- package/node_modules/@milagre/core/src/antigravity-usage.cjs +251 -0
- package/node_modules/@milagre/core/src/attachment-preview.cjs +39 -0
- package/node_modules/@milagre/core/src/bots/gates.cjs +1182 -0
- package/node_modules/@milagre/core/src/bots/home.cjs +131 -0
- package/node_modules/@milagre/core/src/bots/index.cjs +707 -0
- package/node_modules/@milagre/core/src/bots/memory.cjs +181 -0
- package/node_modules/@milagre/core/src/bots/store.cjs +173 -0
- package/node_modules/@milagre/core/src/bots/templates.cjs +62 -0
- package/node_modules/@milagre/core/src/bots/tools.cjs +98 -0
- package/node_modules/@milagre/core/src/browsers-cdp.cjs +378 -0
- package/node_modules/@milagre/core/src/browsers.cjs +488 -0
- package/node_modules/@milagre/core/src/browsers.d.cts +50 -0
- package/node_modules/@milagre/core/src/bundled-skills/artifacts/SKILL.md +20 -0
- package/node_modules/@milagre/core/src/bundled-skills/browser/SKILL.md +16 -0
- package/node_modules/@milagre/core/src/bundled-skills/design/SKILL.md +144 -0
- package/node_modules/@milagre/core/src/bundled-skills/genui/SKILL.md +70 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre/SKILL.md +14 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre/references/advisors.md +37 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-address-review/SKILL.md +19 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-advisor/SKILL.md +16 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-committee/SKILL.md +16 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-fix-ci/SKILL.md +17 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-help/SKILL.md +19 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-help/references/desktop.md +19 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-help/references/host.md +17 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-help/references/phone.md +17 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-resolve-conflicts/SKILL.md +17 -0
- package/node_modules/@milagre/core/src/bundled-skills/milagre-update-branch/SKILL.md +15 -0
- package/node_modules/@milagre/core/src/bundled-skills/orchestrate/SKILL.md +61 -0
- package/node_modules/@milagre/core/src/bundled-skills/simulator/SKILL.md +15 -0
- package/node_modules/@milagre/core/src/bundled-skills/tldr/SKILL.md +82 -0
- package/node_modules/@milagre/core/src/bundled-skills/tldr/default.md +23 -0
- package/node_modules/@milagre/core/src/bundled-skills/tldr/eval.md +34 -0
- package/node_modules/@milagre/core/src/bundled-skills.cjs +16 -0
- package/node_modules/@milagre/core/src/chat-artifacts.cjs +708 -0
- package/node_modules/@milagre/core/src/chat-browsers.cjs +39 -0
- package/node_modules/@milagre/core/src/chat-db.cjs +371 -0
- package/node_modules/@milagre/core/src/chat-images.cjs +137 -0
- package/node_modules/@milagre/core/src/chat-pages.cjs +41 -0
- package/node_modules/@milagre/core/src/chat-plan-tools.cjs +84 -0
- package/node_modules/@milagre/core/src/chat-scopes.cjs +127 -0
- package/node_modules/@milagre/core/src/chat-simulators.cjs +164 -0
- package/node_modules/@milagre/core/src/chat-summaries.cjs +64 -0
- package/node_modules/@milagre/core/src/chat-title.cjs +138 -0
- package/node_modules/@milagre/core/src/checkpoint-files.cjs +250 -0
- package/node_modules/@milagre/core/src/checkpoint-runtime.cjs +85 -0
- package/node_modules/@milagre/core/src/checkpoints.cjs +310 -0
- package/node_modules/@milagre/core/src/delegations.cjs +877 -0
- package/node_modules/@milagre/core/src/design-mcp-tools.cjs +73 -0
- package/node_modules/@milagre/core/src/design-page-content.cjs +41 -0
- package/node_modules/@milagre/core/src/design-page-images.cjs +123 -0
- package/node_modules/@milagre/core/src/design-page-sharing.cjs +319 -0
- package/node_modules/@milagre/core/src/design-raster-worker.cjs +54 -0
- package/node_modules/@milagre/core/src/design-raster.cjs +152 -0
- package/node_modules/@milagre/core/src/design-settings.cjs +32 -0
- package/node_modules/@milagre/core/src/diff-refresh.cjs +130 -0
- package/node_modules/@milagre/core/src/diffstat.cjs +98 -0
- package/node_modules/@milagre/core/src/editor-command.cjs +15 -0
- package/node_modules/@milagre/core/src/editors.cjs +147 -0
- package/node_modules/@milagre/core/src/editors.d.cts +17 -0
- package/node_modules/@milagre/core/src/git/client.cjs +236 -0
- package/node_modules/@milagre/core/src/git/test-helpers.cjs +18 -0
- package/node_modules/@milagre/core/src/git-actions.cjs +456 -0
- package/node_modules/@milagre/core/src/git-diff.cjs +155 -0
- package/node_modules/@milagre/core/src/git-ipc.cjs +89 -0
- package/node_modules/@milagre/core/src/git-text.cjs +345 -0
- package/node_modules/@milagre/core/src/image-input.cjs +25 -0
- package/node_modules/@milagre/core/src/keep-awake.cjs +98 -0
- package/node_modules/@milagre/core/src/keep-awake.d.cts +19 -0
- package/node_modules/@milagre/core/src/limit-switch.cjs +90 -0
- package/node_modules/@milagre/core/src/linear/client.cjs +129 -0
- package/node_modules/@milagre/core/src/linear/config.cjs +10 -0
- package/node_modules/@milagre/core/src/linear/edits.cjs +159 -0
- package/node_modules/@milagre/core/src/linear/errors.cjs +10 -0
- package/node_modules/@milagre/core/src/linear/index.cjs +172 -0
- package/node_modules/@milagre/core/src/linear/issues.cjs +306 -0
- package/node_modules/@milagre/core/src/linear/links.cjs +18 -0
- package/node_modules/@milagre/core/src/linear/oauth.cjs +157 -0
- package/node_modules/@milagre/core/src/linear/refs.cjs +43 -0
- package/node_modules/@milagre/core/src/linear/store.cjs +89 -0
- package/node_modules/@milagre/core/src/linear/tools.cjs +214 -0
- package/node_modules/@milagre/core/src/link-runtime.cjs +136 -0
- package/node_modules/@milagre/core/src/link-store.cjs +73 -0
- package/node_modules/@milagre/core/src/link-workspaces.cjs +260 -0
- package/node_modules/@milagre/core/src/link-worktree-tools.cjs +42 -0
- package/node_modules/@milagre/core/src/linked-mcp-server.cjs +142 -0
- package/node_modules/@milagre/core/src/linked-summary.cjs +79 -0
- package/node_modules/@milagre/core/src/linked-tools.cjs +353 -0
- package/node_modules/@milagre/core/src/linked-worktrees.cjs +365 -0
- package/node_modules/@milagre/core/src/local-mcp-client-files.cjs +177 -0
- package/node_modules/@milagre/core/src/local-mcp-clients.cjs +145 -0
- package/node_modules/@milagre/core/src/local-mcp-host.cjs +451 -0
- package/node_modules/@milagre/core/src/local-mcp-operations.cjs +54 -0
- package/node_modules/@milagre/core/src/local-mcp-registry.cjs +42 -0
- package/node_modules/@milagre/core/src/local-mcp-server.cjs +158 -0
- package/node_modules/@milagre/core/src/local-mcp-stdio.cjs +75 -0
- package/node_modules/@milagre/core/src/local-mcp-store.cjs +133 -0
- package/node_modules/@milagre/core/src/local-mcp-tools.cjs +191 -0
- package/node_modules/@milagre/core/src/local-mcp.cjs +142 -0
- package/node_modules/@milagre/core/src/main-sync.cjs +114 -0
- package/node_modules/@milagre/core/src/mcp/claude.cjs +155 -0
- package/node_modules/@milagre/core/src/mcp/codex.cjs +144 -0
- package/node_modules/@milagre/core/src/mcp/definitions.cjs +198 -0
- package/node_modules/@milagre/core/src/mcp/extras.cjs +15 -0
- package/node_modules/@milagre/core/src/mcp/index.cjs +389 -0
- package/node_modules/@milagre/core/src/mcp/store.cjs +63 -0
- package/node_modules/@milagre/core/src/message-store.cjs +411 -0
- package/node_modules/@milagre/core/src/onboarding-projects.cjs +69 -0
- package/node_modules/@milagre/core/src/ownership.cjs +149 -0
- package/node_modules/@milagre/core/src/private-files.cjs +87 -0
- package/node_modules/@milagre/core/src/project-content.cjs +343 -0
- package/node_modules/@milagre/core/src/project-files.cjs +64 -0
- package/node_modules/@milagre/core/src/project-finder.cjs +100 -0
- package/node_modules/@milagre/core/src/project-groups.cjs +48 -0
- package/node_modules/@milagre/core/src/project-identity.cjs +53 -0
- package/node_modules/@milagre/core/src/project-image.cjs +118 -0
- package/node_modules/@milagre/core/src/project-links.cjs +72 -0
- package/node_modules/@milagre/core/src/project-registry.cjs +225 -0
- package/node_modules/@milagre/core/src/project-settings.cjs +184 -0
- package/node_modules/@milagre/core/src/project-state.cjs +120 -0
- package/node_modules/@milagre/core/src/project-states.cjs +360 -0
- package/node_modules/@milagre/core/src/project-store.cjs +147 -0
- package/node_modules/@milagre/core/src/pull-request.cjs +170 -0
- package/node_modules/@milagre/core/src/recent-projects.cjs +174 -0
- package/node_modules/@milagre/core/src/routines/cron.cjs +189 -0
- package/node_modules/@milagre/core/src/routines/hook-store.cjs +181 -0
- package/node_modules/@milagre/core/src/routines/linear-poller.cjs +543 -0
- package/node_modules/@milagre/core/src/routines/runtime-adapter.cjs +1154 -0
- package/node_modules/@milagre/core/src/routines/scheduler.cjs +576 -0
- package/node_modules/@milagre/core/src/routines/store.cjs +1187 -0
- package/node_modules/@milagre/core/src/routines/tools.cjs +283 -0
- package/node_modules/@milagre/core/src/routines/webhook.cjs +106 -0
- package/node_modules/@milagre/core/src/runtime.cjs +2515 -0
- package/node_modules/@milagre/core/src/runtime.d.cts +68 -0
- package/node_modules/@milagre/core/src/setup-review.cjs +87 -0
- package/node_modules/@milagre/core/src/simulators-helper.cjs +554 -0
- package/node_modules/@milagre/core/src/simulators.cjs +347 -0
- package/node_modules/@milagre/core/src/simulators.d.cts +63 -0
- package/node_modules/@milagre/core/src/skills.cjs +157 -0
- package/node_modules/@milagre/core/src/terminals.cjs +484 -0
- package/node_modules/@milagre/core/src/usage-cache.cjs +94 -0
- package/node_modules/@milagre/core/src/usage.cjs +344 -0
- package/node_modules/@milagre/core/src/worktree-chats.cjs +214 -0
- package/node_modules/@milagre/core/src/worktree-cleanup.cjs +96 -0
- package/node_modules/@milagre/core/src/worktree-files.cjs +177 -0
- package/node_modules/@milagre/core/src/worktree-name.cjs +58 -0
- package/node_modules/@milagre/core/src/worktree-setup.cjs +360 -0
- package/node_modules/@milagre/core/src/worktrees.cjs +178 -0
- package/node_modules/@milagre/shared/package.json +344 -0
- package/node_modules/@milagre/shared/src/advisor-result.ts +12 -0
- package/node_modules/@milagre/shared/src/agent-activity.ts +49 -0
- package/node_modules/@milagre/shared/src/agent-runs.d.mts +70 -0
- package/node_modules/@milagre/shared/src/agent-runs.mjs +465 -0
- package/node_modules/@milagre/shared/src/ai-consent.d.mts +16 -0
- package/node_modules/@milagre/shared/src/ai-consent.mjs +142 -0
- package/node_modules/@milagre/shared/src/antigravity-models.d.mts +28 -0
- package/node_modules/@milagre/shared/src/antigravity-models.mjs +106 -0
- package/node_modules/@milagre/shared/src/appearance.d.mts +43 -0
- package/node_modules/@milagre/shared/src/appearance.mjs +166 -0
- package/node_modules/@milagre/shared/src/archive.d.mts +46 -0
- package/node_modules/@milagre/shared/src/archive.mjs +133 -0
- package/node_modules/@milagre/shared/src/artifact-document.d.mts +12 -0
- package/node_modules/@milagre/shared/src/artifact-document.mjs +288 -0
- package/node_modules/@milagre/shared/src/artifact.ts +316 -0
- package/node_modules/@milagre/shared/src/attention.d.mts +53 -0
- package/node_modules/@milagre/shared/src/attention.mjs +171 -0
- package/node_modules/@milagre/shared/src/bots.d.mts +89 -0
- package/node_modules/@milagre/shared/src/bots.mjs +27 -0
- package/node_modules/@milagre/shared/src/browser-receiver.d.mts +48 -0
- package/node_modules/@milagre/shared/src/browser-receiver.mjs +699 -0
- package/node_modules/@milagre/shared/src/browser-script.mjs +4 -0
- package/node_modules/@milagre/shared/src/browser.ts +45 -0
- package/node_modules/@milagre/shared/src/canvas.ts +130 -0
- package/node_modules/@milagre/shared/src/chat-activity.d.mts +73 -0
- package/node_modules/@milagre/shared/src/chat-activity.mjs +252 -0
- package/node_modules/@milagre/shared/src/chat-display.ts +21 -0
- package/node_modules/@milagre/shared/src/chat-history.ts +31 -0
- package/node_modules/@milagre/shared/src/chat-links.d.mts +22 -0
- package/node_modules/@milagre/shared/src/chat-links.mjs +86 -0
- package/node_modules/@milagre/shared/src/chat-plan.d.mts +15 -0
- package/node_modules/@milagre/shared/src/chat-plan.mjs +140 -0
- package/node_modules/@milagre/shared/src/chat-pull-requests.d.mts +11 -0
- package/node_modules/@milagre/shared/src/chat-pull-requests.mjs +69 -0
- package/node_modules/@milagre/shared/src/chat-reload.d.mts +5 -0
- package/node_modules/@milagre/shared/src/chat-reload.mjs +11 -0
- package/node_modules/@milagre/shared/src/chat-row.ts +41 -0
- package/node_modules/@milagre/shared/src/chat-scopes.d.mts +11 -0
- package/node_modules/@milagre/shared/src/chat-scopes.mjs +70 -0
- package/node_modules/@milagre/shared/src/chat-summary.d.mts +12 -0
- package/node_modules/@milagre/shared/src/chat-summary.mjs +59 -0
- package/node_modules/@milagre/shared/src/chat-window-cache.ts +104 -0
- package/node_modules/@milagre/shared/src/chats.d.mts +50 -0
- package/node_modules/@milagre/shared/src/chats.mjs +186 -0
- package/node_modules/@milagre/shared/src/checkpoint-restore.d.mts +5 -0
- package/node_modules/@milagre/shared/src/checkpoint-restore.mjs +17 -0
- package/node_modules/@milagre/shared/src/checkpoints.ts +69 -0
- package/node_modules/@milagre/shared/src/compaction.d.mts +14 -0
- package/node_modules/@milagre/shared/src/compaction.mjs +31 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/LICENSE.txt +3527 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/albert-sans.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/anton.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/archivo.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/barlow-condensed.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/barlow.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/bebas-neue.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/besley.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/big-shoulders.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/bodoni-moda.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/bricolage-grotesque.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/chivo.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/eb-garamond.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/epilogue.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/figtree.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/hanken-grotesk.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/imbue.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/jost.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/league-spartan.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/libre-franklin.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/literata.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/newsreader.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/onest.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/public-sans.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/red-hat-display.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/red-hat-text.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/rokkitt.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/schibsted-grotesk.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/source-serif-4.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/stack-sans-headline.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/stack-sans-text.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/stix-two-text.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/tiktok-sans.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/unbounded.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/work-sans.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/young-serif.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-catalog-fonts/zilla-slab.mjs +2 -0
- package/node_modules/@milagre/shared/src/design-components.mjs +162 -0
- package/node_modules/@milagre/shared/src/design-controller-script.d.mts +1 -0
- package/node_modules/@milagre/shared/src/design-controller-script.mjs +4 -0
- package/node_modules/@milagre/shared/src/design-draft.d.mts +31 -0
- package/node_modules/@milagre/shared/src/design-draft.mjs +334 -0
- package/node_modules/@milagre/shared/src/design-font-catalog.mjs +42 -0
- package/node_modules/@milagre/shared/src/design-font-characters.mjs +7 -0
- package/node_modules/@milagre/shared/src/design-font-data.mjs +3 -0
- package/node_modules/@milagre/shared/src/design-font-metrics.mjs +543 -0
- package/node_modules/@milagre/shared/src/design-fonts.mjs +139 -0
- package/node_modules/@milagre/shared/src/design-icons.mjs +25 -0
- package/node_modules/@milagre/shared/src/design-layout.mjs +234 -0
- package/node_modules/@milagre/shared/src/design-lint.mjs +128 -0
- package/node_modules/@milagre/shared/src/design-page.d.mts +19 -0
- package/node_modules/@milagre/shared/src/design-page.mjs +205 -0
- package/node_modules/@milagre/shared/src/design-paint.mjs +11 -0
- package/node_modules/@milagre/shared/src/design-render-limits.mjs +25 -0
- package/node_modules/@milagre/shared/src/design-svg.mjs +184 -0
- package/node_modules/@milagre/shared/src/design.d.mts +139 -0
- package/node_modules/@milagre/shared/src/design.mjs +929 -0
- package/node_modules/@milagre/shared/src/diagram-script.d.mts +1 -0
- package/node_modules/@milagre/shared/src/diagram-script.mjs +11 -0
- package/node_modules/@milagre/shared/src/diagram.ts +153 -0
- package/node_modules/@milagre/shared/src/diff-layout.ts +94 -0
- package/node_modules/@milagre/shared/src/diff-parse.ts +48 -0
- package/node_modules/@milagre/shared/src/diff-tree.ts +44 -0
- package/node_modules/@milagre/shared/src/display-clock.ts +56 -0
- package/node_modules/@milagre/shared/src/file-kinds.d.mts +2 -0
- package/node_modules/@milagre/shared/src/file-kinds.mjs +29 -0
- package/node_modules/@milagre/shared/src/file-link.ts +52 -0
- package/node_modules/@milagre/shared/src/file-syntax.d.mts +5 -0
- package/node_modules/@milagre/shared/src/file-syntax.mjs +99 -0
- package/node_modules/@milagre/shared/src/genui-renderer.tsx +49 -0
- package/node_modules/@milagre/shared/src/genui.ts +231 -0
- package/node_modules/@milagre/shared/src/git-codes.d.mts +4 -0
- package/node_modules/@milagre/shared/src/git-codes.mjs +15 -0
- package/node_modules/@milagre/shared/src/git-diff.ts +19 -0
- package/node_modules/@milagre/shared/src/handoff.d.mts +9 -0
- package/node_modules/@milagre/shared/src/handoff.mjs +41 -0
- package/node_modules/@milagre/shared/src/limits.d.mts +5 -0
- package/node_modules/@milagre/shared/src/limits.mjs +10 -0
- package/node_modules/@milagre/shared/src/linear-issue.d.mts +15 -0
- package/node_modules/@milagre/shared/src/linear-issue.mjs +114 -0
- package/node_modules/@milagre/shared/src/linear.ts +71 -0
- package/node_modules/@milagre/shared/src/linked-message.d.mts +6 -0
- package/node_modules/@milagre/shared/src/linked-message.mjs +28 -0
- package/node_modules/@milagre/shared/src/live-activity.d.mts +29 -0
- package/node_modules/@milagre/shared/src/live-activity.mjs +53 -0
- package/node_modules/@milagre/shared/src/local-mcp.ts +102 -0
- package/node_modules/@milagre/shared/src/main-sync.ts +53 -0
- package/node_modules/@milagre/shared/src/mcp.ts +212 -0
- package/node_modules/@milagre/shared/src/message-navigation.ts +5 -0
- package/node_modules/@milagre/shared/src/message-search.d.mts +26 -0
- package/node_modules/@milagre/shared/src/message-search.mjs +139 -0
- package/node_modules/@milagre/shared/src/model-copy.ts +33 -0
- package/node_modules/@milagre/shared/src/model-options.ts +98 -0
- package/node_modules/@milagre/shared/src/model.ts +1054 -0
- package/node_modules/@milagre/shared/src/notification-chimes.d.mts +8 -0
- package/node_modules/@milagre/shared/src/notification-chimes.mjs +46 -0
- package/node_modules/@milagre/shared/src/pairing-link.d.mts +12 -0
- package/node_modules/@milagre/shared/src/pairing-link.mjs +76 -0
- package/node_modules/@milagre/shared/src/peer-frames.d.mts +17 -0
- package/node_modules/@milagre/shared/src/peer-frames.mjs +86 -0
- package/node_modules/@milagre/shared/src/phase-graph.d.mts +26 -0
- package/node_modules/@milagre/shared/src/phase-graph.mjs +110 -0
- package/node_modules/@milagre/shared/src/pr-action.d.mts +7 -0
- package/node_modules/@milagre/shared/src/pr-action.mjs +34 -0
- package/node_modules/@milagre/shared/src/pr-blockers.ts +100 -0
- package/node_modules/@milagre/shared/src/project-edits.d.mts +13 -0
- package/node_modules/@milagre/shared/src/project-edits.mjs +80 -0
- package/node_modules/@milagre/shared/src/prompt-mentions.d.mts +3 -0
- package/node_modules/@milagre/shared/src/prompt-mentions.mjs +30 -0
- package/node_modules/@milagre/shared/src/prompt-parts.d.mts +4 -0
- package/node_modules/@milagre/shared/src/prompt-parts.mjs +59 -0
- package/node_modules/@milagre/shared/src/prompt-skills.d.mts +11 -0
- package/node_modules/@milagre/shared/src/prompt-skills.mjs +57 -0
- package/node_modules/@milagre/shared/src/provider-capabilities.d.mts +17 -0
- package/node_modules/@milagre/shared/src/provider-capabilities.mjs +35 -0
- package/node_modules/@milagre/shared/src/provider-logos.ts +110 -0
- package/node_modules/@milagre/shared/src/providers.d.mts +6 -0
- package/node_modules/@milagre/shared/src/providers.mjs +25 -0
- package/node_modules/@milagre/shared/src/queued-messages.d.mts +2 -0
- package/node_modules/@milagre/shared/src/queued-messages.mjs +9 -0
- package/node_modules/@milagre/shared/src/reconcile.d.mts +2 -0
- package/node_modules/@milagre/shared/src/reconcile.mjs +16 -0
- package/node_modules/@milagre/shared/src/relay-crypto.d.mts +35 -0
- package/node_modules/@milagre/shared/src/relay-crypto.mjs +181 -0
- package/node_modules/@milagre/shared/src/relay-rpc.d.mts +38 -0
- package/node_modules/@milagre/shared/src/relay-rpc.mjs +73 -0
- package/node_modules/@milagre/shared/src/reply-parts.ts +126 -0
- package/node_modules/@milagre/shared/src/result.d.mts +4 -0
- package/node_modules/@milagre/shared/src/result.mjs +11 -0
- package/node_modules/@milagre/shared/src/route-supervisor.d.mts +24 -0
- package/node_modules/@milagre/shared/src/route-supervisor.mjs +123 -0
- package/node_modules/@milagre/shared/src/routine-form.d.mts +122 -0
- package/node_modules/@milagre/shared/src/routine-form.mjs +343 -0
- package/node_modules/@milagre/shared/src/routine-prompt.d.mts +32 -0
- package/node_modules/@milagre/shared/src/routine-prompt.mjs +142 -0
- package/node_modules/@milagre/shared/src/routines.d.mts +128 -0
- package/node_modules/@milagre/shared/src/routines.mjs +527 -0
- package/node_modules/@milagre/shared/src/send-retry.d.mts +14 -0
- package/node_modules/@milagre/shared/src/send-retry.mjs +47 -0
- package/node_modules/@milagre/shared/src/simulator-browser.mjs +4 -0
- package/node_modules/@milagre/shared/src/simulator-receiver.d.mts +48 -0
- package/node_modules/@milagre/shared/src/simulator-receiver.mjs +778 -0
- package/node_modules/@milagre/shared/src/simulator.ts +49 -0
- package/node_modules/@milagre/shared/src/stable-order.d.mts +2 -0
- package/node_modules/@milagre/shared/src/stable-order.mjs +16 -0
- package/node_modules/@milagre/shared/src/state-patch.d.mts +8 -0
- package/node_modules/@milagre/shared/src/state-patch.mjs +59 -0
- package/node_modules/@milagre/shared/src/streaming-markdown.ts +38 -0
- package/node_modules/@milagre/shared/src/subagent-glance.d.mts +16 -0
- package/node_modules/@milagre/shared/src/subagent-glance.mjs +131 -0
- package/node_modules/@milagre/shared/src/subagent-transcript.d.mts +18 -0
- package/node_modules/@milagre/shared/src/subagent-transcript.mjs +72 -0
- package/node_modules/@milagre/shared/src/terminal-client.d.mts +22 -0
- package/node_modules/@milagre/shared/src/terminal-client.mjs +108 -0
- package/node_modules/@milagre/shared/src/terminal.ts +33 -0
- package/node_modules/@milagre/shared/src/themes/build.ts +109 -0
- package/node_modules/@milagre/shared/src/themes/color.ts +84 -0
- package/node_modules/@milagre/shared/src/themes/custom.ts +86 -0
- package/node_modules/@milagre/shared/src/themes/index.ts +44 -0
- package/node_modules/@milagre/shared/src/themes/palettes/catppuccin.ts +174 -0
- package/node_modules/@milagre/shared/src/themes/palettes/milagre.ts +171 -0
- package/node_modules/@milagre/shared/src/themes/palettes/popular.ts +325 -0
- package/node_modules/@milagre/shared/src/themes/registry.ts +9 -0
- package/node_modules/@milagre/shared/src/themes/types.ts +73 -0
- package/node_modules/@milagre/shared/src/tokens.d.mts +2 -0
- package/node_modules/@milagre/shared/src/tokens.mjs +7 -0
- package/node_modules/@milagre/shared/src/untrusted-text.d.mts +2 -0
- package/node_modules/@milagre/shared/src/untrusted-text.mjs +18 -0
- package/node_modules/@milagre/shared/src/usage-limit.d.mts +11 -0
- package/node_modules/@milagre/shared/src/usage-limit.mjs +63 -0
- package/node_modules/@milagre/shared/src/usage.ts +120 -0
- package/node_modules/@milagre/shared/src/use-checkpoints.ts +165 -0
- package/node_modules/@milagre/shared/src/use-local-mcp.ts +90 -0
- package/node_modules/@milagre/shared/src/use-provider-updates.ts +79 -0
- package/node_modules/@milagre/shared/src/worktree-link.d.mts +13 -0
- package/node_modules/@milagre/shared/src/worktree-link.mjs +48 -0
- package/package.json +49 -4
- package/prepare-node-pty.cjs +30 -0
- package/src/bootstrap.cjs +143 -0
- package/src/bootstrap.d.cts +24 -0
- package/src/cli.cjs +97 -0
- package/src/client.cjs +150 -0
- package/src/cloudflared.cjs +115 -0
- package/src/command-help.cjs +91 -0
- package/src/command.cjs +134 -0
- package/src/confine.cjs +356 -0
- package/src/demo-agent.cjs +173 -0
- package/src/devices.cjs +229 -0
- package/src/expo-push.cjs +171 -0
- package/src/lan-addresses.cjs +44 -0
- package/src/lan-host.cjs +177 -0
- package/src/live-activity.cjs +159 -0
- package/src/local-auth.cjs +49 -0
- package/src/media-access.cjs +133 -0
- package/src/mobile-bridge.cjs +950 -0
- package/src/mobile-cloudflare.cjs +25 -0
- package/src/mobile-pairing.cjs +47 -0
- package/src/mobile-push.cjs +260 -0
- package/src/mobile-tunnel.cjs +68 -0
- package/src/paths.cjs +22 -0
- package/src/peer-channel.cjs +58 -0
- package/src/peer-policy.cjs +21 -0
- package/src/phone-channels.cjs +414 -0
- package/src/phone.cjs +760 -0
- package/src/power.cjs +32 -0
- package/src/protocol.cjs +85 -0
- package/src/relay-host.cjs +361 -0
- package/src/relay-identity.cjs +130 -0
- package/src/remote-files.cjs +66 -0
- package/src/server.cjs +872 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Milagre contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,43 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Milagre CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Run agents on a computer without opening a desktop UI. Requires Node.js 24+, Git, and at least one installed, signed-in agent CLI (Claude Code or Codex).
|
|
4
|
+
|
|
5
|
+
Start the server with npm:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npx milagre serve
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or install the command globally:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install --global milagre
|
|
15
|
+
milagre serve
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`milagre help` lists the commands. Use `milagre help serve` or `milagre serve --help` for a command's flags and examples. Help uses color in interactive terminals and plain text when piped; `NO_COLOR` disables color.
|
|
19
|
+
|
|
20
|
+
`serve` runs in the foreground and uses `~/.milagre/server` for its persistent profile. It prints a private pairing link and, in an interactive terminal, a phone QR code. In another desktop's Settings > Devices > Add computer, paste the link. Approve the computer from another terminal on the server:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
milagre devices pending
|
|
24
|
+
milagre devices allow KEY
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Phones scan the QR with Milagre's pairing screen. The existing encrypted relay connects devices across networks; no public daemon port is needed. Pairing links expire after 10 minutes. Previously paired devices reconnect after a server restart. Run `milagre pair` to open another pairing window. Keep links private: they grant access to your agents.
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
milagre serve --project /absolute/path/to/project
|
|
31
|
+
milagre status
|
|
32
|
+
milagre devices list
|
|
33
|
+
milagre devices deny KEY
|
|
34
|
+
milagre devices remove KEY
|
|
35
|
+
milagre request project:open '["/absolute/path/to/project"]'
|
|
36
|
+
milagre stop
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Use `MILAGRE_DATA_DIR` or an absolute `--data-dir` to select another profile. Use that same profile for every command. The CLI profile is separate from the desktop profile; do not open the same Projects in two hosts at once. The server runs with your account's permissions and uses the agent credentials on that computer.
|
|
40
|
+
|
|
41
|
+
Ctrl+C and SIGTERM save and stop the server. Use `milagre serve --no-pair` for unattended restarts without printing links or opening a new pairing window. It retains access for devices already paired. `--no-qr` prints links without QR codes. No startup service is installed automatically; run the foreground command through your service manager for an always-on computer.
|
|
42
|
+
|
|
43
|
+
From the repository, `npm run cli -- serve` runs the same command. `npm run package:cli` produces the installable tarball in `release/cli/`; it bundles the private Milagre packages, without Electron. npm installs registry dependencies and sets up native dependencies for the computer where you install it. You can also install that tarball with `npm install --global ./milagre-0.1.1.tgz`.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@milagre/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "src/runtime.cjs",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./src/runtime.d.cts",
|
|
10
|
+
"default": "./src/runtime.cjs"
|
|
11
|
+
},
|
|
12
|
+
"./*": "./src/*.cjs",
|
|
13
|
+
"./editors": {
|
|
14
|
+
"types": "./src/editors.d.cts",
|
|
15
|
+
"default": "./src/editors.cjs"
|
|
16
|
+
},
|
|
17
|
+
"./keep-awake": {
|
|
18
|
+
"types": "./src/keep-awake.d.cts",
|
|
19
|
+
"default": "./src/keep-awake.cjs"
|
|
20
|
+
},
|
|
21
|
+
"./agents/environment": {
|
|
22
|
+
"types": "./src/agents/environment.d.cts",
|
|
23
|
+
"default": "./src/agents/environment.cjs"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=24"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
const fs = require("node:fs");
|
|
2
|
+
const path = require("node:path");
|
|
3
|
+
const { randomUUID } = require("node:crypto");
|
|
4
|
+
|
|
5
|
+
// An added Claude or Codex Account runs from its own config folder, but the MCP servers the user set up
|
|
6
|
+
// belong to the connected CLI account: Claude keeps them in .claude.json, which an Account never copies,
|
|
7
|
+
// and Codex copied config.toml once, when the Account was added. Each time an Account's environment is
|
|
8
|
+
// built, the connected account's servers are merged into the Account's config. A server of the same name
|
|
9
|
+
// takes the connected account's definition; a server only the Account has stays.
|
|
10
|
+
|
|
11
|
+
function writeIfChanged(file, before, after) {
|
|
12
|
+
if (after === before) return;
|
|
13
|
+
const temp = `${file}.${randomUUID()}.tmp`;
|
|
14
|
+
fs.writeFileSync(temp, after, { mode: 0o600 });
|
|
15
|
+
fs.renameSync(temp, file);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function readText(file) {
|
|
19
|
+
try {
|
|
20
|
+
return fs.readFileSync(file, "utf8");
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (error.code === "ENOENT") return null;
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const isObject = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
28
|
+
|
|
29
|
+
// The names copied last time, beside the target config, so a server removed from the source can be removed again
|
|
30
|
+
// without touching servers the account added itself.
|
|
31
|
+
const recordFile = (targetFile) => path.join(path.dirname(targetFile), "milagre-inherited-mcp.json");
|
|
32
|
+
function readRecorded(targetFile) {
|
|
33
|
+
try {
|
|
34
|
+
const names = JSON.parse(fs.readFileSync(recordFile(targetFile), "utf8")).names;
|
|
35
|
+
return new Set(Array.isArray(names) ? names : []);
|
|
36
|
+
} catch {
|
|
37
|
+
return new Set();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function writeRecorded(targetFile, names) {
|
|
41
|
+
const file = recordFile(targetFile);
|
|
42
|
+
writeIfChanged(file, readText(file), `${JSON.stringify({ names: [...names].toSorted() })}\n`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// User servers sit at the top level of .claude.json, local ones under projects[path]. The Account's file
|
|
46
|
+
// is written by Claude Code at sign-in; before that there is nothing to merge into.
|
|
47
|
+
function inheritClaudeMcp(sourceFile, targetFile) {
|
|
48
|
+
const sourceText = readText(sourceFile);
|
|
49
|
+
const targetText = readText(targetFile);
|
|
50
|
+
if (sourceText === null || targetText === null) return;
|
|
51
|
+
const source = JSON.parse(sourceText);
|
|
52
|
+
const target = JSON.parse(targetText);
|
|
53
|
+
if (!isObject(source) || !isObject(target)) return;
|
|
54
|
+
const sourceNames = new Set(isObject(source.mcpServers) ? Object.keys(source.mcpServers) : []);
|
|
55
|
+
if (isObject(target.mcpServers)) for (const name of readRecorded(targetFile)) if (!sourceNames.has(name)) delete target.mcpServers[name];
|
|
56
|
+
if (isObject(source.mcpServers) && Object.keys(source.mcpServers).length)
|
|
57
|
+
target.mcpServers = { ...(isObject(target.mcpServers) ? target.mcpServers : {}), ...source.mcpServers };
|
|
58
|
+
for (const [project, settings] of Object.entries(isObject(source.projects) ? source.projects : {})) {
|
|
59
|
+
if (!isObject(settings?.mcpServers) || !Object.keys(settings.mcpServers).length) continue;
|
|
60
|
+
if (!isObject(target.projects)) target.projects = {};
|
|
61
|
+
const current = isObject(target.projects[project]) ? target.projects[project] : {};
|
|
62
|
+
target.projects[project] = { ...current, mcpServers: { ...(isObject(current.mcpServers) ? current.mcpServers : {}), ...settings.mcpServers } };
|
|
63
|
+
}
|
|
64
|
+
const next = JSON.stringify(target, null, 2);
|
|
65
|
+
// Unchanged servers leave the file alone, whatever formatting Claude Code wrote it with.
|
|
66
|
+
if (JSON.stringify(JSON.parse(targetText), null, 2) !== next) writeIfChanged(targetFile, targetText, next);
|
|
67
|
+
writeRecorded(targetFile, sourceNames);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// The server a TOML table header belongs to: [mcp_servers.pencil] and [mcp_servers.pencil.env] are both
|
|
71
|
+
// "pencil". Anything else, [mcp_servers] alone included, belongs to no server.
|
|
72
|
+
const SERVER_HEADER = /^\s*\[\s*mcp_servers\s*\.\s*("(?:[^"\\]|\\.)*"|'[^']*'|[A-Za-z0-9_-]+)\s*(?:\.[^\]]*)?\]\s*(?:#.*)?$/;
|
|
73
|
+
const HEADER = /^\s*\[/;
|
|
74
|
+
|
|
75
|
+
// The text before the first table, then each table with the lines up to the next header.
|
|
76
|
+
function tomlSections(text) {
|
|
77
|
+
const lines = text.split("\n");
|
|
78
|
+
const sections = [];
|
|
79
|
+
let current = { server: null, lines: [] };
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
if (HEADER.test(line)) {
|
|
82
|
+
sections.push(current);
|
|
83
|
+
const name = SERVER_HEADER.exec(line)?.[1];
|
|
84
|
+
current = { server: name ? name.replace(/^["']|["']$/g, "") : null, lines: [] };
|
|
85
|
+
}
|
|
86
|
+
current.lines.push(line);
|
|
87
|
+
}
|
|
88
|
+
sections.push(current);
|
|
89
|
+
return sections;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function inheritCodexMcp(sourceFile, targetFile) {
|
|
93
|
+
const sourceText = readText(sourceFile);
|
|
94
|
+
const targetText = readText(targetFile);
|
|
95
|
+
if (sourceText === null || targetText === null) return;
|
|
96
|
+
const inherited = tomlSections(sourceText).filter((section) => section.server);
|
|
97
|
+
const names = new Set(inherited.map((section) => section.server));
|
|
98
|
+
// A server copied last time that the source no longer has goes, sub-tables included.
|
|
99
|
+
const removed = new Set([...readRecorded(targetFile)].filter((name) => !names.has(name)));
|
|
100
|
+
if (!inherited.length && !removed.size) return;
|
|
101
|
+
const kept = tomlSections(targetText).filter((section) => !names.has(section.server) && !removed.has(section.server));
|
|
102
|
+
const body = kept
|
|
103
|
+
.map((section) => section.lines.join("\n"))
|
|
104
|
+
.join("\n")
|
|
105
|
+
.replace(/\n*$/, "\n");
|
|
106
|
+
const added = inherited.map((section) => section.lines.join("\n").replace(/\n*$/, "\n")).join("\n");
|
|
107
|
+
writeIfChanged(targetFile, targetText, inherited.length ? `${body}\n${added}` : body);
|
|
108
|
+
writeRecorded(targetFile, names);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function inheritMcp(provider, { sourceDir, targetDir, home, configDirSet }) {
|
|
112
|
+
if (provider === "claude") {
|
|
113
|
+
// Without CLAUDE_CONFIG_DIR, Claude Code keeps .claude.json in the home folder, not in ~/.claude.
|
|
114
|
+
const sourceFile = configDirSet ? path.join(sourceDir, ".claude.json") : path.join(home, ".claude.json");
|
|
115
|
+
inheritClaudeMcp(sourceFile, path.join(targetDir, ".claude.json"));
|
|
116
|
+
} else if (provider === "codex") inheritCodexMcp(path.join(sourceDir, "config.toml"), path.join(targetDir, "config.toml"));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = { inheritMcp, inheritClaudeMcp, inheritCodexMcp };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const os = require("node:os");
|
|
2
|
+
const { createCliStatus, cliWhenLoggedIn } = require("./agents/status.cjs");
|
|
3
|
+
const { createModelCache } = require("./agents/models.cjs");
|
|
4
|
+
const { PROVIDERS } = require("@milagre/shared/providers");
|
|
5
|
+
|
|
6
|
+
/** Services capture account IDs, never a mutable currently viewed Project. */
|
|
7
|
+
function createAccountRouting({ accounts, cli: baseCli, clientVersion, statusFactory = createCliStatus, modelsFactory = createModelCache }) {
|
|
8
|
+
const cache = new Map();
|
|
9
|
+
function selection(scope) {
|
|
10
|
+
return Object.fromEntries(PROVIDERS.map((provider) => [provider, accounts.selected(provider, scope)]));
|
|
11
|
+
}
|
|
12
|
+
async function forAccount(provider, accountId) {
|
|
13
|
+
const status = await baseCli(provider);
|
|
14
|
+
try {
|
|
15
|
+
return { ...status, accountId, env: accounts.environment(provider, accountId) };
|
|
16
|
+
} catch {
|
|
17
|
+
return { ...status, accountId, problem: "Assigned account not found. Choose another account in Project Accounts.", env: undefined };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const cli = (provider, scope) => forAccount(provider, accounts.selected(provider, scope));
|
|
21
|
+
function services(scope, ids = selection(scope)) {
|
|
22
|
+
const key = JSON.stringify(ids);
|
|
23
|
+
if (!cache.has(key)) {
|
|
24
|
+
const pinnedCli = (provider) => forAccount(provider, ids[provider]);
|
|
25
|
+
const options = { cli: pinnedCli, cwd: os.homedir(), clientVersion };
|
|
26
|
+
const status = statusFactory(options);
|
|
27
|
+
const models = modelsFactory({ ...options, cli: cliWhenLoggedIn(pinnedCli, status) });
|
|
28
|
+
cache.set(key, { status, models });
|
|
29
|
+
}
|
|
30
|
+
return cache.get(key);
|
|
31
|
+
}
|
|
32
|
+
function invalidate(provider) {
|
|
33
|
+
for (const entry of cache.values()) {
|
|
34
|
+
entry.status.invalidate?.(provider);
|
|
35
|
+
entry.models.invalidate?.(provider);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { cli, forAccount, services, selection, invalidate };
|
|
39
|
+
}
|
|
40
|
+
module.exports = { createAccountRouting };
|