@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.
- package/bundled/a2ui/SKILL.md +339 -0
- package/bundled/buongiorno/SKILL.md +151 -0
- package/bundled/council/SKILL.md +168 -0
- package/bundled/council/scripts/council.mjs +202 -0
- package/bundled/dreaming/SKILL.md +177 -0
- package/bundled/google-workspace/SKILL.md +229 -0
- package/bundled/google-workspace/scripts/auth.sh +87 -0
- package/bundled/google-workspace/scripts/calendar.sh +508 -0
- package/bundled/google-workspace/scripts/drive.sh +459 -0
- package/bundled/google-workspace/scripts/gmail.sh +452 -0
- package/bundled/humanizer/SKILL.md +488 -0
- package/bundled/librarian/SKILL.md +155 -0
- package/bundled/plasma/SKILL.md +1417 -0
- package/bundled/sera/SKILL.md +143 -0
- package/bundled/the-skill-guardian/SKILL.md +103 -0
- package/bundled/the-skill-guardian/scripts/scan.sh +314 -0
- package/bundled/unix-time/SKILL.md +58 -0
- package/bundled/wandering/SKILL.md +174 -0
- package/bundled/xai-search/SKILL.md +91 -0
- package/bundled/xai-search/scripts/search.sh +197 -0
- package/dist/a2ui/parser.d.ts +76 -0
- package/dist/a2ui/parser.js +1 -0
- package/dist/a2ui/types.d.ts +147 -0
- package/dist/a2ui/types.js +1 -0
- package/dist/a2ui/validator.d.ts +32 -0
- package/dist/a2ui/validator.js +1 -0
- package/dist/agent/agent-service.d.ts +17 -11
- package/dist/agent/agent-service.js +1 -1
- package/dist/agent/session-agent.d.ts +1 -1
- package/dist/agent/session-agent.js +1 -1
- package/dist/agent/session-error-handler.js +1 -1
- package/dist/commands/debuga2ui.d.ts +13 -0
- package/dist/commands/debuga2ui.js +1 -0
- package/dist/commands/debugdynamic.d.ts +13 -0
- package/dist/commands/debugdynamic.js +1 -0
- package/dist/commands/mcp.d.ts +6 -3
- package/dist/commands/mcp.js +1 -1
- package/dist/gateway/node-registry.d.ts +29 -1
- package/dist/gateway/node-registry.js +1 -1
- package/dist/installer/hera.js +1 -1
- package/dist/memory/concept-store.d.ts +109 -0
- package/dist/memory/concept-store.js +1 -0
- package/dist/nostromo/nostromo.js +1 -1
- package/dist/server.d.ts +3 -2
- package/dist/server.js +1 -1
- package/dist/tools/a2ui-tools.d.ts +23 -0
- package/dist/tools/a2ui-tools.js +1 -0
- package/dist/tools/concept-tools.d.ts +3 -0
- package/dist/tools/concept-tools.js +1 -0
- package/dist/tools/dynamic-ui-tools.d.ts +25 -0
- package/dist/tools/dynamic-ui-tools.js +1 -0
- package/dist/tools/node-tools.js +1 -1
- package/dist/tools/plasma-client-tools.d.ts +28 -0
- package/dist/tools/plasma-client-tools.js +1 -0
- package/installationPkg/AGENTS.md +168 -22
- package/installationPkg/SOUL.md +56 -0
- package/installationPkg/TOOLS.md +126 -0
- package/installationPkg/USER.md +54 -1
- package/installationPkg/config.example.yaml +145 -34
- package/installationPkg/default-jobs.json +77 -0
- 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"
|
|
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
|
|
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:
|
|
129
|
+
port: 3004
|
|
130
130
|
|
|
131
131
|
models: # model registry
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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: "
|
|
280
|
+
recallStrategy: "search" # builtin-only | search
|
|
178
281
|
search:
|
|
179
|
-
enabled:
|
|
180
|
-
modelRef: ""
|
|
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:
|
|
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:
|
|
199
|
-
modelRefs:
|
|
200
|
-
|
|
201
|
-
|
|
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:
|
|
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:
|
|
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
|
|
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
|
-
|
|
345
|
-
|
|
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.
|
|
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
|
-
"@
|
|
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",
|