adhdev 0.2.0 → 0.4.0

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 (71) hide show
  1. package/dist/cli-entrypoint.js +18164 -1101
  2. package/dist/cli-entrypoint.js.map +1 -1
  3. package/dist/index.js +18304 -1262
  4. package/dist/index.js.map +1 -1
  5. package/package.json +1 -1
  6. package/providers/_builtin/COMPATIBILITY.md +217 -0
  7. package/providers/_builtin/acp/agentpool/provider.json +7 -0
  8. package/providers/_builtin/acp/amp/provider.json +7 -0
  9. package/providers/_builtin/acp/auggie/provider.json +7 -0
  10. package/providers/_builtin/acp/autodev/provider.json +7 -0
  11. package/providers/_builtin/acp/autohand/provider.json +7 -0
  12. package/providers/_builtin/acp/blackbox-ai/provider.json +7 -0
  13. package/providers/_builtin/acp/claude-agent/provider.json +7 -0
  14. package/providers/_builtin/acp/cline-acp/provider.json +7 -0
  15. package/providers/_builtin/acp/codebuddy/provider.json +7 -0
  16. package/providers/_builtin/acp/codex-cli/provider.json +7 -0
  17. package/providers/_builtin/acp/corust-agent/provider.json +7 -0
  18. package/providers/_builtin/acp/crow-cli/provider.json +7 -0
  19. package/providers/_builtin/acp/cursor-acp/provider.json +7 -0
  20. package/providers/_builtin/acp/deepagents/provider.json +7 -0
  21. package/providers/_builtin/acp/dimcode/provider.json +7 -0
  22. package/providers/_builtin/acp/docker-cagent/provider.json +7 -0
  23. package/providers/_builtin/acp/factory-droid/provider.json +7 -0
  24. package/providers/_builtin/acp/fast-agent/provider.json +7 -0
  25. package/providers/_builtin/acp/gemini-cli/provider.json +7 -0
  26. package/providers/_builtin/acp/github-copilot/provider.json +7 -0
  27. package/providers/_builtin/acp/goose/provider.json +7 -0
  28. package/providers/_builtin/acp/junie/provider.json +7 -0
  29. package/providers/_builtin/acp/kilo/provider.json +10 -1
  30. package/providers/_builtin/acp/kimi-cli/provider.json +7 -0
  31. package/providers/_builtin/acp/minion-code/provider.json +7 -0
  32. package/providers/_builtin/acp/mistral-vibe/provider.json +7 -0
  33. package/providers/_builtin/acp/nova/provider.json +7 -0
  34. package/providers/_builtin/acp/openclaw/provider.json +7 -0
  35. package/providers/_builtin/acp/opencode/provider.json +7 -0
  36. package/providers/_builtin/acp/openhands/provider.json +7 -0
  37. package/providers/_builtin/acp/pi-acp/provider.json +7 -0
  38. package/providers/_builtin/acp/qoder/provider.json +7 -0
  39. package/providers/_builtin/acp/qwen-code/provider.json +7 -0
  40. package/providers/_builtin/acp/stakpak/provider.json +7 -0
  41. package/providers/_builtin/acp/vtcode/provider.json +7 -0
  42. package/providers/_builtin/cli/claude-cli/provider.json +22 -0
  43. package/providers/_builtin/cli/codex-cli/provider.json +29 -0
  44. package/providers/_builtin/cli/gemini-cli/provider.json +29 -0
  45. package/providers/_builtin/docs/CDP_SELECTOR_GUIDE.md +370 -0
  46. package/providers/_builtin/docs/PROVIDER_GUIDE.md +916 -0
  47. package/providers/_builtin/extension/cline/provider.json +24 -0
  48. package/providers/_builtin/extension/roo-code/provider.json +24 -0
  49. package/providers/_builtin/ide/antigravity/provider.json +32 -1
  50. package/providers/_builtin/ide/antigravity/scripts/legacy/list_models.js +38 -0
  51. package/providers/_builtin/ide/antigravity/scripts/legacy/list_modes.js +48 -0
  52. package/providers/_builtin/ide/antigravity/scripts/legacy/scripts.js +64 -0
  53. package/providers/_builtin/ide/antigravity/scripts/legacy/set_mode.js +34 -0
  54. package/providers/_builtin/ide/antigravity/scripts/legacy/set_model.js +47 -0
  55. package/providers/_builtin/ide/antigravity/scripts/list_models.js +31 -8
  56. package/providers/_builtin/ide/antigravity/scripts/list_modes.js +37 -13
  57. package/providers/_builtin/ide/antigravity/scripts/set_mode.js +49 -16
  58. package/providers/_builtin/ide/antigravity/scripts/set_model.js +47 -22
  59. package/providers/_builtin/ide/antigravity/scripts.js +54 -60
  60. package/providers/_builtin/ide/cursor/provider.json +24 -0
  61. package/providers/_builtin/ide/cursor/scripts.js +16 -10
  62. package/providers/_builtin/ide/kiro/provider.json +25 -1
  63. package/providers/_builtin/ide/pearai/provider.json +25 -1
  64. package/providers/_builtin/ide/trae/provider.json +25 -1
  65. package/providers/_builtin/ide/vscode/provider.json +25 -1
  66. package/providers/_builtin/ide/vscode-insiders/provider.json +25 -1
  67. package/providers/_builtin/ide/vscodium/provider.json +25 -1
  68. package/providers/_builtin/ide/windsurf/provider.json +25 -1
  69. package/providers/_builtin/acp/code-assistant/provider.json +0 -47
  70. package/providers/_builtin/acp/fount/provider.json +0 -47
  71. package/providers/_builtin/acp/kiro-cli/provider.json +0 -47
@@ -1,73 +1,67 @@
1
1
  /**
2
- * CDP Scripts for Antigravity
2
+ * Antigravity CDP Scripts
3
+ *
4
+ * Version routing is handled by ProviderLoader:
5
+ * - provider.json "versions" field declares script directory overrides
6
+ * - VersionArchive detects installed Antigravity version at daemon startup
7
+ * - resolve() picks scripts/legacy/ for < 1.107.0, scripts/ for >= 1.107.0
8
+ *
9
+ * To add support for a new breaking version:
10
+ * 1. Create scripts/v<next>/ with updated scripts
11
+ * 2. Add entry to provider.json "versions" field:
12
+ * "< X.Y.Z": { "__dir": "scripts/v<next>" }
13
+ * 3. Update "testedVersions" in provider.json
3
14
  */
4
15
 
5
- const fs = require('fs');
16
+ 'use strict';
17
+
18
+ const fs = require('fs');
6
19
  const path = require('path');
7
20
  const SCRIPTS_DIR = path.join(__dirname, 'scripts');
8
- function loadScript(name) {
9
- try { return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf8'); }
10
- catch { return null; }
11
- }
12
-
13
21
 
14
- module.exports.readChat = function readChat() {
15
- return loadScript('read_chat.js');
16
- };
17
-
18
- module.exports.sendMessage = function sendMessage(text) {
19
- const script = loadScript('send_message.js');
20
- if (!script) return null;
21
- // ${ MESSAGE } 템플릿 변수 치환
22
- return script.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text));
23
- };
22
+ function load(name) {
23
+ try { return fs.readFileSync(path.join(SCRIPTS_DIR, name), 'utf-8'); }
24
+ catch { return null; }
25
+ }
24
26
 
25
- module.exports.listSessions = function listSessions() {
26
- return loadScript('list_chats.js');
27
- };
27
+ module.exports.readChat = () => load('read_chat.js');
28
+ module.exports.focusEditor = () => load('focus_editor.js');
29
+ module.exports.listSessions = () => load('list_chats.js');
30
+ module.exports.newSession = () => load('new_session.js');
31
+ module.exports.listModels = () => load('list_models.js');
32
+ module.exports.listModes = () => load('list_modes.js');
28
33
 
29
- module.exports.switchSession = function switchSession(sessionId) {
30
- const script = loadScript('switch_session.js');
31
- if (!script) return null;
32
- return script.replace(/\$\{\s*SESSION_ID\s*\}/g, JSON.stringify(sessionId));
33
- };
34
+ module.exports.sendMessage = (text) => {
35
+ const script = load('send_message.js');
36
+ if (!script) return null;
37
+ return script.replace(/\$\{\s*MESSAGE\s*\}/g, JSON.stringify(text));
38
+ };
34
39
 
35
- module.exports.newSession = function newSession() {
36
- return loadScript('new_session.js');
37
- };
40
+ module.exports.switchSession = (sessionId) => {
41
+ const script = load('switch_session.js');
42
+ if (!script) return null;
43
+ return script.replace(/\$\{\s*SESSION_ID\s*\}/g, JSON.stringify(sessionId));
44
+ };
38
45
 
39
- module.exports.resolveAction = function resolveAction(params) {
40
- const action = typeof params === 'string' ? params : params?.action || 'approve';
41
- const buttonText = params?.button || params?.buttonText
46
+ module.exports.resolveAction = (params) => {
47
+ const action = typeof params === 'string' ? params : params?.action || 'approve';
48
+ const buttonText = params?.button || params?.buttonText
42
49
  || (action === 'approve' ? 'Accept' : action === 'reject' ? 'Reject' : action);
43
- const script = loadScript('resolve_action.js');
44
- if (!script) return null;
45
- return script.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText));
46
- };
47
-
48
- module.exports.focusEditor = function focusEditor() {
49
- return loadScript('focus_editor.js');
50
- };
51
-
52
- module.exports.listModels = function listModels() {
53
- return loadScript('list_models.js');
54
- };
55
-
56
- module.exports.setModel = function setModel(params) {
57
- const model = typeof params === 'string' ? params : params?.model;
58
- const script = loadScript('set_model.js');
59
- if (!script) return null;
60
- return script.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model));
61
- };
62
-
63
- module.exports.listModes = function listModes() {
64
- return loadScript('list_modes.js');
65
- };
50
+ const script = load('resolve_action.js');
51
+ if (!script) return null;
52
+ return script.replace(/\$\{\s*BUTTON_TEXT\s*\}/g, JSON.stringify(buttonText));
53
+ };
66
54
 
67
- module.exports.setMode = function setMode(params) {
68
- const mode = typeof params === 'string' ? params : params?.mode;
69
- const script = loadScript('set_mode.js');
70
- if (!script) return null;
71
- return script.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode));
72
- };
55
+ module.exports.setModel = (params) => {
56
+ const model = typeof params === 'string' ? params : params?.model;
57
+ const script = load('set_model.js');
58
+ if (!script) return null;
59
+ return script.replace(/\$\{\s*MODEL\s*\}/g, JSON.stringify(model));
60
+ };
73
61
 
62
+ module.exports.setMode = (params) => {
63
+ const mode = typeof params === 'string' ? params : params?.mode;
64
+ const script = load('set_mode.js');
65
+ if (!script) return null;
66
+ return script.replace(/\$\{\s*MODE\s*\}/g, JSON.stringify(mode));
67
+ };
@@ -31,5 +31,29 @@
31
31
  "inputSelector": ".aislash-editor-input[contenteditable=\"true\"]",
32
32
  "vscodeCommands": {
33
33
  "changeModel": "cursor.model"
34
+ },
35
+ "settings": {
36
+ "approvalAlert": {
37
+ "type": "boolean",
38
+ "default": true,
39
+ "public": true,
40
+ "label": "Approval Notifications",
41
+ "description": "Show notification when approval is needed"
42
+ },
43
+ "longGeneratingAlert": {
44
+ "type": "boolean",
45
+ "default": true,
46
+ "public": true,
47
+ "label": "Long Generation Alert",
48
+ "description": "Alert when generation takes too long"
49
+ },
50
+ "longGeneratingThresholdSec": {
51
+ "type": "number",
52
+ "default": 180,
53
+ "public": true,
54
+ "label": "Long Generation Threshold (sec)",
55
+ "min": 30,
56
+ "max": 600
57
+ }
34
58
  }
35
59
  }
@@ -39,17 +39,23 @@ module.exports.readChat = function readChat(params) {
39
39
 
40
40
  const msgs = [];
41
41
  document.querySelectorAll('.composer-human-ai-pair-container').forEach((p, i) => {
42
+ if (p.children.length === 0) return; // skip virtual-scroll placeholders
42
43
  const h = p.querySelector('.composer-human-message');
43
- const userText = h ? h.textContent.trim().substring(0, 6000) : '';
44
- if (h) msgs.push({ role: 'user', content: userText, index: msgs.length });
45
- // pair의 번째 자식은 사용자 메시지 블록 그 안의 rendered는 건너뜀
46
- const firstChild = p.children[0];
47
- p.querySelectorAll('.composer-rendered-message').forEach(a => {
48
- if (firstChild && firstChild.contains(a)) return;
49
- if (a.closest('.composer-human-message')) return;
50
- const t = a.textContent.trim();
51
- if (t && t !== userText) msgs.push({ role: 'assistant', content: t.substring(0, 6000), index: msgs.length });
52
- });
44
+ if (h) {
45
+ const userText = (h.innerText || '').trim().substring(0, 6000);
46
+ if (userText) msgs.push({ role: 'user', content: userText, index: msgs.length });
47
+ }
48
+ // Iterate direct children after the first (user message block)
49
+ for (let ci = 1; ci < p.children.length; ci++) {
50
+ const b = p.children[ci];
51
+ if ((b.className || '').includes('opacity-50')) continue;
52
+ const t = (b.innerText || '').trim();
53
+ if (t.length < 2) continue;
54
+ // Filter noise: "Thought for Xs", "Explored N files"
55
+ if (/^Thought\\nfor \\d+s?$/i.test(t) || /^Explored\\n/i.test(t)) continue;
56
+ const hasTool = b.querySelector('.composer-tool-former-message, .composer-diff-block, .composer-code-block-container');
57
+ msgs.push({ role: hasTool ? 'tool' : 'assistant', content: t.substring(0, 6000), index: msgs.length });
58
+ }
53
59
  });
54
60
  const inputEl = document.querySelector('.aislash-editor-input[contenteditable="true"]');
55
61
  const inputContent = inputEl?.textContent?.trim() || '';
@@ -32,5 +32,29 @@
32
32
  },
33
33
  "inputMethod": "cdp-type-and-send",
34
34
  "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]",
35
- "webviewMatchText": "kiro"
35
+ "webviewMatchText": "kiro",
36
+ "settings": {
37
+ "approvalAlert": {
38
+ "type": "boolean",
39
+ "default": true,
40
+ "public": true,
41
+ "label": "Approval Notifications",
42
+ "description": "Show notification when approval is needed"
43
+ },
44
+ "longGeneratingAlert": {
45
+ "type": "boolean",
46
+ "default": true,
47
+ "public": true,
48
+ "label": "Long Generation Alert",
49
+ "description": "Alert when generation takes too long"
50
+ },
51
+ "longGeneratingThresholdSec": {
52
+ "type": "number",
53
+ "default": 180,
54
+ "public": true,
55
+ "label": "Long Generation Threshold (sec)",
56
+ "min": 30,
57
+ "max": 600
58
+ }
59
+ }
36
60
  }
@@ -32,5 +32,29 @@
32
32
  },
33
33
  "inputMethod": "cdp-type-and-send",
34
34
  "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]",
35
- "webviewMatchText": "chat-text-area"
35
+ "webviewMatchText": "chat-text-area",
36
+ "settings": {
37
+ "approvalAlert": {
38
+ "type": "boolean",
39
+ "default": true,
40
+ "public": true,
41
+ "label": "Approval Notifications",
42
+ "description": "Show notification when approval is needed"
43
+ },
44
+ "longGeneratingAlert": {
45
+ "type": "boolean",
46
+ "default": true,
47
+ "public": true,
48
+ "label": "Long Generation Alert",
49
+ "description": "Alert when generation takes too long"
50
+ },
51
+ "longGeneratingThresholdSec": {
52
+ "type": "number",
53
+ "default": 180,
54
+ "public": true,
55
+ "label": "Long Generation Threshold (sec)",
56
+ "min": 30,
57
+ "max": 600
58
+ }
59
+ }
36
60
  }
@@ -31,5 +31,29 @@
31
31
  ]
32
32
  },
33
33
  "inputMethod": "cdp-type-and-send",
34
- "inputSelector": ".chat-input-v2-input-box-editable, [contenteditable=\"true\"][role=\"textbox\"]"
34
+ "inputSelector": ".chat-input-v2-input-box-editable, [contenteditable=\"true\"][role=\"textbox\"]",
35
+ "settings": {
36
+ "approvalAlert": {
37
+ "type": "boolean",
38
+ "default": true,
39
+ "public": true,
40
+ "label": "Approval Notifications",
41
+ "description": "Show notification when approval is needed"
42
+ },
43
+ "longGeneratingAlert": {
44
+ "type": "boolean",
45
+ "default": true,
46
+ "public": true,
47
+ "label": "Long Generation Alert",
48
+ "description": "Alert when generation takes too long"
49
+ },
50
+ "longGeneratingThresholdSec": {
51
+ "type": "number",
52
+ "default": 180,
53
+ "public": true,
54
+ "label": "Long Generation Threshold (sec)",
55
+ "min": 30,
56
+ "max": 600
57
+ }
58
+ }
35
59
  }
@@ -29,5 +29,29 @@
29
29
  ]
30
30
  },
31
31
  "inputMethod": "cdp-type-and-send",
32
- "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]"
32
+ "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]",
33
+ "settings": {
34
+ "approvalAlert": {
35
+ "type": "boolean",
36
+ "default": true,
37
+ "public": true,
38
+ "label": "Approval Notifications",
39
+ "description": "Show notification when approval is needed"
40
+ },
41
+ "longGeneratingAlert": {
42
+ "type": "boolean",
43
+ "default": true,
44
+ "public": true,
45
+ "label": "Long Generation Alert",
46
+ "description": "Alert when generation takes too long"
47
+ },
48
+ "longGeneratingThresholdSec": {
49
+ "type": "number",
50
+ "default": 180,
51
+ "public": true,
52
+ "label": "Long Generation Threshold (sec)",
53
+ "min": 30,
54
+ "max": 600
55
+ }
56
+ }
33
57
  }
@@ -27,5 +27,29 @@
27
27
  ]
28
28
  },
29
29
  "inputMethod": "cdp-type-and-send",
30
- "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]"
30
+ "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]",
31
+ "settings": {
32
+ "approvalAlert": {
33
+ "type": "boolean",
34
+ "default": true,
35
+ "public": true,
36
+ "label": "Approval Notifications",
37
+ "description": "Show notification when approval is needed"
38
+ },
39
+ "longGeneratingAlert": {
40
+ "type": "boolean",
41
+ "default": true,
42
+ "public": true,
43
+ "label": "Long Generation Alert",
44
+ "description": "Alert when generation takes too long"
45
+ },
46
+ "longGeneratingThresholdSec": {
47
+ "type": "number",
48
+ "default": 180,
49
+ "public": true,
50
+ "label": "Long Generation Threshold (sec)",
51
+ "min": 30,
52
+ "max": 600
53
+ }
54
+ }
31
55
  }
@@ -28,5 +28,29 @@
28
28
  ]
29
29
  },
30
30
  "inputMethod": "cdp-type-and-send",
31
- "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]"
31
+ "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]",
32
+ "settings": {
33
+ "approvalAlert": {
34
+ "type": "boolean",
35
+ "default": true,
36
+ "public": true,
37
+ "label": "Approval Notifications",
38
+ "description": "Show notification when approval is needed"
39
+ },
40
+ "longGeneratingAlert": {
41
+ "type": "boolean",
42
+ "default": true,
43
+ "public": true,
44
+ "label": "Long Generation Alert",
45
+ "description": "Alert when generation takes too long"
46
+ },
47
+ "longGeneratingThresholdSec": {
48
+ "type": "number",
49
+ "default": 180,
50
+ "public": true,
51
+ "label": "Long Generation Threshold (sec)",
52
+ "min": 30,
53
+ "max": 600
54
+ }
55
+ }
32
56
  }
@@ -18,5 +18,29 @@
18
18
  ]
19
19
  },
20
20
  "inputMethod": "cdp-type-and-send",
21
- "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]"
21
+ "inputSelector": "[contenteditable=\"true\"][role=\"textbox\"]",
22
+ "settings": {
23
+ "approvalAlert": {
24
+ "type": "boolean",
25
+ "default": true,
26
+ "public": true,
27
+ "label": "Approval Notifications",
28
+ "description": "Show notification when approval is needed"
29
+ },
30
+ "longGeneratingAlert": {
31
+ "type": "boolean",
32
+ "default": true,
33
+ "public": true,
34
+ "label": "Long Generation Alert",
35
+ "description": "Alert when generation takes too long"
36
+ },
37
+ "longGeneratingThresholdSec": {
38
+ "type": "number",
39
+ "default": 180,
40
+ "public": true,
41
+ "label": "Long Generation Threshold (sec)",
42
+ "min": 30,
43
+ "max": 600
44
+ }
45
+ }
22
46
  }
@@ -1,47 +0,0 @@
1
- {
2
- "type": "code-assistant-acp",
3
- "name": "Code Assistant (ACP)",
4
- "category": "acp",
5
- "displayName": "Code Assistant",
6
- "icon": "🔧",
7
- "install": "Download from https://github.com/stippi/code-assistant/releases",
8
- "spawn": {
9
- "command": "code-assistant",
10
- "args": [
11
- "--acp"
12
- ],
13
- "shell": false
14
- },
15
- "auth": [
16
- {
17
- "type": "agent",
18
- "id": "code-assistant",
19
- "name": "Code Assistant Auth",
20
- "description": "Configure provider through code-assistant setup"
21
- }
22
- ],
23
- "settings": {
24
- "approvalAlert": {
25
- "type": "boolean",
26
- "default": true,
27
- "public": true,
28
- "label": "Approval Alerts",
29
- "description": "Show notification when agent requires approval"
30
- },
31
- "longGeneratingAlert": {
32
- "type": "boolean",
33
- "default": true,
34
- "public": true,
35
- "label": "Long Generation Alert",
36
- "description": "Alert when generation takes too long"
37
- },
38
- "longGeneratingThresholdSec": {
39
- "type": "number",
40
- "default": 180,
41
- "public": true,
42
- "label": "Long Generation Threshold (sec)",
43
- "min": 30,
44
- "max": 600
45
- }
46
- }
47
- }
@@ -1,47 +0,0 @@
1
- {
2
- "type": "fount-acp",
3
- "name": "fount (ACP)",
4
- "category": "acp",
5
- "displayName": "fount",
6
- "icon": "⛲",
7
- "install": "See https://github.com/steve02081504/fount",
8
- "spawn": {
9
- "command": "fount",
10
- "args": [
11
- "acp"
12
- ],
13
- "shell": false
14
- },
15
- "auth": [
16
- {
17
- "type": "agent",
18
- "id": "fount",
19
- "name": "fount Auth",
20
- "description": "Configure through fount setup"
21
- }
22
- ],
23
- "settings": {
24
- "approvalAlert": {
25
- "type": "boolean",
26
- "default": true,
27
- "public": true,
28
- "label": "Approval Alerts",
29
- "description": "Show notification when agent requires approval"
30
- },
31
- "longGeneratingAlert": {
32
- "type": "boolean",
33
- "default": true,
34
- "public": true,
35
- "label": "Long Generation Alert",
36
- "description": "Alert when generation takes too long"
37
- },
38
- "longGeneratingThresholdSec": {
39
- "type": "number",
40
- "default": 180,
41
- "public": true,
42
- "label": "Long Generation Threshold (sec)",
43
- "min": 30,
44
- "max": 600
45
- }
46
- }
47
- }
@@ -1,47 +0,0 @@
1
- {
2
- "type": "kiro-cli-acp",
3
- "name": "Kiro CLI (ACP)",
4
- "category": "acp",
5
- "displayName": "Kiro CLI",
6
- "icon": "🟠",
7
- "install": "Download from https://kiro.dev/docs/cli/",
8
- "spawn": {
9
- "command": "kiro",
10
- "args": [
11
- "acp"
12
- ],
13
- "shell": false
14
- },
15
- "auth": [
16
- {
17
- "type": "agent",
18
- "id": "kiro",
19
- "name": "Kiro Auth",
20
- "description": "Authenticate with AWS/Kiro account"
21
- }
22
- ],
23
- "settings": {
24
- "approvalAlert": {
25
- "type": "boolean",
26
- "default": true,
27
- "public": true,
28
- "label": "Approval Alerts",
29
- "description": "Show notification when agent requires approval"
30
- },
31
- "longGeneratingAlert": {
32
- "type": "boolean",
33
- "default": true,
34
- "public": true,
35
- "label": "Long Generation Alert",
36
- "description": "Alert when generation takes too long"
37
- },
38
- "longGeneratingThresholdSec": {
39
- "type": "number",
40
- "default": 180,
41
- "public": true,
42
- "label": "Long Generation Threshold (sec)",
43
- "min": 30,
44
- "max": 600
45
- }
46
- }
47
- }