@ashlr/hub 3.4.0 → 3.5.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/CHANGELOG.md +107 -1
- package/README.md +3 -0
- package/dist/build-identity.json +2 -2
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/local-runtime.js +40 -9
- package/dist/cli/local-runtime.js.map +1 -1
- package/dist/core/fleet/external-skill-audit.js +1 -1
- package/dist/core/fleet/external-skill-audit.js.map +1 -1
- package/dist/core/local-eval/classify.d.ts +57 -0
- package/dist/core/local-eval/classify.js +121 -0
- package/dist/core/local-eval/classify.js.map +1 -0
- package/dist/core/local-eval/configuration.d.ts +37 -0
- package/dist/core/local-eval/configuration.js +171 -0
- package/dist/core/local-eval/configuration.js.map +1 -0
- package/dist/core/local-eval/index.d.ts +15 -0
- package/dist/core/local-eval/index.js +16 -0
- package/dist/core/local-eval/index.js.map +1 -0
- package/dist/core/local-eval/main.d.ts +31 -0
- package/dist/core/local-eval/main.js +174 -0
- package/dist/core/local-eval/main.js.map +1 -0
- package/dist/core/local-eval/report.d.ts +25 -0
- package/dist/core/local-eval/report.js +157 -0
- package/dist/core/local-eval/report.js.map +1 -0
- package/dist/core/local-eval/runner.d.ts +55 -0
- package/dist/core/local-eval/runner.js +290 -0
- package/dist/core/local-eval/runner.js.map +1 -0
- package/dist/core/local-eval/tasks.d.ts +22 -0
- package/dist/core/local-eval/tasks.js +303 -0
- package/dist/core/local-eval/tasks.js.map +1 -0
- package/dist/core/local-eval/trace.d.ts +67 -0
- package/dist/core/local-eval/trace.js +309 -0
- package/dist/core/local-eval/trace.js.map +1 -0
- package/dist/core/local-eval/types.d.ts +262 -0
- package/dist/core/local-eval/types.js +23 -0
- package/dist/core/local-eval/types.js.map +1 -0
- package/dist/core/local-runtime/llama/anthropic-proxy-host.d.ts +68 -0
- package/dist/core/local-runtime/llama/anthropic-proxy-host.js +120 -0
- package/dist/core/local-runtime/llama/anthropic-proxy-host.js.map +1 -0
- package/dist/core/local-runtime/llama/anthropic-proxy-process.d.ts +15 -0
- package/dist/core/local-runtime/llama/anthropic-proxy-process.js +21 -0
- package/dist/core/local-runtime/llama/anthropic-proxy-process.js.map +1 -0
- package/dist/core/local-runtime/llama/anthropic-proxy.d.ts +2 -1
- package/dist/core/local-runtime/llama/anthropic-proxy.js +14 -6
- package/dist/core/local-runtime/llama/anthropic-proxy.js.map +1 -1
- package/dist/core/local-runtime/llama/anthropic-shim.d.ts +33 -0
- package/dist/core/local-runtime/llama/anthropic-shim.js +59 -0
- package/dist/core/local-runtime/llama/anthropic-shim.js.map +1 -1
- package/dist/core/local-runtime/llama/config.d.ts +123 -6
- package/dist/core/local-runtime/llama/config.js +196 -6
- package/dist/core/local-runtime/llama/config.js.map +1 -1
- package/dist/core/local-runtime/llama/index.d.ts +15 -0
- package/dist/core/local-runtime/llama/index.js +13 -0
- package/dist/core/local-runtime/llama/index.js.map +1 -1
- package/dist/core/local-runtime/llama/paths.d.ts +17 -0
- package/dist/core/local-runtime/llama/paths.js +25 -0
- package/dist/core/local-runtime/llama/paths.js.map +1 -1
- package/dist/core/local-runtime/llama/proxy-invocation.d.ts +101 -0
- package/dist/core/local-runtime/llama/proxy-invocation.js +134 -0
- package/dist/core/local-runtime/llama/proxy-invocation.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-launchd.d.ts +83 -0
- package/dist/core/local-runtime/llama/proxy-launchd.js +216 -0
- package/dist/core/local-runtime/llama/proxy-launchd.js.map +1 -0
- package/dist/core/local-runtime/llama/shapes.d.ts +2 -1
- package/dist/core/local-runtime/llama/shapes.js +2 -1
- package/dist/core/local-runtime/llama/shapes.js.map +1 -1
- package/dist/core/verse/adapters/claude.js +16 -0
- package/dist/core/verse/adapters/claude.js.map +1 -1
- package/dist/core/verse/adapters/codex.js +60 -2
- package/dist/core/verse/adapters/codex.js.map +1 -1
- package/dist/core/verse/adapters/grok.js +13 -0
- package/dist/core/verse/adapters/grok.js.map +1 -1
- package/dist/core/verse/control-api.d.ts +8 -9
- package/dist/core/verse/control-api.js +14 -114
- package/dist/core/verse/control-api.js.map +1 -1
- package/dist/core/verse/github-api.d.ts +50 -0
- package/dist/core/verse/github-api.js +211 -0
- package/dist/core/verse/github-api.js.map +1 -0
- package/dist/core/verse/github-proposal.d.ts +64 -0
- package/dist/core/verse/github-proposal.js +186 -0
- package/dist/core/verse/github-proposal.js.map +1 -0
- package/dist/core/verse/github-repo.d.ts +104 -0
- package/dist/core/verse/github-repo.js +476 -0
- package/dist/core/verse/github-repo.js.map +1 -0
- package/dist/core/verse/github-types.d.ts +174 -0
- package/dist/core/verse/github-types.js +31 -0
- package/dist/core/verse/github-types.js.map +1 -0
- package/dist/core/verse/mcp-cli-health.d.ts +149 -0
- package/dist/core/verse/mcp-cli-health.js +227 -0
- package/dist/core/verse/mcp-cli-health.js.map +1 -0
- package/dist/core/verse/mcp-control-api.d.ts +68 -0
- package/dist/core/verse/mcp-control-api.js +322 -0
- package/dist/core/verse/mcp-control-api.js.map +1 -0
- package/dist/core/verse/mcp-mutation.d.ts +187 -0
- package/dist/core/verse/mcp-mutation.js +471 -0
- package/dist/core/verse/mcp-mutation.js.map +1 -0
- package/dist/core/verse/mcp-scope.d.ts +114 -0
- package/dist/core/verse/mcp-scope.js +149 -0
- package/dist/core/verse/mcp-scope.js.map +1 -0
- package/dist/core/verse/mcp-seat-view.d.ts +197 -0
- package/dist/core/verse/mcp-seat-view.js +322 -0
- package/dist/core/verse/mcp-seat-view.js.map +1 -0
- package/dist/core/verse/path-guard.d.ts +115 -0
- package/dist/core/verse/path-guard.js +171 -0
- package/dist/core/verse/path-guard.js.map +1 -0
- package/dist/core/verse/seats.js +30 -2
- package/dist/core/verse/seats.js.map +1 -1
- package/dist/core/verse/session-engine.js +60 -1
- package/dist/core/verse/session-engine.js.map +1 -1
- package/dist/core/verse/session-store.js +20 -0
- package/dist/core/verse/session-store.js.map +1 -1
- package/dist/core/verse/types.d.ts +225 -1
- package/dist/core/verse/types.js +26 -0
- package/dist/core/verse/types.js.map +1 -1
- package/dist/core/verse/verse-api.d.ts +16 -1
- package/dist/core/verse/verse-api.js +338 -16
- package/dist/core/verse/verse-api.js.map +1 -1
- package/dist/core/verse/workspaces.d.ts +130 -0
- package/dist/core/verse/workspaces.js +501 -0
- package/dist/core/verse/workspaces.js.map +1 -0
- package/dist/core/web/api.js +23 -0
- package/dist/core/web/api.js.map +1 -1
- package/dist/core/web/public/next/assets/App-BbVoUCIi.js +7 -0
- package/dist/core/web/public/next/assets/App-BbVoUCIi.js.map +1 -0
- package/dist/core/web/public/next/assets/App-Cgi6j1Gk.css +1 -0
- package/dist/core/web/public/next/assets/ApprovalsSection-BW9iVjUa.js +2 -0
- package/dist/core/web/public/next/assets/ApprovalsSection-BW9iVjUa.js.map +1 -0
- package/dist/core/web/public/next/assets/ApprovalsSection-Su-NUTis.css +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js +2 -0
- package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-Cpk_oEhc.css +1 -0
- package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js +80 -0
- package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-LQiAn6Eu.css +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-CXevY3Au.js +2 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-CXevY3Au.js.map +1 -0
- package/dist/core/web/public/next/assets/{ConfirmDialog-cYuivhCX.css → ConfirmDialog-Dx15x0Ho.css} +1 -1
- package/dist/core/web/public/next/assets/Dialog-Bn0CgEGz.js +2 -0
- package/dist/core/web/public/next/assets/Dialog-Bn0CgEGz.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-tQ8kFulD.css +1 -0
- package/dist/core/web/public/next/assets/DiffViewer-C8HHTnVE.css +1 -0
- package/dist/core/web/public/next/assets/DiffViewer-QKyisN2L.js +7 -0
- package/dist/core/web/public/next/assets/DiffViewer-QKyisN2L.js.map +1 -0
- package/dist/core/web/public/next/assets/{MutationTokenDialog-jWLLCxWn.css → MutationTokenDialog-CrfJ0PdD.css} +1 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-DbSHPy3w.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DbSHPy3w.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-C-PCgCzo.js +7 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-C-PCgCzo.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CM_8pJs6.css +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-Dw8ZjmkS.js +2 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-Dw8ZjmkS.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-ekyMXAK8.css +1 -0
- package/dist/core/web/public/next/assets/SettingsSection-BII7TTSD.css +1 -0
- package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-Bk5HipM0.js +2 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-Bk5HipM0.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-Dh7A-hLD.css +1 -0
- package/dist/core/web/public/next/assets/UniverseView-Bqa8DH57.css +1 -0
- package/dist/core/web/public/next/assets/UniverseView-D8k9q0ce.js +9 -0
- package/dist/core/web/public/next/assets/UniverseView-D8k9q0ce.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-B2E06ZH1.js +2 -0
- package/dist/core/web/public/next/assets/UsageSection-B2E06ZH1.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-D2E3mU9a.css +1 -0
- package/dist/core/web/public/next/assets/charts-CsrtT4rk.css +1 -0
- package/dist/core/web/public/next/assets/charts-DSUpczxG.js +2 -0
- package/dist/core/web/public/next/assets/charts-DSUpczxG.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +2 -0
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +1 -0
- package/dist/core/web/public/next/assets/format-BNYWGJat.js +2 -0
- package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +1 -0
- package/dist/core/web/public/next/assets/global-C4jfYHrj.js +2 -0
- package/dist/core/web/public/next/assets/global-C4jfYHrj.js.map +1 -0
- package/dist/core/web/public/next/assets/global-D463gG1X.css +1 -0
- package/dist/core/web/public/next/assets/icons-BxOX8-XB.js +2 -0
- package/dist/core/web/public/next/assets/icons-BxOX8-XB.js.map +1 -0
- package/dist/core/web/public/next/assets/index-BMRIET7F.js +11 -0
- package/dist/core/web/public/next/assets/index-BMRIET7F.js.map +1 -0
- package/dist/core/web/public/next/assets/queries-AxnVa02h.js +2 -0
- package/dist/core/web/public/next/assets/queries-AxnVa02h.js.map +1 -0
- package/dist/core/web/public/next/assets/use-guarded-action-BO6c94Wp.js +2 -0
- package/dist/core/web/public/next/assets/use-guarded-action-BO6c94Wp.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js.map +1 -0
- package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js +2 -0
- package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js.map +1 -0
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/docs/README.md +4 -0
- package/node_modules/marked/README.md +8 -0
- package/node_modules/marked/bin/main.js +12 -11
- package/node_modules/marked/lib/marked.d.ts +88 -25
- package/node_modules/marked/lib/marked.esm.js +50 -44
- package/node_modules/marked/lib/marked.esm.js.map +3 -3
- package/node_modules/marked/lib/marked.umd.js +50 -44
- package/node_modules/marked/lib/marked.umd.js.map +3 -3
- package/node_modules/marked/man/marked.1 +1 -1
- package/node_modules/marked/package.json +21 -21
- package/package.json +13 -8
- package/dist/cli/activation.d.ts +0 -41
- package/dist/cli/activation.js +0 -485
- package/dist/cli/activation.js.map +0 -1
- package/dist/core/fleet/generated-repair-resolution.d.ts +0 -36
- package/dist/core/fleet/generated-repair-resolution.js +0 -245
- package/dist/core/fleet/generated-repair-resolution.js.map +0 -1
- package/dist/core/local-runtime/llama/port.d.ts +0 -17
- package/dist/core/local-runtime/llama/port.js +0 -47
- package/dist/core/local-runtime/llama/port.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-host.d.ts +0 -54
- package/dist/core/local-runtime/llama/proxy-host.js +0 -159
- package/dist/core/local-runtime/llama/proxy-host.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-process.d.ts +0 -148
- package/dist/core/local-runtime/llama/proxy-process.js +0 -250
- package/dist/core/local-runtime/llama/proxy-process.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-record.d.ts +0 -40
- package/dist/core/local-runtime/llama/proxy-record.js +0 -133
- package/dist/core/local-runtime/llama/proxy-record.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +0 -118
- package/dist/core/local-runtime/llama/proxy-supervisor.js +0 -511
- package/dist/core/local-runtime/llama/proxy-supervisor.js.map +0 -1
- package/dist/core/web/public/next/assets/App-BCKqSppK.css +0 -1
- package/dist/core/web/public/next/assets/App-LuILXjWG.js +0 -16
- package/dist/core/web/public/next/assets/App-LuILXjWG.js.map +0 -1
- package/dist/core/web/public/next/assets/ApprovalsSection-B_Xor8JH.js +0 -2
- package/dist/core/web/public/next/assets/ApprovalsSection-B_Xor8JH.js.map +0 -1
- package/dist/core/web/public/next/assets/ApprovalsSection-CRP59wSb.css +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-BB8RD-tv.css +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-BEwITtPJ.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-BEwITtPJ.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-DrxqhBPK.css +0 -1
- package/dist/core/web/public/next/assets/ChatSection-bRAzlMth.js +0 -77
- package/dist/core/web/public/next/assets/ChatSection-bRAzlMth.js.map +0 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-BqkZdPs_.js +0 -2
- package/dist/core/web/public/next/assets/ConfirmDialog-BqkZdPs_.js.map +0 -1
- package/dist/core/web/public/next/assets/Dialog-CPmedg4S.js +0 -2
- package/dist/core/web/public/next/assets/Dialog-CPmedg4S.js.map +0 -1
- package/dist/core/web/public/next/assets/Dialog-DxN7RgB5.css +0 -1
- package/dist/core/web/public/next/assets/DiffViewer-DmPJbeM_.js +0 -7
- package/dist/core/web/public/next/assets/DiffViewer-DmPJbeM_.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffViewer-hN7X6wGT.css +0 -1
- package/dist/core/web/public/next/assets/Epistemic-DiyMyeaN.css +0 -1
- package/dist/core/web/public/next/assets/Epistemic-M3SxLHjq.js +0 -2
- package/dist/core/web/public/next/assets/Epistemic-M3SxLHjq.js.map +0 -1
- package/dist/core/web/public/next/assets/Meter-CGBsbXUX.css +0 -1
- package/dist/core/web/public/next/assets/Meter-D_X7c9U3.js +0 -2
- package/dist/core/web/public/next/assets/Meter-D_X7c9U3.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-Ba5ZHu-8.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Ba5ZHu-8.js.map +0 -1
- package/dist/core/web/public/next/assets/RefreshIndicator-O7jUBOmX.css +0 -1
- package/dist/core/web/public/next/assets/RefreshIndicator-vHGpmyzb.js +0 -2
- package/dist/core/web/public/next/assets/RefreshIndicator-vHGpmyzb.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-B5g6JEVk.js +0 -7
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-B5g6JEVk.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-DLl4DbGG.css +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BIpdnxp-.css +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CroxuKoi.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CroxuKoi.js.map +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-DGJMdUh2.css +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-p-7FCGfn.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-p-7FCGfn.js.map +0 -1
- package/dist/core/web/public/next/assets/Skeleton-4qq4HuJO.js +0 -2
- package/dist/core/web/public/next/assets/Skeleton-4qq4HuJO.js.map +0 -1
- package/dist/core/web/public/next/assets/Skeleton-D2JaTXyv.css +0 -1
- package/dist/core/web/public/next/assets/StatusBadge-BbEdqEGn.js +0 -2
- package/dist/core/web/public/next/assets/StatusBadge-BbEdqEGn.js.map +0 -1
- package/dist/core/web/public/next/assets/StatusBadge-TpDqZf6K.css +0 -1
- package/dist/core/web/public/next/assets/TableView-R6Yeztp1.css +0 -1
- package/dist/core/web/public/next/assets/TableView-nyYs7Sv1.js +0 -2
- package/dist/core/web/public/next/assets/TableView-nyYs7Sv1.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-CiZZxRPV.css +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-DjTpQUrA.js +0 -2
- package/dist/core/web/public/next/assets/UniverseConsoleApp-DjTpQUrA.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseView-BtApwayT.js +0 -9
- package/dist/core/web/public/next/assets/UniverseView-BtApwayT.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseView-gBxl6yum.css +0 -1
- package/dist/core/web/public/next/assets/UsageSection-Db99N6ao.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-Db99N6ao.js.map +0 -1
- package/dist/core/web/public/next/assets/UsageSection-UUYDidOg.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-COa3J2dO.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-COa3J2dO.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-mOAXvWa6.css +0 -1
- package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js.map +0 -1
- package/dist/core/web/public/next/assets/format-fggwu_Rs.js +0 -2
- package/dist/core/web/public/next/assets/format-fggwu_Rs.js.map +0 -1
- package/dist/core/web/public/next/assets/global-BeRYd1Bu.css +0 -1
- package/dist/core/web/public/next/assets/global-CNVapoV1.js +0 -2
- package/dist/core/web/public/next/assets/global-CNVapoV1.js.map +0 -1
- package/dist/core/web/public/next/assets/index-BkUlX2Se.js +0 -51
- package/dist/core/web/public/next/assets/index-BkUlX2Se.js.map +0 -1
- package/dist/core/web/public/next/assets/index-YNTgDG2b.js +0 -2
- package/dist/core/web/public/next/assets/index-YNTgDG2b.js.map +0 -1
- package/dist/core/web/public/next/assets/queries-C9XS4SYq.js +0 -2
- package/dist/core/web/public/next/assets/queries-C9XS4SYq.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-Bqa2v0a-.css +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-Bql1nA-z.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-Bql1nA-z.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-IrNQKtER.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-IrNQKtER.js.map +0 -1
- package/node_modules/which/CHANGELOG.md +0 -166
- /package/node_modules/marked/{LICENSE.md → LICENSE} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "marked",
|
|
3
3
|
"description": "A markdown parser built for speed",
|
|
4
4
|
"author": "Christopher Jeffrey",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "18.0.10",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./lib/marked.esm.js",
|
|
8
8
|
"module": "./lib/marked.esm.js",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
},
|
|
31
31
|
"repository": {
|
|
32
32
|
"type": "git",
|
|
33
|
-
"url": "git://github.com/markedjs/marked.git"
|
|
33
|
+
"url": "git+https://github.com/markedjs/marked.git"
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://marked.js.org",
|
|
36
36
|
"bugs": {
|
|
37
|
-
"url": "
|
|
37
|
+
"url": "https://github.com/markedjs/marked/issues"
|
|
38
38
|
},
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"keywords": [
|
|
@@ -48,31 +48,31 @@
|
|
|
48
48
|
"html"
|
|
49
49
|
],
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@arethetypeswrong/cli": "^0.18.
|
|
52
|
-
"@markedjs/eslint-config": "^1.0.
|
|
53
|
-
"@markedjs/testutils": "
|
|
51
|
+
"@arethetypeswrong/cli": "^0.18.5",
|
|
52
|
+
"@markedjs/eslint-config": "^1.0.14",
|
|
53
|
+
"@markedjs/testutils": "18.0.0-1",
|
|
54
54
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
55
|
-
"@semantic-release/git": "^
|
|
56
|
-
"@semantic-release/github": "^12.0.
|
|
57
|
-
"@semantic-release/npm": "^13.1.
|
|
58
|
-
"@semantic-release/release-notes-generator": "^14.1.
|
|
59
|
-
"cheerio": "1.
|
|
55
|
+
"@semantic-release/git": "^11.0.1",
|
|
56
|
+
"@semantic-release/github": "^12.0.9",
|
|
57
|
+
"@semantic-release/npm": "^13.1.5",
|
|
58
|
+
"@semantic-release/release-notes-generator": "^14.1.1",
|
|
59
|
+
"cheerio": "1.2.0",
|
|
60
60
|
"commonmark": "0.31.2",
|
|
61
61
|
"cross-env": "^10.1.0",
|
|
62
62
|
"dts-bundle-generator": "^9.5.1",
|
|
63
|
-
"esbuild": "^0.
|
|
63
|
+
"esbuild": "^0.28.2",
|
|
64
64
|
"esbuild-plugin-umd-wrapper": "^3.0.0",
|
|
65
|
-
"eslint": "^
|
|
66
|
-
"highlight.js": "^11.
|
|
67
|
-
"markdown-it": "
|
|
68
|
-
"marked-highlight": "^2.2.
|
|
69
|
-
"marked-man": "^2.1.
|
|
65
|
+
"eslint": "^10.8.1",
|
|
66
|
+
"highlight.js": "^11.12.0",
|
|
67
|
+
"markdown-it": "15.0.0",
|
|
68
|
+
"marked-highlight": "^2.2.4",
|
|
69
|
+
"marked-man": "^2.1.1",
|
|
70
70
|
"recheck": "^4.5.0",
|
|
71
|
-
"rimraf": "^6.1.
|
|
72
|
-
"semantic-release": "^25.0.
|
|
71
|
+
"rimraf": "^6.1.3",
|
|
72
|
+
"semantic-release": "^25.0.9",
|
|
73
73
|
"titleize": "^4.0.0",
|
|
74
74
|
"tslib": "^2.8.1",
|
|
75
|
-
"typescript": "
|
|
75
|
+
"typescript": "6.0.3"
|
|
76
76
|
},
|
|
77
77
|
"scripts": {
|
|
78
78
|
"bench": "npm run build && node test/bench.js",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"test:cjs": "node test/cjs-test.cjs",
|
|
89
89
|
"test:lint": "eslint",
|
|
90
90
|
"test:only": "npm run build && npm run test:specs:only && npm run test:unit:only",
|
|
91
|
-
"test:redos": "node test/recheck.
|
|
91
|
+
"test:redos": "node test/recheck.ts > vuln.js",
|
|
92
92
|
"test:specs:only": "node --test --test-only --test-reporter=spec test/run-spec-tests.js",
|
|
93
93
|
"test:specs": "node --test --test-reporter=spec test/run-spec-tests.js",
|
|
94
94
|
"test:types": "tsc --project tsconfig-type-test.json && attw -P --entrypoints . --profile esm-only",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ashlr/hub",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.1",
|
|
4
4
|
"description": "Local-first command center for agentic engineers.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -115,13 +115,13 @@
|
|
|
115
115
|
"typecheck:web": "tsc --noEmit -p src/web-ui/tsconfig.json"
|
|
116
116
|
},
|
|
117
117
|
"devDependencies": {
|
|
118
|
-
"@testing-library/jest-dom": "^
|
|
118
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
119
119
|
"@testing-library/react": "^16.1.0",
|
|
120
120
|
"@testing-library/user-event": "^14.5.2",
|
|
121
|
-
"@types/node": "^
|
|
121
|
+
"@types/node": "^26.2.0",
|
|
122
122
|
"@types/react": "^19.0.0",
|
|
123
123
|
"@types/react-dom": "^19.0.0",
|
|
124
|
-
"@vitejs/plugin-react": "^
|
|
124
|
+
"@vitejs/plugin-react": "^6.1.0",
|
|
125
125
|
"dompurify": "^3.4.15",
|
|
126
126
|
"eslint": "^9.0.0",
|
|
127
127
|
"eslint-plugin-react-hooks": "^5.1.0",
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
"tsx": "^4.0.0",
|
|
133
133
|
"typescript": "^5.5.0",
|
|
134
134
|
"typescript-eslint": "^8.61.0",
|
|
135
|
-
"vite": "
|
|
135
|
+
"vite": "8.2.2",
|
|
136
136
|
"vitest": "4.1.11",
|
|
137
137
|
"yaml": "^2.8.1"
|
|
138
138
|
},
|
|
@@ -140,14 +140,19 @@
|
|
|
140
140
|
"fast-uri": "3.1.6",
|
|
141
141
|
"hono": "4.13.5",
|
|
142
142
|
"ip-address": "10.4.0",
|
|
143
|
-
"vite": "
|
|
143
|
+
"vite": "8.2.2",
|
|
144
144
|
"js-yaml": "4.3.2",
|
|
145
145
|
"nanoid": "3.3.18",
|
|
146
146
|
"qs": "6.16.0"
|
|
147
147
|
},
|
|
148
148
|
"dependencies": {
|
|
149
149
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
150
|
-
"marked": "
|
|
150
|
+
"marked": "18.0.10",
|
|
151
151
|
"tar": "7.5.22"
|
|
152
|
-
}
|
|
152
|
+
},
|
|
153
|
+
"bundleDependencies": [
|
|
154
|
+
"@modelcontextprotocol/sdk",
|
|
155
|
+
"marked",
|
|
156
|
+
"tar"
|
|
157
|
+
]
|
|
153
158
|
}
|
package/dist/cli/activation.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `ashlr activation` — operator authority for the autonomous fleet (M470).
|
|
3
|
-
*
|
|
4
|
-
* The daemon, goal/simple conductors, and resident-service install are all
|
|
5
|
-
* held shut by hard-coded denials until an operator EXPLICITLY grants
|
|
6
|
-
* authority here. Doing nothing keeps today's exact behavior: everything
|
|
7
|
-
* denied. This command group is how an operator opts in, on their own
|
|
8
|
-
* terms, with a real signed/expiring/revocable authorization trail.
|
|
9
|
-
*
|
|
10
|
-
* Subcommands:
|
|
11
|
-
* activation init [--label <text>] [--force] [--yes] [--json]
|
|
12
|
-
* Generate an Ed25519 keypair on this machine (private key never
|
|
13
|
-
* leaves it) and register the public half as a trust root. Grants
|
|
14
|
-
* NOTHING by itself — run `activation grant` next.
|
|
15
|
-
* activation status [--json]
|
|
16
|
-
* Trust roots, pending one-shot permit, standing grants, and what is
|
|
17
|
-
* currently authorized, right now, and why.
|
|
18
|
-
* activation grant <scope...> [--ttl <duration>] [--yes] [--json]
|
|
19
|
-
* Mint a scoped, signed, expiring authorization. `once`/`resident`
|
|
20
|
-
* mint a single-use permit for `ashlr daemon start`, good for a fixed
|
|
21
|
-
* 2-minute window; any of `residentStanding`/`conductor`/`automerge`/
|
|
22
|
-
* `repair`/`deploy`/`install`/`proposalOnly` mint a standing grant
|
|
23
|
-
* checked on every use until it expires (30d cap) or is revoked.
|
|
24
|
-
* `residentStanding` is what lets a resident daemon started by
|
|
25
|
-
* launchd/systemd/Task Scheduler after a reboot authorize itself with
|
|
26
|
-
* no operator present — grant it once, ahead of time, alongside
|
|
27
|
-
* whichever of `automerge`/`repair`/`deploy` the resident loop should
|
|
28
|
-
* also carry for its whole run.
|
|
29
|
-
* activation revoke --root <keyId> | --grant <grantId> [--yes] [--json]
|
|
30
|
-
* Immediately invalidate a trust root or a standing grant.
|
|
31
|
-
*
|
|
32
|
-
* Every subcommand supports --help. Mutating subcommands (init/grant/revoke)
|
|
33
|
-
* refuse to run unattended in a non-TTY session without --yes — the same
|
|
34
|
-
* confirm-gate convention as `ashlr inbox approve`.
|
|
35
|
-
*/
|
|
36
|
-
/**
|
|
37
|
-
* `ashlr activation [init|status|grant|revoke] [flags]`
|
|
38
|
-
*
|
|
39
|
-
* Returns a process exit code (0 = success, non-zero = error/usage).
|
|
40
|
-
*/
|
|
41
|
-
export declare function cmdActivation(args: string[]): Promise<number>;
|
package/dist/cli/activation.js
DELETED
|
@@ -1,485 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `ashlr activation` — operator authority for the autonomous fleet (M470).
|
|
3
|
-
*
|
|
4
|
-
* The daemon, goal/simple conductors, and resident-service install are all
|
|
5
|
-
* held shut by hard-coded denials until an operator EXPLICITLY grants
|
|
6
|
-
* authority here. Doing nothing keeps today's exact behavior: everything
|
|
7
|
-
* denied. This command group is how an operator opts in, on their own
|
|
8
|
-
* terms, with a real signed/expiring/revocable authorization trail.
|
|
9
|
-
*
|
|
10
|
-
* Subcommands:
|
|
11
|
-
* activation init [--label <text>] [--force] [--yes] [--json]
|
|
12
|
-
* Generate an Ed25519 keypair on this machine (private key never
|
|
13
|
-
* leaves it) and register the public half as a trust root. Grants
|
|
14
|
-
* NOTHING by itself — run `activation grant` next.
|
|
15
|
-
* activation status [--json]
|
|
16
|
-
* Trust roots, pending one-shot permit, standing grants, and what is
|
|
17
|
-
* currently authorized, right now, and why.
|
|
18
|
-
* activation grant <scope...> [--ttl <duration>] [--yes] [--json]
|
|
19
|
-
* Mint a scoped, signed, expiring authorization. `once`/`resident`
|
|
20
|
-
* mint a single-use permit for `ashlr daemon start`, good for a fixed
|
|
21
|
-
* 2-minute window; any of `residentStanding`/`conductor`/`automerge`/
|
|
22
|
-
* `repair`/`deploy`/`install`/`proposalOnly` mint a standing grant
|
|
23
|
-
* checked on every use until it expires (30d cap) or is revoked.
|
|
24
|
-
* `residentStanding` is what lets a resident daemon started by
|
|
25
|
-
* launchd/systemd/Task Scheduler after a reboot authorize itself with
|
|
26
|
-
* no operator present — grant it once, ahead of time, alongside
|
|
27
|
-
* whichever of `automerge`/`repair`/`deploy` the resident loop should
|
|
28
|
-
* also carry for its whole run.
|
|
29
|
-
* activation revoke --root <keyId> | --grant <grantId> [--yes] [--json]
|
|
30
|
-
* Immediately invalidate a trust root or a standing grant.
|
|
31
|
-
*
|
|
32
|
-
* Every subcommand supports --help. Mutating subcommands (init/grant/revoke)
|
|
33
|
-
* refuse to run unattended in a non-TTY session without --yes — the same
|
|
34
|
-
* confirm-gate convention as `ashlr inbox approve`.
|
|
35
|
-
*/
|
|
36
|
-
import { makeColors } from './ui.js';
|
|
37
|
-
import { DAEMON_ACTIVATION_SCOPE_KEYS, DEFAULT_STANDING_GRANT_VALIDITY_MS, EMPTY_DAEMON_ACTIVATION_SCOPE, MAX_STANDING_GRANT_VALIDITY_MS, daemonActivationDiagnosePendingPermitBindings, daemonActivationDirPath, daemonActivationGrantStatus, daemonActivationInit, daemonActivationMintOneShotPermit, daemonActivationMintStandingGrant, daemonActivationPermitPath, daemonActivationRevokeGrant, daemonActivationRevokeTrustRoot, daemonActivationScopeGranted, daemonActivationTrustRootStatus, inspectDaemonActivationPermit, } from '../core/daemon/activation-permit.js';
|
|
38
|
-
const ACTIVATION_SUBCOMMANDS = new Set(['init', 'status', 'grant', 'revoke']);
|
|
39
|
-
const ONE_SHOT_SCOPE_KEYS = new Set(['once', 'resident']);
|
|
40
|
-
const ACTIVATION_USAGE = {
|
|
41
|
-
init: 'Usage: ashlr activation init [--label <text>] [--force] [--yes] [--json]',
|
|
42
|
-
status: 'Usage: ashlr activation status [--json]',
|
|
43
|
-
grant: `Usage: ashlr activation grant <scope...> [--ttl <duration>] [--yes] [--json]\n` +
|
|
44
|
-
` scopes: ${DAEMON_ACTIVATION_SCOPE_KEYS.join(', ')}\n` +
|
|
45
|
-
` duration: <n>s | <n>m | <n>h | <n>d (default: 24h; hard cap: 30d; standing grants only)`,
|
|
46
|
-
revoke: 'Usage: ashlr activation revoke (--root <keyId> | --grant <grantId>) [--yes] [--json]',
|
|
47
|
-
};
|
|
48
|
-
const ACTIVATION_TOP_LEVEL_USAGE = `Usage: ashlr activation [subcommand] [flags]
|
|
49
|
-
|
|
50
|
-
Everything here is denied by default. Run \`activation init\` then
|
|
51
|
-
\`activation grant <scope...>\` to explicitly opt this machine's fleet into
|
|
52
|
-
real authority — nothing else changes anything on its own.
|
|
53
|
-
|
|
54
|
-
Subcommands:
|
|
55
|
-
init Generate an operator keypair and register the trust root
|
|
56
|
-
status Show what is granted, by whom, when, and current eligibility
|
|
57
|
-
grant Mint a scoped, signed, expiring permit or standing grant
|
|
58
|
-
revoke Immediately invalidate a trust root or a standing grant
|
|
59
|
-
|
|
60
|
-
Run \`ashlr activation <subcommand> --help\` for subcommand usage.`;
|
|
61
|
-
function isHelpFlag(arg) {
|
|
62
|
-
return arg === '--help' || arg === '-h';
|
|
63
|
-
}
|
|
64
|
-
function isActivationSubcommand(value) {
|
|
65
|
-
return ACTIVATION_SUBCOMMANDS.has(value);
|
|
66
|
-
}
|
|
67
|
-
function printActivationUsage(subcommand) {
|
|
68
|
-
console.log(subcommand ? ACTIVATION_USAGE[subcommand] : ACTIVATION_TOP_LEVEL_USAGE);
|
|
69
|
-
}
|
|
70
|
-
function printActivationUsageError(message, subcommand) {
|
|
71
|
-
const col = makeColors(process.stdout.isTTY === true);
|
|
72
|
-
console.error(col.red('error: ') + message);
|
|
73
|
-
console.error(col.dim(subcommand ? ACTIVATION_USAGE[subcommand] : ACTIVATION_TOP_LEVEL_USAGE));
|
|
74
|
-
return 2;
|
|
75
|
-
}
|
|
76
|
-
function parseDurationMs(text) {
|
|
77
|
-
const match = /^(\d+)(s|m|h|d)?$/u.exec(text.trim());
|
|
78
|
-
if (!match)
|
|
79
|
-
return null;
|
|
80
|
-
const value = Number(match[1]);
|
|
81
|
-
if (!Number.isFinite(value) || value <= 0)
|
|
82
|
-
return null;
|
|
83
|
-
const unit = match[2] ?? 'h';
|
|
84
|
-
const multiplier = unit === 's' ? 1_000 : unit === 'm' ? 60_000 : unit === 'h' ? 3_600_000 : 86_400_000;
|
|
85
|
-
return value * multiplier;
|
|
86
|
-
}
|
|
87
|
-
async function importConfig() {
|
|
88
|
-
try {
|
|
89
|
-
const mod = (await import('../core/config.js'));
|
|
90
|
-
return mod.loadConfigReadOnlyStrict;
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/** Non-TTY without --yes refuses — no silently-automated grants, matching `inbox approve`. */
|
|
97
|
-
function refuseUnattended(yes, jsonMode, action) {
|
|
98
|
-
const tty = process.stdout.isTTY === true;
|
|
99
|
-
if (tty || yes)
|
|
100
|
-
return false;
|
|
101
|
-
const col = makeColors(false);
|
|
102
|
-
const msg = `non-TTY: activation ${action} requires --yes to prevent silent, unattended authorization`;
|
|
103
|
-
if (jsonMode) {
|
|
104
|
-
console.log(JSON.stringify({ ok: false, error: msg }));
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
console.error(col.red('error: ') + msg);
|
|
108
|
-
console.error(col.dim(` Use \`ashlr activation ${action} ... --yes\` in non-interactive environments.`));
|
|
109
|
-
}
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
112
|
-
// ---------------------------------------------------------------------------
|
|
113
|
-
// Subcommand: init
|
|
114
|
-
// ---------------------------------------------------------------------------
|
|
115
|
-
async function cmdActivationInit(args) {
|
|
116
|
-
const jsonMode = args.includes('--json');
|
|
117
|
-
const force = args.includes('--force');
|
|
118
|
-
const yes = args.includes('--yes');
|
|
119
|
-
const labelIndex = args.indexOf('--label');
|
|
120
|
-
const label = labelIndex !== -1 ? args[labelIndex + 1] : undefined;
|
|
121
|
-
const known = new Set(['--json', '--force', '--yes', '--label', label].filter((v) => v !== undefined));
|
|
122
|
-
const unknown = args.find((a, i) => !known.has(a) && !(args[i - 1] === '--label'));
|
|
123
|
-
if (unknown)
|
|
124
|
-
return printActivationUsageError(`Unknown flag: ${unknown}`, 'init');
|
|
125
|
-
if (labelIndex !== -1 && label === undefined) {
|
|
126
|
-
return printActivationUsageError('--label requires a value', 'init');
|
|
127
|
-
}
|
|
128
|
-
const col = makeColors(process.stdout.isTTY === true);
|
|
129
|
-
if (!jsonMode) {
|
|
130
|
-
console.log('');
|
|
131
|
-
console.log(col.bold(' ashlr activation init'));
|
|
132
|
-
console.log(col.dim(' Generates an Ed25519 keypair on THIS machine and registers the public\n'
|
|
133
|
-
+ ' half as a trust root. The private key never leaves this machine, is\n'
|
|
134
|
-
+ ' written 0600 under an 0700 directory, and is the ONLY thing that can\n'
|
|
135
|
-
+ ' sign a future `activation grant`. This step grants no capability by\n'
|
|
136
|
-
+ ' itself — the fleet stays exactly as denied as it is today until you\n'
|
|
137
|
-
+ ' run `ashlr activation grant <scope...>`.'));
|
|
138
|
-
console.log('');
|
|
139
|
-
}
|
|
140
|
-
if (refuseUnattended(yes, jsonMode, 'init'))
|
|
141
|
-
return 2;
|
|
142
|
-
const result = daemonActivationInit({ label, force });
|
|
143
|
-
if (!result.ok) {
|
|
144
|
-
const msg = `activation init refused: ${result.reason}`;
|
|
145
|
-
if (jsonMode)
|
|
146
|
-
console.log(JSON.stringify({ ok: false, error: result.reason }));
|
|
147
|
-
else
|
|
148
|
-
console.error(col.red('error: ') + msg);
|
|
149
|
-
return 1;
|
|
150
|
-
}
|
|
151
|
-
if (jsonMode) {
|
|
152
|
-
console.log(JSON.stringify({
|
|
153
|
-
ok: true,
|
|
154
|
-
keyId: result.keyId,
|
|
155
|
-
publicKeyPem: result.publicKeyPem,
|
|
156
|
-
rotated: result.rotated,
|
|
157
|
-
trustRootsPath: daemonActivationDirPath(),
|
|
158
|
-
}));
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
console.log(col.green('ok: ') + `trust root registered (keyId=${result.keyId}${result.rotated ? ', rotated' : ''}).`);
|
|
162
|
-
console.log(col.dim(` store: ${daemonActivationDirPath()}`));
|
|
163
|
-
console.log(col.dim(' Next: `ashlr activation grant <scope...>` to actually authorize something.'));
|
|
164
|
-
}
|
|
165
|
-
return 0;
|
|
166
|
-
}
|
|
167
|
-
// ---------------------------------------------------------------------------
|
|
168
|
-
// Subcommand: status
|
|
169
|
-
// ---------------------------------------------------------------------------
|
|
170
|
-
async function cmdActivationStatus(args) {
|
|
171
|
-
const jsonMode = args.includes('--json');
|
|
172
|
-
const unknown = args.find((a) => a !== '--json');
|
|
173
|
-
if (unknown)
|
|
174
|
-
return printActivationUsageError(`Unknown flag: ${unknown}`, 'status');
|
|
175
|
-
const col = makeColors(process.stdout.isTTY === true);
|
|
176
|
-
const trustRoots = daemonActivationTrustRootStatus();
|
|
177
|
-
const grants = daemonActivationGrantStatus();
|
|
178
|
-
const loadConfig = await importConfig();
|
|
179
|
-
let cfg = null;
|
|
180
|
-
try {
|
|
181
|
-
cfg = loadConfig ? loadConfig() : null;
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
cfg = null;
|
|
185
|
-
}
|
|
186
|
-
const onceReadiness = cfg ? inspectDaemonActivationPermit(cfg, { once: true, dryRun: false }) : null;
|
|
187
|
-
const residentReadiness = cfg ? inspectDaemonActivationPermit(cfg, { once: false, dryRun: false }) : null;
|
|
188
|
-
const bindingMismatch = onceReadiness?.reason === 'permit-runtime-binding-mismatch'
|
|
189
|
-
|| residentReadiness?.reason === 'permit-runtime-binding-mismatch';
|
|
190
|
-
const bindingDiagnosis = cfg && bindingMismatch
|
|
191
|
-
? daemonActivationDiagnosePendingPermitBindings(cfg)
|
|
192
|
-
: null;
|
|
193
|
-
const nowMs = Date.now();
|
|
194
|
-
const grantSummaries = grants.ok
|
|
195
|
-
? grants.records.map((record) => ({
|
|
196
|
-
grantId: record.grantId,
|
|
197
|
-
keyId: record.keyId,
|
|
198
|
-
scope: DAEMON_ACTIVATION_SCOPE_KEYS.filter((key) => record.scope[key]),
|
|
199
|
-
issuedAt: record.issuedAt,
|
|
200
|
-
expiresAt: record.expiresAt,
|
|
201
|
-
revoked: record.revokedAt !== null,
|
|
202
|
-
expired: Date.parse(record.expiresAt) <= nowMs,
|
|
203
|
-
}))
|
|
204
|
-
: [];
|
|
205
|
-
if (jsonMode) {
|
|
206
|
-
console.log(JSON.stringify({
|
|
207
|
-
ok: true,
|
|
208
|
-
store: daemonActivationDirPath(),
|
|
209
|
-
trustRoots: trustRoots.ok
|
|
210
|
-
? trustRoots.records.map((r) => ({
|
|
211
|
-
keyId: r.keyId, label: r.label, createdAt: r.createdAt, revoked: r.revokedAt !== null,
|
|
212
|
-
}))
|
|
213
|
-
: null,
|
|
214
|
-
trustRootStoreError: trustRoots.ok ? null : trustRoots.reason,
|
|
215
|
-
grants: grants.ok ? grantSummaries : null,
|
|
216
|
-
grantStoreError: grants.ok ? null : grants.reason,
|
|
217
|
-
pendingOneShotPermitPath: daemonActivationPermitPath(),
|
|
218
|
-
onceEligibility: onceReadiness,
|
|
219
|
-
residentEligibility: residentReadiness,
|
|
220
|
-
bindingMismatchDiagnosis: bindingDiagnosis,
|
|
221
|
-
}, null, 2));
|
|
222
|
-
return 0;
|
|
223
|
-
}
|
|
224
|
-
console.log('');
|
|
225
|
-
console.log(col.bold(' ashlr activation status'));
|
|
226
|
-
console.log(col.dim(` store: ${daemonActivationDirPath()}`));
|
|
227
|
-
console.log('');
|
|
228
|
-
console.log(col.bold(' Trust roots'));
|
|
229
|
-
if (!trustRoots.ok) {
|
|
230
|
-
console.log(col.yellow(` unreadable/unsafe (${trustRoots.reason}) — treated as NO authority.`));
|
|
231
|
-
}
|
|
232
|
-
else if (trustRoots.records.length === 0) {
|
|
233
|
-
console.log(col.dim(' none — run `ashlr activation init`.'));
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
for (const root of trustRoots.records) {
|
|
237
|
-
const state = root.revokedAt !== null ? col.red(`revoked ${root.revokedAt}`) : col.green('active');
|
|
238
|
-
console.log(` ${root.keyId} ${state} ${root.label ? `"${root.label}"` : ''} (created ${root.createdAt})`);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
console.log('');
|
|
242
|
-
console.log(col.bold(' Standing grants'));
|
|
243
|
-
if (!grants.ok) {
|
|
244
|
-
console.log(col.yellow(` unreadable/unsafe (${grants.reason}) — treated as NO authority.`));
|
|
245
|
-
}
|
|
246
|
-
else if (grantSummaries.length === 0) {
|
|
247
|
-
console.log(col.dim(' none.'));
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
for (const g of grantSummaries) {
|
|
251
|
-
const state = g.revoked ? col.red('revoked') : g.expired ? col.yellow('expired') : col.green('active');
|
|
252
|
-
console.log(` ${g.grantId} ${state} scope=[${g.scope.join(', ')}] keyId=${g.keyId} expires ${g.expiresAt}`);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
console.log('');
|
|
256
|
-
console.log(col.bold(' Currently granted, right now'));
|
|
257
|
-
for (const scopeKey of DAEMON_ACTIVATION_SCOPE_KEYS) {
|
|
258
|
-
if (ONE_SHOT_SCOPE_KEYS.has(scopeKey))
|
|
259
|
-
continue;
|
|
260
|
-
const check = daemonActivationScopeGranted(scopeKey);
|
|
261
|
-
console.log(` ${scopeKey.padEnd(12)} ${check.granted ? col.green('granted') : col.dim('denied')} (${check.reason})`);
|
|
262
|
-
}
|
|
263
|
-
console.log('');
|
|
264
|
-
console.log(col.bold(' One-shot permit (ashlr daemon start)'));
|
|
265
|
-
console.log(` pending file: ${daemonActivationPermitPath()}`);
|
|
266
|
-
if (onceReadiness) {
|
|
267
|
-
console.log(` --once: ${onceReadiness.state === 'ready' ? col.green('ready') : col.dim(onceReadiness.state)} (${onceReadiness.reason})`);
|
|
268
|
-
}
|
|
269
|
-
if (residentReadiness) {
|
|
270
|
-
console.log(` resident: ${residentReadiness.state === 'ready' ? col.green('ready') : col.dim(residentReadiness.state)} (${residentReadiness.reason})`);
|
|
271
|
-
}
|
|
272
|
-
if (bindingDiagnosis) {
|
|
273
|
-
console.log('');
|
|
274
|
-
if (bindingDiagnosis.ok || !bindingDiagnosis.mismatches) {
|
|
275
|
-
console.log(col.dim(` binding diagnosis: ${bindingDiagnosis.reason}`));
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
console.log(col.yellow(' binding mismatch — field(s) that differ between the signed permit and right now:'));
|
|
279
|
-
for (const [field, { signed, current }] of Object.entries(bindingDiagnosis.mismatches)) {
|
|
280
|
-
console.log(` ${col.bold(field)}:`);
|
|
281
|
-
console.log(` signed: ${formatBindingValue(signed)}`);
|
|
282
|
-
console.log(` current: ${formatBindingValue(current)}`);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
console.log('');
|
|
287
|
-
return 0;
|
|
288
|
-
}
|
|
289
|
-
function formatBindingValue(value) {
|
|
290
|
-
if (value === null || typeof value !== 'object')
|
|
291
|
-
return JSON.stringify(value);
|
|
292
|
-
if ('sha256' in value) {
|
|
293
|
-
const binding = value;
|
|
294
|
-
return `${binding.path} sha256:${binding.sha256}`;
|
|
295
|
-
}
|
|
296
|
-
return JSON.stringify(value);
|
|
297
|
-
}
|
|
298
|
-
// ---------------------------------------------------------------------------
|
|
299
|
-
// Subcommand: grant
|
|
300
|
-
// ---------------------------------------------------------------------------
|
|
301
|
-
async function cmdActivationGrant(args) {
|
|
302
|
-
const jsonMode = args.includes('--json');
|
|
303
|
-
const yes = args.includes('--yes');
|
|
304
|
-
const ttlIndex = args.indexOf('--ttl');
|
|
305
|
-
const ttlText = ttlIndex !== -1 ? args[ttlIndex + 1] : undefined;
|
|
306
|
-
const flagsConsumed = new Set(['--json', '--yes', '--ttl', ttlText].filter((v) => v !== undefined));
|
|
307
|
-
const scopeArgs = args.filter((a, i) => !flagsConsumed.has(a) && args[i - 1] !== '--ttl');
|
|
308
|
-
const unknownFlag = args.find((a) => a.startsWith('--') && !['--json', '--yes', '--ttl'].includes(a));
|
|
309
|
-
if (unknownFlag)
|
|
310
|
-
return printActivationUsageError(`Unknown flag: ${unknownFlag}`, 'grant');
|
|
311
|
-
if (ttlIndex !== -1 && ttlText === undefined)
|
|
312
|
-
return printActivationUsageError('--ttl requires a value', 'grant');
|
|
313
|
-
if (scopeArgs.length === 0) {
|
|
314
|
-
return printActivationUsageError('At least one scope is required.', 'grant');
|
|
315
|
-
}
|
|
316
|
-
const invalidScope = scopeArgs.find((s) => !DAEMON_ACTIVATION_SCOPE_KEYS.includes(s));
|
|
317
|
-
if (invalidScope) {
|
|
318
|
-
return printActivationUsageError(`Unknown scope: ${invalidScope} (expected one of: ${DAEMON_ACTIVATION_SCOPE_KEYS.join(', ')})`, 'grant');
|
|
319
|
-
}
|
|
320
|
-
const scopeKeys = [...new Set(scopeArgs)];
|
|
321
|
-
const scope = { ...EMPTY_DAEMON_ACTIVATION_SCOPE };
|
|
322
|
-
for (const key of scopeKeys)
|
|
323
|
-
scope[key] = true;
|
|
324
|
-
const isOneShot = scopeKeys.some((key) => ONE_SHOT_SCOPE_KEYS.has(key));
|
|
325
|
-
let ttlMs = DEFAULT_STANDING_GRANT_VALIDITY_MS;
|
|
326
|
-
if (ttlText !== undefined) {
|
|
327
|
-
if (isOneShot) {
|
|
328
|
-
return printActivationUsageError('--ttl only applies to standing grants (not once/resident, which use a fixed 2-minute window).', 'grant');
|
|
329
|
-
}
|
|
330
|
-
const parsed = parseDurationMs(ttlText);
|
|
331
|
-
if (parsed === null || parsed > MAX_STANDING_GRANT_VALIDITY_MS) {
|
|
332
|
-
return printActivationUsageError(`Invalid --ttl (expected <n>s|m|h|d, max ${MAX_STANDING_GRANT_VALIDITY_MS / 86_400_000}d): ${ttlText}`, 'grant');
|
|
333
|
-
}
|
|
334
|
-
ttlMs = parsed;
|
|
335
|
-
}
|
|
336
|
-
const col = makeColors(process.stdout.isTTY === true);
|
|
337
|
-
if (!jsonMode) {
|
|
338
|
-
console.log('');
|
|
339
|
-
console.log(col.bold(' ashlr activation grant') + col.dim(` — scope=[${scopeKeys.join(', ')}]`));
|
|
340
|
-
console.log(col.dim(isOneShot
|
|
341
|
-
? ' Mints a SINGLE-USE, signed permit for `ashlr daemon start`. Consumed and\n'
|
|
342
|
-
+ ' deleted the moment the daemon starts; expires in 2 minutes if unused.'
|
|
343
|
-
: ` Mints a standing, signed grant valid for ${Math.round(ttlMs / 3_600_000)}h, checked on every\n`
|
|
344
|
-
+ ' use until it expires or you run `ashlr activation revoke`.'));
|
|
345
|
-
console.log('');
|
|
346
|
-
}
|
|
347
|
-
if (refuseUnattended(yes, jsonMode, 'grant'))
|
|
348
|
-
return 2;
|
|
349
|
-
if (isOneShot) {
|
|
350
|
-
const loadConfig = await importConfig();
|
|
351
|
-
if (!loadConfig) {
|
|
352
|
-
console.error(col.red('error: ') + 'activation grant requires src/core/config.ts.');
|
|
353
|
-
return 1;
|
|
354
|
-
}
|
|
355
|
-
let cfg;
|
|
356
|
-
try {
|
|
357
|
-
cfg = loadConfig();
|
|
358
|
-
}
|
|
359
|
-
catch (e) {
|
|
360
|
-
console.error(col.red('error: ') + 'Failed to load config: ' + (e instanceof Error ? e.message : String(e)));
|
|
361
|
-
return 1;
|
|
362
|
-
}
|
|
363
|
-
const result = daemonActivationMintOneShotPermit({ cfg, scope });
|
|
364
|
-
if (!result.ok) {
|
|
365
|
-
if (jsonMode)
|
|
366
|
-
console.log(JSON.stringify({ ok: false, error: result.reason }));
|
|
367
|
-
else
|
|
368
|
-
console.error(col.red('error: ') + `activation grant refused: ${result.reason}`);
|
|
369
|
-
return 1;
|
|
370
|
-
}
|
|
371
|
-
if (jsonMode) {
|
|
372
|
-
console.log(JSON.stringify({ kind: 'one-shot-permit', ...result }));
|
|
373
|
-
}
|
|
374
|
-
else {
|
|
375
|
-
console.log(col.green('ok: ') + `one-shot permit minted (permitId=${result.permitId}, expires ${result.expiresAt}).`);
|
|
376
|
-
console.log(col.dim(` ${result.permitPath}`));
|
|
377
|
-
console.log(col.dim(' Run `ashlr daemon start' + (scope.once ? ' --once' : '') + '` now — the permit is single-use.'));
|
|
378
|
-
}
|
|
379
|
-
return 0;
|
|
380
|
-
}
|
|
381
|
-
const result = daemonActivationMintStandingGrant({ scope, ttlMs });
|
|
382
|
-
if (!result.ok) {
|
|
383
|
-
if (jsonMode)
|
|
384
|
-
console.log(JSON.stringify({ ok: false, error: result.reason }));
|
|
385
|
-
else
|
|
386
|
-
console.error(col.red('error: ') + `activation grant refused: ${result.reason}`);
|
|
387
|
-
return 1;
|
|
388
|
-
}
|
|
389
|
-
if (jsonMode) {
|
|
390
|
-
console.log(JSON.stringify({ ok: true, kind: 'standing-grant', record: result.record }));
|
|
391
|
-
}
|
|
392
|
-
else {
|
|
393
|
-
console.log(col.green('ok: ') + `standing grant minted (grantId=${result.record.grantId}, expires ${result.record.expiresAt}).`);
|
|
394
|
-
console.log(col.dim(` scope=[${scopeKeys.join(', ')}]`));
|
|
395
|
-
}
|
|
396
|
-
return 0;
|
|
397
|
-
}
|
|
398
|
-
// ---------------------------------------------------------------------------
|
|
399
|
-
// Subcommand: revoke
|
|
400
|
-
// ---------------------------------------------------------------------------
|
|
401
|
-
async function cmdActivationRevoke(args) {
|
|
402
|
-
const jsonMode = args.includes('--json');
|
|
403
|
-
const yes = args.includes('--yes');
|
|
404
|
-
const rootIndex = args.indexOf('--root');
|
|
405
|
-
const grantIndex = args.indexOf('--grant');
|
|
406
|
-
const rootId = rootIndex !== -1 ? args[rootIndex + 1] : undefined;
|
|
407
|
-
const grantId = grantIndex !== -1 ? args[grantIndex + 1] : undefined;
|
|
408
|
-
const known = new Set(['--json', '--yes', '--root', '--grant', rootId, grantId].filter((v) => v !== undefined));
|
|
409
|
-
const unknown = args.find((a, i) => !known.has(a) && args[i - 1] !== '--root' && args[i - 1] !== '--grant');
|
|
410
|
-
if (unknown)
|
|
411
|
-
return printActivationUsageError(`Unknown flag: ${unknown}`, 'revoke');
|
|
412
|
-
if ((rootIndex === -1) === (grantIndex === -1)) {
|
|
413
|
-
return printActivationUsageError('Specify exactly one of --root <keyId> or --grant <grantId>.', 'revoke');
|
|
414
|
-
}
|
|
415
|
-
if (rootIndex !== -1 && rootId === undefined)
|
|
416
|
-
return printActivationUsageError('--root requires a value', 'revoke');
|
|
417
|
-
if (grantIndex !== -1 && grantId === undefined)
|
|
418
|
-
return printActivationUsageError('--grant requires a value', 'revoke');
|
|
419
|
-
const col = makeColors(process.stdout.isTTY === true);
|
|
420
|
-
if (!jsonMode) {
|
|
421
|
-
console.log('');
|
|
422
|
-
console.log(col.bold(' ashlr activation revoke'));
|
|
423
|
-
console.log(col.dim(rootId
|
|
424
|
-
? ` Immediately invalidates trust root ${rootId}. Every permit and standing\n`
|
|
425
|
-
+ ' grant signed by it stops verifying from this instant on.'
|
|
426
|
-
: ` Immediately invalidates standing grant ${grantId}. Every guard that\n`
|
|
427
|
-
+ ' consults it denies from this instant on.'));
|
|
428
|
-
console.log('');
|
|
429
|
-
}
|
|
430
|
-
if (refuseUnattended(yes, jsonMode, 'revoke'))
|
|
431
|
-
return 2;
|
|
432
|
-
const result = rootId !== undefined
|
|
433
|
-
? daemonActivationRevokeTrustRoot(rootId)
|
|
434
|
-
: daemonActivationRevokeGrant(grantId);
|
|
435
|
-
if (!result.ok) {
|
|
436
|
-
if (jsonMode)
|
|
437
|
-
console.log(JSON.stringify({ ok: false, error: result.reason }));
|
|
438
|
-
else
|
|
439
|
-
console.error(col.red('error: ') + `activation revoke refused: ${result.reason}`);
|
|
440
|
-
return 1;
|
|
441
|
-
}
|
|
442
|
-
if (jsonMode)
|
|
443
|
-
console.log(JSON.stringify({ ok: true }));
|
|
444
|
-
else
|
|
445
|
-
console.log(col.green('ok: ') + 'revoked.');
|
|
446
|
-
return 0;
|
|
447
|
-
}
|
|
448
|
-
// ---------------------------------------------------------------------------
|
|
449
|
-
// Entry point
|
|
450
|
-
// ---------------------------------------------------------------------------
|
|
451
|
-
/**
|
|
452
|
-
* `ashlr activation [init|status|grant|revoke] [flags]`
|
|
453
|
-
*
|
|
454
|
-
* Returns a process exit code (0 = success, non-zero = error/usage).
|
|
455
|
-
*/
|
|
456
|
-
export async function cmdActivation(args) {
|
|
457
|
-
const requestedSub = args[0];
|
|
458
|
-
if (requestedSub !== undefined && isHelpFlag(requestedSub)) {
|
|
459
|
-
printActivationUsage();
|
|
460
|
-
return 0;
|
|
461
|
-
}
|
|
462
|
-
if (requestedSub !== undefined && !isActivationSubcommand(requestedSub)) {
|
|
463
|
-
const message = requestedSub.startsWith('-')
|
|
464
|
-
? `Unknown flag: ${requestedSub}`
|
|
465
|
-
: `Unknown activation subcommand: ${requestedSub}`;
|
|
466
|
-
return printActivationUsageError(message);
|
|
467
|
-
}
|
|
468
|
-
const sub = requestedSub ?? 'status';
|
|
469
|
-
const rest = args.slice(1);
|
|
470
|
-
if (rest.some(isHelpFlag)) {
|
|
471
|
-
printActivationUsage(sub);
|
|
472
|
-
return 0;
|
|
473
|
-
}
|
|
474
|
-
switch (sub) {
|
|
475
|
-
case 'init':
|
|
476
|
-
return cmdActivationInit(rest);
|
|
477
|
-
case 'status':
|
|
478
|
-
return cmdActivationStatus(rest);
|
|
479
|
-
case 'grant':
|
|
480
|
-
return cmdActivationGrant(rest);
|
|
481
|
-
case 'revoke':
|
|
482
|
-
return cmdActivationRevoke(rest);
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
//# sourceMappingURL=activation.js.map
|