cumora 0.1.43 → 0.1.45
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/dist/cli.js +24 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -302,6 +302,14 @@ var AgentRunner = class {
|
|
|
302
302
|
stop() {
|
|
303
303
|
this.stopped = true;
|
|
304
304
|
}
|
|
305
|
+
/** Does this runner's live config still match the latest server state? The
|
|
306
|
+
* engine + model + persona are captured at construction (the adapter is
|
|
307
|
+
* fixed, and seedHome runs once in start()), so when any of them changes in
|
|
308
|
+
* Cumora, sync() must tear this runner down and build a fresh one — otherwise
|
|
309
|
+
* e.g. a Claude→Codex switch wouldn't take effect until a daemon restart. */
|
|
310
|
+
configMatches(agent, engine) {
|
|
311
|
+
return this.adapter.id === engine && this.agent.name === agent.name && this.agent.role === agent.role && this.agent.model === agent.model && this.agent.fastModel === agent.fastModel;
|
|
312
|
+
}
|
|
305
313
|
async ensureToken() {
|
|
306
314
|
if (this.token && Date.now() < this.tokenExpiresAt - TOKEN_REFRESH_SKEW_MS) return this.token;
|
|
307
315
|
const minted = await api(
|
|
@@ -332,6 +340,14 @@ Use the \`cumora\` tool to catch up and respond:
|
|
|
332
340
|
2. \`cumora messages <conversationId> --tail 30\` \u2014 read the relevant thread(s)
|
|
333
341
|
3. \`cumora reply <conversationId> '<text>'\` \u2014 reply, in your own voice, only where you add something
|
|
334
342
|
|
|
343
|
+
Mentions: to notify or address a specific teammate, write @<their-id> using their participant id (the short id shown in \`cumora messages\` and \`cumora participants\`), NOT their display name. "@Alex P" does nothing; "@alex-3f9a" actually pings them. Run \`cumora participants\` if you need to look up an id.
|
|
344
|
+
|
|
345
|
+
Know when to stay quiet \u2014 this is how teams avoid endless back-and-forth:
|
|
346
|
+
- Read the WHOLE thread first, including your own past replies. If you've already made your point, don't repeat it. Saying nothing is better than echoing.
|
|
347
|
+
- Only reply where you genuinely add something the thread doesn't already have. Don't reply just to acknowledge, agree, thank, or sign off ("sounds good", "great idea", "\u{1F44D}").
|
|
348
|
+
- Be especially restrained with OTHER AGENTS: do not keep a conversation going with a peer agent out of politeness. If the useful exchange is done, let it end \u2014 silence ends the loop, another reply restarts it.
|
|
349
|
+
- If a teammate already has it covered, or nothing genuinely needs YOU specifically, do nothing and stop.
|
|
350
|
+
|
|
335
351
|
Privacy: stay inside your home directory. Never read files outside it, and never expose the contents or paths of anything outside your home in Cumora \u2014 this machine holds the operator's private files.
|
|
336
352
|
|
|
337
353
|
If nothing genuinely needs you, it's fine to do nothing and stop. When finished, stop.`;
|
|
@@ -350,6 +366,7 @@ If nothing genuinely needs you, it's fine to do nothing and stop. When finished,
|
|
|
350
366
|
await this.ensureToken();
|
|
351
367
|
const token = this.token;
|
|
352
368
|
const convo = this.lastWakeConvo;
|
|
369
|
+
this.lastWakeConvo = null;
|
|
353
370
|
await runtimeBest(this.cfg.serverUrl, "/status", token, { status: "thinking" });
|
|
354
371
|
let typingTimer;
|
|
355
372
|
if (convo) {
|
|
@@ -455,9 +472,15 @@ async function doRun(serverOverride) {
|
|
|
455
472
|
return;
|
|
456
473
|
}
|
|
457
474
|
for (const agent of agents) {
|
|
458
|
-
if (runners.has(agent.id)) continue;
|
|
459
475
|
const engine = agent.engine && available.includes(agent.engine) ? agent.engine : available[0] ?? null;
|
|
460
476
|
if (!engine) continue;
|
|
477
|
+
const existing = runners.get(agent.id);
|
|
478
|
+
if (existing) {
|
|
479
|
+
if (existing.configMatches(agent, engine)) continue;
|
|
480
|
+
console.log(`[computer] agent ${agent.name} (${agent.id}) config changed \u2192 restarting on ${engine}`);
|
|
481
|
+
existing.stop();
|
|
482
|
+
runners.delete(agent.id);
|
|
483
|
+
}
|
|
461
484
|
const runner = new AgentRunner(cfg, agent, engine);
|
|
462
485
|
runners.set(agent.id, runner);
|
|
463
486
|
console.log(`[computer] hosting agent ${agent.name} (${agent.id}) on ${engine}`);
|