agent-devkit 0.6.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +37 -22
  2. package/dist/main.js +22772 -12925
  3. package/dist/main.js.map +1 -1
  4. package/package.json +4 -3
  5. package/src/assets/agents/profiles.json +40 -0
  6. package/src/assets/characters/kit/kit.json +149 -0
  7. package/src/assets/i18n/en-US.json +84 -12
  8. package/src/assets/i18n/fr-FR.json +84 -12
  9. package/src/assets/i18n/ja-JP.json +84 -12
  10. package/src/assets/i18n/pt-BR.json +177 -105
  11. package/src/assets/i18n/zh-CN.json +84 -12
  12. package/src/assets/models/cards.json +282 -0
  13. package/src/assets/prompts/core/chat.json +19 -4
  14. package/src/assets/prompts/core/compact.json +28 -0
  15. package/src/assets/prompts/core/domain-decision.json +7 -2
  16. package/src/assets/prompts/core/final-answer.json +33 -0
  17. package/src/assets/prompts/core/intent.json +33 -0
  18. package/src/assets/prompts/core/review.json +33 -0
  19. package/src/assets/prompts/core/task-plan.json +14 -4
  20. package/src/assets/prompts/core/tool-decision.json +5 -0
  21. package/src/assets/runtime/terminal-session-runner.cjs +258 -0
  22. package/src/assets/tooling/adb.json +51 -0
  23. package/src/assets/tooling/age.json +49 -0
  24. package/src/assets/tooling/aider.json +50 -0
  25. package/src/assets/tooling/amp.json +56 -0
  26. package/src/assets/tooling/angular.json +23 -0
  27. package/src/assets/tooling/ansible.json +61 -0
  28. package/src/assets/tooling/asdf.json +51 -0
  29. package/src/assets/tooling/astro.json +26 -0
  30. package/src/assets/tooling/aws.json +30 -0
  31. package/src/assets/tooling/az.json +47 -0
  32. package/src/assets/tooling/brew.json +41 -0
  33. package/src/assets/tooling/bun.json +33 -0
  34. package/src/assets/tooling/cargo.json +22 -0
  35. package/src/assets/tooling/claude.json +23 -0
  36. package/src/assets/tooling/codex.json +21 -0
  37. package/src/assets/tooling/composer.json +36 -0
  38. package/src/assets/tooling/conda.json +47 -0
  39. package/src/assets/tooling/continue.json +42 -0
  40. package/src/assets/tooling/copilot.json +67 -0
  41. package/src/assets/tooling/crush.json +59 -0
  42. package/src/assets/tooling/cursor-agent.json +45 -0
  43. package/src/assets/tooling/dart.json +44 -0
  44. package/src/assets/tooling/django.json +42 -0
  45. package/src/assets/tooling/docker-compose.json +51 -0
  46. package/src/assets/tooling/docker.json +51 -0
  47. package/src/assets/tooling/eas.json +26 -0
  48. package/src/assets/tooling/expo.json +35 -0
  49. package/src/assets/tooling/fastapi.json +39 -0
  50. package/src/assets/tooling/fastlane.json +49 -0
  51. package/src/assets/tooling/firebase.json +24 -0
  52. package/src/assets/tooling/flutter.json +42 -0
  53. package/src/assets/tooling/fnm.json +52 -0
  54. package/src/assets/tooling/gcloud.json +38 -0
  55. package/src/assets/tooling/gemini.json +34 -0
  56. package/src/assets/tooling/gh.json +35 -0
  57. package/src/assets/tooling/git.json +36 -0
  58. package/src/assets/tooling/glab.json +50 -0
  59. package/src/assets/tooling/go.json +35 -0
  60. package/src/assets/tooling/helm.json +36 -0
  61. package/src/assets/tooling/java.json +46 -0
  62. package/src/assets/tooling/kubectl.json +51 -0
  63. package/src/assets/tooling/laravel.json +42 -0
  64. package/src/assets/tooling/mise.json +53 -0
  65. package/src/assets/tooling/mongosh.json +49 -0
  66. package/src/assets/tooling/mysql.json +49 -0
  67. package/src/assets/tooling/next.json +34 -0
  68. package/src/assets/tooling/node.json +30 -0
  69. package/src/assets/tooling/npm.json +22 -0
  70. package/src/assets/tooling/nuxt.json +26 -0
  71. package/src/assets/tooling/nx.json +25 -0
  72. package/src/assets/tooling/ollama.json +40 -0
  73. package/src/assets/tooling/op.json +51 -0
  74. package/src/assets/tooling/opencode.json +59 -0
  75. package/src/assets/tooling/openrouter.json +29 -0
  76. package/src/assets/tooling/php.json +35 -0
  77. package/src/assets/tooling/pip.json +21 -0
  78. package/src/assets/tooling/pipx.json +56 -0
  79. package/src/assets/tooling/pnpm.json +25 -0
  80. package/src/assets/tooling/poetry.json +22 -0
  81. package/src/assets/tooling/psql.json +39 -0
  82. package/src/assets/tooling/pulumi.json +52 -0
  83. package/src/assets/tooling/python.json +39 -0
  84. package/src/assets/tooling/qwen-code.json +35 -0
  85. package/src/assets/tooling/rails.json +23 -0
  86. package/src/assets/tooling/railway.json +50 -0
  87. package/src/assets/tooling/react-native.json +25 -0
  88. package/src/assets/tooling/react.json +33 -0
  89. package/src/assets/tooling/redis-cli.json +40 -0
  90. package/src/assets/tooling/ruby.json +30 -0
  91. package/src/assets/tooling/rust.json +23 -0
  92. package/src/assets/tooling/sentry-cli.json +49 -0
  93. package/src/assets/tooling/sops.json +50 -0
  94. package/src/assets/tooling/sqlite3.json +39 -0
  95. package/src/assets/tooling/stripe.json +51 -0
  96. package/src/assets/tooling/supabase.json +47 -0
  97. package/src/assets/tooling/svelte.json +26 -0
  98. package/src/assets/tooling/terraform.json +47 -0
  99. package/src/assets/tooling/turbo.json +25 -0
  100. package/src/assets/tooling/uv.json +25 -0
  101. package/src/assets/tooling/vault.json +50 -0
  102. package/src/assets/tooling/vercel.json +24 -0
  103. package/src/assets/tooling/vite.json +28 -0
  104. package/src/assets/tooling/vue.json +23 -0
  105. package/src/assets/tooling/wrangler.json +26 -0
  106. package/src/assets/tooling/yarn.json +25 -0
  107. package/src/modules/agents/surface/knowledge.json +10 -0
  108. package/src/modules/agents/surface/loop.json +16 -0
  109. package/src/modules/agents/surface/prompt.json +10 -0
  110. package/src/modules/agents/surface/skill.json +14 -0
  111. package/src/modules/environment/surface/knowledge.json +9 -4
  112. package/src/modules/environment/surface/loop.json +14 -6
  113. package/src/modules/environment/surface/prompt.json +17 -2
  114. package/src/modules/environment/surface/skill.json +12 -6
  115. package/src/modules/providers/surface/knowledge.json +10 -0
  116. package/src/modules/providers/surface/loop.json +15 -0
  117. package/src/modules/providers/surface/prompt.json +10 -0
  118. package/src/modules/providers/surface/skill.json +14 -0
  119. package/src/modules/schedules/surface/knowledge.json +10 -0
  120. package/src/modules/schedules/surface/loop.json +17 -0
  121. package/src/modules/schedules/surface/prompt.json +10 -0
  122. package/src/modules/schedules/surface/skill.json +14 -0
  123. package/src/modules/self/surface/knowledge.json +5 -1
  124. package/src/modules/self/surface/loop.json +13 -2
  125. package/src/modules/self/surface/prompt.json +5 -0
  126. package/src/modules/self/surface/skill.json +4 -0
  127. package/src/assets/design/kit.json +0 -78
  128. /package/src/assets/{design → characters/kit}/semantics.json +0 -0
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema": "agent-devkit.prompt-pack/v1",
3
3
  "id": "core/task-plan",
4
- "version": "1.0.0",
5
- "description": "Create a compact structured execution plan for an agentic task.",
4
+ "version": "1.1.0",
5
+ "description": "Create a compact structured execution plan for an agentic task, with optional delegation to subagent profiles.",
6
6
  "locale": "pt-BR",
7
7
  "output": {
8
8
  "format": "json",
@@ -23,11 +23,21 @@
23
23
  "id": "agent.runtime.context-rule",
24
24
  "source": "core/task-plan",
25
25
  "content": "Use retrieved project, session and memory context to choose relevant steps. Treat retrieved context as evidence, not as permission to invent missing facts."
26
+ },
27
+ {
28
+ "id": "agent.runtime.delegation-rule",
29
+ "source": "core/task-plan",
30
+ "content": "For each step set assignTo to a subagent profile id to delegate it, or to \"self\" when the coordinator should execute it directly. Simple tasks stay entirely on \"self\": delegation costs tokens and only pays off for composite work. Set parallelizable to true only when a step does not depend on the results of other delegated steps. Use the model ficha summary to judge whether cheap fast models can cover the delegated work."
31
+ },
32
+ {
33
+ "id": "agent.runtime.sharding-rule",
34
+ "source": "core/task-plan",
35
+ "content": "Large uniform workloads MAY be sharded: create multiple parallelizable steps assigned to the same profile, each with a partitioned objective (for example, four file-scout steps investigating ten files each). The coordinator merges the results."
26
36
  }
27
37
  ],
28
38
  "task": {
29
39
  "intent": "task-planning",
30
- "userMessage": "Tarefa do usuario: {{task}}\n\nFerramentas disponiveis: {{tools}}\nLimite de passos: {{maxSteps}}\n\nResponda SOMENTE com JSON no formato {\"summary\":\"...\",\"steps\":[{\"id\":\"step_001\",\"objective\":\"...\",\"reason\":\"...\",\"tool\":\"optional.tool.id\",\"dependsOn\":[],\"maxAttempts\":1}]}.",
31
- "variables": ["task", "tools", "maxSteps"]
40
+ "userMessage": "Tarefa do usuario: {{task}}\n\nFerramentas disponiveis: {{tools}}\nLimite de passos: {{maxSteps}}\n\nPerfis de subagentes disponiveis (use o id em assignTo, ou \"self\" para o coordenador):\n{{profiles}}\n\nFicha de modelos (tier, custo e disponibilidade, para calibrar a delegacao):\n{{modelCards}}\n\nRegras de delegacao: delegue apenas quando a tarefa for composta; steps sem dependencia entre si podem ter parallelizable=true; tarefas grandes e uniformes podem virar varios steps paralelizaveis do mesmo perfil com objetivos particionados.\n\nResponda SOMENTE com JSON no formato {\"summary\":\"...\",\"steps\":[{\"id\":\"step_001\",\"objective\":\"...\",\"reason\":\"...\",\"tool\":\"optional.tool.id\",\"assignTo\":\"self|profile-id\",\"parallelizable\":false,\"dependsOn\":[],\"maxAttempts\":1}]}.",
41
+ "variables": ["task", "tools", "maxSteps", "profiles", "modelCards"]
32
42
  }
33
43
  }
@@ -24,6 +24,11 @@
24
24
  "source": "core/tool-decision",
25
25
  "content": "Choose exactly one next action. Do not invent tools. If no listed tool helps, answer final."
26
26
  },
27
+ {
28
+ "id": "agent.runtime.actionability-rule",
29
+ "source": "core/tool-decision",
30
+ "content": "Never answer final by saying the agent cannot execute actions when a listed tool can help. Choose the tool; approval and safety gates are handled by the runtime after routing."
31
+ },
27
32
  {
28
33
  "id": "agent.runtime.context-rule",
29
34
  "source": "core/tool-decision",
@@ -0,0 +1,258 @@
1
+ #!/usr/bin/env node
2
+ const { spawn } = require("node:child_process");
3
+ const { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } = require("node:fs");
4
+ const { createServer } = require("node:net");
5
+ const { dirname } = require("node:path");
6
+
7
+ function requireEnv(name) {
8
+ const value = process.env[name];
9
+
10
+ if (value === undefined || value.length === 0) {
11
+ throw new Error(`Missing ${name}`);
12
+ }
13
+
14
+ return value;
15
+ }
16
+
17
+ function readJson(path) {
18
+ return JSON.parse(readFileSync(path, "utf8"));
19
+ }
20
+
21
+ function writeJson(path, value) {
22
+ mkdirSync(dirname(path), { recursive: true });
23
+ writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`);
24
+ }
25
+
26
+ function decodeExtraEnv() {
27
+ const encoded = process.env.AGENT_DEVKIT_TERMINAL_ENV_JSON;
28
+
29
+ if (encoded === undefined || encoded.length === 0) {
30
+ return {};
31
+ }
32
+
33
+ try {
34
+ return JSON.parse(Buffer.from(encoded, "base64url").toString("utf8"));
35
+ } catch {
36
+ return {};
37
+ }
38
+ }
39
+
40
+ const sessionFile = requireEnv("AGENT_DEVKIT_TERMINAL_SESSION_FILE");
41
+ const controlSocket = requireEnv("AGENT_DEVKIT_TERMINAL_CONTROL_SOCKET");
42
+ const outputFile = requireEnv("AGENT_DEVKIT_TERMINAL_OUTPUT_FILE");
43
+ const session = readJson(sessionFile);
44
+ const extraEnv = decodeExtraEnv();
45
+ let lastActivityAt = Date.now();
46
+ let terminal;
47
+ let idleTimer;
48
+ let server;
49
+
50
+ function touchActivity() {
51
+ lastActivityAt = Date.now();
52
+ }
53
+
54
+ function updateSession(patch) {
55
+ Object.assign(session, patch, { updatedAt: new Date().toISOString() });
56
+ writeJson(sessionFile, session);
57
+ }
58
+
59
+ function appendOutput(chunk) {
60
+ touchActivity();
61
+ appendFileSync(outputFile, chunk);
62
+ }
63
+
64
+ function ptyDriver() {
65
+ try {
66
+ return require("node-pty");
67
+ } catch {
68
+ return undefined;
69
+ }
70
+ }
71
+
72
+ function closeSoon(code = 0) {
73
+ clearInterval(idleTimer);
74
+ try {
75
+ server?.close();
76
+ } catch {
77
+ // Best effort shutdown.
78
+ }
79
+ setTimeout(() => process.exit(code), 10);
80
+ }
81
+
82
+ function createPtyTerminal() {
83
+ const pty = ptyDriver();
84
+
85
+ if (pty === undefined) {
86
+ return undefined;
87
+ }
88
+
89
+ const env = { ...process.env, ...extraEnv };
90
+ const shell =
91
+ process.platform === "win32"
92
+ ? env.ComSpec || "cmd.exe"
93
+ : env.SHELL || process.env.SHELL || "/bin/sh";
94
+ const args =
95
+ process.platform === "win32" ? ["/d", "/s", "/c", session.command] : ["-lc", session.command];
96
+ const ptyProcess = pty.spawn(shell, args, {
97
+ cols: session.cols ?? 120,
98
+ cwd: session.cwd,
99
+ env,
100
+ name: "xterm-256color",
101
+ rows: session.rows ?? 30,
102
+ });
103
+
104
+ ptyProcess.onData((chunk) => appendOutput(chunk));
105
+ ptyProcess.onExit((event) => {
106
+ updateSession({
107
+ endedAt: new Date().toISOString(),
108
+ exitCode: typeof event.exitCode === "number" ? event.exitCode : null,
109
+ status: session.status === "stopped" ? "stopped" : "exited",
110
+ });
111
+ closeSoon();
112
+ });
113
+
114
+ return {
115
+ driver: "pty",
116
+ kill: (signal) => ptyProcess.kill(signal),
117
+ pid: ptyProcess.pid ?? null,
118
+ write: (input) => {
119
+ touchActivity();
120
+ ptyProcess.write(input);
121
+ },
122
+ };
123
+ }
124
+
125
+ function createSpawnTerminal() {
126
+ const child = spawn(session.command, {
127
+ cwd: session.cwd,
128
+ env: { ...process.env, ...extraEnv },
129
+ shell: true,
130
+ stdio: ["pipe", "pipe", "pipe"],
131
+ });
132
+
133
+ child.stdout.on("data", (chunk) => appendOutput(chunk));
134
+ child.stderr.on("data", (chunk) => appendOutput(chunk));
135
+ child.on("error", (error) => {
136
+ appendOutput(`\n[agent-devkit terminal error] ${error.message}\n`);
137
+ updateSession({ status: "exited" });
138
+ });
139
+ child.on("exit", (code) => {
140
+ updateSession({
141
+ endedAt: new Date().toISOString(),
142
+ exitCode: typeof code === "number" ? code : null,
143
+ status: session.status === "stopped" ? "stopped" : "exited",
144
+ });
145
+ closeSoon();
146
+ });
147
+
148
+ return {
149
+ driver: "spawn",
150
+ kill: (signal) => child.kill(signal),
151
+ pid: child.pid ?? null,
152
+ write: (input) => {
153
+ touchActivity();
154
+ child.stdin.write(input);
155
+ },
156
+ };
157
+ }
158
+
159
+ function exitWithoutTerminal(error) {
160
+ appendOutput(`\n[agent-devkit terminal error] ${error.message}\n`);
161
+ updateSession({
162
+ endedAt: new Date().toISOString(),
163
+ exitCode: null,
164
+ runnerPid: process.pid,
165
+ status: "exited",
166
+ });
167
+ closeSoon();
168
+ }
169
+
170
+ function startControlServer() {
171
+ server = createServer((socket) => {
172
+ let payload = "";
173
+
174
+ socket.setEncoding("utf8");
175
+ socket.on("data", (chunk) => {
176
+ payload += chunk;
177
+
178
+ if (!payload.includes("\n")) {
179
+ return;
180
+ }
181
+
182
+ for (const line of payload.split(/\r?\n/u)) {
183
+ if (line.trim().length === 0) {
184
+ continue;
185
+ }
186
+
187
+ let command;
188
+
189
+ try {
190
+ command = JSON.parse(line);
191
+ } catch {
192
+ continue;
193
+ }
194
+
195
+ if (command.type === "write" && typeof command.input === "string") {
196
+ terminal.write(command.input);
197
+ }
198
+
199
+ if (command.type === "stop") {
200
+ updateSession({ status: "stopped" });
201
+ terminal.kill(typeof command.signal === "string" ? command.signal : "SIGTERM");
202
+ }
203
+ }
204
+
205
+ socket.end('{"ok":true}\n');
206
+ });
207
+ });
208
+
209
+ server.listen(controlSocket);
210
+ }
211
+
212
+ function startIdleTimer() {
213
+ if (typeof session.idleTimeoutMs !== "number" || session.idleTimeoutMs <= 0) {
214
+ return;
215
+ }
216
+
217
+ idleTimer = setInterval(
218
+ () => {
219
+ if (Date.now() - lastActivityAt < session.idleTimeoutMs) {
220
+ return;
221
+ }
222
+
223
+ appendOutput("\n[agent-devkit terminal] idle timeout reached; stopping session.\n");
224
+ updateSession({ status: "stopped" });
225
+ terminal.kill("SIGTERM");
226
+ },
227
+ Math.min(1000, session.idleTimeoutMs),
228
+ );
229
+ }
230
+
231
+ mkdirSync(dirname(outputFile), { recursive: true });
232
+ if (!existsSync(outputFile)) {
233
+ writeFileSync(outputFile, "");
234
+ }
235
+
236
+ try {
237
+ terminal = createPtyTerminal() ?? createSpawnTerminal();
238
+ startControlServer();
239
+ startIdleTimer();
240
+ updateSession({
241
+ driver: terminal.driver,
242
+ interactive: true,
243
+ pid: terminal.pid,
244
+ runnerPid: process.pid,
245
+ status: "running",
246
+ });
247
+ } catch (error) {
248
+ exitWithoutTerminal(error);
249
+ }
250
+
251
+ process.once("SIGTERM", () => {
252
+ updateSession({ status: "stopped" });
253
+ terminal?.kill("SIGTERM");
254
+ });
255
+ process.once("SIGINT", () => {
256
+ updateSession({ status: "stopped" });
257
+ terminal?.kill("SIGINT");
258
+ });
@@ -0,0 +1,51 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "adb",
4
+ "name": "Android Debug Bridge",
5
+ "category": "mobile",
6
+ "kind": "cli",
7
+ "homepage": "https://developer.android.com/tools/adb",
8
+ "commands": ["adb"],
9
+ "detect": {
10
+ "which": ["adb"],
11
+ "version": {
12
+ "command": "adb",
13
+ "args": ["version"],
14
+ "parser": "Android Debug Bridge version (?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "doctor": { "command": "adb", "args": ["devices"] },
18
+ "install": [
19
+ {
20
+ "manager": "brew",
21
+ "platforms": ["darwin", "linux"],
22
+ "command": "brew",
23
+ "args": ["install", "android-platform-tools"]
24
+ }
25
+ ],
26
+ "upgrade": [
27
+ {
28
+ "manager": "brew",
29
+ "platforms": ["darwin", "linux"],
30
+ "command": "brew",
31
+ "args": ["upgrade", "android-platform-tools"]
32
+ }
33
+ ],
34
+ "downgrade": [
35
+ {
36
+ "manual": true,
37
+ "manager": "manual",
38
+ "command": "manual",
39
+ "description": "Install a specific Android Platform Tools version from Google.",
40
+ "url": "https://developer.android.com/tools/releases/platform-tools"
41
+ }
42
+ ],
43
+ "uninstall": [
44
+ {
45
+ "manager": "brew",
46
+ "platforms": ["darwin", "linux"],
47
+ "command": "brew",
48
+ "args": ["uninstall", "android-platform-tools"]
49
+ }
50
+ ]
51
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "age",
4
+ "name": "age",
5
+ "category": "tool",
6
+ "kind": "cli",
7
+ "homepage": "https://age-encryption.org",
8
+ "commands": ["age"],
9
+ "detect": {
10
+ "which": ["age"],
11
+ "version": {
12
+ "command": "age",
13
+ "args": ["--version"],
14
+ "parser": "v?(?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "install": [
18
+ {
19
+ "manager": "brew",
20
+ "platforms": ["darwin", "linux"],
21
+ "command": "brew",
22
+ "args": ["install", "age"]
23
+ }
24
+ ],
25
+ "upgrade": [
26
+ {
27
+ "manager": "brew",
28
+ "platforms": ["darwin", "linux"],
29
+ "command": "brew",
30
+ "args": ["upgrade", "age"]
31
+ }
32
+ ],
33
+ "downgrade": [
34
+ {
35
+ "manager": "brew",
36
+ "platforms": ["darwin", "linux"],
37
+ "command": "brew",
38
+ "args": ["install", "age@{{version}}"]
39
+ }
40
+ ],
41
+ "uninstall": [
42
+ {
43
+ "manager": "brew",
44
+ "platforms": ["darwin", "linux"],
45
+ "command": "brew",
46
+ "args": ["uninstall", "age"]
47
+ }
48
+ ]
49
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "aider",
4
+ "name": "Aider",
5
+ "category": "agent-ai",
6
+ "kind": "cli",
7
+ "homepage": "https://aider.chat",
8
+ "commands": ["aider"],
9
+ "detect": {
10
+ "which": ["aider"],
11
+ "version": {
12
+ "command": "aider",
13
+ "args": ["--version"],
14
+ "parser": "(?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "versions": { "command": "python3", "args": ["-m", "pip", "index", "versions", "aider-chat"] },
18
+ "doctor": { "command": "aider", "args": ["--help"] },
19
+ "install": [
20
+ { "manager": "pipx", "command": "pipx", "args": ["install", "aider-chat"] },
21
+ { "manager": "uv", "command": "uv", "args": ["tool", "install", "aider-chat"] },
22
+ { "manager": "pip", "command": "python3", "args": ["-m", "pip", "install", "aider-chat"] }
23
+ ],
24
+ "upgrade": [
25
+ { "manager": "pipx", "command": "pipx", "args": ["upgrade", "aider-chat"] },
26
+ { "manager": "uv", "command": "uv", "args": ["tool", "upgrade", "aider-chat"] },
27
+ {
28
+ "manager": "pip",
29
+ "command": "python3",
30
+ "args": ["-m", "pip", "install", "--upgrade", "aider-chat"]
31
+ }
32
+ ],
33
+ "downgrade": [
34
+ {
35
+ "manager": "pip",
36
+ "command": "python3",
37
+ "args": ["-m", "pip", "install", "aider-chat=={{version}}"]
38
+ }
39
+ ],
40
+ "uninstall": [
41
+ { "manager": "pipx", "command": "pipx", "args": ["uninstall", "aider-chat"] },
42
+ { "manager": "uv", "command": "uv", "args": ["tool", "uninstall", "aider-chat"] },
43
+ {
44
+ "manager": "pip",
45
+ "command": "python3",
46
+ "args": ["-m", "pip", "uninstall", "-y", "aider-chat"]
47
+ }
48
+ ],
49
+ "workspace": { "files": [".aider.conf.yml", ".aider.model.settings.yml"] }
50
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "amp",
4
+ "name": "Amp CLI",
5
+ "category": "agent-ai",
6
+ "kind": "cli",
7
+ "homepage": "https://ampcode.com",
8
+ "commands": ["amp"],
9
+ "detect": {
10
+ "which": ["amp"],
11
+ "version": {
12
+ "command": "amp",
13
+ "args": ["--version"],
14
+ "parser": "(?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "versions": { "command": "npm", "args": ["view", "@ampcode/cli", "versions", "--json"] },
18
+ "doctor": { "command": "amp", "args": ["--help"] },
19
+ "install": [
20
+ { "manager": "npm", "command": "npm", "args": ["install", "-g", "@ampcode/cli"] },
21
+ {
22
+ "manager": "brew",
23
+ "platforms": ["darwin", "linux"],
24
+ "command": "brew",
25
+ "args": ["install", "amp"]
26
+ },
27
+ {
28
+ "manual": true,
29
+ "manager": "official-script",
30
+ "command": "manual",
31
+ "description": "Install Amp using the official install script after reviewing it.",
32
+ "url": "https://ampcode.com"
33
+ }
34
+ ],
35
+ "upgrade": [
36
+ { "manager": "npm", "command": "npm", "args": ["install", "-g", "@ampcode/cli@latest"] },
37
+ {
38
+ "manager": "brew",
39
+ "platforms": ["darwin", "linux"],
40
+ "command": "brew",
41
+ "args": ["upgrade", "amp"]
42
+ }
43
+ ],
44
+ "downgrade": [
45
+ { "manager": "npm", "command": "npm", "args": ["install", "-g", "@ampcode/cli@{{version}}"] }
46
+ ],
47
+ "uninstall": [
48
+ { "manager": "npm", "command": "npm", "args": ["uninstall", "-g", "@ampcode/cli"] },
49
+ {
50
+ "manager": "brew",
51
+ "platforms": ["darwin", "linux"],
52
+ "command": "brew",
53
+ "args": ["uninstall", "amp"]
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "angular",
4
+ "name": "Angular",
5
+ "category": "framework",
6
+ "kind": "framework",
7
+ "homepage": "https://angular.dev",
8
+ "commands": ["ng"],
9
+ "detect": {
10
+ "which": ["ng"],
11
+ "version": {
12
+ "command": "ng",
13
+ "args": ["version"],
14
+ "parser": "Angular CLI:\\s+(?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "versions": { "command": "npm", "args": ["view", "@angular/cli", "versions", "--json"] },
18
+ "install": [{ "command": "npm", "args": ["install", "-g", "@angular/cli"] }],
19
+ "upgrade": [{ "command": "npm", "args": ["install", "-g", "@angular/cli@latest"] }],
20
+ "downgrade": [{ "command": "npm", "args": ["install", "-g", "@angular/cli@{{version}}"] }],
21
+ "uninstall": [{ "command": "npm", "args": ["uninstall", "-g", "@angular/cli"] }],
22
+ "workspace": { "files": ["angular.json"], "dependencies": ["@angular/core", "@angular/cli"] }
23
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "ansible",
4
+ "name": "Ansible",
5
+ "category": "devops",
6
+ "kind": "cli",
7
+ "homepage": "https://docs.ansible.com",
8
+ "commands": ["ansible"],
9
+ "detect": {
10
+ "which": ["ansible"],
11
+ "version": {
12
+ "command": "ansible",
13
+ "args": ["--version"],
14
+ "parser": "core (?<version>\\d+\\.\\d+\\.\\d+)|ansible (?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "versions": { "command": "python3", "args": ["-m", "pip", "index", "versions", "ansible"] },
18
+ "doctor": { "command": "ansible", "args": ["--version"] },
19
+ "install": [
20
+ { "manager": "pipx", "command": "pipx", "args": ["install", "ansible"] },
21
+ { "manager": "pip", "command": "python3", "args": ["-m", "pip", "install", "ansible"] },
22
+ {
23
+ "manager": "brew",
24
+ "platforms": ["darwin", "linux"],
25
+ "command": "brew",
26
+ "args": ["install", "ansible"]
27
+ }
28
+ ],
29
+ "upgrade": [
30
+ { "manager": "pipx", "command": "pipx", "args": ["upgrade", "ansible"] },
31
+ {
32
+ "manager": "pip",
33
+ "command": "python3",
34
+ "args": ["-m", "pip", "install", "--upgrade", "ansible"]
35
+ },
36
+ {
37
+ "manager": "brew",
38
+ "platforms": ["darwin", "linux"],
39
+ "command": "brew",
40
+ "args": ["upgrade", "ansible"]
41
+ }
42
+ ],
43
+ "downgrade": [
44
+ {
45
+ "manager": "pip",
46
+ "command": "python3",
47
+ "args": ["-m", "pip", "install", "ansible=={{version}}"]
48
+ }
49
+ ],
50
+ "uninstall": [
51
+ { "manager": "pipx", "command": "pipx", "args": ["uninstall", "ansible"] },
52
+ { "manager": "pip", "command": "python3", "args": ["-m", "pip", "uninstall", "-y", "ansible"] },
53
+ {
54
+ "manager": "brew",
55
+ "platforms": ["darwin", "linux"],
56
+ "command": "brew",
57
+ "args": ["uninstall", "ansible"]
58
+ }
59
+ ],
60
+ "workspace": { "files": ["ansible.cfg", "playbook.yml", "playbook.yaml"] }
61
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "asdf",
4
+ "name": "asdf",
5
+ "category": "version-manager",
6
+ "kind": "cli",
7
+ "homepage": "https://asdf-vm.com",
8
+ "commands": ["asdf"],
9
+ "detect": {
10
+ "which": ["asdf"],
11
+ "version": {
12
+ "command": "asdf",
13
+ "args": ["--version"],
14
+ "parser": "v?(?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "doctor": { "command": "asdf", "args": ["info"] },
18
+ "install": [
19
+ {
20
+ "manager": "brew",
21
+ "platforms": ["darwin", "linux"],
22
+ "command": "brew",
23
+ "args": ["install", "asdf"]
24
+ }
25
+ ],
26
+ "upgrade": [
27
+ {
28
+ "manager": "brew",
29
+ "platforms": ["darwin", "linux"],
30
+ "command": "brew",
31
+ "args": ["upgrade", "asdf"]
32
+ }
33
+ ],
34
+ "downgrade": [
35
+ {
36
+ "manager": "brew",
37
+ "platforms": ["darwin", "linux"],
38
+ "command": "brew",
39
+ "args": ["install", "asdf@{{version}}"]
40
+ }
41
+ ],
42
+ "uninstall": [
43
+ {
44
+ "manager": "brew",
45
+ "platforms": ["darwin", "linux"],
46
+ "command": "brew",
47
+ "args": ["uninstall", "asdf"]
48
+ }
49
+ ],
50
+ "workspace": { "files": [".tool-versions"] }
51
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "schema": "agent-devkit.tooling/v1",
3
+ "id": "astro",
4
+ "name": "Astro",
5
+ "category": "framework",
6
+ "kind": "project-dependency",
7
+ "homepage": "https://astro.build",
8
+ "commands": ["npm"],
9
+ "detect": {
10
+ "which": ["npm"],
11
+ "version": {
12
+ "command": "npm",
13
+ "args": ["view", "astro", "version"],
14
+ "parser": "(?<version>\\d+\\.\\d+\\.\\d+)"
15
+ }
16
+ },
17
+ "versions": { "command": "npm", "args": ["view", "astro", "versions", "--json"] },
18
+ "install": [{ "workspace": true, "command": "npm", "args": ["install", "astro"] }],
19
+ "upgrade": [{ "workspace": true, "command": "npm", "args": ["install", "astro@latest"] }],
20
+ "downgrade": [{ "workspace": true, "command": "npm", "args": ["install", "astro@{{version}}"] }],
21
+ "uninstall": [{ "workspace": true, "command": "npm", "args": ["uninstall", "astro"] }],
22
+ "workspace": {
23
+ "files": ["astro.config.js", "astro.config.mjs", "astro.config.ts", "package.json"],
24
+ "dependencies": ["astro"]
25
+ }
26
+ }