@a5c-ai/krate 5.0.1-staging.55d5be0f1 → 5.0.1-staging.56abec0aa

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 (38) hide show
  1. package/bin/krate-demo.mjs +0 -0
  2. package/bin/krate-server.mjs +0 -0
  3. package/dist/krate-controller-ui.json +146 -8
  4. package/dist/krate-lifecycle.json +1 -1
  5. package/dist/krate-runtime-snapshot.json +223 -53
  6. package/dist/krate-summary.json +5 -3
  7. package/docs/architecture-v2.md +2535 -0
  8. package/docs/crd-behaviors-and-relationships.md +3732 -0
  9. package/docs/integration-and-design-decisions.md +1444 -0
  10. package/docs/openapi.yaml +1275 -0
  11. package/docs/requirements-v2.md +187 -0
  12. package/docs/sdk-api-reference.md +779 -0
  13. package/docs/system-spec-v2.md +923 -0
  14. package/docs/web-console-spec.md +397 -0
  15. package/package.json +1 -1
  16. package/scripts/validate-ui.mjs +265 -196
  17. package/src/agent-workspace-controller.js +257 -2
  18. package/src/controller-client.js +112 -50
  19. package/src/controller-ui.js +79 -12
  20. package/src/data-plane.js +3 -2
  21. package/src/gitea-backend.js +36 -0
  22. package/src/index.js +2 -0
  23. package/src/kubernetes-controller-async.js +23 -3
  24. package/src/kubernetes-controller.js +8 -2
  25. package/src/notification-controller.js +178 -0
  26. package/src/resource-model.js +2 -2
  27. package/src/runner-controller.js +272 -0
  28. package/tests/codespace-controller.test.js +318 -0
  29. package/tests/controller-client.test.js +133 -0
  30. package/tests/deployment.test.js +33 -20
  31. package/tests/e2e/lifecycle.test.js +4 -1
  32. package/tests/event-bus-integration.test.js +190 -0
  33. package/tests/krate.test.js +53 -1
  34. package/tests/notification-controller.test.js +196 -0
  35. package/tests/notification-integration.test.js +179 -0
  36. package/tests/runner-controller.test.js +327 -0
  37. package/tests/runner-integration.test.js +231 -0
  38. package/tests/snapshot-performance.test.js +68 -0
File without changes
File without changes
@@ -19,7 +19,7 @@
19
19
  "platformNamespace": "krate-org-default"
20
20
  }
21
21
  ],
22
- "generatedAt": "2026-05-15T08:29:09.173Z",
22
+ "generatedAt": "2026-05-18T11:36:06.795Z",
23
23
  "correlationId": null,
24
24
  "controller": {
25
25
  "mode": "krate-workspace",
@@ -293,6 +293,8 @@
293
293
  "invites": 1,
294
294
  "repositories": 1,
295
295
  "pullRequests": 0,
296
+ "issues": 0,
297
+ "projects": 0,
296
298
  "pipelines": 0,
297
299
  "jobs": 0,
298
300
  "runnerPools": 1,
@@ -327,7 +329,9 @@
327
329
  "area": "api",
328
330
  "resources": [
329
331
  "Repository",
332
+ "KrateProject",
330
333
  "PullRequest",
334
+ "Issue",
331
335
  "Pipeline"
332
336
  ],
333
337
  "docs": "src/api-controller.js"
@@ -579,7 +583,7 @@
579
583
  "maintainers"
580
584
  ],
581
585
  "invitedBy": "admin",
582
- "expiresAt": "2026-05-22T08:29:09.170Z"
586
+ "expiresAt": "2026-05-25T11:36:06.793Z"
583
587
  },
584
588
  "status": {
585
589
  "phase": "Pending",
@@ -591,7 +595,7 @@
591
595
  "Pending": 1
592
596
  },
593
597
  "storage": "etcd",
594
- "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: Invite\nmetadata:\n namespace: krate-org-default\n labels:\n role: member\n annotations:\n name: new-user-example-com\n resourceVersion: 1\nspec:\n organizationRef: default\n email: new-user@example.com\n role: member\n teams:\n - maintainers\n invitedBy: admin\n expiresAt: 2026-05-22T08:29:09.170Z\nstatus:\n phase: Pending\n storage: etcd\n",
598
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: Invite\nmetadata:\n namespace: krate-org-default\n labels:\n role: member\n annotations:\n name: new-user-example-com\n resourceVersion: 1\nspec:\n organizationRef: default\n email: new-user@example.com\n role: member\n teams:\n - maintainers\n invitedBy: admin\n expiresAt: 2026-05-25T11:36:06.793Z\nstatus:\n phase: Pending\n storage: etcd\n",
595
599
  "action": {
596
600
  "list": "Open Invite records in krate-org-default",
597
601
  "watch": "Watch Invite updates in krate-org-default",
@@ -803,9 +807,43 @@
803
807
  "delegatedTo": "Gitea collaborators and team repository APIs"
804
808
  },
805
809
  "forgeRecords": {
806
- "issues": "Gitea /repos/{owner}/{repo}/issues",
810
+ "issues": "Gitea /repos/krate/_krate-org-default_/issues",
807
811
  "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
808
812
  },
813
+ "issueSync": {
814
+ "backend": "gitea",
815
+ "owner": "krate-org-default",
816
+ "repo": "_krate-org-default_",
817
+ "issue": "<issue>",
818
+ "project": null,
819
+ "repositoryRefs": [
820
+ "krate-demo"
821
+ ],
822
+ "metadataKeys": [
823
+ "krate.a5c.ai/project",
824
+ "krate.a5c.ai/repositories"
825
+ ],
826
+ "actions": [
827
+ {
828
+ "action": "ensureOrgMemoryRepository",
829
+ "owner": "krate-org-default",
830
+ "repo": "_krate-org-default_"
831
+ },
832
+ {
833
+ "action": "syncIssue",
834
+ "owner": "krate-org-default",
835
+ "repo": "_krate-org-default_",
836
+ "issue": "<issue>"
837
+ },
838
+ {
839
+ "action": "writeIssueRepositoryMetadata",
840
+ "issue": "<issue>",
841
+ "repositories": [
842
+ "krate-demo"
843
+ ]
844
+ }
845
+ ]
846
+ },
809
847
  "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
810
848
  "integrationPlan": {
811
849
  "backend": "gitea",
@@ -961,7 +999,7 @@
961
999
  "Ready": 1
962
1000
  },
963
1001
  "storage": "etcd",
964
- "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: Repository\nmetadata:\n namespace: krate-org-default\n labels:\n gitBackend: gitea\n annotations:\n name: krate-demo\n resourceVersion: 1\nspec:\n organizationRef: default\n visibility: private\n gitHosting:\n backend: gitea\n owner: krate\n repository: krate-demo\n branch: main\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n deployKeyTitle: krate-argocd\n organization:\n kind: Organization\n name: krate\n delegatedTo: Gitea /api/v1/orgs\n sshKeys:\n kind: SSHKey\n scopes:\n - user\n - deploy\n - argocd\n delegatedTo: Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys\n permissions:\n kind: RepositoryPermission\n defaultCollaborator: write\n adminTeam: maintainers\n delegatedTo: Gitea collaborators and team repository APIs\n forgeRecords:\n issues: Gitea /repos/{owner}/{repo}/issues\n pullRequests: Gitea /repos/{owner}/{repo}/pulls\n webhookUrl: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n integrationPlan:\n backend: gitea\n operations:\n - action: createOrganization\n owner: krate\n - action: createRepository\n owner: krate\n repo: krate-demo\n - action: ensureUserMappings\n owner: krate\n - action: addDeployKey\n owner: krate\n repo: krate-demo\n title: krate-argocd\n readOnly: false\n - action: addUserSshKey\n owner: krate\n repo: krate-demo\n title: developer key\n - action: addCollaborator\n owner: krate\n repo: krate-demo\n permission: write\n - action: addTeamRepository\n owner: krate\n repo: krate-demo\n team: maintainers\n permission: admin\n - action: protectBranch\n owner: krate\n repo: krate-demo\n branch: main\n - action: createWebhook\n owner: krate\n repo: krate-demo\n url: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n storage:\n mode: gitea\n persistentVolumeClaim: krate-gitea-data\n owner: krate\n repository: krate-demo\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n objectStorage:\n lfs: true\n artifacts: true\n search:\n provider: zoekt\n enabled: false\nstatus:\n ready: true\n route:\n repositoryName: krate-demo\n backend: gitea\n owner: krate\n store: gitea-primary\n receivePackReady: true\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n gitHosting:\n backend: gitea\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n integrationPlan:\n backend: gitea\n operations:\n - action: createOrganization\n owner: krate\n - action: createRepository\n owner: krate\n repo: krate-demo\n - action: ensureUserMappings\n owner: krate\n - action: addDeployKey\n owner: krate\n repo: krate-demo\n title: krate-argocd\n readOnly: false\n - action: addUserSshKey\n owner: krate\n repo: krate-demo\n title: developer key\n - action: addCollaborator\n owner: krate\n repo: krate-demo\n permission: write\n - action: addTeamRepository\n owner: krate\n repo: krate-demo\n team: maintainers\n permission: admin\n - action: protectBranch\n owner: krate\n repo: krate-demo\n branch: main\n - action: createWebhook\n owner: krate\n repo: krate-demo\n url: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n storage: etcd\n",
1002
+ "yaml": "apiVersion: krate.a5c.ai/v1alpha1\nkind: Repository\nmetadata:\n namespace: krate-org-default\n labels:\n gitBackend: gitea\n annotations:\n name: krate-demo\n resourceVersion: 1\nspec:\n organizationRef: default\n visibility: private\n gitHosting:\n backend: gitea\n owner: krate\n repository: krate-demo\n branch: main\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n deployKeyTitle: krate-argocd\n organization:\n kind: Organization\n name: krate\n delegatedTo: Gitea /api/v1/orgs\n sshKeys:\n kind: SSHKey\n scopes:\n - user\n - deploy\n - argocd\n delegatedTo: Gitea /api/v1/user/keys and /repos/{owner}/{repo}/keys\n permissions:\n kind: RepositoryPermission\n defaultCollaborator: write\n adminTeam: maintainers\n delegatedTo: Gitea collaborators and team repository APIs\n forgeRecords:\n issues: Gitea /repos/krate/_krate-org-default_/issues\n pullRequests: Gitea /repos/{owner}/{repo}/pulls\n issueSync:\n backend: gitea\n owner: krate-org-default\n repo: _krate-org-default_\n issue: <issue>\n project: null\n repositoryRefs:\n - krate-demo\n metadataKeys:\n - krate.a5c.ai/project\n - krate.a5c.ai/repositories\n actions:\n - action: ensureOrgMemoryRepository\n owner: krate-org-default\n repo: _krate-org-default_\n - action: syncIssue\n owner: krate-org-default\n repo: _krate-org-default_\n issue: <issue>\n - action: writeIssueRepositoryMetadata\n issue: <issue>\n repositories:\n - krate-demo\n webhookUrl: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n integrationPlan:\n backend: gitea\n operations:\n - action: createOrganization\n owner: krate\n - action: createRepository\n owner: krate\n repo: krate-demo\n - action: ensureUserMappings\n owner: krate\n - action: addDeployKey\n owner: krate\n repo: krate-demo\n title: krate-argocd\n readOnly: false\n - action: addUserSshKey\n owner: krate\n repo: krate-demo\n title: developer key\n - action: addCollaborator\n owner: krate\n repo: krate-demo\n permission: write\n - action: addTeamRepository\n owner: krate\n repo: krate-demo\n team: maintainers\n permission: admin\n - action: protectBranch\n owner: krate\n repo: krate-demo\n branch: main\n - action: createWebhook\n owner: krate\n repo: krate-demo\n url: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n storage:\n mode: gitea\n persistentVolumeClaim: krate-gitea-data\n owner: krate\n repository: krate-demo\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n objectStorage:\n lfs: true\n artifacts: true\n search:\n provider: zoekt\n enabled: false\nstatus:\n ready: true\n route:\n repositoryName: krate-demo\n backend: gitea\n owner: krate\n store: gitea-primary\n receivePackReady: true\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n gitHosting:\n backend: gitea\n httpUrl: http://krate-gitea-http:3000/krate/krate-demo.git\n sshUrl: ssh://git@krate-gitea-ssh/krate/krate-demo.git\n integrationPlan:\n backend: gitea\n operations:\n - action: createOrganization\n owner: krate\n - action: createRepository\n owner: krate\n repo: krate-demo\n - action: ensureUserMappings\n owner: krate\n - action: addDeployKey\n owner: krate\n repo: krate-demo\n title: krate-argocd\n readOnly: false\n - action: addUserSshKey\n owner: krate\n repo: krate-demo\n title: developer key\n - action: addCollaborator\n owner: krate\n repo: krate-demo\n permission: write\n - action: addTeamRepository\n owner: krate\n repo: krate-demo\n team: maintainers\n permission: admin\n - action: protectBranch\n owner: krate\n repo: krate-demo\n branch: main\n - action: createWebhook\n owner: krate\n repo: krate-demo\n url: http://krate-webhook-worker/repositories/krate-org-default/krate-demo\n storage: etcd\n",
965
1003
  "action": {
966
1004
  "list": "Open Repository records in krate-org-default",
967
1005
  "watch": "Watch Repository updates in krate-org-default",
@@ -2438,7 +2476,7 @@
2438
2476
  "maintainers"
2439
2477
  ],
2440
2478
  "phase": "Pending",
2441
- "expiresAt": "2026-05-22T08:29:09.170Z"
2479
+ "expiresAt": "2026-05-25T11:36:06.793Z"
2442
2480
  }
2443
2481
  ],
2444
2482
  "mappings": [
@@ -2598,9 +2636,43 @@
2598
2636
  "delegatedTo": "Gitea collaborators and team repository APIs"
2599
2637
  },
2600
2638
  "forgeRecords": {
2601
- "issues": "Gitea /repos/{owner}/{repo}/issues",
2639
+ "issues": "Gitea /repos/krate/_krate-org-default_/issues",
2602
2640
  "pullRequests": "Gitea /repos/{owner}/{repo}/pulls"
2603
2641
  },
2642
+ "issueSync": {
2643
+ "backend": "gitea",
2644
+ "owner": "krate-org-default",
2645
+ "repo": "_krate-org-default_",
2646
+ "issue": "<issue>",
2647
+ "project": null,
2648
+ "repositoryRefs": [
2649
+ "krate-demo"
2650
+ ],
2651
+ "metadataKeys": [
2652
+ "krate.a5c.ai/project",
2653
+ "krate.a5c.ai/repositories"
2654
+ ],
2655
+ "actions": [
2656
+ {
2657
+ "action": "ensureOrgMemoryRepository",
2658
+ "owner": "krate-org-default",
2659
+ "repo": "_krate-org-default_"
2660
+ },
2661
+ {
2662
+ "action": "syncIssue",
2663
+ "owner": "krate-org-default",
2664
+ "repo": "_krate-org-default_",
2665
+ "issue": "<issue>"
2666
+ },
2667
+ {
2668
+ "action": "writeIssueRepositoryMetadata",
2669
+ "issue": "<issue>",
2670
+ "repositories": [
2671
+ "krate-demo"
2672
+ ]
2673
+ }
2674
+ ]
2675
+ },
2604
2676
  "webhookUrl": "http://krate-webhook-worker/repositories/krate-org-default/krate-demo",
2605
2677
  "integrationPlan": {
2606
2678
  "backend": "gitea",
@@ -2752,6 +2824,62 @@
2752
2824
  }
2753
2825
  }
2754
2826
  ],
2827
+ "projects": [],
2828
+ "issues": [],
2829
+ "issueSync": {
2830
+ "gitea": {
2831
+ "backend": "gitea",
2832
+ "owner": "default",
2833
+ "repo": "_default_",
2834
+ "issue": "<issue>",
2835
+ "project": null,
2836
+ "repositoryRefs": [
2837
+ "krate-demo"
2838
+ ],
2839
+ "metadataKeys": [
2840
+ "krate.a5c.ai/project",
2841
+ "krate.a5c.ai/repositories"
2842
+ ],
2843
+ "actions": [
2844
+ {
2845
+ "action": "ensureOrgMemoryRepository",
2846
+ "owner": "default",
2847
+ "repo": "_default_"
2848
+ },
2849
+ {
2850
+ "action": "syncIssue",
2851
+ "owner": "default",
2852
+ "repo": "_default_",
2853
+ "issue": "<issue>"
2854
+ },
2855
+ {
2856
+ "action": "writeIssueRepositoryMetadata",
2857
+ "issue": "<issue>",
2858
+ "repositories": [
2859
+ "krate-demo"
2860
+ ]
2861
+ }
2862
+ ]
2863
+ },
2864
+ "github": {
2865
+ "backend": "github",
2866
+ "owner": "default",
2867
+ "project": null,
2868
+ "issue": "<issue>",
2869
+ "repositoryRefs": [
2870
+ "krate-demo"
2871
+ ],
2872
+ "metadataKeys": [
2873
+ "project item fields",
2874
+ "krate repositories field"
2875
+ ],
2876
+ "actions": [
2877
+ "syncProjectItem",
2878
+ "syncIssueMetadata",
2879
+ "syncRepositoryLinks"
2880
+ ]
2881
+ }
2882
+ },
2755
2883
  "excellentFlows": [
2756
2884
  "Create or import a repository",
2757
2885
  "Browse code and copy clone commands",
@@ -2767,6 +2895,16 @@
2767
2895
  "value": 1,
2768
2896
  "href": "/repositories"
2769
2897
  },
2898
+ {
2899
+ "label": "Projects",
2900
+ "value": 0,
2901
+ "href": "/agents/projects"
2902
+ },
2903
+ {
2904
+ "label": "Issues",
2905
+ "value": 0,
2906
+ "href": "/inbox"
2907
+ },
2770
2908
  {
2771
2909
  "label": "Pull requests",
2772
2910
  "value": 0,
@@ -2944,7 +3082,7 @@
2944
3082
  "maintainers"
2945
3083
  ],
2946
3084
  "phase": "Pending",
2947
- "expiresAt": "2026-05-22T08:29:09.170Z"
3085
+ "expiresAt": "2026-05-25T11:36:06.793Z"
2948
3086
  }
2949
3087
  ],
2950
3088
  "mappings": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "project": "Krate",
3
3
  "version": "0.1.0",
4
- "generatedAt": "2026-05-15T08:29:09.181Z",
4
+ "generatedAt": "2026-05-18T11:36:06.803Z",
5
5
  "status": "ready-for-local-development",
6
6
  "components": [
7
7
  {