@hera-al/server 1.6.12 → 1.6.13

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 (61) hide show
  1. package/bundled/a2ui/SKILL.md +339 -0
  2. package/bundled/buongiorno/SKILL.md +151 -0
  3. package/bundled/council/SKILL.md +168 -0
  4. package/bundled/council/scripts/council.mjs +202 -0
  5. package/bundled/dreaming/SKILL.md +177 -0
  6. package/bundled/google-workspace/SKILL.md +229 -0
  7. package/bundled/google-workspace/scripts/auth.sh +87 -0
  8. package/bundled/google-workspace/scripts/calendar.sh +508 -0
  9. package/bundled/google-workspace/scripts/drive.sh +459 -0
  10. package/bundled/google-workspace/scripts/gmail.sh +452 -0
  11. package/bundled/humanizer/SKILL.md +488 -0
  12. package/bundled/librarian/SKILL.md +155 -0
  13. package/bundled/plasma/SKILL.md +1417 -0
  14. package/bundled/sera/SKILL.md +143 -0
  15. package/bundled/the-skill-guardian/SKILL.md +103 -0
  16. package/bundled/the-skill-guardian/scripts/scan.sh +314 -0
  17. package/bundled/unix-time/SKILL.md +58 -0
  18. package/bundled/wandering/SKILL.md +174 -0
  19. package/bundled/xai-search/SKILL.md +91 -0
  20. package/bundled/xai-search/scripts/search.sh +197 -0
  21. package/dist/a2ui/parser.d.ts +76 -0
  22. package/dist/a2ui/parser.js +1 -0
  23. package/dist/a2ui/types.d.ts +147 -0
  24. package/dist/a2ui/types.js +1 -0
  25. package/dist/a2ui/validator.d.ts +32 -0
  26. package/dist/a2ui/validator.js +1 -0
  27. package/dist/agent/agent-service.d.ts +17 -11
  28. package/dist/agent/agent-service.js +1 -1
  29. package/dist/agent/session-agent.d.ts +1 -1
  30. package/dist/agent/session-agent.js +1 -1
  31. package/dist/agent/session-error-handler.js +1 -1
  32. package/dist/commands/debuga2ui.d.ts +13 -0
  33. package/dist/commands/debuga2ui.js +1 -0
  34. package/dist/commands/debugdynamic.d.ts +13 -0
  35. package/dist/commands/debugdynamic.js +1 -0
  36. package/dist/commands/mcp.d.ts +6 -3
  37. package/dist/commands/mcp.js +1 -1
  38. package/dist/gateway/node-registry.d.ts +29 -1
  39. package/dist/gateway/node-registry.js +1 -1
  40. package/dist/installer/hera.js +1 -1
  41. package/dist/memory/concept-store.d.ts +109 -0
  42. package/dist/memory/concept-store.js +1 -0
  43. package/dist/nostromo/nostromo.js +1 -1
  44. package/dist/server.d.ts +3 -2
  45. package/dist/server.js +1 -1
  46. package/dist/tools/a2ui-tools.d.ts +23 -0
  47. package/dist/tools/a2ui-tools.js +1 -0
  48. package/dist/tools/concept-tools.d.ts +3 -0
  49. package/dist/tools/concept-tools.js +1 -0
  50. package/dist/tools/dynamic-ui-tools.d.ts +25 -0
  51. package/dist/tools/dynamic-ui-tools.js +1 -0
  52. package/dist/tools/node-tools.js +1 -1
  53. package/dist/tools/plasma-client-tools.d.ts +28 -0
  54. package/dist/tools/plasma-client-tools.js +1 -0
  55. package/installationPkg/AGENTS.md +168 -22
  56. package/installationPkg/SOUL.md +56 -0
  57. package/installationPkg/TOOLS.md +126 -0
  58. package/installationPkg/USER.md +54 -1
  59. package/installationPkg/config.example.yaml +145 -34
  60. package/installationPkg/default-jobs.json +77 -0
  61. package/package.json +3 -2
@@ -7,7 +7,7 @@ host: "127.0.0.1" # bind address for HTTP servers
7
7
  logLevel: "info" # debug | info | warn | error
8
8
  verboseDebugLogs: true # show full prompt/response text in debug logs (false = truncate to 15 chars)
9
9
  timezone: "" # auto-detected on first boot (e.g. Europe/Rome, America/New_York)
10
- fastProxyUrl: "http://localhost:4181" # URL of the fast proxy server for proxied external models
10
+ fastProxyUrl: "http://localhost:4181" # Anthropic Tool Name proxy URL (atn-proxy)
11
11
 
12
12
  channels:
13
13
  telegram:
@@ -27,7 +27,7 @@ channels:
27
27
 
28
28
  # reactionLevel: "ack" # agent reaction capability (default: "ack")
29
29
  # off - no reactions
30
- # ack - bot shows 👀 while processing
30
+ # ack - bot shows eye while processing
31
31
  # minimal - agent can react sparingly (~1 per 5-10 messages)
32
32
  # extensive - agent can react liberally when appropriate
33
33
 
@@ -126,25 +126,128 @@ channels:
126
126
 
127
127
  responses:
128
128
  enabled: true
129
- port: 3000
129
+ port: 3004
130
130
 
131
131
  models: # model registry
132
- - id: "claude-opus-4-6"
133
- name: "Claude Opus"
134
- types: [internal] # internal | external
132
+ # ─── Internal models (Anthropic, via SDK) ──────────────────────
133
+ - id: claude-opus-4-6
134
+ name: Claude Opus
135
+ types: [internal] # internal | external | env-var
136
+ - id: claude-sonnet-4-6
137
+ name: Claude Sonnet
138
+ types: [internal]
139
+ - id: claude-haiku-3-5-20241022
140
+ name: Claude Haiku
141
+ types: [internal]
142
+
143
+ # ─── External models (direct API) ─────────────────────────────
135
144
  - id: openai
136
145
  name: OpenAI
137
- types:
138
- - external
139
- proxy: "not-used" # not-used | direct | proxied
140
- fastUrl: "" # OpenAI-compatible proxy URL (used when proxy is direct or proxied)
141
- fastProxyApiKey: "" # API key for the proxy endpoint (sk-...)
142
- apiKey: ""
146
+ types: [external]
147
+ apiKey: "${OPENAI_API_KEY}"
143
148
  baseURL: https://api.openai.com/v1
144
149
  useEnvVar: ""
150
+ contextWindow: 200000
151
+ costInput: 0
152
+ costOutput: 0
153
+ costCacheRead: 0
154
+ costCacheWrite: 0
155
+ - id: embeddinggemma
156
+ name: Embedding Gemma
157
+ types: [external]
158
+ apiKey: "${EMBEDDING_GEMMA}"
159
+ baseURL: http://localhost:11434/api # local Ollama endpoint
160
+ useEnvVar: EMBEDDING_GEMMA
161
+ contextWindow: 8192
162
+ costInput: 0
163
+ costOutput: 0
164
+ costCacheRead: 0
165
+ costCacheWrite: 0
166
+
167
+ # ─── Env-var entries (credential storage) ──────────────────────
168
+ - id: GOOGLE_CLIENT_ID
169
+ name: Google Client ID
170
+ types: [env-var]
171
+ apiKey: "${GOOGLE_CLIENT_ID}"
172
+ baseURL: ""
173
+ useEnvVar: GOOGLE_CLIENT_ID
174
+ - id: GOOGLE_CLIENT_SECRET
175
+ name: Google Client Secret
176
+ types: [env-var]
177
+ apiKey: "${GOOGLE_CLIENT_SECRET}"
178
+ baseURL: ""
179
+ useEnvVar: GOOGLE_CLIENT_SECRET
180
+ - id: OPENROUTER_API_KEY
181
+ name: OpenRouter Key
182
+ types: [env-var]
183
+ apiKey: "${OPENROUTER_API_KEY}"
184
+ baseURL: ""
185
+ useEnvVar: OPENROUTER_API_KEY
186
+
187
+ # ─── OpenRouter models (external, via openrouter.ai) ───────────
188
+ - id: "openrouter:openai/gpt-5.2"
189
+ name: OpenRouter GPT
190
+ types: [external]
191
+ apiKey: "${OPENROUTER_API_KEY}"
192
+ baseURL: https://openrouter.ai/api/v1
193
+ contextWindow: 400000
194
+ costInput: 0
195
+ costOutput: 0
196
+ costCacheRead: 0
197
+ costCacheWrite: 0
198
+ - id: "openrouter:google/gemini-3-flash-preview"
199
+ name: OpenRouter Flash
200
+ types: [external]
201
+ apiKey: "${OPENROUTER_API_KEY}"
202
+ baseURL: https://openrouter.ai/api/v1
203
+ contextWindow: 1000000
204
+ costInput: 0
205
+ costOutput: 0
206
+ costCacheRead: 0
207
+ costCacheWrite: 0
208
+ - id: "openrouter:openai/gpt-4.1-mini"
209
+ name: OpenRouter RollingMem
210
+ types: [external]
211
+ apiKey: "${OPENROUTER_API_KEY}"
212
+ baseURL: https://openrouter.ai/api/v1
213
+ contextWindow: 1000000
214
+ costInput: 0
215
+ costOutput: 0
216
+ costCacheRead: 0
217
+ costCacheWrite: 0
218
+ - id: "openrouter:x-ai/grok-4.1-fast"
219
+ name: OpenRouter Grok
220
+ types: [external]
221
+ apiKey: "${OPENROUTER_API_KEY}"
222
+ baseURL: https://openrouter.ai/api/v1
223
+ contextWindow: 2000000
224
+ costInput: 0
225
+ costOutput: 0
226
+ costCacheRead: 0
227
+ costCacheWrite: 0
228
+ - id: "openrouter:google/gemini-3-pro-preview"
229
+ name: OpenRouter GeminiPro
230
+ types: [external]
231
+ apiKey: "${OPENROUTER_API_KEY}"
232
+ baseURL: https://openrouter.ai/api/v1
233
+ contextWindow: 1000000
234
+ costInput: 0
235
+ costOutput: 0
236
+ costCacheRead: 0
237
+ costCacheWrite: 0
238
+ - id: "openrouter:anthropic/claude-opus-4.6"
239
+ name: OpenRouter Opus1m
240
+ types: [external]
241
+ apiKey: "${OPENROUTER_API_KEY}"
242
+ baseURL: https://openrouter.ai/api/v1
243
+ contextWindow: 1000000
244
+ costInput: 0
245
+ costOutput: 0
246
+ costCacheRead: 0
247
+ costCacheWrite: 0
145
248
 
146
249
  stt:
147
- enabled: false
250
+ enabled: true
148
251
  provider: openai-whisper # openai-whisper | local-whisper
149
252
  openai-whisper:
150
253
  modelRef: "OpenAI" # references a model name in the models registry (for API key)
@@ -155,7 +258,7 @@ stt:
155
258
  model: "base"
156
259
 
157
260
  tts:
158
- enabled: false
261
+ enabled: true
159
262
  provider: openai # openai | edge | elevenlabs
160
263
  maxTextLength: 4096
161
264
  timeoutMs: 30000
@@ -166,7 +269,7 @@ tts:
166
269
  openai:
167
270
  modelRef: "OpenAI" # references a model name in the models registry (for API key)
168
271
  model: gpt-4o-mini-tts # actual model ID sent to the OpenAI API
169
- voice: alloy
272
+ voice: echo
170
273
  elevenlabs:
171
274
  modelRef: ""
172
275
  voiceId: pMsXgVXv3BLzUgSXRplE
@@ -174,31 +277,38 @@ tts:
174
277
 
175
278
  memory:
176
279
  enabled: true
177
- recallStrategy: "builtin-only" # builtin-only | search
280
+ recallStrategy: "search" # builtin-only | search
178
281
  search:
179
- enabled: false # enable hybrid BM25 + semantic search over memory
180
- modelRef: "" # references a model in the models registry (for API key + base URL)
282
+ enabled: true # enable hybrid BM25 + semantic search over memory
283
+ modelRef: "Embedding Gemma" # references a model in the models registry (for API key + base URL)
181
284
  embeddingModel: "text-embedding-3-small"
182
285
  prefixQuery: "" # prefix template for query embeddings (use {content} placeholder)
183
286
  prefixDocument: "" # prefix template for document embeddings (use {content} placeholder)
184
287
  embeddingDimensions: 1536 # 512, 768, or 1536 (native) — lower = faster, higher = more precise
185
288
  updateDebounceMs: 3000 # debounce for fs.watch before re-indexing
186
289
  embedIntervalMs: 300000 # interval (ms) between embedding cycles (5 min)
187
- maxResults: 10 # default max results returned by memory_search
290
+ maxResults: 6 # default max results returned by memory_search
188
291
  maxSnippetChars: 700 # max chars per snippet in results
189
292
  maxInjectedChars: 4000 # max total chars injected into context from search results
190
293
  rrfK: 60 # RRF fusion constant (higher = smoother blending)
191
- dir: "./memory" # memory storage directory (relative to gmabPath/data)
192
294
 
193
295
  agent:
194
296
  model: "Claude Opus" # model name or ID from the models registry (format: "Name:id")
195
297
  mainFallback: "" # fallback model if primary fails (name or ID)
298
+ # engine — agent execution engine
299
+ engine:
300
+ type: "claudecode" # claudecode | pi
301
+ piModelRef: "" # for pi engine: "Name:provider:modelId" (e.g. "GPT:openrouter:openai/gpt-5.2")
196
302
  # picoAgent — use external LLM providers (OpenRouter, OpenAI, etc.) via pi-ai instead of Claude SDK
197
303
  picoAgent:
198
- enabled: false
199
- modelRefs: [] # list of "Name:provider:modelId" refs (e.g. "GPT:openrouter:openai/gpt-5.2")
200
- rollingMemoryModel: "" # model for context summarization, full ref format (e.g. "MyModel:openrouter:openai/gpt-4.1-mini")
201
- maxTurns: 30
304
+ enabled: true
305
+ modelRefs: # list of "Name:provider:modelId" refs
306
+ - "Flash:openrouter:google/gemini-3-flash-preview"
307
+ - "GeminiPro:openrouter:google/gemini-3-pro-preview"
308
+ - "Grok:openrouter:x-ai/grok-4.1-fast"
309
+ - "Opus1m:openrouter:anthropic/claude-opus-4.6"
310
+ rollingMemoryModel: "RollingMem:openrouter:openai/gpt-4.1-mini"
311
+ maxTurns: 300
202
312
  permissionMode: "bypassPermissions"
203
313
  sessionTTL: 3600
204
314
  workspacePath: "./workspace" # agent's working directory
@@ -216,16 +326,17 @@ agent:
216
326
  queueDropPolicy: "summarize"
217
327
  allowedTools:
218
328
  - "Read"
219
- - "Grep"
220
- - "Bash"
221
- - "WebSearch"
222
- - "Glob"
223
329
  - "Write"
224
330
  - "Edit"
331
+ - "Bash"
332
+ - "Glob"
333
+ - "Grep"
334
+ - "WebSearch"
225
335
  - "WebFetch"
226
336
  - "Task"
227
337
  - "Skill"
228
- disallowedTools: []
338
+ disallowedTools:
339
+ - NotebookEdit
229
340
  mcpServers: {}
230
341
  builtinCoderSkill: false # enable coder skill in system prompt (toggle at runtime with /coder on|off)
231
342
  settingSources: project # SDK settings to load: nothing | user | project | both
@@ -318,7 +429,7 @@ agent:
318
429
  plugins: [] # local plugins, configurable via Nostromo UI
319
430
  inflightTyping: true # keep typing indicator active when multiple messages are in-flight
320
431
  autoApproveTools: true # auto-approve SDK tool permissions; when false, asks user via channel buttons
321
- autoRenew: 0 # auto-renew session after N consecutive errors (0 = disabled)
432
+ autoRenew: 4 # auto-renew session after N consecutive errors (0 = disabled)
322
433
 
323
434
  cron:
324
435
  enabled: true
@@ -326,7 +437,7 @@ cron:
326
437
  broadcastEvents: false # deliver cron responses to all known chats across all active channels
327
438
  # storePath: "" # leave empty for default (data/cron/jobs.json)
328
439
  heartbeat:
329
- enabled: false
440
+ enabled: true
330
441
  every: 1800000
331
442
  channel: ""
332
443
  chatId: ""
@@ -336,10 +447,10 @@ cron:
336
447
  nostromo:
337
448
  enabled: true
338
449
  port: 3001
339
- basePath: "/nostromo" # base URL path for the admin UI (e.g. /nostromo http://host:port/nostromo)
450
+ basePath: "/nostromo" # base URL path for the admin UI (e.g. /nostromo -> http://host:port/nostromo)
340
451
  configCheckInterval: 5 # seconds between config file checks
341
452
  autoRestart: true # auto-restart server when config.yaml changes
342
453
 
343
454
  browser:
344
- enabled: false
345
- controlPort: 3003
455
+ enabled: false
456
+ controlPort: 3003
@@ -0,0 +1,77 @@
1
+ {
2
+ "version": 1,
3
+ "jobs": [
4
+ {
5
+ "id": "cron-dreaming-default",
6
+ "name": "dreaming",
7
+ "description": "Nightly memory consolidation — rereads past week's conversations, identifies patterns, updates MEMORY.md + concept map, writes dream journal",
8
+ "enabled": true,
9
+ "isolated": true,
10
+ "suppressToken": true,
11
+ "createdAtMs": 0,
12
+ "updatedAtMs": 0,
13
+ "schedule": {
14
+ "kind": "cron",
15
+ "expr": "0 3 * * *"
16
+ },
17
+ "channel": "",
18
+ "chatId": "",
19
+ "message": "It's 03:00 — time to dream. Load the dreaming skill and execute the full nightly cycle: gather the past week's conversations, digest patterns, synthesize insights, write the dream journal, update MEMORY.md and the concept map. Only message the user if you discover something genuinely interesting.",
20
+ "state": {}
21
+ },
22
+ {
23
+ "id": "cron-buongiorno-default",
24
+ "name": "buongiorno",
25
+ "description": "Morning standup: delivery report from overnight work, service health, weather, calendar, priorities for the day.",
26
+ "enabled": true,
27
+ "isolated": true,
28
+ "suppressToken": true,
29
+ "createdAtMs": 0,
30
+ "updatedAtMs": 0,
31
+ "schedule": {
32
+ "kind": "cron",
33
+ "expr": "0 7 * * *"
34
+ },
35
+ "channel": "",
36
+ "chatId": "",
37
+ "message": "It's 07:00 — time for the morning standup. Load the \"buongiorno\" skill and execute the full morning cycle. PRIORITY ORDER: 1) Check HEARTBEAT.md and workspace for overnight work results — report what was DELIVERED. 2) Quick service health check: run Google scripts LOCALLY (gmail.sh, drive.sh — they run on this server, NOT on remote nodes). Check connected nodes with list_nodes ONLY as info — if a node is offline, just note it and MOVE ON immediately. Do NOT wait, do NOT retry. 3) Calendar events and reminders for today (Google Calendar via local scripts; skip Apple Reminders if the Mac node is offline). 4) Weather for the user's city (condensed). 5) Suggest 2-3 priorities for the day. Compose a concise standup message focusing on DELIVERABLES and send it to the user. Update HEARTBEAT.md with today's task checklist. Log results in workspace/agent-thoughts/buongiorno-log.md. CRITICAL: This job has a 10-minute timeout. Do NOT spend more than 30 seconds on any single tool call. If something hangs, skip it and move on.",
38
+ "state": {}
39
+ },
40
+ {
41
+ "id": "cron-sera-default",
42
+ "name": "sera",
43
+ "description": "Evening task collector and overnight work planner. Collects open tasks, plans autonomous overnight work, updates HEARTBEAT.md for morning standup.",
44
+ "enabled": true,
45
+ "isolated": true,
46
+ "suppressToken": true,
47
+ "createdAtMs": 0,
48
+ "updatedAtMs": 0,
49
+ "schedule": {
50
+ "kind": "cron",
51
+ "expr": "0 22 * * *"
52
+ },
53
+ "channel": "",
54
+ "chatId": "",
55
+ "message": "It's 23:00 — time for the evening review. Load the \"sera\" skill and execute the full evening cycle: scan today's conversations and HEARTBEAT.md for open tasks, triage them (autonomous tonight / needs user / blocked), execute what you can autonomously, update HEARTBEAT.md with overnight work status and tomorrow's checklist. Only message the user if you have significant overnight work planned or completed something noteworthy. Log results in workspace/agent-thoughts/sera-log.md.",
56
+ "state": {}
57
+ },
58
+ {
59
+ "id": "cron-librarian-default",
60
+ "name": "librarian_v2",
61
+ "description": "Memory hygiene: deduplicate, clean, and organize MEMORY.md and concept map. Runs Wed + Sun at 04:00 (after dreaming).",
62
+ "enabled": true,
63
+ "isolated": true,
64
+ "suppressToken": true,
65
+ "createdAtMs": 0,
66
+ "updatedAtMs": 0,
67
+ "schedule": {
68
+ "kind": "cron",
69
+ "expr": "0 4 * * 0,3"
70
+ },
71
+ "channel": "",
72
+ "chatId": "",
73
+ "message": "It's 04:00 — time for memory housekeeping. Load the librarian skill and execute the full cycle:\n\n1. Read MEMORY.md completely — note the line count\n2. Read conversation logs from the last 3-4 days (memory/**/*.md, skip dreams/ and librarian/ subfolders)\n3. Read the latest dream journal from memory/dreams/\n4. Read the latest librarian report from memory/librarian/ (if any exists)\n5. **MANDATORY BACKUP**: Before ANY edit, copy MEMORY.md to memory/librarian/MEMORY.md.YYYY-MM-DD.bak (use today's date). If the copy fails, STOP and do not edit. Report the failure.\n6. Scan MEMORY.md for: duplicated information, stale TODOs (completed or abandoned >2 weeks), contradictions, outdated facts, session entries that can be compressed\n7. Review the [CONCEPTS] and [CONCEPT_MAP] RDF sections for: orphan concepts, orphan references, duplicate triples, stale relationships, naming inconsistencies\n8. Apply changes surgically to MEMORY.md — remove clear duplicates, compress old session entries, fix contradictions, clean concept map. When in doubt, DO NOT remove — flag it instead.\n9. Write a librarian report to memory/librarian/YYYY-MM-DD.md (use today's date) with: lines before/after, changes made, items flagged for review, health assessment\n10. ONLY message the user if major cleanup was done (>20 lines removed), contradictions were found, or items need their decision. Otherwise stay silent.",
74
+ "state": {}
75
+ }
76
+ ]
77
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hera-al/server",
3
- "version": "1.6.12",
3
+ "version": "1.6.13",
4
4
  "private": false,
5
5
  "description": "Hera Artificial Life — Multi-channel AI agent gateway with autonomous capabilities",
6
6
  "license": "MIT",
@@ -62,7 +62,8 @@
62
62
  "restore-workspace": "./scripts/restore-workspace.sh"
63
63
  },
64
64
  "dependencies": {
65
- "@anthropic-ai/claude-agent-sdk": "latest",
65
+ "@a2ui/lit": "^0.8.1",
66
+ "@anthropic-ai/claude-agent-sdk": "^0.2.50",
66
67
  "@clack/prompts": "^1.0.0",
67
68
  "@grammyjs/runner": "^2.0.3",
68
69
  "@hera-al/browser-server": "^1.0.5",