@askexenow/exe-os 0.8.10 → 0.8.12

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/bin/cli.js CHANGED
@@ -315,13 +315,14 @@ async function saveEmployees(employees, employeesPath = EMPLOYEES_PATH) {
315
315
  await writeFile2(employeesPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
316
316
  }
317
317
  function getEmployee(employees, name) {
318
- return employees.find((e) => e.name === name);
318
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
319
319
  }
320
320
  function addEmployee(employees, employee) {
321
- if (employees.some((e) => e.name === employee.name)) {
322
- throw new Error(`Employee '${employee.name}' already exists`);
321
+ const normalized = { ...employee, name: employee.name.toLowerCase() };
322
+ if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
323
+ throw new Error(`Employee '${normalized.name}' already exists`);
323
324
  }
324
- return [...employees, employee];
325
+ return [...employees, normalized];
325
326
  }
326
327
  function registerBinSymlinks(name) {
327
328
  const created = [];
@@ -5020,7 +5021,7 @@ async function runSetupWizard(opts = {}) {
5020
5021
  log("You talk to them. They coordinate everyone else.");
5021
5022
  log("");
5022
5023
  const cooNameInput = await ask(rl, "Name your COO (default: exe): ");
5023
- const cooName = cooNameInput || "exe";
5024
+ const cooName = (cooNameInput || "exe").toLowerCase();
5024
5025
  let employees = await loadEmployees2(EMPLOYEES_PATH2).catch(() => []);
5025
5026
  if (!employees.some((e) => e.name === cooName)) {
5026
5027
  const { DEFAULT_EXE: DEFAULT_EXE2 } = await Promise.resolve().then(() => (init_employee_templates(), employee_templates_exports));
@@ -5106,7 +5107,7 @@ async function runSetupWizard(opts = {}) {
5106
5107
  const createCto = await ask(rl, "Create your CTO? (Y/n): ");
5107
5108
  if (createCto.toLowerCase() !== "n") {
5108
5109
  const ctoNameInput = await ask(rl, "Name your CTO (default: yoshi): ");
5109
- const ctoName = ctoNameInput || "yoshi";
5110
+ const ctoName = (ctoNameInput || "yoshi").toLowerCase();
5110
5111
  if (!employees.some((e) => e.name === ctoName)) {
5111
5112
  const ctoTemplate = getEmployeeTemplate("yoshi");
5112
5113
  const ctoEmployee = {
@@ -5132,7 +5133,7 @@ async function runSetupWizard(opts = {}) {
5132
5133
  const createCmo = await ask(rl, "Create your CMO? (Y/n): ");
5133
5134
  if (createCmo.toLowerCase() !== "n") {
5134
5135
  const cmoNameInput = await ask(rl, "Name your CMO (default: mari): ");
5135
- const cmoName = cmoNameInput || "mari";
5136
+ const cmoName = (cmoNameInput || "mari").toLowerCase();
5136
5137
  if (!employees.some((e) => e.name === cmoName)) {
5137
5138
  const cmoTemplate = getEmployeeTemplate("mari");
5138
5139
  const cmoEmployee = {
@@ -1910,7 +1910,7 @@ function loadEmployee(name) {
1910
1910
  try {
1911
1911
  const rosterPath = path7.join(os2.homedir(), ".exe-os", "exe-employees.json");
1912
1912
  const roster = JSON.parse(readFileSync(rosterPath, "utf8"));
1913
- return roster.find((e) => e.name === name) ?? null;
1913
+ return roster.find((e) => e.name.toLowerCase() === name.toLowerCase()) ?? null;
1914
1914
  } catch {
1915
1915
  return null;
1916
1916
  }
@@ -465,7 +465,7 @@ async function loadEmployees(employeesPath = EMPLOYEES_PATH) {
465
465
  }
466
466
  }
467
467
  function getEmployee(employees, name) {
468
- return employees.find((e) => e.name === name);
468
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
469
469
  }
470
470
 
471
471
  // src/lib/task-router.ts
@@ -152,13 +152,14 @@ async function saveEmployees(employees, employeesPath = EMPLOYEES_PATH) {
152
152
  await writeFile2(employeesPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
153
153
  }
154
154
  function getEmployee(employees, name) {
155
- return employees.find((e) => e.name === name);
155
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
156
156
  }
157
157
  function addEmployee(employees, employee) {
158
- if (employees.some((e) => e.name === employee.name)) {
159
- throw new Error(`Employee '${employee.name}' already exists`);
158
+ const normalized = { ...employee, name: employee.name.toLowerCase() };
159
+ if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
160
+ throw new Error(`Employee '${normalized.name}' already exists`);
160
161
  }
161
- return [...employees, employee];
162
+ return [...employees, normalized];
162
163
  }
163
164
  function registerBinSymlinks(name) {
164
165
  const created = [];
@@ -1695,7 +1695,7 @@ async function isKnownAgent(agent) {
1695
1695
  if (BUILTIN_AGENTS.includes(agent)) return true;
1696
1696
  try {
1697
1697
  const employees = await loadEmployees();
1698
- return employees.some((e) => e.name === agent);
1698
+ return employees.some((e) => e.name.toLowerCase() === agent.toLowerCase());
1699
1699
  } catch {
1700
1700
  return false;
1701
1701
  }
@@ -748,10 +748,11 @@ async function saveEmployees(employees, employeesPath = EMPLOYEES_PATH) {
748
748
  await writeFile2(employeesPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
749
749
  }
750
750
  function addEmployee(employees, employee) {
751
- if (employees.some((e) => e.name === employee.name)) {
752
- throw new Error(`Employee '${employee.name}' already exists`);
751
+ const normalized = { ...employee, name: employee.name.toLowerCase() };
752
+ if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
753
+ throw new Error(`Employee '${normalized.name}' already exists`);
753
754
  }
754
- return [...employees, employee];
755
+ return [...employees, normalized];
755
756
  }
756
757
  function registerBinSymlinks(name) {
757
758
  const created = [];
@@ -468,7 +468,7 @@ async function loadEmployees(employeesPath = EMPLOYEES_PATH) {
468
468
  }
469
469
  }
470
470
  function getEmployee(employees, name) {
471
- return employees.find((e) => e.name === name);
471
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
472
472
  }
473
473
 
474
474
  // src/types/memory.ts
@@ -1805,7 +1805,7 @@ async function loadEmployees(employeesPath = EMPLOYEES_PATH) {
1805
1805
  }
1806
1806
  }
1807
1807
  function getEmployee(employees, name) {
1808
- return employees.find((e) => e.name === name);
1808
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
1809
1809
  }
1810
1810
  var EMPLOYEES_PATH;
1811
1811
  var init_employees = __esm({
package/dist/bin/setup.js CHANGED
@@ -1009,13 +1009,14 @@ async function saveEmployees(employees, employeesPath = EMPLOYEES_PATH) {
1009
1009
  await writeFile3(employeesPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
1010
1010
  }
1011
1011
  function getEmployee(employees, name) {
1012
- return employees.find((e) => e.name === name);
1012
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
1013
1013
  }
1014
1014
  function addEmployee(employees, employee) {
1015
- if (employees.some((e) => e.name === employee.name)) {
1016
- throw new Error(`Employee '${employee.name}' already exists`);
1015
+ const normalized = { ...employee, name: employee.name.toLowerCase() };
1016
+ if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
1017
+ throw new Error(`Employee '${normalized.name}' already exists`);
1017
1018
  }
1018
- return [...employees, employee];
1019
+ return [...employees, normalized];
1019
1020
  }
1020
1021
  function registerBinSymlinks(name) {
1021
1022
  const created = [];
@@ -2521,7 +2522,7 @@ async function runSetupWizard(opts = {}) {
2521
2522
  log("You talk to them. They coordinate everyone else.");
2522
2523
  log("");
2523
2524
  const cooNameInput = await ask(rl, "Name your COO (default: exe): ");
2524
- const cooName = cooNameInput || "exe";
2525
+ const cooName = (cooNameInput || "exe").toLowerCase();
2525
2526
  let employees = await loadEmployees2(EMPLOYEES_PATH2).catch(() => []);
2526
2527
  if (!employees.some((e) => e.name === cooName)) {
2527
2528
  const { DEFAULT_EXE: DEFAULT_EXE2 } = await Promise.resolve().then(() => (init_employee_templates(), employee_templates_exports));
@@ -2607,7 +2608,7 @@ async function runSetupWizard(opts = {}) {
2607
2608
  const createCto = await ask(rl, "Create your CTO? (Y/n): ");
2608
2609
  if (createCto.toLowerCase() !== "n") {
2609
2610
  const ctoNameInput = await ask(rl, "Name your CTO (default: yoshi): ");
2610
- const ctoName = ctoNameInput || "yoshi";
2611
+ const ctoName = (ctoNameInput || "yoshi").toLowerCase();
2611
2612
  if (!employees.some((e) => e.name === ctoName)) {
2612
2613
  const ctoTemplate = getEmployeeTemplate("yoshi");
2613
2614
  const ctoEmployee = {
@@ -2633,7 +2634,7 @@ async function runSetupWizard(opts = {}) {
2633
2634
  const createCmo = await ask(rl, "Create your CMO? (Y/n): ");
2634
2635
  if (createCmo.toLowerCase() !== "n") {
2635
2636
  const cmoNameInput = await ask(rl, "Name your CMO (default: mari): ");
2636
- const cmoName = cmoNameInput || "mari";
2637
+ const cmoName = (cmoNameInput || "mari").toLowerCase();
2637
2638
  if (!employees.some((e) => e.name === cmoName)) {
2638
2639
  const cmoTemplate = getEmployeeTemplate("mari");
2639
2640
  const cmoEmployee = {
@@ -3097,7 +3097,7 @@ async function loadEmployees(employeesPath = EMPLOYEES_PATH) {
3097
3097
  }
3098
3098
  }
3099
3099
  function getEmployee(employees, name) {
3100
- return employees.find((e) => e.name === name);
3100
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
3101
3101
  }
3102
3102
  var EMPLOYEES_PATH;
3103
3103
  var init_employees = __esm({
@@ -128,13 +128,14 @@ async function saveEmployees(employees, employeesPath = EMPLOYEES_PATH) {
128
128
  await writeFile2(employeesPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
129
129
  }
130
130
  function getEmployee(employees, name) {
131
- return employees.find((e) => e.name === name);
131
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
132
132
  }
133
133
  function addEmployee(employees, employee) {
134
- if (employees.some((e) => e.name === employee.name)) {
135
- throw new Error(`Employee '${employee.name}' already exists`);
134
+ const normalized = { ...employee, name: employee.name.toLowerCase() };
135
+ if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
136
+ throw new Error(`Employee '${normalized.name}' already exists`);
136
137
  }
137
- return [...employees, employee];
138
+ return [...employees, normalized];
138
139
  }
139
140
  function registerBinSymlinks(name) {
140
141
  const created = [];
@@ -2358,7 +2358,7 @@ async function loadEmployees(employeesPath = EMPLOYEES_PATH) {
2358
2358
  }
2359
2359
  }
2360
2360
  function getEmployee(employees, name) {
2361
- return employees.find((e) => e.name === name);
2361
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
2362
2362
  }
2363
2363
  var EMPLOYEES_PATH;
2364
2364
  var init_employees = __esm({
@@ -2910,10 +2910,11 @@ async function saveEmployees(employees, employeesPath = EMPLOYEES_PATH) {
2910
2910
  await writeFile3(employeesPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
2911
2911
  }
2912
2912
  function addEmployee(employees, employee) {
2913
- if (employees.some((e) => e.name === employee.name)) {
2914
- throw new Error(`Employee '${employee.name}' already exists`);
2913
+ const normalized = { ...employee, name: employee.name.toLowerCase() };
2914
+ if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
2915
+ throw new Error(`Employee '${normalized.name}' already exists`);
2915
2916
  }
2916
- return [...employees, employee];
2917
+ return [...employees, normalized];
2917
2918
  }
2918
2919
  var EMPLOYEES_PATH;
2919
2920
  var init_employees = __esm({
package/dist/tui/App.js CHANGED
@@ -3795,13 +3795,14 @@ async function saveEmployees(employees, employeesPath = EMPLOYEES_PATH) {
3795
3795
  await writeFile2(employeesPath, JSON.stringify(employees, null, 2) + "\n", "utf-8");
3796
3796
  }
3797
3797
  function getEmployee(employees, name) {
3798
- return employees.find((e) => e.name === name);
3798
+ return employees.find((e) => e.name.toLowerCase() === name.toLowerCase());
3799
3799
  }
3800
3800
  function addEmployee(employees, employee) {
3801
- if (employees.some((e) => e.name === employee.name)) {
3802
- throw new Error(`Employee '${employee.name}' already exists`);
3801
+ const normalized = { ...employee, name: employee.name.toLowerCase() };
3802
+ if (employees.some((e) => e.name.toLowerCase() === normalized.name)) {
3803
+ throw new Error(`Employee '${normalized.name}' already exists`);
3803
3804
  }
3804
- return [...employees, employee];
3805
+ return [...employees, normalized];
3805
3806
  }
3806
3807
  function registerBinSymlinks(name) {
3807
3808
  const created = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.8.10",
3
+ "version": "0.8.12",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "CC-BY-NC-4.0",
6
6
  "type": "module",