pantheon-opencode 1.5.1 → 1.6.0-beta.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.
Files changed (62) hide show
  1. package/.pantheon/code-mode/README.md +4 -2
  2. package/.pantheon/code-mode/checkpoint_session.py +138 -102
  3. package/.pantheon/code-mode/compress-inline.py +102 -57
  4. package/.pantheon/code-mode/manifest.json +2 -8
  5. package/CHANGELOG.md +22 -0
  6. package/README.md +86 -52
  7. package/README.pt-BR.md +63 -43
  8. package/commands/pantheon-optimize.md +2 -2
  9. package/package.json +13 -1
  10. package/plugin.json +1 -1
  11. package/pyproject.toml +8 -15
  12. package/scripts/build-agents-md.mjs +2 -2
  13. package/scripts/check-plugin-v2-coverage.mjs +213 -0
  14. package/scripts/ci-validate-yaml.py +7 -5
  15. package/scripts/code_mode_server.py +116 -24
  16. package/scripts/doctor.mjs +85 -28
  17. package/scripts/install/cli-ui.mjs +1 -1
  18. package/scripts/install/config-migration.mjs +2 -2
  19. package/scripts/install/health-check.mjs +6 -19
  20. package/scripts/install/interactive.mjs +6 -6
  21. package/scripts/install/migrate.mjs +1 -1
  22. package/scripts/install/state.mjs +27 -2
  23. package/scripts/mcp_persistence_server.py +390 -76
  24. package/scripts/memory_mcp_server.py +370 -196
  25. package/scripts/postinstall.mjs +0 -7
  26. package/scripts/probe-context-rehydrate.mjs +28 -11
  27. package/scripts/prune.mjs +2 -2
  28. package/scripts/sync-tui.mjs +11 -5
  29. package/scripts/test-opencode-v2-sandbox.sh +1759 -0
  30. package/scripts/validate-routing.mjs +40 -0
  31. package/skills-lock.json +9 -10
  32. package/src/agents/mnemosyne.md +15 -16
  33. package/src/agents/zeus.md +1 -2
  34. package/src/mcp/code_mode_server.py +116 -24
  35. package/src/mcp/mcp_codemap_module.py +559 -129
  36. package/src/mcp/mcp_persistence_server.py +390 -76
  37. package/src/mcp/memory_mcp_server.py +371 -248
  38. package/src/mcp/pantheon_vision_server.py +136 -24
  39. package/src/mcp/requirements-mcp.txt +5 -3
  40. package/src/mcp/requirements-vision.txt +2 -0
  41. package/src/pantheon/model-command.ts +18 -7
  42. package/src/pantheon/todo-enforcer.ts +1 -1
  43. package/src/pantheon/vision.ts +1 -1
  44. package/src/plugin-v2.ts +134 -104
  45. package/src/plugins/tui/dist/tui.js +1 -1
  46. package/src/plugins/tui/package-lock.json +20 -20
  47. package/src/plugins/tui/package.json +12 -12
  48. package/src/routing.yml +0 -1
  49. package/src/skills/README.md +31 -36
  50. package/src/skills/auto-continue/SKILL.md +25 -75
  51. package/.pantheon/code-mode/eval-llm-judge.py +0 -255
  52. package/.pantheon/code-mode/eval-monte-carlo.py +0 -368
  53. package/.pantheon/code-mode/eval-run.py +0 -197
  54. package/.pantheon/code-mode/eval-static.py +0 -321
  55. package/.pantheon/code-mode/session-end-save.py +0 -186
  56. package/.pantheon/code-mode/session-end-save.sh +0 -18
  57. package/scripts/recover-zenodo-deposition.mjs +0 -146
  58. package/scripts/test-opencode-v1-v2-sandbox.sh +0 -862
  59. package/scripts/validate-zenodo-release.mjs +0 -154
  60. package/scripts/zenodo-artifact.mjs +0 -21
  61. package/scripts/zenodo-release-state.mjs +0 -53
  62. 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
- * V2 Plugin API surface (confirmed by investigation):
11
- * ctx.tool.transform / ctx.event.subscribe / ctx.session.hook /
12
- * ctx.tool.hook / ctx.permission.hook
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
- * When a V2 API domain is unavailable, the feature is gracefully skipped
15
- * and documented in V2_UNSUPPORTED_FEATURES. The plugin never breaks.
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 yet supported by the installed V2 plugin API.
40
- * Updated dynamically at setup time based on actual API availability.
41
- * Initialized with features known to be absent from the V2 promise API;
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[] = ['legacy-hooks']
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
- * SystemPart shape sniffing (beta 19192 `Schema validation failed` in
53
- * system[N]): host sends SystemPart objects ({type,text}) but pinned SDK
54
- * (@opencode-ai/plugin 1.18.18) only knows string/string[]. Detect at runtime.
55
- * Never throws (fail-open).
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
- function usesObjectShape(arr: unknown[]): boolean {
85
- try {
86
- return arr.some(
87
- (s) =>
88
- typeof s === 'object' && s !== null && typeof (s as { text?: unknown }).text === 'string',
89
- )
90
- } catch {
91
- return false
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
- function toSystemEntry(text: string, useObject: boolean): string | { type: 'text'; text: string } {
96
- return useObject ? { type: 'text', text } : text
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
- // Beta 19192 hardening + SystemPart sniffing: host may send string[],
457
- // SystemPart objects ({type,text}), mixed arrays, a single string, or
458
- // a non-array system. Preserve string-path behavior; inject object
459
- // shape when the array contains objects (else `Schema validation
460
- // failed` in system[N]). Never throw to the host (fail-open).
461
- const ctx = event as { system?: unknown } | null | undefined
462
- const rawSystem: unknown = ctx?.system
463
- if (typeof rawSystem === 'string' && ctx != null) {
464
- ctx.system = rawSystem.includes(POLICY_MARKER) ? [rawSystem] : [rawSystem, POLICY]
465
- } else if (Array.isArray(rawSystem)) {
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
- // Non-string, non-array system (or null event): ignore silently.
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 domain registers independently: a failure in one transform
703
- // (e.g. draft.list missing on beta 19192 → TypeError) must never
704
- // reject setup() nor prevent the other domains from registering.
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
- await compactionCtx.hook('compacting', (_event: unknown) => {
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')
@@ -165,7 +165,7 @@ async function detectVersion(api) {
165
165
  if (ver) return ver;
166
166
  }
167
167
  } catch {}
168
- return "1.5.1";
168
+ return "1.6.0-beta.1";
169
169
  }
170
170
  /**
171
171
  * usage-bar — AI subscription usage gauge for the opencode TUI.
@@ -1,32 +1,32 @@
1
1
  {
2
2
  "name": "pantheon-tui",
3
- "version": "1.5.1",
3
+ "version": "1.6.0-beta.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pantheon-tui",
9
- "version": "1.5.1",
9
+ "version": "1.6.0-beta.1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@opencode-ai/plugin": ">=1.14.0",
13
- "@opentui/core": ">=0.5.10",
14
- "@opentui/solid": ">=0.5.10",
15
- "solid-js": ">=1.9.12"
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": "^0.2.1",
19
- "tsdown": "^0.22.14"
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": ">=1.14.0",
26
- "@opencode-ai/sdk": ">=1.14.0",
27
- "@opentui/core": ">=0.5.10",
28
- "@opentui/solid": ">=0.5.10",
29
- "solid-js": ">=1.9.12"
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.7",
630
- "resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.18.7.tgz",
631
- "integrity": "sha512-kXm5hqur5JiF/xJPaQYkuNn7vSl4ya09YgL/pIvIrggWCLFsfo1gXqNbONRcGW7m5Ih2k6kgMXFyjB9or1+dEg==",
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.7",
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.7",
658
- "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.18.7.tgz",
659
- "integrity": "sha512-5txVELvCxzC3O/MYnRKdTvBN3TqQjE3PaEks3kDRA/moWzMSUhdm15xCth/Mz/NPYyGTn2u4IdScdV9vLTfLRg==",
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"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pantheon-tui",
3
3
  "type": "module",
4
- "version": "1.5.1",
4
+ "version": "1.6.0-beta.1",
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": ">=1.14.0",
24
- "@opencode-ai/sdk": ">=1.14.0",
25
- "@opentui/core": ">=0.5.10",
26
- "@opentui/solid": ">=0.5.10",
27
- "solid-js": ">=1.9.12"
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": "^0.2.1",
31
- "tsdown": "^0.22.14"
30
+ "rolldown-plugin-solid": "0.2.1",
31
+ "tsdown": "0.22.14"
32
32
  },
33
33
  "dependencies": {
34
- "@opencode-ai/plugin": ">=1.14.0",
35
- "@opentui/core": ">=0.5.10",
36
- "@opentui/solid": ">=0.5.10",
37
- "solid-js": ">=1.9.12"
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
@@ -134,7 +134,6 @@ agents:
134
134
  - artifact-management
135
135
  - context-compression
136
136
  - auto-continue
137
- - orchestration-workflow
138
137
  - incremental-implementation
139
138
  athena:
140
139
  role: Strategic planner
@@ -4,7 +4,7 @@
4
4
 
5
5
  Skills are reference modules loaded on demand by agents. Each skill provides domain-specific knowledge — architecture patterns, security checklists, optimization strategies, and implementation guides. Agents load skills when their task matches the skill's description, keeping context focused and token-efficient.
6
6
 
7
- There are **21 skills** divided into **5 domains**.
7
+ There are **20 skills** divided into **5 domains**.
8
8
 
9
9
  ## Skills by Domain
10
10
 
@@ -30,75 +30,71 @@ There are **21 skills** divided into **5 domains**.
30
30
  - Memory bank rules, structure, and optimization — complete guide to Pantheon memory management.
31
31
  - Used by: Mnemosyne, Athena
32
32
 
33
- 6. **orchestration-workflow** — `orchestration-workflow/SKILL.md`
34
- - Practical step-by-step walkthrough for orchestrating features end-to-end using the multi-agent system, from planning through deployment.
35
- - Used by: Zeus
36
-
37
- 7. **session-goal** — `session-goal/SKILL.md`
33
+ 6. **session-goal** — `session-goal/SKILL.md`
38
34
  - Pin session objectives to prevent scope creep across long multi-agent sessions.
39
35
  - Used by: Zeus, Mnemosyne
40
36
 
41
37
  ### Domain 2: Development Tools
42
38
 
43
- 8. **clonedeps** — `clonedeps/SKILL.md`
39
+ 7. **clonedeps** — `clonedeps/SKILL.md`
44
40
  - Clones dependency source locally so agents can inspect library internals, understand behavior, and debug integration issues.
45
41
  - Used by: Hermes, Hephaestus
46
42
 
47
- 9. **git-workflow-and-versioning** — `git-workflow-and-versioning/SKILL.md`
43
+ 8. **git-workflow-and-versioning** — `git-workflow-and-versioning/SKILL.md`
48
44
  - Atomic commits, conventional commits, trunk-based development workflow.
49
45
  - Used by: Hermes, Prometheus, Iris
50
46
 
51
- 10. **incremental-implementation** — `incremental-implementation/SKILL.md`
47
+ 9. **incremental-implementation** — `incremental-implementation/SKILL.md`
52
48
  - Implement in thin vertical slices — one commit per task, testable, rollback-safe.
53
49
  - Used by: Zeus, Hermes, Aphrodite, Demeter, Prometheus, Talos
54
50
 
55
- 11. **loop-engineering** — `loop-engineering/SKILL.md`
51
+ 10. **loop-engineering** — `loop-engineering/SKILL.md`
56
52
  - Iterative refinement pattern for complex problems — solve, review, improve, repeat in controlled cycles.
57
53
  - Used by: All agents
58
54
 
59
- 12. **reflect** — `reflect/SKILL.md`
55
+ 11. **reflect** — `reflect/SKILL.md`
60
56
  - Turns repeated workflow friction into reusable skills, agents, or configuration improvements.
61
57
  - Used by: All agents
62
58
 
63
- 13. **simplify** — `simplify/SKILL.md`
59
+ 12. **simplify** — `simplify/SKILL.md`
64
60
  - Behavior-preserving code simplification for readability, maintainability, and reduced complexity.
65
61
  - Used by: All agents
66
62
 
67
- 14. **worktrees** — `worktrees/SKILL.md`
63
+ 13. **worktrees** — `worktrees/SKILL.md`
68
64
  - Git worktrees as safe, isolated coding lanes for risky or parallel work without affecting the main workspace.
69
65
  - Used by: All agents
70
66
 
71
67
  ### Domain 3: Quality & Security
72
68
 
73
- 15. **code-review-checklist** — `code-review-checklist/SKILL.md`
69
+ 14. **code-review-checklist** — `code-review-checklist/SKILL.md`
74
70
  - Systematic code review with quality gates, security audit, and parallel checks for structured feedback.
75
71
  - Used by: Themis
76
72
 
77
- 16. **security-hardening** — `security-hardening/SKILL.md`
73
+ 15. **security-hardening** — `security-hardening/SKILL.md`
78
74
  - Security gate — OWASP, SAST, secrets detection, MCP hardening, dependency audit.
79
75
  - Used by: Themis, Nyx
80
76
 
81
- 17. **tdd-with-agents** — `tdd-with-agents/SKILL.md`
77
+ 16. **tdd-with-agents** — `tdd-with-agents/SKILL.md`
82
78
  - TDD enforcement with RED→GREEN→REFACTOR cycle and advanced testing patterns across all layers.
83
79
  - Used by: Hermes, Aphrodite, Demeter, Themis, Hephaestus
84
80
 
85
81
  ### Domain 4: Planning
86
82
 
87
- 18. **codemap** — `codemap/SKILL.md`
83
+ 17. **codemap** — `codemap/SKILL.md`
88
84
  - Generates hierarchical repository maps so agents understand codebase structure without re-reading every file.
89
85
  - Used by: Apollo, Zeus
90
86
 
91
- 19. **spec-driven-development** — `spec-driven-development/SKILL.md`
87
+ 18. **spec-driven-development** — `spec-driven-development/SKILL.md`
92
88
  - Define requirements via spec-first before any code — PRD, edge cases, acceptance criteria.
93
89
  - Used by: Athena
94
90
 
95
- 20. **verification-planning** — `verification-planning/SKILL.md`
91
+ 19. **verification-planning** — `verification-planning/SKILL.md`
96
92
  - Plans an evidence path before non-trivial changes, ensuring changes are testable and verifiable.
97
93
  - Used by: Athena, Zeus
98
94
 
99
95
  ### Domain 5: Frontend Development
100
96
 
101
- 21. **visual-review-pipeline** — `visual-review-pipeline/SKILL.md`
97
+ 20. **visual-review-pipeline** — `visual-review-pipeline/SKILL.md`
102
98
  - Automated visual review pipeline — Playwright screenshots, self-analysis, fix loop, escalation.
103
99
  - Used by: Aphrodite
104
100
 
@@ -130,22 +126,21 @@ The `SKILL.md` file contains YAML frontmatter with `name`, `description`, and pl
130
126
  | 3 | auto-continue | Orchestration & Workflow | Zeus, Apollo, Hephaestus, Nyx, Gaia |
131
127
  | 4 | context-compression | Orchestration & Workflow | Zeus, Mnemosyne, Themis |
132
128
  | 5 | memory-bank | Orchestration & Workflow | Mnemosyne, Athena |
133
- | 6 | orchestration-workflow | Orchestration & Workflow | Zeus |
134
- | 7 | session-goal | Orchestration & Workflow | Zeus, Mnemosyne |
135
- | 8 | clonedeps | Development Tools | Hermes, Hephaestus |
136
- | 9 | git-workflow-and-versioning | Development Tools | Hermes, Prometheus, Iris |
137
- | 10 | incremental-implementation | Development Tools | Zeus, Hermes, Aphrodite, Demeter, Prometheus, Talos |
138
- | 11 | loop-engineering | Development Tools | All agents |
139
- | 12 | reflect | Development Tools | All agents |
140
- | 13 | simplify | Development Tools | All agents |
141
- | 14 | worktrees | Development Tools | All agents |
142
- | 15 | code-review-checklist | Quality & Security | Themis |
143
- | 16 | security-hardening | Quality & Security | Themis, Nyx |
144
- | 17 | tdd-with-agents | Quality & Security | Hermes, Aphrodite, Demeter, Themis, Hephaestus |
145
- | 18 | codemap | Planning | Apollo, Zeus |
146
- | 19 | spec-driven-development | Planning | Athena |
147
- | 20 | verification-planning | Planning | Athena, Zeus |
148
- | 21 | visual-review-pipeline | Frontend Development | Aphrodite |
129
+ | 6 | session-goal | Orchestration & Workflow | Zeus, Mnemosyne |
130
+ | 7 | clonedeps | Development Tools | Hermes, Hephaestus |
131
+ | 8 | git-workflow-and-versioning | Development Tools | Hermes, Prometheus, Iris |
132
+ | 9 | incremental-implementation | Development Tools | Zeus, Hermes, Aphrodite, Demeter, Prometheus, Talos |
133
+ | 10 | loop-engineering | Development Tools | All agents |
134
+ | 11 | reflect | Development Tools | All agents |
135
+ | 12 | simplify | Development Tools | All agents |
136
+ | 13 | worktrees | Development Tools | All agents |
137
+ | 14 | code-review-checklist | Quality & Security | Themis |
138
+ | 15 | security-hardening | Quality & Security | Themis, Nyx |
139
+ | 16 | tdd-with-agents | Quality & Security | Hermes, Aphrodite, Demeter, Themis, Hephaestus |
140
+ | 17 | codemap | Planning | Apollo, Zeus |
141
+ | 18 | spec-driven-development | Planning | Athena |
142
+ | 19 | verification-planning | Planning | Athena, Zeus |
143
+ | 20 | visual-review-pipeline | Frontend Development | Aphrodite |
149
144
 
150
145
  ---
151
146