pantheon-opencode 1.1.1-beta.8 → 1.1.1

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/opencode.json CHANGED
@@ -2,9 +2,12 @@
2
2
  "$schema": "https://opencode.ai/config.json",
3
3
  "default_agent": "zeus",
4
4
  "subagent_depth": 2,
5
- "agent": {},
5
+ "model": "opencode-go/deepseek-v4-flash",
6
+ "small_model": "opencode-go/deepseek-v4-flash",
6
7
  "permission": {
7
- "skill": { "*": "allow" },
8
+ "skill": {
9
+ "*": "allow"
10
+ },
8
11
  "websearch": "deny",
9
12
  "bash": {
10
13
  "git *": "allow",
@@ -29,5 +32,49 @@
29
32
  "x-bf-vk": "sk-bf-a5a9b5b0-45fc-414d-8e4d-f9beb8c49a6d"
30
33
  }
31
34
  }
35
+ },
36
+ "agent": {
37
+ "athena": {
38
+ "model": "opencode-go/kimi-k3"
39
+ },
40
+ "themis": {
41
+ "model": "opencode-go/deepseek-v4-pro"
42
+ },
43
+ "zeus": {
44
+ "model": "opencode-go/deepseek-v4-pro"
45
+ },
46
+ "hephaestus": {
47
+ "model": "opencode-go/deepseek-v4-pro"
48
+ },
49
+ "hermes": {
50
+ "model": "opencode-go/deepseek-v4-flash"
51
+ },
52
+ "aphrodite": {
53
+ "model": "opencode-go/deepseek-v4-flash"
54
+ },
55
+ "demeter": {
56
+ "model": "opencode-go/deepseek-v4-flash"
57
+ },
58
+ "prometheus": {
59
+ "model": "opencode-go/deepseek-v4-flash"
60
+ },
61
+ "apollo": {
62
+ "model": "opencode-go/deepseek-v4-flash"
63
+ },
64
+ "nyx": {
65
+ "model": "opencode-go/deepseek-v4-flash"
66
+ },
67
+ "gaia": {
68
+ "model": "opencode-go/deepseek-v4-flash"
69
+ },
70
+ "iris": {
71
+ "model": "opencode-go/deepseek-v4-flash"
72
+ },
73
+ "mnemosyne": {
74
+ "model": "opencode-go/deepseek-v4-flash"
75
+ },
76
+ "talos": {
77
+ "model": "opencode-go/deepseek-v4-flash"
78
+ }
32
79
  }
33
80
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pantheon-opencode",
3
- "version": "1.1.1-beta.8",
3
+ "version": "1.1.1",
4
4
  "description": "Multi-agent orchestration for OpenCode — 14 specialized agents, TDD, Themis review gates.",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://pantheon.orchestrator/schema.json",
4
4
  "title": "Pantheon Configuration Schema",
5
- "description": "Configuration schema for Pantheon multi-agent orchestration platform",
5
+ "description": "Pantheon Orchestration Configuration Schema — NOT the OpenCode config schema. This schema defines Pantheon-specific configuration (routing, presets, fallback chains). For OpenCode config, see https://opencode.ai/config.json",
6
6
  "type": "object",
7
7
  "properties": {
8
8
  "version": {
@@ -171,11 +171,11 @@ const MCPS = {
171
171
  name: 'Pantheon Resources',
172
172
  description: 'Pantheon framework resources — agents, skills, routing, deepwork, memory bank',
173
173
  platforms: {
174
- opencode: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
175
- vscode: { type: 'stdio', command: 'python', args: ['scripts/mcp_resources_server.py'] },
176
- cursor: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
177
- claude: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
178
- windsurf: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
174
+ opencode: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
175
+ vscode: { type: 'stdio', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
176
+ cursor: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
177
+ claude: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
178
+ windsurf: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
179
179
  },
180
180
  env: [],
181
181
  validate: async () => {
@@ -191,11 +191,11 @@ const MCPS = {
191
191
  name: 'Pantheon Code Mode',
192
192
  description: 'Execute orchestration scripts from .pantheon/code-mode/ directory',
193
193
  platforms: {
194
- opencode: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
195
- vscode: { type: 'stdio', command: 'python', args: ['scripts/code_mode_server.py'] },
196
- cursor: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
197
- claude: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
198
- windsurf: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
194
+ opencode: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
195
+ vscode: { type: 'stdio', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
196
+ cursor: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
197
+ claude: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
198
+ windsurf: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
199
199
  },
200
200
  env: [],
201
201
  validate: async () => {
@@ -214,23 +214,23 @@ const MCPS = {
214
214
  platforms: {
215
215
  opencode: {
216
216
  type: 'local',
217
- command: '.venv/bin/python3',
218
- args: ['scripts/memory_mcp_server.py'],
217
+ command: join(ROOT, '.venv/bin/python3'),
218
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
219
219
  },
220
220
  claude: {
221
221
  type: 'local',
222
- command: '.venv/bin/python3',
223
- args: ['scripts/memory_mcp_server.py'],
222
+ command: join(ROOT, '.venv/bin/python3'),
223
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
224
224
  },
225
225
  cursor: {
226
226
  type: 'local',
227
- command: '.venv/bin/python3',
228
- args: ['scripts/memory_mcp_server.py'],
227
+ command: join(ROOT, '.venv/bin/python3'),
228
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
229
229
  },
230
230
  windsurf: {
231
231
  type: 'local',
232
- command: '.venv/bin/python3',
233
- args: ['scripts/memory_mcp_server.py'],
232
+ command: join(ROOT, '.venv/bin/python3'),
233
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
234
234
  },
235
235
  },
236
236
  env: [],
@@ -242,6 +242,42 @@ const MCPS = {
242
242
  return { ok: false, message: 'scripts/memory_mcp_server.py not found' }
243
243
  },
244
244
  },
245
+ 'pantheon-persistence': {
246
+ tier: 1,
247
+ name: 'Pantheon Persistence',
248
+ description:
249
+ 'Pantheon Persistence MCP Server — key-value store with FTS5 full-text search, TTL-based expiration, and namespace isolation',
250
+ platforms: {
251
+ opencode: {
252
+ type: 'local',
253
+ command: join(ROOT, '.venv/bin/python3'),
254
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
255
+ },
256
+ claude: {
257
+ type: 'local',
258
+ command: join(ROOT, '.venv/bin/python3'),
259
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
260
+ },
261
+ cursor: {
262
+ type: 'local',
263
+ command: join(ROOT, '.venv/bin/python3'),
264
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
265
+ },
266
+ windsurf: {
267
+ type: 'local',
268
+ command: join(ROOT, '.venv/bin/python3'),
269
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
270
+ },
271
+ },
272
+ env: [],
273
+ validate: async () => {
274
+ const scriptPath = join(ROOT, 'scripts', 'mcp_persistence_server.py')
275
+ if (existsSync(scriptPath)) {
276
+ return { ok: true, message: 'server script present' }
277
+ }
278
+ return { ok: false, message: 'scripts/mcp_persistence_server.py not found' }
279
+ },
280
+ },
245
281
  docker: {
246
282
  tier: 2,
247
283
  name: 'Docker MCP',
@@ -15,7 +15,7 @@ import argparse
15
15
  import re
16
16
  import sqlite3
17
17
  import sys
18
- from datetime import UTC, datetime, timedelta
18
+ from datetime import datetime, timedelta, timezone
19
19
  from pathlib import Path
20
20
 
21
21
  from _pantheon_paths import pantheon_home, pantheon_project
@@ -148,7 +148,7 @@ def _write_deletelog(db_path: Path, count: int, keys: list[str]) -> None:
148
148
  log_path = db_path.with_name(db_path.name + ".deletelog")
149
149
  _rotate_deletelog(log_path)
150
150
 
151
- timestamp = datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%SZ")
151
+ timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
152
152
  keys_str = ",".join(keys)
153
153
  with open(log_path, "a", encoding="utf-8") as f:
154
154
  f.write(f"[{timestamp}] PURGED={count} KEYS=[{keys_str}]\n")
@@ -208,7 +208,7 @@ async def kv_store(
208
208
  conn = _db(scope)
209
209
  expires_at: str | None = None
210
210
  if ttl is not None:
211
- expires_at = (datetime.now(UTC) + timedelta(seconds=ttl)).isoformat()
211
+ expires_at = (datetime.now(timezone.utc) + timedelta(seconds=ttl)).isoformat()
212
212
 
213
213
  conn.execute(
214
214
  "INSERT INTO kv_store (namespace, key, value, expires_at, "
@@ -34,9 +34,17 @@ permission:
34
34
  bash: deny
35
35
  read: allow
36
36
  grep: allow
37
- edit: allow
37
+ edit: deny
38
38
  ---
39
39
 
40
+ ## ⚠️ SCOPE BOUNDARY
41
+
42
+ **Memory Bank ONLY — NEVER write files outside `.pantheon/memory-bank/` or `.pantheon/deepwork/`.**
43
+ Your role is documentation, ADRs, artifacts, and memory management.
44
+
45
+ NEVER modify source code files under `src/`, `backend/`, `frontend/`, `scripts/`, or any other implementation directory.
46
+ If asked to edit code, refuse and redirect to the appropriate implementation agent (@hermes, @aphrodite, @demeter, etc.).
47
+
40
48
  ## Core Capabilities
41
49
 
42
50
  ### 1. Memory Bank Management
package/src/agents/nyx.md CHANGED
@@ -8,7 +8,7 @@ permission:
8
8
  grep: allow
9
9
  bash: allow
10
10
  webfetch: allow
11
- edit: ask
11
+ edit: deny
12
12
  temperature: 0.1
13
13
  steps: 25
14
14
  skills:
@@ -20,6 +20,12 @@ mcp_tools:
20
20
  pantheon-code-mode: [execute_code_script]
21
21
  ---
22
22
 
23
+ ## ⚠️ ABSOLUTE CONSTRAINT
24
+
25
+ **ANALYSIS ONLY — NEVER implement, never edit files, never write code.**
26
+ Your role is to observe, trace, and report. If you identify a configuration change needed, report the finding — do not implement it yourself.
27
+ Delegate all implementation to @hermes, @prometheus, or @demeter.
28
+
23
29
  ## Core Capabilities
24
30
 
25
31
  ### 1. OpenTelemetry Integration
@@ -7,7 +7,7 @@ permission:
7
7
  read: allow
8
8
  grep: allow
9
9
  bash: allow
10
- edit: ask
10
+ edit: deny
11
11
  temperature: 0.1
12
12
  steps: 30
13
13
  skills:
@@ -20,8 +20,14 @@ mcp_tools:
20
20
  pantheon-memory: [memory_search]
21
21
  pantheon-code-mode: [execute_code_script]
22
22
  ---
23
- ## Purpose
24
23
 
24
+ ## ⚠️ ABSOLUTE CONSTRAINT
25
+
26
+ **REVIEWER ONLY — NEVER implement, never edit files, never write code.**
27
+ Your role is to audit, review, and block. If you find an issue, report it — do not fix it yourself.
28
+ Delegate all implementation to @hermes, @aphrodite, @demeter, or @prometheus.
29
+
30
+ ## Purpose
25
31
  Quality & security gate for all Pantheon agents. Three-layer review with IntentGate to ensure code matches requirements before deep review.
26
32
 
27
33
  ## IntentGate
@@ -50,6 +50,16 @@ skills:
50
50
 
51
51
  **Auto-continue** só com pedido explícito do usuário.
52
52
 
53
+ ## ⚠️ Bash Scoping
54
+
55
+ **`bash: allow` é para leitura e diagnóstico APENAS.**
56
+ NUNCA use bash para:
57
+ - Editar arquivos (use sed/echo/redirect → delegue para @hermes)
58
+ - Instalar dependências (delegue para @prometheus)
59
+ - Executar comandos que modificam o sistema
60
+
61
+ Comandos permitidos: `ls`, `git status`, `git log`, `ps`, `python3 -c`, `cat` (leitura), `npm test` (para verificar).
62
+
53
63
  ---
54
64
 
55
65
  ## Delegation Cache (Otimizacao de Tokens)
@@ -171,11 +171,11 @@ const MCPS = {
171
171
  name: 'Pantheon Resources',
172
172
  description: 'Pantheon framework resources — agents, skills, routing, deepwork, memory bank',
173
173
  platforms: {
174
- opencode: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
175
- vscode: { type: 'stdio', command: 'python', args: ['scripts/mcp_resources_server.py'] },
176
- cursor: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
177
- claude: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
178
- windsurf: { type: 'local', command: 'python', args: ['scripts/mcp_resources_server.py'] },
174
+ opencode: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
175
+ vscode: { type: 'stdio', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
176
+ cursor: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
177
+ claude: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
178
+ windsurf: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/mcp_resources_server.py')] },
179
179
  },
180
180
  env: [],
181
181
  validate: async () => {
@@ -191,11 +191,11 @@ const MCPS = {
191
191
  name: 'Pantheon Code Mode',
192
192
  description: 'Execute orchestration scripts from .pantheon/code-mode/ directory',
193
193
  platforms: {
194
- opencode: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
195
- vscode: { type: 'stdio', command: 'python', args: ['scripts/code_mode_server.py'] },
196
- cursor: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
197
- claude: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
198
- windsurf: { type: 'local', command: 'python', args: ['scripts/code_mode_server.py'] },
194
+ opencode: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
195
+ vscode: { type: 'stdio', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
196
+ cursor: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
197
+ claude: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
198
+ windsurf: { type: 'local', command: join(ROOT, '.venv/bin/python3'), args: [join(ROOT, 'scripts/code_mode_server.py')] },
199
199
  },
200
200
  env: [],
201
201
  validate: async () => {
@@ -214,23 +214,23 @@ const MCPS = {
214
214
  platforms: {
215
215
  opencode: {
216
216
  type: 'local',
217
- command: '.venv/bin/python3',
218
- args: ['scripts/memory_mcp_server.py'],
217
+ command: join(ROOT, '.venv/bin/python3'),
218
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
219
219
  },
220
220
  claude: {
221
221
  type: 'local',
222
- command: '.venv/bin/python3',
223
- args: ['scripts/memory_mcp_server.py'],
222
+ command: join(ROOT, '.venv/bin/python3'),
223
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
224
224
  },
225
225
  cursor: {
226
226
  type: 'local',
227
- command: '.venv/bin/python3',
228
- args: ['scripts/memory_mcp_server.py'],
227
+ command: join(ROOT, '.venv/bin/python3'),
228
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
229
229
  },
230
230
  windsurf: {
231
231
  type: 'local',
232
- command: '.venv/bin/python3',
233
- args: ['scripts/memory_mcp_server.py'],
232
+ command: join(ROOT, '.venv/bin/python3'),
233
+ args: [join(ROOT, 'scripts/memory_mcp_server.py')],
234
234
  },
235
235
  },
236
236
  env: [],
@@ -242,6 +242,42 @@ const MCPS = {
242
242
  return { ok: false, message: 'scripts/memory_mcp_server.py not found' }
243
243
  },
244
244
  },
245
+ 'pantheon-persistence': {
246
+ tier: 1,
247
+ name: 'Pantheon Persistence',
248
+ description:
249
+ 'Pantheon Persistence MCP Server — key-value store with FTS5 full-text search, TTL-based expiration, and namespace isolation',
250
+ platforms: {
251
+ opencode: {
252
+ type: 'local',
253
+ command: join(ROOT, '.venv/bin/python3'),
254
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
255
+ },
256
+ claude: {
257
+ type: 'local',
258
+ command: join(ROOT, '.venv/bin/python3'),
259
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
260
+ },
261
+ cursor: {
262
+ type: 'local',
263
+ command: join(ROOT, '.venv/bin/python3'),
264
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
265
+ },
266
+ windsurf: {
267
+ type: 'local',
268
+ command: join(ROOT, '.venv/bin/python3'),
269
+ args: [join(ROOT, 'scripts/mcp_persistence_server.py')],
270
+ },
271
+ },
272
+ env: [],
273
+ validate: async () => {
274
+ const scriptPath = join(ROOT, 'scripts', 'mcp_persistence_server.py')
275
+ if (existsSync(scriptPath)) {
276
+ return { ok: true, message: 'server script present' }
277
+ }
278
+ return { ok: false, message: 'scripts/mcp_persistence_server.py not found' }
279
+ },
280
+ },
245
281
  docker: {
246
282
  tier: 2,
247
283
  name: 'Docker MCP',
@@ -14,7 +14,7 @@ import argparse
14
14
  import re
15
15
  import sqlite3
16
16
  import sys
17
- from datetime import UTC, datetime, timedelta
17
+ from datetime import datetime, timedelta, timezone
18
18
  from pathlib import Path
19
19
 
20
20
  from _pantheon_paths import pantheon_home, pantheon_project
@@ -147,7 +147,7 @@ def _write_deletelog(db_path: Path, count: int, keys: list[str]) -> None:
147
147
  log_path = db_path.with_name(db_path.name + ".deletelog")
148
148
  _rotate_deletelog(log_path)
149
149
 
150
- timestamp = datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%SZ")
150
+ timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
151
151
  keys_str = ",".join(keys)
152
152
  with open(log_path, "a", encoding="utf-8") as f:
153
153
  f.write(f"[{timestamp}] PURGED={count} KEYS=[{keys_str}]\n")
@@ -207,7 +207,7 @@ async def kv_store(
207
207
  conn = _db(scope)
208
208
  expires_at: str | None = None
209
209
  if ttl is not None:
210
- expires_at = (datetime.now(UTC) + timedelta(seconds=ttl)).isoformat()
210
+ expires_at = (datetime.now(timezone.utc) + timedelta(seconds=ttl)).isoformat()
211
211
 
212
212
  conn.execute(
213
213
  "INSERT INTO kv_store (namespace, key, value, expires_at, "
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":";;cAmTM,QAAQ;EAAoB"}
1
+ {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":";;cAsbM,QAAQ;EAAoB"}