-
Notifications
You must be signed in to change notification settings - Fork 2
fix(compose): archon-native 0.6.0 + drop broken archon from agents-stack + fix vector crash #2218
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -1461,31 +1461,32 @@ archon-submodule-extract: ## Extract Archon service to a submodule repo (set ARC | |||||||||
| up-archon-submodule: ## Build Archon from submodule (pmoves/integrations/archon) | ||||||||||
| @$(DC) up -d archon | ||||||||||
|
|
||||||||||
| # Native Archon: run Archon's OWN compose (server + mcp + frontend) against local | ||||||||||
| # Supabase, fed by pipeline-emitted env.shared. Replaces the broken hand-rolled | ||||||||||
| # archon*.submodule.yml wrapper. Frontend :3737, MCP :8051, server :8181. | ||||||||||
| # Native Archon 0.6.0: TS/SQLite-native, runs from its OWN compose + own env file. | ||||||||||
| # 0.6.0 upstream rewrote Python -> TypeScript and does NOT use Supabase — it uses | ||||||||||
| # SQLite by default (~/.archon), or its own Postgres via Archon's `--profile | ||||||||||
| # with-db`. The server self-allocates port 3090 and IGNORES the compose PORT (PORT | ||||||||||
| # is not injected into the container), so the published mapping must target 3090. | ||||||||||
| # Requires the operator to seed Archon's own env file from its example first (that | ||||||||||
| # file is secrets-domain and not machine-emitted by the PMOVES pipeline). | ||||||||||
| # See memory project_archon_060_native. Standalone for now; deeper main-compose | ||||||||||
| # integration is tracked as the "#5 Archon integration" follow-up. | ||||||||||
| ARCHON_NATIVE_DIR := $(CURDIR)/../PMOVES-Archon | ||||||||||
| # SUPABASE_URL is injected as a shell-env override scoped to THIS compose only | ||||||||||
| # (compose precedence: shell env > --env-file). It is deliberately absent from the | ||||||||||
| # global env.shared so it never clobbers the in-compose ${SUPABASE_URL:-http://supabase-kong:8000} | ||||||||||
| # default other services use (Codex #1984 P1). host.docker.internal reaches the | ||||||||||
| # host-published Kong gateway from Archon's standalone compose network. | ||||||||||
| ARCHON_NATIVE_SUPABASE_URL ?= http://host.docker.internal:8000 | ||||||||||
| ARCHON_NATIVE_DC := SUPABASE_URL=$(ARCHON_NATIVE_SUPABASE_URL) docker compose --env-file $(CURDIR)/env.shared \ | ||||||||||
| ARCHON_NATIVE_PORT ?= 3090 | ||||||||||
| ARCHON_NATIVE_DC := PORT=$(ARCHON_NATIVE_PORT) docker compose \ | ||||||||||
| --project-directory $(ARCHON_NATIVE_DIR) -f $(ARCHON_NATIVE_DIR)/docker-compose.yml | ||||||||||
|
Comment on lines
+1475
to
1476
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== locate files =="
git ls-files | rg '(^|/)Makefile$|ROADMAP\.md$|NEXT_STEPS\.md$|LOCAL_CI_CHECKS\.md$|\.env.*' | sed -n '1,120p'
echo
echo "== Makefile refs to ARCHON_NATIVE_DC / ARCHON_NATIVE_DIR =="
rg -n "ARCHON_NATIVE_(DC|DIR|PORT)|ARCHON_NATIVE_DC" -S --glob '!vendor/**' .
echo
echo "== pmoves/Makefile relevant lines =="
sed -n '1440,1500p' pmoves/Makefile
echo
echo "== shell word-splitting probe for Make variable expansion in rule commands =="
python3 - <<'PY'
import os
import shlex
paths = [
"/tmp/check out/pmoves",
"/tmp/check%20out/pmoves",
"/tmp/check+out/pmoves",
]
for path in paths:
cmd = f"PORT=8001 docker compose --project-directory {path} -f {path}/docker-compose.yml"
print("path:", path)
print("raw:", cmd)
print("shlex:", shlex.split(cmd))
print()
PY
echo
echo "== POSIX make rules are shell-escaped? check make docs availability =="
python3 - <<'PY'
from pathlib import Path
for fn in [Path(".phony-make-bounded"), Path("phony-make-bounded")]:
print(fn, fn.exists())
PYRepository: POWERFULMOVES/PMOVES.AI Length of output: 7712 🌐 Web query:
💡 Result: In GNU make, the interaction between shell command execution, variable expansion, and word splitting follows specific rules: Shell Function Output Processing When you use the $(shell...) function, GNU make captures the output of the command and performs only one specific transformation: it converts each newline or carriage-return/newline pair into a single space [1][2][3]. It does not perform shell-style word splitting or interpret quoted strings within the captured output itself [1]. If there is a trailing newline, it is removed [1][2]. Variable Expansion and Word Splitting GNU make handles variables as flat strings [4]. When a variable is expanded within a recipe (the command lines of a rule), it is substituted into the command line exactly as it exists in its expanded form [5]. Crucially, after expansion, GNU make does not automatically "re-split" the resulting string into words based on whitespace before passing it to the shell, except in the context of how the shell itself processes the command line [4]. When the recipe is executed, make passes the entire command line string to the shell [5]. It is the shell—not make—that is responsible for interpreting the command line, performing word splitting, and handling quoted strings according to standard POSIX shell rules [5][6]. Key Differences in Context 1. Recipes: Lines in a recipe are passed to the shell. You can use backslashes () at the end of lines to continue a single command across multiple lines in the makefile [5]. Inside the recipe, you can use shell quoting (single or double quotes) to group words that contain spaces or special characters, and the shell will respect these quotes during its own parsing phase [6]. 2. Citations:
Quote the native Archon Compose paths. When Proposed fix ARCHON_NATIVE_DC := PORT=$(ARCHON_NATIVE_PORT) docker compose \
- --project-directory $(ARCHON_NATIVE_DIR) -f $(ARCHON_NATIVE_DIR)/docker-compose.yml
+ --project-directory "$(ARCHON_NATIVE_DIR)" -f "$(ARCHON_NATIVE_DIR)/docker-compose.yml"📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||
|
|
||||||||||
| .PHONY: archon-native-config up-archon-native down-archon-native | ||||||||||
| # secrets-runtime-hydrate fills SUPABASE_SERVICE_KEY from the freshest canonical | ||||||||||
| # source (live Supabase container's SERVICE_ROLE_KEY) before Archon reads it. | ||||||||||
| archon-native-config: secrets-runtime-hydrate ## Render native Archon config + confirm Supabase env is populated | ||||||||||
| @$(ARCHON_NATIVE_DC) config 2>/dev/null | grep -E "SUPABASE_URL|SUPABASE_SERVICE_KEY" | sed -E 's/(KEY: ).{12}.*/\1<set>/' | sort -u | ||||||||||
|
|
||||||||||
| up-archon-native: secrets-runtime-hydrate ## Build+start native Archon (server+mcp+frontend) on local Supabase | ||||||||||
| @$(ARCHON_NATIVE_DC) up --build -d | ||||||||||
| .PHONY: up-archon-native down-archon-native archon-native-health | ||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Removing AGENTS.md reference: AGENTS.md:L81-L84 Useful? React with 👍 / 👎. |
||||||||||
| up-archon-native: ## Build+start native Archon 0.6.0 (TS/SQLite) standalone on :3090 | ||||||||||
| @test -f "$(ARCHON_NATIVE_DIR)/.env" || { echo "ERROR: Archon env file missing. Seed it first: cp $(ARCHON_NATIVE_DIR)/.env.example $(ARCHON_NATIVE_DIR)/.env"; exit 1; } | ||||||||||
| @$(ARCHON_NATIVE_DC) up --build -d app | ||||||||||
| @echo "✔ Archon 0.6.0 native starting → http://localhost:$(ARCHON_NATIVE_PORT)/api/health" | ||||||||||
|
|
||||||||||
| down-archon-native: ## Stop native Archon stack | ||||||||||
| @$(ARCHON_NATIVE_DC) down | ||||||||||
|
|
||||||||||
| archon-native-health: ## Check native Archon 0.6.0 health (:3090) | ||||||||||
| @curl -sf http://localhost:$(ARCHON_NATIVE_PORT)/api/health && echo " ✔ archon 0.6.0 healthy" || (echo "✗ archon unhealthy" && exit 1) | ||||||||||
|
|
||||||||||
| # -------- Consciousness Taxonomy Loaders ---------- | ||||||||||
| .PHONY: load-consciousness-neo4j harvest-consciousness | ||||||||||
|
|
||||||||||
|
|
@@ -2866,10 +2867,15 @@ ui-test-all: ## Run all UI tests (lint, typecheck, unit, E2E) | |||||||||
| up-jellyfin: | ||||||||||
| @$(DC) up -d jellyfin-bridge | ||||||||||
|
|
||||||||||
| # Bring up agents stack (NATS, Agent Zero, Archon, Mesh Agent) and publisher-discord | ||||||||||
| # Bring up agents stack (NATS, Agent Zero, Mesh Agent) and publisher-discord. | ||||||||||
| # NOTE: `archon` is intentionally omitted here — the in-compose `archon` service is | ||||||||||
| # the pre-0.6.0 Python wrapper (imports server.main), which the 0.6.0 TS rewrite | ||||||||||
| # broke (crash-loops). Archon 0.6.0 runs standalone via `make up-archon-native` | ||||||||||
| # (:3090). Re-integrating a first-class 0.6.0 archon service into this compose is | ||||||||||
| # the tracked "#5 Archon integration" follow-up. | ||||||||||
| .PHONY: up-agents up-agents-stack | ||||||||||
| up-agents-stack: ## Start Agents (NATS, Agent Zero, Archon, Cipher Memory, etc.) preferring submodule builds | ||||||||||
| @$(DC) --profile agents up -d nats agent-zero archon mesh-agent deepresearch publisher-discord cipher-api | ||||||||||
| up-agents-stack: ## Start Agents (NATS, Agent Zero, Cipher Memory, etc.); Archon runs via up-archon-native | ||||||||||
| @$(DC) --profile agents up -d nats agent-zero mesh-agent deepresearch publisher-discord cipher-api | ||||||||||
|
|
||||||||||
| .PHONY: up-notebooklm | ||||||||||
| up-notebooklm: ## Start the NotebookLM MCP agent (stdio MCP; reached via docker exec). Set GOOGLE_REFRESH_TOKEN in env.shared for live queries. | ||||||||||
|
|
||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -716,6 +716,14 @@ services: | |
| - supabase-local | ||
| environment: | ||
| - LOGFLARE_PUBLIC_ACCESS_TOKEN=${LOGFLARE_PUBLIC_ACCESS_TOKEN:-} | ||
| # Pass-through (no `=`) so these resolve to ABSENT from the host, overriding | ||
| # the empty-string values the supabase env files set. vector 0.28.1 fails to | ||
| # build its logflare proxy connector from an empty-string HTTP_PROXY ("Failed | ||
| # to build Proxy connector: empty string") and crash-loops; an ABSENT var is | ||
| # fine. (An `=` here would re-set the empty string and reintroduce the crash.) | ||
| - HTTP_PROXY | ||
| - HTTPS_PROXY | ||
| - NO_PROXY | ||
| volumes: | ||
| - supabase-vector-data:/var/lib/vector | ||
| - ../PMOVES-supabase/docker/volumes/logs/vector.yml:/etc/vector/vector.yml:ro | ||
|
|
@@ -961,10 +969,13 @@ services: | |
| - GLM_API_KEY=${GLM_API_KEY:-local-disabled} | ||
| - OPENAI_API_KEY=${OPENAI_API_KEY:-local-disabled} | ||
| - GROQ_API_KEY=${GROQ_API_KEY:-local-disabled} | ||
| # Kimi coding plan: canonical KIMI_CODING_API (manifest/tier key, | ||
| # 2026-07-24) feeds the gateway's legacy Moonshot env location; the old | ||
| # name still works as a direct fallback for nodes not yet re-funnelled. | ||
| - MOONSHOT_API_KEY=${KIMI_CODING_API:-${MOONSHOT_API_KEY:-local-disabled}} | ||
| - MOONSHOT_API_KEY=${MOONSHOT_API_KEY:-local-disabled} | ||
| # Kimi Code SUBSCRIPTION key (canonical manifest/tier name, 2026-07-24). | ||
| # Read by models.chat_kimi_for_coding on api.kimi.com/coding/v1 — the | ||
| # subscription platform is ISOLATED from pay-per-token api.moonshot.ai, | ||
| # so this key must NOT be funneled into the legacy Moonshot location | ||
| # (it 401s there; verified live). | ||
| - KIMI_CODING_API=${KIMI_CODING_API:-local-disabled} | ||
|
Comment on lines
+972
to
+978
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== candidate files =="
git ls-files | rg '(^|/)pmoves/(docs/ROADMAP\.md|docs/NEXT_STEPS\.md|docs/LOCAL_CI_CHECKS\.md|)docker-compose\.core\.yml|tensorzero\.toml|README|\.env|example|schema' | head -200
echo
echo "== referenced KIMI_CODING_API occurrences =="
rg -n "KIMI_CODING_API|Moonshot|moonshot|kimi|models\.chat_kimi_for_coding|local-disabled" pmoves -S || true
echo
echo "== relevant docker-compose section =="
sed -n '930,1005p' pmoves/docker-compose.core.yml
echo
echo "== tensorzero relevant section =="
sed -n '1,180p' pmoves/tensorzero.tomlRepository: POWERFULMOVES/PMOVES.AI Length of output: 48845 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== env.example sections with APIs =="
for f in pmoves/.env.example pmoves/.env.hybrid.example pmoves/.env.local.example pmoves/.env.supa.local.example pmoves/.env.supa.remote.example pm_moves/.env.example pmoves/env.spark-sidecar.example pmoves/env.shared.example; do
[ -f "$f" ] || continue
echo "--- $f ---"
rg -n -C 2 "^#? *(MOONSHOT_API_KEY|KIMI_API_KEY|KIMI_CODING_API) |local-disabled|Moonshot|KIMI|kimi" "$f" || true
done
echo
echo "== tensorzero model/function config =="
sed -n '180,255p' pmoves/tensorzero/config/tensorzero.toml
sed -n '890,965p' pmoves/tensorzero/config/tensorzero.toml
sed -n '1135,1155p' pmoves/tensorzero/config/tensorzero.toml
echo
echo "== existing compose tests referencing local-disabled or provider keys =="
git ls-files 'pmoves/tests/*' 'tests/*' | xargs rg -n "local-disabled|MOONSHOT_API_KEY|KIMI_CODING_API|KIMI_API_KEY|docker-compose|compose" || true
echo
echo "== secrets manifests for KIMI_CODING_API entries =="
sed -n '1,60p' pmoves/chit/secrets_manifest_v2.yaml
sed -n '920,950p' pmoves/chit/secrets_manifest_v2.yaml
echo
echo "== provider_catalog and profile references =="
sed -n '120,156p' pmoves/config/provider_catalog.yaml
sed -n '25,40p' pmoves/config/profiles/hermes/elder-melchor.yaml
sed -n '130,165p' pmoves/config/profiles/laptop-4090.yaml
echo
echo "== env shared around Moonshot/Kimi =="
sed -n '420,455p' pmoves/env.shared.exampleRepository: POWERFULMOVES/PMOVES.AI Length of output: 50379 Document
🤖 Prompt for AI AgentsSource: Coding guidelines |
||
| - OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-local-disabled} | ||
| - VENICE_API_KEY=${VENICE_API_KEY:-local-disabled} | ||
| - Z_AI_API_KEY=${Z_AI_API_KEY:-local-disabled} | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1094,6 +1094,14 @@ services: | |
| - supabase-local | ||
| environment: | ||
| - LOGFLARE_PUBLIC_ACCESS_TOKEN=${LOGFLARE_PUBLIC_ACCESS_TOKEN:-} | ||
| # Pass-through (no `=`) so these resolve to ABSENT from the host, overriding | ||
| # the empty-string values the supabase env files set. vector 0.28.1 fails to | ||
| # build its logflare proxy connector from an empty-string HTTP_PROXY ("Failed | ||
| # to build Proxy connector: empty string") and crash-loops; an ABSENT var is | ||
| # fine. (An `=` here would re-set the empty string and reintroduce the crash.) | ||
| - HTTP_PROXY | ||
| - HTTPS_PROXY | ||
| - NO_PROXY | ||
|
Comment on lines
+1102
to
+1104
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When Docker Compose is invoked from a host that defines Useful? React with 👍 / 👎. |
||
| volumes: | ||
| - supabase-vector-data:/var/lib/vector | ||
| - ../PMOVES-supabase/docker/volumes/logs/vector.yml:/etc/vector/vector.yml:ro | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
Repository: POWERFULMOVES/PMOVES.AI
Length of output: 50380
🌐 Web query:
coleam00 Archon 0.6.0 health endpoint JSON response version status ok💡 Result:
In the Archon project (coleam00/Archon), the health check endpoint is located at /api/health [1][2]. For modern versions of Archon, this endpoint returns a JSON object with a status of "ok" [3]. The schema for this response includes the following fields [2][4]: status: string (e.g., "ok") adapter: string concurrency: An object containing active, queuedTotal, and maxConcurrent counts [5][6] runningWorkflows: number version: string (optional) [2][7] is_docker: boolean [2][7] activePlatforms: An array of strings representing active adapters (optional) [2][4] The endpoint returns an HTTP 200 status code when the service is healthy [1]. Documentation and tests indicate that the /api/health endpoint is the primary method for verifying the service status [1][3]. Some legacy or simplified references may simply document expected output as {"status":"ok"} [8][3], but the full API implementation provides the more detailed object structure described above [2][4].
Citations:
🌐 Web query:
coleam00 Archon v0.6.0 docker-compose.yml PORT 3090💡 Result:
In the Archon v0.6.0 deployment and local development environments, port 3090 is the default port for the backend API, but it is typically not the default port when running via Docker Compose [1][2]. 1. Local Development vs. Docker: When running Archon locally (e.g., via bun run dev), the backend server uses port 3090 by default [1][3]. However, when running via Docker Compose, the default port is 3000 [4][1][5]. The Docker Compose configuration utilizes the environment variable PORT, defaulting to 3000 if not specified: ports: - "${PORT:-3000}:${PORT:-3000}" [6][4][5] 2. How to use Port 3090 in Docker: If you specifically need to use port 3090 within the Docker Compose environment, you can override the default by setting the PORT environment variable in your.env file or directly in your environment. You can add the following to your.env file: PORT=3090 Once this is set, running docker compose up will map the container's service to port 3090 on your host machine [4][5]. 3. Important Considerations: - Consistency: If you are using a frontend (like the Vite UI), ensure that the frontend's API URL configuration also points to the port you have assigned to the backend to avoid connectivity issues [7][2]. - Documentation: Always verify your specific setup by checking the.env.example file included in your version of the repository, as configuration defaults can evolve between releases [1][2].
Citations:
Enforce the native Archon contract end to end.
At
pmoves/Makefile:1464-1490, the native path relies on an unvalidated../PMOVES-Archoncheckout and assumes thePORT=3090Compose mapping is the deployed service port. Add a deterministic version/commit pin or preflight validation against../PMOVES-Archon/docker-compose.yml, and makearchon-native-healthparse thestatus/versionfields instead of treating HTTP 200 as enough.📍 Affects 1 file
pmoves/Makefile#L1464-L1476(this comment)pmoves/Makefile#L1487-L1488🤖 Prompt for AI Agents