@askexenow/exe-os 0.9.119 → 0.9.121

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.
@@ -5241,15 +5241,18 @@ var init_embedder = __esm({
5241
5241
  import crypto5 from "crypto";
5242
5242
  async function storeBehavior(opts) {
5243
5243
  try {
5244
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
5244
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
5245
5245
  const roster = loadEmployeesSync2();
5246
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
5247
- if (process.env.NODE_ENV !== "test") {
5248
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
5246
+ if (roster.length > 0) {
5247
+ const base = baseAgentName2(opts.agentId, roster);
5248
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
5249
+ process.stderr.write(
5250
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
5251
+ `
5252
+ );
5249
5253
  }
5250
5254
  }
5251
- } catch (e) {
5252
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
5255
+ } catch {
5253
5256
  }
5254
5257
  const client = getClient();
5255
5258
  const id = crypto5.randomUUID();
@@ -5241,15 +5241,18 @@ var init_embedder = __esm({
5241
5241
  import crypto5 from "crypto";
5242
5242
  async function storeBehavior(opts) {
5243
5243
  try {
5244
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
5244
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
5245
5245
  const roster = loadEmployeesSync2();
5246
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
5247
- if (process.env.NODE_ENV !== "test") {
5248
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
5246
+ if (roster.length > 0) {
5247
+ const base = baseAgentName2(opts.agentId, roster);
5248
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
5249
+ process.stderr.write(
5250
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
5251
+ `
5252
+ );
5249
5253
  }
5250
5254
  }
5251
- } catch (e) {
5252
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
5255
+ } catch {
5253
5256
  }
5254
5257
  const client = getClient();
5255
5258
  const id = crypto5.randomUUID();
@@ -6489,20 +6489,24 @@ __export(behaviors_exports, {
6489
6489
  deactivateBehavior: () => deactivateBehavior,
6490
6490
  listBehaviors: () => listBehaviors,
6491
6491
  listBehaviorsByDomain: () => listBehaviorsByDomain,
6492
+ listBehaviorsSince: () => listBehaviorsSince,
6492
6493
  storeBehavior: () => storeBehavior
6493
6494
  });
6494
6495
  import crypto5 from "crypto";
6495
6496
  async function storeBehavior(opts) {
6496
6497
  try {
6497
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
6498
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
6498
6499
  const roster = loadEmployeesSync2();
6499
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
6500
- if (process.env.NODE_ENV !== "test") {
6501
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
6500
+ if (roster.length > 0) {
6501
+ const base = baseAgentName2(opts.agentId, roster);
6502
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
6503
+ process.stderr.write(
6504
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
6505
+ `
6506
+ );
6502
6507
  }
6503
6508
  }
6504
- } catch (e) {
6505
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
6509
+ } catch {
6506
6510
  }
6507
6511
  const client = getClient();
6508
6512
  const id = crypto5.randomUUID();
@@ -6593,6 +6597,38 @@ async function listBehaviorsByDomain(agentId, domain) {
6593
6597
  source_session_id: r.source_session_id ? String(r.source_session_id) : null
6594
6598
  }));
6595
6599
  }
6600
+ async function listBehaviorsSince(agentId, sinceIso, projectName, limit = 15) {
6601
+ const client = getClient();
6602
+ const result = await client.execute({
6603
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id
6604
+ FROM behaviors
6605
+ WHERE agent_id = ? AND active = 1
6606
+ AND (project_name IS NULL OR project_name = ?)
6607
+ AND (created_at > ? OR updated_at > ?)
6608
+ ORDER BY
6609
+ CASE WHEN priority = 'p0' THEN 0
6610
+ WHEN priority = 'p1' THEN 1
6611
+ ELSE 2 END,
6612
+ updated_at DESC
6613
+ LIMIT ?`,
6614
+ args: [agentId, projectName ?? "", sinceIso, sinceIso, limit]
6615
+ });
6616
+ return result.rows.map((r) => ({
6617
+ id: String(r.id),
6618
+ agent_id: String(r.agent_id),
6619
+ project_name: r.project_name ? String(r.project_name) : null,
6620
+ domain: r.domain ? String(r.domain) : null,
6621
+ priority: String(r.priority || "p1"),
6622
+ content: String(r.content),
6623
+ active: Number(r.active),
6624
+ created_at: String(r.created_at),
6625
+ updated_at: String(r.updated_at),
6626
+ vector: r.vector ? Array.from(new Float32Array(r.vector)) : null,
6627
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
6628
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
6629
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null
6630
+ }));
6631
+ }
6596
6632
  async function deactivateBehavior(id) {
6597
6633
  const client = getClient();
6598
6634
  const result = await client.execute({
package/dist/tui/App.js CHANGED
@@ -6476,15 +6476,18 @@ var init_embedder = __esm({
6476
6476
  import crypto5 from "crypto";
6477
6477
  async function storeBehavior(opts) {
6478
6478
  try {
6479
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
6479
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
6480
6480
  const roster = loadEmployeesSync2();
6481
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
6482
- if (process.env.NODE_ENV !== "test") {
6483
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
6481
+ if (roster.length > 0) {
6482
+ const base = baseAgentName2(opts.agentId, roster);
6483
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
6484
+ process.stderr.write(
6485
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
6486
+ `
6487
+ );
6484
6488
  }
6485
6489
  }
6486
- } catch (e) {
6487
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
6490
+ } catch {
6488
6491
  }
6489
6492
  const client = getClient();
6490
6493
  const id = crypto5.randomUUID();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.119",
3
+ "version": "0.9.121",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",