@plainconceptsplatform/agent-harness 3.3.1 → 3.4.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/LICENSE +21 -21
- package/README.md +454 -454
- package/cli/commands/join.js +259 -259
- package/cli/commands/migrate.js +310 -310
- package/cli/commands/shared.js +27 -27
- package/cli/commands/single.js +79 -79
- package/cli/commands/wizard.js +134 -134
- package/cli/fragments/ops-backlog/az.md +28 -28
- package/cli/fragments/ops-backlog/gh.md +28 -28
- package/cli/fragments/ops-backlog/jira.md +28 -28
- package/cli/fragments/ops-review/az.md +62 -62
- package/cli/fragments/ops-review/gh.md +51 -51
- package/cli/fragments/ops-review/gl.md +55 -55
- package/cli/fragments/ops-ship/gh.md +67 -67
- package/cli/fragments/ops-ship/gl.md +84 -84
- package/cli/index.js +116 -116
- package/cli/presets/clean.json +21 -21
- package/cli/presets/models.json +68 -68
- package/cli/presets/optimization.json +32 -32
- package/cli/presets/platforms.json +76 -76
- package/cli/presets/source.json +23 -23
- package/cli/steps/clean/index.js +120 -120
- package/cli/steps/copy/agents.js +120 -120
- package/cli/steps/copy/fullstack-engineer.js +89 -89
- package/cli/steps/copy/opencode-json.js +324 -324
- package/cli/steps/copy/skills.js +316 -316
- package/cli/steps/models/format.js +88 -88
- package/cli/steps/models/index.js +64 -64
- package/cli/steps/openspec/index.js +136 -136
- package/cli/steps/optimization/codegraph.js +141 -141
- package/cli/steps/optimization/detect.js +66 -66
- package/cli/steps/optimization/humanizer.js +17 -17
- package/cli/steps/optimization/index.js +158 -158
- package/cli/steps/optimization/memory.js +91 -91
- package/cli/steps/optimization/patch-guardrails.js +111 -111
- package/cli/steps/optimization/simple-english.js +17 -17
- package/cli/steps/optimization/skills-lock.js +30 -30
- package/cli/steps/platform/index.js +109 -109
- package/cli/steps/source/index.js +123 -123
- package/cli/utils/agent-color.js +111 -111
- package/cli/utils/copy.js +134 -134
- package/cli/utils/exec-spinner.js +47 -47
- package/cli/utils/exec.js +134 -134
- package/cli/utils/legacy-check.js +30 -30
- package/cli/utils/models-cache.js +58 -58
- package/cli/utils/models-pricing.js +42 -42
- package/cli/utils/paths.js +81 -80
- package/cli/utils/process.js +3 -3
- package/cli/utils/terminal.js +6 -6
- package/cli/utils/update-manifest.js +75 -75
- package/harness/.opencode/_gitignore +10 -9
- package/harness/.opencode/commands/ops-backlog.md +10 -10
- package/harness/.opencode/commands/ops-review.md +10 -8
- package/harness/.opencode/commands/ops-ship.md +9 -9
- package/harness/.opencode/commands/plan-archive.md +7 -5
- package/harness/.opencode/commands/plan-explore.md +11 -9
- package/harness/.opencode/commands/plan-propose.md +11 -9
- package/harness/.opencode/commands/plan-quick.md +7 -5
- package/harness/.opencode/commands/plan-story.md +11 -9
- package/harness/.opencode/commands/repo-audit.md +7 -5
- package/harness/.opencode/commands/repo-help.md +5 -5
- package/harness/.opencode/package.json +5 -5
- package/harness/.opencode/plugins/pc-subagent-monitor.js +184 -184
- package/harness/.opencode/plugins/pc-subagent-tiers.js +367 -354
- package/harness/.opencode/plugins/pc-system-reminders.js +386 -386
- package/harness/.opencode/scripts/check-diff.mjs +244 -244
- package/harness/.opencode/scripts/code-rules.mjs +288 -288
- package/harness/ARCHITECTURE.md +13 -13
- package/harness/DESIGN.md +13 -13
- package/harness/opencode.jsonc +36 -36
- package/harness/openspec/config.yaml +20 -20
- package/harness/skills-lock.json +17 -17
- package/package.json +12 -14
- package/skills/agent-harness-cli/SKILL.md +86 -86
- package/skills/pc-guardrails-generic/SKILL.md +53 -53
- package/skills/pc-guardrails-project/SKILL.md +8 -8
- package/skills/pc-make-architecture/structure-template.md +64 -64
- package/skills/pc-make-engineer/SKILL.md +59 -59
- package/skills/pc-make-engineer/template.md +36 -36
- package/skills/pc-make-guardrails/category-reference.md +112 -112
- package/skills/pc-make-merge-risk-assess/SKILL.md +70 -70
- package/skills/pc-make-merge-risk-assess/category-reference.md +114 -114
- package/skills/pc-ops-ship/SKILL.md +22 -22
- package/skills/pc-plan-apply/SKILL.md +86 -86
- package/skills/pc-plan-apply/simple-mode.md +21 -21
- package/skills/pc-plan-explore/SKILL.md +21 -21
- package/skills/pc-plan-goal/SKILL.md +91 -91
- package/skills/pc-plan-goal/failure-policy.md +30 -30
- package/skills/pc-plan-goal/output-mode.md +10 -10
- package/skills/pc-plan-propose/SKILL.md +125 -125
- package/skills/pc-plan-propose/task-annotation.md +39 -39
- package/skills/pc-plan-quick/SKILL.md +46 -46
- package/skills/pc-repo-audit/SKILL.md +44 -44
- package/skills/pc-repo-help/SKILL.md +87 -87
- package/skills/pc-repo-verify/SKILL.md +150 -150
package/cli/index.js
CHANGED
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import chalk from 'chalk'
|
|
3
|
-
import { createRequire } from 'node:module'
|
|
4
|
-
import { runJoin } from './commands/join.js'
|
|
5
|
-
import { runUpdate } from './commands/update.js'
|
|
6
|
-
import { runSingleCommand } from './commands/single.js'
|
|
7
|
-
import { runWizard } from './commands/wizard.js'
|
|
8
|
-
import { exit } from './utils/process.js'
|
|
9
|
-
import { runMigrateCommand } from './commands/migrate.js'
|
|
10
|
-
import { findLegacyInstall } from './utils/legacy-check.js'
|
|
11
|
-
|
|
12
|
-
function printHelp(version) {
|
|
13
|
-
console.log(`agent-harness v${version}`)
|
|
14
|
-
console.log()
|
|
15
|
-
console.log('Usage:')
|
|
16
|
-
console.log(' npx @plainconceptsplatform/agent-harness Install the harness (full wizard)')
|
|
17
|
-
console.log(' npx @plainconceptsplatform/agent-harness <command> Run a single step command')
|
|
18
|
-
console.log()
|
|
19
|
-
console.log('Commands:')
|
|
20
|
-
console.log(' update Bring the harness up to date from saved config (no prompts)')
|
|
21
|
-
console.log(' migrate Move a v1 (opencode-onboard) project to v2, keeping your content')
|
|
22
|
-
console.log(' join Set up a teammate\'s machine (checks & local installs only)')
|
|
23
|
-
console.log(' clean Run AI files cleanup step')
|
|
24
|
-
console.log(' platform Run platform selection step')
|
|
25
|
-
console.log(' copy Run content copy step')
|
|
26
|
-
console.log(' openspec Run OpenSpec initialization step')
|
|
27
|
-
console.log(' models Run models selection step')
|
|
28
|
-
console.log(' optimization Run token optimization tools step')
|
|
29
|
-
console.log(' browser Run agent-browser installer step')
|
|
30
|
-
console.log(' metadata Write onboarding metadata step')
|
|
31
|
-
console.log()
|
|
32
|
-
console.log('Options:')
|
|
33
|
-
console.log(' -h, --help Show this help message')
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (process.stdout.isTTY) console.clear()
|
|
37
|
-
console.log()
|
|
38
|
-
const require = createRequire(import.meta.url)
|
|
39
|
-
const { version } = require('../package.json')
|
|
40
|
-
const args = process.argv.slice(2)
|
|
41
|
-
|
|
42
|
-
if (args.includes('-h') || args.includes('--help')) {
|
|
43
|
-
printHelp(version)
|
|
44
|
-
exit()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async function refuseLegacyInstall() {
|
|
48
|
-
const legacy = await findLegacyInstall()
|
|
49
|
-
if (!legacy) return false
|
|
50
|
-
|
|
51
|
-
console.log(chalk.red('This project was set up by opencode-onboard v1.'))
|
|
52
|
-
console.log()
|
|
53
|
-
if (legacy.files.length > 0) console.log(chalk.dim(` config: ${legacy.files.join(', ')}`))
|
|
54
|
-
if (legacy.skills.length > 0) {
|
|
55
|
-
const shown = legacy.skills.slice(0, 3).join(', ')
|
|
56
|
-
const rest = legacy.skills.length > 3 ? `, +${legacy.skills.length - 3} more` : ''
|
|
57
|
-
console.log(chalk.dim(` skills: ${shown}${rest}`))
|
|
58
|
-
}
|
|
59
|
-
console.log()
|
|
60
|
-
console.log('agent-harness v2 renamed both the config files and the skill prefix,')
|
|
61
|
-
console.log('and it does not migrate v1 projects. Continuing would leave the harness')
|
|
62
|
-
console.log('half-patched without reporting an error.')
|
|
63
|
-
console.log()
|
|
64
|
-
console.log('Migrate it, keeping your generated skills and custom engineers:')
|
|
65
|
-
console.log(chalk.dim(' npx @plainconceptsplatform/agent-harness migrate'))
|
|
66
|
-
console.log(chalk.dim(' npx @plainconceptsplatform/agent-harness update'))
|
|
67
|
-
console.log()
|
|
68
|
-
console.log(chalk.dim('Add --dry-run to see what migrate would change first.'))
|
|
69
|
-
return true
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Ctrl-C out of an @inquirer prompt throws ExitPromptError; that is a normal
|
|
73
|
-
// cancellation, not a crash, so it must not exit non-zero.
|
|
74
|
-
async function main() {
|
|
75
|
-
// migrate is the way out of a v1 project, so it must run before the guard
|
|
76
|
-
// that refuses v1 projects.
|
|
77
|
-
if (args[0] === 'migrate') {
|
|
78
|
-
await runMigrateCommand(args.slice(1))
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
if (await refuseLegacyInstall()) {
|
|
82
|
-
exit(1)
|
|
83
|
-
return
|
|
84
|
-
}
|
|
85
|
-
if (args.length === 0) {
|
|
86
|
-
await runWizard(version)
|
|
87
|
-
return
|
|
88
|
-
}
|
|
89
|
-
if (args[0] === 'join') {
|
|
90
|
-
await runJoin()
|
|
91
|
-
return
|
|
92
|
-
}
|
|
93
|
-
if (args[0] === 'update') {
|
|
94
|
-
await runUpdate()
|
|
95
|
-
return
|
|
96
|
-
}
|
|
97
|
-
if (!await runSingleCommand(args[0])) {
|
|
98
|
-
console.log(chalk.red(`Unknown command: ${args[0]}`))
|
|
99
|
-
console.log()
|
|
100
|
-
printHelp(version)
|
|
101
|
-
exit(1)
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
try {
|
|
106
|
-
await main()
|
|
107
|
-
} catch (err) {
|
|
108
|
-
if (err.name === 'ExitPromptError') {
|
|
109
|
-
console.log()
|
|
110
|
-
console.log(chalk.yellow('Cancelled.'))
|
|
111
|
-
} else {
|
|
112
|
-
console.error(chalk.red('\nUnexpected error:'), err.message)
|
|
113
|
-
exit(1)
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
exit()
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import chalk from 'chalk'
|
|
3
|
+
import { createRequire } from 'node:module'
|
|
4
|
+
import { runJoin } from './commands/join.js'
|
|
5
|
+
import { runUpdate } from './commands/update.js'
|
|
6
|
+
import { runSingleCommand } from './commands/single.js'
|
|
7
|
+
import { runWizard } from './commands/wizard.js'
|
|
8
|
+
import { exit } from './utils/process.js'
|
|
9
|
+
import { runMigrateCommand } from './commands/migrate.js'
|
|
10
|
+
import { findLegacyInstall } from './utils/legacy-check.js'
|
|
11
|
+
|
|
12
|
+
function printHelp(version) {
|
|
13
|
+
console.log(`agent-harness v${version}`)
|
|
14
|
+
console.log()
|
|
15
|
+
console.log('Usage:')
|
|
16
|
+
console.log(' npx @plainconceptsplatform/agent-harness Install the harness (full wizard)')
|
|
17
|
+
console.log(' npx @plainconceptsplatform/agent-harness <command> Run a single step command')
|
|
18
|
+
console.log()
|
|
19
|
+
console.log('Commands:')
|
|
20
|
+
console.log(' update Bring the harness up to date from saved config (no prompts)')
|
|
21
|
+
console.log(' migrate Move a v1 (opencode-onboard) project to v2, keeping your content')
|
|
22
|
+
console.log(' join Set up a teammate\'s machine (checks & local installs only)')
|
|
23
|
+
console.log(' clean Run AI files cleanup step')
|
|
24
|
+
console.log(' platform Run platform selection step')
|
|
25
|
+
console.log(' copy Run content copy step')
|
|
26
|
+
console.log(' openspec Run OpenSpec initialization step')
|
|
27
|
+
console.log(' models Run models selection step')
|
|
28
|
+
console.log(' optimization Run token optimization tools step')
|
|
29
|
+
console.log(' browser Run agent-browser installer step')
|
|
30
|
+
console.log(' metadata Write onboarding metadata step')
|
|
31
|
+
console.log()
|
|
32
|
+
console.log('Options:')
|
|
33
|
+
console.log(' -h, --help Show this help message')
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (process.stdout.isTTY) console.clear()
|
|
37
|
+
console.log()
|
|
38
|
+
const require = createRequire(import.meta.url)
|
|
39
|
+
const { version } = require('../package.json')
|
|
40
|
+
const args = process.argv.slice(2)
|
|
41
|
+
|
|
42
|
+
if (args.includes('-h') || args.includes('--help')) {
|
|
43
|
+
printHelp(version)
|
|
44
|
+
exit()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function refuseLegacyInstall() {
|
|
48
|
+
const legacy = await findLegacyInstall()
|
|
49
|
+
if (!legacy) return false
|
|
50
|
+
|
|
51
|
+
console.log(chalk.red('This project was set up by opencode-onboard v1.'))
|
|
52
|
+
console.log()
|
|
53
|
+
if (legacy.files.length > 0) console.log(chalk.dim(` config: ${legacy.files.join(', ')}`))
|
|
54
|
+
if (legacy.skills.length > 0) {
|
|
55
|
+
const shown = legacy.skills.slice(0, 3).join(', ')
|
|
56
|
+
const rest = legacy.skills.length > 3 ? `, +${legacy.skills.length - 3} more` : ''
|
|
57
|
+
console.log(chalk.dim(` skills: ${shown}${rest}`))
|
|
58
|
+
}
|
|
59
|
+
console.log()
|
|
60
|
+
console.log('agent-harness v2 renamed both the config files and the skill prefix,')
|
|
61
|
+
console.log('and it does not migrate v1 projects. Continuing would leave the harness')
|
|
62
|
+
console.log('half-patched without reporting an error.')
|
|
63
|
+
console.log()
|
|
64
|
+
console.log('Migrate it, keeping your generated skills and custom engineers:')
|
|
65
|
+
console.log(chalk.dim(' npx @plainconceptsplatform/agent-harness migrate'))
|
|
66
|
+
console.log(chalk.dim(' npx @plainconceptsplatform/agent-harness update'))
|
|
67
|
+
console.log()
|
|
68
|
+
console.log(chalk.dim('Add --dry-run to see what migrate would change first.'))
|
|
69
|
+
return true
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Ctrl-C out of an @inquirer prompt throws ExitPromptError; that is a normal
|
|
73
|
+
// cancellation, not a crash, so it must not exit non-zero.
|
|
74
|
+
async function main() {
|
|
75
|
+
// migrate is the way out of a v1 project, so it must run before the guard
|
|
76
|
+
// that refuses v1 projects.
|
|
77
|
+
if (args[0] === 'migrate') {
|
|
78
|
+
await runMigrateCommand(args.slice(1))
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
if (await refuseLegacyInstall()) {
|
|
82
|
+
exit(1)
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
if (args.length === 0) {
|
|
86
|
+
await runWizard(version)
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
if (args[0] === 'join') {
|
|
90
|
+
await runJoin()
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
if (args[0] === 'update') {
|
|
94
|
+
await runUpdate()
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
if (!await runSingleCommand(args[0])) {
|
|
98
|
+
console.log(chalk.red(`Unknown command: ${args[0]}`))
|
|
99
|
+
console.log()
|
|
100
|
+
printHelp(version)
|
|
101
|
+
exit(1)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
try {
|
|
106
|
+
await main()
|
|
107
|
+
} catch (err) {
|
|
108
|
+
if (err.name === 'ExitPromptError') {
|
|
109
|
+
console.log()
|
|
110
|
+
console.log(chalk.yellow('Cancelled.'))
|
|
111
|
+
} else {
|
|
112
|
+
console.error(chalk.red('\nUnexpected error:'), err.message)
|
|
113
|
+
exit(1)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exit()
|
package/cli/presets/clean.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
{
|
|
2
|
-
"preserve": ["DESIGN.md", "ARCHITECTURE.md", "openspec"],
|
|
3
|
-
"detectFiles": [
|
|
4
|
-
"AGENTS.md",
|
|
5
|
-
"CLAUDE.md",
|
|
6
|
-
"ARCHITECTURE.md",
|
|
7
|
-
"DESIGN.md",
|
|
8
|
-
".cursorrules",
|
|
9
|
-
".clinerules",
|
|
10
|
-
".windsurfrules",
|
|
11
|
-
".github/copilot-instructions.md",
|
|
12
|
-
"copilot-instructions.md",
|
|
13
|
-
".aider.conf.yml",
|
|
14
|
-
".aider",
|
|
15
|
-
".opencode",
|
|
16
|
-
".agents"
|
|
17
|
-
],
|
|
18
|
-
"directoryTargets": [".opencode", ".agents"],
|
|
19
|
-
"preserveSubfolders": ["skills"],
|
|
20
|
-
"selectionMessage": "Select AI config files to remove:"
|
|
21
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"preserve": ["DESIGN.md", "ARCHITECTURE.md", "openspec"],
|
|
3
|
+
"detectFiles": [
|
|
4
|
+
"AGENTS.md",
|
|
5
|
+
"CLAUDE.md",
|
|
6
|
+
"ARCHITECTURE.md",
|
|
7
|
+
"DESIGN.md",
|
|
8
|
+
".cursorrules",
|
|
9
|
+
".clinerules",
|
|
10
|
+
".windsurfrules",
|
|
11
|
+
".github/copilot-instructions.md",
|
|
12
|
+
"copilot-instructions.md",
|
|
13
|
+
".aider.conf.yml",
|
|
14
|
+
".aider",
|
|
15
|
+
".opencode",
|
|
16
|
+
".agents"
|
|
17
|
+
],
|
|
18
|
+
"directoryTargets": [".opencode", ".agents"],
|
|
19
|
+
"preserveSubfolders": ["skills"],
|
|
20
|
+
"selectionMessage": "Select AI config files to remove:"
|
|
21
|
+
}
|
package/cli/presets/models.json
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
{
|
|
2
|
-
"costTiers": [
|
|
3
|
-
{ "max": 1, "label": "[$]" },
|
|
4
|
-
{ "max": 10, "label": "[$$]" },
|
|
5
|
-
{ "label": "[$$$]" }
|
|
6
|
-
],
|
|
7
|
-
"providers": [
|
|
8
|
-
{ "value": "opencode", "name": "OpenCode Zen" },
|
|
9
|
-
{ "value": "opencode-go", "name": "OpenCode Go" },
|
|
10
|
-
{ "value": "github-copilot", "name": "GitHub Copilot" },
|
|
11
|
-
{ "value": "anthropic", "name": "Anthropic" },
|
|
12
|
-
{ "value": "google", "name": "Google" },
|
|
13
|
-
{ "value": "openai", "name": "OpenAI" },
|
|
14
|
-
{ "value": "deepseek", "name": "DeepSeek" },
|
|
15
|
-
{ "value": "", "name": "Other (show all)" }
|
|
16
|
-
],
|
|
17
|
-
"roles": {
|
|
18
|
-
"plan": {
|
|
19
|
-
"prompt": "Plan model:",
|
|
20
|
-
"info": [
|
|
21
|
-
"PLAN: main session: reads issues, writes proposals, coordinates the agent team.",
|
|
22
|
-
"Needs to be strong. A weak model here will silently skip steps and break the workflow."
|
|
23
|
-
],
|
|
24
|
-
"suggestions": {
|
|
25
|
-
"opencode": "opencode/claude-sonnet-4",
|
|
26
|
-
"opencode-go": null,
|
|
27
|
-
"github-copilot": "github-copilot/claude-sonnet-4.5",
|
|
28
|
-
"anthropic": "anthropic/claude-sonnet-4-5",
|
|
29
|
-
"google": "google/gemini-2.5-pro",
|
|
30
|
-
"openai": "openai/o3",
|
|
31
|
-
"deepseek": null
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
"build": {
|
|
35
|
-
"prompt": "Build model:",
|
|
36
|
-
"info": [
|
|
37
|
-
"BUILD: engineers: implements code, runs tests, commits.",
|
|
38
|
-
"Code quality matters here. DeepSeek V4 is outstanding value. Claude Sonnet is the gold standard."
|
|
39
|
-
],
|
|
40
|
-
"suggestions": {
|
|
41
|
-
"opencode": "opencode/deepseek-v4-flash",
|
|
42
|
-
"opencode-go": "opencode-go/deepseek-v4-pro",
|
|
43
|
-
"github-copilot": "github-copilot/claude-sonnet-4.5",
|
|
44
|
-
"anthropic": "anthropic/claude-sonnet-4-5",
|
|
45
|
-
"google": "google/gemini-2.5-flash",
|
|
46
|
-
"openai": "openai/gpt-4.1",
|
|
47
|
-
"deepseek": "deepseek/deepseek-v4-pro"
|
|
48
|
-
},
|
|
49
|
-
"agents": ["fullstack-engineer"]
|
|
50
|
-
},
|
|
51
|
-
"fast": {
|
|
52
|
-
"prompt": "Fast model:",
|
|
53
|
-
"info": [
|
|
54
|
-
"FAST: light commands: /pc-pullrequest, /pc-explore, /pc-archive, status checks.",
|
|
55
|
-
"No heavy reasoning needed. Cheap and fast is the right call here."
|
|
56
|
-
],
|
|
57
|
-
"suggestions": {
|
|
58
|
-
"opencode": "opencode/glm-4.7",
|
|
59
|
-
"opencode-go": "opencode-go/qwen3.6-plus",
|
|
60
|
-
"github-copilot": "github-copilot/gpt-5.4-nano",
|
|
61
|
-
"anthropic": "anthropic/claude-haiku-4-5",
|
|
62
|
-
"google": "google/gemini-2.0-flash",
|
|
63
|
-
"openai": "openai/gpt-4o-mini",
|
|
64
|
-
"deepseek": null
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"costTiers": [
|
|
3
|
+
{ "max": 1, "label": "[$]" },
|
|
4
|
+
{ "max": 10, "label": "[$$]" },
|
|
5
|
+
{ "label": "[$$$]" }
|
|
6
|
+
],
|
|
7
|
+
"providers": [
|
|
8
|
+
{ "value": "opencode", "name": "OpenCode Zen" },
|
|
9
|
+
{ "value": "opencode-go", "name": "OpenCode Go" },
|
|
10
|
+
{ "value": "github-copilot", "name": "GitHub Copilot" },
|
|
11
|
+
{ "value": "anthropic", "name": "Anthropic" },
|
|
12
|
+
{ "value": "google", "name": "Google" },
|
|
13
|
+
{ "value": "openai", "name": "OpenAI" },
|
|
14
|
+
{ "value": "deepseek", "name": "DeepSeek" },
|
|
15
|
+
{ "value": "", "name": "Other (show all)" }
|
|
16
|
+
],
|
|
17
|
+
"roles": {
|
|
18
|
+
"plan": {
|
|
19
|
+
"prompt": "Plan model:",
|
|
20
|
+
"info": [
|
|
21
|
+
"PLAN: main session: reads issues, writes proposals, coordinates the agent team.",
|
|
22
|
+
"Needs to be strong. A weak model here will silently skip steps and break the workflow."
|
|
23
|
+
],
|
|
24
|
+
"suggestions": {
|
|
25
|
+
"opencode": "opencode/claude-sonnet-4",
|
|
26
|
+
"opencode-go": null,
|
|
27
|
+
"github-copilot": "github-copilot/claude-sonnet-4.5",
|
|
28
|
+
"anthropic": "anthropic/claude-sonnet-4-5",
|
|
29
|
+
"google": "google/gemini-2.5-pro",
|
|
30
|
+
"openai": "openai/o3",
|
|
31
|
+
"deepseek": null
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"build": {
|
|
35
|
+
"prompt": "Build model:",
|
|
36
|
+
"info": [
|
|
37
|
+
"BUILD: engineers: implements code, runs tests, commits.",
|
|
38
|
+
"Code quality matters here. DeepSeek V4 is outstanding value. Claude Sonnet is the gold standard."
|
|
39
|
+
],
|
|
40
|
+
"suggestions": {
|
|
41
|
+
"opencode": "opencode/deepseek-v4-flash",
|
|
42
|
+
"opencode-go": "opencode-go/deepseek-v4-pro",
|
|
43
|
+
"github-copilot": "github-copilot/claude-sonnet-4.5",
|
|
44
|
+
"anthropic": "anthropic/claude-sonnet-4-5",
|
|
45
|
+
"google": "google/gemini-2.5-flash",
|
|
46
|
+
"openai": "openai/gpt-4.1",
|
|
47
|
+
"deepseek": "deepseek/deepseek-v4-pro"
|
|
48
|
+
},
|
|
49
|
+
"agents": ["fullstack-engineer"]
|
|
50
|
+
},
|
|
51
|
+
"fast": {
|
|
52
|
+
"prompt": "Fast model:",
|
|
53
|
+
"info": [
|
|
54
|
+
"FAST: light commands: /pc-pullrequest, /pc-explore, /pc-archive, status checks.",
|
|
55
|
+
"No heavy reasoning needed. Cheap and fast is the right call here."
|
|
56
|
+
],
|
|
57
|
+
"suggestions": {
|
|
58
|
+
"opencode": "opencode/glm-4.7",
|
|
59
|
+
"opencode-go": "opencode-go/qwen3.6-plus",
|
|
60
|
+
"github-copilot": "github-copilot/gpt-5.4-nano",
|
|
61
|
+
"anthropic": "anthropic/claude-haiku-4-5",
|
|
62
|
+
"google": "google/gemini-2.0-flash",
|
|
63
|
+
"openai": "openai/gpt-4o-mini",
|
|
64
|
+
"deepseek": null
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
{
|
|
2
|
-
"message": "Enable tools:",
|
|
3
|
-
"info": "Choose which optimization tools to enable (recommended: all).",
|
|
4
|
-
"timeoutMs": 30000,
|
|
5
|
-
"choices": [
|
|
6
|
-
{
|
|
7
|
-
"name": "RTK check (recommended)",
|
|
8
|
-
"value": "rtk",
|
|
9
|
-
"checked": true
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"name": "Simple English concise mode (recommended)",
|
|
13
|
-
"value": "simpleEnglish",
|
|
14
|
-
"checked": true
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"name": "codegraph semantic index (recommended)",
|
|
18
|
-
"value": "codegraph",
|
|
19
|
-
"checked": true
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"name": "agentmemory local memory server",
|
|
23
|
-
"value": "memory",
|
|
24
|
-
"checked": true
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"name": "humanizer skill (removes AI writing patterns)",
|
|
28
|
-
"value": "humanizer",
|
|
29
|
-
"checked": true
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"message": "Enable tools:",
|
|
3
|
+
"info": "Choose which optimization tools to enable (recommended: all).",
|
|
4
|
+
"timeoutMs": 30000,
|
|
5
|
+
"choices": [
|
|
6
|
+
{
|
|
7
|
+
"name": "RTK check (recommended)",
|
|
8
|
+
"value": "rtk",
|
|
9
|
+
"checked": true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "Simple English concise mode (recommended)",
|
|
13
|
+
"value": "simpleEnglish",
|
|
14
|
+
"checked": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "codegraph semantic index (recommended)",
|
|
18
|
+
"value": "codegraph",
|
|
19
|
+
"checked": true
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "agentmemory local memory server",
|
|
23
|
+
"value": "memory",
|
|
24
|
+
"checked": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "humanizer skill (removes AI writing patterns)",
|
|
28
|
+
"value": "humanizer",
|
|
29
|
+
"checked": true
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"value": "github",
|
|
4
|
-
"name": "GitHub",
|
|
5
|
-
"cli": {
|
|
6
|
-
"command": "gh",
|
|
7
|
-
"displayName": "GitHub CLI (gh)",
|
|
8
|
-
"installUrl": "https://cli.github.com",
|
|
9
|
-
"authCheck": {
|
|
10
|
-
"args": ["auth", "status"],
|
|
11
|
-
"notAuthenticatedMessage": "GitHub CLI not authenticated. Run:",
|
|
12
|
-
"commands": ["gh auth login"]
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"value": "azure",
|
|
18
|
-
"name": "Azure DevOps",
|
|
19
|
-
"cli": {
|
|
20
|
-
"command": "az",
|
|
21
|
-
"displayName": "Azure CLI (az)",
|
|
22
|
-
"installUrl": "https://learn.microsoft.com/en-us/cli/azure/install-azure-cli",
|
|
23
|
-
"extensionCheck": {
|
|
24
|
-
"args": ["extension", "list", "--query", "[?name=='azure-devops']", "-o", "tsv"],
|
|
25
|
-
"expectedOutput": "azure-devops",
|
|
26
|
-
"missingMessage": "azure-devops extension not found. Run:",
|
|
27
|
-
"errorMessage": "Could not check azure-devops extension. Run:",
|
|
28
|
-
"commands": [
|
|
29
|
-
"az extension add --name azure-devops",
|
|
30
|
-
"az config set extension.dynamic_install_allow_preview=true",
|
|
31
|
-
"az login",
|
|
32
|
-
"az devops login --organization https://dev.azure.com/<your-org>"
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"value": "jira",
|
|
39
|
-
"name": "Jira (Atlassian)",
|
|
40
|
-
"backlogOnly": true,
|
|
41
|
-
"cli": {
|
|
42
|
-
"command": "acli",
|
|
43
|
-
"displayName": "Atlassian CLI (acli)",
|
|
44
|
-
"installUrl": "https://developer.atlassian.com/cloud/acli/guides/install-acli/",
|
|
45
|
-
"authCheck": {
|
|
46
|
-
"args": ["jira", "auth", "status"],
|
|
47
|
-
"notAuthenticatedMessage": "Atlassian CLI not authenticated. Run:",
|
|
48
|
-
"commands": ["acli jira auth login --site <yoursite>.atlassian.net --email <email> --token"]
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"value": "gitlab",
|
|
54
|
-
"name": "GitLab",
|
|
55
|
-
"repoOnly": true,
|
|
56
|
-
"cli": {
|
|
57
|
-
"command": "glab",
|
|
58
|
-
"displayName": "GitLab CLI (glab)",
|
|
59
|
-
"installUrl": "https://gitlab.com/gitlab-org/cli/#installation",
|
|
60
|
-
"authCheck": {
|
|
61
|
-
"args": ["auth", "status"],
|
|
62
|
-
"notAuthenticatedMessage": "GitLab CLI not authenticated. Run:",
|
|
63
|
-
"commands": ["glab auth login"]
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
"value": "browser",
|
|
69
|
-
"name": "Others (Browser)",
|
|
70
|
-
"backlogOnly": true
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"value": "none",
|
|
74
|
-
"name": "None"
|
|
75
|
-
}
|
|
76
|
-
]
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"value": "github",
|
|
4
|
+
"name": "GitHub",
|
|
5
|
+
"cli": {
|
|
6
|
+
"command": "gh",
|
|
7
|
+
"displayName": "GitHub CLI (gh)",
|
|
8
|
+
"installUrl": "https://cli.github.com",
|
|
9
|
+
"authCheck": {
|
|
10
|
+
"args": ["auth", "status"],
|
|
11
|
+
"notAuthenticatedMessage": "GitHub CLI not authenticated. Run:",
|
|
12
|
+
"commands": ["gh auth login"]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"value": "azure",
|
|
18
|
+
"name": "Azure DevOps",
|
|
19
|
+
"cli": {
|
|
20
|
+
"command": "az",
|
|
21
|
+
"displayName": "Azure CLI (az)",
|
|
22
|
+
"installUrl": "https://learn.microsoft.com/en-us/cli/azure/install-azure-cli",
|
|
23
|
+
"extensionCheck": {
|
|
24
|
+
"args": ["extension", "list", "--query", "[?name=='azure-devops']", "-o", "tsv"],
|
|
25
|
+
"expectedOutput": "azure-devops",
|
|
26
|
+
"missingMessage": "azure-devops extension not found. Run:",
|
|
27
|
+
"errorMessage": "Could not check azure-devops extension. Run:",
|
|
28
|
+
"commands": [
|
|
29
|
+
"az extension add --name azure-devops",
|
|
30
|
+
"az config set extension.dynamic_install_allow_preview=true",
|
|
31
|
+
"az login",
|
|
32
|
+
"az devops login --organization https://dev.azure.com/<your-org>"
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"value": "jira",
|
|
39
|
+
"name": "Jira (Atlassian)",
|
|
40
|
+
"backlogOnly": true,
|
|
41
|
+
"cli": {
|
|
42
|
+
"command": "acli",
|
|
43
|
+
"displayName": "Atlassian CLI (acli)",
|
|
44
|
+
"installUrl": "https://developer.atlassian.com/cloud/acli/guides/install-acli/",
|
|
45
|
+
"authCheck": {
|
|
46
|
+
"args": ["jira", "auth", "status"],
|
|
47
|
+
"notAuthenticatedMessage": "Atlassian CLI not authenticated. Run:",
|
|
48
|
+
"commands": ["acli jira auth login --site <yoursite>.atlassian.net --email <email> --token"]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"value": "gitlab",
|
|
54
|
+
"name": "GitLab",
|
|
55
|
+
"repoOnly": true,
|
|
56
|
+
"cli": {
|
|
57
|
+
"command": "glab",
|
|
58
|
+
"displayName": "GitLab CLI (glab)",
|
|
59
|
+
"installUrl": "https://gitlab.com/gitlab-org/cli/#installation",
|
|
60
|
+
"authCheck": {
|
|
61
|
+
"args": ["auth", "status"],
|
|
62
|
+
"notAuthenticatedMessage": "GitLab CLI not authenticated. Run:",
|
|
63
|
+
"commands": ["glab auth login"]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"value": "browser",
|
|
69
|
+
"name": "Others (Browser)",
|
|
70
|
+
"backlogOnly": true
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"value": "none",
|
|
74
|
+
"name": "None"
|
|
75
|
+
}
|
|
76
|
+
]
|