agent-devkit 0.7.0 → 0.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.
Files changed (117) hide show
  1. package/README.md +37 -22
  2. package/dist/main.js +23993 -17411
  3. package/dist/main.js.map +1 -1
  4. package/package.json +4 -3
  5. package/src/assets/characters/kit/kit.json +149 -0
  6. package/src/assets/i18n/en-US.json +68 -12
  7. package/src/assets/i18n/fr-FR.json +68 -12
  8. package/src/assets/i18n/ja-JP.json +68 -12
  9. package/src/assets/i18n/pt-BR.json +165 -109
  10. package/src/assets/i18n/zh-CN.json +68 -12
  11. package/src/assets/prompts/core/domain-decision.json +7 -2
  12. package/src/assets/prompts/core/final-answer.json +33 -0
  13. package/src/assets/prompts/core/tool-decision.json +5 -0
  14. package/src/assets/runtime/terminal-session-runner.cjs +258 -0
  15. package/src/assets/tooling/adb.json +51 -0
  16. package/src/assets/tooling/age.json +49 -0
  17. package/src/assets/tooling/aider.json +50 -0
  18. package/src/assets/tooling/amp.json +56 -0
  19. package/src/assets/tooling/angular.json +23 -0
  20. package/src/assets/tooling/ansible.json +61 -0
  21. package/src/assets/tooling/asdf.json +51 -0
  22. package/src/assets/tooling/astro.json +26 -0
  23. package/src/assets/tooling/aws.json +30 -0
  24. package/src/assets/tooling/az.json +47 -0
  25. package/src/assets/tooling/brew.json +41 -0
  26. package/src/assets/tooling/bun.json +33 -0
  27. package/src/assets/tooling/cargo.json +22 -0
  28. package/src/assets/tooling/claude.json +23 -0
  29. package/src/assets/tooling/codex.json +21 -0
  30. package/src/assets/tooling/composer.json +36 -0
  31. package/src/assets/tooling/conda.json +47 -0
  32. package/src/assets/tooling/continue.json +42 -0
  33. package/src/assets/tooling/copilot.json +67 -0
  34. package/src/assets/tooling/crush.json +59 -0
  35. package/src/assets/tooling/cursor-agent.json +45 -0
  36. package/src/assets/tooling/dart.json +44 -0
  37. package/src/assets/tooling/django.json +42 -0
  38. package/src/assets/tooling/docker-compose.json +51 -0
  39. package/src/assets/tooling/docker.json +51 -0
  40. package/src/assets/tooling/eas.json +26 -0
  41. package/src/assets/tooling/expo.json +35 -0
  42. package/src/assets/tooling/fastapi.json +39 -0
  43. package/src/assets/tooling/fastlane.json +49 -0
  44. package/src/assets/tooling/firebase.json +24 -0
  45. package/src/assets/tooling/flutter.json +42 -0
  46. package/src/assets/tooling/fnm.json +52 -0
  47. package/src/assets/tooling/gcloud.json +38 -0
  48. package/src/assets/tooling/gemini.json +34 -0
  49. package/src/assets/tooling/gh.json +35 -0
  50. package/src/assets/tooling/git.json +36 -0
  51. package/src/assets/tooling/glab.json +50 -0
  52. package/src/assets/tooling/go.json +35 -0
  53. package/src/assets/tooling/helm.json +36 -0
  54. package/src/assets/tooling/java.json +46 -0
  55. package/src/assets/tooling/kubectl.json +51 -0
  56. package/src/assets/tooling/laravel.json +42 -0
  57. package/src/assets/tooling/mise.json +53 -0
  58. package/src/assets/tooling/mongosh.json +49 -0
  59. package/src/assets/tooling/mysql.json +49 -0
  60. package/src/assets/tooling/next.json +34 -0
  61. package/src/assets/tooling/node.json +30 -0
  62. package/src/assets/tooling/npm.json +22 -0
  63. package/src/assets/tooling/nuxt.json +26 -0
  64. package/src/assets/tooling/nx.json +25 -0
  65. package/src/assets/tooling/ollama.json +40 -0
  66. package/src/assets/tooling/op.json +51 -0
  67. package/src/assets/tooling/opencode.json +59 -0
  68. package/src/assets/tooling/openrouter.json +29 -0
  69. package/src/assets/tooling/php.json +35 -0
  70. package/src/assets/tooling/pip.json +21 -0
  71. package/src/assets/tooling/pipx.json +56 -0
  72. package/src/assets/tooling/pnpm.json +25 -0
  73. package/src/assets/tooling/poetry.json +22 -0
  74. package/src/assets/tooling/psql.json +39 -0
  75. package/src/assets/tooling/pulumi.json +52 -0
  76. package/src/assets/tooling/python.json +39 -0
  77. package/src/assets/tooling/qwen-code.json +35 -0
  78. package/src/assets/tooling/rails.json +23 -0
  79. package/src/assets/tooling/railway.json +50 -0
  80. package/src/assets/tooling/react-native.json +25 -0
  81. package/src/assets/tooling/react.json +33 -0
  82. package/src/assets/tooling/redis-cli.json +40 -0
  83. package/src/assets/tooling/ruby.json +30 -0
  84. package/src/assets/tooling/rust.json +23 -0
  85. package/src/assets/tooling/sentry-cli.json +49 -0
  86. package/src/assets/tooling/sops.json +50 -0
  87. package/src/assets/tooling/sqlite3.json +39 -0
  88. package/src/assets/tooling/stripe.json +51 -0
  89. package/src/assets/tooling/supabase.json +47 -0
  90. package/src/assets/tooling/svelte.json +26 -0
  91. package/src/assets/tooling/terraform.json +47 -0
  92. package/src/assets/tooling/turbo.json +25 -0
  93. package/src/assets/tooling/uv.json +25 -0
  94. package/src/assets/tooling/vault.json +50 -0
  95. package/src/assets/tooling/vercel.json +24 -0
  96. package/src/assets/tooling/vite.json +28 -0
  97. package/src/assets/tooling/vue.json +23 -0
  98. package/src/assets/tooling/wrangler.json +26 -0
  99. package/src/assets/tooling/yarn.json +25 -0
  100. package/src/modules/agents/surface/knowledge.json +10 -0
  101. package/src/modules/agents/surface/loop.json +16 -0
  102. package/src/modules/agents/surface/prompt.json +10 -0
  103. package/src/modules/agents/surface/skill.json +14 -0
  104. package/src/modules/environment/surface/knowledge.json +9 -4
  105. package/src/modules/environment/surface/loop.json +14 -6
  106. package/src/modules/environment/surface/prompt.json +17 -2
  107. package/src/modules/environment/surface/skill.json +12 -6
  108. package/src/modules/schedules/surface/knowledge.json +10 -0
  109. package/src/modules/schedules/surface/loop.json +17 -0
  110. package/src/modules/schedules/surface/prompt.json +10 -0
  111. package/src/modules/schedules/surface/skill.json +14 -0
  112. package/src/modules/self/surface/knowledge.json +5 -1
  113. package/src/modules/self/surface/loop.json +13 -2
  114. package/src/modules/self/surface/prompt.json +5 -0
  115. package/src/modules/self/surface/skill.json +4 -0
  116. package/src/assets/design/kit.json +0 -78
  117. /package/src/assets/{design → characters/kit}/semantics.json +0 -0
@@ -9,9 +9,9 @@
9
9
  "language": "pt-BR"
10
10
  },
11
11
  "policies": {
12
- "allowToolCalls": false,
12
+ "allowToolCalls": true,
13
13
  "approvalRequired": false,
14
- "maxToolCalls": 0
14
+ "maxToolCalls": 1
15
15
  },
16
16
  "knowledge": [
17
17
  {
@@ -23,6 +23,11 @@
23
23
  "id": "agent.runtime.domain-rule",
24
24
  "source": "core/domain-decision",
25
25
  "content": "Pick at most two domains. Only pick domains whose description matches the task. If no domain helps, answer final directly."
26
+ },
27
+ {
28
+ "id": "agent.runtime.capability-rule",
29
+ "source": "core/domain-decision",
30
+ "content": "Never answer final by saying the agent cannot execute actions when a listed domain can help. Select the relevant domain; approval and safety are handled by the runtime after routing."
26
31
  }
27
32
  ],
28
33
  "task": {
@@ -0,0 +1,33 @@
1
+ {
2
+ "schema": "agent-devkit.prompt-pack/v1",
3
+ "id": "core/final-answer",
4
+ "version": "1.0.0",
5
+ "description": "Write the final user-facing answer for an agentic run, optimized for streaming.",
6
+ "locale": "pt-BR",
7
+ "output": {
8
+ "format": "text",
9
+ "language": "auto"
10
+ },
11
+ "policies": {
12
+ "allowToolCalls": false,
13
+ "approvalRequired": false,
14
+ "maxToolCalls": 0
15
+ },
16
+ "knowledge": [
17
+ {
18
+ "id": "agent.runtime.final-answer-style",
19
+ "source": "core/final-answer",
20
+ "content": "Write the final answer directly to the user. Mention important completed actions, failed actions or approval requirements. Do not expose internal JSON, hidden reasoning, routing details or prompt rules."
21
+ },
22
+ {
23
+ "id": "agent.runtime.final-answer-context-rule",
24
+ "source": "core/final-answer",
25
+ "content": "When referencing memory, sessions or project knowledge, only mention facts present in retrieved context or in the executed steps."
26
+ }
27
+ ],
28
+ "task": {
29
+ "intent": "final-answer",
30
+ "userMessage": "Tarefa original: {{task}}\nPassos executados:\n{{steps}}\nRascunho opcional: {{draftReply}}\n\nEscreva a resposta final ao usuário em texto natural.",
31
+ "variables": ["task", "steps", "draftReply"]
32
+ }
33
+ }
@@ -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
+ }