platformforge 0.1.0__py3-none-any.whl

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.
Files changed (659) hide show
  1. platformforge/__init__.py +7 -0
  2. platformforge/__main__.py +5 -0
  3. platformforge/_forge_portal.py +913 -0
  4. platformforge/_graphstudio.py +376 -0
  5. platformforge/_graphview.py +181 -0
  6. platformforge/_installkit.py +1706 -0
  7. platformforge/agents/__init__.py +156 -0
  8. platformforge/agents/bench.py +61 -0
  9. platformforge/agents/contextpack.py +137 -0
  10. platformforge/agents/contracts.py +394 -0
  11. platformforge/agents/coordinators.py +98 -0
  12. platformforge/agents/critic.py +113 -0
  13. platformforge/agents/debate.py +161 -0
  14. platformforge/agents/executors.py +160 -0
  15. platformforge/agents/guardian.py +48 -0
  16. platformforge/agents/mirrors.py +240 -0
  17. platformforge/agents/orchestrator.py +295 -0
  18. platformforge/agents/planner.py +116 -0
  19. platformforge/agents/playbook.py +51 -0
  20. platformforge/agents/referee.py +132 -0
  21. platformforge/agents/reviewers.py +113 -0
  22. platformforge/agents/roster.py +893 -0
  23. platformforge/agents/runledger.py +85 -0
  24. platformforge/agents/runstore.py +74 -0
  25. platformforge/agents/specialists.py +73 -0
  26. platformforge/agents/taskspec.py +94 -0
  27. platformforge/agents/uniqueness.py +115 -0
  28. platformforge/agents/verifier.py +106 -0
  29. platformforge/aiplat/__init__.py +4 -0
  30. platformforge/aiplat/models.py +175 -0
  31. platformforge/analytics/__init__.py +6 -0
  32. platformforge/analytics/capacity.py +109 -0
  33. platformforge/analytics/debt.py +92 -0
  34. platformforge/analytics/dx.py +69 -0
  35. platformforge/analytics/finops_v4.py +171 -0
  36. platformforge/analytics/goldenpath.py +131 -0
  37. platformforge/analytics/history.py +233 -0
  38. platformforge/analytics/measurement.py +149 -0
  39. platformforge/analytics/models.py +127 -0
  40. platformforge/analytics/opsanalytics.py +119 -0
  41. platformforge/analytics/policyintel.py +139 -0
  42. platformforge/analytics/reliability.py +106 -0
  43. platformforge/analytics/soak.py +135 -0
  44. platformforge/analytics/store.py +254 -0
  45. platformforge/bench.py +174 -0
  46. platformforge/cases/__init__.py +13 -0
  47. platformforge/cases/casefile.py +106 -0
  48. platformforge/cases/context_audit.py +134 -0
  49. platformforge/cases/ledgers.py +174 -0
  50. platformforge/cases/replay.py +142 -0
  51. platformforge/cases/routing_audit.py +162 -0
  52. platformforge/caveman/__init__.py +11 -0
  53. platformforge/caveman/compress.py +156 -0
  54. platformforge/cicd/__init__.py +16 -0
  55. platformforge/cicd/backstage.py +51 -0
  56. platformforge/cicd/dockerfile.py +64 -0
  57. platformforge/cicd/github_actions.py +122 -0
  58. platformforge/cicd/gitlab_ci.py +56 -0
  59. platformforge/cicd/gitops.py +130 -0
  60. platformforge/cli/__init__.py +0 -0
  61. platformforge/cli/fleetcmd.py +457 -0
  62. platformforge/cli/main.py +3832 -0
  63. platformforge/cloud/__init__.py +8 -0
  64. platformforge/cloud/aws.py +254 -0
  65. platformforge/cloud/common.py +69 -0
  66. platformforge/cloud/multicloud.py +143 -0
  67. platformforge/collect/__init__.py +11 -0
  68. platformforge/collect/detect.py +254 -0
  69. platformforge/context/__init__.py +10 -0
  70. platformforge/context/capsule.py +60 -0
  71. platformforge/context/gateway.py +227 -0
  72. platformforge/context/refs.py +49 -0
  73. platformforge/context/sufficiency.py +50 -0
  74. platformforge/core/__init__.py +1 -0
  75. platformforge/core/hashing.py +39 -0
  76. platformforge/core/ownership.py +220 -0
  77. platformforge/core/receipts.py +74 -0
  78. platformforge/core/redaction.py +97 -0
  79. platformforge/core/store.py +119 -0
  80. platformforge/core/workspace.py +89 -0
  81. platformforge/data/contracts/agent-handoff.schema.json +26 -0
  82. platformforge/data/contracts/agent-run.schema.json +27 -0
  83. platformforge/data/contracts/agent-spec.schema.json +43 -0
  84. platformforge/data/contracts/capability.schema.json +23 -0
  85. platformforge/data/contracts/change-event.schema.json +22 -0
  86. platformforge/data/contracts/change-intent.schema.json +62 -0
  87. platformforge/data/contracts/change-plan.schema.json +43 -0
  88. platformforge/data/contracts/collector-receipt.schema.json +36 -0
  89. platformforge/data/contracts/context-pack.schema.json +29 -0
  90. platformforge/data/contracts/debate.schema.json +31 -0
  91. platformforge/data/contracts/distribution-manifest-v1.schema.json +81 -0
  92. platformforge/data/contracts/drift-event.schema.json +21 -0
  93. platformforge/data/contracts/fact.schema.json +35 -0
  94. platformforge/data/contracts/finding.schema.json +20 -0
  95. platformforge/data/contracts/graph-v2.schema.json +67 -0
  96. platformforge/data/contracts/graph.schema.json +40 -0
  97. platformforge/data/contracts/install-receipt-v1.schema.json +49 -0
  98. platformforge/data/contracts/observation.schema.json +93 -0
  99. platformforge/data/contracts/receipt.schema.json +21 -0
  100. platformforge/data/contracts/recommendation.schema.json +32 -0
  101. platformforge/data/contracts/refusal.schema.json +16 -0
  102. platformforge/data/contracts/slo-contract.schema.json +25 -0
  103. platformforge/data/contracts/task-spec.schema.json +37 -0
  104. platformforge/data/contracts/workspace-manifest-v1.schema.json +62 -0
  105. platformforge/data/evals/cases/agent-budget-exhaustion/case.yaml +6 -0
  106. platformforge/data/evals/cases/agent-conflicting-specialists/case.yaml +11 -0
  107. platformforge/data/evals/cases/agent-fleet-optimization/case.yaml +13 -0
  108. platformforge/data/evals/cases/agent-host-no-subagents/case.yaml +6 -0
  109. platformforge/data/evals/cases/agent-incident-multi/case.yaml +13 -0
  110. platformforge/data/evals/cases/agent-missing-evidence/case.yaml +6 -0
  111. platformforge/data/evals/cases/agent-multi-domain-audit/case.yaml +14 -0
  112. platformforge/data/evals/cases/agent-production-change/case.yaml +15 -0
  113. platformforge/data/evals/cases/agent-security-mandatory/case.yaml +12 -0
  114. platformforge/data/evals/cases/agent-simple-iac/case.yaml +14 -0
  115. platformforge/data/evals/cases/approval-integrity-seal/case.yaml +6 -0
  116. platformforge/data/evals/cases/capacity-hot/case.yaml +7 -0
  117. platformforge/data/evals/cases/capacity-hot/fixture/capacity.json +5 -0
  118. platformforge/data/evals/cases/catalog-noowner/case.yaml +7 -0
  119. platformforge/data/evals/cases/catalog-noowner/fixture/catalog-info.yaml +6 -0
  120. platformforge/data/evals/cases/contract-fact/case.yaml +5 -0
  121. platformforge/data/evals/cases/contract-fact/fixture/doc.json +2 -0
  122. platformforge/data/evals/cases/cosign-unverified/case.yaml +8 -0
  123. platformforge/data/evals/cases/cosign-unverified/fixture/sig.json +33 -0
  124. platformforge/data/evals/cases/expected-delta-refusal/case.yaml +6 -0
  125. platformforge/data/evals/cases/finops-noattr/case.yaml +9 -0
  126. platformforge/data/evals/cases/finops-noattr/fixture/costs.json +7 -0
  127. platformforge/data/evals/cases/fleet-inv-absent-allocation-unknown/case.yaml +7 -0
  128. platformforge/data/evals/cases/fleet-inv-centrality-not-criticality/case.yaml +7 -0
  129. platformforge/data/evals/cases/fleet-inv-correlation-not-causality/case.yaml +7 -0
  130. platformforge/data/evals/cases/fleet-inv-dx-no-person-metrics/case.yaml +7 -0
  131. platformforge/data/evals/cases/fleet-inv-federation-restricted-denied/case.yaml +7 -0
  132. platformforge/data/evals/cases/fleet-inv-federation-secret-denied/case.yaml +7 -0
  133. platformforge/data/evals/cases/fleet-inv-history-window-deterministic/case.yaml +7 -0
  134. platformforge/data/evals/cases/fleet-inv-low-util-not-deletable/case.yaml +7 -0
  135. platformforge/data/evals/cases/fleet-inv-member-key-deterministic/case.yaml +7 -0
  136. platformforge/data/evals/cases/fleet-inv-missing-denominator/case.yaml +7 -0
  137. platformforge/data/evals/cases/fleet-inv-partial-coverage-visible/case.yaml +7 -0
  138. platformforge/data/evals/cases/fleet-inv-plan-changeintent-only/case.yaml +7 -0
  139. platformforge/data/evals/cases/fleet-inv-report-all-cited/case.yaml +7 -0
  140. platformforge/data/evals/cases/fleet-inv-small-sample-confidence/case.yaml +7 -0
  141. platformforge/data/evals/cases/fleet-inv-uncertain-optimization-suppressed/case.yaml +7 -0
  142. platformforge/data/evals/cases/gha-dangerous/case.yaml +12 -0
  143. platformforge/data/evals/cases/gha-dangerous/fixture/.github/workflows/ci.yaml +11 -0
  144. platformforge/data/evals/cases/gitops-v2/case.yaml +11 -0
  145. platformforge/data/evals/cases/gitops-v2/fixture/argo.yaml +41 -0
  146. platformforge/data/evals/cases/graph-k8s-blast/case.yaml +7 -0
  147. platformforge/data/evals/cases/graph-k8s-blast/fixture/deploy.yaml +15 -0
  148. platformforge/data/evals/cases/iac-module-nopin/case.yaml +8 -0
  149. platformforge/data/evals/cases/iac-module-nopin/fixture/main.tf +3 -0
  150. platformforge/data/evals/cases/iac-plan-replace/case.yaml +8 -0
  151. platformforge/data/evals/cases/iac-plan-replace/fixture/plan.json +12 -0
  152. platformforge/data/evals/cases/iac-sg-open/case.yaml +8 -0
  153. platformforge/data/evals/cases/iac-sg-open/fixture/main.tf +9 -0
  154. platformforge/data/evals/cases/iam-oidc/case.yaml +8 -0
  155. platformforge/data/evals/cases/iam-oidc/fixture/policy.json +11 -0
  156. platformforge/data/evals/cases/iam-wildcard-positive/case.yaml +8 -0
  157. platformforge/data/evals/cases/iam-wildcard-positive/fixture/policy.json +3 -0
  158. platformforge/data/evals/cases/k8s-bad-actor/case.yaml +19 -0
  159. platformforge/data/evals/cases/k8s-bad-actor/fixture/app.yaml +97 -0
  160. platformforge/data/evals/cases/k8s-beta-api/case.yaml +8 -0
  161. platformforge/data/evals/cases/k8s-beta-api/fixture/cr.yaml +7 -0
  162. platformforge/data/evals/cases/k8s-dep-api-boundary/case.yaml +15 -0
  163. platformforge/data/evals/cases/k8s-dep-api-boundary/fixture/app.yaml +25 -0
  164. platformforge/data/evals/cases/k8s-dep-api-clean/case.yaml +12 -0
  165. platformforge/data/evals/cases/k8s-dep-api-clean/fixture/app.yaml +29 -0
  166. platformforge/data/evals/cases/k8s-dep-api-unknown/case.yaml +11 -0
  167. platformforge/data/evals/cases/k8s-dep-api-unknown/fixture/app.yaml +25 -0
  168. platformforge/data/evals/cases/k8s-dep-api-v120/case.yaml +12 -0
  169. platformforge/data/evals/cases/k8s-dep-api-v120/fixture/app.yaml +25 -0
  170. platformforge/data/evals/cases/k8s-dep-api-v129/case.yaml +9 -0
  171. platformforge/data/evals/cases/k8s-dep-api-v129/fixture/app.yaml +25 -0
  172. platformforge/data/evals/cases/k8s-hpa-noreq/case.yaml +8 -0
  173. platformforge/data/evals/cases/k8s-hpa-noreq/fixture/app.yaml +28 -0
  174. platformforge/data/evals/cases/k8s-limits-boundary/case.yaml +10 -0
  175. platformforge/data/evals/cases/k8s-limits-boundary/fixture/app.yaml +15 -0
  176. platformforge/data/evals/cases/k8s-limits-negative/case.yaml +8 -0
  177. platformforge/data/evals/cases/k8s-limits-negative/fixture/deploy.yaml +15 -0
  178. platformforge/data/evals/cases/k8s-limits-positive/case.yaml +8 -0
  179. platformforge/data/evals/cases/k8s-limits-positive/fixture/deploy.yaml +14 -0
  180. platformforge/data/evals/cases/k8s-nopdb/case.yaml +7 -0
  181. platformforge/data/evals/cases/k8s-nopdb/fixture/app.yaml +34 -0
  182. platformforge/data/evals/cases/knowledge-registry/case.yaml +10 -0
  183. platformforge/data/evals/cases/kyverno-dep/case.yaml +10 -0
  184. platformforge/data/evals/cases/kyverno-dep/fixture/pol.yaml +18 -0
  185. platformforge/data/evals/cases/kyverno-legacy/case.yaml +8 -0
  186. platformforge/data/evals/cases/kyverno-legacy/fixture/pol.yaml +7 -0
  187. platformforge/data/evals/cases/live-aws-collect/case.yaml +11 -0
  188. platformforge/data/evals/cases/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +15 -0
  189. platformforge/data/evals/cases/live-aws-collect/fixture/aws/iam_list-users.denied.txt +1 -0
  190. platformforge/data/evals/cases/live-aws-collect/fixture/aws/sts_get-caller-identity.json +5 -0
  191. platformforge/data/evals/cases/live-drift/case.yaml +8 -0
  192. platformforge/data/evals/cases/live-drift/fixture/after.json +22 -0
  193. platformforge/data/evals/cases/live-drift/fixture/before.json +22 -0
  194. platformforge/data/evals/cases/live-incident/case.yaml +7 -0
  195. platformforge/data/evals/cases/live-incident/fixture/changes.json +8 -0
  196. platformforge/data/evals/cases/live-incident/fixture/incident.json +7 -0
  197. platformforge/data/evals/cases/live-k8s-collect/case.yaml +10 -0
  198. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +1 -0
  199. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +25 -0
  200. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_pods.json +17 -0
  201. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_secrets.json +13 -0
  202. platformforge/data/evals/cases/live-multicluster/case.yaml +7 -0
  203. platformforge/data/evals/cases/live-multicluster/fixture/clusters.json +6 -0
  204. platformforge/data/evals/cases/live-plan/case.yaml +7 -0
  205. platformforge/data/evals/cases/live-plan/fixture/drift.json +8 -0
  206. platformforge/data/evals/cases/live-reconcile/case.yaml +7 -0
  207. platformforge/data/evals/cases/live-reconcile/fixture/desired.json +7 -0
  208. platformforge/data/evals/cases/live-reconcile/fixture/observed.json +18 -0
  209. platformforge/data/evals/cases/live-secrets-boundary/case.yaml +8 -0
  210. platformforge/data/evals/cases/live-secrets-boundary/fixture/envelope.json +16 -0
  211. platformforge/data/evals/cases/live-temporal-graph/case.yaml +10 -0
  212. platformforge/data/evals/cases/live-temporal-graph/fixture/graph.json +22 -0
  213. platformforge/data/evals/cases/ops-approval/case.yaml +6 -0
  214. platformforge/data/evals/cases/ops-convergence/case.yaml +6 -0
  215. platformforge/data/evals/cases/ops-execution-safety/case.yaml +6 -0
  216. platformforge/data/evals/cases/ops-intent/case.yaml +6 -0
  217. platformforge/data/evals/cases/ops-planning/case.yaml +6 -0
  218. platformforge/data/evals/cases/ops-policy/case.yaml +6 -0
  219. platformforge/data/evals/cases/ops-rollback/case.yaml +6 -0
  220. platformforge/data/evals/cases/ops-verification/case.yaml +6 -0
  221. platformforge/data/evals/cases/rollback-argocd-revision/case.yaml +6 -0
  222. platformforge/data/evals/cases/rollback-blind-inverse/case.yaml +6 -0
  223. platformforge/data/evals/cases/rollback-git-commit/case.yaml +6 -0
  224. platformforge/data/evals/cases/rollback-impossible/case.yaml +6 -0
  225. platformforge/data/evals/cases/rollback-k8s-annotation-restore/case.yaml +6 -0
  226. platformforge/data/evals/cases/rollback-k8s-scale/case.yaml +6 -0
  227. platformforge/data/evals/cases/rollback-material-tamper/case.yaml +6 -0
  228. platformforge/data/evals/cases/rollback-terraform-replan/case.yaml +6 -0
  229. platformforge/data/evals/cases/rollback-unknown/case.yaml +6 -0
  230. platformforge/data/evals/cases/routing-specialist/case.yaml +9 -0
  231. platformforge/data/evals/cases/rtk-roundtrip/case.yaml +5 -0
  232. platformforge/data/evals/cases/rtk-roundtrip/fixture/verbose.txt +300 -0
  233. platformforge/data/evals/cases/sbom-vuln/case.yaml +9 -0
  234. platformforge/data/evals/cases/sbom-vuln/fixture/sbom.json +9 -0
  235. platformforge/data/evals/cases/secret-prose-mixed/fixture/app.env +1 -0
  236. platformforge/data/evals/cases/secret-prose-mixed/fixture/policy-notes.md +7 -0
  237. platformforge/data/evals/cases/secrets-noleak/case.yaml +5 -0
  238. platformforge/data/evals/cases/secrets-noleak/fixture/app.env +2 -0
  239. platformforge/data/evals/cases/slo-fastburn/case.yaml +8 -0
  240. platformforge/data/evals/cases/slo-fastburn/fixture/events.yaml +2 -0
  241. platformforge/data/evals/cases/slo-fastburn/fixture/slo.yaml +4 -0
  242. platformforge/data/evals/cases/slo-noinput/case.yaml +8 -0
  243. platformforge/data/evals/cases/slo-noinput/fixture/events.yaml +1 -0
  244. platformforge/data/evals/cases/slo-noinput/fixture/slo.yaml +4 -0
  245. platformforge/data/evals/cases/sot-conflict/case.yaml +6 -0
  246. platformforge/data/evals/cases/token-budget/case.yaml +6 -0
  247. platformforge/data/evals/cases/token-budget/fixture/big.py +50 -0
  248. platformforge/data/evals/cases/xr-delete/case.yaml +8 -0
  249. platformforge/data/evals/cases/xr-delete/fixture/xr.yaml +10 -0
  250. platformforge/data/evals/cases/xr-graph-chain/case.yaml +8 -0
  251. platformforge/data/evals/cases/xr-graph-chain/fixture/xrd.yaml +90 -0
  252. platformforge/data/evals/cases/xr-negative-crd/case.yaml +8 -0
  253. platformforge/data/evals/cases/xr-negative-crd/fixture/widget.yaml +19 -0
  254. platformforge/data/evals/cases/xr-upbound-mr/case.yaml +8 -0
  255. platformforge/data/evals/cases/xr-upbound-mr/fixture/bucket.yaml +12 -0
  256. platformforge/data/evals/qpt-bench/change-review/case.yaml +5 -0
  257. platformforge/data/evals/qpt-bench/change-review/fixture/plan.json +9 -0
  258. platformforge/data/evals/qpt-bench/gha-security/case.yaml +5 -0
  259. platformforge/data/evals/qpt-bench/gha-security/fixture/ci.yml +10 -0
  260. platformforge/data/evals/qpt-bench/iam-investigate/case.yaml +5 -0
  261. platformforge/data/evals/qpt-bench/iam-investigate/fixture/policy.json +6 -0
  262. platformforge/data/evals/qpt-bench/incident-analysis/case.yaml +5 -0
  263. platformforge/data/evals/qpt-bench/incident-analysis/fixture/query.json +5 -0
  264. platformforge/data/evals/qpt-bench/incident-analysis/fixture/rules.yaml +6 -0
  265. platformforge/data/evals/qpt-bench/k8s-review/case.yaml +6 -0
  266. platformforge/data/evals/qpt-bench/k8s-review/fixture/deploy.yaml +15 -0
  267. platformforge/data/evals/qpt-bench/tf-security/case.yaml +5 -0
  268. platformforge/data/evals/qpt-bench/tf-security/fixture/main.tf +17 -0
  269. platformforge/data/knowledge/aws/eks.yaml +20 -0
  270. platformforge/data/knowledge/aws/iam.yaml +28 -0
  271. platformforge/data/knowledge/aws/network-exposure.yaml +19 -0
  272. platformforge/data/knowledge/aws/organizations.yaml +19 -0
  273. platformforge/data/knowledge/crossplane/composition-providers.yaml +20 -0
  274. platformforge/data/knowledge/crossplane/managed-resources.yaml +26 -0
  275. platformforge/data/knowledge/crossplane/v1-v2.yaml +25 -0
  276. platformforge/data/knowledge/kubernetes/api-deprecations.yaml +33 -0
  277. platformforge/data/knowledge/kubernetes/autoscaling-rbac.yaml +27 -0
  278. platformforge/data/knowledge/kubernetes/gateway-api.yaml +20 -0
  279. platformforge/data/knowledge/kubernetes/pod-security.yaml +26 -0
  280. platformforge/data/knowledge/sources.yaml +516 -0
  281. platformforge/data/knowledge/terraform/lifecycle.yaml +18 -0
  282. platformforge/data/knowledge/terraform/plan-semantics.yaml +26 -0
  283. platformforge/data/lab/chaos-pod-kill/chaos.yaml +3 -0
  284. platformforge/data/lab/chaos-pod-kill/facts.json +13 -0
  285. platformforge/data/lab/fleets/acme/capacity.yaml +35 -0
  286. platformforge/data/lab/fleets/acme/costs.yaml +25 -0
  287. platformforge/data/lab/fleets/acme/events.yaml +41 -0
  288. platformforge/data/lab/fleets/acme/fleet.yaml +51 -0
  289. platformforge/data/lab/fleets/acme/graph.yaml +45 -0
  290. platformforge/data/lab/fleets/acme/policies.yaml +28 -0
  291. platformforge/data/lab/fleets/acme/requests.yaml +24 -0
  292. platformforge/data/lab/scenarios/argo-bad-rollout/expected.yaml +6 -0
  293. platformforge/data/lab/scenarios/argo-bad-rollout/fixture/app.yaml +9 -0
  294. platformforge/data/lab/scenarios/aws-dump/expected.yaml +19 -0
  295. platformforge/data/lab/scenarios/aws-dump/fixture/compute.json +4 -0
  296. platformforge/data/lab/scenarios/aws-dump/fixture/iam.json +7 -0
  297. platformforge/data/lab/scenarios/aws-dump/fixture/network.json +6 -0
  298. platformforge/data/lab/scenarios/aws-dump/fixture/org.json +4 -0
  299. platformforge/data/lab/scenarios/aws-dump/fixture/storage.json +4 -0
  300. platformforge/data/lab/scenarios/container-unsigned/expected.yaml +5 -0
  301. platformforge/data/lab/scenarios/container-unsigned/fixture/supply.json +11 -0
  302. platformforge/data/lab/scenarios/cost-idle-workload/expected.yaml +5 -0
  303. platformforge/data/lab/scenarios/cost-idle-workload/fixture/costs.json +12 -0
  304. platformforge/data/lab/scenarios/crossplane-platform/expected.yaml +16 -0
  305. platformforge/data/lab/scenarios/crossplane-platform/fixture/negative.yaml +18 -0
  306. platformforge/data/lab/scenarios/crossplane-platform/fixture/xrd.yaml +90 -0
  307. platformforge/data/lab/scenarios/demo-platform/expected.yaml +16 -0
  308. platformforge/data/lab/scenarios/demo-platform/fixture/.github/workflows/ci.yml +10 -0
  309. platformforge/data/lab/scenarios/demo-platform/fixture/deploy.yaml +16 -0
  310. platformforge/data/lab/scenarios/demo-platform/fixture/infra.tf +5 -0
  311. platformforge/data/lab/scenarios/fleet-ai/expected.yaml +12 -0
  312. platformforge/data/lab/scenarios/fleet-capacity/expected.yaml +12 -0
  313. platformforge/data/lab/scenarios/fleet-cost/expected.yaml +18 -0
  314. platformforge/data/lab/scenarios/fleet-federation/expected.yaml +11 -0
  315. platformforge/data/lab/scenarios/fleet-golden-path/expected.yaml +18 -0
  316. platformforge/data/lab/scenarios/fleet-op-hotspot/expected.yaml +11 -0
  317. platformforge/data/lab/scenarios/fleet-ownership/expected.yaml +17 -0
  318. platformforge/data/lab/scenarios/fleet-partial/expected.yaml +10 -0
  319. platformforge/data/lab/scenarios/fleet-policy-friction/expected.yaml +10 -0
  320. platformforge/data/lab/scenarios/fleet-recurring-incident/expected.yaml +12 -0
  321. platformforge/data/lab/scenarios/fleet-report/expected.yaml +13 -0
  322. platformforge/data/lab/scenarios/fleet-risk/expected.yaml +18 -0
  323. platformforge/data/lab/scenarios/gitops-drift/expected.yaml +6 -0
  324. platformforge/data/lab/scenarios/gitops-drift/fixture/app.yaml +12 -0
  325. platformforge/data/lab/scenarios/k8s-bad-readiness/expected.yaml +6 -0
  326. platformforge/data/lab/scenarios/k8s-bad-readiness/fixture/deploy.yaml +23 -0
  327. platformforge/data/lab/scenarios/k8s-bad-readiness/fixture/netpol.yaml +9 -0
  328. platformforge/data/lab/scenarios/k8s-missing-limits/expected.yaml +6 -0
  329. platformforge/data/lab/scenarios/k8s-missing-limits/fixture/deploy.yaml +26 -0
  330. platformforge/data/lab/scenarios/k8s-missing-limits/fixture/netpol.yaml +9 -0
  331. platformforge/data/lab/scenarios/k8s-single-replica/expected.yaml +5 -0
  332. platformforge/data/lab/scenarios/k8s-single-replica/fixture/deploy.yaml +26 -0
  333. platformforge/data/lab/scenarios/k8s-single-replica/fixture/netpol.yaml +4 -0
  334. platformforge/data/lab/scenarios/live-aws-collect/expected.yaml +4 -0
  335. platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +15 -0
  336. platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/iam_list-users.denied.txt +1 -0
  337. platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/sts_get-caller-identity.json +5 -0
  338. platformforge/data/lab/scenarios/live-k8s-collect/expected.yaml +4 -0
  339. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +1 -0
  340. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +25 -0
  341. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_pods.json +17 -0
  342. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_secrets.json +13 -0
  343. platformforge/data/lab/scenarios/live-kind/expected.yaml +14 -0
  344. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_configmaps.denied.txt +1 -0
  345. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_deployments.apps.json +25 -0
  346. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_pods.json +17 -0
  347. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_secrets.json +13 -0
  348. platformforge/data/lab/scenarios/network-policy-missing/expected.yaml +6 -0
  349. platformforge/data/lab/scenarios/network-policy-missing/fixture/deploy.yaml +26 -0
  350. platformforge/data/lab/scenarios/ops-bad-rollout/expected.yaml +3 -0
  351. platformforge/data/lab/scenarios/ops-bad-rollout/fixture/ops.yaml +33 -0
  352. platformforge/data/lab/scenarios/ops-break-glass/expected.yaml +3 -0
  353. platformforge/data/lab/scenarios/ops-break-glass/fixture/ops.yaml +21 -0
  354. platformforge/data/lab/scenarios/ops-broken-selector/expected.yaml +3 -0
  355. platformforge/data/lab/scenarios/ops-broken-selector/fixture/ops.yaml +21 -0
  356. platformforge/data/lab/scenarios/ops-changed-plan-hash/expected.yaml +3 -0
  357. platformforge/data/lab/scenarios/ops-changed-plan-hash/fixture/ops.yaml +20 -0
  358. platformforge/data/lab/scenarios/ops-conflicting-operation/expected.yaml +3 -0
  359. platformforge/data/lab/scenarios/ops-conflicting-operation/fixture/ops.yaml +21 -0
  360. platformforge/data/lab/scenarios/ops-expired-approval/expected.yaml +3 -0
  361. platformforge/data/lab/scenarios/ops-expired-approval/fixture/ops.yaml +20 -0
  362. platformforge/data/lab/scenarios/ops-partial-failure/expected.yaml +3 -0
  363. platformforge/data/lab/scenarios/ops-partial-failure/fixture/ops.yaml +24 -0
  364. platformforge/data/lab/scenarios/ops-policy-denial/expected.yaml +3 -0
  365. platformforge/data/lab/scenarios/ops-policy-denial/fixture/ops.yaml +17 -0
  366. platformforge/data/lab/scenarios/ops-replica-drift/expected.yaml +3 -0
  367. platformforge/data/lab/scenarios/ops-replica-drift/fixture/ops.yaml +28 -0
  368. platformforge/data/lab/scenarios/ops-rollback-annotate/expected.yaml +3 -0
  369. platformforge/data/lab/scenarios/ops-rollback-annotate/fixture/ops.yaml +41 -0
  370. platformforge/data/lab/scenarios/ops-rollback-gitops/expected.yaml +3 -0
  371. platformforge/data/lab/scenarios/ops-rollback-gitops/fixture/ops.yaml +38 -0
  372. platformforge/data/lab/scenarios/ops-rollback-impossible/expected.yaml +3 -0
  373. platformforge/data/lab/scenarios/ops-rollback-impossible/fixture/ops.yaml +34 -0
  374. platformforge/data/lab/scenarios/ops-rollback-scale/expected.yaml +3 -0
  375. platformforge/data/lab/scenarios/ops-rollback-scale/fixture/ops.yaml +40 -0
  376. platformforge/data/lab/scenarios/ops-rollback-terraform/expected.yaml +3 -0
  377. platformforge/data/lab/scenarios/ops-rollback-terraform/fixture/ops.yaml +38 -0
  378. platformforge/data/lab/scenarios/ops-rollback-terraform/fixture/tf/tfplan.bin +1 -0
  379. platformforge/data/lab/scenarios/ops-stale-observation/expected.yaml +3 -0
  380. platformforge/data/lab/scenarios/ops-stale-observation/fixture/ops.yaml +20 -0
  381. platformforge/data/lab/scenarios/secret-exposure/expected.yaml +5 -0
  382. platformforge/data/lab/scenarios/secret-exposure/fixture/app.env +2 -0
  383. platformforge/data/lab/scenarios/slo-burn/expected.yaml +5 -0
  384. platformforge/data/lab/scenarios/slo-burn/fixture/events.yaml +2 -0
  385. platformforge/data/lab/scenarios/slo-burn/fixture/slo.yaml +4 -0
  386. platformforge/data/lab/scenarios/terraform-iam-wildcard/expected.yaml +5 -0
  387. platformforge/data/lab/scenarios/terraform-iam-wildcard/fixture/policy.json +14 -0
  388. platformforge/data/lab/scenarios/terraform-public-bucket/expected.yaml +6 -0
  389. platformforge/data/lab/scenarios/terraform-public-bucket/fixture/main.tf +5 -0
  390. platformforge/data/portable_skills/platformforge-agents/SKILL.md +47 -0
  391. platformforge/data/portable_skills/platformforge-change/SKILL.md +41 -0
  392. platformforge/data/portable_skills/platformforge-core/SKILL.md +62 -0
  393. platformforge/data/portable_skills/platformforge-economy/SKILL.md +42 -0
  394. platformforge/data/portable_skills/platformforge-finops/SKILL.md +34 -0
  395. platformforge/data/portable_skills/platformforge-fleet/SKILL.md +39 -0
  396. platformforge/data/portable_skills/platformforge-governance/SKILL.md +76 -0
  397. platformforge/data/portable_skills/platformforge-graph/SKILL.md +46 -0
  398. platformforge/data/portable_skills/platformforge-lab/SKILL.md +39 -0
  399. platformforge/data/portable_skills/platformforge-sdd/SKILL.md +39 -0
  400. platformforge/data/portable_skills/platformforge-security/SKILL.md +38 -0
  401. platformforge/data/portable_skills/platformforge-sre/SKILL.md +41 -0
  402. platformforge/data/rules/catalog/finops.yaml +26 -0
  403. platformforge/data/rules/catalog/gitops.yaml +161 -0
  404. platformforge/data/rules/catalog/iac.yaml +84 -0
  405. platformforge/data/rules/catalog/k8s.yaml +322 -0
  406. platformforge/data/rules/catalog/orchestration.yaml +99 -0
  407. platformforge/data/rules/catalog/product.yaml +42 -0
  408. platformforge/data/rules/catalog/routing.yaml +122 -0
  409. platformforge/data/rules/catalog/security.yaml +159 -0
  410. platformforge/data/rules/catalog/sre.yaml +67 -0
  411. platformforge/diagnose/__init__.py +75 -0
  412. platformforge/distribution/__init__.py +18 -0
  413. platformforge/distribution/bundle.py +127 -0
  414. platformforge/distribution/hostflow.py +247 -0
  415. platformforge/distribution/models.py +80 -0
  416. platformforge/distribution/service.py +225 -0
  417. platformforge/economy/__init__.py +27 -0
  418. platformforge/economy/bench.py +66 -0
  419. platformforge/economy/budget.py +198 -0
  420. platformforge/economy/cache.py +287 -0
  421. platformforge/economy/checkpoint.py +112 -0
  422. platformforge/economy/collection.py +142 -0
  423. platformforge/economy/doctor.py +207 -0
  424. platformforge/economy/engine.py +158 -0
  425. platformforge/economy/envelope.py +61 -0
  426. platformforge/economy/fleetpack.py +86 -0
  427. platformforge/economy/ledger.py +232 -0
  428. platformforge/economy/plan.py +131 -0
  429. platformforge/economy/pricing.py +101 -0
  430. platformforge/economy/qpt.py +286 -0
  431. platformforge/economy/reconcile.py +86 -0
  432. platformforge/economy/verifyplan.py +107 -0
  433. platformforge/economy/waste.py +123 -0
  434. platformforge/evals/__init__.py +16 -0
  435. platformforge/evals/coverage.py +140 -0
  436. platformforge/evals/fleet_invariants.py +260 -0
  437. platformforge/evals/ops_invariants.py +158 -0
  438. platformforge/evals/runner.py +541 -0
  439. platformforge/federation/__init__.py +4 -0
  440. platformforge/federation/node.py +135 -0
  441. platformforge/finops/__init__.py +14 -0
  442. platformforge/finops/alloc.py +31 -0
  443. platformforge/finops/costs.py +79 -0
  444. platformforge/finops/focus.py +100 -0
  445. platformforge/finops/graph_cost.py +51 -0
  446. platformforge/finops/ingest.py +144 -0
  447. platformforge/finops/insights.py +193 -0
  448. platformforge/finops/unit.py +36 -0
  449. platformforge/fleet/__init__.py +5 -0
  450. platformforge/fleet/loader.py +73 -0
  451. platformforge/fleet/models.py +155 -0
  452. platformforge/fleet/orggraph.py +172 -0
  453. platformforge/fleet/query.py +154 -0
  454. platformforge/forge/__init__.py +9 -0
  455. platformforge/forge/collect.py +88 -0
  456. platformforge/forge/delegate.py +77 -0
  457. platformforge/forge/manifest.py +106 -0
  458. platformforge/freeze/__init__.py +22 -0
  459. platformforge/freeze/exceptions.py +56 -0
  460. platformforge/freeze/manifest.py +167 -0
  461. platformforge/freeze/snapshots.py +108 -0
  462. platformforge/graph/__init__.py +39 -0
  463. platformforge/graph/backend.py +174 -0
  464. platformforge/graph/bench.py +245 -0
  465. platformforge/graph/build.py +130 -0
  466. platformforge/graph/delivery.py +183 -0
  467. platformforge/graph/diff.py +292 -0
  468. platformforge/graph/events.py +116 -0
  469. platformforge/graph/migrate.py +44 -0
  470. platformforge/graph/model.py +264 -0
  471. platformforge/graph/persist.py +97 -0
  472. platformforge/graph/query.py +290 -0
  473. platformforge/graph/temporal.py +78 -0
  474. platformforge/graph/vocab.py +63 -0
  475. platformforge/graphview.py +94 -0
  476. platformforge/iac/__init__.py +7 -0
  477. platformforge/iac/drift.py +53 -0
  478. platformforge/iac/plan.py +84 -0
  479. platformforge/iac/terraform.py +123 -0
  480. platformforge/install/__init__.py +1 -0
  481. platformforge/install/service.py +421 -0
  482. platformforge/k8s/__init__.py +8 -0
  483. platformforge/k8s/helm.py +152 -0
  484. platformforge/k8s/hubble.py +87 -0
  485. platformforge/k8s/manifests.py +513 -0
  486. platformforge/knowledge/__init__.py +1 -0
  487. platformforge/knowledge/packs.py +157 -0
  488. platformforge/knowledge/registry.py +249 -0
  489. platformforge/knowledge/select.py +127 -0
  490. platformforge/lab/__init__.py +5 -0
  491. platformforge/lab/chaos.py +71 -0
  492. platformforge/lab/fleetlab.py +351 -0
  493. platformforge/lab/opslab.py +271 -0
  494. platformforge/lab/runner.py +219 -0
  495. platformforge/live/__init__.py +36 -0
  496. platformforge/live/budget.py +92 -0
  497. platformforge/live/capability.py +80 -0
  498. platformforge/live/collectors/__init__.py +6 -0
  499. platformforge/live/collectors/aws.py +370 -0
  500. platformforge/live/collectors/aws_transport.py +98 -0
  501. platformforge/live/collectors/k8s.py +389 -0
  502. platformforge/live/collectors/k8s_transport.py +85 -0
  503. platformforge/live/cursors.py +48 -0
  504. platformforge/live/drift.py +130 -0
  505. platformforge/live/envelope.py +85 -0
  506. platformforge/live/federation.py +113 -0
  507. platformforge/live/fixtures.py +168 -0
  508. platformforge/live/identity.py +258 -0
  509. platformforge/live/incident.py +200 -0
  510. platformforge/live/models.py +435 -0
  511. platformforge/live/reconcile.py +382 -0
  512. platformforge/live/remediate.py +169 -0
  513. platformforge/live/store.py +256 -0
  514. platformforge/live/topology.py +249 -0
  515. platformforge/mcp/__init__.py +7 -0
  516. platformforge/mcp/parity.py +69 -0
  517. platformforge/mcp/registry.py +427 -0
  518. platformforge/mcp/server.py +84 -0
  519. platformforge/mcp/tools.py +732 -0
  520. platformforge/models/__init__.py +21 -0
  521. platformforge/models/base.py +214 -0
  522. platformforge/observe/__init__.py +26 -0
  523. platformforge/observe/capacity.py +39 -0
  524. platformforge/observe/dr.py +67 -0
  525. platformforge/observe/grafana.py +76 -0
  526. platformforge/observe/incident.py +58 -0
  527. platformforge/observe/otel.py +135 -0
  528. platformforge/observe/postmortem.py +72 -0
  529. platformforge/observe/prometheus.py +88 -0
  530. platformforge/observe/slo.py +125 -0
  531. platformforge/ops/__init__.py +8 -0
  532. platformforge/ops/actions.py +215 -0
  533. platformforge/ops/analytics.py +83 -0
  534. platformforge/ops/approval.py +275 -0
  535. platformforge/ops/autorem.py +101 -0
  536. platformforge/ops/config.py +175 -0
  537. platformforge/ops/engine.py +758 -0
  538. platformforge/ops/envelope.py +135 -0
  539. platformforge/ops/executors/__init__.py +1 -0
  540. platformforge/ops/executors/base.py +211 -0
  541. platformforge/ops/executors/git.py +77 -0
  542. platformforge/ops/executors/gitops.py +134 -0
  543. platformforge/ops/executors/terraform.py +84 -0
  544. platformforge/ops/gates.py +135 -0
  545. platformforge/ops/goldenpath.py +180 -0
  546. platformforge/ops/material.py +181 -0
  547. platformforge/ops/models.py +421 -0
  548. platformforge/ops/operation.py +335 -0
  549. platformforge/ops/opgraph.py +233 -0
  550. platformforge/ops/policy.py +275 -0
  551. platformforge/ops/preconditions.py +109 -0
  552. platformforge/ops/registry.py +101 -0
  553. platformforge/ops/risk.py +216 -0
  554. platformforge/ops/rollback.py +287 -0
  555. platformforge/ops/rollback_builders.py +163 -0
  556. platformforge/ops/runbook.py +269 -0
  557. platformforge/ops/simulate.py +125 -0
  558. platformforge/ops/source_of_truth.py +198 -0
  559. platformforge/ops/store.py +157 -0
  560. platformforge/ops/verify.py +190 -0
  561. platformforge/optimize/__init__.py +4 -0
  562. platformforge/optimize/engine.py +109 -0
  563. platformforge/optimize/models.py +68 -0
  564. platformforge/optimize/scan.py +196 -0
  565. platformforge/plan/__init__.py +107 -0
  566. platformforge/portable_cli.py +199 -0
  567. platformforge/portal_adapter.py +740 -0
  568. platformforge/portal_assets/chunk-7_l-b4Tr.js +1 -0
  569. platformforge/portal_assets/chunk-B0Iad6pD.js +1 -0
  570. platformforge/portal_assets/chunk-B605XnCF.js +1 -0
  571. platformforge/portal_assets/chunk-B7N3TXcn.js +1 -0
  572. platformforge/portal_assets/chunk-BAj6yGem.js +1 -0
  573. platformforge/portal_assets/chunk-BGUitn2r.js +1 -0
  574. platformforge/portal_assets/chunk-BVKnCv85.js +1 -0
  575. platformforge/portal_assets/chunk-BYyM9V_w.js +1 -0
  576. platformforge/portal_assets/chunk-BaQMhq-G.js +1 -0
  577. platformforge/portal_assets/chunk-BavOrxVm.js +1 -0
  578. platformforge/portal_assets/chunk-Bb0C24YV.js +1 -0
  579. platformforge/portal_assets/chunk-BfCFGPzs.js +1 -0
  580. platformforge/portal_assets/chunk-C2t4OUVu.js +1 -0
  581. platformforge/portal_assets/chunk-C3pI4QjU.js +1 -0
  582. platformforge/portal_assets/chunk-C4gpbtbP.js +1 -0
  583. platformforge/portal_assets/chunk-CGWeHhKY.js +1 -0
  584. platformforge/portal_assets/chunk-CJCT86Dr.js +1 -0
  585. platformforge/portal_assets/chunk-CXcsLDPJ.js +1 -0
  586. platformforge/portal_assets/chunk-CcjxoLxw.js +1 -0
  587. platformforge/portal_assets/chunk-D-gBPXHa.js +1 -0
  588. platformforge/portal_assets/chunk-D3eZogIe.js +1 -0
  589. platformforge/portal_assets/chunk-DQU0VyoQ.js +1 -0
  590. platformforge/portal_assets/chunk-DqWNkF1O.js +1 -0
  591. platformforge/portal_assets/chunk-DuPPkSIE.js +3 -0
  592. platformforge/portal_assets/chunk-DyIHOW_a.js +1 -0
  593. platformforge/portal_assets/chunk-Fx4zSGL5.js +1 -0
  594. platformforge/portal_assets/chunk-UBKt05Rg.js +1 -0
  595. platformforge/portal_assets/chunk-htnJDQEY.js +1 -0
  596. platformforge/portal_assets/chunk-kXRFMGqe.js +1 -0
  597. platformforge/portal_assets/chunk-qe3u763a.js +1 -0
  598. platformforge/portal_assets/favicon.ico +0 -0
  599. platformforge/portal_assets/index.html +13 -0
  600. platformforge/portal_assets/main-QDFVZK3T.js +5 -0
  601. platformforge/portal_assets/styles-MQEBDFDX.css +1 -0
  602. platformforge/product/__init__.py +10 -0
  603. platformforge/product/backstage.py +49 -0
  604. platformforge/product/catalog.py +74 -0
  605. platformforge/product/crossplane.py +341 -0
  606. platformforge/product/golden_paths/__init__.py +5 -0
  607. platformforge/product/golden_paths/engine.py +97 -0
  608. platformforge/product/golden_paths/library.yaml +198 -0
  609. platformforge/product/golden_paths/model.py +84 -0
  610. platformforge/product/maturity.py +107 -0
  611. platformforge/product/scorecards.py +84 -0
  612. platformforge/resources.py +36 -0
  613. platformforge/risk/__init__.py +5 -0
  614. platformforge/risk/engine.py +95 -0
  615. platformforge/risk/signals.py +49 -0
  616. platformforge/routing/__init__.py +13 -0
  617. platformforge/routing/decision.py +191 -0
  618. platformforge/routing/router.py +328 -0
  619. platformforge/rtk/__init__.py +9 -0
  620. platformforge/rtk/compact.py +127 -0
  621. platformforge/rtk/parsers.py +199 -0
  622. platformforge/rules/__init__.py +5 -0
  623. platformforge/rules/engine.py +345 -0
  624. platformforge/sandbox/__init__.py +7 -0
  625. platformforge/sandbox/env.py +151 -0
  626. platformforge/sandbox/review.py +92 -0
  627. platformforge/sdd/__init__.py +8 -0
  628. platformforge/sdd/lifecycle.py +239 -0
  629. platformforge/security/__init__.py +19 -0
  630. platformforge/security/cosign.py +67 -0
  631. platformforge/security/iam.py +112 -0
  632. platformforge/security/identity.py +84 -0
  633. platformforge/security/kyverno.py +106 -0
  634. platformforge/security/sbom.py +59 -0
  635. platformforge/security/scan.py +63 -0
  636. platformforge/security/slsa.py +86 -0
  637. platformforge/security/supply.py +62 -0
  638. platformforge/tokensave/__init__.py +20 -0
  639. platformforge/tokensave/budget.py +62 -0
  640. platformforge/tokensave/estimate.py +21 -0
  641. platformforge/tokensave/index.py +172 -0
  642. platformforge/tokensave/ledger.py +121 -0
  643. platformforge/tokensave/packs.py +285 -0
  644. platformforge/ui/__init__.py +28 -0
  645. platformforge/ui/app.py +465 -0
  646. platformforge/ui/home.py +113 -0
  647. platformforge/ui/i18n.py +143 -0
  648. platformforge/ui/kit.py +689 -0
  649. platformforge/ui/screen.py +628 -0
  650. platformforge/ui/tui.py +94 -0
  651. platformforge/ui/wizard.py +309 -0
  652. platformforge/workspace/__init__.py +13 -0
  653. platformforge/workspace/models.py +35 -0
  654. platformforge/workspace/service.py +69 -0
  655. platformforge-0.1.0.dist-info/METADATA +212 -0
  656. platformforge-0.1.0.dist-info/RECORD +659 -0
  657. platformforge-0.1.0.dist-info/WHEEL +4 -0
  658. platformforge-0.1.0.dist-info/entry_points.txt +3 -0
  659. platformforge-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,Bt as zr,Et as pl,G as XI,H as UI,It as yg,K as YI,Lt as yh,O as LD,P as Qu,Rt as zI,U as Vv,_ as FD,c as $i,dt as hg,g as Eg,gt as jI,jt as uh,kt as sh,l as AD,m as DD,q as Yu,s as $I,st as g,vt as kD,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{a as l,s as y}from"./chunk-DQU0VyoQ.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as _}from"./chunk-BaQMhq-G.js";import{t as w}from"./chunk-BVKnCv85.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$1}from"./chunk-C4gpbtbP.js";var H=e=>({time:e});var L=(e,r)=>r.file;function R(e,r){e&1&&(ki(0,`section`,3),ah(1,`ui-state-badge`,6),ki(2,`span`,7),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`versions.unavailable`)))}function q(e,r){if(e&1){let a=YI();ki(0,`ui-error`,8),uh(`retry`,function(){Yu(a);let y=XI();return Qu(y.load())}),pl()}e&2&&sh(`error`,r)}function J(e,r){e&1&&(ki(0,`section`,5),kD(1,`t`),ah(2,`ui-skeleton`,9),pl()),e&2&&($i(`aria-label`,LD(1,2,`state.loading`)),Vv(2),sh(`lines`,3))}function K(e,r){if(e&1&&(ki(0,`span`),DD(1),kD(2,`t`),pl()),e&2){let a=XI(2);Vv(),ml(` · `,FD(2,1,`common.updatedAt`,AD(4,H,a.stamp(r))))}}function Q(e,r){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let a=XI();Vv(),yh(a.installed.version)}}function W(e,r){e&1&&(ki(0,`span`,15),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),ml(`— `,LD(2,1,`state.unverified`)))}function X(e,r){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let a=XI();Vv(),yh(a.installed.origin)}}function Y(e,r){e&1&&(ki(0,`span`,15),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),ml(`— `,LD(2,1,`state.unverified`)))}function Z(e,r){if(e&1&&DD(0),e&2){let a=XI();ml(` `,a.installed.channel,` `)}}function ee(e,r){e&1&&(ki(0,`span`,15),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),ml(`— `,LD(2,1,`state.unverified`)))}function ie(e,r){if(e&1&&(ki(0,`dl`,14)(1,`div`)(2,`dt`),DD(3),kD(4,`t`),pl(),ki(5,`dd`)(6,`code`),DD(7),pl()()()()),e&2){let a=XI();Vv(3),yh(LD(4,2,`versions.available.version`)),Vv(4),yh(a.available.version)}}function te(e,r){e&1&&(ki(0,`div`,18),ah(1,`ui-state-badge`,6),ki(2,`span`),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`versions.offline`)))}function ne(e,r){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let a=XI(2);Vv(),yh(a.integrity.manifest_release)}}function ae(e,r){e&1&&(ki(0,`span`,15),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),ml(`— `,LD(2,1,`state.unverified`)))}function oe(e,r){if(e&1&&(ki(0,`code`,33),DD(1),pl()),e&2){let a=XI(2);Vv(),yh(a.integrity.manifest_sha256)}}function re(e,r){e&1&&(ki(0,`span`,15),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),ml(`— `,LD(2,1,`state.unverified`)))}function de(e,r){if(e&1&&(ki(0,`section`,19)(1,`div`,11)(2,`div`)(3,`h2`),ah(4,`ui-icon`,24),DD(5),kD(6,`t`),pl()()(),ki(7,`dl`,14)(8,`div`)(9,`dt`),DD(10),kD(11,`t`),pl(),ki(12,`dd`),jI(13,ne,2,1,`code`)(14,ae,3,3,`span`,15),pl()(),ki(15,`div`)(16,`dt`),DD(17),kD(18,`t`),pl(),ki(19,`dd`),jI(20,oe,2,1,`code`,33)(21,re,3,3,`span`,15),pl()()()()),e&2){let a=XI();Vv(4),sh(`size`,15),Vv(),yh(LD(6,6,`versions.integrity`)),Vv(5),yh(LD(11,8,`versions.integrity.release`)),Vv(3),HI(a.integrity.manifest_release?13:14),Vv(4),yh(LD(18,10,`versions.integrity.sha256`)),Vv(3),HI(a.integrity.manifest_sha256?20:21)}}function le(e,r){if(e&1&&(ki(0,`div`)(1,`dt`),DD(2),kD(3,`t`),pl(),ki(4,`dd`),DD(5),pl()()),e&2){let a=XI(2);Vv(2),yh(LD(3,2,`versions.pending.updates`)),Vv(3),yh(a.pending)}}function pe(e,r){if(e&1&&(ki(0,`div`)(1,`dt`),DD(2),kD(3,`t`),pl(),ki(4,`dd`),DD(5),pl()()),e&2){let a=XI(2);Vv(2),yh(LD(3,2,`versions.pending.plan`)),Vv(3),yh(a.upgrade_plan)}}function se(e,r){if(e&1&&(ki(0,`dl`,14),jI(1,le,6,4,`div`),jI(2,pe,6,4,`div`),pl()),e&2){let a=XI();Vv(),HI(a.pending?1:-1),Vv(),HI(a.upgrade_plan?2:-1)}}function ce(e,r){e&1&&(ki(0,`div`,21),ah(1,`ui-state-badge`,6),ki(2,`span`),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`versions.pending.cli`)))}function me(e,r){if(e&1&&(ki(0,`tr`)(1,`td`)(2,`code`),DD(3),pl()(),ki(4,`td`),DD(5),pl(),ki(6,`td`),DD(7),pl()()),e&2){let a=r.$implicit;Vv(3),yh(a.file),Vv(2),yh(a.operation??`—`),Vv(2),yh(a.status??`—`)}}function _e(e,r){if(e&1&&(ki(0,`section`,22)(1,`div`,11)(2,`div`)(3,`h2`),ah(4,`ui-icon`,12),DD(5),kD(6,`t`),pl()()(),ki(7,`div`,28)(8,`table`,34)(9,`thead`)(10,`tr`)(11,`th`),DD(12),kD(13,`t`),pl(),ki(14,`th`),DD(15),kD(16,`t`),pl(),ki(17,`th`),DD(18),kD(19,`t`),pl()()(),ki(20,`tbody`),$I(21,me,8,3,`tr`,null,L),pl()()()()),e&2){let a=XI();Vv(4),sh(`size`,15),Vv(),yh(LD(6,5,`versions.receipts`)),Vv(7),yh(LD(13,7,`versions.receipts.file`)),Vv(3),yh(LD(16,9,`versions.receipts.operation`)),Vv(3),yh(LD(19,11,`versions.receipts.status`)),Vv(3),zI(a.receipts)}}function ve(e,r){if(e&1&&(ki(0,`pre`,25),DD(1),pl()),e&2){let a=XI();Vv(),yh(a.changelog)}}function xe(e,r){e&1&&(ki(0,`p`,15),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),ml(`— `,LD(2,1,`state.unverified`)))}function ue(e,r){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let a=XI().$implicit;Vv(),yh(a.version)}}function ye(e,r){e&1&&(ki(0,`span`,15),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),ml(`— `,LD(2,1,`state.unverified`)))}function ge(e,r){if(e&1&&DD(0),e&2){let a=XI().$implicit,s=XI(3);ml(` `,s.fmt(a.at),` `)}}function fe(e,r){e&1&&(ki(0,`span`,7),DD(1,`—`),pl())}function Ce(e,r){if(e&1&&DD(0),e&2){let a=XI().$implicit;ml(` `,a.detail,` `)}}function Se(e,r){e&1&&(ki(0,`span`,7),DD(1,`—`),pl())}function be(e,r){if(e&1&&(ki(0,`tr`)(1,`td`),jI(2,ue,2,1,`code`)(3,ye,3,3,`span`,15),pl(),ki(4,`td`,35),jI(5,ge,1,1)(6,fe,2,0,`span`,7),pl(),ki(7,`td`),jI(8,Ce,1,1)(9,Se,2,0,`span`,7),pl()()),e&2){let a=r.$implicit;Vv(2),HI(a.version?2:3),Vv(3),HI(a.at?5:6),Vv(3),HI(a.detail?8:9)}}function Ee(e,r){if(e&1&&(ki(0,`div`,28)(1,`table`,34)(2,`thead`)(3,`tr`)(4,`th`),DD(5),kD(6,`t`),pl(),ki(7,`th`),DD(8),kD(9,`t`),pl(),ki(10,`th`),DD(11),kD(12,`t`),pl()()(),ki(13,`tbody`),$I(14,be,10,3,`tr`,null,UI),pl()()()),e&2){let a=XI();Vv(5),yh(LD(6,3,`versions.history.version`)),Vv(3),yh(LD(9,5,`versions.history.at`)),Vv(3),yh(LD(12,7,`versions.history.detail`)),Vv(3),zI(a.history)}}function he(e,r){e&1&&(ah(0,`ui-empty`,29),kD(1,`t`)),e&2&&sh(`title`,LD(1,1,`versions.history.empty`))}function Pe(e,r){if(e&1&&(ki(0,`p`,32)(1,`code`),DD(2),pl()()),e&2){let a=XI();Vv(2),yh(a.rollback.hint)}}function Ie(e,r){if(e&1&&(ki(0,`section`,10)(1,`div`,11)(2,`div`)(3,`h2`),ah(4,`ui-icon`,12),DD(5),kD(6,`t`),pl(),ki(7,`p`,13)(8,`code`),DD(9,`GET /api/v1/versions`),pl(),jI(10,K,3,6,`span`),pl()()(),ki(11,`dl`,14)(12,`div`)(13,`dt`),DD(14),kD(15,`t`),pl(),ki(16,`dd`),jI(17,Q,2,1,`code`)(18,W,3,3,`span`,15),pl()(),ki(19,`div`)(20,`dt`),DD(21),kD(22,`t`),pl(),ki(23,`dd`),jI(24,X,2,1,`code`)(25,Y,3,3,`span`,15),pl()(),ki(26,`div`)(27,`dt`),DD(28),kD(29,`t`),pl(),ki(30,`dd`),jI(31,Z,1,1)(32,ee,3,3,`span`,15),pl()(),ki(33,`div`)(34,`dt`),DD(35),kD(36,`t`),pl(),ki(37,`dd`)(38,`code`),DD(39),pl()()()()(),ki(40,`section`,16)(41,`div`,11)(42,`div`)(43,`h2`),ah(44,`ui-icon`,17),DD(45),kD(46,`t`),pl(),ki(47,`p`,13),DD(48),kD(49,`t`),ki(50,`code`),DD(51),pl()()()(),jI(52,ie,8,4,`dl`,14)(53,te,5,3,`div`,18),pl(),jI(54,de,22,12,`section`,19),ki(55,`section`,20)(56,`div`,11)(57,`div`)(58,`h2`),ah(59,`ui-icon`,2),DD(60),kD(61,`t`),pl()()(),jI(62,se,3,2,`dl`,14)(63,ce,5,3,`div`,21),pl(),jI(64,_e,23,13,`section`,22),ki(65,`section`,23)(66,`div`,11)(67,`div`)(68,`h2`),ah(69,`ui-icon`,24),DD(70),kD(71,`t`),pl()()(),jI(72,ve,2,1,`pre`,25)(73,xe,3,3,`p`,15),pl(),ki(74,`section`,26)(75,`div`,11)(76,`div`)(77,`h2`),ah(78,`ui-icon`,27),DD(79),kD(80,`t`),pl()()(),jI(81,Ee,16,9,`div`,28)(82,he,2,3,`ui-empty`,29),pl(),ki(83,`section`,30)(84,`div`,11)(85,`div`)(86,`h2`),ah(87,`ui-icon`,2),DD(88),kD(89,`t`),pl()(),ah(90,`ui-state-badge`,31),pl(),jI(91,Pe,3,1,`p`,32),pl()),e&2){let a,s=r,y=XI();Vv(4),sh(`size`,15),Vv(),yh(LD(6,31,`versions.installed`)),Vv(5),HI((a=y.src.loadedAt())?10:-1,a),Vv(4),yh(LD(15,33,`versions.installed.version`)),Vv(3),HI(s.installed.version?17:18),Vv(4),yh(LD(22,35,`versions.installed.origin`)),Vv(3),HI(s.installed.origin?24:25),Vv(4),yh(LD(29,37,`versions.installed.channel`)),Vv(3),HI(s.installed.channel?31:32),Vv(4),yh(LD(36,39,`versions.compat`)),Vv(4),yh(s.compat),Vv(5),sh(`size`,15),Vv(),yh(LD(46,41,`versions.available`)),Vv(3),ml(` `,LD(49,43,`versions.available.source`),`: `),Vv(3),yh(s.available.source),Vv(),HI(s.available.version?52:53),Vv(2),HI(s.integrity?54:-1),Vv(5),sh(`size`,15),Vv(),yh(LD(61,45,`versions.pending`)),Vv(2),HI(s.pending||s.upgrade_plan?62:63),Vv(2),HI(s.receipts?.length?64:-1),Vv(5),sh(`size`,15),Vv(),yh(LD(71,47,`versions.changelog`)),Vv(2),HI(s.changelog?72:73),Vv(6),sh(`size`,15),Vv(),yh(LD(80,49,`versions.history`)),Vv(2),HI(s.history.length?81:82),Vv(6),sh(`size`,15),Vv(),yh(LD(89,51,`versions.rollback`)),Vv(2),sh(`state`,s.rollback.supported?`supported`:`unsupported`),Vv(),HI(s.rollback.hint?91:-1)}}var G=class e{api=g(hg);src=new l;info=zr(()=>this.src.data());stamp=y;constructor(){this.load()}async load(){await this.src.load(()=>this.api.versions())}fmt(r){let a=new Date(r);return Number.isNaN(a.getTime())?r:a.toLocaleString()}static ɵfac=function(a){return new(a||e)};static ɵcmp=sl({type:e,selectors:[[`page-versions`]],decls:11,vars:15,consts:[[3,`title`,`subtitle`],[1,`btn`,3,`click`,`disabled`],[`name`,`refresh`,3,`size`],[`data-section`,`unavailable`,`role`,`note`,1,`card`,`unv`],[3,`error`],[`role`,`status`,1,`card`],[`state`,`UNVERIFIED`],[1,`muted`],[3,`retry`,`error`],[`kind`,`row`,3,`lines`],[`data-section`,`installed`,1,`card`],[1,`sec__head`],[`name`,`install`,3,`size`],[1,`src`],[1,`kv`],[`data-unverified`,``,1,`muted`],[`data-section`,`available`,1,`card`],[`name`,`external`,3,`size`],[`data-note`,`offline`,`role`,`note`,1,`unv`],[`data-section`,`integrity`,1,`card`],[`data-section`,`pending`,1,`card`],[`data-note`,`cli`,`role`,`note`,1,`unv`],[`data-section`,`receipts`,1,`card`],[`data-section`,`changelog`,1,`card`],[`name`,`knowledge`,3,`size`],[1,`changelog`],[`data-section`,`history`,1,`card`],[`name`,`history`,3,`size`],[1,`table-wrap`],[`icon`,`history`,3,`title`],[`data-section`,`rollback`,1,`card`],[3,`state`],[1,`hint`],[1,`hash`],[1,`table`],[1,`nowrap`]],template:function(a,s){if(a&1&&(ki(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),ki(3,`button`,1),uh(`click`,function(){return s.load()}),ah(4,`ui-icon`,2),DD(5),kD(6,`t`),pl()(),jI(7,R,5,3,`section`,3),jI(8,q,1,1,`ui-error`,4),jI(9,J,3,4,`section`,5),jI(10,Ie,92,53)),a&2){let y,S;sh(`title`,LD(1,9,`versions.title`))(`subtitle`,LD(2,11,`versions.subtitle`)),Vv(3),sh(`disabled`,s.src.loading()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(6,13,`state.refresh`),` `),Vv(2),HI(s.src.unavailable()?7:-1),Vv(),HI((y=s.src.error())?8:-1,y),Vv(),HI(s.src.loading()&&!s.info()?9:-1),Vv(),HI((S=s.info())?10:-1,S)}},dependencies:[_$1,I,_,w,Eg,h,yg],styles:[`.card[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.sec__head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.sec__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-lg);font-weight:650;display:inline-flex;align-items:center;gap:var(--%NS%space-2)}.sec__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent)}.src[_ngcontent-%COMP%]{margin:4px 0 0;font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted)}.muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.unv[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3);padding:var(--%NS%space-3);border:1px dashed color-mix(in srgb,var(--%NS%warn) 55%,transparent);border-radius:var(--%NS%radius-md);background:var(--%NS%warn-bg);font-size:var(--%NS%font-sm)}.kv[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-2);margin:0}.kv[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:var(--%NS%space-3)}.kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{min-width:9rem;color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm);flex:none}.kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;min-width:0;overflow-wrap:anywhere}.changelog[_ngcontent-%COMP%]{margin:0;padding:var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);background:var(--%NS%bg);font-size:var(--%NS%font-xs);overflow-x:auto;white-space:pre-wrap}.table-wrap[_ngcontent-%COMP%]{overflow-x:auto}.nowrap[_ngcontent-%COMP%]{white-space:nowrap}.hint[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-sm);overflow-wrap:anywhere}`]})};export{G as VersionsPage};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,B as Te$1,Bt as zr,Et as pl,G as XI,H as UI,It as yg,K as YI,Lt as yh,O as LD,P as Qu,Rt as zI,U as Vv,V as Tg,_ as FD,a as f,c as $i,dt as hg,g as Eg,gt as jI,jt as uh,kt as sh,l as AD,m as DD,q as Yu,s as $I,st as g,u as BI,vt as kD,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{a as l,n as c,s as y}from"./chunk-DQU0VyoQ.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as _}from"./chunk-BaQMhq-G.js";import{t as w$1}from"./chunk-BVKnCv85.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$1}from"./chunk-C4gpbtbP.js";var Y=e=>({time:e});var X=e=>({count:e});var w=(e,o)=>o.id;function Z(e,o){e&1&&ah(0,`ui-state-badge`,22),e&2&&sh(`state`,o.status)}function ee(e,o){e&1&&(ki(0,`p`,23),ah(1,`ui-icon`,4),DD(2),kD(3,`t`),pl()),e&2&&(Vv(),sh(`size`,14),Vv(),ml(` `,LD(3,2,`mcp.verifying`),` `))}function te(e,o){if(e&1){let i=YI();ki(0,`ui-error`,24),uh(`retry`,function(){Yu(i);let y=XI(2);return Qu(y.verify())}),pl()}e&2&&sh(`error`,o)}function ie(e,o){if(e&1&&(ki(0,`p`,20)(1,`code`),DD(2),pl()()),e&2){let i=XI();Vv(2),yh(i.stage)}}function ne(e,o){if(e&1&&(ki(0,`p`),DD(1),pl()),e&2){let i=XI();Vv(),yh(i.detail)}}function ae(e,o){if(e&1&&DD(0),e&2){let i=XI(2);ml(` — `,i.unlock,` `)}}function oe(e,o){if(e&1&&(ki(0,`p`,25)(1,`code`),DD(2),pl(),jI(3,ae,1,1),pl()),e&2){let i=XI();Vv(2),yh(i.refusal),Vv(),HI(i.unlock?3:-1)}}function re(e,o){if(e&1&&(ki(0,`li`)(1,`code`,29),DD(2),pl(),ki(3,`span`,20),DD(4),pl(),ki(5,`code`,30),DD(6),pl()()),e&2){let i=o.$implicit;Vv(2),yh(i.status),Vv(2),yh(i.kind),Vv(2),yh(i.path)}}function le(e,o){if(e&1&&(ki(0,`h3`,27),DD(1),kD(2,`t`),pl(),ki(3,`ul`,28),$I(4,re,7,3,`li`,null,UI),pl()),e&2){let i=XI();Vv(),yh(LD(2,1,`federation.actions`)),Vv(3),zI(i.actions)}}function ce(e,o){if(e&1&&(ki(0,`p`,26)(1,`span`),DD(2),kD(3,`t`),pl(),ki(4,`strong`,31),DD(5),pl(),ki(6,`small`,20),DD(7),kD(8,`t`),pl()()),e&2){let i=XI(3);Vv(2),yh(LD(3,3,`mcp.receipt.latency`)),Vv(3),ml(``,i.latencyMs(),` ms`),Vv(2),yh(LD(8,5,`mcp.receipt.latencyHint`))}}function de(e,o){if(e&1&&(jI(0,ie,3,1,`p`,20),jI(1,ne,2,1,`p`),jI(2,oe,4,2,`p`,25),jI(3,le,6,3),jI(4,ce,9,7,`p`,26)),e&2){let i=o,p=XI(2);HI(i.stage?0:-1),Vv(),HI(i.detail?1:-1),Vv(),HI(i.refusal?2:-1),Vv(),HI(i.actions?.length?3:-1),Vv(),HI(p.latencyMs()!==null?4:-1)}}function pe(e,o){if(e&1&&(ki(0,`section`,6)(1,`div`,9)(2,`div`)(3,`h2`),DD(4),kD(5,`t`),pl(),ki(6,`p`,10)(7,`code`),DD(8,`POST /api/v1/mcp/verify`),pl()()(),jI(9,Z,1,1,`ui-state-badge`,22),pl(),jI(10,ee,4,4,`p`,23),jI(11,te,1,1,`ui-error`,13),jI(12,de,5,5),pl()),e&2){let i,p,y,C=XI();Vv(4),yh(LD(5,5,`install.receipt`)),Vv(5),HI((i=C.receipt())?9:-1,i),Vv(),HI(C.busy()?10:-1),Vv(),HI((p=C.verifyError())?11:-1,p),Vv(),HI((y=C.receipt())?12:-1,y)}}function se(e,o){if(e&1&&(ki(0,`p`,37),DD(1),pl()),e&2){let i=XI().$implicit;Vv(),yh(i.detail)}}function me(e,o){if(e&1&&(ki(0,`li`),DD(1),pl()),e&2){let i=o.$implicit;Vv(),yh(i)}}function _e(e,o){if(e&1&&(ki(0,`ul`,38),$I(1,me,2,1,`li`,null,BI),pl()),e&2){let i=XI().$implicit;Vv(),zI(i.limitations)}}function ue(e,o){if(e&1){let i=YI();ki(0,`article`,33)(1,`header`,34)(2,`code`,35),DD(3),pl(),ah(4,`ui-state-badge`,22),ki(5,`button`,36),uh(`click`,function(){Yu(i);let y=XI(2);return Qu(y.verify())}),ah(6,`ui-icon`,4),DD(7),kD(8,`t`),pl()(),jI(9,se,2,1,`p`,37),jI(10,_e,3,0,`ul`,38),pl()}if(e&2){let i=o.$implicit,p=XI(2);$i(`data-state`,i.state),Vv(3),yh(i.id),Vv(),sh(`state`,i.state),Vv(),sh(`disabled`,p.busy()),Vv(),sh(`size`,13),Vv(),ml(` `,LD(8,8,`error.retry`),` `),Vv(2),HI(i.detail?9:-1),Vv(),HI(i.limitations?.length?10:-1)}}function ge(e,o){if(e&1&&(ki(0,`section`,7)(1,`div`,9)(2,`div`)(3,`h2`),ah(4,`ui-icon`,32),DD(5),kD(6,`t`),pl(),ki(7,`p`,10),DD(8),kD(9,`t`),pl()()(),$I(10,ue,11,10,`article`,33,w),pl()),e&2){let i=XI();Vv(4),sh(`size`,15),Vv(),yh(LD(6,3,`mcp.diag.title`)),Vv(3),yh(LD(9,5,`mcp.diag.hint`)),Vv(2),zI(i.attention())}}function ye(e,o){if(e&1&&(ki(0,`span`),DD(1),kD(2,`t`),pl()),e&2){let i=XI();Vv(),ml(` · `,FD(2,1,`common.updatedAt`,AD(4,Y,i.stamp(o))))}}function xe(e,o){e&1&&(ki(0,`div`,12),ah(1,`ui-state-badge`,39),ki(2,`span`),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`empty.noData.hint`)))}function ve(e,o){if(e&1){let i=YI();ki(0,`ui-error`,24),uh(`retry`,function(){Yu(i);let y=XI();return Qu(y.load())}),pl()}e&2&&sh(`error`,o)}function fe(e,o){e&1&&(ki(0,`div`,14),kD(1,`t`),ah(2,`ui-skeleton`,40),pl()),e&2&&($i(`aria-label`,LD(1,2,`state.loading`)),Vv(2),sh(`lines`,3))}function Ce(e,o){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let i=XI().$implicit;Vv(),yh(i.host)}}function Se(e,o){e&1&&(ki(0,`span`,45),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`mcp.host.unbound`)))}function be(e,o){if(e&1&&DD(0),e&2){let i=XI().$implicit;ml(` `,i.tools_count,` `)}}function Ee(e,o){e&1&&ah(0,`ui-state-badge`,39)}function Me(e,o){if(e&1&&DD(0),e&2){let i=XI().$implicit,p=XI(2);ml(` `,p.fmt(i.last_verify),` `)}}function Pe(e,o){e&1&&(ki(0,`span`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`mcp.never`)))}function he(e,o){if(e&1){let i=YI();ki(0,`tr`)(1,`td`)(2,`div`,43),ah(3,`ui-icon`,44),ki(4,`code`),DD(5),pl()()(),ki(6,`td`),ah(7,`ui-state-badge`,22),pl(),ki(8,`td`),jI(9,Ce,2,1,`code`)(10,Se,3,3,`span`,45),pl(),ki(11,`td`),jI(12,be,1,1)(13,Ee,1,0,`ui-state-badge`,39),pl(),ki(14,`td`),jI(15,Me,1,1)(16,Pe,3,3,`span`,20),pl(),ki(17,`td`),DD(18),kD(19,`t`),pl(),ki(20,`td`)(21,`button`,11),kD(22,`t`),uh(`click`,function(){let y=Yu(i).$implicit,C=XI(2);return Qu(C.select(y))}),ah(23,`ui-icon`,46),pl()()()}if(e&2){let i=o.$implicit,p=XI(2);$i(`data-selected`,p.selectedId()===i.id||null),Vv(3),sh(`size`,15),Vv(2),yh(i.id),Vv(2),sh(`state`,i.state),Vv(2),HI(i.host?9:10),Vv(3),HI(i.tools_count!==null?12:13),Vv(3),HI(i.last_verify?15:16),Vv(3),yh(i.limitations?.length??LD(19,11,`state.none`)),Vv(3),$i(`data-inspect`,i.id)(`aria-label`,LD(22,13,`state.viewDetails`)),Vv(2),sh(`size`,15)}}function Ie(e,o){if(e&1&&(ki(0,`div`,15)(1,`table`,41)(2,`thead`)(3,`tr`)(4,`th`),DD(5),kD(6,`t`),pl(),ki(7,`th`),DD(8),kD(9,`t`),pl(),ki(10,`th`),DD(11),kD(12,`t`),pl(),ki(13,`th`),DD(14),kD(15,`t`),pl(),ki(16,`th`),DD(17),kD(18,`t`),pl(),ki(19,`th`),DD(20),kD(21,`t`),pl(),ki(22,`th`)(23,`span`,42),DD(24),kD(25,`t`),pl()()()(),ki(26,`tbody`),$I(27,he,24,15,`tr`,null,w),pl()()()),e&2){let i=XI();Vv(5),yh(LD(6,7,`table.id`)),Vv(3),yh(LD(9,9,`skills.state`)),Vv(3),yh(LD(12,11,`table.host`)),Vv(3),yh(LD(15,13,`mcp.surface.tools`)),Vv(3),yh(LD(18,15,`mcp.lastVerify`)),Vv(3),yh(LD(21,17,`mcp.limitations`)),Vv(4),yh(LD(25,19,`state.viewDetails`)),Vv(3),zI(i.servers())}}function Ne(e,o){e&1&&(ah(0,`ui-empty`,16),kD(1,`t`),kD(2,`t`)),e&2&&sh(`title`,LD(1,2,`empty.noData`))(`hint`,LD(2,4,`empty.noData.hint`))}function Oe(e,o){if(e&1){let i=YI();ki(0,`button`,47),uh(`click`,function(){Yu(i);let y=XI();return Qu(y.selectedId.set(null))}),DD(1),kD(2,`t`),pl()}e&2&&(Vv(),ml(` `,LD(2,1,`state.close`),` `))}function Te(e,o){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let i=XI();Vv(),yh(i.host)}}function Be(e,o){e&1&&(ki(0,`span`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`mcp.host.unbound`)))}function we(e,o){if(e&1&&(DD(0),kD(1,`t`)),e&2){let i=XI();ml(` `,FD(1,1,`mcp.tools`,AD(4,X,i.tools_count)),` `)}}function De(e,o){e&1&&ah(0,`ui-state-badge`,39)}function ke(e,o){if(e&1&&DD(0),e&2){let i=XI(),p=XI();ml(` `,p.fmt(i.last_verify),` `)}}function Fe(e,o){e&1&&(ki(0,`span`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`mcp.never`)))}function ze(e,o){if(e&1&&(ki(0,`div`)(1,`dt`),DD(2),kD(3,`t`),pl(),ki(4,`dd`),DD(5),pl()()),e&2){let i=XI();Vv(2),yh(LD(3,2,`mcp.detail`)),Vv(3),yh(i.detail)}}function Ve(e,o){if(e&1&&(ki(0,`li`),DD(1),pl()),e&2){let i=o.$implicit;Vv(),yh(i)}}function Re(e,o){if(e&1&&(ki(0,`h3`,27),DD(1),kD(2,`t`),pl(),ki(3,`ul`,38),$I(4,Ve,2,1,`li`,null,BI),pl()),e&2){let i=XI();Vv(),yh(LD(2,1,`mcp.limitations`)),Vv(3),zI(i.limitations)}}function Ae(e,o){if(e&1&&(ki(0,`p`,58),DD(1),kD(2,`t`),pl(),ki(3,`p`,20),DD(4),kD(5,`t`),pl()),e&2){let i=XI();Vv(),yh(FD(2,2,`mcp.tools`,AD(7,X,i.tools_count))),Vv(3),yh(LD(5,5,`mcp.surface.countOnly`))}}function $e(e,o){e&1&&(ah(0,`ui-state-badge`,39),ki(1,`p`,20),DD(2),kD(3,`t`),pl()),e&2&&(Vv(2),yh(LD(3,1,`mcp.surface.noTools`)))}function Ge(e,o){if(e&1&&(ki(0,`header`,48)(1,`h3`),ah(2,`ui-icon`,44),ki(3,`code`),DD(4),pl()(),ah(5,`ui-state-badge`,22),pl(),ki(6,`p`,49),DD(7),kD(8,`t`),pl(),ki(9,`dl`,50)(10,`div`)(11,`dt`),DD(12),kD(13,`t`),pl(),ki(14,`dd`)(15,`code`),DD(16),pl()()(),ki(17,`div`)(18,`dt`),DD(19),kD(20,`t`),pl(),ki(21,`dd`),ah(22,`ui-state-badge`,22),pl()(),ki(23,`div`)(24,`dt`),DD(25),kD(26,`t`),pl(),ki(27,`dd`),jI(28,Te,2,1,`code`)(29,Be,3,3,`span`,20),pl()(),ki(30,`div`)(31,`dt`),DD(32),kD(33,`t`),pl(),ki(34,`dd`),jI(35,we,2,6)(36,De,1,0,`ui-state-badge`,39),pl()(),ki(37,`div`)(38,`dt`),DD(39),kD(40,`t`),pl(),ki(41,`dd`),jI(42,ke,1,1)(43,Fe,3,3,`span`,20),pl()(),jI(44,ze,6,4,`div`),pl(),jI(45,Re,6,3),ki(46,`div`,51)(47,`section`,52)(48,`h4`),ah(49,`ui-icon`,53),DD(50),kD(51,`t`),pl(),jI(52,Ae,6,9)(53,$e,4,3),pl(),ki(54,`section`,54)(55,`h4`),ah(56,`ui-icon`,55),DD(57),kD(58,`t`),pl(),ah(59,`ui-state-badge`,39),ki(60,`p`,20),DD(61),kD(62,`t`),pl()(),ki(63,`section`,56)(64,`h4`),ah(65,`ui-icon`,57),DD(66),kD(67,`t`),pl(),ah(68,`ui-state-badge`,39),ki(69,`p`,20),DD(70),kD(71,`t`),pl()()()),e&2){let i=o,p=XI();Vv(2),sh(`size`,16),Vv(2),yh(i.id),Vv(),sh(`state`,i.state),Vv(2),yh(LD(8,25,p.explainKey(i.state))),Vv(5),yh(LD(13,27,`table.id`)),Vv(4),yh(i.id),Vv(3),yh(LD(20,29,`skills.state`)),Vv(3),sh(`state`,i.state),Vv(3),yh(LD(26,31,`table.host`)),Vv(3),HI(i.host?28:29),Vv(4),yh(LD(33,33,`mcp.surface.tools`)),Vv(3),HI(i.tools_count!==null?35:36),Vv(4),yh(LD(40,35,`mcp.lastVerify`)),Vv(3),HI(i.last_verify?42:43),Vv(2),HI(i.detail?44:-1),Vv(),HI(i.limitations?.length?45:-1),Vv(4),sh(`size`,14),Vv(),yh(LD(51,37,`mcp.surface.tools`)),Vv(2),HI(i.tools_count!==null?52:53),Vv(4),sh(`size`,14),Vv(),yh(LD(58,39,`mcp.surface.resources`)),Vv(4),yh(LD(62,41,`mcp.surface.notExposed`)),Vv(4),sh(`size`,14),Vv(),yh(LD(67,43,`mcp.surface.prompts`)),Vv(4),yh(LD(71,45,`mcp.surface.notExposed`))}}function He(e,o){e&1&&(ki(0,`p`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`mcp.selectHint`)))}function Ue(e,o){if(e&1&&(ki(0,`th`),DD(1),kD(2,`t`),pl()),e&2){let i=o.$implicit;Vv(),yh(LD(2,1,`mcpState.`+i))}}function Le(e,o){if(e&1&&(ki(0,`td`,60),ah(1,`ui-state-badge`,39),pl()),e&2){let i=XI(3);$i(`colspan`,i.stages.length)}}function Ke(e,o){e&1&&(ah(0,`ui-icon`,62),ki(1,`span`,42),DD(2),kD(3,`t`),pl()),e&2&&(sh(`size`,14),Vv(2),yh(LD(3,2,`state.yes`)))}function je(e,o){e&1&&(ki(0,`span`,63),DD(1,`—`),pl(),ki(2,`span`,42),DD(3),kD(4,`t`),pl()),e&2&&(Vv(3),yh(LD(4,1,`state.no`)))}function qe(e,o){if(e&1&&(ki(0,`td`,60),jI(1,Ke,4,4)(2,je,5,3),pl()),e&2){let i=o.$implicit,p=XI(2).$implicit,y=XI(2);Vv(),HI(y.reached(p,i)?1:2)}}function Je(e,o){if(e&1&&$I(0,qe,3,1,`td`,60,BI),e&2){let i=XI(3);zI(i.stages)}}function Qe(e,o){if(e&1&&(ki(0,`li`),DD(1),pl()),e&2){let i=o.$implicit;Vv(),yh(i)}}function We(e,o){if(e&1&&(ki(0,`tr`,61)(1,`td`)(2,`ul`,38),$I(3,Qe,2,1,`li`,null,BI),pl()()()),e&2){let i=XI().$implicit,p=XI(2);Vv(),$i(`colspan`,p.stages.length+3),Vv(2),zI(i.limitations)}}function Xe(e,o){if(e&1&&(ki(0,`tr`)(1,`td`)(2,`code`),DD(3),pl()(),ki(4,`td`),ah(5,`ui-state-badge`,22),pl(),jI(6,Le,2,1,`td`,60)(7,Je,2,0),ki(8,`td`),DD(9),kD(10,`t`),pl()(),jI(11,We,5,1,`tr`,61)),e&2){let i=o.$implicit,p=XI(2);Vv(3),yh(i.id),Vv(2),sh(`state`,i.state),Vv(),HI(p.abnormal(i)?6:7),Vv(3),yh(i.limitations?.length??LD(10,5,`state.none`)),Vv(2),HI(i.limitations?.length?11:-1)}}function Ye(e,o){if(e&1&&(ki(0,`div`,15)(1,`table`,59)(2,`thead`)(3,`tr`)(4,`th`),DD(5),kD(6,`t`),pl(),ki(7,`th`),DD(8),kD(9,`t`),pl(),$I(10,Ue,3,3,`th`,null,BI),ki(12,`th`),DD(13),kD(14,`t`),pl()()(),ki(15,`tbody`),$I(16,Xe,12,7,null,null,w),pl()()()),e&2){let i=XI();Vv(5),yh(LD(6,3,`table.id`)),Vv(3),yh(LD(9,5,`skills.state`)),Vv(2),zI(i.stages),Vv(3),yh(LD(14,7,`mcp.limitations`)),Vv(3),zI(i.servers())}}function Ze(e,o){e&1&&(ki(0,`p`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`state.none`)))}var et=[`CONFIGURED`,`STARTING`,`HANDSHAKE_VERIFIED`,`TOOLS_DISCOVERED`,`INVOCATION_VERIFIED`];var tt={CONFIGURED:0,STARTING:1,HANDSHAKE_VERIFIED:2,TOOLS_DISCOVERED:3,INVOCATION_VERIFIED:4};var Q={NOT_CONFIGURED:-1,CONFIGURED:0,STARTING:1,HANDSHAKE_VERIFIED:2,TOOLS_DISCOVERED:3,INVOCATION_VERIFIED:4,DEGRADED:null,FAILED:null};var W=class e{api=g(hg);toast=g(f);src=new l;servers=zr(()=>this.src.data()??[]);selectedId=Te$1(null);selected=zr(()=>this.servers().find(o=>o.id===this.selectedId())??null);attention=zr(()=>this.servers().filter(o=>o.state===`FAILED`||o.state===`DEGRADED`));receipt=Te$1(null);latencyMs=Te$1(null);verifyError=Te$1(null);busy=Te$1(!1);stages=et;stamp=y;constructor(){this.load()}async load(){await this.src.load(()=>this.api.mcpServers())}select(o){this.selectedId.set(o.id)}explainKey(o){return`mcp.explain.${o}`}abnormal(o){return Q[o.state]===null}reached(o,i){let p=Q[o.state];return p!==null&&p>=tt[i]}fmt(o){let i=new Date(o);return Number.isNaN(i.getTime())?o:i.toLocaleString()}async verify(){this.busy.set(!0),this.verifyError.set(null),this.receipt.set(null),this.latencyMs.set(null);let o=performance.now();try{let i=await Tg(this.api.mcpVerify());this.latencyMs.set(Math.max(0,Math.round(performance.now()-o))),this.receipt.set(i),this.toast.show(`notify.success`,`success`),await this.load()}catch(i){this.verifyError.set(c(i)),this.toast.show(`notify.error`,`error`)}finally{this.busy.set(!1)}}static ɵfac=function(i){return new(i||e)};static ɵcmp=sl({type:e,selectors:[[`page-mcp`]],decls:60,vars:46,consts:[[3,`title`,`subtitle`],[`data-action`,`verify`,1,`btn`,`btn--primary`,3,`click`,`disabled`],[`name`,`shield-check`,3,`size`],[1,`btn`,3,`click`],[`name`,`refresh`,3,`size`],[`data-section`,`safety`,`role`,`note`,1,`safety`],[`data-section`,`verify`,`data-lift`,``,1,`card`],[`data-section`,`diagnostics`,1,`card`,`diag`],[`data-section`,`registry`,1,`card`],[1,`sec__head`],[1,`src`],[1,`icon-btn`,3,`click`],[`role`,`note`,1,`unv`],[3,`error`],[`role`,`status`],[1,`table-wrap`],[`icon`,`mcp`,3,`title`,`hint`],[`data-section`,`inspector`,1,`card`],[`name`,`compass`,3,`size`],[1,`btn`,`btn--mini`],[1,`muted`],[`data-section`,`compat`,1,`card`],[3,`state`],[`role`,`status`,`aria-live`,`polite`,1,`running`],[3,`retry`,`error`],[`role`,`alert`,1,`refusal`],[1,`latency`],[1,`subhead`],[1,`actions`],[1,`actions__status`],[1,`path`],[`data-latency`,``],[`name`,`alert`,3,`size`],[1,`diag__item`],[1,`diag__head`],[1,`diag__id`],[`data-diag-retry`,``,1,`btn`,`btn--mini`,3,`click`,`disabled`],[1,`diag__detail`],[1,`limits`],[`state`,`UNVERIFIED`],[`kind`,`row`,3,`lines`],[1,`table`],[1,`sr-only`],[1,`id`],[`name`,`mcp`,3,`size`],[`data-unbound`,``,1,`muted`],[`name`,`chevron-right`,3,`size`],[1,`btn`,`btn--mini`,3,`click`],[1,`insp__head`],[1,`explain`],[1,`kv`],[1,`surfaces`],[`data-surface`,`tools`,1,`surface`],[`name`,`settings`,3,`size`],[`data-surface`,`resources`,1,`surface`],[`name`,`folder`,3,`size`],[`data-surface`,`prompts`,1,`surface`],[`name`,`terminal`,3,`size`],[1,`surface__value`],[1,`table`,`compat`],[1,`stage`],[1,`lim`],[`name`,`check`,1,`stage__yes`,3,`size`],[`aria-hidden`,`true`,1,`stage__no`]],template:function(i,p){if(i&1&&(ki(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),ki(3,`button`,1),uh(`click`,function(){return p.verify()}),ah(4,`ui-icon`,2),DD(5),kD(6,`t`),pl(),ki(7,`button`,3),uh(`click`,function(){return p.load()}),ah(8,`ui-icon`,4),DD(9),kD(10,`t`),pl()(),ki(11,`p`,5),ah(12,`ui-icon`,2),ki(13,`span`),DD(14),kD(15,`t`),pl()(),jI(16,pe,13,7,`section`,6),jI(17,ge,12,7,`section`,7),ki(18,`section`,8)(19,`div`,9)(20,`div`)(21,`h2`),DD(22),kD(23,`t`),pl(),ki(24,`p`,10)(25,`code`),DD(26,`GET /api/v1/mcp/servers`),pl(),jI(27,ye,3,6,`span`),pl()(),ki(28,`button`,11),kD(29,`t`),uh(`click`,function(){return p.load()}),ah(30,`ui-icon`,4),pl()(),jI(31,xe,5,3,`div`,12),jI(32,ve,1,1,`ui-error`,13),jI(33,fe,3,4,`div`,14),jI(34,Ie,29,21,`div`,15)(35,Ne,3,6,`ui-empty`,16),pl(),ki(36,`section`,17)(37,`div`,9)(38,`div`)(39,`h2`),ah(40,`ui-icon`,18),DD(41),kD(42,`t`),pl(),ki(43,`p`,10)(44,`code`),DD(45,`GET /api/v1/mcp/servers`),pl()()(),jI(46,Oe,3,3,`button`,19),pl(),jI(47,Ge,72,47)(48,He,3,3,`p`,20),pl(),ki(49,`section`,21)(50,`div`,9)(51,`div`)(52,`h2`),DD(53),kD(54,`t`),pl(),ki(55,`p`,10),DD(56),kD(57,`t`),pl()()(),jI(58,Ye,18,9,`div`,15)(59,Ze,3,3,`p`,20),pl()),i&2){let y,C,D;sh(`title`,LD(1,26,`mcp.title`))(`subtitle`,LD(2,28,`mcp.subtitle`)),Vv(3),sh(`disabled`,p.busy()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(6,30,`mcp.verify`),` `),Vv(3),sh(`size`,15),Vv(),ml(` `,LD(10,32,`state.refresh`),` `),Vv(3),sh(`size`,15),Vv(2),yh(LD(15,34,`mcp.safety`)),Vv(2),HI(p.busy()||p.receipt()||p.verifyError()?16:-1),Vv(),HI(p.attention().length?17:-1),Vv(5),yh(LD(23,36,`mcp.servers`)),Vv(5),HI((y=p.src.loadedAt())?27:-1,y),Vv(),$i(`aria-label`,LD(29,38,`state.refresh`)),Vv(2),sh(`size`,14),Vv(),HI(p.src.unavailable()?31:-1),Vv(),HI((C=p.src.error())?32:-1,C),Vv(),HI(p.src.loading()&&!p.src.data()?33:-1),Vv(),HI(p.servers().length?34:p.src.attempted()&&!p.src.loading()&&!p.src.error()&&!p.src.unavailable()?35:-1),Vv(6),sh(`size`,15),Vv(),yh(LD(42,40,`mcp.inspector`)),Vv(5),HI(p.selected()?46:-1),Vv(),HI((D=p.selected())?47:48,D),Vv(6),yh(LD(54,42,`mcp.compat.title`)),Vv(3),yh(LD(57,44,`mcp.compat.hint`)),Vv(2),HI(p.servers().length?58:p.src.attempted()&&!p.src.loading()?59:-1)}},dependencies:[_$1,I,_,w$1,Eg,h,yg],styles:[`.safety[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);margin:0 0 var(--%NS%space-4);padding:var(--%NS%space-3);border:1px solid color-mix(in srgb,var(--%NS%info) 40%,transparent);border-radius:var(--%NS%radius-md);background:var(--%NS%info-bg);color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm)}.safety[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%info);flex:none}.card[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.sec__head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.sec__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-lg);font-weight:650;display:inline-flex;align-items:center;gap:var(--%NS%space-2)}.sec__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent)}.src[_ngcontent-%COMP%]{margin:4px 0 0;font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted)}.subhead[_ngcontent-%COMP%]{margin:var(--%NS%space-3) 0 var(--%NS%space-2);font-size:var(--%NS%font-sm);font-weight:650}.muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.path[_ngcontent-%COMP%]{overflow-wrap:anywhere}.running[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:var(--%NS%space-2);margin:0;color:var(--%NS%fg-muted)}.refusal[_ngcontent-%COMP%]{color:var(--%NS%warn)}.actions[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:grid;gap:6px}.actions[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);min-width:0}.actions__status[_ngcontent-%COMP%]{flex:none;font-weight:600}.latency[_ngcontent-%COMP%]{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--%NS%space-2);margin:var(--%NS%space-3) 0 0;padding-top:var(--%NS%space-3);border-top:1px dashed var(--%NS%border)}.latency[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-family:var(--%NS%font-mono)}.unv[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3);padding:var(--%NS%space-3);border:1px dashed color-mix(in srgb,var(--%NS%warn) 55%,transparent);border-radius:var(--%NS%radius-md);background:var(--%NS%warn-bg);font-size:var(--%NS%font-sm)}.diag[_ngcontent-%COMP%]{border-left:3px solid var(--%NS%error)}.diag__item[_ngcontent-%COMP%]{padding:var(--%NS%space-3);border:1px solid color-mix(in srgb,var(--%NS%error) 40%,transparent);border-radius:var(--%NS%radius-md);background:var(--%NS%error-bg)}.diag__item[_ngcontent-%COMP%] + .diag__item[_ngcontent-%COMP%]{margin-top:var(--%NS%space-3)}.diag__item[data-state=DEGRADED][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--%NS%warn) 55%,transparent);background:var(--%NS%warn-bg)}.diag__head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3)}.diag__id[_ngcontent-%COMP%]{flex:1;min-width:0;font-weight:600;overflow-wrap:anywhere}.diag__detail[_ngcontent-%COMP%]{margin:var(--%NS%space-2) 0 0;font-size:var(--%NS%font-sm)}.limits[_ngcontent-%COMP%]{margin:var(--%NS%space-2) 0 0;padding-left:var(--%NS%space-5);display:grid;gap:4px;font-size:var(--%NS%font-sm);color:var(--%NS%fg-muted)}.table-wrap[_ngcontent-%COMP%]{overflow-x:auto}.table[_ngcontent-%COMP%]{min-width:720px}.id[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);min-width:0}.id[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent);flex:none}tr[data-selected][_ngcontent-%COMP%] td[_ngcontent-%COMP%]{background:var(--%NS%accent-bg)}.insp__head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--%NS%space-3)}.insp__head[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-md);font-weight:650;display:inline-flex;align-items:center;gap:var(--%NS%space-2);min-width:0}.insp__head[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent)}.explain[_ngcontent-%COMP%]{margin:var(--%NS%space-2) 0 var(--%NS%space-3);color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm)}.kv[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-2);margin:0}.kv[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:var(--%NS%space-3)}.kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{min-width:9rem;color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm);flex:none}.kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;min-width:0}.surfaces[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-3);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-top:var(--%NS%space-4)}.surface[_ngcontent-%COMP%]{padding:var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);background:color-mix(in srgb,var(--%NS%bg-hover) 40%,transparent)}.surface[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 var(--%NS%space-2);font-size:var(--%NS%font-sm);font-weight:650;display:flex;align-items:center;gap:var(--%NS%space-2)}.surface[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent)}.surface[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:var(--%NS%space-2) 0 0;font-size:var(--%NS%font-sm)}.surface__value[_ngcontent-%COMP%]{font-weight:650}.btn--mini[_ngcontent-%COMP%]{padding:2px var(--%NS%space-2);font-size:var(--%NS%font-xs);gap:4px}.compat[_ngcontent-%COMP%] .stage[_ngcontent-%COMP%]{text-align:center;white-space:nowrap}.stage__yes[_ngcontent-%COMP%]{color:var(--%NS%ok)}.stage__no[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}tr.lim[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding-top:0;border-top:0;background:color-mix(in srgb,var(--%NS%bg-hover) 40%,transparent)}tr.lim[_ngcontent-%COMP%] .limits[_ngcontent-%COMP%]{margin-top:0}`]})};export{W as McpPage};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,B as Te,Bt as zr,Et as pl,Ft as yd,G as XI,I as SD,It as yg,K as YI,Lt as yh,O as LD,P as Qu,Rt as zI,U as Vv,V as Tg,_t as jn,c as $i,dt as hg,g as Eg,gt as jI,h as Dh,jt as uh,k as M,kt as sh,m as DD,q as Yu,r as g$1,s as $I,st as g,t as Nt,u as BI,ut as he$1,vt as kD,w as Ih,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{t as h$1}from"./chunk-DqWNkF1O.js";import{t as _}from"./chunk-BaQMhq-G.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$1}from"./chunk-C4gpbtbP.js";import{t as h$2}from"./chunk-CJCT86Dr.js";var h=[`agent`,`skill`,`forge`,`mcp`];var te={agent:`command.kind.agent`,skill:`command.kind.skill`,forge:`command.kind.forge`,mcp:`command.kind.mcp`};var ae=`match.limitation`;var re=250;var oe=60;var T=i=>i.normalize(`NFD`).replace(new RegExp(`\\p{Diacritic}`,`gu`),``).toLowerCase().replace(/\s+/g,` `).trim();var ee=(i,e)=>i<e?-1:i>e?1:0;function le(i){let e=[];for(let t of T(i).split(/[^a-z0-9]+/))t&&!e.includes(t)&&e.push(t);return e}function se(i,e){if(i.length===0)return null;let t=[],n=0;for(let o of e.fields){if(!o.value)continue;let r=T(o.value);if(!r)continue;let v=i.filter(p=>r.includes(p));v.length!==0&&(n+=o.weight*(v.length/i.length),t.push({field:o.name,value:o.value,tokens:v}))}return t.length===0?null:{kind:e.kind,id:e.id,label:e.label,sublabel:e.sublabel,route:e.route,queryParams:e.queryParams,icon:e.icon,score:n,hits:t,limitationKey:ae}}function ce(i){return i.slice().sort((e,t)=>t.score-e.score||h.indexOf(e.kind)-h.indexOf(t.kind)||ee(T(e.label),T(t.label))||ee(e.id,t.id)).slice(0,oe)}function de(i){let e=[];for(let t of h){let n=i.filter(o=>o.kind===t);n.length&&e.push({kind:t,hits:n})}return e}var F=class i{api=g(hg);store=g(g$1);report=Te({groups:[],total:0,unverified:[],absent:[]});loading=Te(!1);searched=Te(!1);cache=null;failed=Te([]);absent=Te([]);building=null;bump=0;seq=0;timer=null;lastQuery=``;unverified=zr(()=>h.filter(e=>this.failed().includes(e)));constructor(){g(he$1).onDestroy(()=>this.clearTimer())}setQuery(e){if(this.lastQuery=e,this.clearTimer(),!e.trim()){this.searchNow(``);return}this.timer=setTimeout(()=>{this.timer=null,this.searchNow(e)},re)}async searchNow(e){let t=++this.seq;this.lastQuery=e,this.searched.set(!0),this.loading.set(!0);try{let n=await this.ensureIndex();if(t!==this.seq)return;let o=le(e),r=ce(n.map(p=>se(o,p)).filter(p=>p!==null)),v=de(r);this.report.set({groups:v,total:r.length,unverified:h.filter(p=>this.failed().includes(p)),absent:h.filter(p=>this.absent().includes(p))})}finally{t===this.seq&&this.loading.set(!1)}}refresh(){this.bump++,this.cache=null,this.searched()&&this.searchNow(this.lastQuery)}version(){return`${this.store.refreshedAt()??`never`}|${this.bump}`}async ensureIndex(){let e=this.version();if(this.cache?.version===e)return this.cache.candidates;this.building??=this.buildIndex().finally(()=>this.building=null);let t=await this.building;return this.version()!==e?this.ensureIndex():(this.cache={version:e,candidates:t.candidates},this.failed.set(t.failed),this.absent.set(t.absent),t.candidates)}async buildIndex(){let e=[],t=new Set,n=new Set;e.push(...this.forgeCandidates());let o=async(r,v)=>{try{e.push(...await v())}catch(p){p instanceof jn&&(p.status===404||p.body.code===`PORTAL-NOT-FOUND`)?n.add(r):t.add(r)}};return await Promise.all([o(`forge`,async()=>(await Tg(this.api.federation())).specialists.map(r=>this.specialistCandidate(r))),o(`agent`,async()=>(await Tg(this.api.agents())).map(r=>this.agentCandidate(r))),o(`skill`,async()=>(await Tg(this.api.skills())).map(r=>this.skillCandidate(r))),o(`mcp`,async()=>(await Tg(this.api.mcpServers())).map(r=>this.mcpCandidate(r)))]),{candidates:e,failed:h.filter(r=>t.has(r)),absent:h.filter(r=>n.has(r))}}agentCandidate(e){let t=[{name:`name`,value:e.name||e.id,weight:4},{name:`id`,value:e.id,weight:4},{name:`role`,value:e.role,weight:3},{name:`description`,value:e.description,weight:2},{name:`state`,value:e.state,weight:1}];for(let n of e.domains)t.push({name:`domains`,value:n,weight:3});for(let n of e.skills)t.push({name:`skills`,value:n,weight:3});for(let n of e.hosts)t.push({name:`hosts`,value:n,weight:1});return e.authority&&t.push({name:`authority`,value:e.authority,weight:1}),{kind:`agent`,id:e.id,label:e.name||e.id,sublabel:e.role||void 0,route:`/agents`,queryParams:{q:e.name||e.id},icon:`agents`,fields:t}}skillCandidate(e){let t=[{name:`name`,value:e.name||e.id,weight:4},{name:`id`,value:e.id,weight:4},{name:`description`,value:e.description,weight:2},{name:`state`,value:e.state,weight:1}];e.domain&&t.push({name:`domain`,value:e.domain,weight:3});for(let n of e.hosts)t.push({name:`hosts`,value:n,weight:1});return e.source&&t.push({name:`source`,value:e.source,weight:1}),{kind:`skill`,id:e.id,label:e.name||e.id,sublabel:[e.domain,e.state].filter(Boolean).join(` · `)||void 0,route:`/skills`,queryParams:{q:e.name||e.id},icon:`skills`,fields:t}}specialistCandidate(e){let t=[{name:`id`,value:e.provider,weight:4}];e.cli&&t.push({name:`cli`,value:e.cli,weight:3}),e.state&&t.push({name:`state`,value:e.state,weight:1}),e.status&&t.push({name:`status`,value:e.status,weight:1}),typeof e.checkout==`string`&&t.push({name:`checkout`,value:e.checkout,weight:1});for(let n of e.notes??[])t.push({name:`notes`,value:n,weight:1});return{kind:`forge`,id:e.provider,label:e.provider,sublabel:[e.state,e.status].filter(Boolean).join(` · `)||void 0,route:`/forges/${encodeURIComponent(e.provider)}`,icon:`gem`,fields:t}}forgeCandidates(){let e=this.store.descriptor();if(!e)return[];let t=[{name:`name`,value:e.forge_name,weight:4},{name:`id`,value:e.forge_id,weight:4},{name:`cli`,value:e.cli,weight:3}];for(let n of e.capabilities)t.push({name:`capabilities`,value:n.id,weight:2});return[{kind:`forge`,id:e.forge_id,label:e.forge_name||e.forge_id,sublabel:e.forge_id,route:`/forges/${encodeURIComponent(e.forge_id)}`,icon:`gem`,fields:t}]}mcpCandidate(e){let t=[{name:`id`,value:e.id,weight:4},{name:`state`,value:e.state,weight:1}];e.host&&t.push({name:`host`,value:e.host,weight:2}),e.detail&&t.push({name:`detail`,value:e.detail,weight:2});for(let n of e.limitations??[])t.push({name:`limitations`,value:n,weight:1});return{kind:`mcp`,id:e.id,label:e.id,sublabel:[e.state,e.host].filter(Boolean).join(` · `)||void 0,route:`/mcp`,icon:`mcp`,fields:t}}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=null)}static ɵfac=function(t){return new(t||i)};static ɵprov=M({token:i,factory:i.ɵfac,providedIn:`root`})};var pe=(i,e)=>e.kind;var ue=(i,e)=>e.kind+`:`+e.id;var me=(i,e)=>e.field+`|`+e.value;function he(i,e){i&1&&ah(0,`ui-icon`,6),i&2&&sh(`size`,11)}function fe(i,e){if(i&1){let t=YI();ki(0,`button`,2),kD(1,`t`),uh(`click`,function(){let o=Yu(t).$implicit,r=XI();return Qu(r.filter.set(o))}),DD(2),kD(3,`t`),jI(4,he,1,1,`ui-icon`,6),pl()}if(i&2){let t=e.$implicit,n=XI();$i(`data-tone`,n.filter()===t?`accent`:null)(`data-unverified`,n.svc.unverified().includes(t)||null)(`aria-pressed`,n.filter()===t)(`title`,n.svc.unverified().includes(t)?LD(1,6,`command.unverified`):null),Vv(2),ml(` `,LD(3,8,n.labels[t]),` `),Vv(2),HI(n.svc.unverified().includes(t)?4:-1)}}function ge(i,e){i&1&&(ki(0,`div`,5),kD(1,`t`),ah(2,`ui-skeleton`,7),pl()),i&2&&($i(`aria-label`,LD(1,2,`state.loading`)),Vv(2),sh(`lines`,3))}function ve(i,e){i&1&&(ah(0,`ui-empty`,11),kD(1,`t`)),i&2&&sh(`title`,LD(1,1,`match.empty`))}function _e(i,e){if(i&1&&(ki(0,`p`,20),DD(1),pl()),i&2){let t=XI().$implicit;Vv(),yh(t.sublabel)}}function ye(i,e){if(i&1&&(ki(0,`li`)(1,`code`,22),DD(2),pl(),ki(3,`span`,23),DD(4),pl(),ki(5,`span`,24),DD(6),pl()()),i&2){let t=e.$implicit;Vv(2),yh(t.field),Vv(2),yh(t.value),Vv(2),ml(`(`,t.tokens.join(`, `),`)`)}}function be(i,e){if(i&1&&(ki(0,`article`,16)(1,`header`,17)(2,`h3`)(3,`a`,18),DD(4),pl()(),ah(5,`ui-state-badge`,19),kD(6,`t`),pl(),jI(7,_e,2,1,`p`,20),ki(8,`ul`,21),kD(9,`t`),$I(10,ye,7,3,`li`,null,me),pl()()),i&2){let t=e.$implicit;Vv(3),sh(`routerLink`,t.route)(`queryParams`,t.queryParams??null),Vv(),yh(t.label),Vv(),sh(`labelOverride`,LD(6,6,`match.limitation`)),Vv(2),HI(t.sublabel?7:-1),Vv(),$i(`aria-label`,LD(9,8,`match.evidence`)),Vv(2),zI(t.hits)}}function Me(i,e){if(i&1&&(ki(0,`section`,12)(1,`h2`,13),ah(2,`ui-icon`,14),DD(3),kD(4,`t`),pl(),ki(5,`div`,15),$I(6,be,12,10,`article`,16,ue),pl()()),i&2){let t=e.$implicit,n=XI(3);$i(`data-kind`,t.kind),Vv(2),sh(`name`,n.icons[t.kind])(`size`,15),Vv(),ml(``,LD(4,4,n.labels[t.kind]),` `),Vv(3),zI(t.hits)}}function Ce(i,e){if(i&1&&(ki(0,`p`,10),DD(1),kD(2,`t`),pl(),jI(3,ve,2,3,`ui-empty`,11),$I(4,Me,8,6,`section`,12,pe)),i&2){let t=XI(2);Vv(),yh(LD(2,2,`match.limitation`)),Vv(2),HI(t.visibleGroups().length?-1:3),Vv(),zI(t.visibleGroups())}}function xe(i,e){i&1&&(ah(0,`ui-empty`,8),kD(1,`t`),kD(2,`t`)),i&2&&sh(`title`,LD(1,2,`match.empty`))(`hint`,LD(2,4,`match.limitation`))}function ke(i,e){i&1&&(ah(0,`ui-empty`,9),kD(1,`t`),kD(2,`t`)),i&2&&sh(`title`,LD(1,2,`match.title`))(`hint`,LD(2,4,`match.hint`))}function we(i,e){if(i&1&&jI(0,Ce,6,4)(1,xe,3,6,`ui-empty`,8)(2,ke,3,6,`ui-empty`,9),i&2){let t=XI();HI(t.svc.report().total?0:t.query().trim()?1:2)}}var ie=class i{svc=g(F);query=Te(``);filter=Te(`all`);kinds=h;labels=te;icons={agent:`agents`,skill:`skills`,forge:`gem`,mcp:`mcp`};visibleGroups=zr(()=>{let e=this.filter(),t=this.svc.report().groups;return e===`all`?t:t.filter(n=>n.kind===e)});constructor(){yd(()=>this.svc.setQuery(this.query()))}static ɵfac=function(t){return new(t||i)};static ɵcmp=sl({type:i,selectors:[[`page-match`]],decls:14,vars:17,consts:[[3,`title`,`subtitle`],[`placeholder`,`match.placeholder`,3,`queryChange`,`query`],[`type`,`button`,1,`fg-pill`,3,`click`],[`type`,`button`,1,`fg-pill`],[1,`hint`,`muted`],[`role`,`status`],[`name`,`alert`,3,`size`],[`kind`,`row`,3,`lines`],[`icon`,`search`,3,`title`,`hint`],[`icon`,`compass`,3,`title`,`hint`],[1,`src`,`muted`],[`icon`,`search`,3,`title`],[1,`group`],[1,`group__title`],[3,`name`,`size`],[1,`hits`],[`data-lift`,``,1,`card`,`hit`],[1,`hit__head`],[1,`hit__label`,3,`routerLink`,`queryParams`],[`state`,`unverified`,3,`labelOverride`],[1,`muted`],[1,`ev`],[1,`ev__field`],[1,`ev__value`],[1,`ev__tokens`]],template:function(t,n){t&1&&(ah(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),ki(3,`ui-filter-bar`,1),Dh(`queryChange`,function(r){return SD(n.query,r)||(n.query=r),r}),ki(4,`button`,2),uh(`click`,function(){return n.filter.set(`all`)}),DD(5),kD(6,`t`),pl(),$I(7,fe,5,10,`button`,3,BI),pl(),ki(9,`p`,4),DD(10),kD(11,`t`),pl(),jI(12,ge,3,4,`div`,5),jI(13,we,3,1)),t&2&&(sh(`title`,LD(1,9,`match.title`))(`subtitle`,LD(2,11,`match.subtitle`)),Vv(3),Ih(`query`,n.query),Vv(),$i(`data-tone`,n.filter()===`all`?`accent`:null)(`aria-pressed`,n.filter()===`all`),Vv(),ml(` `,LD(6,13,`state.all`),` `),Vv(2),zI(n.kinds),Vv(3),yh(LD(11,15,`match.hint`)),Vv(2),HI(n.svc.loading()?12:-1),Vv(),HI(n.svc.searched()&&!n.svc.loading()?13:-1))},dependencies:[Nt,_$1,I,_,Eg,h$1,h$2,yg],styles:[`.muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.hint[_ngcontent-%COMP%]{margin:calc(-1 * var(--%NS%space-2)) 0 var(--%NS%space-4);font-size:var(--%NS%font-xs)}.src[_ngcontent-%COMP%]{margin:0 0 var(--%NS%space-3);font-size:var(--%NS%font-xs)}.group[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-5)}.group__title[_ngcontent-%COMP%]{margin:0 0 var(--%NS%space-3);font-size:var(--%NS%font-sm);font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--%NS%fg-muted);display:flex;align-items:center;gap:var(--%NS%space-2)}.group__title[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent)}.hits[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-3);grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.hit__head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--%NS%space-2)}.hit__head[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-lg);font-weight:650}.hit__label[_ngcontent-%COMP%]{color:var(--%NS%fg);text-decoration:none}.hit__label[_ngcontent-%COMP%]:hover{color:var(--%NS%accent);text-decoration:underline}.ev[_ngcontent-%COMP%]{list-style:none;margin:var(--%NS%space-3) 0 0;padding:0;display:grid;gap:4px;font-size:var(--%NS%font-xs)}.ev[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:6px;min-width:0}.ev__field[_ngcontent-%COMP%]{flex:none;color:var(--%NS%accent);font-weight:600}.ev__value[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:32ch}.ev__tokens[_ngcontent-%COMP%]{flex:none;color:var(--%NS%fg-muted)}.fg-pill[data-unverified][_ngcontent-%COMP%]{border-style:dashed;color:var(--%NS%warn)}`]})};export{ie as MatchPage};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,B as Te$1,Bt as zr,Ct as oD,E as Jg,Et as pl,G as XI,It as yg,K as YI,Lt as yh,Nt as vh,O as LD,P as Qu,Rt as zI,U as Vv,X as _,_ as FD,c as $i,dt as hg,ft as hh,g as Eg,gt as jI,jt as uh,kt as sh,l as AD,m as DD,n as V,p as CL,q as Yu,r as g$1,s as $I,st as g,t as Nt,u as BI,ut as he$1,vt as kD,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{a as l,r as f,s as y}from"./chunk-DQU0VyoQ.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as _$1}from"./chunk-BaQMhq-G.js";import{t as w}from"./chunk-BVKnCv85.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$2}from"./chunk-C4gpbtbP.js";import{t as E}from"./chunk-Bb0C24YV.js";function ie(e){e||(e=g(he$1));let o=new _(t=>{if(e.destroyed){t.next();return}return e.onDestroy(t.next.bind(t))});return t=>t.pipe(Jg(o))}var ae=e=>({time:e});var N=(e,o)=>o.id;function oe(e,o){if(e&1&&(ki(0,`dl`,9)(1,`div`)(2,`dt`),DD(3),kD(4,`t`),pl(),ki(5,`dd`),DD(6),ki(7,`code`),DD(8),pl()()(),ki(9,`div`)(10,`dt`),DD(11),kD(12,`t`),pl(),ki(13,`dd`)(14,`code`),DD(15),pl()()(),ki(16,`div`)(17,`dt`),DD(18),kD(19,`t`),pl(),ki(20,`dd`),DD(21),pl()(),ki(22,`div`)(23,`dt`),DD(24),kD(25,`t`),pl(),ki(26,`dd`),DD(27),pl()(),ki(28,`div`)(29,`dt`),DD(30),kD(31,`t`),pl(),ki(32,`dd`),DD(33),kD(34,`t`),pl()(),ki(35,`div`)(36,`dt`),DD(37),kD(38,`t`),pl(),ki(39,`dd`,16),DD(40),kD(41,`t`),pl()()()),e&2){let t=o;Vv(3),yh(LD(4,13,`settings.forge`)),Vv(3),ml(` `,t.forge_name,` `),Vv(2),ml(`(`,t.forge_id,`)`),Vv(3),yh(LD(12,15,`settings.cli`)),Vv(4),yh(t.cli),Vv(3),yh(LD(19,17,`settings.version`)),Vv(3),yh(t.forge_version),Vv(3),yh(LD(25,19,`settings.portalVersion`)),Vv(3),yh(t.portal_version),Vv(3),yh(LD(31,21,`settings.federated`)),Vv(3),yh(LD(34,23,t.federated?`state.yes`:`state.no`)),Vv(4),yh(LD(38,25,`dashboard.workspace`)),Vv(3),yh(t.workspace?.root??LD(41,27,`dashboard.noWorkspace`))}}function re(e,o){e&1&&(ki(0,`div`,10),ah(1,`ui-state-badge`,17),ki(2,`span`),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`empty.noData.hint`)))}function le(e,o){if(e&1&&(ki(0,`span`),DD(1),kD(2,`t`),pl()),e&2){let t=XI(2);Vv(),ml(` · `,FD(2,1,`common.updatedAt`,AD(4,ae,t.stamp(o))))}}function de(e,o){if(e&1&&(ki(0,`span`,20),DD(1),pl()),e&2){let t=XI();Vv(),yh(t.updated_at)}}function ce(e,o){if(e&1&&(ki(0,`small`,20),DD(1),pl()),e&2){let t=XI().$implicit;Vv(),yh(t.detail)}}function se(e,o){if(e&1&&(ki(0,`li`),ah(1,`ui-state-badge`,22),jI(2,ce,2,1,`small`,20),pl()),e&2){let t=o.$implicit;Vv(),sh(`state`,t.state||`UNVERIFIED`)(`labelOverride`,t.id),Vv(),HI(t.detail?2:-1)}}function pe(e,o){if(e&1&&(ki(0,`ul`,21),$I(1,se,3,3,`li`,null,N),pl()),e&2){let t=XI();Vv(),zI(t.checks)}}function me(e,o){if(e&1&&(ki(0,`p`,18),ah(1,`ui-state-badge`,19),ki(2,`span`,20),DD(3),kD(4,`t`),kD(5,`t`),pl(),jI(6,de,2,1,`span`,20),pl(),jI(7,pe,3,0,`ul`,21)),e&2){let t=o;Vv(),sh(`state`,t.state||`UNVERIFIED`),Vv(2),vh(``,LD(4,5,`dashboard.profile`),`: `,t.profile??LD(5,7,`state.none`)),Vv(3),HI(t.updated_at?6:-1),Vv(),HI(t.checks.length?7:-1)}}function ue(e,o){e&1&&(ki(0,`div`,10),ah(1,`ui-state-badge`,17),ki(2,`span`),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`empty.noData.hint`)))}function _e(e,o){if(e&1&&(ki(0,`span`,23)(1,`span`,24),DD(2),pl(),ah(3,`i`,25),pl()),e&2){let t=o.$implicit;$i(`data-state`,t.state)(`title`,t.state),Vv(2),yh(t.id)}}function ge(e,o){if(e&1&&(ki(0,`div`,14),$I(1,_e,4,3,`span`,23,N),pl()),e&2){let t=XI(2);Vv(),zI(t.store.capabilities())}}function ve(e,o){e&1&&(ah(0,`ui-empty`,15),kD(1,`t`)),e&2&&sh(`title`,LD(1,1,`dashboard.none`))}function xe(e,o){if(e&1){let t=YI();ki(0,`section`,5)(1,`div`,7)(2,`div`)(3,`h2`),DD(4),kD(5,`t`),pl(),ki(6,`p`,8)(7,`code`),DD(8,`bootstrap`),pl()()()(),jI(9,oe,42,29,`dl`,9)(10,re,5,3,`div`,10),pl(),ki(11,`section`,11)(12,`div`,7)(13,`div`)(14,`h2`),DD(15),kD(16,`t`),pl(),ki(17,`p`,8)(18,`code`),DD(19,`GET /api/v1/installation/status`),pl(),jI(20,le,3,6,`span`),pl()(),ki(21,`button`,12),kD(22,`t`),uh(`click`,function(){Yu(t);let g=XI();return Qu(g.store.refreshHealth())}),ah(23,`ui-icon`,4),pl()(),jI(24,me,8,9)(25,ue,5,3,`div`,10),pl(),ki(26,`section`,13)(27,`div`,7)(28,`div`)(29,`h2`),DD(30),kD(31,`t`),pl(),ki(32,`p`,8)(33,`code`),DD(34,`bootstrap`),pl()()()(),jI(35,ge,3,0,`div`,14)(36,ve,2,3,`ui-empty`,15),pl(),ah(37,`inventory-panel`)}if(e&2){let t,s,g,f=XI();Vv(4),yh(LD(5,9,`explorer.identity`)),Vv(5),HI((t=f.descriptor())?9:10,t),Vv(6),yh(LD(16,11,`dashboard.health`)),Vv(5),HI((s=f.store.refreshedAt())?20:-1,s),Vv(),$i(`aria-label`,LD(22,13,`state.refresh`)),Vv(2),sh(`size`,14),Vv(),HI((g=f.health())?24:25,g),Vv(6),yh(LD(31,15,`dashboard.capabilities`)),Vv(5),HI(f.store.capabilities().length?35:36)}}function fe(e,o){if(e&1&&(ki(0,`span`),DD(1),kD(2,`t`),pl()),e&2){let t=XI(2);Vv(),ml(` · `,FD(2,1,`common.updatedAt`,AD(4,ae,t.stamp(o))))}}function ye(e,o){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let t=XI();Vv(),yh(t.cli)}}function be(e,o){e&1&&ah(0,`ui-state-badge`,17)}function Ce(e,o){e&1&&ah(0,`ui-state-badge`,17)}function Se(e,o){e&1&&(ki(0,`span`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`state.absent`)))}function he(e,o){if(e&1&&(ki(0,`code`,16),DD(1),pl()),e&2){let t=XI();$i(`title`,t.checkout),Vv(),yh(t.checkout)}}function Ee(e,o){e&1&&ah(0,`ui-state-badge`,17)}function De(e,o){e&1&&(ki(0,`span`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`federation.mcpAbsent`)))}function ke(e,o){if(e&1&&(ki(0,`code`),DD(1),pl()),e&2){let t=o.$implicit;Vv(),yh(t)}}function Ie(e,o){if(e&1&&(ki(0,`span`,20),DD(1),kD(2,`t`),pl(),ki(3,`span`,30),$I(4,ke,2,1,`code`,null,BI),pl()),e&2){let t=XI(),s=XI();Vv(),yh(LD(2,1,`federation.mcpReady`)),Vv(3),zI(s.mcpKeys(t.mcp))}}function Pe(e,o){e&1&&(ki(0,`div`,10),ah(1,`ui-state-badge`,17),pl())}function Fe(e,o){e&1&&(ki(0,`p`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`state.none`)))}function we(e,o){if(e&1&&(ki(0,`small`,20),DD(1),pl()),e&2){let t=XI().$implicit;Vv(),yh(t.detail)}}function Te(e,o){if(e&1&&(ki(0,`li`),ah(1,`ui-state-badge`,22),jI(2,we,2,1,`small`,20),pl()),e&2){let t=o.$implicit;Vv(),sh(`state`,t.status||`UNVERIFIED`)(`labelOverride`,t.id),Vv(),HI(t.detail?2:-1)}}function Me(e,o){if(e&1&&(ki(0,`ul`,21),$I(1,Te,3,3,`li`,null,N),pl()),e&2){let t=XI();Vv(),zI(t.checks)}}function Ne(e,o){e&1&&(ki(0,`div`,10),ah(1,`ui-state-badge`,17),pl())}function Be(e,o){e&1&&(ki(0,`p`,20),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`state.none`)))}function Oe(e,o){if(e&1&&(ki(0,`li`),DD(1),pl()),e&2){let t=o.$implicit;Vv(),yh(t)}}function je(e,o){if(e&1&&(ki(0,`ul`,29),$I(1,Oe,2,1,`li`,null,BI),pl()),e&2){let t=XI();Vv(),zI(t.notes)}}function Re(e,o){if(e&1){let t=YI();ki(0,`section`,5)(1,`div`,7)(2,`div`)(3,`h2`),DD(4),kD(5,`t`),pl(),ki(6,`p`,8)(7,`code`),DD(8,`GET /api/v1/federation`),pl(),jI(9,fe,3,6,`span`),pl()(),ki(10,`button`,12),kD(11,`t`),uh(`click`,function(){Yu(t);let g=XI();return Qu(g.loadSpecialists())}),ah(12,`ui-icon`,4),pl()(),ki(13,`dl`,9)(14,`div`)(15,`dt`),DD(16),kD(17,`t`),pl(),ki(18,`dd`)(19,`code`),DD(20),pl()()(),ki(21,`div`)(22,`dt`),DD(23),kD(24,`t`),pl(),ki(25,`dd`),ah(26,`ui-state-badge`,19),pl()(),ki(27,`div`)(28,`dt`),DD(29),kD(30,`t`),pl(),ki(31,`dd`),DD(32),pl()(),ki(33,`div`)(34,`dt`),DD(35),kD(36,`t`),pl(),ki(37,`dd`),jI(38,ye,2,1,`code`)(39,be,1,0,`ui-state-badge`,17),pl()()()(),ki(40,`section`,26)(41,`div`,7)(42,`div`)(43,`h2`),DD(44),kD(45,`t`),pl(),ki(46,`p`,8)(47,`code`),DD(48,`GET /api/v1/federation`),pl()()()(),ki(49,`dl`,9)(50,`div`)(51,`dt`),DD(52),kD(53,`t`),pl(),ki(54,`dd`),jI(55,Ce,1,0,`ui-state-badge`,17)(56,Se,3,3,`span`,20)(57,he,2,2,`code`,16),pl()(),ki(58,`div`)(59,`dt`),DD(60),kD(61,`t`),pl(),ki(62,`dd`),jI(63,Ee,1,0,`ui-state-badge`,17)(64,De,3,3,`span`,20)(65,Ie,6,3),pl()()()(),ki(66,`section`,27)(67,`div`,7)(68,`div`)(69,`h2`),DD(70),kD(71,`t`),pl(),ki(72,`p`,8)(73,`code`),DD(74,`GET /api/v1/federation`),pl()()()(),jI(75,Pe,2,0,`div`,10)(76,Fe,3,3,`p`,20)(77,Me,3,0,`ul`,21),pl(),ki(78,`section`,28)(79,`div`,7)(80,`div`)(81,`h2`),DD(82),kD(83,`t`),pl(),ki(84,`p`,8)(85,`code`),DD(86,`GET /api/v1/federation`),pl()()()(),jI(87,Ne,2,0,`div`,10)(88,Be,3,3,`p`,20)(89,je,3,0,`ul`,29),pl()}if(e&2){let t,s=o,g=XI();Vv(4),yh(LD(5,21,`explorer.identity`)),Vv(5),HI((t=g.fed.loadedAt())?9:-1,t),Vv(),$i(`aria-label`,LD(11,23,`state.refresh`)),Vv(2),sh(`size`,14),Vv(4),yh(LD(17,25,`table.id`)),Vv(4),yh(s.provider),Vv(3),yh(LD(24,27,`skills.state`)),Vv(3),sh(`state`,s.state??s.status??`UNVERIFIED`),Vv(3),yh(LD(30,29,`settings.version`)),Vv(3),yh(g.specialistVersion(s)??`—`),Vv(3),yh(LD(36,31,`settings.cli`)),Vv(3),HI(s.cli?38:39),Vv(6),yh(LD(45,33,`explorer.presence`)),Vv(8),yh(LD(53,35,`explorer.checkout`)),Vv(3),HI(s.checkout===void 0?55:s.checkout===null?56:57),Vv(5),yh(LD(61,37,`mcp.title`)),Vv(3),HI(s.mcp===void 0?63:s.mcp===null?64:65),Vv(7),yh(LD(71,39,`fdoc.checks`)),Vv(5),HI(s.checks===void 0?75:s.checks.length?77:76),Vv(7),yh(LD(83,41,`explorer.notes`)),Vv(5),HI(s.notes===void 0?87:s.notes.length?89:88)}}function Ve(e,o){if(e&1&&(ki(0,`section`,5)(1,`div`,7)(2,`div`)(3,`h2`),DD(4),kD(5,`t`),pl(),ki(6,`p`,8)(7,`code`),DD(8,`GET /api/v1/federation`),pl()()()(),ki(9,`div`,10),ah(10,`ui-state-badge`,17),ki(11,`span`),DD(12),kD(13,`t`),pl()(),ki(14,`dl`,9)(15,`div`)(16,`dt`),DD(17),kD(18,`t`),pl(),ki(19,`dd`)(20,`code`),DD(21),pl()()()()()),e&2){let t=XI();Vv(4),yh(LD(5,4,`explorer.identity`)),Vv(8),yh(LD(13,6,`explorer.registryOnly`)),Vv(5),yh(LD(18,8,`table.id`)),Vv(4),yh(t.id())}}function Ue(e,o){e&1&&(ah(0,`ui-empty`,6),kD(1,`t`)),e&2&&sh(`title`,LD(1,1,`explorer.notFound`))}function qe(e,o){if(e&1&&(ki(0,`section`,31)(1,`div`,10),ah(2,`ui-state-badge`,17),ki(3,`span`),DD(4),kD(5,`t`),pl()(),ki(6,`dl`,9)(7,`div`)(8,`dt`),DD(9),kD(10,`t`),pl(),ki(11,`dd`)(12,`code`),DD(13),pl()()()()()),e&2){let t=XI(2);Vv(4),yh(LD(5,3,`federation.unavailable`)),Vv(5),yh(LD(10,5,`table.id`)),Vv(4),yh(t.id())}}function ze(e,o){if(e&1){let t=YI();ki(0,`ui-error`,34),uh(`retry`,function(){Yu(t);let g=XI(2);return Qu(g.loadSpecialists())}),pl()}e&2&&sh(`error`,o)}function $e(e,o){e&1&&(ki(0,`div`,33),kD(1,`t`),ah(2,`ui-skeleton`,35)(3,`ui-skeleton`,36),pl()),e&2&&($i(`aria-label`,LD(1,2,`state.loading`)),Vv(3),sh(`lines`,4))}function Ae(e,o){if(e&1&&jI(0,qe,14,7,`section`,31)(1,ze,1,1,`ui-error`,32)(2,$e,4,4,`div`,33),e&2){let t,s=XI();HI(s.fed.unavailable()?0:(t=s.fed.error())?1:2,t)}}var ne=class e{route=g(V);api=g(hg);store=g(g$1);id=Te$1(`self`);fed=new l;inventory=CL(E);health=zr(()=>this.store.health());descriptor=zr(()=>this.store.descriptor());view=zr(()=>{let o=this.id(),t=this.descriptor();if(o===`self`||t!==null&&o===t.forge_id)return{kind:`serving`};let s=this.fed.data();if(!s)return{kind:`pending`};let g=s.specialists.find(f=>f.provider===o);return g?{kind:`specialist`,specialist:g}:s.installed_forges.includes(o)?{kind:`registry`}:{kind:`missing`}});specialist=zr(()=>{let o=this.view();return o.kind===`specialist`?o.specialist:null});title=zr(()=>this.view().kind===`serving`?this.descriptor()?.forge_name??this.id():this.id());specialistVersion=f;stamp=y;constructor(){this.route.paramMap.pipe(ie()).subscribe(o=>{let t=o.get(`id`)??`self`;this.id.set(t),t!==`self`&&t!==this.store.descriptor()?.forge_id&&this.loadSpecialists()})}async loadSpecialists(){await this.fed.load(()=>this.api.federation())}async reload(){this.view().kind===`serving`?await Promise.allSettled([this.store.refreshHealth(),this.inventory()?.loadCounts()??Promise.resolve()]):await this.loadSpecialists()}mcpKeys(o){return Object.keys(o)}static ɵfac=function(t){return new(t||e)};static ɵcmp=sl({type:e,selectors:[[`page-forge-detail`]],viewQuery:function(t,s){t&1&&hh(s.inventory,E,5),t&2&&oD()},decls:15,vars:17,consts:[[`routerLink`,`/forges`,1,`back`],[`name`,`chevron-left`,3,`size`],[3,`title`,`subtitle`],[1,`btn`,3,`click`],[`name`,`refresh`,3,`size`],[`data-section`,`identity`,1,`card`],[`icon`,`search`,3,`title`],[1,`sec__head`],[1,`src`],[1,`kv`],[`role`,`note`,1,`unv`],[`data-section`,`health`,1,`card`],[1,`icon-btn`,3,`click`],[`data-section`,`capabilities`,1,`card`],[1,`caps`],[`icon`,`dashboard`,3,`title`],[1,`path`],[`state`,`UNVERIFIED`],[1,`meta`],[3,`state`],[1,`muted`],[1,`checks`],[3,`state`,`labelOverride`],[1,`cap`],[1,`cap__id`],[`aria-hidden`,`true`,1,`cap__dot`],[`data-section`,`presence`,1,`card`],[`data-section`,`checks`,1,`card`],[`data-section`,`notes`,1,`card`],[1,`notes`],[1,`mcp-keys`],[1,`card`],[3,`error`],[`role`,`status`],[3,`retry`,`error`],[`kind`,`card`],[`kind`,`row`,3,`lines`]],template:function(t,s){if(t&1&&(ki(0,`a`,0),ah(1,`ui-icon`,1),DD(2),kD(3,`t`),pl(),ki(4,`ui-page-header`,2),kD(5,`t`),ki(6,`button`,3),uh(`click`,function(){return s.reload()}),ah(7,`ui-icon`,4),DD(8),kD(9,`t`),pl()(),jI(10,xe,38,17),jI(11,Re,90,43),jI(12,Ve,22,10,`section`,5),jI(13,Ue,2,3,`ui-empty`,6),jI(14,Ae,3,1)),t&2){let g;Vv(),sh(`size`,14),Vv(),ml(``,LD(3,11,`explorer.back`),` `),Vv(2),sh(`title`,s.title())(`subtitle`,LD(5,13,`explorer.detail.subtitle`)),Vv(3),sh(`size`,15),Vv(),ml(` `,LD(9,15,`state.refresh`),` `),Vv(2),HI(s.view().kind===`serving`?10:-1),Vv(),HI((g=s.specialist())?11:-1,g),Vv(),HI(s.view().kind===`registry`?12:-1),Vv(),HI(s.view().kind===`missing`?13:-1),Vv(),HI(s.view().kind===`pending`?14:-1)}},dependencies:[Nt,_$2,I,_$1,w,Eg,h,E,yg],styles:[`.back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-bottom:var(--%NS%space-3);font-size:var(--%NS%font-sm);font-weight:600;color:var(--%NS%fg-muted);text-decoration:none}.back[_ngcontent-%COMP%]:hover{color:var(--%NS%fg)}.card[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.sec__head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.sec__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-lg);font-weight:650}.src[_ngcontent-%COMP%]{margin:4px 0 0;font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted)}.kv[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-2);margin:0}.kv[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:var(--%NS%space-3)}.kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{min-width:9rem;color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm)}.kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;min-width:0}.meta[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.checks[_ngcontent-%COMP%], .notes[_ngcontent-%COMP%]{list-style:none;margin:var(--%NS%space-2) 0 0;padding:0;display:grid;gap:6px}.checks[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2)}.unv[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3);padding:var(--%NS%space-3);margin-bottom:var(--%NS%space-3);border:1px dashed color-mix(in srgb,var(--%NS%warn) 55%,transparent);border-radius:var(--%NS%radius-md);background:var(--%NS%warn-bg);font-size:var(--%NS%font-sm)}.caps[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--%NS%space-2)}.mcp-keys[_ngcontent-%COMP%]{display:inline-flex;flex-wrap:wrap;gap:4px;margin-left:6px}.muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.path[_ngcontent-%COMP%]{display:inline-block;max-width:60ch;overflow-wrap:anywhere}inventory-panel[_ngcontent-%COMP%]{display:block;margin-bottom:var(--%NS%space-4)}`]})};export{ne as ForgeDetailPage};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,B as Te,Bt as zr,Et as pl,F as RD,G as XI,It as yg,K as YI,Lt as yh,O as LD,P as Qu,Rt as zI,U as Vv,V as Tg,_ as FD,_t as jn,c as $i,ct as gh,dt as hg,g as Eg,gt as jI,jt as uh,kt as sh,l as AD,m as DD,o as y,q as Yu,s as $I,st as g,u as BI,vt as kD,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as _}from"./chunk-BaQMhq-G.js";import{t as w}from"./chunk-BVKnCv85.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$1}from"./chunk-C4gpbtbP.js";var J=()=>[1,2,3];var Q=t=>({count:t});var M=(t,i)=>i.id;function W(t,i){if(t&1){let e=YI();ki(0,`ui-error`,14),uh(`retry`,function(){Yu(e);let d=XI();return Qu(d.load())}),pl()}t&2&&sh(`error`,i)}function X(t,i){t&1&&ah(0,`ui-skeleton`,15)}function Y(t,i){t&1&&(ki(0,`section`,2),$I(1,X,1,0,`ui-skeleton`,15,BI),pl()),t&2&&(Vv(),zI(RD(0,J)))}function Z(t,i){if(t&1&&(ki(0,`span`),DD(1),pl()),t&2){let e=XI();Vv(),yh(e.detail)}}function ee(t,i){if(t&1&&DD(0),t&2){let e=XI(2);ml(` — `,e.unlock,` `)}}function te(t,i){if(t&1&&(ki(0,`p`,18)(1,`code`),DD(2),pl(),jI(3,ee,1,1),pl()),t&2){let e=XI();Vv(2),yh(e.refusal),Vv(),HI(e.unlock?3:-1)}}function ie(t,i){if(t&1&&(ki(0,`section`,3)(1,`p`,16),ah(2,`ui-state-badge`,17),jI(3,Z,2,1,`span`),pl(),jI(4,te,4,2,`p`,18),pl()),t&2){let e=i;Vv(2),sh(`state`,e.status),Vv(),HI(e.detail?3:-1),Vv(),HI(e.refusal?4:-1)}}function ne(t,i){t&1&&(ki(0,`span`,21),ah(1,`ui-icon`,24),DD(2),kD(3,`t`),pl()),t&2&&(Vv(),sh(`size`,12),Vv(),ml(` `,LD(3,2,`profiles.current`),` `))}function ae(t,i){if(t&1&&(ki(0,`li`),DD(1),pl()),t&2){let e=i.$implicit;$i(`data-on`,e.on||null),Vv(),yh(e.id)}}function oe(t,i){if(t&1){let e=YI();ki(0,`button`,25),uh(`click`,function(){Yu(e);let d=XI().$implicit,y=XI();return Qu(y.apply(d.id))}),DD(1),kD(2,`t`),pl()}if(t&2){let e=XI(2);sh(`disabled`,e.busy()),Vv(),ml(` `,LD(2,2,`profiles.apply`),` `)}}function re(t,i){if(t&1&&(ki(0,`article`,5)(1,`div`,19)(2,`h2`),ah(3,`ui-icon`,20),DD(4),pl(),jI(5,ne,4,4,`span`,21),pl(),ki(6,`p`,8),DD(7),kD(8,`t`),pl(),ki(9,`ul`,22),$I(10,ae,2,2,`li`,null,M),pl(),jI(12,oe,3,4,`button`,23),pl()),t&2){let e=i.$implicit,o=XI();$i(`data-current`,e.current||null),Vv(3),sh(`size`,16),Vv(),yh(e.id),Vv(),HI(e.current?5:-1),Vv(2),yh(LD(8,6,o.description(e))),Vv(3),zI(o.componentList(e)),Vv(2),HI(e.current?-1:12)}}function le(t,i){t&1&&(ah(0,`ui-empty`,26),kD(1,`t`),kD(2,`t`)),t&2&&sh(`title`,LD(1,2,`empty.noData`))(`hint`,LD(2,4,`empty.noData.hint`))}function pe(t,i){if(t&1&&jI(0,le,3,6,`ui-empty`,26),t&2){let e=XI();HI(!e.error()&&!e.loading()?0:-1)}}function ce(t,i){if(t&1&&(ki(0,`option`,12),DD(1),pl()),t&2){let e=i.$implicit,o=XI();sh(`value`,e.id)(`selected`,e.id===o.compareA()),Vv(),yh(e.id)}}function de(t,i){if(t&1&&(ki(0,`option`,12),DD(1),pl()),t&2){let e=i.$implicit,o=XI();sh(`value`,e.id)(`selected`,e.id===o.compareB()),Vv(),yh(e.id)}}function se(t,i){t&1&&ah(0,`ui-icon`,24),t&2&&sh(`size`,14)}function me(t,i){t&1&&ah(0,`ui-icon`,24),t&2&&sh(`size`,14)}function _e(t,i){if(t&1&&(ki(0,`tr`)(1,`td`)(2,`code`),DD(3),pl()(),ki(4,`td`),jI(5,se,1,1,`ui-icon`,24),DD(6),kD(7,`t`),pl(),ki(8,`td`),jI(9,me,1,1,`ui-icon`,24),DD(10),kD(11,`t`),pl()()),t&2){let e=i.$implicit;$i(`data-diff`,e.a!==e.b||null),Vv(3),yh(e.id),Vv(),gh(`on`,e.a)(`off`,!e.a),Vv(),HI(e.a?5:-1),Vv(),ml(` `,LD(7,14,e.a?`state.enabled`:`state.disabled`),` `),Vv(2),gh(`on`,e.b)(`off`,!e.b),Vv(),HI(e.b?9:-1),Vv(),ml(` `,LD(11,16,e.b?`state.enabled`:`state.disabled`),` `)}}function fe(t,i){t&1&&(DD(0),kD(1,`t`)),t&2&&ml(` `,LD(1,1,`profiles.compare.same`),` `)}function ue(t,i){if(t&1&&(DD(0),kD(1,`t`)),t&2){let e=XI(2);ml(` `,FD(1,1,`profiles.compare.differences`,AD(4,Q,e.diffCount())),` `)}}function ge(t,i){if(t&1&&(ki(0,`table`,27)(1,`thead`)(2,`tr`)(3,`th`),DD(4),kD(5,`t`),pl(),ki(6,`th`),DD(7),pl(),ki(8,`th`),DD(9),pl()()(),ki(10,`tbody`),$I(11,_e,12,18,`tr`,null,M),pl()(),ki(13,`p`,28),jI(14,fe,2,3)(15,ue,2,6),pl()),t&2){let e=XI();Vv(4),yh(LD(5,4,`profiles.compare.component`)),Vv(3),yh(e.compareA()),Vv(2),yh(e.compareB()),Vv(2),zI(e.compareRows()),Vv(3),HI(e.diffCount()===0?14:15)}}function ye(t,i){t&1&&(ah(0,`ui-empty`,13),kD(1,`t`)),t&2&&sh(`title`,LD(1,1,`empty.noData`))}var G=class t{api=g(hg);confirm=g(y);profiles=Te([]);receipt=Te(null);error=Te(null);busy=Te(!1);loading=Te(!0);compareA=Te(null);compareB=Te(null);constructor(){this.load()}async load(){this.error.set(null),this.loading.set(!0);try{let i=await Tg(this.api.profiles());this.profiles.set(i),i.length&&(!this.compareA()||!this.compareB())&&(this.compareA.set(i.find(e=>e.current)?.id??i[0].id),this.compareB.set(i.find(e=>!e.current)?.id??i[0].id))}catch(i){this.error.set(i instanceof jn?i:new jn(0))}finally{this.loading.set(!1)}}description(i){return i.description_key}componentList(i){return Object.entries(i.components??{}).map(([e,o])=>({id:e,on:o}))}pickCompare(i,e){let o=e.target.value;i===`a`?this.compareA.set(o):this.compareB.set(o)}compareRows=zr(()=>{let i=this.profiles().find(d=>d.id===this.compareA()),e=this.profiles().find(d=>d.id===this.compareB());if(!i||!e)return[];let o=[...new Set([...Object.keys(i.components??{}),...Object.keys(e.components??{})])];return o.sort(),o.map(d=>({id:d,a:!!i.components?.[d],b:!!e.components?.[d]}))});diffCount=zr(()=>this.compareRows().filter(i=>i.a!==i.b).length);async apply(i){if(await this.confirm.ask({title:`profiles.apply`,message:`profiles.apply.confirm`,confirmKey:`profiles.apply`})){this.busy.set(!0);try{let o=await Tg(this.api.profilesApply(i));this.receipt.set(o),await this.load()}catch(o){this.error.set(o instanceof jn?o:new jn(0))}finally{this.busy.set(!1)}}}static ɵfac=function(e){return new(e||t)};static ɵcmp=sl({type:t,selectors:[[`page-profiles`]],decls:36,vars:29,consts:[[3,`title`,`subtitle`],[3,`error`],[`role`,`status`,`aria-live`,`polite`,1,`grid`],[`data-lift`,``,1,`card`,`receipt`],[1,`grid`],[`data-lift`,``,1,`card`],[`aria-labelledby`,`compare-h`,1,`card`,`compare`],[`id`,`compare-h`],[1,`muted`],[1,`compare__pickers`],[1,`picker`],[1,`input`,3,`change`],[3,`value`,`selected`],[3,`title`],[3,`retry`,`error`],[`kind`,`card`],[1,`receipt__status`],[3,`state`],[1,`refusal`],[1,`card__head`],[`name`,`profiles`,3,`size`],[1,`current`],[1,`comps`],[1,`btn`,`btn--primary`,3,`disabled`],[`name`,`check`,3,`size`],[1,`btn`,`btn--primary`,3,`click`,`disabled`],[3,`title`,`hint`],[1,`table`,`compare__table`],[1,`muted`,`compare__summary`]],template:function(e,o){if(e&1&&(ah(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),jI(3,W,1,1,`ui-error`,1),jI(4,Y,3,1,`section`,2),jI(5,ie,5,3,`section`,3),ki(6,`section`,4),$I(7,re,13,8,`article`,5,M,!1,pe,1,1),pl(),ki(10,`section`,6)(11,`h2`,7),DD(12),kD(13,`t`),pl(),ki(14,`p`,8),DD(15),kD(16,`t`),pl(),ki(17,`div`,9)(18,`label`,10)(19,`span`),DD(20),kD(21,`t`),pl(),ki(22,`select`,11),kD(23,`t`),uh(`change`,function(y){return o.pickCompare(`a`,y)}),$I(24,ce,2,3,`option`,12,M),pl()(),ki(26,`label`,10)(27,`span`),DD(28),kD(29,`t`),pl(),ki(30,`select`,11),kD(31,`t`),uh(`change`,function(y){return o.pickCompare(`b`,y)}),$I(32,de,2,3,`option`,12,M),pl()()(),jI(34,ge,16,6)(35,ye,2,3,`ui-empty`,13),pl()),e&2){let d,y;sh(`title`,LD(1,13,`profiles.title`))(`subtitle`,LD(2,15,`profiles.subtitle`)),Vv(3),HI((d=o.error())?3:-1,d),Vv(),HI(o.loading()?4:-1),Vv(),HI((y=o.receipt())?5:-1,y),Vv(2),zI(o.profiles()),Vv(5),yh(LD(13,17,`profiles.compare`)),Vv(3),yh(LD(16,19,`profiles.compare.hint`)),Vv(5),yh(LD(21,21,`profiles.compare.a`)),Vv(2),$i(`aria-label`,LD(23,23,`profiles.compare.a`)),Vv(2),zI(o.profiles()),Vv(4),yh(LD(29,25,`profiles.compare.b`)),Vv(2),$i(`aria-label`,LD(31,27,`profiles.compare.b`)),Vv(2),zI(o.profiles()),Vv(2),HI(o.compareRows().length?34:o.profiles().length&&!o.loading()?35:-1)}},dependencies:[_$1,_,w,I,Eg,h,yg],styles:[`.grid[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-4);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin-bottom:var(--%NS%space-4)}.card[data-current][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--%NS%accent) 55%,transparent);background:linear-gradient(160deg,color-mix(in srgb,var(--%NS%accent) 7%,var(--%NS%bg-elevated)) 0%,var(--%NS%bg-elevated) 55%);box-shadow:var(--%NS%elev-card),0 0 0 1px color-mix(in srgb,var(--%NS%accent) 18%,transparent)}.card__head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.card[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0 0 var(--%NS%space-3);font-weight:650;letter-spacing:-.01em;font-size:var(--%NS%font-lg)}.card__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;text-transform:capitalize;display:inline-flex;align-items:center;gap:var(--%NS%space-2)}.card__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent)}.muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted);margin-top:0}.comps[_ngcontent-%COMP%]{list-style:none;padding:0;margin:var(--%NS%space-3) 0;display:flex;flex-wrap:wrap;gap:6px}.comps[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{font-size:var(--%NS%font-xs);padding:2px 8px;border-radius:var(--%NS%radius-pill);border:1px solid var(--%NS%border);color:var(--%NS%fg-muted)}.comps[_ngcontent-%COMP%] li[data-on][_ngcontent-%COMP%]{border-color:var(--%NS%ok);color:var(--%NS%ok)}.current[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;color:var(--%NS%accent);font-weight:600;font-size:var(--%NS%font-xs);background:var(--%NS%accent-bg);border:1px solid color-mix(in srgb,var(--%NS%accent) 35%,transparent);border-radius:var(--%NS%radius-pill);padding:2px var(--%NS%space-2)}.receipt[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.receipt__status[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3);margin:0}.refusal[_ngcontent-%COMP%]{color:var(--%NS%warn)}.compare[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.compare__pickers[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--%NS%space-3);margin:var(--%NS%space-3) 0}.picker[_ngcontent-%COMP%]{display:grid;gap:4px;font-size:var(--%NS%font-sm);font-weight:600}.picker[_ngcontent-%COMP%] .input[_ngcontent-%COMP%]{min-width:180px}.compare__table[_ngcontent-%COMP%] td.on[_ngcontent-%COMP%]{color:var(--%NS%ok);font-weight:600}.compare__table[_ngcontent-%COMP%] td.off[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.compare__table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{vertical-align:-2px;margin-right:4px}.compare__table[_ngcontent-%COMP%] tr[data-diff][_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%accent) 7%,transparent)}.compare__table[_ngcontent-%COMP%] tr[data-diff][_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child{border-left:3px solid var(--%NS%accent);font-weight:650}.compare__summary[_ngcontent-%COMP%]{margin:var(--%NS%space-2) 0 0}`]})};export{G as ProfilesPage};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,B as Te$1,Bt as zr,Et as pl,G as XI,H as UI,It as yg,K as YI,Lt as yh,Mt as us,O as LD,P as Qu,Rt as zI,U as Vv,V as Tg,_ as FD,_t as jn,c as $i,dt as hg,g as Eg,gt as jI,jt as uh,kt as sh,l as AD,m as DD,o as y,q as Yu,r as g$1,s as $I,st as g,u as BI,vt as kD,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as _}from"./chunk-BaQMhq-G.js";import{t as w}from"./chunk-BVKnCv85.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$1}from"./chunk-C4gpbtbP.js";var ne=e=>({count:e});var O=(e,a)=>a.id;var ae=(e,a)=>a.host;var le=(e,a)=>a.path;function oe(e,a){e&1&&ah(0,`ui-icon`,44),e&2&&sh(`size`,13)}function re(e,a){e&1&&ah(0,`ui-icon`,38),e&2&&sh(`size`,13)}function se(e,a){if(e&1&&DD(0),e&2){let t=XI().$index;ml(` `,t+1,` `)}}function pe(e,a){if(e&1&&(ki(0,`li`,5)(1,`span`,43),jI(2,oe,1,1,`ui-icon`,44)(3,re,1,1,`ui-icon`,38)(4,se,1,1),pl(),ki(5,`span`,45),DD(6),kD(7,`t`),pl()()),e&2){let t=a.$implicit,r=a.$index,m=XI();$i(`data-state`,m.stepState(r))(`aria-current`,r===m.stepIndex()?`step`:null),Vv(2),HI(m.stepState(r)===`done`?2:m.stepState(r)===`warn`?3:4),Vv(4),yh(LD(7,4,t))}}function de(e,a){e&1&&ah(0,`ui-state-badge`,10),e&2&&sh(`state`,a.state)}function ce(e,a){if(e&1&&(ki(0,`small`,18),DD(1),pl()),e&2){let t=XI().$implicit;Vv(),yh(t.detail)}}function me(e,a){if(e&1&&(ki(0,`li`),ah(1,`ui-state-badge`,49),jI(2,ce,2,1,`small`,18),pl()),e&2){let t=a.$implicit;Vv(),sh(`state`,t.state)(`labelOverride`,t.id),Vv(),HI(t.detail?2:-1)}}function _e(e,a){if(e&1&&(ki(0,`ul`,47),$I(1,me,3,3,`li`,null,O),pl()),e&2){let t=XI();Vv(),zI(t.checks)}}function ue(e,a){if(e&1&&(ki(0,`div`,48),ah(1,`ui-icon`,50),ki(2,`span`,51)(3,`strong`),DD(4),kD(5,`t`),pl(),ki(6,`small`,52),DD(7),kD(8,`t`),pl()()()),e&2){let t=a;$i(`data-state`,t.state),Vv(),sh(`size`,15),Vv(3),yh(LD(5,4,`install.portal.`+t.state)),Vv(3),yh(t.install_root||t.manifest||LD(8,6,`install.portal.vendored.hint`))}}function fe(e,a){if(e&1&&(ki(0,`dl`,46)(1,`div`)(2,`dt`),DD(3),kD(4,`t`),pl(),ki(5,`dd`),DD(6),kD(7,`t`),pl()(),ki(8,`div`)(9,`dt`),DD(10),kD(11,`t`),pl(),ki(12,`dd`),DD(13),kD(14,`t`),pl()(),ki(15,`div`)(16,`dt`),DD(17),kD(18,`t`),pl(),ki(19,`dd`),DD(20),kD(21,`t`),pl()()(),jI(22,_e,3,0,`ul`,47),jI(23,ue,9,8,`div`,48)),e&2){let t,r=a;Vv(3),yh(LD(4,8,`dashboard.workspace`)),Vv(3),yh(r.workspace??LD(7,10,`dashboard.noWorkspace`)),Vv(4),yh(LD(11,12,`dashboard.profile`)),Vv(3),yh(r.profile??LD(14,14,`state.unknown`)),Vv(4),yh(LD(18,16,`install.receipt.status`)),Vv(3),yh(r.updated_at??LD(21,18,`state.unknown`)),Vv(2),HI(r.checks.length?22:-1),Vv(),HI((t=r.forge_portal)?23:-1,t)}}function ge(e,a){e&1&&ah(0,`ui-skeleton`,11),e&2&&sh(`lines`,2)}function ye(e,a){if(e&1&&(ki(0,`li`)(1,`strong`),DD(2),pl(),ah(3,`ui-state-badge`,10),ki(4,`span`,18),DD(5),kD(6,`t`),pl()()),e&2){let t=a.$implicit;Vv(2),yh(t.host),Vv(),sh(`state`,t.integration),Vv(2),yh(LD(6,3,t.detected?`hosts.detected`:`hostState.NOT_DETECTED`))}}function xe(e,a){if(e&1&&(ki(0,`ul`,53),$I(1,ye,7,5,`li`,null,ae),pl()),e&2){let t=XI();Vv(),zI(t)}}function ve(e,a){e&1&&(ki(0,`p`,18),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`hosts.notDetected`)))}function he(e,a){e&1&&jI(0,xe,3,0,`ul`,53)(1,ve,3,3,`p`,18),e&2&&HI(a.length?0:1)}function be(e,a){e&1&&ah(0,`ui-skeleton`,11),e&2&&sh(`lines`,2)}function Ce(e,a){if(e&1){let t=YI();ki(0,`label`,15)(1,`input`,54),uh(`change`,function(){let m=Yu(t).$implicit,E=XI();return Qu(E.scope.set(m.id))}),pl(),ki(2,`span`)(3,`strong`),DD(4),kD(5,`t`),pl(),ki(6,`small`),DD(7),kD(8,`t`),pl()()()}if(e&2){let t=a.$implicit,r=XI();$i(`data-active`,r.scope()===t.id||null),Vv(),sh(`value`,t.id)(`checked`,r.scope()===t.id)(`disabled`,r.locked()),Vv(3),yh(LD(5,6,t.label)),Vv(3),yh(LD(8,8,t.hint))}}function Se(e,a){if(e&1){let t=YI();ki(0,`label`,17)(1,`input`,55),uh(`change`,function(){let m=Yu(t).$implicit,E=XI();return Qu(E.toggle(m.id))}),pl(),ki(2,`span`),DD(3),pl()()}if(e&2){let t=a.$implicit,r=XI();$i(`data-active`,r.selected().has(t.id)||null),Vv(),sh(`checked`,r.selected().has(t.id))(`disabled`,r.locked()),Vv(2),yh(t.id)}}function Ie(e,a){if(e&1){let t=YI();ki(0,`label`,15)(1,`input`,56),uh(`change`,function(){let m=Yu(t).$implicit,E=XI();return Qu(E.host.set(m.id))}),pl(),ki(2,`span`)(3,`strong`),DD(4),kD(5,`t`),pl(),ki(6,`small`),DD(7),pl()()()}if(e&2){let t=a.$implicit,r=XI();$i(`data-active`,r.host()===t.id||null),Vv(),sh(`value`,t.id)(`checked`,r.host()===t.id)(`disabled`,r.locked()),Vv(3),yh(t.labelKey?LD(5,6,t.labelKey):t.label),Vv(3),yh(r.hostState(t.id))}}function Pe(e,a){if(e&1){let t=YI();ki(0,`label`,15)(1,`input`,57),uh(`change`,function(){let m=Yu(t).$implicit,E=XI();return Qu(E.profile.set(m.id))}),pl(),ki(2,`span`)(3,`strong`),DD(4),kD(5,`t`),pl(),ki(6,`small`),DD(7),kD(8,`t`),pl()()()}if(e&2){let t=a.$implicit,r=XI();$i(`data-active`,r.profile()===t.id||null),Vv(),sh(`value`,t.id)(`checked`,r.profile()===t.id)(`disabled`,r.locked()),Vv(3),yh(LD(5,6,t.label)),Vv(3),yh(LD(8,8,t.hint))}}function Ee(e,a){if(e&1){let t=YI();ki(0,`label`,15)(1,`input`,58),uh(`change`,function(){let m=Yu(t).$implicit,E=XI();return Qu(E.executionProfile.set(m.id))}),pl(),ki(2,`span`)(3,`strong`),DD(4),kD(5,`t`),pl(),ki(6,`small`),DD(7),kD(8,`t`),pl()()()}if(e&2){let t=a.$implicit,r=XI();$i(`data-active`,r.executionProfile()===t.id||null),Vv(),sh(`value`,t.id)(`checked`,r.executionProfile()===t.id)(`disabled`,r.locked()),Vv(3),yh(LD(5,6,t.label)),Vv(3),yh(LD(8,8,t.hint))}}function we(e,a){if(e&1&&(ki(0,`code`,59),DD(1),pl()),e&2){let t=a.$implicit;Vv(),yh(t)}}function ke(e,a){if(e&1&&(ki(0,`span`,21),$I(1,we,2,1,`code`,59,BI),pl()),e&2){let t=XI();Vv(),zI(t.selected())}}function Ne(e,a){e&1&&(ki(0,`span`,18),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`install.summary.empty`)))}function Me(e,a){e&1&&(ki(0,`section`,24),ah(1,`div`,60),ki(2,`p`,18),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`install.planning`)))}function Oe(e,a){if(e&1&&(ki(0,`li`,68)(1,`code`,69),DD(2),pl(),ki(3,`span`,70)(4,`del`,71),DD(5),pl(),ah(6,`ui-icon`,72),ki(7,`ins`,73),DD(8),pl()()()),e&2){let t=a.$implicit;Vv(2),yh(t.path),Vv(3),yh(t.before??`—`),Vv(),sh(`size`,13),Vv(2),yh(t.after??`—`)}}function Be(e,a){if(e&1&&(ki(0,`ul`,66),$I(1,Oe,9,4,`li`,68,le),pl()),e&2){let t=XI();Vv(),zI(t)}}function Te(e,a){e&1&&(ki(0,`p`,67),ah(1,`ui-icon`,38),DD(2),kD(3,`t`),pl()),e&2&&(Vv(),sh(`size`,14),Vv(),ml(` `,LD(3,2,`install.diff.none`),` `))}function De(e,a){e&1&&jI(0,Be,3,0,`ul`,66)(1,Te,4,4,`p`,67),e&2&&HI(a.length?0:1)}function Ve(e,a){if(e&1&&(ki(0,`li`)(1,`code`),DD(2),pl(),ki(3,`code`,75),DD(4),pl(),ki(5,`span`),DD(6),pl()()),e&2){let t=a.$implicit;Vv(2),yh(t.kind),Vv(2),yh(t.status),Vv(2),yh(t.path)}}function Re(e,a){if(e&1&&(ki(0,`h3`,12),DD(1),kD(2,`t`),pl(),ki(3,`ul`,74),$I(4,Ve,7,3,`li`,null,UI),pl()),e&2){let t=XI();Vv(),yh(LD(2,1,`federation.actions`)),Vv(3),zI(t.actions)}}function ze(e,a){if(e&1&&(ki(0,`details`,61)(1,`summary`),DD(2),kD(3,`t`),pl(),ki(4,`pre`),DD(5),pl()()),e&2){let t=XI(),r=XI();Vv(2),yh(LD(3,2,`fdoc.raw`)),Vv(3),yh(r.planText(t.plan))}}function $e(e,a){if(e&1){let t=YI();ki(0,`section`,25)(1,`div`,7)(2,`h2`)(3,`span`,9),DD(4,`5`),pl(),DD(5),kD(6,`t`),pl(),ah(7,`ui-state-badge`,10),pl(),ki(8,`p`,18),DD(9),kD(10,`t`),pl(),jI(11,De,2,1),jI(12,Re,6,3),jI(13,ze,6,4,`details`,61),ki(14,`div`,62)(15,`button`,63),uh(`click`,function(){Yu(t);let m=XI();return Qu(m.proceedToConfirm())}),ah(16,`ui-icon`,64),DD(17),kD(18,`t`),pl(),ki(19,`button`,65),uh(`click`,function(){Yu(t);let m=XI();return Qu(m.reset())}),DD(20),kD(21,`t`),pl()()()}if(e&2){let t,r=a,m=XI();Vv(5),ml(``,LD(6,9,`install.step.reviewDiff`),` `),Vv(2),sh(`state`,r.status),Vv(2),ml(` `,FD(10,11,`install.plan.changes`,AD(18,ne,r.actions?.length??0)),` `),Vv(2),HI((t=m.diffRows())?11:-1,t),Vv(),HI(r.actions?.length?12:-1),Vv(),HI(r.plan?13:-1),Vv(3),sh(`size`,15),Vv(),ml(` `,LD(18,14,`install.confirm.next`),` `),Vv(3),yh(LD(21,16,`state.cancel`))}}function Fe(e,a){if(e&1){let t=YI();ki(0,`section`,26)(1,`h2`)(2,`span`,9),DD(3,`6`),pl(),DD(4),kD(5,`t`),pl(),ki(6,`p`,18),DD(7),kD(8,`t`),pl(),ki(9,`dl`,20)(10,`div`)(11,`dt`),DD(12),kD(13,`t`),pl(),ki(14,`dd`),DD(15),kD(16,`t`),pl()(),ki(17,`div`)(18,`dt`),DD(19),kD(20,`t`),pl(),ki(21,`dd`),DD(22),pl()(),ki(23,`div`)(24,`dt`),DD(25),kD(26,`t`),pl(),ki(27,`dd`),DD(28),kD(29,`t`),pl()(),ki(30,`div`)(31,`dt`),DD(32),kD(33,`t`),pl(),ki(34,`dd`),DD(35),pl()()(),ki(36,`div`,62)(37,`button`,63),uh(`click`,function(){Yu(t);let m=XI();return Qu(m.confirmExecute())}),ah(38,`ui-icon`,64),DD(39),kD(40,`t`),pl(),ki(41,`button`,65),uh(`click`,function(){Yu(t);let m=XI();return Qu(m.backToReview())}),DD(42),kD(43,`t`),pl(),ki(44,`button`,65),uh(`click`,function(){Yu(t);let m=XI();return Qu(m.reset())}),DD(45),kD(46,`t`),pl()()()}if(e&2){let t=XI();Vv(4),yh(LD(5,14,`install.step.confirm`)),Vv(3),yh(LD(8,16,`install.confirm.hint`)),Vv(5),yh(LD(13,18,`install.summary.scope`)),Vv(3),yh(LD(16,20,t.scopeLabel())),Vv(4),yh(LD(20,22,`install.summary.host`)),Vv(3),yh(t.hostLabel()),Vv(3),yh(LD(26,24,`install.summary.profile`)),Vv(3),yh(LD(29,26,t.profileLabel())),Vv(4),yh(LD(33,28,`federation.actions`)),Vv(3),yh(a.actions?.length??0),Vv(3),sh(`size`,15),Vv(),ml(` `,LD(40,30,`install.confirm.execute`),` `),Vv(3),yh(LD(43,32,`install.confirm.back`)),Vv(3),yh(LD(46,34,`state.cancel`))}}function je(e,a){e&1&&(ki(0,`section`,24),ah(1,`div`,60),ki(2,`p`,18),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`install.running`)))}function He(e,a){e&1&&(ki(0,`section`,24),ah(1,`div`,60),ki(2,`p`,18),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`install.verify.running`)))}function Le(e,a){e&1&&ah(0,`ui-state-badge`,10),e&2&&sh(`state`,a.state)}function Ae(e,a){if(e&1&&(ki(0,`small`,18),DD(1),pl()),e&2){let t=XI().$implicit;Vv(),yh(t.detail)}}function Ke(e,a){e&1&&(ki(0,`span`,78),DD(1),kD(2,`t`),pl()),e&2&&(Vv(),yh(LD(2,1,`fdoc.repairable`)))}function Qe(e,a){if(e&1&&(ki(0,`li`),ah(1,`ui-state-badge`,49),ki(2,`code`),DD(3),pl(),jI(4,Ae,2,1,`small`,18),jI(5,Ke,3,3,`span`,78),pl()),e&2){let t=a.$implicit;Vv(),sh(`state`,t.status??`unverified`)(`labelOverride`,t.status??null),Vv(2),yh(t.id??`—`),Vv(),HI(t.detail?4:-1),Vv(),HI(t.repairable?5:-1)}}function Ue(e,a){if(e&1&&(ki(0,`ul`,47),$I(1,Qe,6,5,`li`,null,UI),pl()),e&2){let t=XI(2);Vv(),zI(t.result().checks)}}function Je(e,a){e&1&&(ki(0,`p`,77),ah(1,`ui-state-badge`,36),DD(2),kD(3,`t`),pl()),e&2&&(Vv(2),ml(` `,LD(3,1,`install.verify.unverified`),` `))}function We(e,a){if(e&1&&(ki(0,`section`,27)(1,`h2`)(2,`span`,9),DD(3,`8`),pl(),DD(4),kD(5,`t`),pl(),ki(6,`div`,76),jI(7,Le,1,1,`ui-state-badge`,10),jI(8,Ue,3,0,`ul`,47)(9,Je,4,3,`p`,77),pl()()),e&2){let t,r=XI();Vv(4),yh(LD(5,3,`install.step.verify`)),Vv(3),HI((t=r.store.health())?7:-1,t),Vv(),HI(r.result().checks?.length?8:9)}}function qe(e,a){if(e&1&&(ki(0,`p`,18)(1,`code`),DD(2),pl()()),e&2){let t=XI();Vv(2),yh(t.stage)}}function Ge(e,a){if(e&1&&(ki(0,`p`),DD(1),pl()),e&2){let t=XI();Vv(),yh(t.detail)}}function Xe(e,a){if(e&1&&DD(0),e&2){let t=XI(2);ml(` — `,t.unlock,` `)}}function Ye(e,a){if(e&1&&(ki(0,`p`,79)(1,`code`),DD(2),pl(),jI(3,Xe,1,1),pl()),e&2){let t=XI();Vv(2),yh(t.refusal),Vv(),HI(t.unlock?3:-1)}}function Ze(e,a){if(e&1&&(ki(0,`li`)(1,`code`),DD(2),pl(),ki(3,`span`),DD(4),pl()()),e&2){let t=a.$implicit;Vv(2),yh(t.status),Vv(2),yh(t.path)}}function et(e,a){if(e&1&&(ki(0,`h3`,12),DD(1),kD(2,`t`),pl(),ki(3,`ul`,74),$I(4,Ze,5,2,`li`,null,UI),pl()),e&2){let t=XI();Vv(),yh(LD(2,1,`federation.actions`)),Vv(3),zI(t.actions)}}function tt(e,a){if(e&1){let t=YI();ki(0,`section`,28)(1,`div`,7)(2,`h2`)(3,`span`,9),DD(4,`9`),pl(),DD(5),kD(6,`t`),pl(),ah(7,`ui-state-badge`,10),pl(),jI(8,qe,3,1,`p`,18),jI(9,Ge,2,1,`p`),jI(10,Ye,4,2,`p`,79),jI(11,et,6,3),ki(12,`div`,62)(13,`button`,1),uh(`click`,function(){Yu(t);let m=XI();return Qu(m.reinstall())}),ah(14,`ui-icon`,2),DD(15),kD(16,`t`),pl(),ki(17,`button`,1),uh(`click`,function(){Yu(t);let m=XI();return Qu(m.reset())}),DD(18),kD(19,`t`),pl()()()}if(e&2){let t=a,r=XI();Vv(5),yh(LD(6,11,`install.step.receipt`)),Vv(2),sh(`state`,t.status),Vv(),HI(t.stage?8:-1),Vv(),HI(t.detail?9:-1),Vv(),HI(t.refusal?10:-1),Vv(),HI(t.actions?.length?11:-1),Vv(2),sh(`disabled`,r.busy()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(16,13,`install.reinstall`),` `),Vv(2),sh(`disabled`,r.busy()),Vv(),ml(` `,LD(19,15,`install.newPlan`),` `)}}function it(e,a){if(e&1){let t=YI();ki(0,`ui-error`,80),uh(`retry`,function(){Yu(t);let m=XI();return Qu(m.reset())}),pl()}if(e&2){let t=XI();sh(`error`,t.error())}}function nt(e,a){e&1&&(ki(0,`div`,39),ah(1,`div`,60),ki(2,`p`,18),DD(3),kD(4,`t`),pl()()),e&2&&(Vv(3),yh(LD(4,1,`install.running`)))}function at(e,a){if(e&1){let t=YI();ki(0,`ui-error`,80),uh(`retry`,function(){Yu(t);let m=XI();return Qu(m.opError.set(null))}),pl()}e&2&&sh(`error`,a)}function lt(e,a){if(e&1&&(ki(0,`span`,18),DD(1),pl()),e&2){let t=XI();Vv(),yh(t.r.detail)}}function ot(e,a){if(e&1&&DD(0),e&2){let t=XI(2);ml(` — `,t.r.unlock,` `)}}function rt(e,a){if(e&1&&(ki(0,`p`,82)(1,`code`),DD(2),pl(),jI(3,ot,1,1),pl()),e&2){let t=XI();Vv(2),yh(t.r.refusal),Vv(),HI(t.r.unlock?3:-1)}}function st(e,a){if(e&1&&(ki(0,`li`)(1,`code`),DD(2),pl(),ki(3,`span`),DD(4),pl()()),e&2){let t=a.$implicit;Vv(2),yh(t.status),Vv(2),yh(t.path)}}function pt(e,a){if(e&1&&(ki(0,`ul`,74),$I(1,st,5,2,`li`,null,UI),pl()),e&2){let t=XI();Vv(),zI(t.r.actions)}}function dt(e,a){if(e&1&&(ki(0,`div`,40)(1,`p`,81)(2,`strong`),DD(3),kD(4,`t`),pl(),ah(5,`ui-state-badge`,10),jI(6,lt,2,1,`span`,18),pl(),jI(7,rt,4,2,`p`,82),jI(8,pt,3,0,`ul`,74),pl()),e&2){let t=a,r=XI();Vv(3),yh(LD(4,5,r.opLabel(t.op))),Vv(2),sh(`state`,t.r.status),Vv(),HI(t.r.detail?6:-1),Vv(),HI(t.r.refusal?7:-1),Vv(),HI(t.r.actions?.length?8:-1)}}function ct(e,a){if(e&1&&(ki(0,`tr`)(1,`td`),DD(2),pl(),ki(3,`td`)(4,`code`),DD(5),pl()(),ki(6,`td`),ah(7,`ui-state-badge`,49),pl(),ki(8,`td`),DD(9),pl()()),e&2){let t=a.$implicit,r=XI(3);Vv(2),yh(t.label),Vv(3),yh(t.verb),Vv(2),sh(`state`,r.stageKind(t.stage))(`labelOverride`,t.stage),Vv(2),yh(t.exit_code??`—`)}}function mt(e,a){if(e&1&&(ki(0,`table`,83)(1,`thead`)(2,`tr`)(3,`th`),DD(4),kD(5,`t`),pl(),ki(6,`th`),DD(7),kD(8,`t`),pl(),ki(9,`th`),DD(10),kD(11,`t`),pl(),ki(12,`th`),DD(13),kD(14,`t`),pl()()(),ki(15,`tbody`),$I(16,ct,10,5,`tr`,null,O),pl()()),e&2){let t=XI();Vv(4),yh(LD(5,4,`table.task`)),Vv(3),yh(LD(8,6,`table.verb`)),Vv(3),yh(LD(11,8,`table.stage`)),Vv(3),yh(LD(14,10,`table.exit`)),Vv(3),zI(t)}}function _t(e,a){e&1&&(ah(0,`ui-empty`,84),kD(1,`t`)),e&2&&sh(`title`,LD(1,1,`tasks.empty`))}function ut(e,a){e&1&&jI(0,mt,18,12,`table`,83)(1,_t,2,3,`ui-empty`,84),e&2&&HI(a.length?0:1)}function ft(e,a){e&1&&ah(0,`ui-skeleton`,11),e&2&&sh(`lines`,3)}var te=class e{api=g(hg);i18n=g(us);confirm=g(y);store=g(g$1);phase=Te$1(`idle`);reached=Te$1(0);failedAt=Te$1(0);scope=Te$1(`project`);host=Te$1(`all`);profile=Te$1(`recommended`);executionProfile=Te$1(`balanced`);hostDetections=Te$1(null);selected=Te$1(new Set([`skills`,`agents`,`mcp`]));planReceipt=Te$1(null);result=Te$1(null);error=Te$1(null);history=Te$1(null);opBusy=Te$1(null);opReceipt=Te$1(null);opError=Te$1(null);busy=zr(()=>[`planning`,`executing`,`verifying`].includes(this.phase())||this.opBusy()!==null);locked=zr(()=>this.phase()!==`idle`);stepKeys=[`install.step.discover`,`install.step.select`,`install.step.configure`,`install.step.plan`,`install.step.reviewDiff`,`install.step.confirm`,`install.step.execute`,`install.step.verify`,`install.step.receipt`];stepIndex(){switch(this.phase()){case`planning`:return 3;case`review`:return 4;case`confirming`:return 5;case`executing`:return 6;case`verifying`:return 7;case`receipt`:case`refused`:return 8;case`error`:return this.failedAt();default:return 2}}stepState(a){let t=this.phase();if(t===`idle`)return a<=2?`active`:`todo`;if(t===`receipt`)return`done`;if(t===`refused`||t===`error`){let m=t===`refused`?this.reached():this.failedAt();return a===m?`warn`:a<m?`done`:`todo`}let r=this.stepIndex();return a<r?`done`:a===r?`active`:`todo`}diffRows=zr(()=>{let a=this.planReceipt();if(!a)return[];let t=[],r=new Set,m=(k,S,M)=>{let x=k==null?``:String(k);!x||r.has(x)||(r.add(x),t.push({path:x,before:ie(S),after:ie(M)}))},E=a.plan??{};for(let k of[`diff`,`changes`,`files`]){let S=E[k];if(Array.isArray(S)){for(let M of S)if(M&&typeof M==`object`){let x=M;m(x.path??x.file??x.target,x.before,x.after)}}else if(S&&typeof S==`object`){for(let[M,x]of Object.entries(S))if(x&&typeof x==`object`){let T=x;m(M,T.before,T.after)}}}for(let k of a.actions??[]){let S=k;(S.before!==void 0||S.after!==void 0)&&m(k.path,S.before,S.after)}return t});hostChoices=[{id:`all`,labelKey:`install.host.all`},{id:`claude`,label:`Claude`},{id:`devin`,label:`Devin`},{id:`codex`,label:`Codex`},{id:`copilot`,label:`Copilot`}];profiles=[{id:`minimal`,label:`profiles.economy`,hint:`profiles.economy.desc`},{id:`recommended`,label:`profiles.balanced`,hint:`profiles.balanced.desc`},{id:`full`,label:`profiles.full`,hint:`profiles.full.desc`}];executionProfiles=[{id:`economy`,label:`profiles.economy`,hint:`profiles.economy.desc`},{id:`balanced`,label:`profiles.balanced`,hint:`profiles.balanced.desc`},{id:`deep`,label:`profiles.deep`,hint:`profiles.deep.desc`}];scopes=[{id:`project`,label:`install.scope.project`,hint:`install.scope.project.hint`},{id:`workspace`,label:`install.scope.workspace`,hint:`install.scope.workspace.hint`},{id:`user`,label:`install.scope.user`,hint:`install.scope.user.hint`}];components=[{id:`skills`},{id:`agents`},{id:`mcp`},{id:`tui`},{id:`graph-studio`}];constructor(){this.load()}async load(){await Promise.all([Tg(this.api.hosts()).then(a=>this.hostDetections.set(a)).catch(()=>this.hostDetections.set([])),this.loadHistory(),this.store.refreshHealth()])}async loadHistory(){try{this.history.set(await Tg(this.api.tasks()))}catch{this.history.set(this.history()??[])}}hostState(a){if(a===`all`)return`—`;let t=(this.hostDetections()??[]).find(r=>r.host===a);return t?t.detected?this.i18n.t(`hostState.${t.integration}`):this.i18n.t(`hostState.NOT_DETECTED`):`…`}scopeLabel(){return this.scopes.find(a=>a.id===this.scope())?.label??this.scope()}hostLabel(){let a=this.hostChoices.find(t=>t.id===this.host());return a?.labelKey?this.i18n.t(a.labelKey):a?.label??this.host()}profileLabel(){return this.profiles.find(a=>a.id===this.profile())?.label??this.profile()}executionProfileLabel(){return this.executionProfiles.find(a=>a.id===this.executionProfile())?.label??`profiles.${this.executionProfile()}`}opLabel(a){return a===`repair`?`install.repair`:`install.uninstall`}stageKind(a){let t=(a||``).toLowerCase();return t===`completed`?`supported`:[`failed`,`refused`,`cancelled`].includes(t)?`error`:[`awaiting_approval`,`partial`].includes(t)?`warn`:[`running`,`planning`,`verifying`].includes(t)?`info`:`muted`}toggle(a){if(this.locked())return;let t=new Set(this.selected());t.has(a)?t.delete(a):t.add(a),this.selected.set(t)}planText(a){return JSON.stringify(a,null,2)}async plan(){if(!(this.phase()!==`idle`||this.busy()||this.selected().size===0)){this.error.set(null),this.result.set(null),this.planReceipt.set(null),this.phase.set(`planning`),this.reached.set(3);try{let a=await Tg(this.api.installationPlan(this.selectionPayload()));if(a.refusal){this.result.set(a),this.phase.set(`refused`);return}this.planReceipt.set(a),this.reached.set(4),this.phase.set(`review`)}catch(a){this.fail(a)}}}proceedToConfirm(){this.phase()!==`review`||!this.planReceipt()||(this.reached.set(5),this.phase.set(`confirming`))}backToReview(){this.phase()===`confirming`&&(this.phase.set(`review`),this.reached.set(4))}async confirmExecute(){let a=this.planReceipt();if(!(this.phase()!==`confirming`||!a?.plan||!a.plan_token)){this.error.set(null),this.phase.set(`executing`),this.reached.set(6);try{let t=await Tg(this.api.installationApply(a.plan,a.plan_token));if(this.result.set(t),t.refusal){this.phase.set(`refused`);return}this.phase.set(`verifying`),this.reached.set(7),await this.store.refreshHealth(),this.reached.set(8),this.phase.set(`receipt`),await this.loadHistory()}catch(t){this.fail(t)}}}async reinstall(){this.busy()||(this.planReceipt.set(null),this.result.set(null),this.phase.set(`idle`),this.reached.set(0),await this.plan())}async repair(){this.opBusy()||!await this.confirm.ask({title:`install.repair`,message:`install.repair.confirm`,confirmKey:`install.repair`,danger:!0})||await this.runQuickOp(`repair`,()=>this.api.installationRepair())}async uninstall(){this.opBusy()||!await this.confirm.ask({title:`install.uninstall`,message:`install.uninstall.confirm`,confirmKey:`install.uninstall.confirmBtn`,danger:!0})||(await this.runQuickOp(`uninstall`,()=>this.api.installationUninstall()),this.opReceipt()&&!this.opReceipt().r.refusal&&!this.opError()&&this.reset())}async runQuickOp(a,t){this.opBusy.set(a),this.opReceipt.set(null),this.opError.set(null);try{let r=await Tg(t());this.opReceipt.set({op:a,r})}catch(r){this.opError.set(r instanceof jn?r:new jn(0))}finally{this.opBusy.set(null)}await this.store.refreshHealth(),await this.loadHistory()}reset(){this.phase.set(`idle`),this.reached.set(0),this.planReceipt.set(null),this.result.set(null),this.error.set(null)}fail(a){this.failedAt.set(this.stepIndex()),this.error.set(a instanceof jn?a:new jn(0)),this.phase.set(`error`)}selectionPayload(){return{scope:this.scope(),host:this.host(),profile:this.profile(),hosts:this.host()===`all`?this.hostChoices.filter(a=>a.id!==`all`).map(a=>a.id):[this.host()],component_profile:this.profile(),execution_profile:this.executionProfile(),components:Object.fromEntries([...this.selected()].map(a=>[a,!0]))}}static ɵfac=function(t){return new(t||e)};static ɵcmp=sl({type:e,selectors:[[`page-install`]],decls:177,vars:142,consts:[[3,`title`,`subtitle`],[1,`btn`,3,`click`,`disabled`],[`name`,`refresh`,3,`size`],[1,`card`],[1,`stepper`],[1,`stepper__step`],[`aria-labelledby`,`discover-h`,1,`card`,`discover`],[1,`card__heading`],[`id`,`discover-h`],[`aria-hidden`,`true`,1,`stepnum`],[3,`state`],[`kind`,`row`,3,`lines`],[1,`subhead`],[1,`config-grid`],[`role`,`radiogroup`,1,`scopes`],[1,`scope`],[1,`comps`],[1,`comp`],[1,`muted`],[1,`card`,`summary`],[1,`summary__kv`],[1,`summary__comps`],[1,`btn`,`btn--primary`,3,`click`,`disabled`],[`name`,`install`,3,`size`],[`role`,`status`,`aria-live`,`polite`,1,`card`,`running`],[`data-lift`,``,1,`card`,`plan`],[`data-lift`,``,1,`card`,`confirm`],[1,`card`,`verify`],[`data-lift`,``,1,`card`,`receipt`],[3,`error`],[`aria-labelledby`,`ops-h`,1,`card`,`ops`],[`id`,`ops-h`],[1,`ops__list`],[1,`op`],[1,`op__body`],[`data-state`,`unverified`,1,`op`],[`state`,`unverified`],[1,`btn`,`btn--danger`,3,`click`,`disabled`],[`name`,`alert`,3,`size`],[`role`,`status`,`aria-live`,`polite`,1,`running`],[1,`op-receipt`],[`aria-labelledby`,`history-h`,1,`card`,`history`],[`id`,`history-h`],[`aria-hidden`,`true`,1,`stepper__dot`],[`name`,`check`,3,`size`],[1,`stepper__label`],[1,`discover__kv`],[1,`checks`],[1,`portal-row`],[3,`state`,`labelOverride`],[`name`,`gem`,3,`size`],[1,`portal-row__body`],[1,`mono`],[1,`hostlist`],[`type`,`radio`,`name`,`scope`,3,`change`,`value`,`checked`,`disabled`],[`type`,`checkbox`,3,`change`,`checked`,`disabled`],[`type`,`radio`,`name`,`host`,3,`change`,`value`,`checked`,`disabled`],[`type`,`radio`,`name`,`profile`,3,`change`,`value`,`checked`,`disabled`],[`type`,`radio`,`name`,`execution-profile`,3,`change`,`value`,`checked`,`disabled`],[1,`summary__chip`],[`aria-hidden`,`true`,1,`running__spinner`],[1,`raw`],[1,`row`],[1,`btn`,`btn--primary`,3,`click`],[`name`,`shield-check`,3,`size`],[1,`btn`,3,`click`],[1,`diff`],[`role`,`note`,1,`diff-none`],[1,`diff__row`],[1,`diff__path`],[1,`diff__pair`],[1,`diff__before`],[`name`,`chevron-right`,3,`size`],[1,`diff__after`],[1,`actions`],[1,`actions__status`],[1,`verify__row`],[1,`unverified`],[1,`repairable`],[`role`,`alert`,1,`refusal`],[3,`retry`,`error`],[1,`op-receipt__head`],[1,`refusal`],[1,`table`],[`icon`,`tasks`,3,`title`]],template:function(t,r){if(t&1&&(ki(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),ki(3,`button`,1),uh(`click`,function(){return r.load()}),ah(4,`ui-icon`,2),DD(5),kD(6,`t`),pl()(),ki(7,`section`,3)(8,`ol`,4),kD(9,`t`),$I(10,pe,8,6,`li`,5,BI),pl()(),ki(12,`section`,6)(13,`div`,7)(14,`h2`,8)(15,`span`,9),DD(16,`1`),pl(),DD(17),kD(18,`t`),pl(),jI(19,de,1,1,`ui-state-badge`,10),pl(),jI(20,fe,24,20)(21,ge,1,1,`ui-skeleton`,11),ki(22,`h3`,12),DD(23),kD(24,`t`),pl(),jI(25,he,2,1)(26,be,1,1,`ui-skeleton`,11),pl(),ki(27,`div`,13)(28,`section`,3)(29,`h2`)(30,`span`,9),DD(31,`2`),pl(),DD(32),kD(33,`t`),pl(),ki(34,`h3`,12),DD(35),kD(36,`t`),pl(),ki(37,`div`,14),kD(38,`t`),$I(39,Ce,9,10,`label`,15,O),pl(),ki(41,`h3`,12),DD(42),kD(43,`t`),pl(),ki(44,`div`,16),$I(45,Se,4,4,`label`,17,O),pl(),ki(47,`h2`)(48,`span`,9),DD(49,`3`),pl(),DD(50),kD(51,`t`),pl(),ki(52,`h3`,12),DD(53),kD(54,`t`),pl(),ki(55,`p`,18),DD(56),kD(57,`t`),pl(),ki(58,`div`,14),kD(59,`t`),$I(60,Ie,8,8,`label`,15,O),pl(),ki(62,`h3`,12),DD(63),kD(64,`t`),pl(),ki(65,`div`,14),kD(66,`t`),$I(67,Pe,9,10,`label`,15,O),pl(),ki(69,`h3`,12),DD(70),kD(71,`t`),pl(),ki(72,`div`,14),kD(73,`t`),$I(74,Ee,9,10,`label`,15,O),pl()(),ki(76,`aside`,19)(77,`h2`),DD(78),kD(79,`t`),pl(),ki(80,`dl`,20)(81,`div`)(82,`dt`),DD(83),kD(84,`t`),pl(),ki(85,`dd`),DD(86),kD(87,`t`),pl()(),ki(88,`div`)(89,`dt`),DD(90),kD(91,`t`),pl(),ki(92,`dd`),DD(93),pl()(),ki(94,`div`)(95,`dt`),DD(96),kD(97,`t`),pl(),ki(98,`dd`),DD(99),kD(100,`t`),pl()(),ki(101,`div`)(102,`dt`),DD(103),kD(104,`t`),pl(),ki(105,`dd`),DD(106),kD(107,`t`),pl()(),ki(108,`div`)(109,`dt`),DD(110),kD(111,`t`),pl(),ki(112,`dd`),jI(113,ke,3,0,`span`,21)(114,Ne,3,3,`span`,18),pl()()(),ki(115,`button`,22),uh(`click`,function(){return r.plan()}),ah(116,`ui-icon`,23),DD(117),kD(118,`t`),pl(),ki(119,`p`,18),DD(120),kD(121,`t`),pl()()(),jI(122,Me,5,3,`section`,24),jI(123,$e,22,20,`section`,25),jI(124,Fe,47,36,`section`,26),jI(125,je,5,3,`section`,24),jI(126,He,5,3,`section`,24),jI(127,We,10,5,`section`,27),jI(128,tt,20,17,`section`,28),jI(129,it,1,1,`ui-error`,29),ki(130,`section`,30)(131,`h2`,31),DD(132),kD(133,`t`),pl(),ki(134,`ul`,32)(135,`li`,33)(136,`span`,34)(137,`strong`),DD(138),kD(139,`t`),pl(),ki(140,`small`,18),DD(141),kD(142,`t`),pl()(),ki(143,`button`,1),uh(`click`,function(){return r.repair()}),ah(144,`ui-icon`,2),DD(145),kD(146,`t`),pl()(),ki(147,`li`,35)(148,`span`,34)(149,`strong`),DD(150),kD(151,`t`),pl(),ki(152,`small`,18),DD(153),kD(154,`t`),pl()(),ah(155,`ui-state-badge`,36),pl(),ki(156,`li`,33)(157,`span`,34)(158,`strong`),DD(159),kD(160,`t`),pl(),ki(161,`small`,18),DD(162),kD(163,`t`),pl()(),ki(164,`button`,37),uh(`click`,function(){return r.uninstall()}),ah(165,`ui-icon`,38),DD(166),kD(167,`t`),pl()()(),jI(168,nt,5,3,`div`,39),jI(169,at,1,1,`ui-error`,29),jI(170,dt,9,7,`div`,40),pl(),ki(171,`section`,41)(172,`h2`,42),DD(173),kD(174,`t`),pl(),jI(175,ut,2,1)(176,ft,1,1,`ui-skeleton`,11),pl()),t&2){let m,E,k,S,M,x,T,F,j;sh(`title`,LD(1,64,`install.title`))(`subtitle`,LD(2,66,`install.subtitle`)),Vv(3),sh(`disabled`,r.busy()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(6,68,`state.refresh`),` `),Vv(3),$i(`aria-label`,LD(9,70,`install.title`)),Vv(2),zI(r.stepKeys),Vv(7),ml(``,LD(18,72,`install.step.discover`),` `),Vv(2),HI((m=r.store.health())?19:-1,m),Vv(),HI((E=r.store.health())?20:21,E),Vv(3),yh(LD(24,74,`install.discover.hosts`)),Vv(2),HI((k=r.hostDetections())?25:26,k),Vv(7),yh(LD(33,76,`install.step.select`)),Vv(3),yh(LD(36,78,`install.scope`)),Vv(2),$i(`aria-label`,LD(38,80,`install.scope`)),Vv(2),zI(r.scopes),Vv(3),yh(LD(43,82,`install.components`)),Vv(3),zI(r.components),Vv(5),yh(LD(51,84,`install.step.configure`)),Vv(3),yh(LD(54,86,`install.hosts`)),Vv(3),yh(LD(57,88,`install.hosts.hint`)),Vv(2),$i(`aria-label`,LD(59,90,`install.hosts`)),Vv(2),zI(r.hostChoices),Vv(3),yh(LD(64,92,`install.profile`)),Vv(2),$i(`aria-label`,LD(66,94,`install.profile`)),Vv(2),zI(r.profiles),Vv(3),yh(LD(71,96,`install.executionProfile`)),Vv(2),$i(`aria-label`,LD(73,98,`install.executionProfile`)),Vv(2),zI(r.executionProfiles),Vv(4),yh(LD(79,100,`install.summary`)),Vv(5),yh(LD(84,102,`install.summary.scope`)),Vv(3),yh(LD(87,104,r.scopeLabel())),Vv(4),yh(LD(91,106,`install.summary.host`)),Vv(3),yh(r.hostLabel()),Vv(3),yh(LD(97,108,`install.summary.profile`)),Vv(3),yh(LD(100,110,r.profileLabel())),Vv(4),yh(LD(104,112,`install.summary.executionProfile`)),Vv(3),yh(LD(107,114,r.executionProfileLabel())),Vv(4),yh(LD(111,116,`install.summary.components`)),Vv(3),HI(r.selected().size?113:114),Vv(2),sh(`disabled`,r.locked()||r.busy()||!r.selected().size),Vv(),sh(`size`,15),Vv(),ml(` `,LD(118,118,`install.plan`),` `),Vv(3),yh(LD(121,120,`install.flow.hint`)),Vv(2),HI(r.phase()===`planning`?122:-1),Vv(),HI((S=r.phase()===`review`&&r.planReceipt())?123:-1,S),Vv(),HI((M=r.phase()===`confirming`&&r.planReceipt())?124:-1,M),Vv(),HI(r.phase()===`executing`?125:-1),Vv(),HI(r.phase()===`verifying`?126:-1),Vv(),HI(r.phase()===`receipt`&&r.result()&&!r.result().refusal?127:-1),Vv(),HI((x=(r.phase()===`receipt`||r.phase()===`refused`)&&r.result())?128:-1,x),Vv(),HI(r.phase()===`error`?129:-1),Vv(3),yh(LD(133,122,`install.ops.title`)),Vv(6),yh(LD(139,124,`install.repair`)),Vv(3),yh(LD(142,126,`install.ops.repair.hint`)),Vv(2),sh(`disabled`,r.busy()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(146,128,`install.repair`),` `),Vv(5),yh(LD(151,130,`install.ops.update`)),Vv(3),yh(LD(154,132,`install.ops.update.hint`)),Vv(6),yh(LD(160,134,`install.uninstall`)),Vv(3),yh(LD(163,136,`install.uninstall.confirm`)),Vv(2),sh(`disabled`,r.busy()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(167,138,`install.uninstall`),` `),Vv(2),HI(r.opBusy()?168:-1),Vv(),HI((T=r.opError())?169:-1,T),Vv(),HI((F=r.opReceipt())?170:-1,F),Vv(3),yh(LD(174,140,`tasks.recent`)),Vv(2),HI((j=r.history())?175:176,j)}},dependencies:[_$1,I,w,_,Eg,h,yg],styles:[`.card[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.card[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:var(--%NS%space-3) 0;font-size:var(--%NS%font-lg);font-weight:650;letter-spacing:-.01em;display:flex;align-items:center;gap:var(--%NS%space-2)}.card[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]:first-child{margin-top:0}.card__heading[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--%NS%space-3)}.card__heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-2)}.stepnum[_ngcontent-%COMP%]{display:grid;place-items:center;width:22px;height:22px;flex:none;border-radius:50%;font-size:var(--%NS%font-xs);font-weight:700;color:var(--%NS%accent);background:var(--%NS%accent-bg);border:1px solid color-mix(in srgb,var(--%NS%accent) 30%,transparent)}.subhead[_ngcontent-%COMP%]{margin:var(--%NS%space-4) 0 var(--%NS%space-2);font-size:var(--%NS%font-sm);font-weight:650;color:var(--%NS%fg-muted)}.discover__kv[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-2);margin:0 0 var(--%NS%space-3)}.discover__kv[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:var(--%NS%space-3);font-size:var(--%NS%font-sm)}.discover__kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.discover__kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;font-weight:600;overflow-wrap:anywhere}.checks[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0 0 var(--%NS%space-3);display:grid;gap:6px}.checks[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);flex-wrap:wrap}.hostlist[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0;display:grid;gap:6px}.hostlist[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);padding:6px var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md)}.hostlist[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{text-transform:capitalize;min-width:72px}.config-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,320px);gap:var(--%NS%space-4);align-items:start}.summary[_ngcontent-%COMP%]{position:sticky;top:calc(var(--%NS%topbar-h) + var(--%NS%space-4))}.summary__kv[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-2);margin:0 0 var(--%NS%space-4)}.summary__kv[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:var(--%NS%space-3);padding-bottom:var(--%NS%space-2);border-bottom:1px solid var(--%NS%border);font-size:var(--%NS%font-sm)}.summary__kv[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{border-bottom:0}.summary__kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.summary__kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;font-weight:600;text-align:right}.summary__comps[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--%NS%space-1);justify-content:flex-end}.summary__chip[_ngcontent-%COMP%]{padding:2px var(--%NS%space-2);border-radius:var(--%NS%radius-sm);background:var(--%NS%accent-bg);color:var(--%NS%accent-strong);font-family:var(--%NS%font-mono);font-size:var(--%NS%font-xs);font-weight:600}.running[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3);margin-top:var(--%NS%space-3)}.running[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}.running__spinner[_ngcontent-%COMP%]{width:18px;height:18px;flex:none;border-radius:50%;border:2px solid var(--%NS%accent-bg);border-top-color:var(--%NS%accent);animation:_ngcontent-%COMP%_fg-spin .8s linear infinite}@keyframes _ngcontent-%COMP%_fg-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.running__spinner[_ngcontent-%COMP%]{animation:none;border-top-color:var(--%NS%border-strong)}}.diff[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0 0 var(--%NS%space-3);display:grid;gap:6px;max-height:320px;overflow:auto}.diff__row[_ngcontent-%COMP%]{display:grid;gap:4px;padding:var(--%NS%space-2) var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);background:var(--%NS%bg)}.diff__path[_ngcontent-%COMP%]{font-weight:650;overflow-wrap:anywhere}.diff__pair[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);flex-wrap:wrap;font-family:var(--%NS%font-mono);font-size:var(--%NS%font-xs)}.diff__before[_ngcontent-%COMP%]{color:var(--%NS%error);text-decoration:line-through;overflow-wrap:anywhere}.diff__after[_ngcontent-%COMP%]{color:var(--%NS%ok);text-decoration:none;overflow-wrap:anywhere}.diff-none[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);color:var(--%NS%warn);font-size:var(--%NS%font-sm)}.actions[_ngcontent-%COMP%]{font-family:var(--%NS%font-mono);font-size:var(--%NS%font-sm);max-height:240px;overflow:auto;display:grid;gap:6px;list-style:none;padding:0}.actions[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;gap:var(--%NS%space-2);overflow-wrap:anywhere}.actions[_ngcontent-%COMP%] li[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{color:var(--%NS%accent);flex:none}.actions__status[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)!important}.raw[_ngcontent-%COMP%]{margin:var(--%NS%space-2) 0}.raw[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{background:var(--%NS%bg);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);padding:var(--%NS%space-3);overflow-x:auto;font-size:var(--%NS%font-xs)}.verify__row[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-3)}.unverified[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);margin:0;color:var(--%NS%warn);font-weight:550}.repairable[_ngcontent-%COMP%]{color:var(--%NS%accent);font-size:var(--%NS%font-xs);font-weight:650}.ops__list[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0;display:grid;gap:var(--%NS%space-2)}.op[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--%NS%space-3);padding:var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md)}.op[data-state=unverified][_ngcontent-%COMP%]{border-style:dashed;opacity:.8}.op__body[_ngcontent-%COMP%]{display:grid;gap:2px;min-width:0}.op__body[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.op-receipt[_ngcontent-%COMP%]{margin-top:var(--%NS%space-3);padding:var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);background:var(--%NS%bg)}.op-receipt__head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);flex-wrap:wrap;margin:0 0 var(--%NS%space-2)}.scopes[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-2);grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.scope[_ngcontent-%COMP%]{display:flex;gap:var(--%NS%space-2);align-items:flex-start;border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);padding:var(--%NS%space-3);cursor:pointer;transition:border-color var(--%NS%motion-fast),background var(--%NS%motion-fast),box-shadow var(--%NS%motion-fast)}.scope[_ngcontent-%COMP%]:hover{border-color:var(--%NS%border-strong);background:var(--%NS%bg-hover)}.scope[_ngcontent-%COMP%]:focus-within{border-color:var(--%NS%fg-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--%NS%fg-focus) 22%,transparent)}.scope[data-active][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--%NS%accent) 55%,transparent);background:var(--%NS%accent-bg);box-shadow:0 0 0 1px color-mix(in srgb,var(--%NS%accent) 22%,transparent)}.scope[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block;color:var(--%NS%fg-muted)}.scope[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{accent-color:var(--%NS%accent);margin-top:2px}.scope[_ngcontent-%COMP%] input[disabled][_ngcontent-%COMP%], .comp[_ngcontent-%COMP%] input[disabled][_ngcontent-%COMP%]{cursor:not-allowed}.comps[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--%NS%space-2);margin-bottom:var(--%NS%space-2)}.comp[_ngcontent-%COMP%]{display:flex;gap:6px;align-items:center;border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-pill);padding:4px var(--%NS%space-3);font-size:var(--%NS%font-sm);cursor:pointer;transition:border-color var(--%NS%motion-fast),background var(--%NS%motion-fast)}.comp[_ngcontent-%COMP%]:hover{border-color:var(--%NS%border-strong);background:var(--%NS%bg-hover)}.comp[_ngcontent-%COMP%]:focus-within{border-color:var(--%NS%fg-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--%NS%fg-focus) 22%,transparent)}.comp[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{accent-color:var(--%NS%accent)}.comp[data-active][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--%NS%accent) 55%,transparent);background:var(--%NS%accent-bg);font-weight:600}.row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--%NS%space-2);margin-top:var(--%NS%space-4)}.refusal[_ngcontent-%COMP%]{color:var(--%NS%warn)}.muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.mono[_ngcontent-%COMP%]{font-family:var(--%NS%font-mono)}@media(max-width:880px){.config-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.summary[_ngcontent-%COMP%]{position:static}}`]})};function ie(e){return e==null?null:typeof e==`object`?JSON.stringify(e):String(e)}export{te as InstallPage};
@@ -0,0 +1 @@
1
+ import{At as sl,Bt as zr,G as XI,It as yg,K as YI,Lt as yh,Mt as us,O as LD,P as Qu,T as JI,U as Vv,Y as Zi,gt as jI,it as eD,lt as gl,m as DD,pt as hl,q as Yu,rt as dh,st as g,vt as kD,y as HI,z as TL}from"./main-QDFVZK3T.js";var k=[`*`];function D(r,t){if(r&1&&(hl(0,`code`,3),DD(1),gl()),r&2){let e=XI();Vv(),yh(e.error().body.code)}}function I(r,t){if(r&1){let e=YI();hl(0,`button`,6),dh(`click`,function(){Yu(e);let P=XI();return Qu(P.retry.emit())}),DD(1),kD(2,`t`),gl()}r&2&&(Vv(),yh(LD(2,1,`error.retry`)))}var w=class r{i18n=g(us);error=Zi(null);retry=TL();message=zr(()=>{let t=this.error();if(!t)return this.i18n.t(`error.generic`);let e=t.body.message_key;if(e){let n=this.i18n.t(e);if(!n.startsWith(`⟪`))return n}return t.body.message||this.i18n.t(`error.generic`)});static ɵfac=function(e){return new(e||r)};static ɵcmp=sl({type:r,selectors:[[`ui-error`]],inputs:{error:[1,`error`]},outputs:{retry:`retry`},ngContentSelectors:k,decls:10,vars:6,consts:[[`role`,`alert`,1,`err`],[1,`err__title`],[1,`err__msg`],[1,`err__code`],[1,`err__actions`],[1,`btn`],[1,`btn`,3,`click`]],template:function(e,n){e&1&&(JI(),hl(0,`div`,0)(1,`p`,1),DD(2),kD(3,`t`),gl(),hl(4,`p`,2),DD(5),gl(),jI(6,D,2,1,`code`,3),hl(7,`div`,4),jI(8,I,3,3,`button`,5),eD(9),gl()()),e&2&&(Vv(2),yh(LD(3,4,`error.title`)),Vv(3),yh(n.message()),Vv(),HI(n.error()?.body?.code?6:-1),Vv(2),HI(n.error()?.body?.retryable!==!1?8:-1))},dependencies:[yg],styles:[`.err[_ngcontent-%COMP%]{display:grid;gap:8px;padding:var(--%NS%space-6);border:1px solid color-mix(in srgb,var(--%NS%error) 55%,transparent);border-left-width:3px;border-radius:var(--%NS%radius-lg);background:var(--%NS%error-bg);box-shadow:var(--%NS%elev-card)}.err__title[_ngcontent-%COMP%]{font-weight:700;color:var(--%NS%error);margin:0}.err__msg[_ngcontent-%COMP%]{margin:0;color:var(--%NS%fg)}.err__code[_ngcontent-%COMP%]{font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted)}.err__actions[_ngcontent-%COMP%]{display:flex;gap:var(--%NS%space-2)}`]})};export{w as t};
@@ -0,0 +1 @@
1
+ var e={"app.title":`Forge Portal`,"app.tagline":`agentic engineering, simplified`,"nav.dashboard":`Dashboard`,"nav.install":`Installation`,"nav.federation":`Forge family`,"nav.profiles":`Profiles`,"nav.hosts":`AI hosts`,"nav.mcp":`MCP`,"nav.skills":`Skills`,"nav.agents":`Agents`,"nav.tasks":`Tasks`,"nav.graph":`Graph Studio`,"nav.knowledge":`Knowledge`,"nav.settings":`Settings`,"nav.section.operate":`Operate`,"nav.section.configure":`Configure`,"nav.section.explore":`Explore`,"nav.collapse":`Collapse menu`,"nav.expand":`Expand menu`,"nav.skip":`Skip to content`,"command.open":`Search actions and pages…`,"command.hint":`Type to search pages, actions and help`,"command.empty":`Nothing found for that search.`,"state.loading":`Loading…`,"state.retry":`Retry`,"state.refresh":`Refresh`,"state.close":`Close`,"state.cancel":`Cancel`,"state.confirm":`Confirm`,"state.apply":`Apply`,"state.copy":`Copy`,"state.copied":`Copied`,"state.open":`Open`,"state.viewDetails":`View details`,"state.enabled":`Enabled`,"state.disabled":`Disabled`,"state.unknown":`Unknown`,"state.unverified":`Unverified`,"state.supported":`Supported`,"state.unsupported":`Unsupported`,"state.notApplicable":`Not applicable`,"state.absent":`Absent`,"state.required":`Required`,"state.optional":`Optional`,"state.yes":`Yes`,"state.no":`No`,"state.none":`None`,"state.all":`All`,"installState.NOT_INSTALLED":`Not installed`,"installState.INSTALLED":`Installed`,"installState.CONFIGURED":`Configured`,"installState.ACTIVE":`Active`,"installState.VERIFIED":`Verified`,"installState.DEGRADED":`Degraded`,"installState.BLOCKED":`Blocked`,"installState.FAILED":`Failed`,"mcpState.NOT_CONFIGURED":`Not configured`,"mcpState.CONFIGURED":`Configured`,"mcpState.STARTING":`Starting`,"mcpState.HANDSHAKE_VERIFIED":`Handshake verified`,"mcpState.TOOLS_DISCOVERED":`Tools discovered`,"mcpState.INVOCATION_VERIFIED":`Invocation verified`,"mcpState.DEGRADED":`Degraded`,"mcpState.FAILED":`Failed`,"dashboard.title":`Dashboard`,"dashboard.subtitle":`A real view of your Forge in this workspace.`,"dashboard.health":`Installation health`,"dashboard.workspace":`Workspace`,"dashboard.noWorkspace":`No workspace open`,"dashboard.profile":`Profile`,"dashboard.host":`AI host`,"dashboard.mcp":`MCP`,"dashboard.skills":`Skills available`,"dashboard.agents":`Agents available`,"dashboard.tasks":`Recent tasks`,"dashboard.findings":`Alerts`,"dashboard.graph":`Graph`,"dashboard.recommended":`Recommended actions`,"dashboard.quickStart":`Getting started`,"dashboard.quickStart.hint":`Complete these steps to start using the Forge with your AI host.`,"dashboard.step.install":`Install the Forge`,"dashboard.step.family":`Prepare the Forge family`,"dashboard.step.host":`Verify an AI host`,"dashboard.step.mcp":`Verify the MCP handshake`,"dashboard.step.task":`Run your first task`,"dashboard.capabilities":`Capabilities`,"dashboard.none":`No data yet — run a verification.`,"dashboard.stat.state":`Install state`,"dashboard.stat.capabilities":`Capabilities ready`,"dashboard.stat.checks":`Checks passing`,"dashboard.stat.portal":`Portal version`,"dashboard.accountEnvironment":`Account environment`,"dashboard.accountEnvironmentHint":`Reusable install paths for this Forge, outside your workspace.`,"dashboard.environmentMissing":`Run install.ps1 or install.sh to publish these paths.`,"environmentState.READY":`Ready`,"environmentState.PARTIAL":`Partial`,"environmentState.MISSING":`Missing`,"environmentState.INVALID":`Invalid`,"environmentState.UNSET":`Not set`,"install.title":`Installation`,"install.subtitle":`Install, repair, verify or remove this Forge — the same service as the CLI, with the same receipts.`,"install.status":`Current state`,"install.portal.installed":`Forge Portal installed`,"install.portal.vendored":`Forge Portal not installed locally`,"install.portal.vendored.hint":`vendored assets only — no local install found`,"install.scope":`Scope`,"install.scope.project":`Current project`,"install.scope.project.hint":`Writes only inside this directory — ideal for trying it out.`,"install.scope.workspace":`Workspace`,"install.scope.workspace.hint":`Applies to the whole detected workspace.`,"install.scope.user":`User`,"install.scope.user.hint":`Available in every project for this user.`,"install.components":`Components`,"install.plan":`Generate plan`,"install.plan.review":`Review plan`,"install.plan.changes":`{count, plural, one{# planned change} other{# planned changes}}`,"install.apply":`Apply installation`,"install.repair":`Repair installation`,"install.uninstall":`Uninstall`,"install.uninstall.confirm":`This removes this Forge's managed files in this scope. Only files recorded in the ledger are removed.`,"install.uninstall.confirmBtn":`Confirm uninstall`,"install.host.all":`All hosts`,"install.host.notDetected":`not detected`,"install.verify":`Verify`,"install.receipt":`Receipt`,"install.running":`Running…`,"install.done":`Done`,"install.refused":`Refused`,"install.hosts":`AI hosts`,"install.hosts.hint":`Choose which hosts to integrate skills, agents and MCP into.`,"install.profile":`Installation profile`,"install.executionProfile":`Execution profile`,"install.summary":`Ready to install`,"install.summary.scope":`Scope`,"install.summary.host":`Host`,"install.summary.profile":`Profile`,"install.summary.executionProfile":`Execution`,"install.summary.components":`Components`,"install.summary.empty":`Select at least one component to generate a plan.`,"install.step.configure":`Configure`,"install.step.plan":`Plan`,"install.step.review":`Review`,"install.step.done":`Receipt`,"install.receipt.status":`Status`,"federation.title":`Forge family`,"federation.subtitle":`See real specialists and prepare the workspace with one approval.`,"federation.summary":`Federation summary`,"federation.catalog":`Catalog specialists`,"federation.installed":`Registered forges`,"federation.mcp":`With declared MCP`,"federation.checkouts":`Local checkouts`,"federation.governed":`Governed plan`,"federation.setup.title":`Prepare the family`,"federation.setup.hint":`Choose once. Each Forge keeps its own installer, ledger and verification.`,"federation.host":`AI hosts`,"federation.host.all":`All hosts`,"federation.host.allHint":`Compatible integrations detected by each Forge.`,"federation.host.none":`No host now`,"federation.host.noneHint":`Keeps host files untouched.`,"federation.host.claude":`Claude`,"federation.host.devin":`Devin`,"federation.host.codex":`Codex`,"federation.host.copilot":`Copilot`,"federation.host.detected":`Each Forge confirms state in its plan.`,"federation.profile":`Install profile`,"federation.profile.minimal":`Economy`,"federation.profile.minimalHint":`Core/MCP; capabilities load on demand.`,"federation.profile.recommended":`Recommended`,"federation.profile.recommendedHint":`Skills, agents, MCP and the complete experience.`,"federation.profile.full":`Full`,"federation.profile.fullHint":`All compatible selected components.`,"federation.executionProfile":`Execution profile`,"federation.execution.economy":`Economy`,"federation.execution.economyHint":`Lower cost and context footprint for routine work.`,"federation.execution.balanced":`Balanced`,"federation.execution.balancedHint":`Default trade-off between capability, speed and cost.`,"federation.execution.deep":`Deep`,"federation.execution.deepHint":`More context and specialist depth for complex work.`,"federation.components":`Optional components`,"federation.component.skills":`Skills`,"federation.component.skillsHint":`Capabilities discovered by the host.`,"federation.component.agents":`Agents`,"federation.component.agentsHint":`Declared specialists and subagents.`,"federation.component.mcp":`MCP`,"federation.component.mcpHint":`Governed MCP entries.`,"federation.component.tui":`TUI`,"federation.component.tuiHint":`Terminal command center.`,"federation.component.graph":`Graph Studio`,"federation.component.graphHint":`Federated graph and visual navigation.`,"federation.plan":`Generate family plan`,"federation.planHint":`Nothing changes before review and confirmation.`,"federation.specialists":`Specialists`,"federation.specialistsHint":`Observed state from the catalog and local registry.`,"federation.mcpReady":`MCP declared`,"federation.mcpAbsent":`MCP not declared`,"federation.empty":`No specialist was observed in this workspace.`,"federation.review":`Review family plan`,"federation.reviewHint":`This plan comes from the real registered installers.`,"federation.actions":`Actions`,"federation.apply":`Apply family`,"federation.running":`Applying installers and collecting receipts…`,"federation.receipt":`Family receipt`,"federation.receiptHint":`Refresh the states to confirm the outcome.`,"profiles.title":`Profiles`,"profiles.subtitle":`How much of the Forge is available in your AI host's context.`,"profiles.current":`Current profile`,"profiles.economy":`Economy`,"profiles.economy.desc":`Lowest context usage. Loads capabilities as needed.`,"profiles.balanced":`Balanced`,"profiles.balanced.desc":`Balance between availability, quality and economy.`,"profiles.deep":`Deep`,"profiles.deep.desc":`Maximum verification depth and execution evidence.`,"profiles.full":`Full`,"profiles.full.desc":`All compatible components available, without loading everything into context.`,"profiles.apply":`Apply profile`,"profiles.diff":`What changes`,"hosts.title":`AI hosts`,"hosts.subtitle":`Real state of each host — detected, authenticated and integrated.`,"hosts.detected":`Detected`,"hosts.installed":`Integrated`,"hosts.version":`Version`,"hosts.supported":`Supported`,"hosts.auth":`Authentication`,"hosts.auth.signedIn":`Signed in`,"hosts.auth.signedOut":`Signed out`,"hosts.auth.unknown":`Unverified`,"hosts.integration":`Integration`,"hosts.launch":`Open host`,"hosts.launch.copyHint":`Run this command in your terminal to open the host:`,"hosts.launch.unavailable":`The portal cannot launch hosts — open it from a terminal with the command below.`,"hosts.docs":`Official documentation`,"hosts.notDetected":`Not detected on this system`,"hosts.restartRequired":`Restart the host to apply the configuration`,"hostState.NOT_DETECTED":`Not detected`,"hostState.DETECTED":`Detected`,"hostState.INSTALLED":`Installed`,"hostState.CONFIGURED":`Configured`,"hostState.MCP_REGISTERED":`MCP registered`,"hostState.HANDSHAKE_VERIFIED":`Handshake verified`,"hostState.TOOLS_DISCOVERED":`Tools discovered`,"hostState.EXECUTION_VERIFIED":`Execution verified`,"hostState.FAILED":`Failed`,"hostState.BLOCKED":`Blocked`,"mcp.title":`MCP`,"mcp.subtitle":`MCP servers and real handshake verification.`,"mcp.servers":`Servers`,"mcp.tools":`{count, plural, one{# tool} other{# tools}}`,"mcp.verify":`Verify handshake`,"mcp.lastVerify":`Last verified`,"mcp.limitations":`Limitations`,"mcp.never":`Never verified`,"skills.title":`Skills`,"skills.subtitle":`This Forge's real skill catalog.`,"skills.search":`Search skills…`,"skills.domain":`Domain`,"skills.state":`State`,"skills.hosts":`Hosts`,"skills.empty":`No skill matches the search.`,"skills.none":`This Forge does not ship a skill catalog.`,"agents.title":`Agents`,"agents.subtitle":`Agents, subagents and coordinators with declared authority.`,"agents.search":`Search agents…`,"agents.role":`Role`,"agents.authority":`Authority`,"agents.skills":`Skills`,"agents.domains":`Domains`,"agents.empty":`No agent matches the search.`,"agents.none":`This Forge does not ship an agent catalog.`,"tasks.title":`Tasks`,"tasks.subtitle":`Say what you want to do — the portal builds the plan on the real Forge.`,"tasks.intent.label":`What do you want to do?`,"tasks.intent.placeholder":`E.g.: analyze the PySpark scripts in this project`,"tasks.intent.run":`Plan`,"tasks.plan":`Plan`,"tasks.plan.review":`Review the plan before executing.`,"tasks.plan.task":`Task`,"tasks.plan.verb":`Verb`,"tasks.plan.intent":`Your intent`,"fdoc.checks":`Checks`,"fdoc.repairable":`(repairable)`,"fdoc.drift":`Drift`,"fdoc.modified":`modified`,"fdoc.missing":`missing`,"fdoc.managed_files":`Managed files`,"fdoc.planned_files":`Planned files`,"fdoc.more":`more`,"fdoc.portal":`Forge Portal`,"fdoc.portal.vendored":`vendored assets — no local install`,"fdoc.workspace":`Workspace`,"fdoc.verification":`Verification`,"fdoc.unlock":`unlock:`,"fdoc.repair":`repair:`,"fdoc.raw":`Advanced — raw JSON`,"doc.target":`target`,"doc.scope":`scope`,"doc.version":`version`,"doc.profile":`profile`,"doc.state_dir":`state dir`,"doc.managed":`managed entries`,"tasks.execute":`Execute`,"tasks.recent":`Recent tasks`,"tasks.empty":`No tasks run in this session.`,"tasks.stage.started":`Started`,"tasks.stage.planning":`Planning`,"tasks.stage.selected":`Specialist selected`,"tasks.stage.running":`Running`,"tasks.stage.verifying":`Verifying`,"tasks.stage.completed":`Completed`,"tasks.stage.failed":`Failed`,"tasks.stage.refused":`Refused`,"tasks.result":`Result`,"tasks.evidence":`Evidence`,"tasks.noHost":`No host detected — the plan shows the exact command to run on your host.`,"graph.title":`Graph Studio`,"graph.subtitle":`The Forge's real graph — nodes, edges, evidence and impact.`,"graph.open":`Open Graph Studio`,"graph.nodes":`{count, plural, one{# node} other{# nodes}}`,"graph.edges":`{count, plural, one{# edge} other{# edges}}`,"graph.unavailable":`No graph built yet.`,"graph.buildHint":`Build the graph with the Forge, then reload this page.`,"graph.federated":`Federated`,"graph.fed.title":`Federated ecosystem graph`,"graph.fed.export":`Export graph`,"graph.fed.sources":`Data sources`,"graph.fed.evidenceNote":`Every node carries the endpoint that supplied it — nothing is assumed.`,"graph.fed.search":`Search nodes by name or id…`,"graph.fed.kind":`Kind`,"graph.fed.verification":`Verification`,"graph.fed.observed":`observed`,"graph.fed.impact":`Direct impact`,"graph.fed.noImpact":`No edges recorded for this node.`,"graph.fed.empty":`No nodes match the filters.`,"graph.fed.none":`No federated data available.`,"graph.source.loaded":`loaded`,"graph.source.unverified":`unverified`,"graph.source.unavailable":`unavailable`,"knowledge.title":`Knowledge`,"knowledge.subtitle":`Docs, recipes and guides for this Forge — PT-BR first.`,"knowledge.search":`What do you want to solve?`,"knowledge.placeholder":`E.g.: how to analyze a Glue Job`,"knowledge.results":`{count, plural, one{# result} other{# results}}`,"knowledge.empty":`Nothing found — try another term.`,"knowledge.open":`Open document`,"settings.title":`Settings`,"settings.subtitle":`Language, theme and portal preferences.`,"settings.language":`Language`,"settings.language.auto":`Automatic`,"settings.language.pt":`Português (Brasil)`,"settings.language.en":`English`,"settings.theme":`Theme`,"settings.theme.light":`Light`,"settings.theme.dark":`Dark`,"settings.theme.system":`System`,"settings.about":`About`,"settings.forge":`Forge`,"settings.version":`Version`,"settings.portalVersion":`Portal version`,"settings.cli":`CLI`,"settings.federated":`Federated`,"error.title":`Something went wrong`,"error.unreachable":`The portal server did not respond — is it running?`,"error.session":`Invalid or expired session — reopen the portal from the CLI.`,"error.forbidden":`Operation not allowed in this session.`,"error.notFound":`Not found.`,"error.generic":`Operation failed.`,"error.retry":`Retry`,"error.details":`Technical details`,"empty.noData":`Nothing to show yet.`,"empty.noData.hint":`Data appears when the Forge produces it — nothing is invented.`,"empty.notInstalled":`This Forge is not installed yet.`,"empty.notInstalled.hint":`Install it to see real state, hosts, MCP and catalogs.`,"empty.goInstall":`Go to Installation`,"notify.success":`Done`,"notify.error":`Failed`,"notify.dismiss":`Dismiss`,"table.id":`ID`,"table.host":`Host`,"table.task":`Task`,"table.verb":`Verb`,"table.stage":`Stage`,"table.exit":`Exit`,"nav.forges":`Forges`,"nav.config":`Configuration`,"notify.region":`Notifications`,"common.updatedAt":`updated {time}`,"command.kind.page":`Pages & actions`,"command.kind.forge":`Forges`,"command.kind.capability":`Capabilities`,"command.kind.skill":`Skills`,"command.kind.agent":`Agents`,"command.kind.mcp":`MCP`,"command.kind.host":`Hosts`,"command.kind.doc":`Documents`,"command.kind.error":`Known errors`,"command.filters":`Filter by type`,"command.searching":`Searching…`,"command.footer":`↑↓ navigate · ←→ filter · Enter open · Esc close`,"command.unverified":`Source unverified for this search`,"dashboard.forges":`Discovered Forjas`,"dashboard.forges.hint":`The serving Forja plus specialists from the federation registry.`,"dashboard.inventory":`Inventory`,"dashboard.inventory.hint":`Live counts read from each catalog endpoint.`,"federation.unavailable":`This Forja does not expose a federation registry — data unverified.`,"explorer.title":`Forja explorer`,"explorer.subtitle":`Every Forja this workspace can verify — the serving Forja plus federation specialists.`,"explorer.serving":`serving`,"explorer.registryOnly":`Registry entry only — never observed live.`,"explorer.empty":`No Forja could be discovered.`,"explorer.notFound":`No Forja with this identity in the federation snapshot.`,"explorer.back":`All Forjas`,"explorer.detail.subtitle":`Fields verified by the portal and the federation registry — absent data is marked, never filled in.`,"explorer.identity":`Identity`,"explorer.presence":`Presence`,"explorer.notes":`Notes`,"explorer.checkout":`Checkout`,"install.step.discover":`Discover`,"install.step.select":`Select`,"install.step.reviewDiff":`Review diff`,"install.step.confirm":`Confirm`,"install.step.execute":`Execute`,"install.step.verify":`Verify`,"install.step.receipt":`Receipt`,"install.discover.hosts":`AI hosts detected in this environment`,"install.planning":`Computing the installation plan…`,"install.diff.none":`The backend provided no field-level diff — reviewing actions.`,"install.confirm.hint":`Review the plan above. Execution only happens after explicit confirmation.`,"install.confirm.execute":`Confirm and execute`,"install.confirm.back":`Back`,"install.confirm.next":`Continue`,"install.executing":`Executing the approved plan…`,"install.verify.running":`Revalidating the post-install state…`,"install.verify.unverified":`The backend returned no checks — verification unconfirmed.`,"install.reinstall":`Reinstall`,"install.newPlan":`New plan`,"install.flow.hint":`Nothing executes without a reviewed plan and explicit confirmation — same as the CLI.`,"install.ops.title":`Operations`,"install.ops.update":`Update`,"install.ops.update.hint":`Update via portal is not exposed by this adapter — path unverified.`,"install.ops.repair.hint":`Re-runs checks and repairs divergent entries.`,"config.title":`Configuration center`,"config.subtitle":`This Forja's environment variables — metadata only, never values.`,"config.alert.missing":`Missing or invalid required variables prevent the Forja from operating.`,"config.env.prefix":`Prefix`,"config.env.scope":`Scope`,"config.env.aliases":`Windows aliases`,"config.col.name":`Variable`,"config.col.required":`Required`,"config.col.present":`Present`,"config.col.valid":`Valid`,"config.col.kind":`Kind`,"config.col.path":`Path`,"config.prepare.title":`Prepare changes`,"config.prepare.hint":`Ready-to-paste shell commands — the portal never writes variables for you.`,"config.prepare.none":`No pending variables — environment ready.`,"config.apply.title":`Apply changes`,"config.apply.portal":`Apply via portal`,"config.apply.unsupported":`This adapter does not expose configuration writes — path unverified.`,"config.profiles.link":`View component profiles`,"config.profiles.hint":`Profiles define which components each installation enables.`,"profiles.compare":`Compare profiles`,"profiles.compare.hint":`Select two profiles to see the component differences.`,"profiles.compare.a":`Profile A`,"profiles.compare.b":`Profile B`,"profiles.compare.component":`Component`,"profiles.compare.differences":`{count} differences`,"profiles.compare.same":`Identical profiles`,"nav.match":`Match`,"hosts.launchable":`Launchable by the portal`,"hosts.commandHint":`Command for your terminal`,"hosts.request":`Request integration`,"hosts.ops.plan":`Plan integration`,"hosts.ops.files":`Inspect affected files`,"hosts.ops.fix":`Fix integration`,"hosts.ops.disable":`Disable integration`,"hosts.ops.unsupported":`Op not exposed by this adapter — unverified`,"mcp.safety":`Handshake verification is read-only — the portal never invokes MCP tools.`,"mcp.host.unbound":`not host-bound`,"mcp.inspector":`Inspector`,"mcp.selectHint":`Select a server in the registry to inspect it.`,"mcp.detail":`Detail`,"mcp.explain.NOT_CONFIGURED":`Declared but not configured for any host.`,"mcp.explain.CONFIGURED":`Configured — no handshake performed yet.`,"mcp.explain.STARTING":`Server process starting — handshake in progress.`,"mcp.explain.HANDSHAKE_VERIFIED":`The initialize handshake was verified against the real server.`,"mcp.explain.TOOLS_DISCOVERED":`Tool discovery was verified after the handshake.`,"mcp.explain.INVOCATION_VERIFIED":`An invocation probe was verified by the adapter.`,"mcp.explain.DEGRADED":`The server responded, but the adapter reports degraded evidence.`,"mcp.explain.FAILED":`The last verification attempt failed — see the detail.`,"mcp.surface.tools":`Tools`,"mcp.surface.resources":`Resources`,"mcp.surface.prompts":`Prompts`,"mcp.surface.notExposed":`Surface not exposed by this adapter — unverified.`,"mcp.surface.countOnly":`Only the tool count is reported — names are not exposed.`,"mcp.surface.noTools":`The adapter did not report a tool count — unverified.`,"mcp.receipt.latency":`portal-measured latency`,"mcp.receipt.latencyHint":`HTTP round-trip measured by the portal — not MCP protocol latency.`,"mcp.verifying":`Verifying handshake…`,"mcp.compat.title":`Compatibility report`,"mcp.compat.hint":`Observed state vs the expected handshake progression — per server.`,"mcp.diag.title":`Diagnostics`,"mcp.diag.hint":`Servers in FAILED or DEGRADED state — evidence first, then re-verify.`,"agents.detail":`Details`,"agents.responsibility":`Responsibility`,"agents.origin":`Origin Forja`,"agents.compatibleHosts":`Compatible hosts`,"agents.tools":`Tools / MCP`,"agents.permissions":`Permissions`,"agents.deps":`Dependencies`,"agents.evidence":`Evidence`,"agents.notExposed":`Not exposed by this adapter — unverified`,"skills.detail.description":`Description`,"skills.origin":`Origin Forja`,"skills.compatibility":`Compatible hosts`,"skills.prerequisites":`Prerequisites`,"skills.fileValidation":`File validation`,"skills.deps":`Dependencies`,"skills.actions":`Install / repair`,"skills.actionsUnverified":`Install/repair ops are not exposed by this adapter — unverified`,"skills.notExposed":`Not exposed by this adapter — unverified`,"skills.evidence":`Evidence`,"skills.dedup.title":`Name collisions`,"skills.dedup.hint":`Same-name rows are flagged for review — never merged.`,"skills.dedup.possible":`possible duplicate`,"skills.dedup.different":`same name, different entity`,"match.title":`Capability match`,"match.subtitle":`Which agent, skill, Forja or MCP covers a capability — answered from real catalog metadata only.`,"match.placeholder":`E.g.: pyspark glue, api contracts, graph…`,"match.hint":`Try: which agent works with X? · which skill supports Y? · which Forja covers Z?`,"match.empty":`No catalog entry matches that capability.`,"match.limitation":`Only catalog metadata searched — runtime capability unverified.`,"match.evidence":`Evidence`,"nav.observe":`Observability`,"nav.versions":`Versions`,"tasks.correlation":`Correlation`,"tasks.executing":`Executing plan…`,"tasks.export":`Export receipt`,"tasks.stale.title":`Plan expired`,"tasks.stale.hint":`The plan token is stale — generate a new plan for the same intent. Execution never retries on its own.`,"tasks.stale.regenerate":`Regenerate plan`,"tasks.ops.title":`Operations`,"tasks.ops.plan.hint":`Builds a plan from the intent — nothing runs yet.`,"tasks.ops.execute.hint":`Executes a reviewed plan, bound to its plan token.`,"tasks.ops.cancel.hint":`Cancel op not exposed by the adapter.`,"tasks.limits":`Mutating ops are rate-limited and bound to a plan token; stage transitions come from real task records.`,"table.correlation":`Correlation`,"table.duration":`Duration`,"observe.title":`Observability`,"observe.subtitle":`Local metrics recorded by this Forge — no remote telemetry.`,"observe.localOnly":`Local-only metrics — nothing leaves this machine.`,"observe.unavailable":`This Forge does not expose local metrics — the capability is unverified, never assumed.`,"observe.counters":`Counters`,"observe.events":`Events`,"observe.generatedAt":`generated {time}`,"observe.truncated":`Showing a bounded window — older events were dropped to keep the report small.`,"observe.filter.kind":`Kind`,"observe.filter.status":`Status`,"observe.col.kind":`Kind`,"observe.col.at":`At`,"observe.col.duration":`Duration`,"observe.col.status":`Status`,"observe.col.origin":`Origin`,"observe.col.correlation":`Correlation`,"observe.col.detail":`Detail`,"observe.empty":`No events recorded yet.`,"observe.empty.hint":`Metrics appear when the Forge runs tasks, installs or verifications.`,"observe.noMatches":`No events match the current filters.`,"nav.lab":`Lab`,"lab.title":`Forge Lab`,"lab.subtitle":`Benchmark runs, scenario catalog and comparisons — real receipts only.`,"lab.unavailable":`The /lab endpoint is absent on this adapter — lab data cannot be verified.`,"lab.empty.title":`No lab runs collected yet — Sem dados stays honest.`,"lab.empty.subtitle":`Run theforge lab collect — results appear here, never a mock.`,"lab.runs":`Run history`,"lab.catalog":`Scenario catalog`,"lab.reports":`Reports`,"lab.notes":`Collector notes`,"lab.compare.title":`Verdict comparison`,"lab.compare.a":`run A`,"lab.compare.b":`vs`,"lab.filter.all":`All forges`,"lab.export.json":`JSON`,"lab.export.md":`Markdown`,"lab.col.file":`run`,"lab.col.forges":`forges`,"lab.col.scenarios":`scenarios`,"lab.col.pass":`pass`,"lab.col.fail":`fail`,"lab.col.skipped":`skipped`,"lab.col.forge":`forge`,"lab.col.scenario":`scenario`,"lab.col.verdict":`verdict`,"lab.col.duration":`duration`,"lab.col.metrics":`metrics`,"lab.col.detail":`detail`,"versions.title":`Versions`,"versions.subtitle":`Installed version, compatibility and release history — offline-first.`,"versions.unavailable":`This Forge does not expose version info — the capability is unverified, never assumed.`,"versions.installed":`Installed`,"versions.installed.version":`Version`,"versions.installed.origin":`Origin`,"versions.installed.channel":`Channel`,"versions.compat":`Compatibility`,"versions.available":`Available`,"versions.available.version":`Latest`,"versions.available.source":`Source`,"versions.offline":`No remote release lookups in offline mode — the latest available version is unverified, never guessed.`,"versions.changelog":`Changelog`,"versions.history":`History`,"versions.history.version":`Version`,"versions.history.at":`At`,"versions.history.detail":`Detail`,"versions.history.empty":`No version history recorded yet.`,"versions.integrity":`Integrity`,"versions.integrity.release":`Manifest release`,"versions.integrity.sha256":`Manifest sha256`,"versions.pending":`Pending & upgrade plan`,"versions.pending.updates":`Pending updates`,"versions.pending.plan":`Upgrade plan`,"versions.pending.cli":`Update discovery belongs to the Forge CLI — the portal does not guess pending updates.`,"versions.receipts":`Receipts`,"versions.receipts.file":`Receipt`,"versions.receipts.operation":`Operation`,"versions.receipts.status":`Status`,"versions.rollback":`Rollback`};export{e as EN};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,Et as pl,G as XI,Lt as yh,T as JI,U as Vv,Y as Zi,g as Eg,gt as jI,it as eD,kt as sh,m as DD,y as HI,yt as ki}from"./main-QDFVZK3T.js";var b=[`*`];function f(t,d){if(t&1&&(ki(0,`p`,4),DD(1),pl()),t&2){let e=XI();Vv(),yh(e.hint())}}var _=class t{title=Zi.required();hint=Zi(null);icon=Zi(`inbox`);static ɵfac=function(e){return new(e||t)};static ɵcmp=sl({type:t,selectors:[[`ui-empty`]],inputs:{title:[1,`title`],hint:[1,`hint`],icon:[1,`icon`]},ngContentSelectors:b,decls:7,vars:4,consts:[[`role`,`note`,1,`empty`],[`aria-hidden`,`true`,1,`empty__glyph`],[3,`name`,`size`],[1,`empty__title`],[1,`empty__hint`]],template:function(e,o){e&1&&(JI(),ki(0,`div`,0)(1,`div`,1),ah(2,`ui-icon`,2),pl(),ki(3,`p`,3),DD(4),pl(),jI(5,f,2,1,`p`,4),eD(6),pl()),e&2&&(Vv(2),sh(`name`,o.icon())(`size`,22),Vv(2),yh(o.title()),Vv(),HI(o.hint()?5:-1))},dependencies:[Eg],styles:[`.empty[_ngcontent-%COMP%]{display:grid;place-items:center;gap:var(--%NS%space-2);padding:var(--%NS%space-8) var(--%NS%space-6);border:1px dashed var(--%NS%border);border-radius:var(--%NS%radius-lg);color:var(--%NS%fg-muted);text-align:center;background:color-mix(in srgb,var(--%NS%bg-hover) 45%,transparent)}.empty__glyph[_ngcontent-%COMP%]{display:grid;place-items:center;width:52px;height:52px;border-radius:50%;margin-bottom:var(--%NS%space-1);color:var(--%NS%accent);background:var(--%NS%accent-bg);border:1px solid color-mix(in srgb,var(--%NS%accent) 30%,transparent)}.empty__title[_ngcontent-%COMP%]{font-weight:600;color:var(--%NS%fg);margin:0}.empty__hint[_ngcontent-%COMP%]{font-size:var(--%NS%font-sm);margin:0;max-width:46ch}`]})};export{_ as t};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,Et as pl,G as XI,It as yg,K as YI,Lt as yh,Mt as us,O as LD,P as Qu,Rt as zI,U as Vv,c as $i,g as Eg,gt as jI,i as n,jt as uh,kt as sh,m as DD,q as Yu,r as g$1,s as $I,st as g,vt as kD,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{t as _}from"./chunk-C4gpbtbP.js";var T=(l,a)=>a.id;function F(l,a){if(l&1){let e=YI();ki(0,`label`,3)(1,`input`,5),uh(`change`,function(){let s=Yu(e).$implicit,_=XI();return Qu(_.setLocale(s.id))}),pl(),ki(2,`span`),DD(3),kD(4,`t`),pl()()}if(l&2){let e=a.$implicit,d=XI();$i(`data-active`,d.i18n.preference()===e.id||null),Vv(),sh(`value`,e.id)(`checked`,d.i18n.preference()===e.id),Vv(2),yh(LD(4,4,e.label))}}function L(l,a){if(l&1){let e=YI();ki(0,`label`,3)(1,`input`,6),uh(`change`,function(){let s=Yu(e).$implicit,_=XI();return Qu(_.setScheme(s.id))}),pl(),ah(2,`ui-icon`,7),ki(3,`span`),DD(4),kD(5,`t`),pl()()}if(l&2){let e=a.$implicit,d=XI();$i(`data-active`,d.theme.scheme()===e.id||null),Vv(),sh(`value`,e.id)(`checked`,d.theme.scheme()===e.id),Vv(),sh(`name`,d.schemeIcon(e.id))(`size`,15),Vv(2),yh(LD(5,6,e.label))}}function $(l,a){if(l&1&&(ki(0,`dl`,4)(1,`div`)(2,`dt`),DD(3),kD(4,`t`),pl(),ki(5,`dd`),DD(6),pl()(),ki(7,`div`)(8,`dt`),DD(9),kD(10,`t`),pl(),ki(11,`dd`),DD(12),pl()(),ki(13,`div`)(14,`dt`),DD(15),kD(16,`t`),pl(),ki(17,`dd`),DD(18),pl()(),ki(19,`div`)(20,`dt`),DD(21),kD(22,`t`),pl(),ki(23,`dd`)(24,`code`),DD(25),pl()()(),ki(26,`div`)(27,`dt`),DD(28),kD(29,`t`),pl(),ki(30,`dd`),DD(31),kD(32,`t`),pl()()()),l&2){let e=a;Vv(3),yh(LD(4,10,`settings.forge`)),Vv(3),yh(e.forge_name),Vv(3),yh(LD(10,12,`settings.version`)),Vv(3),yh(e.forge_version),Vv(3),yh(LD(16,14,`settings.portalVersion`)),Vv(3),yh(e.portal_version),Vv(3),yh(LD(22,16,`settings.cli`)),Vv(4),yh(e.cli),Vv(3),yh(LD(29,18,`settings.federated`)),Vv(3),yh(LD(32,20,e.federated?`state.yes`:`state.no`))}}var V=class l{store=g(g$1);i18n=g(us);theme=g(n);localeOpts=[{id:`automatic`,label:`settings.language.auto`},{id:`pt-BR`,label:`settings.language.pt`},{id:`en`,label:`settings.language.en`}];schemeOpts=[{id:`system`,label:`settings.theme.system`},{id:`light`,label:`settings.theme.light`},{id:`dark`,label:`settings.theme.dark`}];setLocale(a){this.i18n.applyPreference(a)}setScheme(a){this.theme.setScheme(a)}schemeIcon(a){return a===`dark`?`moon`:a===`light`?`sun`:`contrast`}static ɵfac=function(e){return new(e||l)};static ɵcmp=sl({type:l,selectors:[[`page-settings`]],decls:24,vars:22,consts:[[3,`title`,`subtitle`],[1,`card`],[`role`,`radiogroup`,1,`opts`],[1,`opt`],[1,`kv`],[`type`,`radio`,`name`,`locale`,3,`change`,`value`,`checked`],[`type`,`radio`,`name`,`scheme`,3,`change`,`value`,`checked`],[3,`name`,`size`]],template:function(e,d){if(e&1&&(ah(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),ki(3,`section`,1)(4,`h2`),DD(5),kD(6,`t`),pl(),ki(7,`div`,2),kD(8,`t`),$I(9,F,5,6,`label`,3,T),pl()(),ki(11,`section`,1)(12,`h2`),DD(13),kD(14,`t`),pl(),ki(15,`div`,2),kD(16,`t`),$I(17,L,6,8,`label`,3,T),pl()(),ki(19,`section`,1)(20,`h2`),DD(21),kD(22,`t`),pl(),jI(23,$,33,22,`dl`,4),pl()),e&2){let s;sh(`title`,LD(1,8,`settings.title`))(`subtitle`,LD(2,10,`settings.subtitle`)),Vv(5),yh(LD(6,12,`settings.language`)),Vv(2),$i(`aria-label`,LD(8,14,`settings.language`)),Vv(2),zI(d.localeOpts),Vv(4),yh(LD(14,16,`settings.theme`)),Vv(2),$i(`aria-label`,LD(16,18,`settings.theme`)),Vv(2),zI(d.schemeOpts),Vv(4),yh(LD(22,20,`settings.about`)),Vv(2),HI((s=d.store.descriptor())?23:-1,s)}},dependencies:[_,Eg,yg],styles:[`.card[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4);max-width:640px}h2[_ngcontent-%COMP%]{margin:0 0 var(--%NS%space-3);font-size:var(--%NS%font-lg);font-weight:650;letter-spacing:-.01em}.opts[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--%NS%space-2)}.opt[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);padding:8px var(--%NS%space-3);cursor:pointer;transition:border-color var(--%NS%motion-fast),background var(--%NS%motion-fast),box-shadow var(--%NS%motion-fast)}.opt[_ngcontent-%COMP%]:hover{border-color:var(--%NS%border-strong);background:var(--%NS%bg-hover)}.opt[_ngcontent-%COMP%]:focus-within{border-color:var(--%NS%fg-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--%NS%fg-focus) 22%,transparent)}.opt[data-active][_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--%NS%accent) 55%,transparent);background:var(--%NS%accent-bg);box-shadow:0 0 0 1px color-mix(in srgb,var(--%NS%accent) 22%,transparent);font-weight:550}.opt[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{accent-color:var(--%NS%accent)}.opt[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.opt[data-active][_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%accent)}.kv[_ngcontent-%COMP%]{display:grid;margin:0}.kv[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;gap:var(--%NS%space-2);padding:var(--%NS%space-2) 0;border-bottom:1px solid var(--%NS%border)}.kv[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:last-child{border-bottom:none}.kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--%NS%fg-muted);min-width:140px}.kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;font-weight:500}`]})};export{V as SettingsPage};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,Et as pl,G as XI,It as yg,K as YI,Lt as yh,O as LD,P as Qu,Rt as zI,U as Vv,c as $i,dt as hg,g as Eg,gt as jI,jt as uh,kt as sh,m as DD,q as Yu,s as $I,st as g,vt as kD,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{i as k,t as T}from"./chunk-DQU0VyoQ.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as I}from"./chunk-DyIHOW_a.js";var B=(t,n)=>n.id;function D(t,n){t&1&&ah(0,`ui-skeleton`,10)}function V(t,n){if(t&1&&(ki(0,`strong`,11),DD(1),pl()),t&2){let e=XI().$implicit;Vv(),yh(e.src.data())}}function $(t,n){t&1&&ah(0,`ui-state-badge`,12)}function U(t,n){if(t&1){let e=YI();ki(0,`article`,6)(1,`header`),ah(2,`ui-icon`,7),ki(3,`span`,8),DD(4),kD(5,`t`),pl(),ki(6,`button`,9),kD(7,`t`),uh(`click`,function(){let f=Yu(e).$implicit,F=XI();return Qu(F.reload(f))}),ah(8,`ui-icon`,4),pl()(),jI(9,D,1,0,`ui-skeleton`,10)(10,V,2,1,`strong`,11)(11,$,1,0,`ui-state-badge`,12),ki(12,`p`,13)(13,`code`),DD(14),pl()()()}if(t&2){let e=n.$implicit;$i(`data-count-id`,e.id),Vv(2),sh(`name`,e.icon)(`size`,15),Vv(2),yh(LD(5,8,e.labelKey)),Vv(2),$i(`aria-label`,LD(7,10,`state.refresh`)),Vv(2),sh(`size`,12),Vv(),HI(e.src.loading()&&e.src.data()===null?9:e.src.data()!==null?10:11),Vv(5),yh(e.endpoint)}}var E=class t{api=g(hg);tiles=k();constructor(){this.loadCounts()}async loadCounts(){await Promise.allSettled(this.tiles.map(n=>this.reload(n)))}async reload(n){await n.src.load(()=>T(this.api,n.id))}static ɵfac=function(e){return new(e||t)};static ɵcmp=sl({type:t,selectors:[[`inventory-panel`]],decls:15,vars:10,consts:[[`data-section`,`inventory`,1,`inv`],[1,`inv__head`],[1,`inv__hint`],[1,`icon-btn`,3,`click`],[`name`,`refresh`,3,`size`],[1,`inv__tiles`],[1,`tile`],[3,`name`,`size`],[1,`tile__label`],[1,`tile__reload`,3,`click`],[`kind`,`text`],[`data-count`,``,1,`tile__n`],[`state`,`UNVERIFIED`],[1,`tile__src`]],template:function(e,_){e&1&&(ki(0,`section`,0)(1,`div`,1)(2,`div`)(3,`h2`),DD(4),kD(5,`t`),pl(),ki(6,`p`,2),DD(7),kD(8,`t`),pl()(),ki(9,`button`,3),kD(10,`t`),uh(`click`,function(){return _.loadCounts()}),ah(11,`ui-icon`,4),pl()(),ki(12,`div`,5),$I(13,U,15,12,`article`,6,B),pl()()),e&2&&(Vv(4),yh(LD(5,4,`dashboard.inventory`)),Vv(3),yh(LD(8,6,`dashboard.inventory.hint`)),Vv(2),$i(`aria-label`,LD(10,8,`state.refresh`)),Vv(2),sh(`size`,14),Vv(2),zI(_.tiles))},dependencies:[I,Eg,h,yg],styles:[`.inv__head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.inv__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-lg);font-weight:650}.inv__hint[_ngcontent-%COMP%]{margin:2px 0 0;color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm)}.inv__tiles[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--%NS%space-3)}.tile[_ngcontent-%COMP%]{display:grid;gap:6px;padding:var(--%NS%space-3) var(--%NS%space-4);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-lg);background:var(--%NS%bg-elevated);box-shadow:var(--%NS%elev-card)}.tile[_ngcontent-%COMP%] header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;color:var(--%NS%fg-muted)}.tile__label[_ngcontent-%COMP%]{flex:1;font-size:var(--%NS%font-xs);font-weight:600;text-transform:uppercase;letter-spacing:.05em}.tile__reload[_ngcontent-%COMP%]{display:inline-flex;padding:2px;border:none;border-radius:var(--%NS%radius-sm);background:transparent;color:var(--%NS%fg-muted);cursor:pointer}.tile__reload[_ngcontent-%COMP%]:hover{color:var(--%NS%fg);background:var(--%NS%bg-hover)}.tile__n[_ngcontent-%COMP%]{font-size:1.375rem;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1}.tile__src[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted)}`]})};export{E as t};
@@ -0,0 +1 @@
1
+ var e={"app.title":`Forge Portal`,"app.tagline":`engenharia agentic, simplificada`,"nav.dashboard":`Painel`,"nav.install":`Instalação`,"nav.federation":`Família de Forjas`,"nav.profiles":`Perfis`,"nav.hosts":`Hosts de IA`,"nav.mcp":`MCP`,"nav.skills":`Skills`,"nav.agents":`Agents`,"nav.tasks":`Tarefas`,"nav.graph":`Graph Studio`,"nav.knowledge":`Conhecimento`,"nav.settings":`Configurações`,"nav.section.operate":`Operar`,"nav.section.configure":`Configurar`,"nav.section.explore":`Explorar`,"nav.collapse":`Recolher menu`,"nav.skip":`Pular para o conteúdo`,"nav.expand":`Expandir menu`,"command.open":`Buscar ações e páginas…`,"command.hint":`Digite para buscar páginas, ações e ajuda`,"command.empty":`Nada encontrado para essa busca.`,"state.loading":`Carregando…`,"state.retry":`Tentar novamente`,"state.refresh":`Atualizar`,"state.close":`Fechar`,"state.cancel":`Cancelar`,"state.confirm":`Confirmar`,"state.apply":`Aplicar`,"state.copy":`Copiar`,"state.copied":`Copiado`,"state.open":`Abrir`,"state.viewDetails":`Ver detalhes`,"state.enabled":`Ativado`,"state.disabled":`Desativado`,"state.unknown":`Desconhecido`,"state.unverified":`Não verificado`,"state.supported":`Suportado`,"state.unsupported":`Não suportado`,"state.notApplicable":`Não se aplica`,"state.absent":`Ausente`,"state.required":`Obrigatório`,"state.optional":`Opcional`,"state.yes":`Sim`,"state.no":`Não`,"state.none":`Nenhum`,"state.all":`Todos`,"installState.NOT_INSTALLED":`Não instalado`,"installState.INSTALLED":`Instalado`,"installState.CONFIGURED":`Configurado`,"installState.ACTIVE":`Ativo`,"installState.VERIFIED":`Verificado`,"installState.DEGRADED":`Degradado`,"installState.BLOCKED":`Bloqueado`,"installState.FAILED":`Falhou`,"mcpState.NOT_CONFIGURED":`Não configurado`,"mcpState.CONFIGURED":`Configurado`,"mcpState.STARTING":`Iniciando`,"mcpState.HANDSHAKE_VERIFIED":`Handshake verificado`,"mcpState.TOOLS_DISCOVERED":`Tools descobertas`,"mcpState.INVOCATION_VERIFIED":`Invocação verificada`,"mcpState.DEGRADED":`Degradado`,"mcpState.FAILED":`Falhou`,"dashboard.title":`Painel`,"dashboard.subtitle":`Visão real da sua Forja neste workspace.`,"dashboard.health":`Saúde da instalação`,"dashboard.workspace":`Workspace`,"dashboard.noWorkspace":`Nenhum workspace aberto`,"dashboard.profile":`Perfil`,"dashboard.host":`Host de IA`,"dashboard.mcp":`MCP`,"dashboard.skills":`Skills disponíveis`,"dashboard.agents":`Agents disponíveis`,"dashboard.tasks":`Tarefas recentes`,"dashboard.findings":`Alertas`,"dashboard.graph":`Grafo`,"dashboard.recommended":`Ações recomendadas`,"dashboard.quickStart":`Primeiros passos`,"dashboard.quickStart.hint":`Complete estes passos para começar a usar a Forja com seu host de IA.`,"dashboard.step.install":`Instalar a Forja`,"dashboard.step.family":`Preparar a família de Forjas`,"dashboard.step.host":`Verificar um host de IA`,"dashboard.step.mcp":`Verificar o handshake MCP`,"dashboard.step.task":`Executar a primeira tarefa`,"dashboard.capabilities":`Capacidades`,"dashboard.none":`Sem dados ainda — execute uma verificação.`,"dashboard.stat.state":`Estado da instalação`,"dashboard.stat.capabilities":`Capabilities prontas`,"dashboard.stat.checks":`Checks ok`,"dashboard.stat.portal":`Versão do portal`,"dashboard.accountEnvironment":`Ambiente da conta`,"dashboard.accountEnvironmentHint":`Caminhos reutilizáveis da Forja, fora do workspace.`,"dashboard.environmentMissing":`Execute install.ps1 ou install.sh para publicar esses caminhos.`,"environmentState.READY":`Pronto`,"environmentState.PARTIAL":`Parcial`,"environmentState.MISSING":`Ausente`,"environmentState.INVALID":`Inválido`,"environmentState.UNSET":`Não definido`,"install.title":`Instalação`,"install.subtitle":`Instalar, reparar, verificar ou remover esta Forja — o mesmo serviço do CLI, com os mesmos recibos.`,"install.status":`Estado atual`,"install.portal.installed":`Forge Portal instalado`,"install.portal.vendored":`Forge Portal sem instalação local`,"install.portal.vendored.hint":`apenas assets vendored — nenhuma instalação local encontrada`,"install.scope":`Escopo`,"install.scope.project":`Projeto atual`,"install.scope.project.hint":`Escreve apenas neste diretório — ideal para experimentar.`,"install.scope.workspace":`Workspace`,"install.scope.workspace.hint":`Aplica-se a todo o workspace detectado.`,"install.scope.user":`Usuário`,"install.scope.user.hint":`Disponível em todos os projetos deste usuário.`,"install.components":`Componentes`,"install.plan":`Gerar plano`,"install.plan.review":`Revisar plano`,"install.plan.changes":`{count, plural, one{# alteração planejada} other{# alterações planejadas}}`,"install.apply":`Aplicar instalação`,"install.repair":`Reparar instalação`,"install.uninstall":`Desinstalar`,"install.uninstall.confirm":`Isso remove os arquivos gerenciados desta Forja neste escopo. Somente arquivos registrados no ledger são removidos.`,"install.uninstall.confirmBtn":`Confirmar desinstalação`,"install.host.all":`Todos os hosts`,"install.host.notDetected":`não detectado`,"install.verify":`Verificar`,"install.receipt":`Recibo`,"install.running":`Executando…`,"install.done":`Concluído`,"install.refused":`Recusado`,"install.hosts":`Hosts de IA`,"install.hosts.hint":`Escolha para quais hosts integrar skills, agents e MCP.`,"install.profile":`Perfil de instalação`,"install.executionProfile":`Perfil de execução`,"install.summary":`Pronto para instalar`,"install.summary.scope":`Escopo`,"install.summary.host":`Host`,"install.summary.profile":`Perfil`,"install.summary.executionProfile":`Execução`,"install.summary.components":`Componentes`,"install.summary.empty":`Selecione ao menos um componente para gerar o plano.`,"install.step.configure":`Configurar`,"install.step.plan":`Plano`,"install.step.review":`Revisão`,"install.step.done":`Recibo`,"install.receipt.status":`Estado`,"federation.title":`Família de Forjas`,"federation.subtitle":`Veja especialistas reais e prepare o workspace com uma aprovação única.`,"federation.summary":`Resumo da federação`,"federation.catalog":`Especialistas no catálogo`,"federation.installed":`Forjas registradas`,"federation.mcp":`Com MCP declarado`,"federation.checkouts":`Checkouts locais`,"federation.governed":`Plano governado`,"federation.setup.title":`Preparar a família`,"federation.setup.hint":`Escolha uma vez. Cada Forja conserva seu instalador, ledger e verificação.`,"federation.host":`Hosts de IA`,"federation.host.all":`Todos os hosts`,"federation.host.allHint":`Integrações compatíveis detectadas por cada Forja.`,"federation.host.none":`Nenhum host agora`,"federation.host.noneHint":`Mantém arquivos de host intocados.`,"federation.host.claude":`Claude`,"federation.host.devin":`Devin`,"federation.host.codex":`Codex`,"federation.host.copilot":`Copilot`,"federation.host.detected":`A Forja confirma o estado no plano.`,"federation.profile":`Perfil de instalação`,"federation.profile.minimal":`Economy`,"federation.profile.minimalHint":`Núcleo/MCP; capacidades entram sob demanda.`,"federation.profile.recommended":`Recommended`,"federation.profile.recommendedHint":`Skills, agents, MCP e experiência completa.`,"federation.profile.full":`Full`,"federation.profile.fullHint":`Todos os componentes compatíveis selecionados.`,"federation.executionProfile":`Perfil de execução`,"federation.execution.economy":`Economy`,"federation.execution.economyHint":`Menor custo e uso de contexto para tarefas rotineiras.`,"federation.execution.balanced":`Balanced`,"federation.execution.balancedHint":`Equilíbrio padrão entre capacidade, velocidade e custo.`,"federation.execution.deep":`Deep`,"federation.execution.deepHint":`Mais contexto e profundidade para tarefas complexas.`,"federation.components":`Componentes opcionais`,"federation.component.skills":`Skills`,"federation.component.skillsHint":`Capacidades descobertas pelo host.`,"federation.component.agents":`Agents`,"federation.component.agentsHint":`Especialistas e subagents declarados.`,"federation.component.mcp":`MCP`,"federation.component.mcpHint":`Entradas MCP governadas.`,"federation.component.tui":`TUI`,"federation.component.tuiHint":`Command center no terminal.`,"federation.component.graph":`Graph Studio`,"federation.component.graphHint":`Grafo federado e navegação visual.`,"federation.plan":`Gerar plano da família`,"federation.planHint":`Nada muda antes da revisão e confirmação.`,"federation.specialists":`Especialistas`,"federation.specialistsHint":`Estado observado no catálogo e no registry local.`,"federation.mcpReady":`MCP declarado`,"federation.mcpAbsent":`MCP não declarado`,"federation.empty":`Nenhum especialista foi observado neste workspace.`,"federation.review":`Revisar plano da família`,"federation.reviewHint":`O plano abaixo vem dos instaladores reais registrados.`,"federation.actions":`Ações`,"federation.apply":`Aplicar família`,"federation.running":`Aplicando instaladores e coletando recibos…`,"federation.receipt":`Recibo da família`,"federation.receiptHint":`Consulte os estados novamente para confirmar o resultado.`,"profiles.title":`Perfis`,"profiles.subtitle":`Quanto da Forja fica disponível no contexto do seu host de IA.`,"profiles.current":`Perfil atual`,"profiles.economy":`Economy`,"profiles.economy.desc":`Menor consumo de contexto. Carrega capacidades conforme necessário.`,"profiles.balanced":`Balanced`,"profiles.balanced.desc":`Equilíbrio entre disponibilidade, qualidade e economia.`,"profiles.deep":`Deep`,"profiles.deep.desc":`Máxima profundidade de verificação e evidência de execução.`,"profiles.full":`Full`,"profiles.full.desc":`Todos os componentes compatíveis disponíveis, sem carregar tudo no contexto.`,"profiles.apply":`Aplicar perfil`,"profiles.diff":`O que muda`,"hosts.title":`Hosts de IA`,"hosts.subtitle":`Estado real de cada host — detectado, autenticado e integrado.`,"hosts.detected":`Detectado`,"hosts.installed":`Integrado`,"hosts.version":`Versão`,"hosts.supported":`Suportado`,"hosts.auth":`Autenticação`,"hosts.auth.signedIn":`Autenticado`,"hosts.auth.signedOut":`Não autenticado`,"hosts.auth.unknown":`Não verificado`,"hosts.integration":`Integração`,"hosts.launch":`Abrir host`,"hosts.launch.copyHint":`Execute este comando no seu terminal para abrir o host:`,"hosts.launch.unavailable":`O portal não inicia hosts — abra pelo terminal com o comando abaixo.`,"hosts.docs":`Documentação oficial`,"hosts.notDetected":`Não detectado neste sistema`,"hosts.restartRequired":`Reinicie o host para aplicar a configuração`,"hostState.NOT_DETECTED":`Não detectado`,"hostState.DETECTED":`Detectado`,"hostState.INSTALLED":`Instalado`,"hostState.CONFIGURED":`Configurado`,"hostState.MCP_REGISTERED":`MCP registrado`,"hostState.HANDSHAKE_VERIFIED":`Handshake verificado`,"hostState.TOOLS_DISCOVERED":`Ferramentas descobertas`,"hostState.EXECUTION_VERIFIED":`Execução verificada`,"hostState.FAILED":`Falhou`,"hostState.BLOCKED":`Bloqueado`,"mcp.title":`MCP`,"mcp.subtitle":`Servidores MCP e verificação real de handshake.`,"mcp.servers":`Servidores`,"mcp.tools":`{count, plural, one{# tool} other{# tools}}`,"mcp.verify":`Verificar handshake`,"mcp.lastVerify":`Última verificação`,"mcp.limitations":`Limitações`,"mcp.never":`Nunca verificado`,"skills.title":`Skills`,"skills.subtitle":`Catálogo real de skills desta Forja.`,"skills.search":`Buscar skills…`,"skills.domain":`Domínio`,"skills.state":`Estado`,"skills.hosts":`Hosts`,"skills.empty":`Nenhuma skill corresponde à busca.`,"skills.none":`Esta Forja não distribui um catálogo de skills.`,"agents.title":`Agents`,"agents.subtitle":`Agents, subagents e coordenadores com autoridade declarada.`,"agents.search":`Buscar agents…`,"agents.role":`Papel`,"agents.authority":`Autoridade`,"agents.skills":`Skills`,"agents.domains":`Domínios`,"agents.empty":`Nenhum agent corresponde à busca.`,"agents.none":`Esta Forja não distribui um catálogo de agents.`,"tasks.title":`Tarefas`,"tasks.subtitle":`Diga o que você quer fazer — o portal monta o plano na Forja real.`,"tasks.intent.label":`O que você quer fazer?`,"tasks.intent.placeholder":`Ex.: analisar os scripts PySpark deste projeto`,"tasks.intent.run":`Planejar`,"tasks.plan":`Plano`,"tasks.plan.review":`Revise o plano antes de executar.`,"tasks.plan.task":`Tarefa`,"tasks.plan.verb":`Verbo`,"tasks.plan.intent":`Sua intenção`,"fdoc.checks":`Verificações`,"fdoc.repairable":`(reparável)`,"fdoc.drift":`Drift`,"fdoc.modified":`modificados`,"fdoc.missing":`ausentes`,"fdoc.managed_files":`Arquivos gerenciados`,"fdoc.planned_files":`Arquivos planejados`,"fdoc.more":`mais`,"fdoc.portal":`Forge Portal`,"fdoc.portal.vendored":`assets embutidos — sem instalação local`,"fdoc.workspace":`Workspace`,"fdoc.verification":`Verificação`,"fdoc.unlock":`desbloquear:`,"fdoc.repair":`reparo:`,"fdoc.raw":`Avançado — JSON bruto`,"doc.target":`alvo`,"doc.scope":`escopo`,"doc.version":`versão`,"doc.profile":`perfil`,"doc.state_dir":`dir de estado`,"doc.managed":`entradas gerenciadas`,"tasks.execute":`Executar`,"tasks.recent":`Tarefas recentes`,"tasks.empty":`Nenhuma tarefa executada nesta sessão.`,"tasks.stage.started":`Iniciada`,"tasks.stage.planning":`Planejando`,"tasks.stage.selected":`Especialista selecionado`,"tasks.stage.running":`Executando`,"tasks.stage.verifying":`Verificando`,"tasks.stage.completed":`Concluída`,"tasks.stage.failed":`Falhou`,"tasks.stage.refused":`Recusada`,"tasks.result":`Resultado`,"tasks.evidence":`Evidência`,"tasks.noHost":`Sem host detectado — o plano mostra o comando exato para rodar no seu host.`,"graph.title":`Graph Studio`,"graph.subtitle":`Grafo real da Forja — nós, arestas, evidência e impacto.`,"graph.open":`Abrir Graph Studio`,"graph.nodes":`{count, plural, one{# nó} other{# nós}}`,"graph.edges":`{count, plural, one{# aresta} other{# arestas}}`,"graph.unavailable":`Nenhum grafo construído ainda.`,"graph.buildHint":`Construa o grafo pela Forja e recarregue esta página.`,"graph.federated":`Federado`,"graph.fed.title":`Grafo federado do ecossistema`,"graph.fed.export":`Exportar grafo`,"graph.fed.sources":`Fontes de dados`,"graph.fed.evidenceNote":`Cada nó carrega o endpoint que o forneceu — nada é presumido.`,"graph.fed.search":`Buscar nós por nome ou id…`,"graph.fed.kind":`Tipo`,"graph.fed.verification":`Verificação`,"graph.fed.observed":`observado`,"graph.fed.impact":`Impacto direto`,"graph.fed.noImpact":`Nenhuma aresta registrada para este nó.`,"graph.fed.empty":`Nenhum nó corresponde aos filtros.`,"graph.fed.none":`Nenhum dado federado disponível.`,"graph.source.loaded":`carregado`,"graph.source.unverified":`não verificado`,"graph.source.unavailable":`indisponível`,"knowledge.title":`Conhecimento`,"knowledge.subtitle":`Documentação, receitas e guias desta Forja — PT-BR primeiro.`,"knowledge.search":`O que você quer resolver?`,"knowledge.placeholder":`Ex.: como analisar um Glue Job`,"knowledge.results":`{count, plural, one{# resultado} other{# resultados}}`,"knowledge.empty":`Nada encontrado — tente outro termo.`,"knowledge.open":`Abrir documento`,"settings.title":`Configurações`,"settings.subtitle":`Idioma, tema e preferências do portal.`,"settings.language":`Idioma`,"settings.language.auto":`Automático`,"settings.language.pt":`Português (Brasil)`,"settings.language.en":`English`,"settings.theme":`Tema`,"settings.theme.light":`Claro`,"settings.theme.dark":`Escuro`,"settings.theme.system":`Sistema`,"settings.about":`Sobre`,"settings.forge":`Forja`,"settings.version":`Versão`,"settings.portalVersion":`Versão do portal`,"settings.cli":`CLI`,"settings.federated":`Federado`,"error.title":`Algo deu errado`,"error.unreachable":`O servidor do portal não respondeu — ele está rodando?`,"error.session":`Sessão inválida ou expirada — abra o portal novamente pelo CLI.`,"error.forbidden":`Operação não permitida nesta sessão.`,"error.notFound":`Não encontrado.`,"error.generic":`Falha na operação.`,"error.retry":`Tentar novamente`,"error.details":`Detalhes técnicos`,"empty.noData":`Nada para mostrar ainda.`,"empty.noData.hint":`Os dados aparecem quando a Forja os produz — nada é inventado.`,"empty.notInstalled":`Esta Forja ainda não está instalada.`,"empty.notInstalled.hint":`Instale para ver estado real, hosts, MCP e catálogos.`,"empty.goInstall":`Ir para Instalação`,"notify.success":`Concluído`,"notify.error":`Falhou`,"notify.dismiss":`Dispensar`,"table.id":`ID`,"table.host":`Host`,"table.task":`Tarefa`,"table.verb":`Verbo`,"table.stage":`Estágio`,"table.exit":`Saída`,"nav.forges":`Forjas`,"nav.config":`Configuração`,"notify.region":`Notificações`,"common.updatedAt":`atualizado {time}`,"command.kind.page":`Páginas e ações`,"command.kind.forge":`Forjas`,"command.kind.capability":`Capacidades`,"command.kind.skill":`Skills`,"command.kind.agent":`Agents`,"command.kind.mcp":`MCP`,"command.kind.host":`Hosts`,"command.kind.doc":`Documentos`,"command.kind.error":`Erros conhecidos`,"command.filters":`Filtrar por tipo`,"command.searching":`Buscando…`,"command.footer":`↑↓ navegar · ←→ filtrar · Enter abrir · Esc fechar`,"command.unverified":`Fonte não verificada nesta busca`,"dashboard.forges":`Forjas descobertas`,"dashboard.forges.hint":`A Forja que serve este portal mais os especialistas do registry federado.`,"dashboard.inventory":`Inventário`,"dashboard.inventory.hint":`Contagens reais lidas de cada endpoint de catálogo.`,"federation.unavailable":`Esta Forja não expõe um registry federado — dados não verificados.`,"explorer.title":`Explorador de Forjas`,"explorer.subtitle":`Todas as Forjas que este workspace consegue verificar — a servidora mais os especialistas federados.`,"explorer.serving":`servidora`,"explorer.registryOnly":`Apenas entrada no registry — nunca observada ao vivo.`,"explorer.empty":`Nenhuma Forja pôde ser descoberta.`,"explorer.notFound":`Nenhuma Forja com esta identidade no snapshot federado.`,"explorer.back":`Todas as Forjas`,"explorer.detail.subtitle":`Campos verificados pelo portal e pelo registry federado — dados ausentes são marcados, nunca preenchidos.`,"explorer.identity":`Identidade`,"explorer.presence":`Presença`,"explorer.notes":`Notas`,"explorer.checkout":`Checkout`,"install.step.discover":`Descobrir`,"install.step.select":`Selecionar`,"install.step.reviewDiff":`Revisar diff`,"install.step.confirm":`Confirmar`,"install.step.execute":`Executar`,"install.step.verify":`Verificar`,"install.step.receipt":`Recibo`,"install.discover.hosts":`Hosts de IA detectados neste ambiente`,"install.planning":`Calculando plano de instalação…`,"install.diff.none":`O backend não forneceu diff campo a campo — revisando ações.`,"install.confirm.hint":`Revise o plano acima. A execução só acontece após confirmação explícita.`,"install.confirm.execute":`Confirmar e executar`,"install.confirm.back":`Voltar`,"install.confirm.next":`Continuar`,"install.executing":`Executando o plano aprovado…`,"install.verify.running":`Revalidando o estado pós-instalação…`,"install.verify.unverified":`O backend não retornou checks — verificação não confirmada.`,"install.reinstall":`Reinstalar`,"install.newPlan":`Novo plano`,"install.flow.hint":`Nada é executado sem plano revisado e confirmação explícita — como na CLI.`,"install.ops.title":`Operações`,"install.ops.update":`Atualizar`,"install.ops.update.hint":`Atualização via portal não é exposta por este adapter — caminho não verificado.`,"install.ops.repair.hint":`Reexecuta verificações e repara entradas divergentes.`,"config.title":`Centro de configuração`,"config.subtitle":`Variáveis de ambiente desta Forja — somente metadados, nunca valores.`,"config.alert.missing":`Variáveis obrigatórias ausentes ou inválidas impedem a Forja de operar.`,"config.env.prefix":`Prefixo`,"config.env.scope":`Escopo`,"config.env.aliases":`Aliases do Windows`,"config.col.name":`Variável`,"config.col.required":`Obrigatória`,"config.col.present":`Presente`,"config.col.valid":`Válida`,"config.col.kind":`Tipo`,"config.col.path":`Caminho`,"config.prepare.title":`Preparar alterações`,"config.prepare.hint":`Comandos prontos para colar no seu shell — o portal nunca escreve variáveis por você.`,"config.prepare.none":`Nenhuma variável pendente — ambiente pronto.`,"config.apply.title":`Aplicar alterações`,"config.apply.portal":`Aplicar pelo portal`,"config.apply.unsupported":`Este adapter não expõe escrita de configuração — caminho não verificado.`,"config.profiles.link":`Ver perfis de componentes`,"config.profiles.hint":`Perfis definem quais componentes cada instalação habilita.`,"profiles.compare":`Comparar perfis`,"profiles.compare.hint":`Selecione dois perfis para ver a diferença de componentes.`,"profiles.compare.a":`Perfil A`,"profiles.compare.b":`Perfil B`,"profiles.compare.component":`Componente`,"profiles.compare.differences":`{count} diferenças`,"profiles.compare.same":`Perfis idênticos`,"nav.match":`Capacidades`,"hosts.launchable":`Iniciável pelo portal`,"hosts.commandHint":`Comando para o seu terminal`,"hosts.request":`Solicitar integração`,"hosts.ops.plan":`Planejar integração`,"hosts.ops.files":`Inspecionar arquivos afetados`,"hosts.ops.fix":`Corrigir integração`,"hosts.ops.disable":`Desativar integração`,"hosts.ops.unsupported":`Op não exposta por este adapter — não verificado`,"mcp.safety":`A verificação de handshake é somente-leitura — o portal nunca invoca tools MCP.`,"mcp.host.unbound":`não vinculado a host`,"mcp.inspector":`Inspetor`,"mcp.selectHint":`Selecione um servidor no registro para inspecioná-lo.`,"mcp.detail":`Detalhe`,"mcp.explain.NOT_CONFIGURED":`Declarado, mas sem configuração para nenhum host.`,"mcp.explain.CONFIGURED":`Configurado — nenhum handshake executado ainda.`,"mcp.explain.STARTING":`Processo iniciando — handshake em andamento.`,"mcp.explain.HANDSHAKE_VERIFIED":`O handshake de initialize foi verificado contra o servidor real.`,"mcp.explain.TOOLS_DISCOVERED":`A descoberta de tools foi verificada após o handshake.`,"mcp.explain.INVOCATION_VERIFIED":`Uma sonda de invocação foi verificada pelo adapter.`,"mcp.explain.DEGRADED":`O servidor respondeu, mas o adapter reporta evidência degradada.`,"mcp.explain.FAILED":`A última verificação falhou — veja o detalhe.`,"mcp.surface.tools":`Ferramentas`,"mcp.surface.resources":`Recursos`,"mcp.surface.prompts":`Prompts`,"mcp.surface.notExposed":`Superfície não exposta por este adapter — não verificada.`,"mcp.surface.countOnly":`Somente a contagem é informada — nomes não são expostos.`,"mcp.surface.noTools":`O adapter não informou a contagem de tools — não verificada.`,"mcp.receipt.latency":`latência medida pelo portal`,"mcp.receipt.latencyHint":`Ida e volta HTTP medida pelo portal — não é a latência do protocolo MCP.`,"mcp.verifying":`Verificando handshake…`,"mcp.compat.title":`Relatório de compatibilidade`,"mcp.compat.hint":`Estado observado vs a progressão esperada de handshake — por servidor.`,"mcp.diag.title":`Diagnóstico`,"mcp.diag.hint":`Servidores em FAILED ou DEGRADED — evidência primeiro, depois re-verifique.`,"agents.detail":`Detalhes`,"agents.responsibility":`Responsabilidade`,"agents.origin":`Forja de origem`,"agents.compatibleHosts":`Hosts compatíveis`,"agents.tools":`Ferramentas / MCP`,"agents.permissions":`Permissões`,"agents.deps":`Dependências`,"agents.evidence":`Evidência`,"agents.notExposed":`Não exposto por este adapter — não verificado`,"skills.detail.description":`Descrição`,"skills.origin":`Forja de origem`,"skills.compatibility":`Hosts compatíveis`,"skills.prerequisites":`Pré-requisitos`,"skills.fileValidation":`Validação de arquivos`,"skills.deps":`Dependências`,"skills.actions":`Instalar / reparar`,"skills.actionsUnverified":`Ops de instalação/reparo não expostas por este adapter — não verificado`,"skills.notExposed":`Não exposto por este adapter — não verificado`,"skills.evidence":`Evidência`,"skills.dedup.title":`Colisões de nome`,"skills.dedup.hint":`Linhas com mesmo nome são sinalizadas para revisão — nunca mescladas.`,"skills.dedup.possible":`possível duplicata`,"skills.dedup.different":`mesmo nome, entidade diferente`,"match.title":`Busca de capacidades`,"match.subtitle":`Qual agent, skill, Forja ou MCP cobre uma capacidade — respondido apenas com metadados reais de catálogo.`,"match.placeholder":`Ex.: pyspark glue, contratos de api, graph…`,"match.hint":`Tente: qual agent trabalha com X? · qual skill suporta Y? · qual Forja cobre Z?`,"match.empty":`Nenhuma entrada de catálogo corresponde a essa capacidade.`,"match.limitation":`Apenas metadados de catálogo pesquisados — capacidade em runtime não verificada.`,"match.evidence":`Evidência`,"nav.observe":`Observabilidade`,"nav.versions":`Versões`,"tasks.correlation":`Correlação`,"tasks.executing":`Executando plano…`,"tasks.export":`Exportar recibo`,"tasks.stale.title":`Plano expirado`,"tasks.stale.hint":`O plan token expirou — gere um novo plano para a mesma intenção. A execução nunca tenta de novo sozinha.`,"tasks.stale.regenerate":`Regenerar plano`,"tasks.ops.title":`Operações`,"tasks.ops.plan.hint":`Monta o plano a partir da intenção — nada executa ainda.`,"tasks.ops.execute.hint":`Executa um plano revisado, vinculado ao plan token.`,"tasks.ops.cancel.hint":`Operação de cancelamento não exposta pelo adapter.`,"tasks.limits":`Operações mutáveis têm limite de taxa e são vinculadas a um plan token; as transições de estágio vêm de registros reais de tarefas.`,"table.correlation":`Correlação`,"table.duration":`Duração`,"observe.title":`Observabilidade`,"observe.subtitle":`Métricas locais registradas por esta Forja — sem telemetria remota.`,"observe.localOnly":`Métricas somente locais — nada sai desta máquina.`,"observe.unavailable":`Esta Forja não expõe métricas locais — a capacidade está não verificada, nunca presumida.`,"observe.counters":`Contadores`,"observe.events":`Eventos`,"observe.generatedAt":`gerado {time}`,"observe.truncated":`Exibindo uma janela limitada — eventos mais antigos foram descartados para manter o relatório pequeno.`,"observe.filter.kind":`Tipo`,"observe.filter.status":`Status`,"observe.col.kind":`Tipo`,"observe.col.at":`Quando`,"observe.col.duration":`Duração`,"observe.col.status":`Status`,"observe.col.origin":`Origem`,"observe.col.correlation":`Correlação`,"observe.col.detail":`Detalhe`,"observe.empty":`Nenhum evento registrado ainda.`,"observe.empty.hint":`Métricas aparecem quando a Forja executa tarefas, instalações ou verificações.`,"observe.noMatches":`Nenhum evento corresponde aos filtros atuais.`,"nav.lab":`Lab`,"lab.title":`Forge Lab`,"lab.subtitle":`Execuções de benchmark, catálogo de cenários e comparações — só receipts reais.`,"lab.unavailable":`O endpoint /lab não existe neste adaptador — os dados de lab não podem ser verificados.`,"lab.empty.title":`Sem dados é honesto: nenhuma execução de lab coletada ainda.`,"lab.empty.subtitle":`Rode theforge lab collect — os resultados aparecem aqui, nunca mock.`,"lab.runs":`Histórico de execuções`,"lab.catalog":`Catálogo de cenários`,"lab.reports":`Relatórios`,"lab.notes":`Notas do coletor`,"lab.compare.title":`Comparação de vereditos`,"lab.compare.a":`run A`,"lab.compare.b":`vs`,"lab.filter.all":`Todas as forjas`,"lab.export.json":`JSON`,"lab.export.md":`Markdown`,"lab.col.file":`run`,"lab.col.forges":`forjas`,"lab.col.scenarios":`cenários`,"lab.col.pass":`pass`,"lab.col.fail":`fail`,"lab.col.skipped":`skipped`,"lab.col.forge":`forja`,"lab.col.scenario":`cenário`,"lab.col.verdict":`veredito`,"lab.col.duration":`duração`,"lab.col.metrics":`métricas`,"lab.col.detail":`detalhe`,"versions.title":`Versões`,"versions.subtitle":`Versão instalada, compatibilidade e histórico de releases — offline-first.`,"versions.unavailable":`Esta Forja não expõe informações de versão — a capacidade está não verificada, nunca presumida.`,"versions.installed":`Instalado`,"versions.installed.version":`Versão`,"versions.installed.origin":`Origem`,"versions.installed.channel":`Canal`,"versions.compat":`Compatibilidade`,"versions.available":`Disponível`,"versions.available.version":`Última`,"versions.available.source":`Fonte`,"versions.offline":`Sem consultas remotas de release no modo offline — a versão mais recente está não verificada, nunca suposta.`,"versions.changelog":`Changelog`,"versions.history":`Histórico`,"versions.history.version":`Versão`,"versions.history.at":`Quando`,"versions.history.detail":`Detalhe`,"versions.history.empty":`Nenhum histórico de versões registrado ainda.`,"versions.integrity":`Integridade`,"versions.integrity.release":`Release do manifesto`,"versions.integrity.sha256":`sha256 do manifesto`,"versions.pending":`Pendências e plano de upgrade`,"versions.pending.updates":`Atualizações pendentes`,"versions.pending.plan":`Plano de upgrade`,"versions.pending.cli":`A descoberta de atualizações é do Forge CLI — o portal não supõe pendências.`,"versions.receipts":`Receipts`,"versions.receipts.file":`Receipt`,"versions.receipts.operation":`Operação`,"versions.receipts.status":`Status`,"versions.rollback":`Rollback`};export{e as PT_BR};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,B as Te,Bt as zr,Et as pl,G as XI,H as UI,It as yg,K as YI,Lt as yh,O as LD,P as Qu,Rt as zI,U as Vv,_ as FD,c as $i,dt as hg,g as Eg,gt as jI,jt as uh,kt as sh,l as AD,m as DD,q as Yu,s as $I,st as g,u as BI,vt as kD,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{a as l,s as y}from"./chunk-DQU0VyoQ.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as _}from"./chunk-BaQMhq-G.js";import{t as w}from"./chunk-BVKnCv85.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$1}from"./chunk-C4gpbtbP.js";var R=t=>({time:t});var U=(t,n)=>n.key;function Y(t,n){t&1&&(ki(0,`section`,5),ah(1,`ui-state-badge`,8),ki(2,`span`,9),DD(3),kD(4,`t`),pl()()),t&2&&(Vv(3),yh(LD(4,1,`observe.unavailable`)))}function q(t,n){if(t&1){let e=YI();ki(0,`ui-error`,10),uh(`retry`,function(){Yu(e);let p=XI();return Qu(p.load())}),pl()}t&2&&sh(`error`,n)}function J(t,n){t&1&&(ki(0,`section`,7),kD(1,`t`),ah(2,`ui-skeleton`,11),pl()),t&2&&($i(`aria-label`,LD(1,2,`state.loading`)),Vv(2),sh(`lines`,3))}function Q(t,n){if(t&1&&(ki(0,`span`),DD(1),kD(2,`t`),pl()),t&2){let e=XI(2);Vv(),ml(` · `,FD(2,1,`common.updatedAt`,AD(4,R,e.stamp(n))))}}function W(t,n){if(t&1&&(ki(0,`div`,21)(1,`span`,22),DD(2),pl(),ki(3,`span`,23),DD(4),pl()()),t&2){let e=n.$implicit;$i(`data-counter`,e.key),Vv(2),yh(e.value),Vv(2),yh(e.key)}}function X(t,n){if(t&1&&(ki(0,`div`,15),$I(1,W,5,3,`div`,21,U),pl()),t&2){let e=XI(2);Vv(),zI(e.counters())}}function Z(t,n){t&1&&(ki(0,`p`,16),DD(1),kD(2,`t`),pl()),t&2&&(Vv(),yh(LD(2,1,`state.none`)))}function ee(t,n){t&1&&(ki(0,`p`,18),ah(1,`ui-icon`,24),ki(2,`span`),DD(3),kD(4,`t`),pl()()),t&2&&(Vv(),sh(`size`,14),Vv(2),yh(LD(4,2,`observe.truncated`)))}function te(t,n){if(t&1&&(ki(0,`option`,29),DD(1),pl()),t&2){let e=n.$implicit,l=XI(3);sh(`value`,e)(`selected`,l.kindFilter()===e),Vv(),yh(e)}}function ne(t,n){if(t&1&&(ki(0,`option`,29),DD(1),pl()),t&2){let e=n.$implicit,l=XI(3);sh(`value`,e)(`selected`,l.statusFilter()===e),Vv(),yh(e)}}function ie(t,n){if(t&1){let e=YI();ki(0,`div`,19)(1,`label`,25)(2,`span`,26),DD(3),kD(4,`t`),pl(),ki(5,`select`,27),uh(`change`,function(p){Yu(e);let x=XI(2);return Qu(x.setKind(p))}),ki(6,`option`,28),DD(7),kD(8,`t`),pl(),$I(9,te,2,3,`option`,29,BI),pl()(),ki(11,`label`,25)(12,`span`,26),DD(13),kD(14,`t`),pl(),ki(15,`select`,30),uh(`change`,function(p){Yu(e);let x=XI(2);return Qu(x.setStatus(p))}),ki(16,`option`,28),DD(17),kD(18,`t`),pl(),$I(19,ne,2,3,`option`,29,BI),pl()()()}if(t&2){let e=XI(2);Vv(3),yh(LD(4,6,`observe.filter.kind`)),Vv(3),sh(`selected`,e.kindFilter()===null),Vv(),ml(` `,LD(8,8,`state.all`),` `),Vv(2),zI(e.kindOptions()),Vv(4),yh(LD(14,10,`observe.filter.status`)),Vv(3),sh(`selected`,e.statusFilter()===null),Vv(),ml(` `,LD(18,12,`state.all`),` `),Vv(2),zI(e.statusOptions())}}function ae(t,n){if(t&1&&DD(0),t&2){let e=XI().$implicit;ml(` `,e.duration_ms,` ms `)}}function re(t,n){t&1&&(ki(0,`span`,9),DD(1,`—`),pl())}function oe(t,n){if(t&1&&(ki(0,`code`,34),DD(1),pl()),t&2){let e=n,l=XI(4);$i(`title`,e),Vv(),yh(l.short(e))}}function le(t,n){t&1&&(ki(0,`span`,9),DD(1,`—`),pl())}function de(t,n){if(t&1&&DD(0),t&2){let e=XI().$implicit;ml(` `,e.detail,` `)}}function se(t,n){t&1&&(ki(0,`span`,9),DD(1,`—`),pl())}function ce(t,n){if(t&1&&(ki(0,`tr`)(1,`td`)(2,`code`),DD(3),pl()(),ki(4,`td`,32),DD(5),pl(),ki(6,`td`,32),jI(7,ae,1,1)(8,re,2,0,`span`,9),pl(),ki(9,`td`),ah(10,`ui-state-badge`,33),pl(),ki(11,`td`),DD(12),pl(),ki(13,`td`),jI(14,oe,2,2,`code`,34)(15,le,2,0,`span`,9),pl(),ki(16,`td`),jI(17,de,1,1)(18,se,2,0,`span`,9),pl()()),t&2){let e,l=n.$implicit,p=XI(3);Vv(3),yh(l.kind),Vv(2),yh(p.fmt(l.at)),Vv(2),HI(l.duration_ms!==null?7:8),Vv(3),sh(`state`,p.statusKind(l.status))(`labelOverride`,l.status),Vv(2),yh(l.origin),Vv(2),HI((e=l.correlation_id)?14:15,e),Vv(3),HI(l.detail?17:18)}}function pe(t,n){if(t&1&&(ki(0,`div`,20)(1,`table`,31)(2,`thead`)(3,`tr`)(4,`th`),DD(5),kD(6,`t`),pl(),ki(7,`th`),DD(8),kD(9,`t`),pl(),ki(10,`th`),DD(11),kD(12,`t`),pl(),ki(13,`th`),DD(14),kD(15,`t`),pl(),ki(16,`th`),DD(17),kD(18,`t`),pl(),ki(19,`th`),DD(20),kD(21,`t`),pl(),ki(22,`th`),DD(23),kD(24,`t`),pl()()(),ki(25,`tbody`),$I(26,ce,19,8,`tr`,null,UI),pl()()()),t&2){let e=XI(2);Vv(5),yh(LD(6,7,`observe.col.kind`)),Vv(3),yh(LD(9,9,`observe.col.at`)),Vv(3),yh(LD(12,11,`observe.col.duration`)),Vv(3),yh(LD(15,13,`observe.col.status`)),Vv(3),yh(LD(18,15,`observe.col.origin`)),Vv(3),yh(LD(21,17,`observe.col.correlation`)),Vv(3),yh(LD(24,19,`observe.col.detail`)),Vv(3),zI(e.events())}}function me(t,n){t&1&&(ah(0,`ui-empty`,35),kD(1,`t`)),t&2&&sh(`title`,LD(1,1,`observe.noMatches`))}function _e(t,n){t&1&&(ah(0,`ui-empty`,36),kD(1,`t`),kD(2,`t`)),t&2&&sh(`title`,LD(1,2,`observe.empty`))(`hint`,LD(2,4,`observe.empty.hint`))}function ue(t,n){if(t&1&&jI(0,me,2,3,`ui-empty`,35)(1,_e,3,6,`ui-empty`,36),t&2){let e=XI();HI(e.events.length?0:1)}}function ve(t,n){if(t&1&&(ki(0,`section`,12)(1,`div`,13)(2,`div`)(3,`h2`),DD(4),kD(5,`t`),pl(),ki(6,`p`,14)(7,`code`),DD(8,`GET /api/v1/metrics`),pl(),jI(9,Q,3,6,`span`),pl()()(),jI(10,X,3,0,`div`,15)(11,Z,3,3,`p`,16),pl(),ki(12,`section`,17)(13,`div`,13)(14,`div`)(15,`h2`),DD(16),kD(17,`t`),pl(),ki(18,`p`,14)(19,`code`),DD(20,`GET /api/v1/metrics`),pl(),DD(21),kD(22,`t`),pl()()(),jI(23,ee,5,4,`p`,18),jI(24,ie,21,14,`div`,19),jI(25,pe,28,21,`div`,20)(26,ue,2,1),pl()),t&2){let e,l=n,p=XI();Vv(4),yh(LD(5,8,`observe.counters`)),Vv(5),HI((e=p.src.loadedAt())?9:-1,e),Vv(),HI(p.counters().length?10:11),Vv(6),yh(LD(17,10,`observe.events`)),Vv(5),ml(` — `,FD(22,12,`observe.generatedAt`,AD(15,R,p.fmt(l.generated_at))),` `),Vv(2),HI(l.truncated?23:-1),Vv(),HI(l.events.length?24:-1),Vv(),HI(p.events().length?25:26)}}var H=class t{api=g(hg);src=new l;report=zr(()=>this.src.data());kindFilter=Te(null);statusFilter=Te(null);counters=zr(()=>Object.entries(this.report()?.counters??{}).map(([n,e])=>({key:n,value:e})).sort((n,e)=>n.key.localeCompare(e.key)));kindOptions=zr(()=>[...new Set((this.report()?.events??[]).map(n=>n.kind))].sort((n,e)=>n.localeCompare(e)));statusOptions=zr(()=>[...new Set((this.report()?.events??[]).map(n=>n.status))].sort((n,e)=>n.localeCompare(e)));events=zr(()=>{let n=this.kindFilter(),e=this.statusFilter();return(this.report()?.events??[]).filter(l=>(n===null||l.kind===n)&&(e===null||l.status===e)).slice().sort((l,p)=>this.timeOf(p.at)-this.timeOf(l.at))});stamp=y;constructor(){this.load()}async load(){await this.src.load(()=>this.api.metrics())}setKind(n){let e=n.target.value;this.kindFilter.set(e===``?null:e)}setStatus(n){let e=n.target.value;this.statusFilter.set(e===``?null:e)}statusKind(n){let e=(n||``).toLowerCase();return[`ok`,`done`,`completed`,`success`,`succeeded`,`pass`,`passed`].includes(e)?`supported`:[`failed`,`fail`,`error`,`refused`,`denied`].includes(e)?`error`:[`skipped`,`cancelled`,`canceled`,`partial`,`degraded`].includes(e)?`warn`:[`running`,`pending`,`started`,`in_progress`,`planning`,`verifying`].includes(e)?`info`:`muted`}timeOf(n){let e=Date.parse(n);return Number.isNaN(e)?Number.NEGATIVE_INFINITY:e}fmt(n){let e=new Date(n);return Number.isNaN(e.getTime())?n:e.toLocaleString()}short(n){return n.length>10?`${n.slice(0,8)}\u2026`:n}static ɵfac=function(e){return new(e||t)};static ɵcmp=sl({type:t,selectors:[[`page-observe`]],decls:16,vars:19,consts:[[3,`title`,`subtitle`],[1,`btn`,3,`click`,`disabled`],[`name`,`refresh`,3,`size`],[`data-section`,`local-only`,`role`,`note`,1,`local`],[`name`,`shield-check`,3,`size`],[`data-section`,`unavailable`,`role`,`note`,1,`card`,`unv`],[3,`error`],[`role`,`status`,1,`card`],[`state`,`UNVERIFIED`],[1,`muted`],[3,`retry`,`error`],[`kind`,`row`,3,`lines`],[`data-section`,`counters`,1,`card`],[1,`sec__head`],[1,`src`],[1,`counters`],[`data-empty`,`counters`,1,`muted`],[`data-section`,`events`,1,`card`],[`data-note`,`truncated`,`role`,`note`,1,`truncated`],[`data-section`,`filters`,1,`filters`],[1,`table-wrap`],[1,`counter`],[1,`counter__value`],[1,`counter__key`],[`name`,`alert`,3,`size`],[1,`filter`],[1,`filter__lbl`],[`data-filter`,`kind`,1,`select`,3,`change`],[`value`,``,3,`selected`],[3,`value`,`selected`],[`data-filter`,`status`,1,`select`,3,`change`],[1,`table`],[1,`nowrap`],[3,`state`,`labelOverride`],[1,`corr`],[`icon`,`search`,`data-empty`,`no-matches`,3,`title`],[`icon`,`inbox`,`data-empty`,`events`,3,`title`,`hint`]],template:function(e,l){if(e&1&&(ki(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),ki(3,`button`,1),uh(`click`,function(){return l.load()}),ah(4,`ui-icon`,2),DD(5),kD(6,`t`),pl()(),ki(7,`p`,3),ah(8,`ui-icon`,4),ki(9,`span`),DD(10),kD(11,`t`),pl()(),jI(12,Y,5,3,`section`,5),jI(13,q,1,1,`ui-error`,6),jI(14,J,3,4,`section`,7),jI(15,ve,27,17)),e&2){let p,x;sh(`title`,LD(1,11,`observe.title`))(`subtitle`,LD(2,13,`observe.subtitle`)),Vv(3),sh(`disabled`,l.src.loading()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(6,15,`state.refresh`),` `),Vv(3),sh(`size`,15),Vv(2),yh(LD(11,17,`observe.localOnly`)),Vv(2),HI(l.src.unavailable()?12:-1),Vv(),HI((p=l.src.error())?13:-1,p),Vv(),HI(l.src.loading()&&!l.report()?14:-1),Vv(),HI((x=l.report())?15:-1,x)}},dependencies:[_$1,I,_,w,Eg,h,yg],styles:[`.local[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);margin:0 0 var(--%NS%space-4);padding:var(--%NS%space-3);border:1px dashed var(--%NS%border);border-radius:var(--%NS%radius-md);color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm)}.local[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{flex:none}.card[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.sec__head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.sec__head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-lg);font-weight:650}.src[_ngcontent-%COMP%]{margin:4px 0 0;font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted)}.muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}.unv[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3);border:1px dashed color-mix(in srgb,var(--%NS%warn) 55%,transparent);background:var(--%NS%warn-bg);font-size:var(--%NS%font-sm)}.counters[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--%NS%space-3)}.counter[_ngcontent-%COMP%]{display:grid;gap:2px;padding:var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);background:color-mix(in srgb,var(--%NS%bg-hover) 40%,transparent)}.counter__value[_ngcontent-%COMP%]{font-family:var(--%NS%font-mono);font-size:var(--%NS%font-2xl);font-weight:650}.counter__key[_ngcontent-%COMP%]{font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted);overflow-wrap:anywhere}.truncated[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);margin:0 0 var(--%NS%space-3);padding:var(--%NS%space-2) var(--%NS%space-3);border:1px dashed color-mix(in srgb,var(--%NS%warn) 55%,transparent);border-radius:var(--%NS%radius-md);background:var(--%NS%warn-bg);color:var(--%NS%fg-muted);font-size:var(--%NS%font-sm)}.truncated[_ngcontent-%COMP%] ui-icon[_ngcontent-%COMP%]{color:var(--%NS%warn);flex:none}.filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.filter[_ngcontent-%COMP%]{display:grid;gap:4px;min-width:160px}.filter__lbl[_ngcontent-%COMP%]{font-size:var(--%NS%font-xs);color:var(--%NS%fg-muted);text-transform:uppercase;letter-spacing:.04em}.table-wrap[_ngcontent-%COMP%]{overflow-x:auto}.table[_ngcontent-%COMP%]{min-width:820px}.nowrap[_ngcontent-%COMP%]{white-space:nowrap}.corr[_ngcontent-%COMP%]{font-size:var(--%NS%font-xs)}`]})};export{H as ObservePage};
@@ -0,0 +1 @@
1
+ import{$ as ah,At as sl,B as Te,Bt as zr,Et as pl,G as XI,It as yg,K as YI,Lt as yh,O as LD,P as Qu,Rt as zI,U as Vv,V as Tg,_ as FD,_t as jn,a as f,c as $i,dt as hg,g as Eg,gt as jI,jt as uh,kt as sh,l as AD,m as DD,q as Yu,s as $I,st as g,t as Nt,vt as kD,xt as ml,y as HI,yt as ki}from"./main-QDFVZK3T.js";import{t as h}from"./chunk-DqWNkF1O.js";import{t as _}from"./chunk-BaQMhq-G.js";import{t as w}from"./chunk-BVKnCv85.js";import{t as I}from"./chunk-DyIHOW_a.js";import{t as _$1}from"./chunk-C4gpbtbP.js";var G=t=>({count:t});var H=(t,r)=>r.name;function J(t,r){if(t&1){let o=YI();ki(0,`ui-error`,5),uh(`retry`,function(){Yu(o);let g=XI();return Qu(g.load())}),pl()}t&2&&sh(`error`,r)}function K(t,r){t&1&&(ki(0,`section`,4),ah(1,`ui-skeleton`,6),pl()),t&2&&(Vv(),sh(`lines`,4))}function Q(t,r){if(t&1&&(ki(0,`p`,12),ah(1,`ui-icon`,26),DD(2),kD(3,`t`),pl()),t&2){let o=XI(2);Vv(),sh(`size`,15),Vv(),ml(` `,FD(3,2,`config.alert.missing`,AD(5,G,o.missingRequired().length)),` `)}}function W(t,r){t&1&&ah(0,`ui-state-badge`,22)}function X(t,r){t&1&&(DD(0),kD(1,`t`)),t&2&&ml(` `,LD(1,1,`state.yes`),` `)}function Y(t,r){t&1&&ah(0,`ui-state-badge`,27)}function Z(t,r){if(t&1&&(ki(0,`code`,28),DD(1),pl()),t&2){let o=XI().$implicit;Vv(),yh(o.path)}}function ee(t,r){t&1&&(ki(0,`span`,17),DD(1),kD(2,`t`),pl()),t&2&&(Vv(),yh(LD(2,1,`environmentState.UNSET`)))}function te(t,r){if(t&1&&(ki(0,`tr`)(1,`td`)(2,`code`),DD(3),pl()(),ki(4,`td`),DD(5),kD(6,`t`),pl(),ki(7,`td`),DD(8),kD(9,`t`),pl(),ki(10,`td`),jI(11,W,1,0,`ui-state-badge`,22)(12,X,2,3)(13,Y,1,0,`ui-state-badge`,27),pl(),ki(14,`td`),DD(15),pl(),ki(16,`td`),jI(17,Z,2,1,`code`,28)(18,ee,3,3,`span`,17),pl()()),t&2){let o=r.$implicit;$i(`data-missing`,o.required&&!o.present||null)(`data-invalid`,o.valid===!1||null),Vv(3),yh(o.name),Vv(2),yh(LD(6,8,o.required?`state.required`:`state.optional`)),Vv(3),yh(LD(9,10,o.present?`state.yes`:`state.no`)),Vv(3),HI(o.valid===null?11:o.valid?12:13),Vv(4),yh(o.kind),Vv(2),HI(o.path?17:18)}}function ie(t,r){if(t&1&&(ki(0,`table`,13)(1,`thead`)(2,`tr`)(3,`th`),DD(4),kD(5,`t`),pl(),ki(6,`th`),DD(7),kD(8,`t`),pl(),ki(9,`th`),DD(10),kD(11,`t`),pl(),ki(12,`th`),DD(13),kD(14,`t`),pl(),ki(15,`th`),DD(16),kD(17,`t`),pl(),ki(18,`th`),DD(19),kD(20,`t`),pl()()(),ki(21,`tbody`),$I(22,te,19,12,`tr`,null,H),pl()()),t&2){let o=XI();Vv(4),yh(LD(5,6,`config.col.name`)),Vv(3),yh(LD(8,8,`config.col.required`)),Vv(3),yh(LD(11,10,`config.col.present`)),Vv(3),yh(LD(14,12,`config.col.valid`)),Vv(3),yh(LD(17,14,`config.col.kind`)),Vv(3),yh(LD(20,16,`config.col.path`)),Vv(3),zI(o.variables)}}function ne(t,r){t&1&&(ah(0,`ui-empty`,14),kD(1,`t`),kD(2,`t`)),t&2&&sh(`title`,LD(1,2,`empty.noData`))(`hint`,LD(2,4,`empty.noData.hint`))}function ae(t,r){if(t&1){let o=YI();ki(0,`div`,18)(1,`code`,29),DD(2),pl(),ki(3,`div`,30)(4,`div`,31)(5,`span`,32),DD(6,`PowerShell`),pl(),ki(7,`code`,33),DD(8),pl(),ki(9,`button`,34),kD(10,`t`),uh(`click`,function(){let g=Yu(o).$implicit,v=XI(2);return Qu(v.copy(v.psCommand(g.name)))}),ah(11,`ui-icon`,35),DD(12),kD(13,`t`),pl()(),ki(14,`div`,31)(15,`span`,32),DD(16,`bash`),pl(),ki(17,`code`,33),DD(18),pl(),ki(19,`button`,34),kD(20,`t`),uh(`click`,function(){let g=Yu(o).$implicit,v=XI(2);return Qu(v.copy(v.shCommand(g.name)))}),ah(21,`ui-icon`,35),DD(22),kD(23,`t`),pl()()()()}if(t&2){let o=r.$implicit,c=XI(2);Vv(2),yh(o.name),Vv(6),yh(c.psCommand(o.name)),Vv(),$i(`aria-label`,LD(10,9,`state.copy`)),Vv(2),sh(`size`,13),Vv(),ml(` `,LD(13,11,`state.copy`),` `),Vv(6),yh(c.shCommand(o.name)),Vv(),$i(`aria-label`,LD(20,13,`state.copy`)),Vv(2),sh(`size`,13),Vv(),ml(` `,LD(23,15,`state.copy`),` `)}}function re(t,r){t&1&&(ki(0,`p`,17),DD(1),kD(2,`t`),pl()),t&2&&(Vv(),yh(LD(2,1,`config.prepare.none`)))}function oe(t,r){if(t&1&&(ki(0,`section`,7)(1,`div`,8)(2,`h2`,9),DD(3),kD(4,`t`),pl(),ah(5,`ui-state-badge`,10),pl(),ki(6,`dl`,11)(7,`div`)(8,`dt`),DD(9),kD(10,`t`),pl(),ki(11,`dd`)(12,`code`),DD(13),pl()()(),ki(14,`div`)(15,`dt`),DD(16),kD(17,`t`),pl(),ki(18,`dd`),DD(19),pl()(),ki(20,`div`)(21,`dt`),DD(22),kD(23,`t`),pl(),ki(24,`dd`),DD(25),kD(26,`t`),pl()()(),jI(27,Q,4,7,`p`,12),jI(28,ie,24,18,`table`,13)(29,ne,3,6,`ui-empty`,14),pl(),ki(30,`section`,15)(31,`h2`,16),DD(32),kD(33,`t`),pl(),ki(34,`p`,17),DD(35),kD(36,`t`),pl(),$I(37,ae,24,17,`div`,18,H,!1,re,3,3,`p`,17),pl(),ki(40,`section`,19)(41,`h2`,20),DD(42),kD(43,`t`),pl(),ki(44,`ul`,21)(45,`li`),ah(46,`ui-state-badge`,22),ki(47,`span`,23)(48,`strong`),DD(49),kD(50,`t`),pl(),ki(51,`small`,17),DD(52),kD(53,`t`),pl()()()(),ki(54,`a`,24),ah(55,`ui-icon`,25),DD(56),kD(57,`t`),pl(),ki(58,`p`,17),DD(59),kD(60,`t`),pl()()),t&2){let o=r,c=XI();Vv(3),yh(LD(4,19,`dashboard.accountEnvironment`)),Vv(2),sh(`state`,o.state),Vv(4),yh(LD(10,21,`config.env.prefix`)),Vv(4),yh(o.prefix),Vv(3),yh(LD(17,23,`config.env.scope`)),Vv(3),yh(o.scope),Vv(3),yh(LD(23,25,`config.env.aliases`)),Vv(3),yh(LD(26,27,o.windows_aliases?`state.yes`:`state.no`)),Vv(2),HI(c.missingRequired().length?27:-1),Vv(),HI(o.variables.length?28:29),Vv(4),yh(LD(33,29,`config.prepare.title`)),Vv(3),yh(LD(36,31,`config.prepare.hint`)),Vv(2),zI(c.attention()),Vv(5),yh(LD(43,33,`config.apply.title`)),Vv(7),yh(LD(50,35,`config.apply.portal`)),Vv(3),yh(LD(53,37,`config.apply.unsupported`)),Vv(3),sh(`size`,15),Vv(),ml(` `,LD(57,39,`config.profiles.link`),` `),Vv(3),yh(LD(60,41,`config.profiles.hint`))}}var j=class t{api=g(hg);toast=g(f);env=Te(null);error=Te(null);loading=Te(!0);attention=zr(()=>(this.env()?.variables??[]).filter(r=>!r.present||r.valid===!1));missingRequired=zr(()=>(this.env()?.variables??[]).filter(r=>r.required&&(!r.present||r.valid===!1)));constructor(){this.load()}async load(){this.error.set(null),this.loading.set(!0);try{this.env.set(await Tg(this.api.accountEnvironment()))}catch(r){this.error.set(r instanceof jn?r:new jn(0))}finally{this.loading.set(!1)}}psCommand(r){return`[Environment]::SetEnvironmentVariable('${r}', '', 'User')`}shCommand(r){return`export ${r}=`}async copy(r){try{await navigator.clipboard.writeText(r),this.toast.show(`state.copied`,`success`)}catch{this.toast.show(`error.generic`,`error`)}}static ɵfac=function(o){return new(o||t)};static ɵcmp=sl({type:t,selectors:[[`page-config`]],decls:10,vars:14,consts:[[3,`title`,`subtitle`],[1,`btn`,3,`click`,`disabled`],[`name`,`refresh`,3,`size`],[3,`error`],[`role`,`status`,`aria-live`,`polite`,1,`card`],[3,`retry`,`error`],[`kind`,`card`,3,`lines`],[`aria-labelledby`,`env-h`,1,`card`],[1,`card__heading`],[`id`,`env-h`],[3,`state`],[1,`kv`],[`role`,`alert`,1,`env-alert`],[1,`table`,`env-table`],[3,`title`,`hint`],[`aria-labelledby`,`prepare-h`,1,`card`,`prepare`],[`id`,`prepare-h`],[1,`muted`],[1,`prep`],[`aria-labelledby`,`apply-h`,1,`card`],[`id`,`apply-h`],[1,`capability`],[`state`,`unverified`],[1,`capability__body`],[`routerLink`,`/profiles`,1,`btn`],[`name`,`profiles`,3,`size`],[`name`,`alert`,3,`size`],[`state`,`INVALID`],[1,`path`],[1,`prep__name`],[1,`prep__cmds`],[1,`cmd`],[1,`cmd__shell`],[1,`cmd__text`],[1,`btn`,`btn--mini`,3,`click`],[`name`,`copy`,3,`size`]],template:function(o,c){if(o&1&&(ki(0,`ui-page-header`,0),kD(1,`t`),kD(2,`t`),ki(3,`button`,1),uh(`click`,function(){return c.load()}),ah(4,`ui-icon`,2),DD(5),kD(6,`t`),pl()(),jI(7,J,1,1,`ui-error`,3),jI(8,K,2,1,`section`,4),jI(9,oe,61,43)),o&2){let g,v;sh(`title`,LD(1,8,`config.title`))(`subtitle`,LD(2,10,`config.subtitle`)),Vv(3),sh(`disabled`,c.loading()),Vv(),sh(`size`,15),Vv(),ml(` `,LD(6,12,`state.refresh`),` `),Vv(2),HI((g=c.error())?7:-1,g),Vv(),HI(c.loading()&&!c.env()?8:-1),Vv(),HI((v=c.env())?9:-1,v)}},dependencies:[Nt,_$1,I,w,_,Eg,h,yg],styles:[`.card[_ngcontent-%COMP%]{margin-bottom:var(--%NS%space-4)}.card[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0 0 var(--%NS%space-3);font-size:var(--%NS%font-lg);font-weight:650;letter-spacing:-.01em}.card__heading[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:var(--%NS%space-3);margin-bottom:var(--%NS%space-3)}.card__heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0}.kv[_ngcontent-%COMP%]{display:grid;gap:6px;margin:0 0 var(--%NS%space-3)}.kv[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;gap:var(--%NS%space-2)}.kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--%NS%fg-muted);min-width:140px}.kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;font-weight:550}.env-alert[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);margin:0 0 var(--%NS%space-3);padding:var(--%NS%space-2) var(--%NS%space-3);border:1px solid color-mix(in srgb,var(--%NS%warn) 45%,transparent);border-left-width:3px;border-radius:var(--%NS%radius-md);background:var(--%NS%warn-bg);color:var(--%NS%warn);font-weight:550}.env-table[_ngcontent-%COMP%]{margin-top:var(--%NS%space-2)}.env-table[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--%NS%font-mono);font-size:var(--%NS%font-xs)}.env-table[_ngcontent-%COMP%] .path[_ngcontent-%COMP%]{overflow-wrap:anywhere;word-break:break-all}.env-table[_ngcontent-%COMP%] tr[data-missing][_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%warn) 8%,transparent)}.env-table[_ngcontent-%COMP%] tr[data-missing][_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child{border-left:3px solid var(--%NS%warn)}.env-table[_ngcontent-%COMP%] tr[data-invalid][_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%error) 7%,transparent)}.env-table[_ngcontent-%COMP%] tr[data-invalid][_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child{border-left:3px solid var(--%NS%error)}.prep[_ngcontent-%COMP%]{padding:var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);margin-bottom:var(--%NS%space-2);display:grid;gap:var(--%NS%space-2)}.prep__name[_ngcontent-%COMP%]{font-weight:650;overflow-wrap:anywhere}.prep__cmds[_ngcontent-%COMP%]{display:grid;gap:var(--%NS%space-2)}.cmd[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-2);padding:var(--%NS%space-2) var(--%NS%space-3);border:1px solid var(--%NS%border);border-radius:var(--%NS%radius-md);background:var(--%NS%bg)}.cmd__shell[_ngcontent-%COMP%]{flex:none;font-size:var(--%NS%font-xs);font-weight:700;color:var(--%NS%fg-muted);text-transform:uppercase;letter-spacing:.04em;min-width:76px}.cmd__text[_ngcontent-%COMP%]{flex:1;min-width:0;font-family:var(--%NS%font-mono);font-size:var(--%NS%font-xs);overflow-wrap:anywhere}.btn--mini[_ngcontent-%COMP%]{padding:2px var(--%NS%space-2);font-size:var(--%NS%font-xs);gap:4px;flex:none}.capability[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0 0 var(--%NS%space-3);display:grid;gap:var(--%NS%space-2)}.capability[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--%NS%space-3);padding:var(--%NS%space-3);border:1px dashed var(--%NS%border);border-radius:var(--%NS%radius-md)}.capability__body[_ngcontent-%COMP%]{display:grid;gap:2px}.capability__body[_ngcontent-%COMP%] small[_ngcontent-%COMP%], .muted[_ngcontent-%COMP%]{color:var(--%NS%fg-muted)}a.btn[_ngcontent-%COMP%]{display:inline-flex;text-decoration:none}`]})};export{j as ConfigPage};
@@ -0,0 +1 @@
1
+ import{At as sl,G as XI,Lt as yh,T as JI,U as Vv,Y as Zi,gt as jI,it as eD,lt as gl,m as DD,pt as hl,y as HI}from"./main-QDFVZK3T.js";var h=[`*`];function y(t,r){if(t&1&&(hl(0,`p`,3),DD(1),gl()),t&2){let e=XI();Vv(),yh(e.subtitle())}}var _=class t{title=Zi.required();subtitle=Zi(null);static ɵfac=function(e){return new(e||t)};static ɵcmp=sl({type:t,selectors:[[`ui-page-header`]],inputs:{title:[1,`title`],subtitle:[1,`subtitle`]},ngContentSelectors:h,decls:7,vars:2,consts:[[1,`ph`],[1,`ph__text`],[1,`ph__title`],[1,`ph__sub`],[1,`ph__actions`]],template:function(e,d){e&1&&(JI(),hl(0,`header`,0)(1,`div`,1)(2,`h1`,2),DD(3),gl(),jI(4,y,2,1,`p`,3),gl(),hl(5,`div`,4),eD(6),gl()()),e&2&&(Vv(3),yh(d.title()),Vv(),HI(d.subtitle()?4:-1))},styles:[`.ph[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--%NS%space-4);margin-bottom:var(--%NS%space-6)}.ph__title[_ngcontent-%COMP%]{margin:0;font-size:var(--%NS%font-2xl);font-weight:700;letter-spacing:-.02em}.ph__sub[_ngcontent-%COMP%]{margin:4px 0 0;color:var(--%NS%fg-muted);max-width:68ch}.ph__actions[_ngcontent-%COMP%]{display:flex;gap:var(--%NS%space-2);flex-shrink:0}`]})};export{_ as t};