@plainconceptsplatform/agent-harness 3.8.2 → 3.8.3
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 +551 -549
- 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/update.js +121 -121
- package/cli/commands/wizard.js +134 -134
- package/cli/fragments/archive/az.md +97 -97
- package/cli/fragments/archive/gh.md +96 -96
- package/cli/fragments/archive/gl.md +96 -96
- package/cli/fragments/archive/none.md +75 -75
- package/cli/fragments/guardrails/codegraph.md +5 -5
- package/cli/fragments/guardrails/humanizer.md +4 -4
- package/cli/fragments/guardrails/memory.md +4 -4
- package/cli/fragments/guardrails/rtk.md +3 -3
- package/cli/fragments/guardrails/simple-english.md +4 -4
- 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/az.md +81 -81
- 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/agents-content.json +34 -34
- package/cli/presets/browser.json +10 -10
- 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/browser/index.js +48 -48
- package/cli/steps/clean/index.js +120 -120
- package/cli/steps/copy/agents.js +176 -160
- package/cli/steps/copy/commands.js +79 -79
- package/cli/steps/copy/fullstack-engineer.js +89 -89
- package/cli/steps/copy/index.js +88 -88
- package/cli/steps/copy/opencode-json.js +324 -324
- package/cli/steps/copy/skills.js +316 -316
- package/cli/steps/metadata/index.js +115 -115
- package/cli/steps/models/format.js +88 -88
- package/cli/steps/models/index.js +64 -64
- package/cli/steps/models/write.js +38 -38
- 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 +82 -82
- 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 -10
- package/harness/.opencode/commands/init.md +5 -5
- package/harness/.opencode/commands/make-architecture.md +5 -5
- package/harness/.opencode/commands/make-design.md +5 -5
- package/harness/.opencode/commands/make-engineer.md +5 -5
- package/harness/.opencode/commands/make-guardrails.md +5 -5
- package/harness/.opencode/commands/make-user-model.md +5 -5
- package/harness/.opencode/commands/ops-backlog.md +10 -10
- package/harness/.opencode/commands/ops-review.md +10 -10
- package/harness/.opencode/commands/ops-ship.md +9 -9
- package/harness/.opencode/commands/plan-apply.md +9 -9
- package/harness/.opencode/commands/plan-archive.md +7 -7
- package/harness/.opencode/commands/plan-explore.md +11 -11
- package/harness/.opencode/commands/plan-goal.md +5 -5
- package/harness/.opencode/commands/plan-propose.md +11 -11
- package/harness/.opencode/commands/plan-quick.md +7 -7
- package/harness/.opencode/commands/plan-story.md +11 -11
- package/harness/.opencode/commands/repo-audit.md +7 -7
- package/harness/.opencode/commands/repo-help.md +5 -5
- package/harness/.opencode/commands/repo-initialize.md +5 -5
- package/harness/.opencode/commands/repo-onboard.md +5 -5
- package/harness/.opencode/commands/repo-verify.md +5 -5
- package/harness/.opencode/package.json +5 -5
- package/harness/.opencode/plugins/pc-commit-coauthor.js +41 -41
- package/harness/.opencode/plugins/pc-subagent-monitor.js +184 -184
- package/harness/.opencode/plugins/pc-subagent-tiers.js +367 -367
- package/harness/.opencode/plugins/pc-system-reminders.js +424 -424
- package/harness/.opencode/scripts/check-diff.mjs +305 -305
- package/harness/.opencode/scripts/code-rules.mjs +288 -288
- package/harness/.opencode/scripts/platform-contract.mjs +366 -366
- package/harness/AGENTS.md +55 -49
- 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/README.md +18 -18
- package/skills/agent-harness-cli/SKILL.md +86 -86
- package/skills/browser-automation/SKILL.md +72 -72
- package/skills/pc-guardrails-generic/SKILL.md +53 -53
- package/skills/pc-guardrails-project/SKILL.md +8 -8
- package/skills/pc-make-architecture/SKILL.md +33 -33
- package/skills/pc-make-architecture/structure-template.md +64 -64
- package/skills/pc-make-design/SKILL.md +45 -45
- package/skills/pc-make-engineer/SKILL.md +59 -59
- package/skills/pc-make-engineer/signal-mapping.md +53 -53
- package/skills/pc-make-engineer/template.md +36 -36
- package/skills/pc-make-guardrails/SKILL.md +44 -44
- 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-make-user-model/SKILL.md +56 -56
- package/skills/pc-ops-ship/SKILL.md +22 -22
- package/skills/pc-plan-apply/SKILL.md +90 -90
- package/skills/pc-plan-apply/simple-mode.md +21 -21
- package/skills/pc-plan-archive/SKILL.md +66 -66
- package/skills/pc-plan-explore/SKILL.md +21 -21
- package/skills/pc-plan-goal/SKILL.md +91 -91
- package/skills/pc-plan-goal/branching.md +39 -39
- package/skills/pc-plan-goal/failure-policy.md +30 -30
- package/skills/pc-plan-goal/output-mode.md +10 -10
- package/skills/pc-plan-goal/output.md +71 -71
- package/skills/pc-plan-propose/SKILL.md +127 -127
- package/skills/pc-plan-propose/task-annotation.md +39 -39
- package/skills/pc-plan-quick/SKILL.md +46 -46
- package/skills/pc-plan-story/SKILL.md +93 -93
- package/skills/pc-repo-audit/SKILL.md +44 -44
- package/skills/pc-repo-help/SKILL.md +87 -87
- package/skills/pc-repo-initialize/SKILL.md +119 -119
- package/skills/pc-repo-onboard/SKILL.md +32 -32
- package/skills/pc-repo-verify/SKILL.md +150 -150
- package/skills/pc-userstory-az/SKILL.md +71 -71
- package/skills/pc-userstory-browser/SKILL.md +64 -64
- package/skills/pc-userstory-gh/SKILL.md +63 -63
- package/skills/pc-userstory-jira/SKILL.md +74 -74
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
|
+
]
|
package/cli/presets/source.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
{
|
|
2
|
-
"message": "Source code location:",
|
|
3
|
-
"default": "current",
|
|
4
|
-
"choices": [
|
|
5
|
-
{
|
|
6
|
-
"name": "Current folder (default)",
|
|
7
|
-
"value": "current",
|
|
8
|
-
"description": "Use this repository only"
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"name": "Select folders in parent (../)",
|
|
12
|
-
"value": "parent",
|
|
13
|
-
"description": "Use when this repo only contains agent config"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"name": "Select child folders (./*/)",
|
|
17
|
-
"value": "children",
|
|
18
|
-
"description": "Use when source code lives in subdirectories of this repo"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"parentSelectionMessage": "Select source folders from parent directory:",
|
|
22
|
-
"childrenSelectionMessage": "Select child folders to include as source:"
|
|
23
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"message": "Source code location:",
|
|
3
|
+
"default": "current",
|
|
4
|
+
"choices": [
|
|
5
|
+
{
|
|
6
|
+
"name": "Current folder (default)",
|
|
7
|
+
"value": "current",
|
|
8
|
+
"description": "Use this repository only"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "Select folders in parent (../)",
|
|
12
|
+
"value": "parent",
|
|
13
|
+
"description": "Use when this repo only contains agent config"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "Select child folders (./*/)",
|
|
17
|
+
"value": "children",
|
|
18
|
+
"description": "Use when source code lives in subdirectories of this repo"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"parentSelectionMessage": "Select source folders from parent directory:",
|
|
22
|
+
"childrenSelectionMessage": "Select child folders to include as source:"
|
|
23
|
+
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { execa } from 'execa'
|
|
2
|
-
import fse from 'fs-extra'
|
|
3
|
-
import { header, info, success, warn, error } from '../../utils/exec.js'
|
|
4
|
-
import os from 'os'
|
|
5
|
-
import path from 'path'
|
|
6
|
-
import { fileURLToPath } from 'url'
|
|
7
|
-
|
|
8
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
9
|
-
const BROWSER_PRESET_PATH = path.resolve(__dirname, '../../presets/browser.json')
|
|
10
|
-
const browserPreset = await fse.readJson(BROWSER_PRESET_PATH)
|
|
11
|
-
|
|
12
|
-
export async function installBrowser() {
|
|
13
|
-
header('Step 9, Installing agent-browser')
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
const install = await execa(browserPreset.installer.command, browserPreset.installer.args, {
|
|
17
|
-
cwd: os.homedir(),
|
|
18
|
-
reject: false,
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
if (install.exitCode !== 0) {
|
|
22
|
-
warn('agent-browser npm install exited with non-zero code')
|
|
23
|
-
if (install.stderr) info(install.stderr)
|
|
24
|
-
return
|
|
25
|
-
}
|
|
26
|
-
success('agent-browser installed')
|
|
27
|
-
} catch (err) {
|
|
28
|
-
error(`Failed to install agent-browser: ${err.message}`)
|
|
29
|
-
return
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
try {
|
|
33
|
-
const chrome = await execa(browserPreset.chromeSetup.command, browserPreset.chromeSetup.args, {
|
|
34
|
-
cwd: os.homedir(),
|
|
35
|
-
reject: false,
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
if (chrome.exitCode === 0) {
|
|
39
|
-
success('agent-browser Chrome ready')
|
|
40
|
-
if (chrome.stdout) info(chrome.stdout.trim())
|
|
41
|
-
} else {
|
|
42
|
-
warn('agent-browser install (Chrome setup) exited with non-zero code')
|
|
43
|
-
if (chrome.stderr) info(chrome.stderr)
|
|
44
|
-
}
|
|
45
|
-
} catch (err) {
|
|
46
|
-
error(`Failed to set up Chrome for agent-browser: ${err.message}`)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
import { execa } from 'execa'
|
|
2
|
+
import fse from 'fs-extra'
|
|
3
|
+
import { header, info, success, warn, error } from '../../utils/exec.js'
|
|
4
|
+
import os from 'os'
|
|
5
|
+
import path from 'path'
|
|
6
|
+
import { fileURLToPath } from 'url'
|
|
7
|
+
|
|
8
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
9
|
+
const BROWSER_PRESET_PATH = path.resolve(__dirname, '../../presets/browser.json')
|
|
10
|
+
const browserPreset = await fse.readJson(BROWSER_PRESET_PATH)
|
|
11
|
+
|
|
12
|
+
export async function installBrowser() {
|
|
13
|
+
header('Step 9, Installing agent-browser')
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
const install = await execa(browserPreset.installer.command, browserPreset.installer.args, {
|
|
17
|
+
cwd: os.homedir(),
|
|
18
|
+
reject: false,
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
if (install.exitCode !== 0) {
|
|
22
|
+
warn('agent-browser npm install exited with non-zero code')
|
|
23
|
+
if (install.stderr) info(install.stderr)
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
success('agent-browser installed')
|
|
27
|
+
} catch (err) {
|
|
28
|
+
error(`Failed to install agent-browser: ${err.message}`)
|
|
29
|
+
return
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
const chrome = await execa(browserPreset.chromeSetup.command, browserPreset.chromeSetup.args, {
|
|
34
|
+
cwd: os.homedir(),
|
|
35
|
+
reject: false,
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
if (chrome.exitCode === 0) {
|
|
39
|
+
success('agent-browser Chrome ready')
|
|
40
|
+
if (chrome.stdout) info(chrome.stdout.trim())
|
|
41
|
+
} else {
|
|
42
|
+
warn('agent-browser install (Chrome setup) exited with non-zero code')
|
|
43
|
+
if (chrome.stderr) info(chrome.stderr)
|
|
44
|
+
}
|
|
45
|
+
} catch (err) {
|
|
46
|
+
error(`Failed to set up Chrome for agent-browser: ${err.message}`)
|
|
47
|
+
}
|
|
48
|
+
}
|