aiden-runtime 3.19.4 → 3.19.6

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 (108) hide show
  1. package/config/devos.config.backup.json +224 -224
  2. package/config/devos.config.json +1 -1
  3. package/dist/api/server.js +7 -1
  4. package/dist/core/agentLoop.js +8 -3
  5. package/dist/core/skillLoader.js +2 -0
  6. package/dist/core/slashAsTool.js +2 -0
  7. package/dist/core/toolRegistry.js +16 -0
  8. package/dist/core/version.js +1 -1
  9. package/dist/providers/router.js +46 -6
  10. package/dist-bundle/cli.js +911 -557
  11. package/dist-bundle/index.js +758 -658
  12. package/package.json +268 -266
  13. package/scripts/postinstall.js +58 -1
  14. package/workspace-templates/HEARTBEAT.md +16 -0
  15. package/workspace-templates/SOUL.md +267 -0
  16. package/workspace-templates/STANDING_ORDERS.md +21 -0
  17. package/workspace-templates/permissions.yaml +180 -0
  18. package/workspace-templates/skills/architecture-diagram/SKILL.md +126 -0
  19. package/workspace-templates/skills/architecture-diagram/skill.json +25 -0
  20. package/workspace-templates/skills/arxiv/SKILL.md +124 -0
  21. package/workspace-templates/skills/arxiv/skill.json +26 -0
  22. package/workspace-templates/skills/ascii-art/SKILL.md +142 -0
  23. package/workspace-templates/skills/ascii-art/skill.json +26 -0
  24. package/workspace-templates/skills/blogwatcher/SKILL.md +147 -0
  25. package/workspace-templates/skills/blogwatcher/skill.json +26 -0
  26. package/workspace-templates/skills/censys/SKILL.md +104 -0
  27. package/workspace-templates/skills/censys/index.ts +133 -0
  28. package/workspace-templates/skills/censys/skill.json +25 -0
  29. package/workspace-templates/skills/clipboard-history/SKILL.md +101 -0
  30. package/workspace-templates/skills/clipboard-history/skill.json +23 -0
  31. package/workspace-templates/skills/crt-sh/SKILL.md +102 -0
  32. package/workspace-templates/skills/crt-sh/index.ts +59 -0
  33. package/workspace-templates/skills/crt-sh/skill.json +25 -0
  34. package/workspace-templates/skills/cveapi/SKILL.md +114 -0
  35. package/workspace-templates/skills/cveapi/index.ts +249 -0
  36. package/workspace-templates/skills/cveapi/skill.json +25 -0
  37. package/workspace-templates/skills/docker-management/SKILL.md +156 -0
  38. package/workspace-templates/skills/docker-management/skill.json +25 -0
  39. package/workspace-templates/skills/excalidraw/SKILL.md +148 -0
  40. package/workspace-templates/skills/excalidraw/skill.json +25 -0
  41. package/workspace-templates/skills/explainshell/SKILL.md +93 -0
  42. package/workspace-templates/skills/explainshell/index.ts +132 -0
  43. package/workspace-templates/skills/explainshell/skill.json +25 -0
  44. package/workspace-templates/skills/financial_research/SKILL.md +21 -0
  45. package/workspace-templates/skills/financial_research/skill.json +24 -0
  46. package/workspace-templates/skills/gif-search/SKILL.md +122 -0
  47. package/workspace-templates/skills/gif-search/skill.json +25 -0
  48. package/workspace-templates/skills/github-auth/SKILL.md +134 -0
  49. package/workspace-templates/skills/github-auth/skill.json +26 -0
  50. package/workspace-templates/skills/github-issues/SKILL.md +130 -0
  51. package/workspace-templates/skills/github-issues/skill.json +25 -0
  52. package/workspace-templates/skills/github-pr-workflow/SKILL.md +143 -0
  53. package/workspace-templates/skills/github-pr-workflow/skill.json +26 -0
  54. package/workspace-templates/skills/github-repo-management/SKILL.md +147 -0
  55. package/workspace-templates/skills/github-repo-management/skill.json +26 -0
  56. package/workspace-templates/skills/google-workspace/SKILL.md +110 -0
  57. package/workspace-templates/skills/google-workspace/skill.json +26 -0
  58. package/workspace-templates/skills/greynoise/SKILL.md +96 -0
  59. package/workspace-templates/skills/greynoise/index.ts +107 -0
  60. package/workspace-templates/skills/greynoise/skill.json +25 -0
  61. package/workspace-templates/skills/haveibeenpwned/SKILL.md +100 -0
  62. package/workspace-templates/skills/haveibeenpwned/index.ts +72 -0
  63. package/workspace-templates/skills/haveibeenpwned/skill.json +24 -0
  64. package/workspace-templates/skills/jupyter-live-kernel/SKILL.md +116 -0
  65. package/workspace-templates/skills/jupyter-live-kernel/skill.json +25 -0
  66. package/workspace-templates/skills/linear/SKILL.md +107 -0
  67. package/workspace-templates/skills/linear/skill.json +25 -0
  68. package/workspace-templates/skills/nano-pdf/SKILL.md +113 -0
  69. package/workspace-templates/skills/nano-pdf/skill.json +26 -0
  70. package/workspace-templates/skills/notion/SKILL.md +108 -0
  71. package/workspace-templates/skills/notion/skill.json +24 -0
  72. package/workspace-templates/skills/obsidian/SKILL.md +115 -0
  73. package/workspace-templates/skills/obsidian/skill.json +24 -0
  74. package/workspace-templates/skills/ocr-and-documents/SKILL.md +125 -0
  75. package/workspace-templates/skills/ocr-and-documents/skill.json +26 -0
  76. package/workspace-templates/skills/p5js/SKILL.md +163 -0
  77. package/workspace-templates/skills/p5js/skill.json +24 -0
  78. package/workspace-templates/skills/research-paper-writing/SKILL.md +158 -0
  79. package/workspace-templates/skills/research-paper-writing/skill.json +26 -0
  80. package/workspace-templates/skills/securityheaders/SKILL.md +99 -0
  81. package/workspace-templates/skills/securityheaders/index.ts +213 -0
  82. package/workspace-templates/skills/securityheaders/skill.json +26 -0
  83. package/workspace-templates/skills/shodan/SKILL.md +113 -0
  84. package/workspace-templates/skills/shodan/index.ts +94 -0
  85. package/workspace-templates/skills/shodan/skill.json +26 -0
  86. package/workspace-templates/skills/songsee/SKILL.md +152 -0
  87. package/workspace-templates/skills/songsee/skill.json +25 -0
  88. package/workspace-templates/skills/ssllabs/SKILL.md +107 -0
  89. package/workspace-templates/skills/ssllabs/index.ts +208 -0
  90. package/workspace-templates/skills/ssllabs/skill.json +27 -0
  91. package/workspace-templates/skills/stable-diffusion-image-generation/SKILL.md +136 -0
  92. package/workspace-templates/skills/stable-diffusion-image-generation/skill.json +24 -0
  93. package/workspace-templates/skills/systematic-debugging/SKILL.md +131 -0
  94. package/workspace-templates/skills/systematic-debugging/skill.json +25 -0
  95. package/workspace-templates/skills/test-driven-development/SKILL.md +164 -0
  96. package/workspace-templates/skills/test-driven-development/skill.json +25 -0
  97. package/workspace-templates/skills/urlscan/SKILL.md +118 -0
  98. package/workspace-templates/skills/urlscan/index.ts +94 -0
  99. package/workspace-templates/skills/urlscan/skill.json +24 -0
  100. package/workspace-templates/skills/virustotal/SKILL.md +120 -0
  101. package/workspace-templates/skills/virustotal/index.ts +124 -0
  102. package/workspace-templates/skills/virustotal/skill.json +26 -0
  103. package/workspace-templates/skills/web_research/SKILL.md +18 -0
  104. package/workspace-templates/skills/web_research/skill.json +20 -0
  105. package/workspace-templates/skills/xitter/SKILL.md +148 -0
  106. package/workspace-templates/skills/xitter/skill.json +26 -0
  107. package/workspace-templates/skills/youtube-content/SKILL.md +121 -0
  108. package/workspace-templates/skills/youtube-content/skill.json +25 -0
@@ -1,225 +1,225 @@
1
- {
2
- "user": {
3
- "name": "shiva"
4
- },
5
- "model": {
6
- "active": "groq-1",
7
- "activeModel": "llama-3.3-70b-versatile"
8
- },
9
- "providers": {
10
- "ollama": {
11
- "enabled": true,
12
- "models": []
13
- },
14
- "apis": [
15
- {
16
- "model": "gemini-3-flash",
17
- "enabled": false,
18
- "rateLimited": false,
19
- "usageCount": 0,
20
- "name": "boa-1",
21
- "provider": "boa",
22
- "key": "boa-5a949b90-094c-4f35-a6ae-3fab8acc42aa"
23
- },
24
- {
25
- "model": "llama-3.3-70b-versatile",
26
- "enabled": true,
27
- "rateLimited": true,
28
- "usageCount": 72,
29
- "name": "groq-1",
30
- "provider": "groq",
31
- "key": "env:GROQ_API_KEY",
32
- "rateLimitedAt": 1777579113083,
33
- "rateLimitWindow": 300000
34
- },
35
- {
36
- "model": "llama-3.3-70b-versatile",
37
- "enabled": true,
38
- "rateLimited": true,
39
- "usageCount": 105,
40
- "name": "groq-2",
41
- "provider": "groq",
42
- "key": "env:GROQ_API_KEY_2"
43
- },
44
- {
45
- "model": "llama-3.3-70b-versatile",
46
- "enabled": true,
47
- "rateLimited": true,
48
- "usageCount": 41,
49
- "name": "groq-3",
50
- "provider": "groq",
51
- "key": "env:GROQ_API_KEY_3"
52
- },
53
- {
54
- "model": "llama-3.3-70b-versatile",
55
- "enabled": true,
56
- "rateLimited": true,
57
- "usageCount": 12,
58
- "name": "groq-4",
59
- "provider": "groq",
60
- "key": "env:GROQ_API_KEY_4"
61
- },
62
- {
63
- "model": "llama-3.3-70b-versatile",
64
- "enabled": true,
65
- "rateLimited": true,
66
- "usageCount": 7,
67
- "name": "groq-5",
68
- "provider": "groq",
69
- "key": "env:GROQ_API_KEY_5"
70
- },
71
- {
72
- "model": "llama-3.3-70b-versatile",
73
- "enabled": true,
74
- "rateLimited": false,
75
- "usageCount": 0,
76
- "name": "groq-6",
77
- "provider": "groq",
78
- "key": "env:GROQ_API_KEY_6"
79
- },
80
- {
81
- "model": "gemini-2.5-flash",
82
- "enabled": true,
83
- "rateLimited": false,
84
- "usageCount": 17,
85
- "name": "gemini-1",
86
- "provider": "gemini",
87
- "key": "env:GEMINI_API_KEY"
88
- },
89
- {
90
- "model": "gemini-2.5-flash",
91
- "enabled": true,
92
- "rateLimited": false,
93
- "usageCount": 9,
94
- "name": "gemini-2",
95
- "provider": "gemini",
96
- "key": "env:GEMINI_API_KEY_2"
97
- },
98
- {
99
- "model": "gemini-2.5-flash",
100
- "enabled": true,
101
- "rateLimited": false,
102
- "usageCount": 9,
103
- "name": "gemini-3",
104
- "provider": "gemini",
105
- "key": "env:GEMINI_API_KEY_3"
106
- },
107
- {
108
- "model": "gemini-2.5-flash",
109
- "enabled": true,
110
- "rateLimited": false,
111
- "usageCount": 9,
112
- "name": "gemini-4",
113
- "provider": "gemini",
114
- "key": "env:GEMINI_API_KEY_4"
115
- },
116
- {
117
- "model": "nvidia/llama-3.3-nemotron-super-49b-v1",
118
- "enabled": true,
119
- "rateLimited": false,
120
- "usageCount": 0,
121
- "name": "nvidia-1",
122
- "provider": "nvidia",
123
- "key": "env:NVIDIA_API_KEY"
124
- },
125
- {
126
- "model": "meta/llama-3.3-70b-instruct",
127
- "enabled": true,
128
- "rateLimited": false,
129
- "usageCount": 0,
130
- "name": "nvidia-2",
131
- "provider": "nvidia",
132
- "key": "env:NVIDIA_API_KEY"
133
- },
134
- {
135
- "model": "meta-llama/llama-3.3-70b-instruct:free",
136
- "enabled": true,
137
- "rateLimited": false,
138
- "usageCount": 7,
139
- "name": "openrouter-1",
140
- "provider": "openrouter",
141
- "key": "env:OPENROUTER_API_KEY"
142
- },
143
- {
144
- "model": "meta-llama/llama-3.3-70b-instruct:free",
145
- "enabled": true,
146
- "rateLimited": false,
147
- "usageCount": 6,
148
- "name": "openrouter-2",
149
- "provider": "openrouter",
150
- "key": "env:OPENROUTER_API_KEY_2"
151
- },
152
- {
153
- "model": "meta-llama/llama-3.3-70b-instruct:free",
154
- "enabled": true,
155
- "rateLimited": false,
156
- "usageCount": 6,
157
- "name": "openrouter-3",
158
- "provider": "openrouter",
159
- "key": "env:OPENROUTER_API_KEY_3"
160
- },
161
- {
162
- "model": "meta-llama/llama-3.1-405b-instruct",
163
- "enabled": true,
164
- "rateLimited": false,
165
- "usageCount": 7,
166
- "name": "together-1",
167
- "provider": "custom",
168
- "baseUrl": "https://api.together.xyz/v1/chat/completions",
169
- "key": "env:TOGETHER_API_KEY"
170
- },
171
- {
172
- "model": "gpt-4o-mini",
173
- "enabled": false,
174
- "rateLimited": false,
175
- "usageCount": 0,
176
- "name": "boa-2",
177
- "provider": "boa",
178
- "key": "boa-5a949b90-094c-4f35-a6ae-3fab8acc42aa"
179
- }
180
- ]
181
- },
182
- "onboardingComplete": true,
183
- "telegram": {
184
- "enabled": false,
185
- "botToken": "",
186
- "allowedChatIds": [],
187
- "pollingInterval": 1000
188
- },
189
- "routing": {
190
- "mode": "auto",
191
- "fallbackToOllama": true
192
- },
193
- "ollama": {
194
- "fallbackModels": [],
195
- "baseUrl": "http://localhost:11434",
196
- "model": "gemma4:e4b",
197
- "plannerModel": "gemma4:e4b",
198
- "coderModel": "qwen2.5-coder:7b",
199
- "fastModel": "llama3.2:latest"
200
- },
201
- "customProviders": [
202
- {
203
- "id": "bayofassets-haiku",
204
- "displayName": "BayOfAssets Haiku 4.5",
205
- "baseUrl": "https://api.bayofassets.com/v1/chat/completions",
206
- "apiKey": "boa-dd14fba0-cdee-4247-ba03-90de01674c06",
207
- "model": "claude-haiku-4-5",
208
- "enabled": false,
209
- "tier": 1
210
- },
211
- {
212
- "id": "bayofassets",
213
- "displayName": "Bay of Assets",
214
- "baseUrl": "https://api.bayofassets.com/v1",
215
- "apiKey": "boa-5a949b90-094c-4f35-a6ae-3fab8acc42aa",
216
- "model": "gemini-3-flash",
217
- "enabled": false,
218
- "tier": 2
219
- }
220
- ],
221
- "cli": {
222
- "theme": "ember"
223
- },
224
- "primaryProvider": ""
1
+ {
2
+ "user": {
3
+ "name": "shiva"
4
+ },
5
+ "model": {
6
+ "active": "groq-1",
7
+ "activeModel": "llama-3.3-70b-versatile"
8
+ },
9
+ "providers": {
10
+ "ollama": {
11
+ "enabled": true,
12
+ "models": []
13
+ },
14
+ "apis": [
15
+ {
16
+ "model": "gemini-3-flash",
17
+ "enabled": false,
18
+ "rateLimited": false,
19
+ "usageCount": 0,
20
+ "name": "boa-1",
21
+ "provider": "boa",
22
+ "key": "boa-5a949b90-094c-4f35-a6ae-3fab8acc42aa"
23
+ },
24
+ {
25
+ "model": "llama-3.3-70b-versatile",
26
+ "enabled": true,
27
+ "rateLimited": true,
28
+ "usageCount": 72,
29
+ "name": "groq-1",
30
+ "provider": "groq",
31
+ "key": "env:GROQ_API_KEY",
32
+ "rateLimitedAt": 1777579113083,
33
+ "rateLimitWindow": 300000
34
+ },
35
+ {
36
+ "model": "llama-3.3-70b-versatile",
37
+ "enabled": true,
38
+ "rateLimited": true,
39
+ "usageCount": 105,
40
+ "name": "groq-2",
41
+ "provider": "groq",
42
+ "key": "env:GROQ_API_KEY_2"
43
+ },
44
+ {
45
+ "model": "llama-3.3-70b-versatile",
46
+ "enabled": true,
47
+ "rateLimited": true,
48
+ "usageCount": 41,
49
+ "name": "groq-3",
50
+ "provider": "groq",
51
+ "key": "env:GROQ_API_KEY_3"
52
+ },
53
+ {
54
+ "model": "llama-3.3-70b-versatile",
55
+ "enabled": true,
56
+ "rateLimited": true,
57
+ "usageCount": 12,
58
+ "name": "groq-4",
59
+ "provider": "groq",
60
+ "key": "env:GROQ_API_KEY_4"
61
+ },
62
+ {
63
+ "model": "llama-3.3-70b-versatile",
64
+ "enabled": true,
65
+ "rateLimited": true,
66
+ "usageCount": 7,
67
+ "name": "groq-5",
68
+ "provider": "groq",
69
+ "key": "env:GROQ_API_KEY_5"
70
+ },
71
+ {
72
+ "model": "llama-3.3-70b-versatile",
73
+ "enabled": true,
74
+ "rateLimited": false,
75
+ "usageCount": 0,
76
+ "name": "groq-6",
77
+ "provider": "groq",
78
+ "key": "env:GROQ_API_KEY_6"
79
+ },
80
+ {
81
+ "model": "gemini-2.5-flash",
82
+ "enabled": true,
83
+ "rateLimited": false,
84
+ "usageCount": 17,
85
+ "name": "gemini-1",
86
+ "provider": "gemini",
87
+ "key": "env:GEMINI_API_KEY"
88
+ },
89
+ {
90
+ "model": "gemini-2.5-flash",
91
+ "enabled": true,
92
+ "rateLimited": false,
93
+ "usageCount": 9,
94
+ "name": "gemini-2",
95
+ "provider": "gemini",
96
+ "key": "env:GEMINI_API_KEY_2"
97
+ },
98
+ {
99
+ "model": "gemini-2.5-flash",
100
+ "enabled": true,
101
+ "rateLimited": false,
102
+ "usageCount": 9,
103
+ "name": "gemini-3",
104
+ "provider": "gemini",
105
+ "key": "env:GEMINI_API_KEY_3"
106
+ },
107
+ {
108
+ "model": "gemini-2.5-flash",
109
+ "enabled": true,
110
+ "rateLimited": false,
111
+ "usageCount": 9,
112
+ "name": "gemini-4",
113
+ "provider": "gemini",
114
+ "key": "env:GEMINI_API_KEY_4"
115
+ },
116
+ {
117
+ "model": "nvidia/llama-3.3-nemotron-super-49b-v1",
118
+ "enabled": true,
119
+ "rateLimited": false,
120
+ "usageCount": 0,
121
+ "name": "nvidia-1",
122
+ "provider": "nvidia",
123
+ "key": "env:NVIDIA_API_KEY"
124
+ },
125
+ {
126
+ "model": "meta/llama-3.3-70b-instruct",
127
+ "enabled": true,
128
+ "rateLimited": false,
129
+ "usageCount": 0,
130
+ "name": "nvidia-2",
131
+ "provider": "nvidia",
132
+ "key": "env:NVIDIA_API_KEY"
133
+ },
134
+ {
135
+ "model": "meta-llama/llama-3.3-70b-instruct:free",
136
+ "enabled": true,
137
+ "rateLimited": false,
138
+ "usageCount": 7,
139
+ "name": "openrouter-1",
140
+ "provider": "openrouter",
141
+ "key": "env:OPENROUTER_API_KEY"
142
+ },
143
+ {
144
+ "model": "meta-llama/llama-3.3-70b-instruct:free",
145
+ "enabled": true,
146
+ "rateLimited": false,
147
+ "usageCount": 6,
148
+ "name": "openrouter-2",
149
+ "provider": "openrouter",
150
+ "key": "env:OPENROUTER_API_KEY_2"
151
+ },
152
+ {
153
+ "model": "meta-llama/llama-3.3-70b-instruct:free",
154
+ "enabled": true,
155
+ "rateLimited": false,
156
+ "usageCount": 6,
157
+ "name": "openrouter-3",
158
+ "provider": "openrouter",
159
+ "key": "env:OPENROUTER_API_KEY_3"
160
+ },
161
+ {
162
+ "model": "meta-llama/llama-3.1-405b-instruct",
163
+ "enabled": false,
164
+ "rateLimited": false,
165
+ "usageCount": 7,
166
+ "name": "together-1",
167
+ "provider": "custom",
168
+ "baseUrl": "https://api.together.xyz/v1/chat/completions",
169
+ "key": "env:TOGETHER_API_KEY"
170
+ },
171
+ {
172
+ "model": "gpt-4o-mini",
173
+ "enabled": false,
174
+ "rateLimited": false,
175
+ "usageCount": 0,
176
+ "name": "boa-2",
177
+ "provider": "boa",
178
+ "key": "boa-5a949b90-094c-4f35-a6ae-3fab8acc42aa"
179
+ }
180
+ ]
181
+ },
182
+ "onboardingComplete": true,
183
+ "telegram": {
184
+ "enabled": false,
185
+ "botToken": "",
186
+ "allowedChatIds": [],
187
+ "pollingInterval": 1000
188
+ },
189
+ "routing": {
190
+ "mode": "auto",
191
+ "fallbackToOllama": true
192
+ },
193
+ "ollama": {
194
+ "fallbackModels": [],
195
+ "baseUrl": "http://localhost:11434",
196
+ "model": "gemma4:e4b",
197
+ "plannerModel": "gemma4:e4b",
198
+ "coderModel": "qwen2.5-coder:7b",
199
+ "fastModel": "llama3.2:latest"
200
+ },
201
+ "customProviders": [
202
+ {
203
+ "id": "bayofassets-haiku",
204
+ "displayName": "BayOfAssets Haiku 4.5",
205
+ "baseUrl": "https://api.bayofassets.com/v1/chat/completions",
206
+ "apiKey": "boa-dd14fba0-cdee-4247-ba03-90de01674c06",
207
+ "model": "claude-haiku-4-5",
208
+ "enabled": false,
209
+ "tier": 1
210
+ },
211
+ {
212
+ "id": "bayofassets",
213
+ "displayName": "Bay of Assets",
214
+ "baseUrl": "https://api.bayofassets.com/v1",
215
+ "apiKey": "boa-5a949b90-094c-4f35-a6ae-3fab8acc42aa",
216
+ "model": "gemini-3-flash",
217
+ "enabled": false,
218
+ "tier": 2
219
+ }
220
+ ],
221
+ "cli": {
222
+ "theme": "ember"
223
+ },
224
+ "primaryProvider": ""
225
225
  }
@@ -168,7 +168,7 @@
168
168
  },
169
169
  {
170
170
  "model": "meta-llama/llama-3.1-405b-instruct",
171
- "enabled": true,
171
+ "enabled": false,
172
172
  "rateLimited": false,
173
173
  "usageCount": 78,
174
174
  "name": "together-1",
@@ -6914,7 +6914,13 @@ ${cognitionHint}${memoryContext}${greetingPreamble}${sessionContext}${memoryInde
6914
6914
  }
6915
6915
  // Both failed — send a graceful error token
6916
6916
  console.error('[Router] All providers failed. Last error:', err?.message ?? 'unknown');
6917
- send({ token: (0, diagnosticError_1.buildDiagnostic)({ tool: 'respond', provider: 'all', retries: 2, error: 'All AI providers failed or are at capacity', suggestion: 'Try again in a few minutes, or add more API keys in Settings → API Keys.' }), done: false, provider: 'error' });
6917
+ const poolDiag = (0, router_1.diagnoseProviderPool)();
6918
+ send({ token: (0, diagnosticError_1.buildDiagnostic)({ tool: 'respond', provider: 'all', retries: 2,
6919
+ error: poolDiag.state === 'unconfigured' ? 'No API keys configured' : 'All AI providers failed or are at capacity',
6920
+ suggestion: poolDiag.state === 'unconfigured'
6921
+ ? 'Add API keys in Settings > API Keys, or start Ollama for local inference.'
6922
+ : 'Try again in a few minutes, or add more API keys in Settings > API Keys.',
6923
+ }), done: false, provider: 'error' });
6918
6924
  }
6919
6925
  streamEnded = true;
6920
6926
  clearTimeout(timeout);
@@ -1366,7 +1366,7 @@ Output ONLY valid JSON, nothing else:`;
1366
1366
  // Don't return early — let FORCE_RESPOND_TEST hook and PlannerGuard process the fallback plan
1367
1367
  console.warn('[Planner] All LLM attempts failed — respond fallback (going through guard)');
1368
1368
  parsed = {
1369
- plan: [{ step: 1, tool: 'respond', input: { message: (0, diagnosticError_1.buildDiagnostic)({ tool: 'planner', error: 'All LLM attempts failed', retries: 3, suggestion: 'Provider chain may be rate-limited. Try again in 12 minutes or rephrase your request.' }) }, description: 'Fallback response' }],
1369
+ plan: [{ step: 1, tool: 'respond', input: { message: (0, diagnosticError_1.buildDiagnostic)({ tool: 'planner', error: 'All LLM attempts failed', retries: 3, suggestion: (0, router_1.diagnoseProviderPool)().state === 'unconfigured' ? 'No API keys configured. Add keys in Settings > API Keys, or start Ollama for local inference.' : 'Provider chain is rate-limited. Try again in 1-2 minutes or rephrase your request.' }) }, description: 'Fallback response' }],
1370
1370
  requires_execution: true,
1371
1371
  goal: message,
1372
1372
  };
@@ -1492,7 +1492,9 @@ Output ONLY valid JSON, nothing else:`;
1492
1492
  tool: 'planner',
1493
1493
  error: 'Could not generate tool plan for action intent',
1494
1494
  retries: 1,
1495
- suggestion: 'Provider chain may be rate-limited. Try again in 1–2 minutes or use a more specific instruction.',
1495
+ suggestion: (0, router_1.diagnoseProviderPool)().state === 'unconfigured'
1496
+ ? 'No API keys configured. Add keys in Settings > API Keys, or start Ollama for local inference.'
1497
+ : 'Provider chain is rate-limited. Try again in 1-2 minutes or use a more specific instruction.',
1496
1498
  });
1497
1499
  }
1498
1500
  if (guardMatch) {
@@ -2737,7 +2739,10 @@ CRITICAL RULES FOR YOUR RESPONSE:
2737
2739
  if (successes.length > 0)
2738
2740
  parts.push(`Completed: ${successes.map(r => r.tool).join(', ')}.`);
2739
2741
  parts.push(`Failed: ${failures.map(r => `${r.tool} — ${r.error || 'unknown error'}`).join('; ')}.`);
2740
- parts.push('(All language providers are currently unavailable — full response cannot be generated.)');
2742
+ const poolDiag = (0, router_1.diagnoseProviderPool)();
2743
+ parts.push(`(${poolDiag.state === 'unconfigured'
2744
+ ? 'No API keys configured - add keys in Settings > API Keys'
2745
+ : 'All language providers are currently unavailable'} - full response cannot be generated.)`);
2741
2746
  onToken(parts.join(' '));
2742
2747
  return;
2743
2748
  }
@@ -197,6 +197,8 @@ class SkillLoader {
197
197
  path_1.default.join(process.cwd(), 'workspace', 'skills'),
198
198
  path_1.default.join(process.cwd(), 'workspace', 'skills', 'learned'),
199
199
  path_1.default.join(process.cwd(), 'workspace', 'skills', 'approved'),
200
+ // Workspace-level installed skills (written by skillRegistry.ts)
201
+ path_1.default.join(process.cwd(), 'workspace', 'skills', 'installed'),
200
202
  // A2/A3 approved drafts
201
203
  path_1.default.join(process.cwd(), 'skills', 'learned', 'approved'),
202
204
  // A4 library-installed skills
@@ -41,6 +41,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
41
41
  };
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
43
  exports.SLASH_MIRROR_TOOL_NAMES = void 0;
44
+ exports.toolMemoryStore = toolMemoryStore;
45
+ exports.toolMemoryForget = toolMemoryForget;
44
46
  exports.registerSlashMirrorTools = registerSlashMirrorTools;
45
47
  // core/slashAsTool.ts — Phase 3: Slash commands mirrored as agent tools.
46
48
  //
@@ -2448,6 +2448,22 @@ public class AidenVolSet {
2448
2448
  return { success: false, output: '', error: e.message };
2449
2449
  }
2450
2450
  },
2451
+ // ── memory_store — persist a fact to permanent memory ──
2452
+ memory_store: async (p) => {
2453
+ const fact = p.fact || p.text || p.content || '';
2454
+ if (!fact)
2455
+ return { success: false, output: '', error: 'No fact provided' };
2456
+ const { toolMemoryStore } = await Promise.resolve().then(() => __importStar(require('./slashAsTool')));
2457
+ return toolMemoryStore(p);
2458
+ },
2459
+ // ── memory_forget — remove a fact from permanent memory ──
2460
+ memory_forget: async (p) => {
2461
+ const fact = p.fact || p.keyword || p.text || '';
2462
+ if (!fact)
2463
+ return { success: false, output: '', error: 'No fact provided' };
2464
+ const { toolMemoryForget } = await Promise.resolve().then(() => __importStar(require('./slashAsTool')));
2465
+ return toolMemoryForget(p);
2466
+ },
2451
2467
  // ── clarify — ask the user a multi-choice or free-text question mid-task ──
2452
2468
  clarify: async (p) => {
2453
2469
  const question = p.question || p.q || '';
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // AUTO-GENERATED by scripts/inject-version.js — do not edit by hand
5
- exports.VERSION = '3.19.4';
5
+ exports.VERSION = '3.19.6';