First step toward `molecule connect <id>` — the out-of-box external- runtime workspace connector specified in RFC #10. What's in this PR (foundational, ~300 LOC of code + matching tests): - `internal/backends.Backend` — the seam every concrete handler implements: HandleA2A(ctx, Request) → Response, Close(). Two methods, no inheritance, no surprise side effects. Concurrency-safe by contract (poll dispatch may parallelise). - Request/Response/Part/Config types — lossless JSON-RPC mirror so backends can re-issue downstream without re-parsing. - Compile-time registry — `Register("name", factory)` from each backend's init(); `Build(name, cfg)` selects at runtime. Panics on duplicate registration so drift fails loudly at startup, not on first message. - `mock` backend — single-template echo for CI smoke + tests + demos. `--backend-opt reply="<template>"` with `%s` for inbound text. - `molecule connect <workspace-id>` cobra command — flag surface, validation, --dry-run for smoke. Loops (heartbeat, activity poll, dispatch) land in M1.2 in internal/connect/. Coverage: - Registry: duplicate-name panic, empty-name panic, nil-factory panic, Build unknown-name error includes registered list. - Mock: default template, custom template, text-part concatenation, Final=true on terminal response. - Connect: --backend-opt KEY=VALUE parser (incl. value with =), flag validation (missing token, bad mode, bad opt, unknown backend), --dry-run happy path. All tests pass under -race. Out of scope (subsequent M1 PRs): - M1.2: heartbeat + activity poll loops in internal/connect/ - M1.3: claude-code backend (wraps molecule-mcp-claude-channel) - M1.4: GoReleaser tag-triggered release.yml workflow RFC: https://github.com/Molecule-AI/molecule-cli/issues/10 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
974 B
Modula-2
29 lines
974 B
Modula-2
module github.com/Molecule-AI/molecule-cli
|
|
|
|
go 1.25.0
|
|
|
|
require (
|
|
github.com/spf13/cobra v1.10.2
|
|
github.com/spf13/viper v1.21.0
|
|
gopkg.in/yaml.v3 v3.0.1
|
|
)
|
|
|
|
require (
|
|
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
|
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
|
|
github.com/google/go-cmp v0.7.0 // indirect
|
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
|
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
|
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
|
github.com/sagikazarmark/locafero v0.11.0 // indirect
|
|
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
|
|
github.com/spf13/afero v1.15.0 // indirect
|
|
github.com/spf13/cast v1.10.0 // indirect
|
|
github.com/spf13/pflag v1.0.10 // indirect
|
|
github.com/subosito/gotenv v1.6.0 // indirect
|
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
|
golang.org/x/sys v0.41.0 // indirect
|
|
golang.org/x/text v0.28.0 // indirect
|
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
|
)
|