metame-cli 1.5.9 → 1.5.11

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.
@@ -97,7 +97,7 @@ function withBufferLock(fn) {
97
97
  acquired = true;
98
98
  break;
99
99
  } catch (e) {
100
- if (e.code !== 'EEXIST') throw e;
100
+ if (e.code !== 'EEXIST') return false; // non-EEXIST errors (EMFILE, EACCES) → skip lock gracefully
101
101
  try {
102
102
  const age = Date.now() - fs.statSync(LOCK_FILE).mtimeMs;
103
103
  if (age > LOCK_STALE_MS) {
@@ -159,12 +159,12 @@ process.stdin.on('end', () => {
159
159
  // Skip empty or very short messages
160
160
  // Chinese chars carry more info per char, so use weighted length
161
161
  const weightedLen = [...prompt].reduce((sum, ch) => sum + (ch.charCodeAt(0) > 0x2e80 ? 3 : 1), 0);
162
- if (weightedLen < 15) {
162
+ if (!isMeta && weightedLen < 15) {
163
163
  process.exit(0);
164
164
  }
165
165
 
166
166
  // Hard cap to prevent giant prompt pastes from poisoning distill budget.
167
- if (prompt.length > ABSOLUTE_MAX_CAPTURE_CHARS) {
167
+ if (!isMeta && prompt.length > ABSOLUTE_MAX_CAPTURE_CHARS) {
168
168
  process.exit(0);
169
169
  }
170
170
  if (prompt.length > MAX_CAPTURE_CHARS) {
@@ -75,6 +75,7 @@ const DEFAULT_POLICY = {
75
75
  min_evidence_for_gap: 3,
76
76
  max_updates_per_analysis: 3,
77
77
  max_gaps_per_analysis: 2,
78
+ max_signals_per_analysis: 30, // cap signals sent to Haiku per run
78
79
 
79
80
  // Workflow discovery
80
81
  workflow_discovery_interval: 2, // every N cold-path cycles
@@ -200,6 +201,7 @@ function sanitizePolicy(input) {
200
201
  min_evidence_for_gap: clampInt(merged.min_evidence_for_gap, DEFAULT_POLICY.min_evidence_for_gap, 1, 20),
201
202
  max_updates_per_analysis: clampInt(merged.max_updates_per_analysis, DEFAULT_POLICY.max_updates_per_analysis, 1, 20),
202
203
  max_gaps_per_analysis: clampInt(merged.max_gaps_per_analysis, DEFAULT_POLICY.max_gaps_per_analysis, 1, 20),
204
+ max_signals_per_analysis: clampInt(merged.max_signals_per_analysis, DEFAULT_POLICY.max_signals_per_analysis, 5, 100),
203
205
  workflow_discovery_interval: clampInt(merged.workflow_discovery_interval, DEFAULT_POLICY.workflow_discovery_interval, 1, 100),
204
206
  min_signals_for_workflow: clampInt(merged.min_signals_for_workflow, DEFAULT_POLICY.min_signals_for_workflow, 1, 100),
205
207
  workflow_proposal_threshold: clampInt(merged.workflow_proposal_threshold, DEFAULT_POLICY.workflow_proposal_threshold, 2, 50),
@@ -610,8 +612,15 @@ async function distillSkills() {
610
612
  if (!content) return null;
611
613
 
612
614
  const lines = content.split('\n');
613
- const signals = lines.map(l => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean);
614
- if (signals.length < policy.min_signals_for_distill) return null;
615
+ const allSignals = lines.map(l => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean);
616
+ if (allSignals.length < policy.min_signals_for_distill) return null;
617
+
618
+ // Cap signals sent to Haiku to avoid prompt bloat / timeout.
619
+ // Keep most recent signals (higher relevance); overflow is still cleared.
620
+ const maxSignals = policy.max_signals_per_analysis || 30;
621
+ const signals = allSignals.length > maxSignals
622
+ ? allSignals.slice(-maxSignals)
623
+ : allSignals;
615
624
 
616
625
  // Get installed skills list
617
626
  const installedSkills = listInstalledSkills();
@@ -1,444 +0,0 @@
1
- telegram:
2
- enabled: true
3
- bot_token: 8403757601:AAEouYu9BFDzg70EDjPlsHXbGJ2guNuH9Tg
4
- allowed_chat_ids:
5
- - 8572284648
6
- permissions:
7
- defaultMode: bypassPermissions
8
- chat_agent_map: {}
9
- feishu:
10
- enabled: true
11
- app_id: cli_a90a073b2ba1dbb4
12
- app_secret: Om2sn22xfMaM0Jfv4IGLNh0CftikG8mU
13
- operator_ids:
14
- - ou_f873edab380d4836f93cc9e9b9104f5a
15
- allowed_chat_ids:
16
- - oc_84be4bf1a1dabc6c1f0c22d0b6feaf8d
17
- - oc_2693fc5ca63064f144eca78264bcea48
18
- - oc_280f2c243f348d8f688580f882996bcd
19
- - oc_942de23c38ff876f73f163052fbdb68f
20
- - oc_987e0d01804ab9459272006416a935a8
21
- - oc_9dc62f6011b337b413eef81b4738883b
22
- - oc_8902c34a0fc52b28ada1a7c4e25aa22a
23
- - oc_e777c7e7a24335ecbf25ed129402af54
24
- - oc_5d76f02c21203c5ae1c19fd83c790ba4
25
- - oc_9cbeb5cfcef80ddffcf0419507391189
26
- - oc_bd0b81e62ff3576dc9b4c6670bb788d2
27
- - oc_e33569664c1c1224d44a864a4fb40dd2
28
- chat_agent_map:
29
- oc_84be4bf1a1dabc6c1f0c22d0b6feaf8d: metame
30
- oc_2693fc5ca63064f144eca78264bcea48: personal
31
- oc_280f2c243f348d8f688580f882996bcd: metame
32
- oc_942de23c38ff876f73f163052fbdb68f: digital_me
33
- oc_987e0d01804ab9459272006416a935a8: desktop
34
- oc_9dc62f6011b337b413eef81b4738883b: ___
35
- oc_8902c34a0fc52b28ada1a7c4e25aa22a: business
36
- oc_e777c7e7a24335ecbf25ed129402af54: personal
37
- oc_5d76f02c21203c5ae1c19fd83c790ba4: munger
38
- oc_9cbeb5cfcef80ddffcf0419507391189: achat_pm
39
- oc_bd0b81e62ff3576dc9b4c6670bb788d2: xianyu
40
- oc_e33569664c1c1224d44a864a4fb40dd2: drama_manager
41
- permissions:
42
- defaultMode: bypassPermissions
43
- projects:
44
- business:
45
- name: CEO · 商业决策
46
- icon: 💼
47
- color: orange
48
- cwd: ~/AGI/Business
49
- nicknames:
50
- - 艾布
51
- - CEO
52
- - 商业
53
- heartbeat_tasks: []
54
- team:
55
- - key: hunter
56
- name: 猎手 · 市场情报
57
- icon: 🔍
58
- color: green
59
- cwd: ~/AGI/Business/team/hunter
60
- nicknames:
61
- - 猎手
62
- - Hunter
63
- - key: builder
64
- name: 工匠 · MVP拼装
65
- icon: 🔧
66
- color: yellow
67
- cwd: ~/AGI/Business/team/builder
68
- nicknames:
69
- - 工匠
70
- - Builder
71
- - key: trojan
72
- name: 特洛伊 · 获客专家
73
- icon: 🎯
74
- color: red
75
- cwd: ~/AGI/Business/team/trojan
76
- nicknames:
77
- - 特洛伊
78
- - Trojan
79
- - key: closer
80
- name: 终结者 · 成交专家
81
- icon: 💰
82
- color: purple
83
- cwd: ~/AGI/Business/team/closer
84
- nicknames:
85
- - 终结者
86
- - Closer
87
- - key: xianyu
88
- name: 小鱼 · 咸鱼客服
89
- icon: 🐟
90
- color: cyan
91
- cwd: ~/AGI/Business/team/xianyu
92
- nicknames:
93
- - 小鱼
94
- - 咸鱼客服
95
- achat_pm:
96
- name: A哥 · AChat Protocol PM
97
- icon: 🔗
98
- color: blue
99
- cwd: ~/AGI/AChat
100
- nicknames:
101
- - A哥
102
- - 老A
103
- - 大A
104
- - achat
105
- heartbeat_tasks: []
106
- munger:
107
- name: 芒格 · 格栅思维顾问
108
- icon: 🧠
109
- color: teal
110
- cwd: ~/AGI/Munger
111
- nicknames:
112
- - 芒格
113
- - 查理
114
- - 私人顾问
115
- - munger
116
- heartbeat_tasks: []
117
- team:
118
- - key: buffett
119
- name: 巴菲特 · 价值投资
120
- icon: 🏦
121
- color: blue
122
- cwd: ~/AGI/Munger/team/buffett
123
- nicknames:
124
- - 巴菲特
125
- - 老巴
126
- - key: lynch
127
- name: 林奇 · 成长股猎手
128
- icon: 📈
129
- color: green
130
- cwd: ~/AGI/Munger/team/lynch
131
- nicknames:
132
- - 林奇
133
- - 彼得
134
- - key: howard
135
- name: 马克斯 · 风险管理
136
- icon: ⚖️
137
- color: orange
138
- cwd: ~/AGI/Munger/team/howard
139
- nicknames:
140
- - 马克斯
141
- - 霍华德
142
- - key: quant
143
- name: 量化官 · 数据执行
144
- icon: 📊
145
- color: purple
146
- cwd: ~/AGI/Munger/team/quant
147
- nicknames:
148
- - 量化官
149
- personal:
150
- name: personal
151
- icon: 💅
152
- color: carmine
153
- cwd: /Users/yaron
154
- engine: claude
155
- model: sonnet
156
- guard: user-only
157
- nicknames:
158
- - 小美
159
- - 助理
160
- - personal
161
- heartbeat_tasks: []
162
- digital_me:
163
- name: Digital Me
164
- icon: 📊
165
- color: grey
166
- cwd: ~/AGI/Digital_Me
167
- nicknames:
168
- - 小D
169
- - 3D
170
- - 自媒体
171
- heartbeat_tasks:
172
- - name: daily-topic-radar
173
- type: script
174
- command: bash /Users/yaron/AGI/TrendRadar/run-crawl.sh
175
- at: '09:00'
176
- require_idle: false
177
- notify: true
178
- enabled: true
179
- - name: weekend-review
180
- cwd: ~/AGI/Digital_Me
181
- model: haiku
182
- interval: 5m
183
- timeout: 120000
184
- notify: true
185
- enabled: true
186
- precondition: node -e "const fs=require('fs');const p=process.env.HOME+'/.metame/daemon_state.json';const key='weekend-review';const pad=n=>String(n).padStart(2,'0');const weekKey=d=>{const x=new Date(d);const day=(x.getDay()+6)%7;x.setHours(0,0,0,0);x.setDate(x.getDate()-day);return x.getFullYear()+'-'+pad(x.getMonth()+1)+'-'+pad(x.getDate());};const now=new Date();const dow=now.getDay();if(!(dow===0||dow===6))process.exit(1);if(now.getHours()!==22)process.exit(1);let s={};try{s=JSON.parse(fs.readFileSync(p,'utf8'));}catch{}const t=(s.tasks||{})[key];if(t&&t.status==='success'&&t.last_run&&weekKey(t.last_run)===weekKey(now))process.exit(1);console.log('run');"
187
- prompt: |-
188
- 你是周末复盘助手。现在执行周末总结:先向用户索取本周关键数据,再给出下周选题方案提示词。
189
- 硬性要求:不臆测数据,不直接给结论。
190
- 输出结构(严格三段):
191
- 1) 【请补充本周数据】列出 6 项:发布篇数、总阅读、平均阅读、最高阅读文章(标题+阅读量)、最低阅读文章(标题+阅读量)、净增粉丝。
192
- 2) 【回填模板】给可直接复制填写的模板。
193
- 3) 【下周选题方案提示词(待数据版)】给一段可直接发给 AI 的提示词:收到上述数据后,输出下周 7 天选题计划(每天 1 个选题,含优先级、标题、核心观点、目标读者、验证指标)。
194
- 风格:简洁、可执行,全文不超过 18 行。
195
- allowedTools:
196
- - Read
197
- metame:
198
- name: 超级总管 Jarvis
199
- icon: 🤖
200
- color: blue
201
- cwd: ~/AGI/MetaMe
202
- nicknames:
203
- - 贾维斯
204
- - 老贾
205
- - 贾
206
- - Jarvis
207
- - jarvis
208
- heartbeat_tasks: null
209
- broadcast: true
210
- team:
211
- - key: jia
212
- name: Jarvis · 甲
213
- icon: 🤖
214
- color: green
215
- cwd: ~/AGI/MetaMe
216
- nicknames:
217
- - 甲
218
- auto_dispatch: true
219
- - key: yi
220
- name: Jarvis · 乙
221
- icon: 🤖
222
- color: yellow
223
- cwd: ~/AGI/MetaMe
224
- nicknames:
225
- - 乙
226
- auto_dispatch: true
227
- - key: bing
228
- name: Jarvis · 丙
229
- icon: 🤖
230
- color: red
231
- cwd: ~/AGI/MetaMe
232
- nicknames:
233
- - 丙
234
- auto_dispatch: true
235
- desktop:
236
- name: Desktop PM
237
- icon: 🚀
238
- color: indigo
239
- cwd: ~/AGI/metame-desktop
240
- nicknames:
241
- - 马经理
242
- - 老马
243
- - 桌面
244
- - Desktop
245
- heartbeat_tasks: []
246
- ___:
247
- name: 因斯坦
248
- cwd: /Users/yaron/Desktop/项目计划书/国自然青年
249
- nicknames:
250
- - 因斯坦
251
- scientist:
252
- name: 科研总监
253
- icon: 🔬
254
- color: teal
255
- cwd: ~/AGI/AgentScientist
256
- reactive: true
257
- nicknames:
258
- - 科研
259
- - 科学家
260
- - scientist
261
- - 研究员
262
- heartbeat_tasks: []
263
- team:
264
- - key: sci_scout
265
- name: 文献侦察兵
266
- icon: 📚
267
- color: green
268
- cwd: ~/AGI/AgentScientist/team/scout
269
- nicknames:
270
- - 侦察兵
271
- - scout
272
- - 文献
273
- - key: sci_thinker
274
- name: 思想家
275
- icon: 💡
276
- color: yellow
277
- cwd: ~/AGI/AgentScientist/team/thinker
278
- nicknames:
279
- - 思想家
280
- - thinker
281
- - key: sci_critic
282
- name: 批判者
283
- icon: 🔍
284
- color: red
285
- cwd: ~/AGI/AgentScientist/team/critic
286
- nicknames:
287
- - 批判者
288
- - critic
289
- - 审稿人
290
- - key: sci_lab
291
- name: 实验室
292
- icon: 🧪
293
- color: purple
294
- cwd: ~/AGI/AgentScientist/team/lab
295
- nicknames:
296
- - 实验室
297
- - lab
298
- - key: sci_writer
299
- name: 论文写手
300
- icon: ✍️
301
- color: cyan
302
- cwd: ~/AGI/AgentScientist/team/writer
303
- nicknames:
304
- - 写手
305
- - writer
306
- - 论文
307
- drama_manager:
308
- name: 🎬 短剧总管
309
- icon: 🎬
310
- color: red
311
- cwd: ~/AGI/DramaFactory
312
- nicknames:
313
- - 短剧总管
314
- - 总管
315
- - drama
316
- heartbeat_tasks: []
317
- team:
318
- - key: drama_screenwriter
319
- name: ✍️ 编剧
320
- icon: ✍️
321
- color: orange
322
- cwd: ~/AGI/DramaFactory/team/screenwriter
323
- nicknames:
324
- - 编剧
325
- - key: drama_writer
326
- name: 📝 写手
327
- icon: 📝
328
- color: yellow
329
- cwd: ~/AGI/DramaFactory/team/writer
330
- nicknames:
331
- - 写手
332
- - key: drama_hook_rev
333
- name: 🪝 钩子审核
334
- icon: 🪝
335
- color: pink
336
- cwd: ~/AGI/DramaFactory/team/hook_rev
337
- nicknames:
338
- - 钩子审核员
339
- - 钩子审核
340
- - key: drama_drama_rev
341
- name: 🌶 狗血审核
342
- icon: 🌶
343
- color: magenta
344
- cwd: ~/AGI/DramaFactory/team/drama_rev
345
- nicknames:
346
- - 狗血审核员
347
- - 狗血审核
348
- - key: drama_format_rev
349
- name: 📐 格式审核
350
- icon: 📐
351
- color: grey
352
- cwd: ~/AGI/DramaFactory/team/format_rev
353
- nicknames:
354
- - 格式审核员
355
- - 格式审核
356
- heartbeat:
357
- tasks:
358
- - name: cognitive-distill
359
- type: script
360
- command: node ~/.metame/distill.js
361
- interval: 2h
362
- precondition: test -s ~/.metame/raw_signals.jsonl
363
- require_idle: true
364
- notify: false
365
- enabled: true
366
- - name: memory-extract
367
- type: script
368
- command: node ~/.metame/memory-extract.js
369
- interval: 12h
370
- timeout: 1800
371
- require_idle: true
372
- notify: false
373
- enabled: true
374
- - name: memory-gc
375
- type: script
376
- command: node ~/.metame/memory-gc.js
377
- at: '02:00'
378
- require_idle: true
379
- notify: false
380
- enabled: true
381
- - name: skill-evolve
382
- type: script
383
- command: node ~/.metame/skill-evolution.js
384
- interval: 24h
385
- precondition: test -s ~/.metame/skill_signals.jsonl
386
- require_idle: true
387
- notify: false
388
- enabled: true
389
- - name: self-reflect
390
- type: script
391
- command: node ~/.metame/self-reflect.js
392
- at: '23:00'
393
- require_idle: true
394
- notify: false
395
- enabled: true
396
- - name: nightly-reflect
397
- type: script
398
- command: node ~/.metame/memory-nightly-reflect.js
399
- at: '01:00'
400
- require_idle: true
401
- notify: false
402
- enabled: true
403
- - name: memory-index
404
- type: script
405
- command: node ~/.metame/memory-index.js
406
- at: '01:30'
407
- require_idle: true
408
- notify: false
409
- enabled: true
410
- budget:
411
- daily_limit: 100000
412
- warning_threshold: 0.8
413
- daemon:
414
- model: sonnet
415
- log_max_size: 1048576
416
- heartbeat_check_interval: 60
417
- skill_evolution_notify: false
418
- dangerously_skip_permissions: true
419
- session_allowed_tools:
420
- - Edit
421
- - Write
422
- - Read
423
- - Bash
424
- - Glob
425
- - Grep
426
- - WebFetch
427
- - WebSearch
428
- - Task
429
- - Skill
430
- - TodoRead
431
- - TodoWrite
432
- - NotebookEdit
433
- - mcp__playwright__*
434
- - mcp__trendradar__*
435
- - mcp__notionApi__*
436
- models:
437
- claude: sonnet
438
-
439
- # Intent Engine — UserPromptSubmit hook modules
440
- # Set any key to false to disable that intent module.
441
- hooks:
442
- team_dispatch: true # team member dispatch hints
443
- ops_assist: true # /undo /restart /logs /gc hints
444
- task_create: true # task scheduling hints