fix: narrow supported workspace runtime catalog
Block internal-flavored paths / Block forbidden paths (pull_request) Waiting to run
ci-arm64-advisory / fast-checks (pull_request) Waiting to run
CI / Detect changes (pull_request) Waiting to run
CI / Python Lint & Test (pull_request) Waiting to run
CI / all-required (pull_request) Waiting to run
E2E API Smoke Test / detect-changes (pull_request) Waiting to run
E2E Chat / detect-changes (pull_request) Waiting to run
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Waiting to run
Handlers Postgres Integration / detect-changes (pull_request) Waiting to run
Harness Replays / detect-changes (pull_request) Waiting to run
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Waiting to run
Lint no tenant GITEA or GITHUB token write / Scan for repo-host token write into tenant workspace surface (pull_request) Waiting to run
lint-required-no-paths / lint-required-no-paths (pull_request) Waiting to run
Secret scan / Scan diff for credential-shaped strings (pull_request) Waiting to run
gate-check-v3 / gate-check (pull_request) Waiting to run
qa-review / approved (pull_request) Waiting to run
security-review / approved (pull_request) Waiting to run
sop-checklist / all-items-acked (pull_request) Waiting to run
sop-checklist / review-refire (pull_request) Waiting to run
sop-tier-check / tier-check (pull_request) Waiting to run
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Successful in 10s
audit-force-merge / audit (pull_request) Successful in 17s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Has been cancelled
CI / Shellcheck (E2E scripts) (pull_request) Has been cancelled
CI / Platform (Go) (pull_request) Has been cancelled
CI / Canvas (Next.js) (pull_request) Has been cancelled
CI / Canvas Deploy Reminder (pull_request) Has been cancelled
E2E Chat / E2E Chat (pull_request) Has been cancelled
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Has been cancelled
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Has been cancelled
Harness Replays / Harness Replays (pull_request) Has been cancelled
Block internal-flavored paths / Block forbidden paths (pull_request) Waiting to run
ci-arm64-advisory / fast-checks (pull_request) Waiting to run
CI / Detect changes (pull_request) Waiting to run
CI / Python Lint & Test (pull_request) Waiting to run
CI / all-required (pull_request) Waiting to run
E2E API Smoke Test / detect-changes (pull_request) Waiting to run
E2E Chat / detect-changes (pull_request) Waiting to run
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Waiting to run
Handlers Postgres Integration / detect-changes (pull_request) Waiting to run
Harness Replays / detect-changes (pull_request) Waiting to run
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Waiting to run
Lint no tenant GITEA or GITHUB token write / Scan for repo-host token write into tenant workspace surface (pull_request) Waiting to run
lint-required-no-paths / lint-required-no-paths (pull_request) Waiting to run
Secret scan / Scan diff for credential-shaped strings (pull_request) Waiting to run
gate-check-v3 / gate-check (pull_request) Waiting to run
qa-review / approved (pull_request) Waiting to run
security-review / approved (pull_request) Waiting to run
sop-checklist / all-items-acked (pull_request) Waiting to run
sop-checklist / review-refire (pull_request) Waiting to run
sop-tier-check / tier-check (pull_request) Waiting to run
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Successful in 10s
audit-force-merge / audit (pull_request) Successful in 17s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Has been cancelled
CI / Shellcheck (E2E scripts) (pull_request) Has been cancelled
CI / Platform (Go) (pull_request) Has been cancelled
CI / Canvas (Next.js) (pull_request) Has been cancelled
CI / Canvas Deploy Reminder (pull_request) Has been cancelled
E2E Chat / E2E Chat (pull_request) Has been cancelled
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Has been cancelled
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Has been cancelled
Harness Replays / Harness Replays (pull_request) Has been cancelled
This commit is contained in:
+1
-3
@@ -28,9 +28,7 @@
|
|||||||
{"name": "claude-code-default", "repo": "molecule-ai/molecule-ai-workspace-template-claude-code", "ref": "main"},
|
{"name": "claude-code-default", "repo": "molecule-ai/molecule-ai-workspace-template-claude-code", "ref": "main"},
|
||||||
{"name": "hermes", "repo": "molecule-ai/molecule-ai-workspace-template-hermes", "ref": "main"},
|
{"name": "hermes", "repo": "molecule-ai/molecule-ai-workspace-template-hermes", "ref": "main"},
|
||||||
{"name": "openclaw", "repo": "molecule-ai/molecule-ai-workspace-template-openclaw", "ref": "main"},
|
{"name": "openclaw", "repo": "molecule-ai/molecule-ai-workspace-template-openclaw", "ref": "main"},
|
||||||
{"name": "codex", "repo": "molecule-ai/molecule-ai-workspace-template-codex", "ref": "main"},
|
{"name": "codex", "repo": "molecule-ai/molecule-ai-workspace-template-codex", "ref": "main"}
|
||||||
{"name": "langgraph", "repo": "molecule-ai/molecule-ai-workspace-template-langgraph", "ref": "main"},
|
|
||||||
{"name": "autogen", "repo": "molecule-ai/molecule-ai-workspace-template-autogen", "ref": "main"}
|
|
||||||
],
|
],
|
||||||
"org_templates": [
|
"org_templates": [
|
||||||
{"name": "molecule-dev", "repo": "molecule-ai/molecule-ai-org-template-molecule-dev", "ref": "main"},
|
{"name": "molecule-dev", "repo": "molecule-ai/molecule-ai-org-template-molecule-dev", "ref": "main"},
|
||||||
|
|||||||
@@ -44,8 +44,7 @@ func NewWorkspaceImageService(docker *dockerclient.Client) *WorkspaceImageServic
|
|||||||
// AllRuntimes is the canonical list mirroring docs/workspace-runtime-package.md.
|
// AllRuntimes is the canonical list mirroring docs/workspace-runtime-package.md.
|
||||||
// Update both when a new template is added.
|
// Update both when a new template is added.
|
||||||
var AllRuntimes = []string{
|
var AllRuntimes = []string{
|
||||||
"claude-code", "langgraph", "autogen",
|
"claude-code", "codex", "hermes", "openclaw",
|
||||||
"hermes", "openclaw",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RefreshResult is the per-call outcome surfaced to HTTP callers AND logged
|
// RefreshResult is the per-call outcome surfaced to HTTP callers AND logged
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func TestLoadRuntimesFromManifest_StripsDefaultSuffix(t *testing.T) {
|
|||||||
err := os.WriteFile(path, []byte(`{
|
err := os.WriteFile(path, []byte(`{
|
||||||
"workspace_templates": [
|
"workspace_templates": [
|
||||||
{"name": "claude-code-default", "repo": "org/t-cc"},
|
{"name": "claude-code-default", "repo": "org/t-cc"},
|
||||||
{"name": "langgraph", "repo": "org/t-lg"},
|
{"name": "codex", "repo": "org/t-codex"},
|
||||||
{"name": "hermes", "repo": "org/t-hermes"}
|
{"name": "hermes", "repo": "org/t-hermes"}
|
||||||
]
|
]
|
||||||
}`), 0600)
|
}`), 0600)
|
||||||
@@ -33,7 +33,7 @@ func TestLoadRuntimesFromManifest_StripsDefaultSuffix(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("load: %v", err)
|
t.Fatalf("load: %v", err)
|
||||||
}
|
}
|
||||||
want := []string{"claude-code", "langgraph", "hermes", "external", "kimi", "kimi-cli"}
|
want := []string{"claude-code", "codex", "hermes", "external", "kimi", "kimi-cli"}
|
||||||
for _, w := range want {
|
for _, w := range want {
|
||||||
if _, ok := got[w]; !ok {
|
if _, ok := got[w]; !ok {
|
||||||
t.Errorf("want runtime %q in set, missing. got=%v", w, keys(got))
|
t.Errorf("want runtime %q in set, missing. got=%v", w, keys(got))
|
||||||
@@ -53,7 +53,7 @@ func TestLoadRuntimesFromManifest_ExternalAlwaysInjected(t *testing.T) {
|
|||||||
// in the set, because it's the BYO-compute meta-runtime.
|
// in the set, because it's the BYO-compute meta-runtime.
|
||||||
dir := t.TempDir()
|
dir := t.TempDir()
|
||||||
path := filepath.Join(dir, "manifest.json")
|
path := filepath.Join(dir, "manifest.json")
|
||||||
_ = os.WriteFile(path, []byte(`{"workspace_templates":[{"name":"langgraph","repo":"org/t"}]}`), 0600)
|
_ = os.WriteFile(path, []byte(`{"workspace_templates":[{"name":"codex","repo":"org/t"}]}`), 0600)
|
||||||
|
|
||||||
got, err := loadRuntimesFromManifest(path)
|
got, err := loadRuntimesFromManifest(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -97,11 +97,16 @@ func TestRealManifestParses(t *testing.T) {
|
|||||||
t.Fatalf("real manifest load: %v", err)
|
t.Fatalf("real manifest load: %v", err)
|
||||||
}
|
}
|
||||||
// Core runtimes we always expect to ship.
|
// Core runtimes we always expect to ship.
|
||||||
for _, must := range []string{"langgraph", "hermes", "claude-code", "external", "kimi", "kimi-cli"} {
|
for _, must := range []string{"codex", "hermes", "openclaw", "claude-code", "external", "kimi", "kimi-cli"} {
|
||||||
if _, ok := got[must]; !ok {
|
if _, ok := got[must]; !ok {
|
||||||
t.Errorf("real manifest missing runtime %q — got=%v", must, keys(got))
|
t.Errorf("real manifest missing runtime %q — got=%v", must, keys(got))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for _, removed := range []string{"autogen", "langgraph"} {
|
||||||
|
if _, ok := got[removed]; ok {
|
||||||
|
t.Errorf("real manifest should not expose unsupported runtime %q — got=%v", removed, keys(got))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func keys(m map[string]struct{}) []string {
|
func keys(m map[string]struct{}) []string {
|
||||||
|
|||||||
@@ -203,6 +203,11 @@ func (h *TemplatesHandler) List(c *gin.Context) {
|
|||||||
log.Printf("templates list: skip %s: yaml.Unmarshal: %v", id, err)
|
log.Printf("templates list: skip %s: yaml.Unmarshal: %v", id, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
runtime := strings.TrimSuffix(strings.TrimSpace(raw.Runtime), "-default")
|
||||||
|
if _, ok := knownRuntimes[runtime]; !ok {
|
||||||
|
log.Printf("templates list: skip %s: unsupported runtime %q", id, raw.Runtime)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Model comes from either top-level (legacy) or runtime_config.model (current).
|
// Model comes from either top-level (legacy) or runtime_config.model (current).
|
||||||
model := raw.Model
|
model := raw.Model
|
||||||
|
|||||||
Reference in New Issue
Block a user