@a5c-ai/kradle 5.0.1-staging.3abdf9534c25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +31 -0
- package/README.md +187 -0
- package/bin/kradle-demo.mjs +23 -0
- package/bin/kradle-server.mjs +14 -0
- package/dist/kradle-controller-ui.json +3482 -0
- package/dist/kradle-lifecycle.json +201 -0
- package/dist/kradle-runtime-snapshot.json +3125 -0
- package/dist/kradle-summary.json +724 -0
- package/docs/README.md +61 -0
- package/docs/agents/README.md +83 -0
- package/docs/agents/acceptance-test-matrix.md +193 -0
- package/docs/agents/agent-mux-adapter-contract.md +167 -0
- package/docs/agents/agent-mux-source-map.md +310 -0
- package/docs/agents/agent-run-memory-import-spec.md +256 -0
- package/docs/agents/agent-stack-management-spec.md +421 -0
- package/docs/agents/api-contract-spec.md +309 -0
- package/docs/agents/artifacts-writeback-spec.md +145 -0
- package/docs/agents/chart-packaging-spec.md +128 -0
- package/docs/agents/ci-orchestration-spec.md +140 -0
- package/docs/agents/context-assembly-spec.md +219 -0
- package/docs/agents/controller-reconciliation-spec.md +255 -0
- package/docs/agents/crd-schema-spec.md +315 -0
- package/docs/agents/decision-log-open-questions.md +169 -0
- package/docs/agents/developer-implementation-checklist.md +329 -0
- package/docs/agents/dispatching-design.md +262 -0
- package/docs/agents/gaps-agent-mux-to-kradle-crds.md +298 -0
- package/docs/agents/glossary.md +66 -0
- package/docs/agents/implementation-blueprint.md +324 -0
- package/docs/agents/implementation-rollout-slices.md +251 -0
- package/docs/agents/memory-context-integration-spec.md +194 -0
- package/docs/agents/memory-ontology-schema-spec.md +253 -0
- package/docs/agents/memory-operations-runbook.md +121 -0
- package/docs/agents/mvp-vertical-slice-spec.md +146 -0
- package/docs/agents/observability-audit-spec.md +265 -0
- package/docs/agents/operator-runbook.md +174 -0
- package/docs/agents/org-memory-api-payload-examples.md +333 -0
- package/docs/agents/org-memory-controller-sequence-spec.md +181 -0
- package/docs/agents/org-memory-e2e-fixture-plan.md +161 -0
- package/docs/agents/org-memory-ui-implementation-map.md +114 -0
- package/docs/agents/org-memory-vertical-slice-spec.md +168 -0
- package/docs/agents/org-resource-model-delta-spec.md +111 -0
- package/docs/agents/org-route-resource-model-spec.md +183 -0
- package/docs/agents/org-scoping-namespace-spec.md +114 -0
- package/docs/agents/rbac-secrets-management-spec.md +406 -0
- package/docs/agents/repository-page-integration-spec.md +255 -0
- package/docs/agents/resource-contract-examples.md +808 -0
- package/docs/agents/resource-relationship-map.md +190 -0
- package/docs/agents/security-threat-model.md +188 -0
- package/docs/agents/shared-memory-company-brain-spec.md +358 -0
- package/docs/agents/storage-migration-spec.md +168 -0
- package/docs/agents/subagent-orchestration-spec.md +152 -0
- package/docs/agents/system-overview.md +88 -0
- package/docs/agents/tools-mcp-skills-spec.md +189 -0
- package/docs/agents/traceability-matrix.md +79 -0
- package/docs/agents/ui-flow-spec.md +211 -0
- package/docs/agents/ui-ux-system-spec.md +426 -0
- package/docs/agents/workspace-lifecycle-spec.md +166 -0
- package/docs/architecture-spec.md +78 -0
- package/docs/architecture-v2.md +2759 -0
- package/docs/components/control-plane.md +78 -0
- package/docs/components/data-plane.md +69 -0
- package/docs/components/hooks-events.md +67 -0
- package/docs/components/identity-rbac-policy.md +73 -0
- package/docs/components/kubevela-oam.md +70 -0
- package/docs/components/operations-publishing.md +81 -0
- package/docs/components/runners-ci.md +66 -0
- package/docs/components/web-ui.md +94 -0
- package/docs/crd-behaviors-and-relationships.md +3926 -0
- package/docs/external/README.md +47 -0
- package/docs/external/bidirectional-sync-design.md +134 -0
- package/docs/external/cicd-interface.md +64 -0
- package/docs/external/external-backend-controllers.md +170 -0
- package/docs/external/external-backend-crds.md +234 -0
- package/docs/external/external-backend-ui-spec.md +151 -0
- package/docs/external/external-backend-ux-flows.md +115 -0
- package/docs/external/external-object-mapping.md +125 -0
- package/docs/external/git-forge-interface.md +68 -0
- package/docs/external/github-integration-design.md +151 -0
- package/docs/external/issue-tracking-interface.md +66 -0
- package/docs/external/provider-capability-manifests.md +204 -0
- package/docs/external/provider-catalog.md +139 -0
- package/docs/external/provider-rollout-testing.md +78 -0
- package/docs/external/research-results.md +48 -0
- package/docs/external/security-auth-permissions.md +81 -0
- package/docs/external/sync-state-machines.md +108 -0
- package/docs/external/unified-external-backend-model.md +107 -0
- package/docs/external/user-facing-changes.md +67 -0
- package/docs/gaps.md +161 -0
- package/docs/install.md +94 -0
- package/docs/integration-and-design-decisions.md +1530 -0
- package/docs/kradle-design.md +334 -0
- package/docs/local-minikube.md +55 -0
- package/docs/ontology/README.md +32 -0
- package/docs/ontology/bounded-contexts.md +29 -0
- package/docs/ontology/events-and-hooks.md +32 -0
- package/docs/ontology/oam-kubevela.md +32 -0
- package/docs/ontology/operations-and-release.md +25 -0
- package/docs/ontology/personas-and-actors.md +32 -0
- package/docs/ontology/policies-and-invariants.md +33 -0
- package/docs/ontology/problem-space.md +30 -0
- package/docs/ontology/resource-contracts.md +40 -0
- package/docs/ontology/resource-taxonomy.md +42 -0
- package/docs/ontology/runners-and-ci.md +29 -0
- package/docs/ontology/solution-space.md +24 -0
- package/docs/ontology/storage-and-data-boundaries.md +29 -0
- package/docs/ontology/validation-matrix.md +24 -0
- package/docs/ontology/web-ui-excellent-flows.md +32 -0
- package/docs/ontology/workflows.md +39 -0
- package/docs/ontology/world.md +35 -0
- package/docs/openapi.yaml +1291 -0
- package/docs/product-requirements.md +62 -0
- package/docs/requirements-v2.md +235 -0
- package/docs/roadmap-mvp.md +87 -0
- package/docs/sdk-api-reference.md +1108 -0
- package/docs/system-requirements.md +90 -0
- package/docs/system-spec-v2.md +1230 -0
- package/docs/tests/README.md +53 -0
- package/docs/tests/agent-qa-plan.md +63 -0
- package/docs/tests/browser-ui-tests.md +62 -0
- package/docs/tests/ci-quality-gates.md +48 -0
- package/docs/tests/coverage-model.md +64 -0
- package/docs/tests/e2e-scenario-tests.md +53 -0
- package/docs/tests/fixtures-test-data.md +63 -0
- package/docs/tests/observability-reliability-tests.md +54 -0
- package/docs/tests/product-test-matrix.md +145 -0
- package/docs/tests/qa-adoption-roadmap.md +130 -0
- package/docs/tests/qa-automation-plan.md +101 -0
- package/docs/tests/security-compliance-tests.md +57 -0
- package/docs/tests/test-framework-tools.md +88 -0
- package/docs/tests/test-suite-layout.md +121 -0
- package/docs/tests/unit-integration-tests.md +48 -0
- package/docs/todo-kyverno +714 -0
- package/docs/todos.md +4 -0
- package/docs/user-stories.md +78 -0
- package/docs/web-console-spec.md +533 -0
- package/examples/minikube-demo.yaml +190 -0
- package/examples/oam-application.yaml +23 -0
- package/examples/policy-kyverno-pr-title.yaml +18 -0
- package/package.json +66 -0
- package/scripts/build.mjs +29 -0
- package/scripts/setup-minikube.mjs +65 -0
- package/scripts/smoke.mjs +37 -0
- package/scripts/validate-doc-coverage.mjs +152 -0
- package/scripts/validate-package.mjs +95 -0
- package/scripts/validate-ui.mjs +305 -0
- package/src/agent-adapter-controller.js +169 -0
- package/src/agent-approval-controller.js +170 -0
- package/src/agent-context-bundles.js +242 -0
- package/src/agent-dispatch-controller.js +549 -0
- package/src/agent-gateway-config-controller.js +147 -0
- package/src/agent-identity-migration.js +115 -0
- package/src/agent-memory-controller.js +357 -0
- package/src/agent-memory-import.js +327 -0
- package/src/agent-memory-query.js +292 -0
- package/src/agent-memory-repository-source-controller.js +255 -0
- package/src/agent-mux-client.js +589 -0
- package/src/agent-permission-review.js +250 -0
- package/src/agent-persona-controller.js +135 -0
- package/src/agent-project-controller.js +117 -0
- package/src/agent-prompt-composition.js +55 -0
- package/src/agent-provider-config-controller.js +151 -0
- package/src/agent-secret-config-grant-controller.js +282 -0
- package/src/agent-session-transcript-controller.js +189 -0
- package/src/agent-stack-controller.js +421 -0
- package/src/agent-subagent-controller.js +160 -0
- package/src/agent-transport-binding-controller.js +121 -0
- package/src/agent-trigger-controller.js +387 -0
- package/src/agent-workspace-controller.js +702 -0
- package/src/agent-writeback-controller.js +302 -0
- package/src/api-controller.js +621 -0
- package/src/argocd-gitops.js +43 -0
- package/src/artifact-registry-controller.js +542 -0
- package/src/assistant-runtime.js +284 -0
- package/src/async-controller.js +207 -0
- package/src/audit-controller.js +191 -0
- package/src/auth.js +310 -0
- package/src/component-catalog.js +41 -0
- package/src/control-plane.js +136 -0
- package/src/controller-client.js +112 -0
- package/src/controller-ui.js +620 -0
- package/src/data-plane.js +179 -0
- package/src/event-bus.js +397 -0
- package/src/external/conflict-controller.js +225 -0
- package/src/external/github/auth.js +96 -0
- package/src/external/github/cicd.js +180 -0
- package/src/external/github/git-forge.js +240 -0
- package/src/external/github/index.js +144 -0
- package/src/external/github/issue-tracking.js +163 -0
- package/src/external/provider-adapter.js +161 -0
- package/src/external/provider-resource-factory.js +221 -0
- package/src/external/sync-controller.js +235 -0
- package/src/external/webhook-controller.js +144 -0
- package/src/external/write-controller.js +283 -0
- package/src/gitea-backend.js +131 -0
- package/src/gitea-service.js +173 -0
- package/src/handoff.js +98 -0
- package/src/health-probes.js +134 -0
- package/src/hooks-events.js +63 -0
- package/src/hooks-lifecycle.js +117 -0
- package/src/http-server.js +409 -0
- package/src/identity-policy.js +86 -0
- package/src/index.js +71 -0
- package/src/jitsi-agent-bridge.js +141 -0
- package/src/jitsi-meeting-controller.js +291 -0
- package/src/jitsi-sync-controller.js +198 -0
- package/src/kradle-inference-service-controller.js +246 -0
- package/src/kubernetes-controller-async.js +531 -0
- package/src/kubernetes-controller.js +904 -0
- package/src/kubernetes-resource-gateway.js +48 -0
- package/src/model-route-controller.js +364 -0
- package/src/notification-controller.js +178 -0
- package/src/operations.js +112 -0
- package/src/org-scoping.js +5 -0
- package/src/resource-model.js +282 -0
- package/src/runner-controller.js +272 -0
- package/src/runners-ci.js +48 -0
- package/src/runtime.js +196 -0
- package/src/snapshot-cache.js +157 -0
- package/src/virtual-model-controller.js +538 -0
- package/src/virtual-model-hook-bridge.js +200 -0
- package/src/web-ui.js +40 -0
- package/tests/agent-adapter-controller.test.js +361 -0
- package/tests/agent-approval-controller.test.js +173 -0
- package/tests/agent-context-bundles.test.js +278 -0
- package/tests/agent-dispatch-controller.test.js +679 -0
- package/tests/agent-gateway-config-controller.test.js +386 -0
- package/tests/agent-identity-migration.test.js +87 -0
- package/tests/agent-memory-controller.test.js +461 -0
- package/tests/agent-memory-import-snapshot.test.js +477 -0
- package/tests/agent-memory-query.test.js +404 -0
- package/tests/agent-memory-repository-source.test.js +514 -0
- package/tests/agent-mux-client.test.js +389 -0
- package/tests/agent-mux-integration.test.js +971 -0
- package/tests/agent-permission-review-v2.test.js +317 -0
- package/tests/agent-permission-review.test.js +209 -0
- package/tests/agent-persona-controller.test.js +127 -0
- package/tests/agent-project-controller.test.js +302 -0
- package/tests/agent-prompt-composition.test.js +76 -0
- package/tests/agent-provider-config-controller.test.js +376 -0
- package/tests/agent-resources.test.js +303 -0
- package/tests/agent-secret-config-grant.test.js +231 -0
- package/tests/agent-session-transcript-controller.test.js +499 -0
- package/tests/agent-stack-controller.test.js +283 -0
- package/tests/agent-subagent-controller.test.js +201 -0
- package/tests/agent-transport-binding-controller.test.js +294 -0
- package/tests/agent-trigger-controller.test.js +271 -0
- package/tests/agent-trigger-routes.test.js +190 -0
- package/tests/agent-trigger-sources.test.js +245 -0
- package/tests/agent-workspace-controller.test.js +181 -0
- package/tests/agent-writeback.test.js +292 -0
- package/tests/approval-persistence.test.js +171 -0
- package/tests/artifact-registry.test.js +511 -0
- package/tests/assistant-runtime.test.js +506 -0
- package/tests/async-controller.test.js +252 -0
- package/tests/audit-controller.test.js +227 -0
- package/tests/codespace-controller.test.js +318 -0
- package/tests/controller-client.test.js +133 -0
- package/tests/deployment.test.js +527 -0
- package/tests/e2e/lifecycle.test.js +120 -0
- package/tests/event-bus-integration.test.js +355 -0
- package/tests/external-github-forge.test.js +560 -0
- package/tests/external-github-issues-cicd.test.js +520 -0
- package/tests/external-integration.test.js +470 -0
- package/tests/external-persistence.test.js +415 -0
- package/tests/external-provider-adapter.test.js +365 -0
- package/tests/external-resource-model.test.js +223 -0
- package/tests/external-webhook-sync.test.js +287 -0
- package/tests/external-write-conflict.test.js +353 -0
- package/tests/gitea-service.test.js +253 -0
- package/tests/health-check-real.test.js +165 -0
- package/tests/health-probes.test.js +90 -0
- package/tests/hooks-lifecycle.test.js +364 -0
- package/tests/integration/full-flow.test.js +266 -0
- package/tests/jitsi-agent-bridge.test.js +119 -0
- package/tests/jitsi-helm-integration.test.js +77 -0
- package/tests/jitsi-meeting-controller.test.js +170 -0
- package/tests/jitsi-resource-model.test.js +73 -0
- package/tests/jitsi-sync-controller.test.js +112 -0
- package/tests/kradle-inference-service.test.js +689 -0
- package/tests/kradle.test.js +779 -0
- package/tests/memory-search-wiring.test.js +270 -0
- package/tests/model-route-controller.test.js +733 -0
- package/tests/notification-controller.test.js +196 -0
- package/tests/notification-integration.test.js +179 -0
- package/tests/org-scoping.test.js +687 -0
- package/tests/runner-controller.test.js +327 -0
- package/tests/runner-integration.test.js +231 -0
- package/tests/session-cookie-hmac.test.js +151 -0
- package/tests/snapshot-performance.test.js +315 -0
- package/tests/sse-events.test.js +107 -0
- package/tests/virtual-model-controller.test.js +877 -0
- package/tests/virtual-model-hook-bridge.test.js +384 -0
- package/tests/webhook-trigger.test.js +198 -0
- package/tests/workspace-volumes.test.js +312 -0
- package/tests/writeback-persistence.test.js +207 -0
package/docs/todos.md
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
https://kradle-staging.a5c.ai/api/orgs/default/policy-reports shows: Kyverno CRDs are not installed or are not readable by the Kradle service account - helm should install everything needed.
|
|
2
|
+
|
|
3
|
+
❯ refactor the C:\Users\tmusk\IdeaProjects\babysitter\packages\kradle\web to 3 packages , kradle\sdk, kradle\web and kradle\cli (web and cli
|
|
4
|
+
should depend on sdk), the sdk is the client sdk. the cli should have a command to run itself as an mcp server.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# User Stories
|
|
2
|
+
|
|
3
|
+
## Developer stories
|
|
4
|
+
|
|
5
|
+
### Open and review a PR
|
|
6
|
+
|
|
7
|
+
As a developer, I want to review a PR in a three-pane view with file tree, diff, conversation, inline comments, suggested edits, and CI status so that I can complete reviews quickly.
|
|
8
|
+
|
|
9
|
+
Acceptance criteria:
|
|
10
|
+
|
|
11
|
+
- Given I open a PR, when the page loads, then I see changed files, diff, discussion, reviewers, merge state, and related pipeline runs.
|
|
12
|
+
- Given I use keyboard shortcuts, when I press navigation keys, then I can move between files and comments without leaving the keyboard.
|
|
13
|
+
- Given I add a suggested edit, when I submit it, then the UI exposes the equivalent resource/YAML mutation.
|
|
14
|
+
|
|
15
|
+
### Debug a failing run
|
|
16
|
+
|
|
17
|
+
As a developer, I want a live run view with step navigation, log streaming, failure copy, similar-run search, and rerun controls so that I can diagnose failures without switching tools.
|
|
18
|
+
|
|
19
|
+
Acceptance criteria:
|
|
20
|
+
|
|
21
|
+
- Given a job is running, when logs are emitted, then the UI streams them through SSE without polling.
|
|
22
|
+
- Given a step fails, when I click find similar runs, then Kradle queries pipelines by failure signature labels.
|
|
23
|
+
- Given I rerun from a step, when I submit, then Kradle creates a new `Pipeline` with `resumeFrom`.
|
|
24
|
+
|
|
25
|
+
## Platform engineer stories
|
|
26
|
+
|
|
27
|
+
### Configure a runner pool
|
|
28
|
+
|
|
29
|
+
As a platform engineer, I want a split form/YAML runner pool editor so that pool configuration is easy to edit and still GitOps-auditable.
|
|
30
|
+
|
|
31
|
+
Acceptance criteria:
|
|
32
|
+
|
|
33
|
+
- Given I edit image, resources, node selector, warm replicas, max replicas, trust tier, and cache backend, when fields change, then YAML updates live.
|
|
34
|
+
- Given I save, when the operation succeeds, then the same manifest can be copied as `kubectl apply`.
|
|
35
|
+
- Given I click save to repo, when configured, then Kradle opens a PR against the platform config repo.
|
|
36
|
+
|
|
37
|
+
### Roll out PR policy safely
|
|
38
|
+
|
|
39
|
+
As a platform engineer, I want policy templates, CEL/raw modes, audit preview, and enforcement controls so that I can govern PRs without breaking teams unexpectedly.
|
|
40
|
+
|
|
41
|
+
Acceptance criteria:
|
|
42
|
+
|
|
43
|
+
- Given I select a policy template, when I preview it, then existing PRs that would violate the policy are listed.
|
|
44
|
+
- Given the policy is in audit mode, when a violating PR is created, then it is recorded but not blocked.
|
|
45
|
+
- Given I switch to enforce mode, when a violating PR is created, then admission blocks it with an actionable message.
|
|
46
|
+
|
|
47
|
+
## Repo admin stories
|
|
48
|
+
|
|
49
|
+
### Add and verify a webhook
|
|
50
|
+
|
|
51
|
+
As a repo admin, I want to create a webhook, send a test delivery, inspect failures, and replay deliveries so integrations are operationally transparent.
|
|
52
|
+
|
|
53
|
+
Acceptance criteria:
|
|
54
|
+
|
|
55
|
+
- Given I create a subscription, when I send a test delivery, then a `WebhookDelivery` resource appears within seconds.
|
|
56
|
+
- Given delivery fails, when I open the log, then I see request headers, body, response, latency, retries, and error details.
|
|
57
|
+
- Given I click replay, when secrets are current, then Kradle re-fires the event and records a new delivery attempt.
|
|
58
|
+
|
|
59
|
+
## Team lead stories
|
|
60
|
+
|
|
61
|
+
### Cross-repo triage
|
|
62
|
+
|
|
63
|
+
As a team lead, I want inbox filters and saved views stored as resources so that triage workflows can be versioned and shared.
|
|
64
|
+
|
|
65
|
+
Acceptance criteria:
|
|
66
|
+
|
|
67
|
+
- Given I create a filter for priority issues and PRs, when I save it, then Kradle stores a `Selector` or `View` resource.
|
|
68
|
+
- Given another user applies the resource, when they open the inbox, then they see the same triage view.
|
|
69
|
+
- Given the view is exported, when committed to Git, then it can be reviewed and applied like any other config.
|
|
70
|
+
|
|
71
|
+
## Excellent-flow coverage
|
|
72
|
+
|
|
73
|
+
- Open and review a PR.
|
|
74
|
+
- Debug a failing run.
|
|
75
|
+
- Configure a runner pool.
|
|
76
|
+
- Add a webhook and verify it works.
|
|
77
|
+
- Write a PR policy with audit-to-enforce rollout.
|
|
78
|
+
- Cross-repo triage with saved filters.
|
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
# Kradle Web Console Specification
|
|
2
|
+
|
|
3
|
+
> Exhaustive reference for the Kradle web console.
|
|
4
|
+
> Source: `packages/kradle/web/`
|
|
5
|
+
> Framework: Next.js 16 + React 19 (App Router)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Page Inventory (57 pages)
|
|
10
|
+
|
|
11
|
+
### 1.1 Top-Level Pages
|
|
12
|
+
|
|
13
|
+
| # | Route | File | Data Source | Purpose | Interactive Elements |
|
|
14
|
+
|---|-------|------|-------------|---------|---------------------|
|
|
15
|
+
| 1 | `/` | `page.jsx` | None | Landing/home page | Login CTA, org selector |
|
|
16
|
+
| 2 | `/login` | `login/page.jsx` | `listEnabledAuthProviders()` | Authentication login | Provider buttons (GitHub, SSO) |
|
|
17
|
+
| 3 | `/logout` | `logout/page.jsx` | None | Session logout | Auto-redirect to /login |
|
|
18
|
+
| 4 | `/orgs` | `orgs/page.jsx` | `fetchControllerUiModel()` | Organization list | Org cards, create org button |
|
|
19
|
+
| 5 | `/people` | `people/page.jsx` | `fetchControllerUiModel()` | People directory | User search, team filter |
|
|
20
|
+
|
|
21
|
+
### 1.2 Organization Dashboard (5 pages)
|
|
22
|
+
|
|
23
|
+
| # | Route | File | Data Source | Purpose | Interactive Elements |
|
|
24
|
+
|---|-------|------|-------------|---------|---------------------|
|
|
25
|
+
| 6 | `/orgs/[org]` | `orgs/[org]/page.jsx` | `uiModel.views.dashboard` | Org dashboard overview | Cards (repos, PRs, issues, runs), activity feed, quick actions |
|
|
26
|
+
| 7 | `/orgs/[org]/profile` | `orgs/[org]/profile/page.jsx` | `uiModel.identity` | User profile | Edit display name, email; linked identities |
|
|
27
|
+
| 8 | `/orgs/[org]/people` | `orgs/[org]/people/page.jsx` | `uiModel.identity.users` | Org members | Invite button, team assignment, role toggle |
|
|
28
|
+
| 9 | `/orgs/[org]/inbox` | `orgs/[org]/inbox/page.jsx` | `notifications.listNotifications()` | Notification inbox | Mark as read, filter by type, clear all |
|
|
29
|
+
| 10 | `/orgs/[org]/insights` | `orgs/[org]/insights/page.jsx` | `uiModel.metrics` | Analytics and insights | Time range selector, metric cards |
|
|
30
|
+
|
|
31
|
+
### 1.3 Ship (Repositories & Code) — 9 pages
|
|
32
|
+
|
|
33
|
+
| # | Route | File | Data Source | Purpose | Interactive Elements |
|
|
34
|
+
|---|-------|------|-------------|---------|---------------------|
|
|
35
|
+
| 11 | `/orgs/[org]/repositories` | `orgs/[org]/repositories/page.jsx` | `uiModel.views.dashboard.repositories` | Repository list | Create repo form, visibility filter, search |
|
|
36
|
+
| 12 | `/orgs/[org]/repositories/[repo]/code` | `repositories/[repo]/code/page.jsx` | `git-proxy` API | Code browser | File tree, branch selector, breadcrumb |
|
|
37
|
+
| 13 | `/orgs/[org]/repositories/[repo]/pull-requests` | `repositories/[repo]/pull-requests/page.jsx` | `uiModel resources PullRequest` | PR list | Status filter, create PR button |
|
|
38
|
+
| 14 | `/orgs/[org]/repositories/[repo]/issues` | `repositories/[repo]/issues/page.jsx` | `uiModel resources Issue` | Issue list | Label filter, assignee, new issue |
|
|
39
|
+
| 15 | `/orgs/[org]/repositories/[repo]/issues/[issue]` | `issues/[issue]/page.jsx` | Issue resource | Issue detail | Comment form, label editor, close/reopen |
|
|
40
|
+
| 16 | `/orgs/[org]/repositories/[repo]/hooks` | `repositories/[repo]/hooks/page.jsx` | `WebhookSubscription` | Webhook config | Add webhook form, delivery list, replay |
|
|
41
|
+
| 17 | `/orgs/[org]/repositories/[repo]/runs` | `repositories/[repo]/runs/page.jsx` | `AgentDispatchRun` filtered by repo | Repo agent runs | Run list, dispatch button, status filter |
|
|
42
|
+
| 18 | `/orgs/[org]/repositories/[repo]/settings` | `repositories/[repo]/settings/page.jsx` | Repository resource | Repo settings | Rename, visibility toggle, danger zone (delete) |
|
|
43
|
+
| 19 | `/orgs/[org]/runs` | `orgs/[org]/runs/page.jsx` | `uiModel.agents.runs` | All runs overview | Filter by stack, status, repository |
|
|
44
|
+
|
|
45
|
+
### 1.4 Manage (Access & Policy) — 8 pages
|
|
46
|
+
|
|
47
|
+
| # | Route | File | Data Source | Purpose | Interactive Elements |
|
|
48
|
+
|---|-------|------|-------------|---------|---------------------|
|
|
49
|
+
| 20 | `/orgs/[org]/access/permissions` | `access/permissions/page.jsx` | `uiModel.identity.permissions` | Permission management | Grant/revoke, subject selector, permission level |
|
|
50
|
+
| 21 | `/orgs/[org]/access/ssh-keys` | `access/ssh-keys/page.jsx` | `uiModel.identity.sshKeys` | SSH key management | Add key form, revoke button, scope filter |
|
|
51
|
+
| 22 | `/orgs/[org]/access/branch-protection` | `access/branch-protection/page.jsx` | `BranchProtection` resources | Branch rules | Ref pattern input, toggle required reviews |
|
|
52
|
+
| 23 | `/orgs/[org]/settings` | `orgs/[org]/settings/page.jsx` | Organization resource | Org settings | Display name, slug, namespace info, danger zone |
|
|
53
|
+
| 24 | `/orgs/[org]/settings/secrets` | `settings/secrets/page.jsx` | `/api/orgs/:org/secrets` | Secret management | Add secret form, delete, grant management |
|
|
54
|
+
| 25 | `/orgs/[org]/hooks-events` | `orgs/[org]/hooks-events/page.jsx` | `WebhookSubscription + Delivery` | Webhook events | Subscription list, delivery inspector, replay |
|
|
55
|
+
| 26 | `/orgs/[org]/deployments` | `orgs/[org]/deployments/page.jsx` | `uiModel.delivery` | Deployments | Application list, release history, health |
|
|
56
|
+
| 27 | `/orgs/[org]/runners-ci` | `orgs/[org]/runners-ci/page.jsx` | `RunnerPool + Pipeline + Job` | Runner pools & CI | Pool editor, pipeline list, job detail |
|
|
57
|
+
|
|
58
|
+
### 1.5 Agents — 24 pages
|
|
59
|
+
|
|
60
|
+
| # | Route | File | Data Source | Purpose | Interactive Elements |
|
|
61
|
+
|---|-------|------|-------------|---------|---------------------|
|
|
62
|
+
| 28 | `/orgs/[org]/agents` | `agents/page.jsx` | `uiModel.agents` | Agent overview | Stack count cards, active runs, pending approvals |
|
|
63
|
+
| 29 | `/orgs/[org]/agents/stacks` | `agents/stacks/page.jsx` | `uiModel.agents.stacks` | Stack list | Readiness indicators, create button |
|
|
64
|
+
| 30 | `/orgs/[org]/agents/stacks/new` | `agents/stacks/new/page.jsx` | `STACK_LAYERS, COMPOSITION_FACETS` | Create stack | Multi-step StackBuilder form |
|
|
65
|
+
| 31 | `/orgs/[org]/agents/stacks/[name]` | `agents/stacks/[name]/page.jsx` | AgentStack resource | Stack detail | Conditions list, capabilities graph, edit |
|
|
66
|
+
| 32 | `/orgs/[org]/agents/runs` | `agents/runs/page.jsx` | `uiModel.agents.runs` | Dispatch run list | Phase filter, repository filter, cost summary |
|
|
67
|
+
| 33 | `/orgs/[org]/agents/runs/[runId]` | `agents/runs/[runId]/page.jsx` | AgentDispatchRun + Attempt | Run detail | Attempt timeline, transcript, workspace link |
|
|
68
|
+
| 34 | `/orgs/[org]/agents/sessions` | `agents/sessions/page.jsx` | `uiModel.agents.sessions` | Session list | Active/completed filter, cost column |
|
|
69
|
+
| 35 | `/orgs/[org]/agents/sessions/[sessionId]` | `agents/sessions/[sessionId]/page.jsx` | AgentSession + Transcript | Session detail | SessionTabs: transcript, tools, cost, shell |
|
|
70
|
+
| 36 | `/orgs/[org]/agents/rules` | `agents/rules/page.jsx` | `uiModel.agents.rules` | Trigger rule list | Source type badges, enable/disable toggle |
|
|
71
|
+
| 37 | `/orgs/[org]/agents/rules/new` | `agents/rules/new/page.jsx` | Stack list for dropdown | Create trigger rule | TriggerRuleForm with source type selector |
|
|
72
|
+
| 38 | `/orgs/[org]/agents/rules/[ruleName]` | `agents/rules/[ruleName]/page.jsx` | AgentTriggerRule resource | Rule detail | Edit form, execution history |
|
|
73
|
+
| 39 | `/orgs/[org]/agents/approvals` | `agents/approvals/page.jsx` | `uiModel.agents.approvals` | Approval queue | Approve/Deny buttons, filter by action type |
|
|
74
|
+
| 40 | `/orgs/[org]/agents/workspaces` | `agents/workspaces/page.jsx` | `uiModel.agents.workspaces` | Workspace list | Phase badges, repository links |
|
|
75
|
+
| 41 | `/orgs/[org]/agents/workspaces/[workspaceId]` | `agents/workspaces/[workspaceId]/page.jsx` | KradleWorkspace resource | Workspace detail | Codespace launch, associations, run history |
|
|
76
|
+
| 42 | `/orgs/[org]/agents/settings` | `agents/settings/page.jsx` | Adapter + Provider + Gateway | Agent settings | Adapter config, provider forms, gateway URL |
|
|
77
|
+
| 43 | `/orgs/[org]/agents/projects` | `agents/projects/page.jsx` | `uiModel.agents.projects` | Project list | Create project, kanban toggle |
|
|
78
|
+
| 44 | `/orgs/[org]/agents/projects/[projectId]` | `agents/projects/[projectId]/page.jsx` | KradleProject resource | Project detail | Kanban board, issue list, settings |
|
|
79
|
+
| 45 | `/orgs/[org]/agents/projects/[projectId]/issues` | `projects/[projectId]/issues/page.jsx` | Issues filtered by project | Project issues | Filter, create issue |
|
|
80
|
+
| 46 | `/orgs/[org]/agents/projects/[projectId]/issues/[issue]` | `issues/[issue]/page.jsx` | Issue resource | Project issue detail | Comment, labels, assign |
|
|
81
|
+
| 47 | `/orgs/[org]/agents/memory` | `agents/memory/page.jsx` | `uiModel.agents.memoryRepositories` | Memory overview | Repository list, snapshot count |
|
|
82
|
+
| 48 | `/orgs/[org]/agents/memory/search` | `agents/memory/search/page.jsx` | Memory query API | Memory search | MemorySearchForm, results display |
|
|
83
|
+
| 49 | `/orgs/[org]/agents/memory/ontology` | `agents/memory/ontology/page.jsx` | AgentMemoryOntology | Ontology editor | MemoryOntologyEditor, node/edge kind editors |
|
|
84
|
+
| 50 | `/orgs/[org]/agents/memory/imports` | `agents/memory/imports/page.jsx` | `uiModel.agents.memoryImports` | Import list | Status badges, review button |
|
|
85
|
+
| 51 | `/orgs/[org]/agents/memory/imports/[importId]` | `agents/memory/imports/[importId]/page.jsx` | AgentRunMemoryImport | Import detail | MemoryImportReview, approve/reject |
|
|
86
|
+
|
|
87
|
+
### 1.6 External — 4 pages
|
|
88
|
+
|
|
89
|
+
| # | Route | File | Data Source | Purpose | Interactive Elements |
|
|
90
|
+
|---|-------|------|-------------|---------|---------------------|
|
|
91
|
+
| 52 | `/orgs/[org]/external` | `orgs/[org]/external/page.jsx` | ExternalBackendProvider list | External overview | Provider cards, add button |
|
|
92
|
+
| 53 | `/orgs/[org]/external/providers/new` | `external/providers/new/page.jsx` | Provider type list | Add provider | ExternalProviderWizard (multi-step) |
|
|
93
|
+
| 54 | `/orgs/[org]/external/sync` | `external/sync/page.jsx` | ExternalSyncState | Sync dashboard | ExternalSyncDashboard, trigger sync |
|
|
94
|
+
| 55 | `/orgs/[org]/external/conflicts` | `external/conflicts/page.jsx` | ExternalSyncConflict list | Conflict list | ExternalConflictResolver, strategy selector |
|
|
95
|
+
|
|
96
|
+
### 1.7 Observe & Tools — 4 pages
|
|
97
|
+
|
|
98
|
+
| # | Route | File | Data Source | Purpose | Interactive Elements |
|
|
99
|
+
|---|-------|------|-------------|---------|---------------------|
|
|
100
|
+
| 56 | `/orgs/[org]/api-docs` | `orgs/[org]/api-docs/page.jsx` | controllerEndpoints | API documentation | Endpoint list, try-it panel |
|
|
101
|
+
| 57 | `/orgs/[org]/controller-api` | `orgs/[org]/controller-api/page.jsx` | Full snapshot | Controller API explorer | ApiExplorer with request/response |
|
|
102
|
+
| 58 | `/orgs/[org]/advanced-plans` | `orgs/[org]/advanced-plans/page.jsx` | Resource YAML | Advanced plans | YAML editor, apply button |
|
|
103
|
+
| 59 | `/orgs/[org]/operations-install` | `orgs/[org]/operations-install/page.jsx` | uiModel.operations | Operations install guide | Copy commands, step indicators |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 2. Component Library (56 components)
|
|
108
|
+
|
|
109
|
+
### 2.1 Agent Components
|
|
110
|
+
|
|
111
|
+
| # | Component | File | Props | State | API Calls | Key Behavior |
|
|
112
|
+
|---|-----------|------|-------|-------|-----------|--------------|
|
|
113
|
+
| 1 | ApprovalActions | `approval-actions.jsx` | `{ approval, org, onDecide }` | — | POST approvals/:name/decide | Approve/Deny buttons with reason modal |
|
|
114
|
+
| 2 | ApprovalModeToggle | `approval-mode-toggle.jsx` | `{ stack, onToggle }` | `useState(mode)` | — | Toggle between yolo/prompt/deny |
|
|
115
|
+
| 3 | DispatchButton | `dispatch-button.jsx` | `{ stack, repo, org, onDispatch }` | `useState(loading)` | POST agents/dispatch | One-click dispatch with loading state |
|
|
116
|
+
| 4 | RunActions | `run-actions.jsx` | `{ run, org }` | — | — | Retry, cancel, view workspace links |
|
|
117
|
+
| 5 | RuleActions | `rule-actions.jsx` | `{ rule, org }` | — | — | Edit, disable, delete trigger rule |
|
|
118
|
+
| 6 | StackActions | `stack-actions.jsx` | `{ stack, org }` | — | — | Edit, dispatch, delete stack |
|
|
119
|
+
| 7 | StackBuilder | `stack-builder.jsx` | `{ org, layers, onSave }` | Multi-step form state | POST resources | Multi-step agent stack creation wizard |
|
|
120
|
+
| 8 | StackBuilderGraph | `stack-builder-graph.jsx` | `{ stack, capabilities }` | — | — | Visual capability graph |
|
|
121
|
+
| 9 | SessionCost | `session-cost.jsx` | `{ session, transcript }` | — | — | Token count and cost display |
|
|
122
|
+
| 10 | SessionShell | `session-shell.jsx` | `{ sessionId, org }` | SSE subscription | SSE stream | Terminal-style live session viewer |
|
|
123
|
+
| 11 | SessionTabs | `session-tabs.jsx` | `{ session, transcript }` | `useState(activeTab)` | — | Tabbed: Transcript, Tools, Cost, Shell |
|
|
124
|
+
| 12 | ToolInspector | `tool-inspector.jsx` | `{ mcpServers, toolProfiles }` | — | — | MCP tool listing with status |
|
|
125
|
+
| 13 | TriggerRuleForm | `trigger-rule-form.jsx` | `{ org, stacks, onSave }` | Form state | POST resources | Source type selector, cron/webhook/comment/label fields |
|
|
126
|
+
|
|
127
|
+
### 2.2 Memory Components
|
|
128
|
+
|
|
129
|
+
| # | Component | File | Props | Key Behavior |
|
|
130
|
+
|---|-----------|------|-------|--------------|
|
|
131
|
+
| 14 | MemorySearchForm | `memory-search-form.jsx` | `{ org, onSearch }` | Mode selector (graph/grep/both), query input, kind filter, depth |
|
|
132
|
+
| 15 | MemoryOntologyEditor | `memory-ontology-editor.jsx` | `{ ontology, org }` | Node kind editor, edge kind editor, vocabulary |
|
|
133
|
+
| 16 | MemoryImportReview | `memory-import-review.jsx` | `{ importResource, org }` | Diff view, approve/reject buttons |
|
|
134
|
+
|
|
135
|
+
### 2.3 External Components
|
|
136
|
+
|
|
137
|
+
| # | Component | File | Props | Key Behavior |
|
|
138
|
+
|---|-----------|------|-------|--------------|
|
|
139
|
+
| 17 | ExternalConflictResolver | `external-conflict-resolver.jsx` | `{ conflict, org }` | Side-by-side diff, strategy buttons |
|
|
140
|
+
| 18 | ExternalProviderList | `external-provider-list.jsx` | `{ providers }` | Cards with status indicators |
|
|
141
|
+
| 19 | ExternalProviderWizard | `external-provider-wizard.jsx` | `{ org, onComplete }` | Multi-step: type → credentials → scope → confirm |
|
|
142
|
+
| 20 | ExternalSyncDashboard | `external-sync-dashboard.jsx` | `{ syncStates, org }` | Status overview with metrics |
|
|
143
|
+
|
|
144
|
+
### 2.4 Kanban Components
|
|
145
|
+
|
|
146
|
+
| # | Component | File | Props | Key Behavior |
|
|
147
|
+
|---|-----------|------|-------|--------------|
|
|
148
|
+
| 21 | KanbanCard | `kanban-card.jsx` | `{ item, onDragStart }` | Draggable card with issue/PR preview |
|
|
149
|
+
| 22 | KanbanColumn | `kanban-column.jsx` | `{ status, items, onDrop }` | Drop target column |
|
|
150
|
+
| 23 | KanbanEnhanced | `kanban-enhanced.jsx` | `{ project, issues }` | Full board with columns |
|
|
151
|
+
| 24 | KanbanFilters | `kanban-filters.jsx` | `{ onFilter }` | Label, assignee, repository filters |
|
|
152
|
+
| 25 | KanbanInteractive | `kanban-interactive.jsx` | `{ project, org }` | SSE-powered live kanban with drag-drop |
|
|
153
|
+
|
|
154
|
+
### 2.5 Workspace Components
|
|
155
|
+
|
|
156
|
+
| # | Component | File | Props | Key Behavior |
|
|
157
|
+
|---|-----------|------|-------|--------------|
|
|
158
|
+
| 26 | WorkspacePanel | `workspace-panel.jsx` | `{ workspace }` | Overview: phase, repo, branch, PVC |
|
|
159
|
+
| 27 | WorkspaceCodespace | `workspace-codespace.jsx` | `{ workspace, org }` | Launch/stop codespace, URL display |
|
|
160
|
+
| 28 | WorkspaceAssociations | `workspace-associations.jsx` | `{ workspace }` | Add/remove run, user, session links |
|
|
161
|
+
| 29 | WorkspaceRunHistory | `workspace-run-history.jsx` | `{ workspace, runs }` | Active runs, historical runs table |
|
|
162
|
+
|
|
163
|
+
### 2.6 Repository Components
|
|
164
|
+
|
|
165
|
+
| # | Component | File | Props | Key Behavior |
|
|
166
|
+
|---|-----------|------|-------|--------------|
|
|
167
|
+
| 30 | RepoCodeBrowser | `repo-code-browser.jsx` | `{ org, repo, branch }` | File tree + content viewer via git-proxy |
|
|
168
|
+
| 31 | RepoRuns | `repo-runs.jsx` | `{ runs, org }` | Filtered run list for a repository |
|
|
169
|
+
| 32 | PullRequestList | `pull-request-list.jsx` | `{ pullRequests, org }` | PR list with status indicators |
|
|
170
|
+
| 33 | IssueList | `issue-list.jsx` | `{ issues, org }` | Filterable issue list |
|
|
171
|
+
| 34 | IssueEditor | `issue-editor.jsx` | `{ issue, org }` | Rich issue create/edit form |
|
|
172
|
+
| 35 | WebhookManager | `webhook-manager.jsx` | `{ subscriptions, deliveries }` | CRUD webhooks, delivery inspector |
|
|
173
|
+
|
|
174
|
+
### 2.7 Global Components
|
|
175
|
+
|
|
176
|
+
| # | Component | File | Props | Key Behavior |
|
|
177
|
+
|---|-----------|------|-------|--------------|
|
|
178
|
+
| 36 | CommandPalette | `command-palette.jsx` | `{ org }` | Cmd+K / Ctrl+K; full-text search, quick nav |
|
|
179
|
+
| 37 | KeyboardShortcuts | `keyboard-shortcuts.jsx` | — | ? overlay; nav shortcuts, action shortcuts |
|
|
180
|
+
| 38 | GlobalSearch | `global-search.jsx` | `{ org }` | Full-text search across all resources |
|
|
181
|
+
| 39 | NotificationBell | `notification-bell.jsx` | `{ org }` | Badge with unread count, dropdown panel |
|
|
182
|
+
| 40 | ActivityFeed | `activity-feed.jsx` | `{ org, events }` | Time-grouped activity entries |
|
|
183
|
+
| 41 | HealthMonitor | `health-monitor.jsx` | `{ connection }` | System component status indicators |
|
|
184
|
+
| 42 | LiveUpdates | `live-updates.jsx` | `{ org, onEvent }` | SSE connection, auto-reconnect |
|
|
185
|
+
| 43 | ThemeRuntime | `theme-runtime.jsx` | — | Dark/light toggle, system preference detection |
|
|
186
|
+
| 44 | KradleLoading | `kradle-loading.jsx` | `{ label? }` | Branded loading spinner |
|
|
187
|
+
|
|
188
|
+
### 2.8 Settings Components
|
|
189
|
+
|
|
190
|
+
| # | Component | File | Props | Key Behavior |
|
|
191
|
+
|---|-----------|------|-------|--------------|
|
|
192
|
+
| 45 | AgentSettingsForm | `agent-settings-form.jsx` | `{ org }` | Combined adapters + providers + gateway form |
|
|
193
|
+
| 46 | SettingsAdapters | `settings-adapters.jsx` | `{ adapters, org }` | Adapter CRUD |
|
|
194
|
+
| 47 | SettingsProviders | `settings-providers.jsx` | `{ providers, org }` | Provider CRUD |
|
|
195
|
+
| 48 | SettingsGateway | `settings-gateway.jsx` | `{ gateway, org }` | Gateway URL + feature flags |
|
|
196
|
+
| 49 | AppSettings | `app-settings.jsx` | `{ org }` | App-level settings |
|
|
197
|
+
| 50 | SecretManager | `secret-manager.jsx` | `{ org }` | Secret CRUD with masked values |
|
|
198
|
+
| 51 | RunnerPoolManager | `runner-pool-manager.jsx` | `{ pools, org }` | Pool sizing with warm/max sliders |
|
|
199
|
+
| 52 | UserProfile | `user-profile.jsx` | `{ user, org }` | Profile display and edit |
|
|
200
|
+
|
|
201
|
+
### 2.9 Utility Components
|
|
202
|
+
|
|
203
|
+
| # | Component | File | Props | Key Behavior |
|
|
204
|
+
|---|-----------|------|-------|--------------|
|
|
205
|
+
| 53 | ResourceActions | `resource-actions.jsx` | `{ resource, org }` | View/Edit/Delete menu |
|
|
206
|
+
| 54 | ResourceCrudActions | `resource-crud-actions.jsx` | `{ kind, org }` | Full CRUD buttons |
|
|
207
|
+
| 55 | CodeEditor | `code-editor.jsx` | `{ value, language, onChange }` | Syntax-highlighted editor |
|
|
208
|
+
| 56 | ApiExplorer | `api-explorer.jsx` | `{ endpoints }` | Interactive API testing |
|
|
209
|
+
| 57 | DeploymentPipeline | `deployment-pipeline.jsx` | `{ applications }` | Visual pipeline progress |
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 3. Data Flow Architecture
|
|
214
|
+
|
|
215
|
+
### 3.1 Fetch Pipeline
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
Page Component (Server Component)
|
|
219
|
+
→ loadKradleUi() / fetchControllerUiModel({ baseUrl, org })
|
|
220
|
+
→ HTTP GET /api/controller?org=<org>
|
|
221
|
+
→ createKradleHttpHandler matches route
|
|
222
|
+
→ createControllerUiModel(snapshot, { organization })
|
|
223
|
+
→ Stale-while-revalidate cache (30s TTL)
|
|
224
|
+
→ Pass data as props to Client Components
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 3.2 Controller UI Model Shape
|
|
228
|
+
|
|
229
|
+
`createControllerUiModel()` produces:
|
|
230
|
+
|
|
231
|
+
```javascript
|
|
232
|
+
{
|
|
233
|
+
product: 'Kradle',
|
|
234
|
+
status: 'ready' | 'degraded',
|
|
235
|
+
namespace: 'kradle-org-acme',
|
|
236
|
+
platformNamespace: 'kradle-system',
|
|
237
|
+
org: { name, slug, displayName, namespace },
|
|
238
|
+
orgs: [...],
|
|
239
|
+
generatedAt: ISO timestamp,
|
|
240
|
+
controller: { mode, endpoints, architecture, storage, connection, apiService, commands },
|
|
241
|
+
metrics: { components, resources, events, users, teams, repositories, pullRequests, issues, projects, pipelines, ... },
|
|
242
|
+
components: [...runtimeComponents],
|
|
243
|
+
resources: [...KRADLE_RESOURCES mapped with items],
|
|
244
|
+
events: [...last 8 K8s events],
|
|
245
|
+
delivery: { applications, runtime, capabilityCatalog },
|
|
246
|
+
policyEngine: { mode, health, profiles, templates, bindings, violations },
|
|
247
|
+
agents: { stacks, runs, rules, sessions, workspaces, approvals, adapters, providers, projects, gateway, transcripts, memoryRepositories, memorySnapshots, memoryImports },
|
|
248
|
+
identity: { counts, providers, users, teams, invites, mappings, permissions, sshKeys, reconciliation },
|
|
249
|
+
validation: [...healthChecks],
|
|
250
|
+
views: { dashboard, pullRequestReview, failingRun, runnerPoolEditor, webhookInspector, triageView }
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### 3.3 API Proxy Routes (Web)
|
|
255
|
+
|
|
256
|
+
| Route | Target | Method |
|
|
257
|
+
|-------|--------|--------|
|
|
258
|
+
| `/api/orgs` | Kradle API | GET |
|
|
259
|
+
| `/api/orgs/[org]/repositories` | Resource CRUD | GET/POST |
|
|
260
|
+
| `/api/auth/[provider]` | OAuth redirect | GET |
|
|
261
|
+
| `/api/auth/callback/[provider]` | OAuth callback | GET |
|
|
262
|
+
| `/api/auth/logout` | Session destruction | POST |
|
|
263
|
+
| `/api/auth/delegated` | Delegated identity | GET |
|
|
264
|
+
| `/api/atlas/search` | Atlas graph search | POST |
|
|
265
|
+
| `/api/git-proxy` | Gitea tree/blob proxy | POST |
|
|
266
|
+
| `/api/watch/[...resource]` | SSE watch endpoint | GET |
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 4. Navigation Architecture
|
|
271
|
+
|
|
272
|
+
### 4.1 Navigation Groups
|
|
273
|
+
|
|
274
|
+
| Group | Icon | Pages | Section |
|
|
275
|
+
|-------|------|-------|---------|
|
|
276
|
+
| **Ship** | Code | Repositories, PRs, Issues, Code, Runs | Primary development |
|
|
277
|
+
| **Manage** | Settings | Permissions, SSH Keys, Branch Protection, Settings, Secrets, Deployments, Runners | Administration |
|
|
278
|
+
| **Agents** | Bot | Stacks, Runs, Sessions, Rules, Approvals, Workspaces, Projects, Memory | AI orchestration |
|
|
279
|
+
| **Observe** | Eye | Hooks & Events, Insights, Inbox, Health, API Docs | Monitoring |
|
|
280
|
+
| **External** | Link | Providers, Sync, Conflicts | Integration |
|
|
281
|
+
|
|
282
|
+
### 4.2 Command Palette
|
|
283
|
+
|
|
284
|
+
- Trigger: `Cmd+K` (macOS) / `Ctrl+K` (Windows/Linux)
|
|
285
|
+
- Features: full-text search across resources, quick page navigation, recent items
|
|
286
|
+
- Implementation: `command-palette.jsx`
|
|
287
|
+
|
|
288
|
+
### 4.3 Keyboard Shortcuts
|
|
289
|
+
|
|
290
|
+
- `?` — Show shortcut overlay
|
|
291
|
+
- `j/k` — Navigate items in lists
|
|
292
|
+
- `n` — New (context-dependent)
|
|
293
|
+
- `Escape` — Close modal/palette
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 5. Real-Time Updates
|
|
298
|
+
|
|
299
|
+
### 5.1 LiveUpdates Component
|
|
300
|
+
|
|
301
|
+
```jsx
|
|
302
|
+
// Connection lifecycle:
|
|
303
|
+
// 1. Connect to /api/orgs/:org/agents/events/stream
|
|
304
|
+
// 2. Receive {"type":"connected"} — mark as connected
|
|
305
|
+
// 3. Process {"type":"resource-change", kind, name, operation}
|
|
306
|
+
// 4. On disconnect: auto-reconnect with backoff
|
|
307
|
+
// 5. Receive {"type":"heartbeat"} every 30s — keepalive
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### 5.2 SSE-Powered Components
|
|
311
|
+
|
|
312
|
+
| Component | SSE Usage |
|
|
313
|
+
|-----------|-----------|
|
|
314
|
+
| KanbanInteractive | Live card movement on issue/PR status changes |
|
|
315
|
+
| NotificationBell | Real-time unread count updates |
|
|
316
|
+
| ActivityFeed | New events prepended |
|
|
317
|
+
| SessionShell | Live transcript streaming |
|
|
318
|
+
| HealthMonitor | Connection status indicator |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 6. Theme System
|
|
323
|
+
|
|
324
|
+
### 6.1 Implementation
|
|
325
|
+
|
|
326
|
+
- CSS custom properties for all colors
|
|
327
|
+
- Two theme sets: `light` and `dark`
|
|
328
|
+
- Applied via `data-theme` attribute on `<html>`
|
|
329
|
+
- ThemeRuntime component manages state
|
|
330
|
+
|
|
331
|
+
### 6.2 Persistence
|
|
332
|
+
|
|
333
|
+
```javascript
|
|
334
|
+
// Read: localStorage.getItem('kradle-theme')
|
|
335
|
+
// Write: localStorage.setItem('kradle-theme', theme)
|
|
336
|
+
// Default: window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
337
|
+
// Auto-update: mediaQuery.addEventListener('change', handler)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## 7. Form Patterns
|
|
343
|
+
|
|
344
|
+
### 7.1 Multi-Step Forms
|
|
345
|
+
|
|
346
|
+
| Form | Steps | Source |
|
|
347
|
+
|------|-------|--------|
|
|
348
|
+
| StackBuilder | Model → Provider → Transport → Tools → Skills → Review | `stack-builder.jsx` |
|
|
349
|
+
| ExternalProviderWizard | Type → Credentials → Scope → Confirm | `external-provider-wizard.jsx` |
|
|
350
|
+
| TriggerRuleForm | Source Type → Config → Stack Selection → Review | `trigger-rule-form.jsx` |
|
|
351
|
+
|
|
352
|
+
### 7.2 Error Handling
|
|
353
|
+
|
|
354
|
+
- Inline field errors below inputs
|
|
355
|
+
- Toast notifications for operation failures (auto-dismiss)
|
|
356
|
+
- Error boundary component (`error.jsx`) for unhandled errors
|
|
357
|
+
- Form-level validation before submission
|
|
358
|
+
|
|
359
|
+
### 7.3 Loading States
|
|
360
|
+
|
|
361
|
+
- `KradleLoading` spinner for full-page loads
|
|
362
|
+
- Disabled buttons with spinner during submission
|
|
363
|
+
- Skeleton loading for list views
|
|
364
|
+
- Optimistic updates on create/edit (revert on failure)
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 8. Authentication Flow (Web)
|
|
369
|
+
|
|
370
|
+
### 8.1 Login Flow
|
|
371
|
+
|
|
372
|
+
```
|
|
373
|
+
/login → Click provider → /api/auth/[provider]
|
|
374
|
+
→ 302 to OAuth provider
|
|
375
|
+
→ User authorizes
|
|
376
|
+
→ /api/auth/callback/[provider]?code=...
|
|
377
|
+
→ Exchange code → Create session cookie
|
|
378
|
+
→ 302 to /orgs/[org]
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### 8.2 Session Validation
|
|
382
|
+
|
|
383
|
+
- Cookie `kradle_session` sent on every request
|
|
384
|
+
- Web API routes verify via `parseSessionCookie()`
|
|
385
|
+
- Invalid sessions: redirect to `/login`
|
|
386
|
+
- Logout: clear cookie with `Max-Age=0`, redirect to `/login`
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## 9. Error Page
|
|
391
|
+
|
|
392
|
+
Source: `packages/kradle/web/app/error.jsx`
|
|
393
|
+
|
|
394
|
+
- React Error Boundary component
|
|
395
|
+
- Displays error message and stack trace (dev mode)
|
|
396
|
+
- "Try Again" button to reset error state
|
|
397
|
+
- Falls back to minimal UI on catastrophic failure
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## ML Navigation Group
|
|
403
|
+
|
|
404
|
+
### Inference Service List
|
|
405
|
+
|
|
406
|
+
**Route:** `/orgs/{org}/inference/services`
|
|
407
|
+
|
|
408
|
+
**Components:**
|
|
409
|
+
- Service table: name, model format badge, inference protocol, phase badge (Pending/Ready/Failed), endpoint URL
|
|
410
|
+
- Create button opens an inline form
|
|
411
|
+
|
|
412
|
+
**Actions:** Create service, delete (confirmation dialog)
|
|
413
|
+
|
|
414
|
+
**Data source:** `GET /api/orgs/{org}/inference/services`
|
|
415
|
+
|
|
416
|
+
### Inference Service Detail
|
|
417
|
+
|
|
418
|
+
**Route:** `/orgs/{org}/inference/services/{name}`
|
|
419
|
+
|
|
420
|
+
**Sections:**
|
|
421
|
+
- Spec viewer: predictor model config (modelFormat, storageUri, protocolVersion), resource limits/requests
|
|
422
|
+
- Status panel: phase, endpoint URL, conditions timeline, error message
|
|
423
|
+
- Test panel: send inference request (JSON input editor -> response panel), protocol selector (V1/V2)
|
|
424
|
+
|
|
425
|
+
**Data source:** `GET /api/orgs/{org}/inference/services/{name}`
|
|
426
|
+
|
|
427
|
+
### Inference Test Panel
|
|
428
|
+
|
|
429
|
+
Embedded within service detail. Sends `POST /api/orgs/{org}/inference/services/{name}/infer`.
|
|
430
|
+
|
|
431
|
+
- Input: JSON editor with schema hint for the selected model format
|
|
432
|
+
- Output: formatted JSON response panel
|
|
433
|
+
- Protocol toggle: V1 / V2
|
|
434
|
+
- Response time display
|
|
435
|
+
|
|
436
|
+
### Serving Runtime Manager
|
|
437
|
+
|
|
438
|
+
**Route:** `/orgs/{org}/inference/runtimes`
|
|
439
|
+
|
|
440
|
+
**Components:**
|
|
441
|
+
- Runtime table: name, supported model formats (comma-separated), container image
|
|
442
|
+
- Create runtime button and form
|
|
443
|
+
|
|
444
|
+
**Data source:** `GET /api/orgs/{org}/inference/runtimes`
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Artifacts Navigation Group
|
|
449
|
+
|
|
450
|
+
### Registry List
|
|
451
|
+
|
|
452
|
+
**Route:** `/orgs/{org}/artifacts/registries`
|
|
453
|
+
|
|
454
|
+
**Components:**
|
|
455
|
+
- Registry cards: name, type badge (npm/pip/docker/generic), storage backend, feed count
|
|
456
|
+
- Create registry button and modal form
|
|
457
|
+
|
|
458
|
+
**Data source:** `GET /api/orgs/{org}/artifacts/registries`
|
|
459
|
+
|
|
460
|
+
### Feed Browser
|
|
461
|
+
|
|
462
|
+
**Route:** `/orgs/{org}/artifacts/registries/{registry}/feeds`
|
|
463
|
+
|
|
464
|
+
**Components:**
|
|
465
|
+
- Feed list: name, visibility badge (public/private), version count, install command code snippet
|
|
466
|
+
- Create feed button, manage access policies button
|
|
467
|
+
|
|
468
|
+
**Data source:** `GET /api/orgs/{org}/artifacts/feeds`
|
|
469
|
+
|
|
470
|
+
### Version Table
|
|
471
|
+
|
|
472
|
+
**Route:** `/orgs/{org}/artifacts/registries/{registry}/feeds/{feed}`
|
|
473
|
+
|
|
474
|
+
**Components:**
|
|
475
|
+
- Paginated version table: package name, version, size (human-readable), publishedBy, publishedAt, checksum (truncated SHA-256)
|
|
476
|
+
- Publish version button (file upload + metadata form)
|
|
477
|
+
- Download button per version
|
|
478
|
+
|
|
479
|
+
**Data source:** `GET /api/orgs/{org}/artifacts/feeds/{feed}/versions`
|
|
480
|
+
|
|
481
|
+
### Access Policies
|
|
482
|
+
|
|
483
|
+
Embedded as a tab within feed detail.
|
|
484
|
+
|
|
485
|
+
- Table: subject, permission badge (read/write/admin), expiresAt
|
|
486
|
+
- Add policy form, revoke button per entry
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
## Assistant Navigation Group
|
|
491
|
+
|
|
492
|
+
### Chat Interface
|
|
493
|
+
|
|
494
|
+
**Route:** `/orgs/{org}/assistant`
|
|
495
|
+
|
|
496
|
+
**Components:**
|
|
497
|
+
- Session sidebar: scrollable list of sessions (org:sessionId), new session button, session delete button
|
|
498
|
+
- Chat panel: message thread with user/assistant bubbles, SSE streaming renders chunks in real time
|
|
499
|
+
- Input bar: expandable textarea, send button, model selector dropdown
|
|
500
|
+
|
|
501
|
+
**Data source:**
|
|
502
|
+
- `POST /api/orgs/{org}/assistant/chat` (SSE stream)
|
|
503
|
+
- `GET /api/orgs/{org}/assistant/sessions` (session list)
|
|
504
|
+
|
|
505
|
+
### Generation Form
|
|
506
|
+
|
|
507
|
+
**Route:** `/orgs/{org}/assistant/generate`
|
|
508
|
+
|
|
509
|
+
**Components:**
|
|
510
|
+
- Prompt textarea
|
|
511
|
+
- Optional JSON schema editor (collapsible)
|
|
512
|
+
- Generate button
|
|
513
|
+
- Response viewer: formatted JSON when schema provided, markdown otherwise
|
|
514
|
+
|
|
515
|
+
**Data source:** `POST /api/orgs/{org}/assistant/generate`
|
|
516
|
+
|
|
517
|
+
### Session Sidebar
|
|
518
|
+
|
|
519
|
+
Embedded in the chat interface. Lists all sessions for the current org. Clicking a session loads its message history. Delete button calls `DELETE /api/orgs/{org}/assistant/sessions/{sessionId}` and clears the thread.
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
## Updated Navigation Structure
|
|
524
|
+
|
|
525
|
+
| Group | Routes |
|
|
526
|
+
|-------|--------|
|
|
527
|
+
| Repositories | `/repos`, `/repos/{name}/*` |
|
|
528
|
+
| Agents | `/agents`, `/agents/stacks`, `/agents/runs`, `/agents/memory` |
|
|
529
|
+
| **ML** | `/inference/services`, `/inference/runtimes` |
|
|
530
|
+
| **Artifacts** | `/artifacts/registries`, feeds, versions |
|
|
531
|
+
| **Assistant** | `/assistant`, `/assistant/generate` |
|
|
532
|
+
| Policy | `/policies`, `/policy-exceptions` |
|
|
533
|
+
| Settings | `/settings/*` |
|