diff --git a/modules/claude-code/cmd/claude-code/insteadof_test.go b/modules/claude-code/cmd/claude-code/insteadof_test.go index f36a0d549..8e8624b1a 100644 --- a/modules/claude-code/cmd/claude-code/insteadof_test.go +++ b/modules/claude-code/cmd/claude-code/insteadof_test.go @@ -6,6 +6,10 @@ import ( "encoding/json" "errors" "fmt" + assignerclient "git.novox.be/novox/mesh-contracts/placement/go/clients/meshmoduleassignerclient" + mesh "git.novox.be/novox/mesh-contracts/placement/go/seats/meshmoduleassigner" + catalogclient "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient" + catalog "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog" "os" "reflect" "slices" @@ -13,7 +17,6 @@ import ( "testing" "time" - "git.novox.be/novox/mesh-sdk/go/delivery" "git.novox.be/novox/mesh-sdk/go/seatdef" "git.novox.be/novox/mesh-sdk/go/seatlist" "git.novox.be/novox/mesh-sdk/go/views" @@ -55,12 +58,12 @@ func someSeats() []seatdef.Definition { func aMesh(t *testing.T) aBus { t.Helper() b := aBus{PlacementRead: {}, ModulesRead: {}, ManifestsRead: {}} - for _, p := range []delivery.Placement{ - {V: 1, Node: "anchor", Decided: delivery.NodeDecided{PublicDomain: "Anchor.Example"}, - Modules: []delivery.PlacedModule{{Module: "docker"}, {Module: "zsh"}}}, + for _, p := range []mesh.Placement{ + {V: 1, Node: "anchor", Decided: mesh.NodeDecided{PublicDomain: "Anchor.Example"}, + Modules: []mesh.PlacedModule{{Module: "docker"}, {Module: "zsh"}}}, {V: 1, Node: "laptop"}, } { - values, err := delivery.PlacementValues(p) + values, err := assignerclient.PlacementValues(p) if err != nil { t.Fatal(err) } @@ -73,14 +76,14 @@ func aMesh(t *testing.T) aBus { "zsh": `{"module":"zsh"}`, } { digest := fmt.Sprintf("%x", sha256.Sum256([]byte(manifest))) - mkey, _ := delivery.ManifestsKey(digest) - raw, err := json.Marshal(delivery.Manifest{V: 1, Module: module, JSON: manifest}) + mkey, _ := catalogclient.ManifestsKey(digest) + raw, err := json.Marshal(catalog.ManifestsByDigestValue{V: 1, Module: module, Manifest: manifest}) if err != nil { t.Fatal(err) } b[ManifestsRead][mkey] = raw - key, _ := delivery.ModulesKey(module) - b[ModulesRead][key], _ = json.Marshal(delivery.Module{V: 1, None: "nothing is built of it", Manifest: digest, Repository: "novox/mesh-catalog", Commit: "c"}) + key, _ := catalogclient.ModulesKey(module) + b[ModulesRead][key], _ = json.Marshal(catalog.ModulesByModuleValue{V: 1, None: "nothing is built of it", Manifest: digest, Repository: "novox/mesh-catalog", Commit: "c"}) } return b } diff --git a/modules/claude-code/cmd/claude-code/main.go b/modules/claude-code/cmd/claude-code/main.go index 3fd46e20c..2760c0b69 100644 --- a/modules/claude-code/cmd/claude-code/main.go +++ b/modules/claude-code/cmd/claude-code/main.go @@ -26,7 +26,6 @@ import ( occ "git.novox.be/novox/mesh-contracts/operator-and-conversation/go/clients/operatorchannelclient" oc "git.novox.be/novox/mesh-contracts/operator-and-conversation/go/seats/operatorchannel" stdio "git.novox.be/novox/mesh-sdk/go" - "git.novox.be/novox/mesh-sdk/go/delivery" "git.novox.be/novox/mesh-sdk/go/seatlist" "git.novox.be/novox/mesh-sdk/go/views" ) @@ -214,10 +213,17 @@ func (s stateOf) Get(key string) (json.RawMessage, bool, error) { func nodesRunningMe() ([]string, error) { return NodesRunning(viewStates{meshViews}, "claude-code") } // The owners' read tools of the states this module follows, which the manifest invokes (novox/hq ADR 0615 ยง1). +// The holders whose views this module follows, as its manifest's `consumes` and `invokes` name them (the manifest test +// holds them equal). const ( - ModulesTool = delivery.IndexerModule + ".indexer_read_modules" - ManifestsTool = delivery.IndexerModule + ".indexer_read_manifests" - PlacementTool = delivery.AssignerModule + ".assigner_read_placement" + assignerModule = "mesh-delivery-assigner" + indexerModule = "mesh-delivery-indexer" +) + +const ( + ModulesTool = indexerModule + ".indexer_read_modules" + ManifestsTool = indexerModule + ".indexer_read_manifests" + PlacementTool = assignerModule + ".assigner_read_placement" ) // meshViews is this module's picture of the indexer's modules and manifests and the assigner's placement: each asked @@ -237,9 +243,9 @@ func newMeshViews() *views.Reader { default: } }} - v.Follow(delivery.IndexerModule, "modules", ModulesTool) - v.Follow(delivery.IndexerModule, "manifests", ManifestsTool) - v.Follow(delivery.AssignerModule, "placement", PlacementTool) + v.Follow(indexerModule, "modules", ModulesTool) + v.Follow(indexerModule, "manifests", ManifestsTool) + v.Follow(assignerModule, "placement", PlacementTool) return v } diff --git a/modules/claude-code/cmd/claude-code/mesh.go b/modules/claude-code/cmd/claude-code/mesh.go index 7ccb6e5e7..7f505c40d 100644 --- a/modules/claude-code/cmd/claude-code/mesh.go +++ b/modules/claude-code/cmd/claude-code/mesh.go @@ -16,6 +16,10 @@ import ( "encoding/json" "errors" "fmt" + assignerclient "git.novox.be/novox/mesh-contracts/placement/go/clients/meshmoduleassignerclient" + mesh "git.novox.be/novox/mesh-contracts/placement/go/seats/meshmoduleassigner" + catalogclient "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient" + catalog "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog" "net" "os" "path/filepath" @@ -25,7 +29,6 @@ import ( "time" "git.novox.be/novox/mesh-sdk/go/catalogue" - "git.novox.be/novox/mesh-sdk/go/delivery" "git.novox.be/novox/mesh-sdk/go/seatdef" "git.novox.be/novox/mesh-sdk/go/seatlist" ) @@ -89,9 +92,9 @@ func ReadMeshTools(p Paths) *MeshTools { // The states read, each declared in the manifest's reads. const ( - PlacementRead = delivery.PlacementRead - ModulesRead = delivery.IndexerModule + ".modules" - ManifestsRead = delivery.IndexerModule + ".manifests" + PlacementRead = (assignerModule + "." + mesh.StatePlacement) + ModulesRead = indexerModule + "." + catalog.StateModules + ManifestsRead = indexerModule + "." + catalog.StateManifests ) // States reads the module states the manifest declares in its reads: a state's keys, and one key's value. @@ -108,12 +111,12 @@ type ModuleTools struct { } // placements is every node's placement, from the seat mesh-module-assigner's state. -func placements(st States) (map[string]delivery.Placement, error) { +func placements(st States) (map[string]mesh.Placement, error) { keys, err := st.Keys(PlacementRead) if err != nil { return nil, fmt.Errorf("%s: %w", PlacementRead, err) } - read := delivery.NewPlacementKeys() + read := assignerclient.NewKeys() for _, k := range keys { v, found, err := st.Get(PlacementRead, k) if err != nil { @@ -127,7 +130,7 @@ func placements(st States) (map[string]delivery.Placement, error) { } // runsOn is, by module, the nodes placement puts it on, sorted. -func runsOn(placed map[string]delivery.Placement) map[string][]string { +func runsOn(placed map[string]mesh.Placement) map[string][]string { out := map[string][]string{} for node, p := range placed { for _, m := range p.Modules { @@ -160,7 +163,7 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) { } sort.Strings(modules) for _, module := range modules { - key, err := delivery.ModulesKey(module) + key, err := catalogclient.ModulesKey(module) if err != nil { continue } @@ -171,11 +174,11 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) { } continue } - m, err := delivery.DecodeModule(raw) + m, err := catalogclient.DecodeModule(raw) if err != nil || m.Manifest == "" { continue } - mkey, err := delivery.ManifestsKey(m.Manifest) + mkey, err := catalogclient.ManifestsKey(m.Manifest) if err != nil { continue } @@ -186,7 +189,7 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) { } continue } - kept, err := delivery.DecodeManifest(raw) + kept, err := catalogclient.DecodeManifest(raw) if err != nil { problems = append(problems, fmt.Errorf("the manifest of %s: %w", module, err)) continue @@ -194,7 +197,7 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) { var man struct { Replaces map[string][]string `json:"replaces"` } - if json.Unmarshal([]byte(kept.JSON), &man) != nil || len(man.Replaces) == 0 { + if json.Unmarshal([]byte(kept.Manifest), &man) != nil || len(man.Replaces) == 0 { continue } out = append(out, ModuleTools{Module: module, On: on[module], Replaces: man.Replaces}) diff --git a/modules/claude-code/go.mod b/modules/claude-code/go.mod index ac591271f..8d7fe976b 100644 --- a/modules/claude-code/go.mod +++ b/modules/claude-code/go.mod @@ -5,6 +5,10 @@ go 1.26.0 require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261104174359-05b3e2e1b94f require ( + git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient v0.0.0-00010101000000-000000000000 + git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog v0.0.0-00010101000000-000000000000 + git.novox.be/novox/mesh-contracts/placement/go/clients/meshmoduleassignerclient v0.0.0-00010101000000-000000000000 + git.novox.be/novox/mesh-contracts/placement/go/seats/meshmoduleassigner v0.0.0-00010101000000-000000000000 git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshconditionsclient v0.0.0-00010101000000-000000000000 git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshhandactsclient v0.0.0-00010101000000-000000000000 git.novox.be/novox/mesh-contracts/operator-and-conversation/go/clients/operatorchannelclient v0.0.0-00010101000000-000000000000