pantheon-opencode 1.5.2 → 1.6.0-beta.2
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/.pantheon/code-mode/README.md +4 -2
- package/.pantheon/code-mode/checkpoint_session.py +138 -102
- package/.pantheon/code-mode/compress-inline.py +102 -57
- package/.pantheon/code-mode/manifest.json +2 -8
- package/CHANGELOG.md +59 -0
- package/README.md +115 -55
- package/README.pt-BR.md +86 -43
- package/commands/pantheon-optimize.md +2 -2
- package/package.json +13 -1
- package/plugin.json +1 -1
- package/pyproject.toml +8 -15
- package/scripts/build-agents-md.mjs +2 -2
- package/scripts/check-plugin-v2-coverage.mjs +213 -0
- package/scripts/ci-validate-yaml.py +7 -5
- package/scripts/code_mode_server.py +116 -24
- package/scripts/doctor.mjs +85 -28
- package/scripts/install/cli-ui.mjs +1 -1
- package/scripts/install/config-migration.mjs +124 -3
- package/scripts/install/health-check.mjs +6 -19
- package/scripts/install/interactive.mjs +6 -6
- package/scripts/install/migrate.mjs +1 -1
- package/scripts/install/opencode.mjs +43 -10
- package/scripts/mcp_persistence_server.py +390 -76
- package/scripts/memory_mcp_server.py +370 -196
- package/scripts/postinstall.mjs +0 -7
- package/scripts/probe-context-rehydrate.mjs +28 -11
- package/scripts/prune.mjs +2 -2
- package/scripts/test-opencode-v2-sandbox.sh +1759 -0
- package/scripts/validate-routing.mjs +40 -0
- package/skills-lock.json +9 -10
- package/src/agents/aphrodite.md +0 -1
- package/src/agents/apollo.md +0 -1
- package/src/agents/athena.md +0 -1
- package/src/agents/demeter.md +0 -1
- package/src/agents/gaia.md +0 -1
- package/src/agents/hephaestus.md +0 -1
- package/src/agents/hermes.md +0 -1
- package/src/agents/iris.md +0 -1
- package/src/agents/mnemosyne.md +15 -17
- package/src/agents/nyx.md +0 -1
- package/src/agents/prometheus.md +0 -1
- package/src/agents/talos.md +0 -1
- package/src/agents/themis.md +0 -1
- package/src/agents/zeus.md +1 -3
- package/src/mcp/code_mode_server.py +116 -24
- package/src/mcp/mcp_codemap_module.py +559 -129
- package/src/mcp/mcp_persistence_server.py +390 -76
- package/src/mcp/memory_mcp_server.py +371 -248
- package/src/mcp/pantheon_vision_server.py +136 -24
- package/src/mcp/requirements-mcp.txt +5 -3
- package/src/mcp/requirements-vision.txt +2 -0
- package/src/pantheon/model-command.ts +18 -7
- package/src/pantheon/presets.d.mts +0 -8
- package/src/pantheon/presets.mjs +0 -29
- package/src/pantheon/todo-enforcer.ts +1 -1
- package/src/pantheon/vision.ts +1 -1
- package/src/plugin-v2.ts +134 -104
- package/src/plugins/tui/dist/tui.js +1 -1
- package/src/plugins/tui/package-lock.json +23 -23
- package/src/plugins/tui/package.json +12 -12
- package/src/routing.yml +0 -16
- package/src/skills/README.md +31 -36
- package/src/skills/auto-continue/SKILL.md +27 -77
- package/.pantheon/code-mode/eval-llm-judge.py +0 -255
- package/.pantheon/code-mode/eval-monte-carlo.py +0 -368
- package/.pantheon/code-mode/eval-run.py +0 -197
- package/.pantheon/code-mode/eval-static.py +0 -321
- package/.pantheon/code-mode/session-end-save.py +0 -186
- package/.pantheon/code-mode/session-end-save.sh +0 -18
- package/scripts/recover-zenodo-deposition.mjs +0 -146
- package/scripts/test-opencode-v1-v2-sandbox.sh +0 -862
- package/scripts/validate-zenodo-release.mjs +0 -154
- package/scripts/zenodo-artifact.mjs +0 -94
- package/scripts/zenodo-release-state.mjs +0 -53
- package/src/skills/orchestration-workflow/SKILL.md +0 -311
package/src/plugin-v2.ts
CHANGED
|
@@ -4,27 +4,38 @@
|
|
|
4
4
|
* Registers:
|
|
5
5
|
* - 6 orchestration tools via V2 tool.transform (with V1 bridge fallback)
|
|
6
6
|
* - 4 event subscriptions (session.created, idle, error, compacted)
|
|
7
|
-
* - Session hooks (prompt, context) and tool hooks (execute.before/after)
|
|
7
|
+
* - Session hooks (prompt, context, compaction) and tool hooks (execute.before/after)
|
|
8
8
|
* - Permission hooks for custom authorization
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* ctx.
|
|
12
|
-
* ctx.tool.
|
|
10
|
+
* The transitional SDK types used here expose these domains:
|
|
11
|
+
* ctx.agent / ctx.command / ctx.model / ctx.reference / ctx.skill /
|
|
12
|
+
* ctx.tool / ctx.event / ctx.permission / ctx.session
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* A separate OpenCode 2.0.18 host runtime probe confirmed ctx.integration and
|
|
15
|
+
* ctx.skill have callable `.transform` methods; only ctx.catalog was absent.
|
|
16
|
+
* The probe's callback effects were
|
|
17
|
+
* not observed for any domain. This runtime probe is not an SDK compatibility
|
|
18
|
+
* claim. Pantheon's Phase 1/config transform
|
|
19
|
+
* registrations cover agent, command, and reference; `ctx.tool.transform` is
|
|
20
|
+
* attempted separately in Phase 2. Integration and skill transform callbacks
|
|
21
|
+
* are not registered by Pantheon, so their effects remain unproven. The
|
|
22
|
+
* narrower `SkillEditor.source()` helper is absent from the inspected SDK
|
|
23
|
+
* editor shape, so directory-source registration remains unsupported; that
|
|
24
|
+
* does not imply that `ctx.skill` or its transform is absent.
|
|
25
|
+
*
|
|
26
|
+
* V2_UNSUPPORTED_FEATURES distinguishes adapter limitations from observed
|
|
27
|
+
* host-absent APIs; setup handles optional registrations on a best-effort basis.
|
|
16
28
|
*
|
|
17
29
|
* @module plugin-v2
|
|
18
30
|
*/
|
|
19
31
|
|
|
32
|
+
import { appendFileSync } from 'node:fs'
|
|
20
33
|
import { fileURLToPath } from 'node:url'
|
|
21
34
|
import type {
|
|
22
35
|
AgentDraft,
|
|
23
|
-
CatalogDraft,
|
|
24
36
|
CommandDraft,
|
|
25
37
|
PluginContext,
|
|
26
38
|
ReferenceDraft,
|
|
27
|
-
SkillDraft,
|
|
28
39
|
} from '@opencode-ai/plugin/v2/promise'
|
|
29
40
|
import { define } from '@opencode-ai/plugin/v2/promise'
|
|
30
41
|
import {
|
|
@@ -36,34 +47,53 @@ import {
|
|
|
36
47
|
// ─── Unsupported Features Registry ───────────────────────────────────────
|
|
37
48
|
|
|
38
49
|
/**
|
|
39
|
-
* Features not
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* additional features are appended during setup if their API is missing.
|
|
50
|
+
* Features not implemented by the current Pantheon V2 adapter or absent from
|
|
51
|
+
* the observed host. A listed feature is not necessarily a host-absent API.
|
|
52
|
+
* Additional features are appended during setup when a required API is missing.
|
|
43
53
|
*/
|
|
44
|
-
export const V2_UNSUPPORTED_FEATURES: string[] = [
|
|
54
|
+
export const V2_UNSUPPORTED_FEATURES: string[] = [
|
|
55
|
+
'legacy-hooks',
|
|
56
|
+
// `catalog` alone was absent in the OpenCode 2.0.18 runtime probe.
|
|
57
|
+
'catalog-transform',
|
|
58
|
+
// The host exposes callable transforms for integration and skill, but
|
|
59
|
+
// Pantheon does not register/use them and no host callback effects were
|
|
60
|
+
// observed. These entries describe adapter support, not host availability.
|
|
61
|
+
'integration-transform',
|
|
62
|
+
// The inspected SkillEditor shape has no `source()` helper for adding a
|
|
63
|
+
// directory source. This is narrower than (and distinct from) ctx.skill's
|
|
64
|
+
// host availability or callable transform.
|
|
65
|
+
'skill-transform',
|
|
66
|
+
]
|
|
45
67
|
|
|
46
68
|
// ─── Constants ───────────────────────────────────────────────────────────
|
|
47
69
|
|
|
48
70
|
const POLICY_MARKER = '<!-- pantheon-v2-policy -->'
|
|
49
71
|
const POLICY = `${POLICY_MARKER}\nFollow Pantheon routing policy: delegate implementation work to the named specialist and do not claim work was performed without verification.`
|
|
50
72
|
|
|
73
|
+
/** 2.0.16 `system` on a session hook payload is `Array<SystemPart>`. */
|
|
74
|
+
interface SystemPart {
|
|
75
|
+
type: 'text'
|
|
76
|
+
text: string
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function isTextPart(entry: unknown): entry is SystemPart {
|
|
80
|
+
return (
|
|
81
|
+
typeof entry === 'object' &&
|
|
82
|
+
entry !== null &&
|
|
83
|
+
typeof (entry as { text?: unknown }).text === 'string'
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
51
87
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* Never throws
|
|
88
|
+
* Extract text from a `system` entry. The host's own coercion accepts a bare
|
|
89
|
+
* string, but the canonical 2.0.16 shape is `{ type: 'text', text }`; the
|
|
90
|
+
* string branch is retained so the handler still works against a host that
|
|
91
|
+
* sends primitives. Never throws.
|
|
56
92
|
*/
|
|
57
93
|
function systemEntryText(entry: unknown): string | null {
|
|
58
94
|
try {
|
|
59
95
|
if (typeof entry === 'string') return entry
|
|
60
|
-
if (
|
|
61
|
-
typeof entry === 'object' &&
|
|
62
|
-
entry !== null &&
|
|
63
|
-
typeof (entry as { text?: unknown }).text === 'string'
|
|
64
|
-
) {
|
|
65
|
-
return (entry as { text: string }).text
|
|
66
|
-
}
|
|
96
|
+
if (isTextPart(entry)) return entry.text
|
|
67
97
|
return null
|
|
68
98
|
} catch {
|
|
69
99
|
return null
|
|
@@ -81,19 +111,30 @@ function hasPolicyMarker(arr: unknown[]): boolean {
|
|
|
81
111
|
}
|
|
82
112
|
}
|
|
83
113
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Normalize a `system` value to the 2.0.16 `Array<SystemPart>` shape.
|
|
116
|
+
*
|
|
117
|
+
* `SessionContext.system` is `Array<SystemPart>` where a part is
|
|
118
|
+
* `{ type: 'text', text }`. A raw string (the whole value, or an element) is
|
|
119
|
+
* not that shape, so it is upgraded: element strings become parts, and a bare
|
|
120
|
+
* string value becomes a one-element part array. Non-array, non-string values
|
|
121
|
+
* are returned unchanged.
|
|
122
|
+
*
|
|
123
|
+
* Returns the normalized array, or `null` when `system` is neither a string
|
|
124
|
+
* nor an array (nothing to normalize).
|
|
125
|
+
*/
|
|
126
|
+
function normalizeSystemToParts(system: unknown): unknown[] | null {
|
|
127
|
+
if (typeof system === 'string') {
|
|
128
|
+
return [{ type: 'text', text: system } satisfies SystemPart]
|
|
92
129
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
130
|
+
if (!Array.isArray(system)) return null
|
|
131
|
+
for (let i = 0; i < system.length; i++) {
|
|
132
|
+
const entry = system[i]
|
|
133
|
+
if (typeof entry === 'string') {
|
|
134
|
+
system[i] = { type: 'text', text: entry } satisfies SystemPart
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return system
|
|
97
138
|
}
|
|
98
139
|
|
|
99
140
|
/**
|
|
@@ -191,16 +232,6 @@ function transformAgents(draft: AgentDraft): void {
|
|
|
191
232
|
}
|
|
192
233
|
}
|
|
193
234
|
|
|
194
|
-
function transformCatalog(draft: CatalogDraft, options: PluginContext['options']): void {
|
|
195
|
-
const configured = options.default_model
|
|
196
|
-
if (typeof configured !== 'string') return
|
|
197
|
-
const separator = configured.indexOf('/')
|
|
198
|
-
if (separator <= 0 || separator === configured.length - 1) return
|
|
199
|
-
const providerID = configured.slice(0, separator)
|
|
200
|
-
const modelID = configured.slice(separator + 1)
|
|
201
|
-
if (draft.model.get(providerID, modelID)) draft.model.default.set(providerID, modelID)
|
|
202
|
-
}
|
|
203
|
-
|
|
204
235
|
function transformCommands(draft: CommandDraft): void {
|
|
205
236
|
// Beta 19192 guard (issue #92): draft may not have `list`, or list()
|
|
206
237
|
// may return a non-iterable. Never throw — mark unsupported and return.
|
|
@@ -237,41 +268,6 @@ function transformCommands(draft: CommandDraft): void {
|
|
|
237
268
|
}
|
|
238
269
|
}
|
|
239
270
|
|
|
240
|
-
function transformSkills(draft: SkillDraft): void {
|
|
241
|
-
// Beta 19192 guard (issue #92): draft may not have `list`, or list()
|
|
242
|
-
// may return a non-iterable. Never throw — mark unsupported and return.
|
|
243
|
-
let sources: Array<{ type: string; path: string }>
|
|
244
|
-
try {
|
|
245
|
-
const maybeList = (draft as unknown as { list?: unknown }).list
|
|
246
|
-
if (typeof maybeList !== 'function') {
|
|
247
|
-
markUnsupported('skill-transform-list')
|
|
248
|
-
return
|
|
249
|
-
}
|
|
250
|
-
const result = (maybeList as (this: unknown) => unknown).call(draft)
|
|
251
|
-
if (
|
|
252
|
-
result == null ||
|
|
253
|
-
typeof (result as { [Symbol.iterator]?: unknown })[Symbol.iterator] !== 'function'
|
|
254
|
-
) {
|
|
255
|
-
markUnsupported('skill-transform-list')
|
|
256
|
-
return
|
|
257
|
-
}
|
|
258
|
-
sources = Array.isArray(result)
|
|
259
|
-
? (result as Array<{ type: string; path: string }>)
|
|
260
|
-
: Array.from(result as Iterable<{ type: string; path: string }>)
|
|
261
|
-
} catch {
|
|
262
|
-
markUnsupported('skill-transform-list')
|
|
263
|
-
return
|
|
264
|
-
}
|
|
265
|
-
try {
|
|
266
|
-
const path = fileURLToPath(new URL('./skills', import.meta.url))
|
|
267
|
-
if (!sources.some((source) => source.type === 'directory' && source.path === path)) {
|
|
268
|
-
draft.source({ type: 'directory', path })
|
|
269
|
-
}
|
|
270
|
-
} catch {
|
|
271
|
-
markUnsupported('skill-transform')
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
271
|
function transformReferences(draft: ReferenceDraft): void {
|
|
276
272
|
draft.add('pantheon-agents', {
|
|
277
273
|
type: 'local',
|
|
@@ -453,21 +449,32 @@ async function registerV2SessionHooks(context: PluginContext): Promise<boolean>
|
|
|
453
449
|
// "context" hook — inject routing policy + compaction state
|
|
454
450
|
await sessionCtx.hook('context', (event: unknown) => {
|
|
455
451
|
try {
|
|
456
|
-
//
|
|
457
|
-
//
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
if (!hasPolicyMarker(rawSystem)) {
|
|
467
|
-
rawSystem.push(toSystemEntry(POLICY, usesObjectShape(rawSystem)))
|
|
452
|
+
// Opt-in lifetime proof for the host-backed hook canary (MODE=real).
|
|
453
|
+
// Inert unless PANTHEON_HOOK_CANARY_LIFETIME_PROOF is set.
|
|
454
|
+
if (process.env.PANTHEON_HOOK_CANARY_LIFETIME_PROOF) {
|
|
455
|
+
try {
|
|
456
|
+
appendFileSync(
|
|
457
|
+
process.env.PANTHEON_HOOK_CANARY_LIFETIME_PROOF,
|
|
458
|
+
'plugin-v2:session.hook:context\n',
|
|
459
|
+
)
|
|
460
|
+
} catch {
|
|
461
|
+
// Best-effort instrumentation.
|
|
468
462
|
}
|
|
469
463
|
}
|
|
470
|
-
//
|
|
464
|
+
// 2.0.16 payload is `{ system: Array<SystemPart> }`. Normalize any
|
|
465
|
+
// string entries to `{ type: 'text', text }` parts and append the
|
|
466
|
+
// policy as a part. Junk entries are ignored; a non-array,
|
|
467
|
+
// non-string system is left untouched. Never throws (fail-open).
|
|
468
|
+
const ctx = event as { system?: unknown } | null | undefined
|
|
469
|
+
if (ctx == null) return
|
|
470
|
+
const normalized = normalizeSystemToParts(ctx.system)
|
|
471
|
+
if (normalized == null) return
|
|
472
|
+
// A bare string is replaced by its part array; an array is mutated in
|
|
473
|
+
// place (the host may read the original reference).
|
|
474
|
+
if (typeof ctx.system === 'string') ctx.system = normalized
|
|
475
|
+
if (!hasPolicyMarker(normalized)) {
|
|
476
|
+
normalized.push({ type: 'text', text: POLICY } satisfies SystemPart)
|
|
477
|
+
}
|
|
471
478
|
} catch {
|
|
472
479
|
// Fail-open: never throw to the host.
|
|
473
480
|
}
|
|
@@ -699,17 +706,19 @@ export const plugin = define({
|
|
|
699
706
|
|
|
700
707
|
async setup(context: PluginContext): Promise<void> {
|
|
701
708
|
// ─── Phase 1: V2 Transforms (isolated per-domain, best-effort) ────
|
|
702
|
-
// Each
|
|
703
|
-
//
|
|
704
|
-
// reject setup()
|
|
709
|
+
// Each transform registration is individually wrapped and settled via Promise.allSettled:
|
|
710
|
+
// a rejection marks only that transform unsupported
|
|
711
|
+
// and does not reject setup() or prevent later hook registrations.
|
|
705
712
|
// See issue #92.
|
|
713
|
+
//
|
|
714
|
+
// Pantheon's Phase 1/config transform registrations cover agent, command,
|
|
715
|
+
// and reference; ctx.tool.transform is attempted separately in Phase 2.
|
|
716
|
+
// The 2.0.18 runtime probe found ctx.integration and ctx.skill with
|
|
717
|
+
// callable transforms, but no callback effects were observed; neither is
|
|
718
|
+
// registered here. Only ctx.catalog was absent in that probe.
|
|
719
|
+
// The hook canary tests hook firing only, not transform callback effects.
|
|
706
720
|
const phase1Transforms: Array<{ feature: string; register: () => Promise<unknown> }> = [
|
|
707
721
|
{ feature: 'agent-transform', register: () => context.agent.transform(transformAgents) },
|
|
708
|
-
{
|
|
709
|
-
feature: 'catalog-transform',
|
|
710
|
-
register: () =>
|
|
711
|
-
context.catalog.transform((draft) => transformCatalog(draft, context.options)),
|
|
712
|
-
},
|
|
713
722
|
{
|
|
714
723
|
feature: 'command-transform',
|
|
715
724
|
register: () => context.command.transform(transformCommands),
|
|
@@ -718,7 +727,6 @@ export const plugin = define({
|
|
|
718
727
|
feature: 'reference-transform',
|
|
719
728
|
register: () => context.reference.transform(transformReferences),
|
|
720
729
|
},
|
|
721
|
-
{ feature: 'skill-transform', register: () => context.skill.transform(transformSkills) },
|
|
722
730
|
]
|
|
723
731
|
const phase1Results = await Promise.allSettled(
|
|
724
732
|
phase1Transforms.map((t) => Promise.resolve().then(() => t.register())),
|
|
@@ -771,9 +779,31 @@ export const plugin = define({
|
|
|
771
779
|
| undefined
|
|
772
780
|
if (compactionCtx?.hook) {
|
|
773
781
|
try {
|
|
774
|
-
|
|
782
|
+
// 2.0.16 `SessionHooks` key is `compaction` (the migration doc maps
|
|
783
|
+
// `experimental.session.compacting` → `ctx.session.hook("compaction")`).
|
|
784
|
+
// `compacting` is not a valid key: the registry accepts any string and
|
|
785
|
+
// silently drops unknown names, so the old name was a permanent no-op.
|
|
786
|
+
// Proven by the canary's negative control.
|
|
787
|
+
await compactionCtx.hook('compaction', (_event: unknown) => {
|
|
775
788
|
// Compaction context build — injects active goals, pending todos,
|
|
776
789
|
// and in-flight delegations. Wired through V1 infrastructure.
|
|
790
|
+
//
|
|
791
|
+
// Opt-in lifetime proof for the host-backed hook canary
|
|
792
|
+
// (tests/pantheon/plugin-v2-hook-canary.test.mjs, MODE=real). It is
|
|
793
|
+
// inert unless PANTHEON_HOOK_CANARY_LIFETIME_PROOF is set, so
|
|
794
|
+
// production behaviour is unchanged. This exists because a rename to
|
|
795
|
+
// `compacting` was a silent no-op for an unknown length of time: the
|
|
796
|
+
// canary can now observe that THIS registration fired.
|
|
797
|
+
if (process.env.PANTHEON_HOOK_CANARY_LIFETIME_PROOF) {
|
|
798
|
+
try {
|
|
799
|
+
appendFileSync(
|
|
800
|
+
process.env.PANTHEON_HOOK_CANARY_LIFETIME_PROOF,
|
|
801
|
+
'plugin-v2:session.hook:compaction\n',
|
|
802
|
+
)
|
|
803
|
+
} catch {
|
|
804
|
+
// Proof is best-effort: never let instrumentation break the host.
|
|
805
|
+
}
|
|
806
|
+
}
|
|
777
807
|
})
|
|
778
808
|
} catch {
|
|
779
809
|
markUnsupported('compaction-hook')
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pantheon-tui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0-beta.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pantheon-tui",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.6.0-beta.2",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@opencode-ai/plugin": "
|
|
13
|
-
"@opentui/core": "
|
|
14
|
-
"@opentui/solid": "
|
|
15
|
-
"solid-js": "
|
|
12
|
+
"@opencode-ai/plugin": "1.18.30",
|
|
13
|
+
"@opentui/core": "0.5.10",
|
|
14
|
+
"@opentui/solid": "0.5.10",
|
|
15
|
+
"solid-js": "1.9.12"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"rolldown-plugin-solid": "
|
|
19
|
-
"tsdown": "
|
|
18
|
+
"rolldown-plugin-solid": "0.2.1",
|
|
19
|
+
"tsdown": "0.22.14"
|
|
20
20
|
},
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": "^22.22.2 || ^24.15.0 || >=26.0.0"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@opencode-ai/plugin": "
|
|
26
|
-
"@opencode-ai/sdk": "
|
|
27
|
-
"@opentui/core": "
|
|
28
|
-
"@opentui/solid": "
|
|
29
|
-
"solid-js": "
|
|
25
|
+
"@opencode-ai/plugin": "1.18.30",
|
|
26
|
+
"@opencode-ai/sdk": "1.18.30",
|
|
27
|
+
"@opentui/core": "0.5.10",
|
|
28
|
+
"@opentui/solid": "0.5.10",
|
|
29
|
+
"solid-js": "1.9.12"
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
"node_modules/@ai-sdk/provider": {
|
|
@@ -626,13 +626,13 @@
|
|
|
626
626
|
}
|
|
627
627
|
},
|
|
628
628
|
"node_modules/@opencode-ai/plugin": {
|
|
629
|
-
"version": "1.18.
|
|
630
|
-
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.18.
|
|
631
|
-
"integrity": "sha512-
|
|
629
|
+
"version": "1.18.30",
|
|
630
|
+
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.18.30.tgz",
|
|
631
|
+
"integrity": "sha512-bXWcA2VD478PXXke1qAYANTq58fCcbgY0GAUqZIFZqPpo48FoG8RH37nNZ78eHtz+ddiKIhFTBZJRaHF3IgFqw==",
|
|
632
632
|
"license": "MIT",
|
|
633
633
|
"dependencies": {
|
|
634
634
|
"@ai-sdk/provider": "3.0.8",
|
|
635
|
-
"@opencode-ai/sdk": "1.18.
|
|
635
|
+
"@opencode-ai/sdk": "1.18.30",
|
|
636
636
|
"effect": "4.0.0-beta.83",
|
|
637
637
|
"zod": "4.1.8"
|
|
638
638
|
},
|
|
@@ -654,9 +654,9 @@
|
|
|
654
654
|
}
|
|
655
655
|
},
|
|
656
656
|
"node_modules/@opencode-ai/sdk": {
|
|
657
|
-
"version": "1.18.
|
|
658
|
-
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.18.
|
|
659
|
-
"integrity": "sha512-
|
|
657
|
+
"version": "1.18.30",
|
|
658
|
+
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.18.30.tgz",
|
|
659
|
+
"integrity": "sha512-uviJ+PZLc/D1szt33WGzzt/rqJ+IaNmRGBb+UcOXrcQANl8XXKJrp4CNQQ2UAnUJ3Ek+VqcamIwjtKHUW/OjOQ==",
|
|
660
660
|
"license": "MIT",
|
|
661
661
|
"dependencies": {
|
|
662
662
|
"cross-spawn": "7.0.6"
|
|
@@ -1529,9 +1529,9 @@
|
|
|
1529
1529
|
}
|
|
1530
1530
|
},
|
|
1531
1531
|
"node_modules/brace-expansion": {
|
|
1532
|
-
"version": "2.1.
|
|
1533
|
-
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.
|
|
1534
|
-
"integrity": "sha512-
|
|
1532
|
+
"version": "2.1.7",
|
|
1533
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz",
|
|
1534
|
+
"integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==",
|
|
1535
1535
|
"license": "MIT",
|
|
1536
1536
|
"dependencies": {
|
|
1537
1537
|
"balanced-match": "^1.0.0"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pantheon-tui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.6.0-beta.2",
|
|
5
5
|
"description": "Pantheon TUI plugin — sidebar (version, preset, sessions, real-time delegations) + AI subscription usage gauges incl. OpenCode Go/Zen dollar limits (vendored, MIT)",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
@@ -20,20 +20,20 @@
|
|
|
20
20
|
"typecheck": "tsc --noEmit"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"@opencode-ai/plugin": "
|
|
24
|
-
"@opencode-ai/sdk": "
|
|
25
|
-
"@opentui/core": "
|
|
26
|
-
"@opentui/solid": "
|
|
27
|
-
"solid-js": "
|
|
23
|
+
"@opencode-ai/plugin": "1.18.30",
|
|
24
|
+
"@opencode-ai/sdk": "1.18.30",
|
|
25
|
+
"@opentui/core": "0.5.10",
|
|
26
|
+
"@opentui/solid": "0.5.10",
|
|
27
|
+
"solid-js": "1.9.12"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"rolldown-plugin-solid": "
|
|
31
|
-
"tsdown": "
|
|
30
|
+
"rolldown-plugin-solid": "0.2.1",
|
|
31
|
+
"tsdown": "0.22.14"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@opencode-ai/plugin": "
|
|
35
|
-
"@opentui/core": "
|
|
36
|
-
"@opentui/solid": "
|
|
37
|
-
"solid-js": "
|
|
34
|
+
"@opencode-ai/plugin": "1.18.30",
|
|
35
|
+
"@opentui/core": "0.5.10",
|
|
36
|
+
"@opentui/solid": "0.5.10",
|
|
37
|
+
"solid-js": "1.9.12"
|
|
38
38
|
}
|
|
39
39
|
}
|
package/src/routing.yml
CHANGED
|
@@ -99,7 +99,6 @@ presets:
|
|
|
99
99
|
agents:
|
|
100
100
|
zeus:
|
|
101
101
|
role: Central orchestrator
|
|
102
|
-
max_steps: 40 # R4: step budget — at max_steps the agent is forced to summarize-and-stop. Tracker is permanent-per-process (no reset wiring).
|
|
103
102
|
reasoning_effort: medium
|
|
104
103
|
user_invocable: true
|
|
105
104
|
can_delegate: true
|
|
@@ -134,11 +133,9 @@ agents:
|
|
|
134
133
|
- artifact-management
|
|
135
134
|
- context-compression
|
|
136
135
|
- auto-continue
|
|
137
|
-
- orchestration-workflow
|
|
138
136
|
- incremental-implementation
|
|
139
137
|
athena:
|
|
140
138
|
role: Strategic planner
|
|
141
|
-
max_steps: 15 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
142
139
|
reasoning_effort: high
|
|
143
140
|
user_invocable: true
|
|
144
141
|
can_delegate: true
|
|
@@ -158,7 +155,6 @@ agents:
|
|
|
158
155
|
- memory-bank
|
|
159
156
|
apollo:
|
|
160
157
|
role: Investigation scout
|
|
161
|
-
max_steps: 25 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
162
158
|
reasoning_effort: low
|
|
163
159
|
user_invocable: false
|
|
164
160
|
can_delegate: false
|
|
@@ -176,7 +172,6 @@ agents:
|
|
|
176
172
|
- auto-continue
|
|
177
173
|
hermes:
|
|
178
174
|
role: Backend specialist
|
|
179
|
-
max_steps: 60 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
180
175
|
reasoning_effort: medium
|
|
181
176
|
user_invocable: true
|
|
182
177
|
can_delegate: true
|
|
@@ -199,7 +194,6 @@ agents:
|
|
|
199
194
|
- incremental-implementation
|
|
200
195
|
aphrodite:
|
|
201
196
|
role: Frontend specialist
|
|
202
|
-
max_steps: 60 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
203
197
|
reasoning_effort: medium
|
|
204
198
|
user_invocable: true
|
|
205
199
|
can_delegate: false
|
|
@@ -220,7 +214,6 @@ agents:
|
|
|
220
214
|
- file-prompts
|
|
221
215
|
demeter:
|
|
222
216
|
role: Database specialist
|
|
223
|
-
max_steps: 50 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
224
217
|
reasoning_effort: medium
|
|
225
218
|
user_invocable: true
|
|
226
219
|
can_delegate: false
|
|
@@ -240,7 +233,6 @@ agents:
|
|
|
240
233
|
- incremental-implementation
|
|
241
234
|
themis:
|
|
242
235
|
role: Quality gate
|
|
243
|
-
max_steps: 25 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
244
236
|
reasoning_effort: high
|
|
245
237
|
user_invocable: true
|
|
246
238
|
can_delegate: false
|
|
@@ -262,7 +254,6 @@ agents:
|
|
|
262
254
|
- context-compression
|
|
263
255
|
prometheus:
|
|
264
256
|
role: Infrastructure specialist
|
|
265
|
-
max_steps: 30 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
266
257
|
reasoning_effort: medium
|
|
267
258
|
user_invocable: true
|
|
268
259
|
can_delegate: false
|
|
@@ -281,7 +272,6 @@ agents:
|
|
|
281
272
|
- incremental-implementation
|
|
282
273
|
hephaestus:
|
|
283
274
|
role: AI pipelines
|
|
284
|
-
max_steps: 50 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
285
275
|
reasoning_effort: medium
|
|
286
276
|
user_invocable: true
|
|
287
277
|
can_delegate: false
|
|
@@ -300,7 +290,6 @@ agents:
|
|
|
300
290
|
- auto-continue
|
|
301
291
|
nyx:
|
|
302
292
|
role: Observability
|
|
303
|
-
max_steps: 25 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
304
293
|
reasoning_effort: low
|
|
305
294
|
user_invocable: true
|
|
306
295
|
can_delegate: false
|
|
@@ -319,7 +308,6 @@ agents:
|
|
|
319
308
|
- auto-continue
|
|
320
309
|
gaia:
|
|
321
310
|
role: Remote sensing domain specialist
|
|
322
|
-
max_steps: 25 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
323
311
|
reasoning_effort: low
|
|
324
312
|
user_invocable: false
|
|
325
313
|
can_delegate: false
|
|
@@ -334,7 +322,6 @@ agents:
|
|
|
334
322
|
- auto-continue
|
|
335
323
|
iris:
|
|
336
324
|
role: GitHub operations
|
|
337
|
-
max_steps: 20 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
338
325
|
reasoning_effort: low
|
|
339
326
|
user_invocable: true
|
|
340
327
|
can_delegate: false
|
|
@@ -352,7 +339,6 @@ agents:
|
|
|
352
339
|
- artifact-management
|
|
353
340
|
mnemosyne:
|
|
354
341
|
role: Memory bank
|
|
355
|
-
max_steps: 20 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
356
342
|
reasoning_effort: low
|
|
357
343
|
user_invocable: true
|
|
358
344
|
can_delegate: false
|
|
@@ -376,7 +362,6 @@ agents:
|
|
|
376
362
|
- session-goal
|
|
377
363
|
talos:
|
|
378
364
|
role: Hotfix agent
|
|
379
|
-
max_steps: 15 # R4: step budget — at max_steps the agent is forced to summarize-and-stop
|
|
380
365
|
reasoning_effort: low
|
|
381
366
|
user_invocable: true
|
|
382
367
|
can_delegate: false
|
|
@@ -530,7 +515,6 @@ background_job_board:
|
|
|
530
515
|
background_delegation:
|
|
531
516
|
timeout_ms: 900000 # 15 min
|
|
532
517
|
poll_ms: 250
|
|
533
|
-
max_compaction_items: 10
|
|
534
518
|
prune_ttl_ms: 86400000 # 24h
|
|
535
519
|
read_only_agents: [apollo, gaia]
|
|
536
520
|
session_max: 3
|