@intentius/behold 0.7.0 → 0.9.0
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/AGENTS.md +94 -2
- package/README.md +133 -2
- package/demos.json +25 -1
- package/dist/cli.js +3176 -330
- package/example-argo-estate/README.md +71 -0
- package/example-argo-estate/app-a/chant.config.ts +18 -0
- package/example-argo-estate/app-a/manifests/app.yaml +54 -0
- package/example-argo-estate/app-a/package.json +13 -0
- package/example-argo-estate/app-a/src/app.ts +35 -0
- package/example-argo-estate/app-a/tsconfig.json +1 -0
- package/example-argo-estate/app-b/chant.config.ts +18 -0
- package/example-argo-estate/app-b/manifests/app.yaml +54 -0
- package/example-argo-estate/app-b/package.json +13 -0
- package/example-argo-estate/app-b/src/app.ts +34 -0
- package/example-argo-estate/app-b/tsconfig.json +1 -0
- package/example-argo-estate/control-plane/chant.config.ts +29 -0
- package/example-argo-estate/control-plane/package.json +13 -0
- package/example-argo-estate/control-plane/src/argo.ts +69 -0
- package/example-argo-estate/control-plane/tsconfig.json +1 -0
- package/example-argo-estate/package-lock.json +1949 -0
- package/example-argo-estate/package.json +10 -0
- package/example-carve/README.md +194 -0
- package/example-carve/app/chant.config.ts +6 -0
- package/example-carve/app/package-lock.json +1075 -0
- package/example-carve/app/package.json +13 -0
- package/example-carve/app/src/carved.ts +30 -0
- package/example-carve/app/tsconfig.json +1 -0
- package/example-carve/carve-report.json +872 -0
- package/example-carve/legacy-tf/cdn.tf +23 -0
- package/example-carve/legacy-tf/compute.tf +63 -0
- package/example-carve/legacy-tf/floci-override.tf.disabled +61 -0
- package/example-carve/legacy-tf/modules/cdn/main.tf +72 -0
- package/example-carve/legacy-tf/naming.tf +10 -0
- package/example-carve/legacy-tf/network.tf +119 -0
- package/example-carve/legacy-tf/observability.tf +18 -0
- package/example-carve/legacy-tf/outputs.tf +16 -0
- package/example-carve/legacy-tf/storage.tf +33 -0
- package/example-carve/legacy-tf/terraform.tfstate +602 -0
- package/example-carve/legacy-tf/versions.tf +40 -0
- package/example-flux-estate/README.md +22 -12
- package/example-flux-estate/app-a/package.json +2 -2
- package/example-flux-estate/app-a/src/app.ts +2 -1
- package/example-flux-estate/app-b/chant.config.ts +4 -3
- package/example-flux-estate/app-b/package.json +2 -2
- package/example-flux-estate/app-b/src/app.ts +5 -3
- package/example-flux-estate/control-plane/package.json +2 -2
- package/example-flux-estate/control-plane/src/flux.ts +10 -2
- package/example-flux-estate/package-lock.json +17 -17
- package/example-k8s/README.md +16 -2
- package/example-k8s/base/deployment.yaml +21 -0
- package/example-k8s/base/kustomization.yaml +3 -0
- package/example-k8s/base/service.yaml +12 -0
- package/example-k8s/chant.config.ts +10 -0
- package/example-k8s/overlays/dev/kustomization.yaml +6 -0
- package/example-k8s/package-lock.json +18 -18
- package/example-k8s/package.json +3 -3
- package/example-writes/package-lock.json +14 -14
- package/example-writes/package.json +3 -3
- package/package.json +9 -6
- package/web/app.js +1027 -42
- package/web/carve-steps.js +610 -0
- package/web/carve-steps.test.js +233 -0
- package/web/demos.js +71 -0
- package/web/demos.test.js +83 -0
- package/web/icons/cncf/argo.svg +1 -0
- package/web/icons/cncf/flux.svg +1 -0
- package/web/icons/cncf/helm.svg +1 -0
- package/web/icons/k8s/c-role.svg +1 -0
- package/web/icons/k8s/cm.svg +1 -0
- package/web/icons/k8s/crb.svg +1 -0
- package/web/icons/k8s/crd.svg +1 -0
- package/web/icons/k8s/cronjob.svg +1 -0
- package/web/icons/k8s/deploy.svg +1 -0
- package/web/icons/k8s/ds.svg +1 -0
- package/web/icons/k8s/ep.svg +1 -0
- package/web/icons/k8s/group.svg +1 -0
- package/web/icons/k8s/hpa.svg +1 -0
- package/web/icons/k8s/ing.svg +1 -0
- package/web/icons/k8s/job.svg +1 -0
- package/web/icons/k8s/limits.svg +1 -0
- package/web/icons/k8s/netpol.svg +1 -0
- package/web/icons/k8s/ns.svg +1 -0
- package/web/icons/k8s/pod.svg +1 -0
- package/web/icons/k8s/psp.svg +1 -0
- package/web/icons/k8s/pv.svg +1 -0
- package/web/icons/k8s/pvc.svg +1 -0
- package/web/icons/k8s/quota.svg +1 -0
- package/web/icons/k8s/rb.svg +1 -0
- package/web/icons/k8s/role.svg +1 -0
- package/web/icons/k8s/rs.svg +1 -0
- package/web/icons/k8s/sa.svg +1 -0
- package/web/icons/k8s/sc.svg +1 -0
- package/web/icons/k8s/secret.svg +1 -0
- package/web/icons/k8s/sts.svg +1 -0
- package/web/icons/k8s/svc.svg +1 -0
- package/web/icons/k8s/user.svg +1 -0
- package/web/icons/k8s/vol.svg +1 -0
- package/web/index.html +285 -85
- package/web/json-view.js +334 -0
- package/web/json-view.test.js +218 -0
- package/web/layout-store.js +278 -0
- package/web/layout-store.test.js +388 -0
- package/web/panel.js +28 -0
- package/web/theme.js +114 -6
|
@@ -3,15 +3,19 @@
|
|
|
3
3
|
Three chant projects served as one composed estate:
|
|
4
4
|
|
|
5
5
|
- **control-plane/** — the Flux machinery: a `GitRepository` pointing at
|
|
6
|
-
behold's own public repo and one `Kustomization` per app
|
|
7
|
-
|
|
6
|
+
behold's own public repo and one `Kustomization` per app, app-b's gated on
|
|
7
|
+
app-a's with `dependsOn` (behold#223). The reconcilers deploy the apps; this
|
|
8
|
+
project never applies a workload itself.
|
|
8
9
|
- **app-a/** — a small web workload with explicit `metadata.namespace` on
|
|
9
10
|
every object: the fully-resolved half.
|
|
10
11
|
- **app-b/** — the same workload with **no** namespace anywhere: the control
|
|
11
12
|
plane's `targetNamespace` stamps it at apply time. Idiomatic Flux, and the
|
|
12
|
-
deliberate exhibit of
|
|
13
|
-
|
|
14
|
-
all-pending paint
|
|
13
|
+
deliberate exhibit of the estate namespace join (behold#221). Served alone,
|
|
14
|
+
app-b's live read scopes to `default`, finds nothing, and behold explains
|
|
15
|
+
the all-pending paint with the namespace-mismatch note (behold#192) instead
|
|
16
|
+
of letting it read as "not deployed". Served composed, the estate reads the
|
|
17
|
+
binding off the control plane's own `Kustomization` and scopes app-b's read
|
|
18
|
+
to `app-b` — the answer neither project holds by itself.
|
|
15
19
|
|
|
16
20
|
```sh
|
|
17
21
|
npx @intentius/behold demo flux-estate
|
|
@@ -22,14 +26,20 @@ controllers straight from the pinned release manifest (no `flux` CLI needed),
|
|
|
22
26
|
applies the control plane, waits for the reconcilers to deploy both apps from
|
|
23
27
|
this repo, and serves the three projects composed. What to look at:
|
|
24
28
|
|
|
25
|
-
- The **estate**: per-project boundary boxes,
|
|
26
|
-
Kustomization → GitRepository across stacks
|
|
29
|
+
- The **estate**: per-project boundary boxes, the `sourceRef` edges wiring
|
|
30
|
+
Kustomization → GitRepository across stacks, and the `dependsOn` edge from
|
|
31
|
+
app-b's Kustomization to app-a's — the estate's reconcile ordering.
|
|
27
32
|
- The **overlay** (env `local`): app-a green, the control plane's CRs green,
|
|
28
|
-
app-b
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
and app-b green too — read in the namespace the control plane binds it to,
|
|
34
|
+
with a note naming where it looked. Serve `app-b` on its own to see the
|
|
35
|
+
same objects go pending, which is what the join is worth.
|
|
36
|
+
- The **runtime tier** (zoom: runtime), on the estate itself since behold#224:
|
|
37
|
+
the workloads Flux deployed, attributed back to the declaring Kustomization
|
|
38
|
+
via its labels (chant#1549) and boxed under it.
|
|
39
|
+
- The **logical lens** (zoom: logical): cluster ⊃ namespace boxes, with each
|
|
40
|
+
app's objects inside the namespace the control plane declared for them —
|
|
41
|
+
the view that only exists once the three projects are composed, since the
|
|
42
|
+
namespaces are declared in one project and filled from the others.
|
|
33
43
|
|
|
34
44
|
The app `manifests/` are committed `chant build` output — Flux syncs them
|
|
35
45
|
from GitHub `main`, so changes to an app's source need a rebuild
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// App A: one small web workload, namespace declared EXPLICITLY on every
|
|
2
2
|
// object. Contrast app-b, which leaves namespace to the control plane's
|
|
3
3
|
// targetNamespace — the two apps together show both halves of the Flux
|
|
4
|
-
// namespace story
|
|
4
|
+
// namespace story: behold#192's note when app-b is served alone, behold#221's
|
|
5
|
+
// estate join when the three projects are served composed.
|
|
5
6
|
import { Deployment, Service } from "@intentius/chant-lexicon-k8s";
|
|
6
7
|
|
|
7
8
|
const labels = { app: "app-a" };
|
|
@@ -4,9 +4,10 @@ import type { K8sChantConfig } from "@intentius/chant-lexicon-k8s";
|
|
|
4
4
|
// App project B — the targetNamespace half of the estate: its objects declare
|
|
5
5
|
// no metadata.namespace (see src/app.ts), so the control plane's
|
|
6
6
|
// Kustomization stamps `app-b` at apply time. That is idiomatic Flux, AND it
|
|
7
|
-
// means a
|
|
8
|
-
// namespace-mismatch note (behold#192) names exactly this,
|
|
9
|
-
// this demo.
|
|
7
|
+
// means a live read of THIS PROJECT ALONE scopes to `default` and finds
|
|
8
|
+
// nothing — behold's namespace-mismatch note (behold#192) names exactly this,
|
|
9
|
+
// on purpose, in this demo. Composed with the control plane, behold joins the
|
|
10
|
+
// binding and reads `app-b` instead (behold#221).
|
|
10
11
|
export default {
|
|
11
12
|
lexicons: ["k8s"],
|
|
12
13
|
sourceDir: "src",
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
// App B: same small workload as app-a, with NO metadata.namespace anywhere —
|
|
2
2
|
// the control plane's Kustomization stamps targetNamespace: app-b at apply
|
|
3
3
|
// time. Idiomatic Flux (that's what the field is for), and the deliberate
|
|
4
|
-
// exhibit of behold's namespace
|
|
5
|
-
// scopes to `default`, finds nothing, and behold explains
|
|
6
|
-
//
|
|
4
|
+
// exhibit of behold's estate namespace join (behold#221): served ALONE this
|
|
5
|
+
// project's live read scopes to `default`, finds nothing, and behold explains
|
|
6
|
+
// the all-pending paint with its namespace-mismatch note (behold#192) rather
|
|
7
|
+
// than letting it read as "not deployed". Served COMPOSED, the estate reads
|
|
8
|
+
// the binding off ../../control-plane and scopes the read to `app-b`.
|
|
7
9
|
import { Deployment, Service } from "@intentius/chant-lexicon-k8s";
|
|
8
10
|
|
|
9
11
|
const labels = { app: "app-b" };
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
// Kustomization applies one app project's committed manifests into that app's
|
|
4
4
|
// namespace via targetNamespace — which is why app-b's objects declare no
|
|
5
5
|
// metadata.namespace (see ../../app-b/src/app.ts): Flux stamps it at apply
|
|
6
|
-
// time. That is the normal Flux estate shape
|
|
7
|
-
//
|
|
6
|
+
// time. That is the normal Flux estate shape — the one behold#192's note
|
|
7
|
+
// explains for a project served alone, and the one behold#221's estate join
|
|
8
|
+
// resolves outright by reading `targetNamespace` off the Kustomizations
|
|
9
|
+
// below and scoping app-b's live read to it.
|
|
8
10
|
//
|
|
9
11
|
// scripts/estate-up.sh applies the BUILT form of this project (chant build →
|
|
10
12
|
// dist/control-plane.yaml) once, after installing Flux; from then on the
|
|
@@ -39,6 +41,11 @@ export const appA = new Kustomization({
|
|
|
39
41
|
},
|
|
40
42
|
});
|
|
41
43
|
|
|
44
|
+
// app-b is the estate's second layer: Flux holds it back until app-a has
|
|
45
|
+
// applied cleanly. Nothing in app-b talks to app-a at runtime — the gate is
|
|
46
|
+
// here because a layered estate's ordering is its most load-bearing structure
|
|
47
|
+
// and the demo should show one (behold#223). Same field a real estate uses to
|
|
48
|
+
// put its platform layer ahead of its apps.
|
|
42
49
|
export const appB = new Kustomization({
|
|
43
50
|
metadata: { name: "app-b", namespace: "flux-system" },
|
|
44
51
|
spec: {
|
|
@@ -47,5 +54,6 @@ export const appB = new Kustomization({
|
|
|
47
54
|
targetNamespace: "app-b",
|
|
48
55
|
sourceRef: { kind: "GitRepository", name: "behold" },
|
|
49
56
|
path: "./example-flux-estate/app-b/manifests",
|
|
57
|
+
dependsOn: [{ name: "app-a" }],
|
|
50
58
|
},
|
|
51
59
|
});
|
|
@@ -14,22 +14,22 @@
|
|
|
14
14
|
"app-a": {
|
|
15
15
|
"name": "behold-example-flux-app-a",
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@intentius/chant": "^0.44.
|
|
18
|
-
"@intentius/chant-lexicon-k8s": "^0.44.
|
|
17
|
+
"@intentius/chant": "^0.44.6",
|
|
18
|
+
"@intentius/chant-lexicon-k8s": "^0.44.6"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"app-b": {
|
|
22
22
|
"name": "behold-example-flux-app-b",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@intentius/chant": "^0.44.
|
|
25
|
-
"@intentius/chant-lexicon-k8s": "^0.44.
|
|
24
|
+
"@intentius/chant": "^0.44.6",
|
|
25
|
+
"@intentius/chant-lexicon-k8s": "^0.44.6"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"control-plane": {
|
|
29
29
|
"name": "behold-example-flux-control-plane",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@intentius/chant": "^0.44.
|
|
32
|
-
"@intentius/chant-lexicon-k8s": "^0.44.
|
|
31
|
+
"@intentius/chant": "^0.44.6",
|
|
32
|
+
"@intentius/chant-lexicon-k8s": "^0.44.6"
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"node_modules/@dagrejs/dagre": {
|
|
@@ -464,9 +464,9 @@
|
|
|
464
464
|
}
|
|
465
465
|
},
|
|
466
466
|
"node_modules/@intentius/chant": {
|
|
467
|
-
"version": "0.44.
|
|
468
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.44.
|
|
469
|
-
"integrity": "sha512-
|
|
467
|
+
"version": "0.44.6",
|
|
468
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.44.6.tgz",
|
|
469
|
+
"integrity": "sha512-VFqPKe2WsSAJoUvfyghVTlIcj+QRNn//JgSHToq6PDDuKPU7F34V/4f+EZpX4MF3gvwVkZc9d6FUwKio6t0uqg==",
|
|
470
470
|
"license": "Apache-2.0",
|
|
471
471
|
"dependencies": {
|
|
472
472
|
"@dagrejs/dagre": "^3.0.0",
|
|
@@ -482,9 +482,9 @@
|
|
|
482
482
|
}
|
|
483
483
|
},
|
|
484
484
|
"node_modules/@intentius/chant-k8s-client": {
|
|
485
|
-
"version": "0.44.
|
|
486
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-k8s-client/-/chant-k8s-client-0.44.
|
|
487
|
-
"integrity": "sha512-
|
|
485
|
+
"version": "0.44.6",
|
|
486
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-k8s-client/-/chant-k8s-client-0.44.6.tgz",
|
|
487
|
+
"integrity": "sha512-Do3zY0Bd2nIITDDrXYePwdOBdnNf59xn5J1aJA6gsg3dzXxR3dZ25YBAh+SQxKbRPuXIbu9rKd5lodaM8ZQDng==",
|
|
488
488
|
"license": "Apache-2.0",
|
|
489
489
|
"optional": true,
|
|
490
490
|
"dependencies": {
|
|
@@ -492,19 +492,19 @@
|
|
|
492
492
|
}
|
|
493
493
|
},
|
|
494
494
|
"node_modules/@intentius/chant-lexicon-k8s": {
|
|
495
|
-
"version": "0.44.
|
|
496
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-k8s/-/chant-lexicon-k8s-0.44.
|
|
497
|
-
"integrity": "sha512-
|
|
495
|
+
"version": "0.44.6",
|
|
496
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-k8s/-/chant-lexicon-k8s-0.44.6.tgz",
|
|
497
|
+
"integrity": "sha512-JP2Lo4fFV7FPbSTHapKuDgpvrsm3dbNBT9pMW9NQB2MoE/ZkMGf3z3/wsPnygLdjbYq29abVYmw7DzPqBmA1tw==",
|
|
498
498
|
"license": "Apache-2.0",
|
|
499
499
|
"dependencies": {
|
|
500
500
|
"@types/js-yaml": "^4.0.9",
|
|
501
501
|
"js-yaml": "^4.1.1"
|
|
502
502
|
},
|
|
503
503
|
"optionalDependencies": {
|
|
504
|
-
"@intentius/chant-k8s-client": "^0.44.
|
|
504
|
+
"@intentius/chant-k8s-client": "^0.44.6"
|
|
505
505
|
},
|
|
506
506
|
"peerDependencies": {
|
|
507
|
-
"@intentius/chant": "^0.44.
|
|
507
|
+
"@intentius/chant": "^0.44.6",
|
|
508
508
|
"typescript": "^5.9.3",
|
|
509
509
|
"zod": "^4.3.6"
|
|
510
510
|
}
|
package/example-k8s/README.md
CHANGED
|
@@ -6,13 +6,27 @@ PodDisruptionBudget), deployed from the browser with the **▶ Deploy
|
|
|
6
6
|
[k3d](https://k3d.io) cluster — no cloud account, no credentials.
|
|
7
7
|
|
|
8
8
|
```
|
|
9
|
-
src/config.ts
|
|
9
|
+
src/config.ts static config — app name, pinned image tag
|
|
10
10
|
src/web.ts WebApp composite → Deployment + Service + PodDisruptionBudget
|
|
11
11
|
ops/k3d-apply.op.ts ApplyOp "k3d-apply" — code → local k3d, server-side apply
|
|
12
|
-
|
|
12
|
+
base/ a plain Deployment + Service, core kinds only
|
|
13
|
+
overlays/dev/ kustomize overlay over base/ — namePrefix "dev-" + a replica patch
|
|
14
|
+
chant.config.ts lexicons [k8s, temporal], k8s.profiles.local bound to k3d-behold-k3d-demo,
|
|
15
|
+
k8s.kustomize.roots: ["overlays/dev"]
|
|
13
16
|
scripts/local/ local-up.sh / local-down.sh — the k3d cluster's own lifecycle
|
|
14
17
|
```
|
|
15
18
|
|
|
19
|
+
`overlays/dev` is a real kustomize build root (chant#1626, chant 0.44.3): chant
|
|
20
|
+
renders it (`kustomize build`, `kubectl kustomize` fallback) at build time and
|
|
21
|
+
joins the two rendered objects (`dev-echo` Deployment + Service) to the graph,
|
|
22
|
+
each stamped with a `chant.intentius.io/kustomize-root: overlays/dev`
|
|
23
|
+
annotation. behold's kustomize lens (behold#171/#217) reads that stamp and
|
|
24
|
+
boxes them as `overlay dev` in the graph — the same lens a hand-rolled
|
|
25
|
+
`kustomization.yaml` next to typed source triggers via its directory walk, but
|
|
26
|
+
here from chant's own provenance rather than file location. Kept to core/apps
|
|
27
|
+
kinds on purpose: chant#1628 still mistypes a Flux/Argo/cert-manager CR
|
|
28
|
+
rendered through a kustomize root.
|
|
29
|
+
|
|
16
30
|
## Run it
|
|
17
31
|
|
|
18
32
|
From the **behold** repo root:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
apiVersion: apps/v1
|
|
2
|
+
kind: Deployment
|
|
3
|
+
metadata:
|
|
4
|
+
name: echo
|
|
5
|
+
labels:
|
|
6
|
+
app: echo
|
|
7
|
+
spec:
|
|
8
|
+
replicas: 1
|
|
9
|
+
selector:
|
|
10
|
+
matchLabels:
|
|
11
|
+
app: echo
|
|
12
|
+
template:
|
|
13
|
+
metadata:
|
|
14
|
+
labels:
|
|
15
|
+
app: echo
|
|
16
|
+
spec:
|
|
17
|
+
containers:
|
|
18
|
+
- name: echo
|
|
19
|
+
image: nginxinc/nginx-unprivileged:1.27-alpine
|
|
20
|
+
ports:
|
|
21
|
+
- containerPort: 8080
|
|
@@ -17,5 +17,15 @@ export default {
|
|
|
17
17
|
profiles: {
|
|
18
18
|
local: { context: "k3d-behold-k3d-demo" },
|
|
19
19
|
},
|
|
20
|
+
// chant#1626 (chant 0.44.3, behold#225): a real kustomize build root —
|
|
21
|
+
// `overlays/dev` layers a namePrefix and a replica patch onto `base/`.
|
|
22
|
+
// Rendered at build time and stamped with the
|
|
23
|
+
// `chant.intentius.io/kustomize-root` provenance annotation, which
|
|
24
|
+
// behold's kustomize lens (src/logical-kustomize.ts, #217) prefers over
|
|
25
|
+
// its directory-walk heuristic — the `overlay dev` box in the demo graph
|
|
26
|
+
// comes from this, not source-file location. Core/apps kinds only inside
|
|
27
|
+
// the root: chant#1628 still mistypes Flux/Argo/cert-manager CRs
|
|
28
|
+
// rendered through a kustomize build.
|
|
29
|
+
kustomize: { roots: ["overlays/dev"] },
|
|
20
30
|
} satisfies K8sChantConfig,
|
|
21
31
|
} satisfies ChantConfig;
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
"": {
|
|
7
7
|
"name": "behold-example-k8s",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@intentius/chant": "^0.44.
|
|
10
|
-
"@intentius/chant-lexicon-k8s": "^0.44.
|
|
11
|
-
"@intentius/chant-lexicon-temporal": "^0.44.
|
|
9
|
+
"@intentius/chant": "^0.44.6",
|
|
10
|
+
"@intentius/chant-lexicon-k8s": "^0.44.6",
|
|
11
|
+
"@intentius/chant-lexicon-temporal": "^0.44.6"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"node_modules/@dagrejs/dagre": {
|
|
@@ -443,9 +443,9 @@
|
|
|
443
443
|
}
|
|
444
444
|
},
|
|
445
445
|
"node_modules/@intentius/chant": {
|
|
446
|
-
"version": "0.44.
|
|
447
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.44.
|
|
448
|
-
"integrity": "sha512-
|
|
446
|
+
"version": "0.44.6",
|
|
447
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.44.6.tgz",
|
|
448
|
+
"integrity": "sha512-VFqPKe2WsSAJoUvfyghVTlIcj+QRNn//JgSHToq6PDDuKPU7F34V/4f+EZpX4MF3gvwVkZc9d6FUwKio6t0uqg==",
|
|
449
449
|
"license": "Apache-2.0",
|
|
450
450
|
"dependencies": {
|
|
451
451
|
"@dagrejs/dagre": "^3.0.0",
|
|
@@ -461,9 +461,9 @@
|
|
|
461
461
|
}
|
|
462
462
|
},
|
|
463
463
|
"node_modules/@intentius/chant-k8s-client": {
|
|
464
|
-
"version": "0.44.
|
|
465
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-k8s-client/-/chant-k8s-client-0.44.
|
|
466
|
-
"integrity": "sha512-
|
|
464
|
+
"version": "0.44.6",
|
|
465
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-k8s-client/-/chant-k8s-client-0.44.6.tgz",
|
|
466
|
+
"integrity": "sha512-Do3zY0Bd2nIITDDrXYePwdOBdnNf59xn5J1aJA6gsg3dzXxR3dZ25YBAh+SQxKbRPuXIbu9rKd5lodaM8ZQDng==",
|
|
467
467
|
"license": "Apache-2.0",
|
|
468
468
|
"optional": true,
|
|
469
469
|
"dependencies": {
|
|
@@ -471,34 +471,34 @@
|
|
|
471
471
|
}
|
|
472
472
|
},
|
|
473
473
|
"node_modules/@intentius/chant-lexicon-k8s": {
|
|
474
|
-
"version": "0.44.
|
|
475
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-k8s/-/chant-lexicon-k8s-0.44.
|
|
476
|
-
"integrity": "sha512-
|
|
474
|
+
"version": "0.44.6",
|
|
475
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-k8s/-/chant-lexicon-k8s-0.44.6.tgz",
|
|
476
|
+
"integrity": "sha512-JP2Lo4fFV7FPbSTHapKuDgpvrsm3dbNBT9pMW9NQB2MoE/ZkMGf3z3/wsPnygLdjbYq29abVYmw7DzPqBmA1tw==",
|
|
477
477
|
"license": "Apache-2.0",
|
|
478
478
|
"dependencies": {
|
|
479
479
|
"@types/js-yaml": "^4.0.9",
|
|
480
480
|
"js-yaml": "^4.1.1"
|
|
481
481
|
},
|
|
482
482
|
"optionalDependencies": {
|
|
483
|
-
"@intentius/chant-k8s-client": "^0.44.
|
|
483
|
+
"@intentius/chant-k8s-client": "^0.44.6"
|
|
484
484
|
},
|
|
485
485
|
"peerDependencies": {
|
|
486
|
-
"@intentius/chant": "^0.44.
|
|
486
|
+
"@intentius/chant": "^0.44.6",
|
|
487
487
|
"typescript": "^5.9.3",
|
|
488
488
|
"zod": "^4.3.6"
|
|
489
489
|
}
|
|
490
490
|
},
|
|
491
491
|
"node_modules/@intentius/chant-lexicon-temporal": {
|
|
492
|
-
"version": "0.44.
|
|
493
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-temporal/-/chant-lexicon-temporal-0.44.
|
|
494
|
-
"integrity": "sha512-
|
|
492
|
+
"version": "0.44.6",
|
|
493
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-temporal/-/chant-lexicon-temporal-0.44.6.tgz",
|
|
494
|
+
"integrity": "sha512-Uta1NNOHjZpI04NLaB9lTjXxAlKM7TSRx4D6Yj76RyeSoIZzcvnFJ9lJjSaIGaN20rdjK1w43b8BxsLOZTrwyA==",
|
|
495
495
|
"license": "Apache-2.0",
|
|
496
496
|
"dependencies": {
|
|
497
497
|
"@temporalio/common": "^1.17.2",
|
|
498
498
|
"js-yaml": "^4.1.1"
|
|
499
499
|
},
|
|
500
500
|
"peerDependencies": {
|
|
501
|
-
"@intentius/chant": "^0.44.
|
|
501
|
+
"@intentius/chant": "^0.44.6",
|
|
502
502
|
"typescript": "^5.9.3",
|
|
503
503
|
"zod": "^4.3.6"
|
|
504
504
|
}
|
package/example-k8s/package.json
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"build": "./node_modules/.bin/chant build src --lexicon k8s -o app.yaml"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@intentius/chant": "^0.44.
|
|
11
|
-
"@intentius/chant-lexicon-k8s": "^0.44.
|
|
12
|
-
"@intentius/chant-lexicon-temporal": "^0.44.
|
|
10
|
+
"@intentius/chant": "^0.44.6",
|
|
11
|
+
"@intentius/chant-lexicon-k8s": "^0.44.6",
|
|
12
|
+
"@intentius/chant-lexicon-temporal": "^0.44.6"
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
"": {
|
|
7
7
|
"name": "behold-example-writes",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@intentius/chant": "^0.44.
|
|
10
|
-
"@intentius/chant-lexicon-aws": "^0.44.
|
|
11
|
-
"@intentius/chant-lexicon-temporal": "^0.44.
|
|
9
|
+
"@intentius/chant": "^0.44.6",
|
|
10
|
+
"@intentius/chant-lexicon-aws": "^0.44.6",
|
|
11
|
+
"@intentius/chant-lexicon-temporal": "^0.44.6"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"node_modules/@dagrejs/dagre": {
|
|
@@ -443,9 +443,9 @@
|
|
|
443
443
|
}
|
|
444
444
|
},
|
|
445
445
|
"node_modules/@intentius/chant": {
|
|
446
|
-
"version": "0.44.
|
|
447
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.44.
|
|
448
|
-
"integrity": "sha512-
|
|
446
|
+
"version": "0.44.6",
|
|
447
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.44.6.tgz",
|
|
448
|
+
"integrity": "sha512-VFqPKe2WsSAJoUvfyghVTlIcj+QRNn//JgSHToq6PDDuKPU7F34V/4f+EZpX4MF3gvwVkZc9d6FUwKio6t0uqg==",
|
|
449
449
|
"license": "Apache-2.0",
|
|
450
450
|
"dependencies": {
|
|
451
451
|
"@dagrejs/dagre": "^3.0.0",
|
|
@@ -461,30 +461,30 @@
|
|
|
461
461
|
}
|
|
462
462
|
},
|
|
463
463
|
"node_modules/@intentius/chant-lexicon-aws": {
|
|
464
|
-
"version": "0.44.
|
|
465
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-aws/-/chant-lexicon-aws-0.44.
|
|
466
|
-
"integrity": "sha512-
|
|
464
|
+
"version": "0.44.6",
|
|
465
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-aws/-/chant-lexicon-aws-0.44.6.tgz",
|
|
466
|
+
"integrity": "sha512-2qGwWFCRLkT9MD5YFnhnZOGDCqPZg9la4MM8szlX8QxFFoQjAulJ8e+vjeCGbWoB8nbSIQ9kJOX8Yn46Pm37iQ==",
|
|
467
467
|
"license": "Apache-2.0",
|
|
468
468
|
"dependencies": {
|
|
469
469
|
"fflate": "^0.8.2",
|
|
470
470
|
"js-yaml": "^4.1.0"
|
|
471
471
|
},
|
|
472
472
|
"peerDependencies": {
|
|
473
|
-
"@intentius/chant": "^0.44.
|
|
473
|
+
"@intentius/chant": "^0.44.6",
|
|
474
474
|
"typescript": "^5.9.3"
|
|
475
475
|
}
|
|
476
476
|
},
|
|
477
477
|
"node_modules/@intentius/chant-lexicon-temporal": {
|
|
478
|
-
"version": "0.44.
|
|
479
|
-
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-temporal/-/chant-lexicon-temporal-0.44.
|
|
480
|
-
"integrity": "sha512-
|
|
478
|
+
"version": "0.44.6",
|
|
479
|
+
"resolved": "https://registry.npmjs.org/@intentius/chant-lexicon-temporal/-/chant-lexicon-temporal-0.44.6.tgz",
|
|
480
|
+
"integrity": "sha512-Uta1NNOHjZpI04NLaB9lTjXxAlKM7TSRx4D6Yj76RyeSoIZzcvnFJ9lJjSaIGaN20rdjK1w43b8BxsLOZTrwyA==",
|
|
481
481
|
"license": "Apache-2.0",
|
|
482
482
|
"dependencies": {
|
|
483
483
|
"@temporalio/common": "^1.17.2",
|
|
484
484
|
"js-yaml": "^4.1.1"
|
|
485
485
|
},
|
|
486
486
|
"peerDependencies": {
|
|
487
|
-
"@intentius/chant": "^0.44.
|
|
487
|
+
"@intentius/chant": "^0.44.6",
|
|
488
488
|
"typescript": "^5.9.3",
|
|
489
489
|
"zod": "^4.3.6"
|
|
490
490
|
}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"build": "./node_modules/.bin/chant build src --lexicon aws -o template.json"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@intentius/chant": "^0.44.
|
|
11
|
-
"@intentius/chant-lexicon-aws": "^0.44.
|
|
12
|
-
"@intentius/chant-lexicon-temporal": "^0.44.
|
|
10
|
+
"@intentius/chant": "^0.44.6",
|
|
11
|
+
"@intentius/chant-lexicon-aws": "^0.44.6",
|
|
12
|
+
"@intentius/chant-lexicon-temporal": "^0.44.6"
|
|
13
13
|
}
|
|
14
14
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/behold",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "behold — a live control plane on chant. See your whole estate (every substrate in one graph), coloured by drift; act through delegated, gated Ops.",
|
|
6
6
|
"bin": {
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
"example-writes",
|
|
14
14
|
"example-k8s",
|
|
15
15
|
"example-flux-estate",
|
|
16
|
+
"example-argo-estate",
|
|
17
|
+
"example-carve",
|
|
16
18
|
"demos.json",
|
|
17
19
|
"AGENTS.md"
|
|
18
20
|
],
|
|
@@ -24,18 +26,19 @@
|
|
|
24
26
|
"dev": "tsx src/cli.ts",
|
|
25
27
|
"demo": "npm --prefix example-writes install && tsx src/cli.ts serve example-writes --local --env prod",
|
|
26
28
|
"demo:k8s": "bash example-k8s/scripts/local/local-up.sh; npm --prefix example-k8s install && tsx src/cli.ts serve example-k8s --local --env local; bash example-k8s/scripts/local/local-down.sh",
|
|
27
|
-
"smoke:ui": "
|
|
29
|
+
"smoke:ui": "tsx smoke/ui-smoke.mjs",
|
|
28
30
|
"tsc": "tsc --noEmit",
|
|
29
31
|
"test": "vitest run",
|
|
30
|
-
"build": "esbuild src/cli.ts --bundle --platform=node --format=esm --external:hono --external:@hono/node-server --external:@intentius/pinhole --outfile=dist/cli.js && chmod +x dist/cli.js",
|
|
32
|
+
"build": "esbuild src/cli.ts --bundle --platform=node --format=esm --external:hono --external:@hono/node-server --external:@intentius/pinhole --external:@kubernetes/client-node --outfile=dist/cli.js && chmod +x dist/cli.js",
|
|
31
33
|
"prepare": "npm run build",
|
|
32
34
|
"prepublishOnly": "npm run build"
|
|
33
35
|
},
|
|
34
36
|
"dependencies": {
|
|
35
|
-
"@hono/node-server": "^
|
|
37
|
+
"@hono/node-server": "^2.0.5",
|
|
36
38
|
"@intentius/chant": "^0.38.0",
|
|
37
|
-
"@intentius/
|
|
38
|
-
"
|
|
39
|
+
"@intentius/chant-k8s-client": "^0.44.5",
|
|
40
|
+
"@intentius/pinhole": "^0.3.3",
|
|
41
|
+
"hono": "^4.12.34"
|
|
39
42
|
},
|
|
40
43
|
"devDependencies": {
|
|
41
44
|
"@types/node": "^22.0.0",
|