pantheon-opencode 1.0.0 → 1.0.6
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/README.md +61 -109
- package/bin/pantheon-init.mjs +57 -136
- package/commands/pantheon-audit.md +1 -1
- package/commands/pantheon-deepwork.md +32 -81
- package/commands/pantheon-reflect.md +16 -0
- package/commands/pantheon-status.md +1 -1
- package/commands/pantheon-verify.md +17 -0
- package/opencode.json +25 -0
- package/package.json +24 -13
- package/scripts/ci-validate-yaml.py +19 -0
- package/scripts/doctor.mjs +10 -65
- package/scripts/install/opencode.mjs +69 -6
- package/scripts/install/shared.mjs +39 -13
- package/scripts/manifest.mjs +5 -30
- package/scripts/postinstall.mjs +47 -0
- package/scripts/release-bundle.mjs +2 -2
- package/scripts/uninstall.mjs +5 -5
- package/scripts/validate-routing.mjs +19 -16
- package/scripts/versioning.mjs +12 -1
- package/skills-lock.json +9 -2
- package/src/agents/aphrodite.md +15 -57
- package/src/agents/apollo.md +9 -48
- package/src/agents/athena.md +17 -54
- package/src/agents/demeter.md +10 -47
- package/src/agents/gaia.md +7 -40
- package/src/agents/hephaestus.md +9 -52
- package/src/agents/hermes.md +17 -52
- package/src/agents/iris.md +8 -45
- package/src/agents/mnemosyne.md +12 -47
- package/src/agents/nyx.md +8 -45
- package/src/agents/prometheus.md +11 -49
- package/src/agents/talos.md +6 -45
- package/src/agents/themis.md +10 -35
- package/src/agents/zeus.md +5 -7
- package/src/mcp/mcp_resources_server.py +2 -0
- package/src/plugins/tui/dist/tui.tsx +203 -93
- package/src/plugins/tui/src/index.tsx +203 -93
- package/src/routing.yml +33 -93
- package/src/skills/clonedeps/SKILL.md +45 -0
- package/src/skills/codemap/SKILL.md +47 -0
- package/src/skills/loop-engineering/SKILL.md +51 -0
- package/src/skills/reflect/SKILL.md +49 -0
- package/src/skills/simplify/SKILL.md +39 -0
- package/src/skills/verification-planning/SKILL.md +52 -0
- package/src/skills/worktrees/SKILL.md +43 -0
- package/commands/pantheon-bg.md +0 -10
- package/commands/pantheon-consolidate.md +0 -11
- package/commands/pantheon-doc.md +0 -10
- package/commands/pantheon-hash.md +0 -11
- package/commands/pantheon-todo.md +0 -11
- package/docs/AGENT-MCP.md +0 -194
- package/docs/ARCHITECTURE.md +0 -384
- package/docs/BRANCH-PROTECTION.md +0 -142
- package/docs/INDEX.md +0 -81
- package/docs/INSTALLATION.md +0 -217
- package/docs/MCP.md +0 -238
- package/docs/MEMORY.md +0 -471
- package/docs/MIGRATION-MEMORY-BANK.md +0 -139
- package/docs/PLATFORMS.md +0 -5
- package/docs/QUICKSTART.md +0 -49
- package/docs/README.md +0 -18
- package/docs/RELEASING.md +0 -256
- package/docs/SETUP.md +0 -5
- package/docs/UPGRADING.md +0 -41
- package/docs/mcp-recommendations.md +0 -439
- package/docs/mcp-tools.md +0 -156
- package/docs/mcp-user-guide.md +0 -204
- package/docs/persistence-mcp.md +0 -111
- package/scripts/init-pantheon-mcp.sh +0 -118
- package/scripts/install.mjs +0 -26
- package/src/instructions/documentation-standards.instructions.md +0 -53
- package/src/mcp/init-pantheon-mcp.sh +0 -118
|
@@ -1,144 +1,254 @@
|
|
|
1
|
+
// biome-ignore-all lint/suspicious/noExplicitAny: necessary for TuiPluginApi dynamic state access
|
|
2
|
+
// biome-ignore-all lint/a11y/noStaticElementInteractions: TUI elements, not DOM
|
|
1
3
|
/** @jsxImportSource @opentui/solid */
|
|
2
|
-
import type { TuiPlugin, TuiPluginApi, TuiPluginModule, TuiSlotContext, TuiSlotPlugin } from '@opencode-ai/plugin/tui'
|
|
3
|
-
import type { JSX } from '@opentui/solid'
|
|
4
|
-
import { createMemo, createSignal, Show, For } from 'solid-js'
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from '@opencode-ai/plugin/tui'
|
|
6
|
+
import { createMemo, createSignal, createResource, For, Show } from 'solid-js'
|
|
7
|
+
|
|
8
|
+
async function readPantheonVersion(api: TuiPluginApi): Promise<string> {
|
|
9
|
+
try {
|
|
10
|
+
const worktree = ((api.state as any).path?.worktree ?? '') as string
|
|
11
|
+
const filePath = worktree ? `${worktree}/package.json` : 'package.json'
|
|
12
|
+
const result = await api.client.file.read({ query: { path: filePath } })
|
|
13
|
+
const content = typeof result.content === 'string' ? result.content : String(result.content ?? '')
|
|
14
|
+
const match = content.match(/"version":\s*"([^"]+)"/)
|
|
15
|
+
if (match?.[1]) return match[1]
|
|
16
|
+
} catch { /* fall through */ }
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
const proc = (api as any).client?.process
|
|
20
|
+
if (typeof proc?.exec === 'function') {
|
|
21
|
+
const result = await proc.exec({ command: 'git', args: ['describe', '--tags', '--always'] })
|
|
22
|
+
const stdout = (result.stdout ?? result.output ?? '') as string
|
|
23
|
+
const tag = stdout.trim().replace(/^v/, '')
|
|
24
|
+
if (tag) return tag
|
|
25
|
+
}
|
|
26
|
+
} catch { /* fall through */ }
|
|
27
|
+
|
|
28
|
+
return '1.0.1'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const COMMANDS = [
|
|
32
|
+
{ name: '/pantheon', desc: 'Council synthesis' },
|
|
33
|
+
{ name: '/pantheon-status', desc: 'System status' },
|
|
34
|
+
{ name: '/pantheon-audit', desc: 'Full audit' },
|
|
35
|
+
{ name: '/pantheon-bg', desc: 'List background tasks' },
|
|
36
|
+
{ name: '/pantheon-cancel', desc: 'Cancel task' },
|
|
37
|
+
{ name: '/pantheon-deepwork', desc: 'Deep work mode' },
|
|
38
|
+
{ name: '/pantheon-focus', desc: 'Focus on scope' },
|
|
39
|
+
{ name: '/pantheon-remember', desc: 'Memory store/recall' },
|
|
40
|
+
{ name: '/pantheon-search', desc: 'Memory search' },
|
|
41
|
+
{ name: '/pantheon-consolidate', desc: 'Merge memories' },
|
|
42
|
+
{ name: '/pantheon-forget', desc: 'Compress memories' },
|
|
10
43
|
] as const
|
|
11
44
|
|
|
12
|
-
const
|
|
13
|
-
'
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
45
|
+
const AGENTS = [
|
|
46
|
+
{ name: 'zeus', tier: 'default' as const, role: 'Orchestrator' },
|
|
47
|
+
{ name: 'athena', tier: 'premium' as const, role: 'Strategic planner' },
|
|
48
|
+
{ name: 'apollo', tier: 'fast' as const, role: 'Codebase discovery' },
|
|
49
|
+
{ name: 'hermes', tier: 'default' as const, role: 'Backend' },
|
|
50
|
+
{ name: 'aphrodite', tier: 'default' as const, role: 'Frontend' },
|
|
51
|
+
{ name: 'demeter', tier: 'default' as const, role: 'Database' },
|
|
52
|
+
{ name: 'themis', tier: 'premium' as const, role: 'Quality & security' },
|
|
53
|
+
{ name: 'prometheus', tier: 'default' as const, role: 'Infrastructure' },
|
|
54
|
+
{ name: 'hephaestus', tier: 'default' as const, role: 'AI pipelines' },
|
|
55
|
+
{ name: 'nyx', tier: 'fast' as const, role: 'Observability' },
|
|
56
|
+
{ name: 'gaia', tier: 'fast' as const, role: 'Remote sensing' },
|
|
57
|
+
{ name: 'iris', tier: 'fast' as const, role: 'GitHub operations' },
|
|
58
|
+
{ name: 'mnemosyne', tier: 'fast' as const, role: 'Memory bank' },
|
|
59
|
+
{ name: 'talos', tier: 'fast' as const, role: 'Hotfixes' },
|
|
18
60
|
] as const
|
|
19
61
|
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const [
|
|
62
|
+
function safeNum(v: unknown): number {
|
|
63
|
+
return typeof v === 'number' && Number.isFinite(v) ? v : 0
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function View(props: { api: TuiPluginApi; sessionID: string; version: string }) {
|
|
67
|
+
const [showCommands, setShowCommands] = createSignal(false)
|
|
68
|
+
const [showAgents, setShowAgents] = createSignal(false)
|
|
69
|
+
const [showConfig, setShowConfig] = createSignal(false)
|
|
70
|
+
const [showMemory, setShowMemory] = createSignal(false)
|
|
71
|
+
const [showSubagents, setShowSubagents] = createSignal(false)
|
|
72
|
+
|
|
73
|
+
const theme = () => props.api.theme.current
|
|
74
|
+
|
|
75
|
+
const branch = createMemo(() =>
|
|
76
|
+
props.api.state.vcs?.branch ? `\u2387 ${props.api.state.vcs.branch}` : null,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
const configInfo = createMemo(() => {
|
|
80
|
+
const cfg = (props.api.state as any).config
|
|
81
|
+
if (!cfg) return null
|
|
82
|
+
return {
|
|
83
|
+
plugins: Array.isArray(cfg.plugin) ? cfg.plugin : [],
|
|
84
|
+
mcpCount: cfg.mcp ? Object.keys(cfg.mcp).length : 0,
|
|
85
|
+
autoCompaction: cfg.compaction?.auto === true,
|
|
86
|
+
}
|
|
87
|
+
})
|
|
26
88
|
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
|
|
89
|
+
const memoryInfo = createMemo(() => {
|
|
90
|
+
const mem = (props.api.state as any).memory
|
|
91
|
+
if (mem) {
|
|
92
|
+
const entries = safeNum(mem?.entries) || safeNum(mem?.count)
|
|
93
|
+
return entries > 0 ? { entries } : null
|
|
94
|
+
}
|
|
95
|
+
return null
|
|
30
96
|
})
|
|
31
97
|
|
|
32
|
-
const
|
|
33
|
-
|
|
98
|
+
const [subagents] = createResource(
|
|
99
|
+
() => showSubagents(),
|
|
100
|
+
async () => {
|
|
101
|
+
try {
|
|
102
|
+
const proc = (props.api as any).client?.process
|
|
103
|
+
if (typeof proc?.exec !== 'function') return null
|
|
104
|
+
const result = await proc.exec({
|
|
105
|
+
command: 'opencode',
|
|
106
|
+
args: ['session', 'list', '--format', 'json'],
|
|
107
|
+
timeoutMs: 5000,
|
|
108
|
+
})
|
|
109
|
+
const stdout = (result.stdout ?? result.output ?? '') as string
|
|
110
|
+
const sessions = JSON.parse(stdout)
|
|
111
|
+
if (!Array.isArray(sessions)) return null
|
|
112
|
+
return sessions
|
|
113
|
+
.filter((s: any) => s.id !== props.sessionID)
|
|
114
|
+
.sort((a: any, b: any) => (b.updated ?? 0) - (a.updated ?? 0))
|
|
115
|
+
.slice(0, 10)
|
|
116
|
+
} catch { return null }
|
|
117
|
+
},
|
|
118
|
+
)
|
|
34
119
|
|
|
35
120
|
return (
|
|
36
121
|
<box flexDirection="column" width="100%">
|
|
37
|
-
|
|
38
|
-
|
|
122
|
+
{/* Header */}
|
|
123
|
+
<text fg={theme().accent} attributes={{ bold: true }}>
|
|
124
|
+
{`Pantheon v${props.version}`}
|
|
39
125
|
</text>
|
|
40
126
|
|
|
41
127
|
<Show when={branch()}>
|
|
42
|
-
{(b) => <box marginTop={1}><text fg={
|
|
128
|
+
{(b) => (<box marginTop={1}><text fg={theme().textMuted}>{b()}</text></box>)}
|
|
43
129
|
</Show>
|
|
44
130
|
|
|
45
|
-
{/*
|
|
46
|
-
<box marginTop={0} onMouseDown={() =>
|
|
47
|
-
<text fg={
|
|
48
|
-
{
|
|
49
|
-
</text>
|
|
50
|
-
<text fg={props.api.theme.current.textMuted}>
|
|
51
|
-
({(props.api.state as any).session?.count?.() ?? '?'} total)
|
|
131
|
+
{/* Subagents */}
|
|
132
|
+
<box marginTop={0} onMouseDown={() => setShowSubagents((x) => !x)}>
|
|
133
|
+
<text fg={theme().text} attributes={{ bold: true }}>
|
|
134
|
+
{`${showSubagents() ? '\u25bc' : '\u25b6'} Subagents`}
|
|
52
135
|
</text>
|
|
136
|
+
<text fg={theme().textMuted}>{` (${String(props.api.state.session.count())})`}</text>
|
|
53
137
|
</box>
|
|
54
138
|
|
|
139
|
+
<Show when={showSubagents()}>
|
|
140
|
+
<Show when={subagents()} fallback={<box marginLeft={1}><text fg={theme().textMuted}>{`sessions: ${String(props.api.state.session.count())}`}</text></box>}>
|
|
141
|
+
{(sessions) => (
|
|
142
|
+
<Show when={sessions().length > 0} fallback={<box marginLeft={1}><text fg={theme().textMuted}>(idle)</text></box>}>
|
|
143
|
+
<box marginLeft={1} flexDirection="column">
|
|
144
|
+
<For each={sessions().slice(0, 5)}>
|
|
145
|
+
{(s: any) => (
|
|
146
|
+
<text fg={theme().textMuted}>{`${s.id.slice(0, 8)}... ${s.title?.slice(0, 30) ?? ''}`}</text>
|
|
147
|
+
)}
|
|
148
|
+
</For>
|
|
149
|
+
</box>
|
|
150
|
+
</Show>
|
|
151
|
+
)}
|
|
152
|
+
</Show>
|
|
153
|
+
</Show>
|
|
154
|
+
|
|
55
155
|
{/* Commands */}
|
|
56
|
-
<box marginTop={0} onMouseDown={() =>
|
|
57
|
-
<text fg={
|
|
58
|
-
{
|
|
156
|
+
<box marginTop={0} onMouseDown={() => setShowCommands((x) => !x)}>
|
|
157
|
+
<text fg={theme().text} attributes={{ bold: true }}>
|
|
158
|
+
{`${showCommands() ? '\u25bc' : '\u25b6'} Commands`}
|
|
59
159
|
</text>
|
|
60
|
-
<text fg={
|
|
160
|
+
<text fg={theme().textMuted}>{` (${String(COMMANDS.length)})`}</text>
|
|
61
161
|
</box>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
162
|
+
|
|
163
|
+
<Show when={showCommands()}>
|
|
164
|
+
<For each={COMMANDS}>
|
|
165
|
+
{(cmd) => (
|
|
166
|
+
<box marginLeft={1} onMouseDown={(e) => {
|
|
167
|
+
e.stopPropagation()
|
|
168
|
+
try {
|
|
169
|
+
const cmdApi = (props.api as any).command
|
|
170
|
+
const cmdName = cmd.name.replace('/', '')
|
|
171
|
+
if (cmdApi?.trigger?.(cmdName)) return
|
|
172
|
+
} catch {}
|
|
173
|
+
props.api.ui?.toast?.({ title: 'Command', message: `Type ${cmd.name} in chat` })
|
|
174
|
+
}}>
|
|
175
|
+
<text fg={cmd.name === '/pantheon' ? theme().accent : theme().textMuted}>{cmd.name}</text>
|
|
176
|
+
<text fg={theme().textMuted}>{` — ${cmd.desc}`}</text>
|
|
177
|
+
</box>
|
|
178
|
+
)}
|
|
179
|
+
</For>
|
|
68
180
|
</Show>
|
|
69
181
|
|
|
70
182
|
{/* Agents */}
|
|
71
|
-
<box marginTop={0} onMouseDown={() =>
|
|
72
|
-
<text fg={
|
|
73
|
-
{
|
|
183
|
+
<box marginTop={0} onMouseDown={() => setShowAgents((x) => !x)}>
|
|
184
|
+
<text fg={theme().text} attributes={{ bold: true }}>
|
|
185
|
+
{`${showAgents() ? '\u25bc' : '\u25b6'} Agents`}
|
|
74
186
|
</text>
|
|
75
|
-
<text fg={
|
|
187
|
+
<text fg={theme().textMuted}>{` (${String(AGENTS.length)})`}</text>
|
|
76
188
|
</box>
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
189
|
+
|
|
190
|
+
<Show when={showAgents()}>
|
|
191
|
+
<For each={AGENTS}>
|
|
192
|
+
{(agent) => (
|
|
193
|
+
<box marginLeft={1}>
|
|
194
|
+
<text fg={agent.tier === 'premium' ? theme().accent : theme().textMuted}>
|
|
195
|
+
{`${agent.tier === 'premium' ? '\u2726 ' : '\u00b7 '}${agent.name}`}
|
|
196
|
+
</text>
|
|
197
|
+
<text fg={theme().textMuted}>{` — ${agent.role}`}</text>
|
|
198
|
+
</box>
|
|
199
|
+
)}
|
|
200
|
+
</For>
|
|
83
201
|
</Show>
|
|
84
202
|
|
|
85
203
|
{/* Config */}
|
|
86
|
-
<box marginTop={0} onMouseDown={() =>
|
|
87
|
-
<text fg={
|
|
88
|
-
{
|
|
204
|
+
<box marginTop={0} onMouseDown={() => setShowConfig((x) => !x)}>
|
|
205
|
+
<text fg={theme().text} attributes={{ bold: true }}>
|
|
206
|
+
{`${showConfig() ? '\u25bc' : '\u25b6'} Config`}
|
|
89
207
|
</text>
|
|
90
208
|
</box>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
209
|
+
|
|
210
|
+
<Show when={showConfig()}>
|
|
211
|
+
<Show when={configInfo()} fallback={<box marginLeft={1}><text fg={theme().textMuted}>(no config data)</text></box>}>
|
|
212
|
+
{(cfg) => (
|
|
213
|
+
<box marginLeft={1} flexDirection="column">
|
|
214
|
+
<text fg={theme().textMuted}>{`MCP servers: ${String(cfg().mcpCount)}`}</text>
|
|
215
|
+
<text fg={theme().textMuted}>{`Auto-compaction: ${cfg().autoCompaction ? 'ON' : 'OFF'}`}</text>
|
|
216
|
+
</box>
|
|
217
|
+
)}
|
|
218
|
+
</Show>
|
|
100
219
|
</Show>
|
|
101
220
|
|
|
102
221
|
{/* Memory */}
|
|
103
|
-
<box marginTop={0} onMouseDown={() =>
|
|
104
|
-
<text fg={
|
|
105
|
-
{
|
|
222
|
+
<box marginTop={0} onMouseDown={() => setShowMemory((x) => !x)}>
|
|
223
|
+
<text fg={theme().text} attributes={{ bold: true }}>
|
|
224
|
+
{`${showMemory() ? '\u25bc' : '\u25b6'} Memory`}
|
|
106
225
|
</text>
|
|
107
226
|
</box>
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
</box>
|
|
227
|
+
|
|
228
|
+
<Show when={showMemory()}>
|
|
229
|
+
<Show when={memoryInfo()} fallback={<box marginLeft={1}><text fg={theme().textMuted}>(no data)</text></box>}>
|
|
230
|
+
{(mem) => (<box marginLeft={1}><text fg={theme().textMuted}>{`Entries: ${String(mem().entries)}`}</text></box>)}
|
|
231
|
+
</Show>
|
|
114
232
|
</Show>
|
|
115
233
|
</box>
|
|
116
234
|
)
|
|
117
235
|
}
|
|
118
236
|
|
|
119
|
-
|
|
120
|
-
|
|
237
|
+
const tui: TuiPlugin = async (api, _options, _meta) => {
|
|
238
|
+
const version = await readPantheonVersion(api)
|
|
239
|
+
api.slots.register({
|
|
121
240
|
order: 900,
|
|
122
241
|
slots: {
|
|
123
|
-
sidebar_content(_ctx
|
|
124
|
-
return <
|
|
242
|
+
sidebar_content(_ctx, props) {
|
|
243
|
+
return <View api={api} sessionID={props.session_id} version={version} />
|
|
125
244
|
},
|
|
126
245
|
},
|
|
127
|
-
}
|
|
246
|
+
})
|
|
128
247
|
}
|
|
129
248
|
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
try {
|
|
134
|
-
const wt = api.state.path?.worktree ?? ''
|
|
135
|
-
const fp = wt ? `${wt}/package.json` : 'package.json'
|
|
136
|
-
const r = await api.client.file.read({ query: { path: fp } })
|
|
137
|
-
const m = String(r?.content ?? '').match(/"version":\s*"([^"]+)"/)
|
|
138
|
-
if (m?.[1]) version = m[1]
|
|
139
|
-
} catch { /* fallback */ }
|
|
140
|
-
|
|
141
|
-
api.slots.register(createSlot(api, version))
|
|
249
|
+
const plugin: TuiPluginModule & { id: string } = {
|
|
250
|
+
id: 'pantheon.tui',
|
|
251
|
+
tui,
|
|
142
252
|
}
|
|
143
253
|
|
|
144
|
-
export default
|
|
254
|
+
export default plugin
|
package/src/routing.yml
CHANGED
|
@@ -13,7 +13,7 @@ version: 1.0
|
|
|
13
13
|
# Z --> HE[Hephaestus]
|
|
14
14
|
# Z --> N[Nyx]
|
|
15
15
|
# Z --> G[Gaia]
|
|
16
|
-
# Z --> I[Iris] --> M[Mnemosyne]
|
|
16
|
+
# # Z --> I[Iris] --> M[Mnemosyne]
|
|
17
17
|
# Z --> M
|
|
18
18
|
# Z -.-> TA[Talos]
|
|
19
19
|
# T --> I
|
|
@@ -51,7 +51,6 @@ agents:
|
|
|
51
51
|
- prometheus
|
|
52
52
|
- hephaestus
|
|
53
53
|
- nyx
|
|
54
|
-
- gaia
|
|
55
54
|
- iris
|
|
56
55
|
- mnemosyne
|
|
57
56
|
- talos
|
|
@@ -61,9 +60,8 @@ agents:
|
|
|
61
60
|
- artifact-management
|
|
62
61
|
- context-compression
|
|
63
62
|
- auto-continue
|
|
64
|
-
- internet-search
|
|
65
63
|
- orchestration-workflow
|
|
66
|
-
-
|
|
64
|
+
- incremental-implementation
|
|
67
65
|
|
|
68
66
|
athena:
|
|
69
67
|
role: "Strategic planner"
|
|
@@ -83,11 +81,8 @@ agents:
|
|
|
83
81
|
subagent_can_delegate_to:
|
|
84
82
|
- apollo
|
|
85
83
|
skills:
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
- interview
|
|
89
|
-
- metis-gap-analysis
|
|
90
|
-
- plan-architecture
|
|
84
|
+
- spec-driven-development
|
|
85
|
+
- memory-bank
|
|
91
86
|
|
|
92
87
|
apollo:
|
|
93
88
|
role: "Investigation scout"
|
|
@@ -106,8 +101,7 @@ agents:
|
|
|
106
101
|
- pantheon_resources
|
|
107
102
|
subagent_can_delegate_to: []
|
|
108
103
|
skills:
|
|
109
|
-
-
|
|
110
|
-
- codemap
|
|
104
|
+
- auto-continue
|
|
111
105
|
|
|
112
106
|
hermes:
|
|
113
107
|
role: "Backend specialist"
|
|
@@ -125,16 +119,11 @@ agents:
|
|
|
125
119
|
- memory_store
|
|
126
120
|
- pantheon_code_mode
|
|
127
121
|
skills:
|
|
128
|
-
-
|
|
129
|
-
- cache-strategy
|
|
130
|
-
- database-optimization
|
|
131
|
-
- fastapi-async-patterns
|
|
122
|
+
- tdd-with-agents
|
|
132
123
|
- file-prompts
|
|
133
|
-
- quality-gate
|
|
134
|
-
- simplify
|
|
135
124
|
- streaming-patterns
|
|
136
|
-
-
|
|
137
|
-
-
|
|
125
|
+
- git-workflow-and-versioning
|
|
126
|
+
- incremental-implementation
|
|
138
127
|
|
|
139
128
|
aphrodite:
|
|
140
129
|
role: "Frontend specialist"
|
|
@@ -152,11 +141,9 @@ agents:
|
|
|
152
141
|
- memory_store
|
|
153
142
|
- pantheon_resources_memory_bank
|
|
154
143
|
skills:
|
|
155
|
-
- frontend-analyzer
|
|
156
|
-
- nextjs-seo-optimization
|
|
157
|
-
- quality-gate
|
|
158
|
-
- simplify
|
|
159
144
|
- tdd-with-agents
|
|
145
|
+
- visual-review-pipeline
|
|
146
|
+
- file-prompts
|
|
160
147
|
|
|
161
148
|
demeter:
|
|
162
149
|
role: "Database specialist"
|
|
@@ -174,11 +161,8 @@ agents:
|
|
|
174
161
|
- memory_store
|
|
175
162
|
- memory_recall
|
|
176
163
|
skills:
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
- quality-gate
|
|
180
|
-
- cache-strategy
|
|
181
|
-
- simplify
|
|
164
|
+
- tdd-with-agents
|
|
165
|
+
- incremental-implementation
|
|
182
166
|
|
|
183
167
|
themis:
|
|
184
168
|
role: "Quality gate"
|
|
@@ -200,10 +184,9 @@ agents:
|
|
|
200
184
|
- mnemosyne
|
|
201
185
|
skills:
|
|
202
186
|
- code-review-checklist
|
|
203
|
-
-
|
|
204
|
-
- security-audit-pro
|
|
187
|
+
- security-hardening
|
|
205
188
|
- tdd-with-agents
|
|
206
|
-
-
|
|
189
|
+
- context-compression
|
|
207
190
|
|
|
208
191
|
prometheus:
|
|
209
192
|
role: "Infrastructure specialist"
|
|
@@ -221,8 +204,8 @@ agents:
|
|
|
221
204
|
- pantheon_code_mode
|
|
222
205
|
- memory_store
|
|
223
206
|
skills:
|
|
224
|
-
-
|
|
225
|
-
-
|
|
207
|
+
- git-workflow-and-versioning
|
|
208
|
+
- incremental-implementation
|
|
226
209
|
|
|
227
210
|
hephaestus:
|
|
228
211
|
role: "AI pipelines"
|
|
@@ -239,12 +222,8 @@ agents:
|
|
|
239
222
|
- ai_workflow_composition
|
|
240
223
|
- memory_search
|
|
241
224
|
skills:
|
|
242
|
-
-
|
|
243
|
-
-
|
|
244
|
-
- quality-gate
|
|
245
|
-
- agent-evaluation
|
|
246
|
-
- conversational-ai-design
|
|
247
|
-
- prompt-improver
|
|
225
|
+
- tdd-with-agents
|
|
226
|
+
- auto-continue
|
|
248
227
|
|
|
249
228
|
nyx:
|
|
250
229
|
role: "Observability"
|
|
@@ -261,27 +240,23 @@ agents:
|
|
|
261
240
|
- monitoring_dashboards
|
|
262
241
|
- pantheon_resources_routing
|
|
263
242
|
skills:
|
|
264
|
-
-
|
|
265
|
-
-
|
|
266
|
-
- token-audit
|
|
243
|
+
- security-hardening
|
|
244
|
+
- auto-continue
|
|
267
245
|
|
|
268
246
|
gaia:
|
|
269
|
-
role:
|
|
270
|
-
model_tier:
|
|
271
|
-
reasoning_effort:
|
|
272
|
-
user_invocable:
|
|
247
|
+
role: Remote sensing domain specialist
|
|
248
|
+
model_tier: fast
|
|
249
|
+
reasoning_effort: low
|
|
250
|
+
user_invocable: false
|
|
273
251
|
can_delegate: false
|
|
274
252
|
can_receive_delegation: true
|
|
275
253
|
capabilities:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
- scientific_literature_review
|
|
281
|
-
- pantheon_resources
|
|
254
|
+
- remote_sensing
|
|
255
|
+
- spectral_analysis
|
|
256
|
+
- change_detection
|
|
257
|
+
- ml_classification
|
|
282
258
|
skills:
|
|
283
|
-
|
|
284
|
-
- internet-search
|
|
259
|
+
- auto-continue
|
|
285
260
|
|
|
286
261
|
iris:
|
|
287
262
|
role: "GitHub operations"
|
|
@@ -300,6 +275,7 @@ agents:
|
|
|
300
275
|
subagent_can_delegate_to:
|
|
301
276
|
- mnemosyne
|
|
302
277
|
skills:
|
|
278
|
+
- git-workflow-and-versioning
|
|
303
279
|
- artifact-management
|
|
304
280
|
|
|
305
281
|
mnemosyne:
|
|
@@ -322,9 +298,9 @@ agents:
|
|
|
322
298
|
subagent_can_delegate_to: []
|
|
323
299
|
skills:
|
|
324
300
|
- artifact-management
|
|
325
|
-
-
|
|
326
|
-
- task-system
|
|
301
|
+
- memory-bank
|
|
327
302
|
- context-compression
|
|
303
|
+
- session-goal
|
|
328
304
|
|
|
329
305
|
talos:
|
|
330
306
|
role: "Hotfix agent"
|
|
@@ -342,7 +318,7 @@ agents:
|
|
|
342
318
|
- pantheon_code_mode
|
|
343
319
|
subagent_can_delegate_to: []
|
|
344
320
|
skills:
|
|
345
|
-
-
|
|
321
|
+
- incremental-implementation
|
|
346
322
|
|
|
347
323
|
# AUTO-CONTINUE CONFIGURATION
|
|
348
324
|
# Checkpoint and heartbeat settings for autonomous sessions
|
|
@@ -429,42 +405,6 @@ platforms:
|
|
|
429
405
|
- web_fetch
|
|
430
406
|
- web_search
|
|
431
407
|
|
|
432
|
-
vscode:
|
|
433
|
-
display_name: "VS Code (GitHub Copilot)"
|
|
434
|
-
tools:
|
|
435
|
-
delegate_agent: "agent"
|
|
436
|
-
delegate_subagent: "task"
|
|
437
|
-
ask_user: "vscode/askQuestions"
|
|
438
|
-
search_codebase: "search/codebase"
|
|
439
|
-
search_usages: "search/usages"
|
|
440
|
-
search_files: "search/fileSearch"
|
|
441
|
-
search_text: "search/textSearch"
|
|
442
|
-
search_changes: "search/changes"
|
|
443
|
-
list_directory: "search/listDirectory"
|
|
444
|
-
read_file: "read/readFile"
|
|
445
|
-
read_problems: "read/problems"
|
|
446
|
-
edit_file: "edit/editFiles"
|
|
447
|
-
run_terminal: "execute/runInTerminal"
|
|
448
|
-
test_failure: "execute/testFailure"
|
|
449
|
-
get_terminal_output: "execute/getTerminalOutput"
|
|
450
|
-
web_fetch: "web/fetch"
|
|
451
|
-
browser_open: "browser/openBrowserPage"
|
|
452
|
-
browser_navigate: "browser/navigatePage"
|
|
453
|
-
browser_read: "browser/readPage"
|
|
454
|
-
browser_click: "browser/clickElement"
|
|
455
|
-
browser_type: "browser/typeInPage"
|
|
456
|
-
browser_hover: "browser/hoverElement"
|
|
457
|
-
browser_drag: "browser/dragElement"
|
|
458
|
-
browser_dialog: "browser/handleDialog"
|
|
459
|
-
browser_screenshot: "browser/screenshotPage"
|
|
460
|
-
capabilities:
|
|
461
|
-
- agent_delegation
|
|
462
|
-
- subagent_delegation
|
|
463
|
-
- file_editing
|
|
464
|
-
- terminal_execution
|
|
465
|
-
- web_fetch
|
|
466
|
-
- browser_automation
|
|
467
|
-
|
|
468
408
|
# ARTIFACT LIFECYCLE
|
|
469
409
|
# See skill: artifact-management for full lifecycle rules.
|
|
470
410
|
# Summary: PLAN, IMPL, REVIEW, DISC → .pantheon/memory-bank/.tmp/ (ephemeral, sprint-scoped).
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clonedeps
|
|
3
|
+
description: Clones dependency source locally so agents can inspect library internals, understand behavior, and debug integration issues
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Clone Dependencies
|
|
7
|
+
|
|
8
|
+
Clone relevant dependency source code into a local directory for inspection and debugging.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- Debugging a library integration issue
|
|
13
|
+
- Understanding how a dependency works internally
|
|
14
|
+
- Checking if a bug is in your code or the dependency
|
|
15
|
+
- Evaluating a dependency before adding it
|
|
16
|
+
- Contributing a fix to an upstream project
|
|
17
|
+
|
|
18
|
+
## How to Clone
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Clone to local inspection directory
|
|
22
|
+
git clone <repo-url> .deps/<dependency-name>
|
|
23
|
+
|
|
24
|
+
# Or use a shallow clone for speed
|
|
25
|
+
git clone --depth 1 <repo-url> .deps/<dependency-name>
|
|
26
|
+
|
|
27
|
+
# For npm packages, find the repo from package.json
|
|
28
|
+
# For Python packages, check PyPI or source distribution
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Inspection Workflow
|
|
32
|
+
|
|
33
|
+
1. Identify the dependency and the specific behavior to investigate
|
|
34
|
+
2. Clone to `.deps/<name>/` (gitignored by default)
|
|
35
|
+
3. Read relevant source files
|
|
36
|
+
4. Return findings to the requesting agent
|
|
37
|
+
5. Clean up: `rm -rf .deps/<name>/` (optional)
|
|
38
|
+
|
|
39
|
+
## Rules
|
|
40
|
+
- Clone to `.deps/` directory (always gitignored)
|
|
41
|
+
- Shallow clone preferred (faster, less disk)
|
|
42
|
+
- Never commit dependency source to the project
|
|
43
|
+
- Never modify dependency source (unless contributing upstream)
|
|
44
|
+
- Escalate to @themis if a dependency vulnerability is found
|
|
45
|
+
- `rm -rf .deps/` after finishing to keep workspace clean
|