@hasna/todos 0.13.3 → 0.13.4

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.
@@ -56,6 +56,49 @@ export interface TodosCliStorageModeResolution {
56
56
  */
57
57
  export declare function resolveTodosCliStorageMode(env?: Env): TodosCliStorageModeResolution;
58
58
  export declare function getTodosRemoteAuthorityConfigStatus(env?: Env): TodosRemoteAuthorityConfigStatus;
59
+ /** Accepts a mode token or throws. Injectable so both enum generations are testable. */
60
+ export type ModeNormalizer = (value: string) => unknown;
61
+ /**
62
+ * The token meaning "use the server" in the INSTALLED @hasna/contracts.
63
+ *
64
+ * This replaces a hardcoded `"cloud"` whose own comment said it "collapses when
65
+ * contracts lands the no-modes shape" — this is that collapse, done by deriving
66
+ * rather than by widening.
67
+ *
68
+ * Derived, never hardcoded, and that is load-bearing rather than tidy. The enum
69
+ * has already changed once and the two valid sets are DISJOINT: contracts
70
+ * <=0.8.5 accepts `cloud` plus the deprecated aliases and THROWS on
71
+ * `postgres`/`sqlite`; contracts after the placement-axis removal accepts ONLY
72
+ * `sqlite`/`postgres` and THROWS on everything else. A literal pinned here is a
73
+ * bet on which side of that change a machine is on, and the bet loses on one
74
+ * side or the other — and a todos CLI that cannot reach its own authority is
75
+ * how the fleet loses the ability to coordinate its own recovery.
76
+ *
77
+ * Probing goes through the library's own `normalizeStorageMode`, so the answer
78
+ * comes from the installed code rather than from our belief about it. It is the
79
+ * right discriminator precisely because it THROWS rather than returning a
80
+ * sentinel, which makes a try/catch probe exact instead of heuristic.
81
+ *
82
+ * SCOPE: this is the token handed to the contracts resolver. It is NOT the
83
+ * operator vocabulary — `VALID_STORAGE_MODES` still governs what a person may
84
+ * put in `HASNA_TODOS_STORAGE_MODE`, and that list is deliberately untouched
85
+ * here (tracked separately as todos b856fa08).
86
+ */
87
+ export declare function serverStorageMode(normalize?: ModeNormalizer): string;
88
+ /**
89
+ * The env handed to the contracts resolver once the authority is known good.
90
+ *
91
+ * THREE keys, and only the first is this migration's business:
92
+ * - the storage mode, now DERIVED rather than the literal `"cloud"`
93
+ * - the API URL, with the `/v1` suffix stripped back off (the status object
94
+ * appends it; the client re-appends it, so it must not be doubled)
95
+ * - the API key, trimmed
96
+ * The URL rewrite and the key trim are orthogonal to the mode and are unchanged.
97
+ *
98
+ * Exported so the derived stamp is directly testable, rather than only
99
+ * observable through a constructed HTTP client.
100
+ */
101
+ export declare function requireTodosRemoteAuthorityEnv(env: Env): Env;
59
102
  /**
60
103
  * Resolve the Todos HTTP storage client from the environment. Returns a ready
61
104
  * client for an explicit remote mode, or `null` for local mode. A selected
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-router.d.ts","sourceRoot":"","sources":["../../src/cli/cloud-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-router.d.ts","sourceRoot":"","sources":["../../src/cli/cloud-router.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agent-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA6erD"}
1
+ {"version":3,"file":"agent-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agent-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA6erD"}
package/dist/cli/index.js CHANGED
@@ -2123,7 +2123,7 @@ var package_default;
2123
2123
  var init_package = __esm(() => {
2124
2124
  package_default = {
2125
2125
  name: "@hasna/todos",
2126
- version: "0.13.3",
2126
+ version: "0.13.4",
2127
2127
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
2128
2128
  type: "module",
2129
2129
  main: "dist/index.js",
@@ -4985,6 +4985,7 @@ var init_http_client = __esm(() => {
4985
4985
 
4986
4986
  // src/cli/cloud-router.ts
4987
4987
  import { resolveStorageClient } from "@hasna/contracts/client/storage";
4988
+ import { normalizeStorageMode } from "@hasna/contracts/mode";
4988
4989
  import { resolve as resolvePath } from "path";
4989
4990
  function cleanMode(value) {
4990
4991
  const normalized = value?.trim().toLowerCase();
@@ -5106,13 +5107,27 @@ function getTodosRemoteAuthorityConfigStatus(env = process.env) {
5106
5107
  local_fallback: false
5107
5108
  };
5108
5109
  }
5110
+ function serverStorageMode(normalize = normalizeStorageMode) {
5111
+ const useCache = normalize === normalizeStorageMode;
5112
+ if (useCache && cachedServerMode !== null)
5113
+ return cachedServerMode;
5114
+ for (const candidate of SERVER_MODE_CANDIDATES) {
5115
+ try {
5116
+ normalize(candidate);
5117
+ if (useCache)
5118
+ cachedServerMode = candidate;
5119
+ return candidate;
5120
+ } catch {}
5121
+ }
5122
+ throw new Error(`REMOTE_STORAGE_MODE_UNSUPPORTED: no known server storage mode is accepted by the installed ` + `@hasna/contracts (tried ${SERVER_MODE_CANDIDATES.join(", ")}); the storage-mode enum has changed. ` + `Add the new server token to SERVER_MODE_CANDIDATES in src/cli/cloud-router.ts; ` + `local SQLite fallback is disabled.`);
5123
+ }
5109
5124
  function requireTodosRemoteAuthorityEnv(env) {
5110
5125
  const status = getTodosRemoteAuthorityConfigStatus(env);
5111
5126
  if (!status.ok)
5112
5127
  throw new Error(status.issues[0]);
5113
5128
  return {
5114
5129
  ...env,
5115
- HASNA_TODOS_STORAGE_MODE: "cloud",
5130
+ HASNA_TODOS_STORAGE_MODE: serverStorageMode(),
5116
5131
  HASNA_TODOS_API_URL: status.v1_base_url.replace(/\/v1$/, ""),
5117
5132
  HASNA_TODOS_API_KEY: env.HASNA_TODOS_API_KEY.trim()
5118
5133
  };
@@ -6214,7 +6229,7 @@ async function cloudTimeline(client, options = {}) {
6214
6229
  const limit = options.limit ?? 50;
6215
6230
  return { entries: entries.slice(offset, offset + limit), total, limit, offset };
6216
6231
  }
6217
- var UUID_RE, TRANSPORT_TOKENS, COMPLETION_EVIDENCE_FIELDS, completionCapabilityCache, listTagsCapabilityCache, RELATION_HYDRATION_CONCURRENCY = 6, PRIORITY_RANK;
6232
+ var UUID_RE, TRANSPORT_TOKENS, COMPLETION_EVIDENCE_FIELDS, completionCapabilityCache, SERVER_MODE_CANDIDATES, cachedServerMode = null, listTagsCapabilityCache, RELATION_HYDRATION_CONCURRENCY = 6, PRIORITY_RANK;
6218
6233
  var init_cloud_router = __esm(() => {
6219
6234
  init_types();
6220
6235
  init_redaction();
@@ -6238,6 +6253,7 @@ var init_cloud_router = __esm(() => {
6238
6253
  "confidence"
6239
6254
  ];
6240
6255
  completionCapabilityCache = new Map;
6256
+ SERVER_MODE_CANDIDATES = ["postgres", "cloud", "self_hosted"];
6241
6257
  listTagsCapabilityCache = new Map;
6242
6258
  PRIORITY_RANK = { critical: 0, high: 1, medium: 2, low: 3 };
6243
6259
  });
@@ -26034,10 +26050,12 @@ var init_project_commands = __esm(() => {
26034
26050
  init_output_redaction();
26035
26051
  });
26036
26052
 
26037
- // src/db/agent-names.ts
26053
+ // src/lib/agent-name-normalize.ts
26038
26054
  function normalizeAgentNameInput(name) {
26039
26055
  return name.trim().toLowerCase();
26040
26056
  }
26057
+
26058
+ // src/db/agent-names.ts
26041
26059
  function hasGeneratedNumericSuffix(name) {
26042
26060
  return NUMERIC_SUFFIX_RE.test(normalizeAgentNameInput(name));
26043
26061
  }
@@ -26718,6 +26736,16 @@ __export(exports_agent_commands, {
26718
26736
  });
26719
26737
  import chalk5 from "chalk";
26720
26738
  import { execSync as execSync2 } from "child_process";
26739
+ function resolveCloudAgentByNameOrId(agents, nameOrId) {
26740
+ const byId = agents.find((agent) => agent.id === nameOrId);
26741
+ if (byId)
26742
+ return byId;
26743
+ const target = normalizeAgentNameInput(nameOrId);
26744
+ const matches = agents.filter((agent) => normalizeAgentNameInput(agent.name) === target);
26745
+ if (matches.length === 0)
26746
+ return null;
26747
+ return matches.reduce((freshest, candidate) => new Date(candidate.last_seen_at).getTime() > new Date(freshest.last_seen_at).getTime() ? candidate : freshest);
26748
+ }
26721
26749
  function registerAgentCommands(program2) {
26722
26750
  program2.command("init <name>").description("Register an agents and get a short UUID").option("-d, --description <text>", "Agent description").action(async (name, opts) => {
26723
26751
  const globalOpts = program2.opts();
@@ -26914,7 +26942,7 @@ Use ${chalk5.cyan(`--agent ${result.id}`)} on future commands.`);
26914
26942
  const globalOpts = program2.opts();
26915
26943
  const cloud = getTodosCloudClient();
26916
26944
  const { getAgentByName: findByName } = await Promise.resolve().then(() => (init_agents(), exports_agents));
26917
- const agent = cloud ? (await cloudListAgents(cloud)).find((a) => a.name === name || a.id === name) ?? null : findByName(name);
26945
+ const agent = cloud ? resolveCloudAgentByNameOrId(await cloudListAgents(cloud), name) : findByName(name);
26918
26946
  if (!agent) {
26919
26947
  handleError(new Error(`Agent not found: ${name}`));
26920
26948
  }
@@ -30853,7 +30881,7 @@ function createPostgresTodosStorageAdapter(options) {
30853
30881
  agents: {
30854
30882
  register: (input, context) => registerAgent2(input, store, context),
30855
30883
  get: (id) => store.get("agents", id),
30856
- getByName: async (name) => (await store.list("agents")).find((agent) => agent.name === name) ?? null,
30884
+ getByName: async (name) => matchAgentByName(await store.list("agents"), name),
30857
30885
  list: async (options2) => (await store.list("agents")).filter((agent) => options2?.include_archived || agent.status !== "archived").sort((a, b) => a.name.localeCompare(b.name)),
30858
30886
  update: (id, input) => updateAgent2(id, input, store),
30859
30887
  heartbeat: (idOrName, context) => heartbeatAgent(idOrName, store, context),
@@ -31914,15 +31942,27 @@ async function updatePlan2(id, input, store) {
31914
31942
  }
31915
31943
  return store.upsert("plans", { ...plan, ...patch, updated_at: new Date().toISOString() });
31916
31944
  }
31945
+ function matchAgentByName(agents, name, options) {
31946
+ const target = normalizeAgentNameInput(name);
31947
+ if (!target)
31948
+ return null;
31949
+ const matches = agents.filter((agent) => normalizeAgentNameInput(agent.name) === target && (options?.includeArchived !== false || agent.status !== "archived"));
31950
+ if (matches.length === 0)
31951
+ return null;
31952
+ return matches.reduce((freshest, candidate) => new Date(candidate.last_seen_at).getTime() > new Date(freshest.last_seen_at).getTime() ? candidate : freshest);
31953
+ }
31917
31954
  async function registerAgent2(input, store, context) {
31918
- const existing = (await store.list("agents")).find((agent2) => agent2.name === input.name && agent2.status !== "archived");
31955
+ const canonicalName = normalizeAgentNameInput(input.name);
31956
+ const existing = matchAgentByName(await store.list("agents"), canonicalName, {
31957
+ includeArchived: false
31958
+ });
31919
31959
  if (existing && !input.force && existing.session_id && existing.session_id !== input.session_id) {
31920
- return { conflict: true, message: `Agent name '${input.name}' is already active` };
31960
+ return { conflict: true, message: `Agent name '${canonicalName}' is already active` };
31921
31961
  }
31922
31962
  const timestamp2 = new Date().toISOString();
31923
31963
  const agent = {
31924
31964
  id: existing?.id ?? randomUUID3().slice(0, 8),
31925
- name: input.name,
31965
+ name: canonicalName,
31926
31966
  description: input.description ?? existing?.description ?? null,
31927
31967
  role: input.role ?? existing?.role ?? null,
31928
31968
  title: input.title ?? existing?.title ?? null,
@@ -31960,7 +32000,7 @@ async function resolveAgent(idOrName, store) {
31960
32000
  const byId = await store.get("agents", idOrName);
31961
32001
  if (byId)
31962
32002
  return byId;
31963
- return (await store.list("agents")).find((agent) => agent.name === idOrName) ?? null;
32003
+ return matchAgentByName(await store.list("agents"), idOrName);
31964
32004
  }
31965
32005
  async function heartbeatAgent(idOrName, store, context) {
31966
32006
  const agent = await resolveAgent(idOrName, store);
package/dist/contracts.js CHANGED
@@ -11900,7 +11900,7 @@ var init_tasks = __esm(() => {
11900
11900
  // package.json
11901
11901
  var package_default = {
11902
11902
  name: "@hasna/todos",
11903
- version: "0.13.3",
11903
+ version: "0.13.4",
11904
11904
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
11905
11905
  type: "module",
11906
11906
  main: "dist/index.js",
@@ -1,4 +1,5 @@
1
1
  import type { Database } from "bun:sqlite";
2
+ import { normalizeAgentNameInput } from "../lib/agent-name-normalize.js";
2
3
  export declare class InvalidAgentNameError extends Error {
3
4
  readonly suggestions: string[];
4
5
  constructor(name: string, reason: string, suggestions?: string[]);
@@ -8,7 +9,7 @@ export declare const GREEK_AGENT_NAMES: readonly ["athena", "apollo", "artemis",
8
9
  export declare const NICE_AGENT_NAMES: readonly ["atlas", "aurora", "ember", "nova", "orion", "rhea", "selene", "sirius", "vesper", "zephyr"];
9
10
  export declare const EXTENDED_AGENT_NAMES: readonly ["agrippa", "antonius", "aurelian", "aurelius", "camillus", "cassius", "celer", "cincinnatus", "corvus", "drusus", "fabius", "faustus", "flaccus", "gallus", "gaius", "horatius", "lucius", "lucullus", "marius", "marcellus", "maximus", "nerva", "pompey", "quintus", "regulus", "romulus", "scipio", "seneca", "sertorius", "sulla", "tacitus", "varro", "vitruvius", "plato", "socrates", "aristotle", "heraclitus", "democritus", "pythagoras", "hipparchus", "euclid", "archimedes", "zeno", "anaximander", "epictetus", "aeschylus", "sophocles", "euripides", "xenophon", "diogenes"];
10
11
  export declare const PREFERRED_AGENT_NAMES: readonly ["caesar", "augustus", "marcus", "brutus", "cicero", "cato", "nero", "claudius", "tiberius", "hadrian", "trajan", "vespasian", "domitian", "caligula", "commodus", "livia", "julia", "octavia", "claudia", "agrippina", "cornelia", "valeria", "fulvia", "hortensia", "fabia", "athena", "apollo", "artemis", "hera", "iris", "hector", "achilles", "odysseus", "theseus", "pericles", "solon", "sophia", "thalia", "calliope", "clio", "phoebe", "daphne", "leonidas", "andromeda", "cassander", "atlas", "aurora", "ember", "nova", "orion", "rhea", "selene", "sirius", "vesper", "zephyr", "agrippa", "antonius", "aurelian", "aurelius", "camillus", "cassius", "celer", "cincinnatus", "corvus", "drusus", "fabius", "faustus", "flaccus", "gallus", "gaius", "horatius", "lucius", "lucullus", "marius", "marcellus", "maximus", "nerva", "pompey", "quintus", "regulus", "romulus", "scipio", "seneca", "sertorius", "sulla", "tacitus", "varro", "vitruvius", "plato", "socrates", "aristotle", "heraclitus", "democritus", "pythagoras", "hipparchus", "euclid", "archimedes", "zeno", "anaximander", "epictetus", "aeschylus", "sophocles", "euripides", "xenophon", "diogenes"];
11
- export declare function normalizeAgentNameInput(name: string): string;
12
+ export { normalizeAgentNameInput };
12
13
  export declare function hasGeneratedNumericSuffix(name: string): boolean;
13
14
  export declare function isGenericAgentName(name: string): boolean;
14
15
  export declare function isBlockedAgentName(name: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-names.d.ts","sourceRoot":"","sources":["../../src/db/agent-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAEnB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,EAAO;CAKrE;AAED,eAAO,MAAM,iBAAiB,yRA0BpB,CAAC;AAEX,eAAO,MAAM,iBAAiB,8NAqBpB,CAAC;AAEX,eAAO,MAAM,gBAAgB,wGAWnB,CAAC;AAEX,eAAO,MAAM,oBAAoB,wkBAmDvB,CAAC;AAEX,eAAO,MAAM,qBAAqB,soCAKxB,CAAC;AAoBX,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASxD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAmFD,wBAAgB,iBAAiB,CAAC,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,MAAM,EAAE,CAUhF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,MAAM,CAwB5F;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC;IAChB,iBAAiB,EAAE,CAAC,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CA8BnF"}
1
+ {"version":3,"file":"agent-names.d.ts","sourceRoot":"","sources":["../../src/db/agent-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAEnB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,EAAO;CAKrE;AAED,eAAO,MAAM,iBAAiB,yRA0BpB,CAAC;AAEX,eAAO,MAAM,iBAAiB,8NAqBpB,CAAC;AAEX,eAAO,MAAM,gBAAgB,wGAWnB,CAAC;AAEX,eAAO,MAAM,oBAAoB,wkBAmDvB,CAAC;AAEX,eAAO,MAAM,qBAAqB,soCAKxB,CAAC;AAsBX,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASxD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAmFD,wBAAgB,iBAAiB,CAAC,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,MAAM,EAAE,CAUhF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,MAAM,CAwB5F;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC;IAChB,iBAAiB,EAAE,CAAC,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CA8BnF"}
package/dist/index.js CHANGED
@@ -12013,7 +12013,7 @@ var init_dispatches = __esm(() => {
12013
12013
  // package.json
12014
12014
  var package_default = {
12015
12015
  name: "@hasna/todos",
12016
- version: "0.13.3",
12016
+ version: "0.13.4",
12017
12017
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
12018
12018
  type: "module",
12019
12019
  main: "dist/index.js",
@@ -23896,6 +23896,11 @@ init_database();
23896
23896
  init_identity_mapping();
23897
23897
  init_storage_tombstones();
23898
23898
 
23899
+ // src/lib/agent-name-normalize.ts
23900
+ function normalizeAgentNameInput(name) {
23901
+ return name.trim().toLowerCase();
23902
+ }
23903
+
23899
23904
  // src/db/agent-names.ts
23900
23905
  class InvalidAgentNameError extends Error {
23901
23906
  suggestions;
@@ -24040,9 +24045,6 @@ var RESERVED_GENERIC_NAMES = new Set([
24040
24045
  ]);
24041
24046
  var NUMERIC_SUFFIX_RE = /[-_]\d+$/;
24042
24047
  var ONE_WORD_NAME_RE = /^[a-z]+$/;
24043
- function normalizeAgentNameInput(name) {
24044
- return name.trim().toLowerCase();
24045
- }
24046
24048
  function hasGeneratedNumericSuffix(name) {
24047
24049
  return NUMERIC_SUFFIX_RE.test(normalizeAgentNameInput(name));
24048
24050
  }
@@ -25831,7 +25833,7 @@ function createPostgresTodosStorageAdapter(options) {
25831
25833
  agents: {
25832
25834
  register: (input, context) => registerAgent2(input, store, context),
25833
25835
  get: (id) => store.get("agents", id),
25834
- getByName: async (name) => (await store.list("agents")).find((agent) => agent.name === name) ?? null,
25836
+ getByName: async (name) => matchAgentByName(await store.list("agents"), name),
25835
25837
  list: async (options2) => (await store.list("agents")).filter((agent) => options2?.include_archived || agent.status !== "archived").sort((a, b) => a.name.localeCompare(b.name)),
25836
25838
  update: (id, input) => updateAgent2(id, input, store),
25837
25839
  heartbeat: (idOrName, context) => heartbeatAgent(idOrName, store, context),
@@ -26895,15 +26897,27 @@ async function updatePlan2(id, input, store) {
26895
26897
  }
26896
26898
  return store.upsert("plans", { ...plan, ...patch, updated_at: new Date().toISOString() });
26897
26899
  }
26900
+ function matchAgentByName(agents, name, options) {
26901
+ const target = normalizeAgentNameInput(name);
26902
+ if (!target)
26903
+ return null;
26904
+ const matches = agents.filter((agent) => normalizeAgentNameInput(agent.name) === target && (options?.includeArchived !== false || agent.status !== "archived"));
26905
+ if (matches.length === 0)
26906
+ return null;
26907
+ return matches.reduce((freshest, candidate) => new Date(candidate.last_seen_at).getTime() > new Date(freshest.last_seen_at).getTime() ? candidate : freshest);
26908
+ }
26898
26909
  async function registerAgent2(input, store, context) {
26899
- const existing = (await store.list("agents")).find((agent2) => agent2.name === input.name && agent2.status !== "archived");
26910
+ const canonicalName = normalizeAgentNameInput(input.name);
26911
+ const existing = matchAgentByName(await store.list("agents"), canonicalName, {
26912
+ includeArchived: false
26913
+ });
26900
26914
  if (existing && !input.force && existing.session_id && existing.session_id !== input.session_id) {
26901
- return { conflict: true, message: `Agent name '${input.name}' is already active` };
26915
+ return { conflict: true, message: `Agent name '${canonicalName}' is already active` };
26902
26916
  }
26903
26917
  const timestamp3 = new Date().toISOString();
26904
26918
  const agent = {
26905
26919
  id: existing?.id ?? randomUUID3().slice(0, 8),
26906
- name: input.name,
26920
+ name: canonicalName,
26907
26921
  description: input.description ?? existing?.description ?? null,
26908
26922
  role: input.role ?? existing?.role ?? null,
26909
26923
  title: input.title ?? existing?.title ?? null,
@@ -26941,7 +26955,7 @@ async function resolveAgent(idOrName, store) {
26941
26955
  const byId = await store.get("agents", idOrName);
26942
26956
  if (byId)
26943
26957
  return byId;
26944
- return (await store.list("agents")).find((agent) => agent.name === idOrName) ?? null;
26958
+ return matchAgentByName(await store.list("agents"), idOrName);
26945
26959
  }
26946
26960
  async function heartbeatAgent(idOrName, store, context) {
26947
26961
  const agent = await resolveAgent(idOrName, store);
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Canonical agent-name normalisation, shared by every storage engine.
3
+ *
4
+ * Agent names are a case-INSENSITIVE identity: `fabricius`, `Fabricius` and
5
+ * `FABRICIUS` are one agent, not three. This module is the single source of
6
+ * truth for that rule.
7
+ *
8
+ * It lives in `lib/` and imports NOTHING on purpose. The rule is needed by both
9
+ * the SQLite engine (`db/agent-names.ts`) and the Postgres engine
10
+ * (`storage/postgres-adapter.ts`), and the Postgres adapter must not reach into
11
+ * `db/`, whose module graph loads `bun:sqlite` at import time. Duplicating the
12
+ * two lines instead is what let the engines drift apart in the first place
13
+ * (todos task 0bf5d979): SQLite normalised, Postgres compared with `===`, and
14
+ * one agent silently became two roster rows with divergent last_seen_at.
15
+ */
16
+ export declare function normalizeAgentNameInput(name: string): string;
17
+ //# sourceMappingURL=agent-name-normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-name-normalize.d.ts","sourceRoot":"","sources":["../../src/lib/agent-name-normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D"}
package/dist/mcp/index.js CHANGED
@@ -4413,10 +4413,12 @@ var init_storage_tombstones = __esm(() => {
4413
4413
  init_machines();
4414
4414
  });
4415
4415
 
4416
- // src/db/agent-names.ts
4416
+ // src/lib/agent-name-normalize.ts
4417
4417
  function normalizeAgentNameInput(name) {
4418
4418
  return name.trim().toLowerCase();
4419
4419
  }
4420
+
4421
+ // src/db/agent-names.ts
4420
4422
  function hasGeneratedNumericSuffix(name) {
4421
4423
  return NUMERIC_SUFFIX_RE.test(normalizeAgentNameInput(name));
4422
4424
  }
@@ -20084,6 +20086,7 @@ var init_http_client = __esm(() => {
20084
20086
 
20085
20087
  // src/cli/cloud-router.ts
20086
20088
  import { resolveStorageClient } from "@hasna/contracts/client/storage";
20089
+ import { normalizeStorageMode } from "@hasna/contracts/mode";
20087
20090
  import { resolve as resolvePath } from "path";
20088
20091
  function cleanMode(value) {
20089
20092
  const normalized = value?.trim().toLowerCase();
@@ -20205,13 +20208,27 @@ function getTodosRemoteAuthorityConfigStatus(env = process.env) {
20205
20208
  local_fallback: false
20206
20209
  };
20207
20210
  }
20211
+ function serverStorageMode(normalize = normalizeStorageMode) {
20212
+ const useCache = normalize === normalizeStorageMode;
20213
+ if (useCache && cachedServerMode !== null)
20214
+ return cachedServerMode;
20215
+ for (const candidate of SERVER_MODE_CANDIDATES) {
20216
+ try {
20217
+ normalize(candidate);
20218
+ if (useCache)
20219
+ cachedServerMode = candidate;
20220
+ return candidate;
20221
+ } catch {}
20222
+ }
20223
+ throw new Error(`REMOTE_STORAGE_MODE_UNSUPPORTED: no known server storage mode is accepted by the installed ` + `@hasna/contracts (tried ${SERVER_MODE_CANDIDATES.join(", ")}); the storage-mode enum has changed. ` + `Add the new server token to SERVER_MODE_CANDIDATES in src/cli/cloud-router.ts; ` + `local SQLite fallback is disabled.`);
20224
+ }
20208
20225
  function requireTodosRemoteAuthorityEnv(env) {
20209
20226
  const status = getTodosRemoteAuthorityConfigStatus(env);
20210
20227
  if (!status.ok)
20211
20228
  throw new Error(status.issues[0]);
20212
20229
  return {
20213
20230
  ...env,
20214
- HASNA_TODOS_STORAGE_MODE: "cloud",
20231
+ HASNA_TODOS_STORAGE_MODE: serverStorageMode(),
20215
20232
  HASNA_TODOS_API_URL: status.v1_base_url.replace(/\/v1$/, ""),
20216
20233
  HASNA_TODOS_API_KEY: env.HASNA_TODOS_API_KEY.trim()
20217
20234
  };
@@ -20522,7 +20539,7 @@ async function cloudResolveTaskListRef(client, ref, projectId) {
20522
20539
  }
20523
20540
  throw new Error(`Task list not found: "${input}"`);
20524
20541
  }
20525
- var UUID_RE, TRANSPORT_TOKENS, completionCapabilityCache, listTagsCapabilityCache;
20542
+ var UUID_RE, TRANSPORT_TOKENS, completionCapabilityCache, SERVER_MODE_CANDIDATES, cachedServerMode = null, listTagsCapabilityCache;
20526
20543
  var init_cloud_router = __esm(() => {
20527
20544
  init_types();
20528
20545
  init_redaction();
@@ -20538,6 +20555,7 @@ var init_cloud_router = __esm(() => {
20538
20555
  hybrid: "http"
20539
20556
  };
20540
20557
  completionCapabilityCache = new Map;
20558
+ SERVER_MODE_CANDIDATES = ["postgres", "cloud", "self_hosted"];
20541
20559
  listTagsCapabilityCache = new Map;
20542
20560
  });
20543
20561
 
@@ -34553,7 +34571,7 @@ var package_default;
34553
34571
  var init_package = __esm(() => {
34554
34572
  package_default = {
34555
34573
  name: "@hasna/todos",
34556
- version: "0.13.3",
34574
+ version: "0.13.4",
34557
34575
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
34558
34576
  type: "module",
34559
34577
  main: "dist/index.js",
@@ -45358,7 +45376,7 @@ function createPostgresTodosStorageAdapter(options) {
45358
45376
  agents: {
45359
45377
  register: (input, context) => registerAgent2(input, store, context),
45360
45378
  get: (id) => store.get("agents", id),
45361
- getByName: async (name) => (await store.list("agents")).find((agent) => agent.name === name) ?? null,
45379
+ getByName: async (name) => matchAgentByName(await store.list("agents"), name),
45362
45380
  list: async (options2) => (await store.list("agents")).filter((agent) => options2?.include_archived || agent.status !== "archived").sort((a, b) => a.name.localeCompare(b.name)),
45363
45381
  update: (id, input) => updateAgent2(id, input, store),
45364
45382
  heartbeat: (idOrName, context) => heartbeatAgent(idOrName, store, context),
@@ -46419,15 +46437,27 @@ async function updatePlan2(id, input, store) {
46419
46437
  }
46420
46438
  return store.upsert("plans", { ...plan, ...patch, updated_at: new Date().toISOString() });
46421
46439
  }
46440
+ function matchAgentByName(agents, name, options) {
46441
+ const target = normalizeAgentNameInput(name);
46442
+ if (!target)
46443
+ return null;
46444
+ const matches = agents.filter((agent) => normalizeAgentNameInput(agent.name) === target && (options?.includeArchived !== false || agent.status !== "archived"));
46445
+ if (matches.length === 0)
46446
+ return null;
46447
+ return matches.reduce((freshest, candidate) => new Date(candidate.last_seen_at).getTime() > new Date(freshest.last_seen_at).getTime() ? candidate : freshest);
46448
+ }
46422
46449
  async function registerAgent2(input, store, context) {
46423
- const existing = (await store.list("agents")).find((agent2) => agent2.name === input.name && agent2.status !== "archived");
46450
+ const canonicalName = normalizeAgentNameInput(input.name);
46451
+ const existing = matchAgentByName(await store.list("agents"), canonicalName, {
46452
+ includeArchived: false
46453
+ });
46424
46454
  if (existing && !input.force && existing.session_id && existing.session_id !== input.session_id) {
46425
- return { conflict: true, message: `Agent name '${input.name}' is already active` };
46455
+ return { conflict: true, message: `Agent name '${canonicalName}' is already active` };
46426
46456
  }
46427
46457
  const timestamp4 = new Date().toISOString();
46428
46458
  const agent = {
46429
46459
  id: existing?.id ?? randomUUID3().slice(0, 8),
46430
- name: input.name,
46460
+ name: canonicalName,
46431
46461
  description: input.description ?? existing?.description ?? null,
46432
46462
  role: input.role ?? existing?.role ?? null,
46433
46463
  title: input.title ?? existing?.title ?? null,
@@ -46465,7 +46495,7 @@ async function resolveAgent3(idOrName, store) {
46465
46495
  const byId = await store.get("agents", idOrName);
46466
46496
  if (byId)
46467
46497
  return byId;
46468
- return (await store.list("agents")).find((agent) => agent.name === idOrName) ?? null;
46498
+ return matchAgentByName(await store.list("agents"), idOrName);
46469
46499
  }
46470
46500
  async function heartbeatAgent(idOrName, store, context) {
46471
46501
  const agent = await resolveAgent3(idOrName, store);
package/dist/mcp.js CHANGED
@@ -41,7 +41,7 @@ var __require = import.meta.require;
41
41
  // package.json
42
42
  var package_default = {
43
43
  name: "@hasna/todos",
44
- version: "0.13.3",
44
+ version: "0.13.4",
45
45
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
46
46
  type: "module",
47
47
  main: "dist/index.js",
package/dist/registry.js CHANGED
@@ -11900,7 +11900,7 @@ var init_tasks = __esm(() => {
11900
11900
  // package.json
11901
11901
  var package_default = {
11902
11902
  name: "@hasna/todos",
11903
- version: "0.13.3",
11903
+ version: "0.13.4",
11904
11904
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
11905
11905
  type: "module",
11906
11906
  main: "dist/index.js",
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "packageName": "@hasna/todos",
3
- "packageVersion": "0.13.3",
3
+ "packageVersion": "0.13.4",
4
4
  "repository": "https://github.com/hasna/todos.git",
5
- "gitCommit": "5ee2938484e763925ecd109c3d7ce0879c5b5079",
6
- "gitTree": "473dc6bc3dbe3181c2770c0a8632dbc78fd1fa76",
7
- "sourceTreeSha256": "a5cc55e3dc4e8f8e2c670110d1b93a72fa3e0cc56424a2393ffb83321bbc2871",
8
- "generatedAt": "2026-07-30T14:34:36.000Z"
5
+ "gitCommit": "c2c3517bab2321911c44285625ecaa58fcf606ff",
6
+ "gitTree": "f3acc3cc1322f240e911e1ab483a7a5ef88371cd",
7
+ "sourceTreeSha256": "445622ccd461d74a6c060130c1bccfa72b829d74b24b5358b0e36cb730eb8374",
8
+ "generatedAt": "2026-07-31T11:35:34.000Z"
9
9
  }
@@ -70,7 +70,7 @@ var package_default;
70
70
  var init_package = __esm(() => {
71
71
  package_default = {
72
72
  name: "@hasna/todos",
73
- version: "0.13.3",
73
+ version: "0.13.4",
74
74
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
75
75
  type: "module",
76
76
  main: "dist/index.js",
@@ -657,6 +657,11 @@ var init_types = __esm(() => {
657
657
  };
658
658
  });
659
659
 
660
+ // src/lib/agent-name-normalize.ts
661
+ function normalizeAgentNameInput(name) {
662
+ return name.trim().toLowerCase();
663
+ }
664
+
660
665
  // src/lib/slugs.ts
661
666
  function normalizeSlug(value) {
662
667
  return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
@@ -1590,7 +1595,7 @@ function createPostgresTodosStorageAdapter(options) {
1590
1595
  agents: {
1591
1596
  register: (input, context) => registerAgent(input, store, context),
1592
1597
  get: (id) => store.get("agents", id),
1593
- getByName: async (name) => (await store.list("agents")).find((agent) => agent.name === name) ?? null,
1598
+ getByName: async (name) => matchAgentByName(await store.list("agents"), name),
1594
1599
  list: async (options2) => (await store.list("agents")).filter((agent) => options2?.include_archived || agent.status !== "archived").sort((a, b) => a.name.localeCompare(b.name)),
1595
1600
  update: (id, input) => updateAgent(id, input, store),
1596
1601
  heartbeat: (idOrName, context) => heartbeatAgent(idOrName, store, context),
@@ -2651,15 +2656,27 @@ async function updatePlan(id, input, store) {
2651
2656
  }
2652
2657
  return store.upsert("plans", { ...plan, ...patch, updated_at: new Date().toISOString() });
2653
2658
  }
2659
+ function matchAgentByName(agents, name, options) {
2660
+ const target = normalizeAgentNameInput(name);
2661
+ if (!target)
2662
+ return null;
2663
+ const matches = agents.filter((agent) => normalizeAgentNameInput(agent.name) === target && (options?.includeArchived !== false || agent.status !== "archived"));
2664
+ if (matches.length === 0)
2665
+ return null;
2666
+ return matches.reduce((freshest, candidate) => new Date(candidate.last_seen_at).getTime() > new Date(freshest.last_seen_at).getTime() ? candidate : freshest);
2667
+ }
2654
2668
  async function registerAgent(input, store, context) {
2655
- const existing = (await store.list("agents")).find((agent2) => agent2.name === input.name && agent2.status !== "archived");
2669
+ const canonicalName = normalizeAgentNameInput(input.name);
2670
+ const existing = matchAgentByName(await store.list("agents"), canonicalName, {
2671
+ includeArchived: false
2672
+ });
2656
2673
  if (existing && !input.force && existing.session_id && existing.session_id !== input.session_id) {
2657
- return { conflict: true, message: `Agent name '${input.name}' is already active` };
2674
+ return { conflict: true, message: `Agent name '${canonicalName}' is already active` };
2658
2675
  }
2659
2676
  const timestamp = new Date().toISOString();
2660
2677
  const agent = {
2661
2678
  id: existing?.id ?? randomUUID().slice(0, 8),
2662
- name: input.name,
2679
+ name: canonicalName,
2663
2680
  description: input.description ?? existing?.description ?? null,
2664
2681
  role: input.role ?? existing?.role ?? null,
2665
2682
  title: input.title ?? existing?.title ?? null,
@@ -2697,7 +2714,7 @@ async function resolveAgent(idOrName, store) {
2697
2714
  const byId = await store.get("agents", idOrName);
2698
2715
  if (byId)
2699
2716
  return byId;
2700
- return (await store.list("agents")).find((agent) => agent.name === idOrName) ?? null;
2717
+ return matchAgentByName(await store.list("agents"), idOrName);
2701
2718
  }
2702
2719
  async function heartbeatAgent(idOrName, store, context) {
2703
2720
  const agent = await resolveAgent(idOrName, store);
@@ -16694,9 +16711,6 @@ var init_tasks = __esm(() => {
16694
16711
  });
16695
16712
 
16696
16713
  // src/db/agent-names.ts
16697
- function normalizeAgentNameInput(name) {
16698
- return name.trim().toLowerCase();
16699
- }
16700
16714
  function hasGeneratedNumericSuffix(name) {
16701
16715
  return NUMERIC_SUFFIX_RE.test(normalizeAgentNameInput(name));
16702
16716
  }
@@ -45032,6 +45046,7 @@ var init_http_client = __esm(() => {
45032
45046
 
45033
45047
  // src/cli/cloud-router.ts
45034
45048
  import { resolveStorageClient } from "@hasna/contracts/client/storage";
45049
+ import { normalizeStorageMode } from "@hasna/contracts/mode";
45035
45050
  import { resolve as resolvePath } from "path";
45036
45051
  function cleanMode(value) {
45037
45052
  const normalized = value?.trim().toLowerCase();
@@ -45153,13 +45168,27 @@ function getTodosRemoteAuthorityConfigStatus(env = process.env) {
45153
45168
  local_fallback: false
45154
45169
  };
45155
45170
  }
45171
+ function serverStorageMode(normalize = normalizeStorageMode) {
45172
+ const useCache = normalize === normalizeStorageMode;
45173
+ if (useCache && cachedServerMode !== null)
45174
+ return cachedServerMode;
45175
+ for (const candidate of SERVER_MODE_CANDIDATES) {
45176
+ try {
45177
+ normalize(candidate);
45178
+ if (useCache)
45179
+ cachedServerMode = candidate;
45180
+ return candidate;
45181
+ } catch {}
45182
+ }
45183
+ throw new Error(`REMOTE_STORAGE_MODE_UNSUPPORTED: no known server storage mode is accepted by the installed ` + `@hasna/contracts (tried ${SERVER_MODE_CANDIDATES.join(", ")}); the storage-mode enum has changed. ` + `Add the new server token to SERVER_MODE_CANDIDATES in src/cli/cloud-router.ts; ` + `local SQLite fallback is disabled.`);
45184
+ }
45156
45185
  function requireTodosRemoteAuthorityEnv(env) {
45157
45186
  const status = getTodosRemoteAuthorityConfigStatus(env);
45158
45187
  if (!status.ok)
45159
45188
  throw new Error(status.issues[0]);
45160
45189
  return {
45161
45190
  ...env,
45162
- HASNA_TODOS_STORAGE_MODE: "cloud",
45191
+ HASNA_TODOS_STORAGE_MODE: serverStorageMode(),
45163
45192
  HASNA_TODOS_API_URL: status.v1_base_url.replace(/\/v1$/, ""),
45164
45193
  HASNA_TODOS_API_KEY: env.HASNA_TODOS_API_KEY.trim()
45165
45194
  };
@@ -45470,7 +45499,7 @@ async function cloudResolveTaskListRef(client, ref, projectId) {
45470
45499
  }
45471
45500
  throw new Error(`Task list not found: "${input}"`);
45472
45501
  }
45473
- var UUID_RE, TRANSPORT_TOKENS, completionCapabilityCache, listTagsCapabilityCache;
45502
+ var UUID_RE, TRANSPORT_TOKENS, completionCapabilityCache, SERVER_MODE_CANDIDATES, cachedServerMode = null, listTagsCapabilityCache;
45474
45503
  var init_cloud_router = __esm(() => {
45475
45504
  init_types();
45476
45505
  init_redaction();
@@ -45486,6 +45515,7 @@ var init_cloud_router = __esm(() => {
45486
45515
  hybrid: "http"
45487
45516
  };
45488
45517
  completionCapabilityCache = new Map;
45518
+ SERVER_MODE_CANDIDATES = ["postgres", "cloud", "self_hosted"];
45489
45519
  listTagsCapabilityCache = new Map;
45490
45520
  });
45491
45521
 
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-adapter.d.ts","sourceRoot":"","sources":["../../src/storage/postgres-adapter.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAYV,mBAAmB,EAYpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,KAAK,wBAAwB,EAE9B,MAAM,oBAAoB,CAAC;AAqB5B,MAAM,WAAW,wCAAwC;IACvD,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAuBD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,wCAAwC,GAChD,mBAAmB,CAmJrB"}
1
+ {"version":3,"file":"postgres-adapter.d.ts","sourceRoot":"","sources":["../../src/storage/postgres-adapter.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAYV,mBAAmB,EAYpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,KAAK,wBAAwB,EAE9B,MAAM,oBAAoB,CAAC;AAqB5B,MAAM,WAAW,wCAAwC;IACvD,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAuBD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,wCAAwC,GAChD,mBAAmB,CAmJrB"}
package/dist/storage.js CHANGED
@@ -12069,6 +12069,11 @@ init_database();
12069
12069
  init_identity_mapping();
12070
12070
  init_storage_tombstones();
12071
12071
 
12072
+ // src/lib/agent-name-normalize.ts
12073
+ function normalizeAgentNameInput(name) {
12074
+ return name.trim().toLowerCase();
12075
+ }
12076
+
12072
12077
  // src/db/agent-names.ts
12073
12078
  class InvalidAgentNameError extends Error {
12074
12079
  suggestions;
@@ -12213,9 +12218,6 @@ var RESERVED_GENERIC_NAMES = new Set([
12213
12218
  ]);
12214
12219
  var NUMERIC_SUFFIX_RE = /[-_]\d+$/;
12215
12220
  var ONE_WORD_NAME_RE = /^[a-z]+$/;
12216
- function normalizeAgentNameInput(name) {
12217
- return name.trim().toLowerCase();
12218
- }
12219
12221
  function hasGeneratedNumericSuffix(name) {
12220
12222
  return NUMERIC_SUFFIX_RE.test(normalizeAgentNameInput(name));
12221
12223
  }
@@ -14004,7 +14006,7 @@ function createPostgresTodosStorageAdapter(options) {
14004
14006
  agents: {
14005
14007
  register: (input, context) => registerAgent2(input, store, context),
14006
14008
  get: (id) => store.get("agents", id),
14007
- getByName: async (name) => (await store.list("agents")).find((agent) => agent.name === name) ?? null,
14009
+ getByName: async (name) => matchAgentByName(await store.list("agents"), name),
14008
14010
  list: async (options2) => (await store.list("agents")).filter((agent) => options2?.include_archived || agent.status !== "archived").sort((a, b) => a.name.localeCompare(b.name)),
14009
14011
  update: (id, input) => updateAgent2(id, input, store),
14010
14012
  heartbeat: (idOrName, context) => heartbeatAgent(idOrName, store, context),
@@ -15068,15 +15070,27 @@ async function updatePlan2(id, input, store) {
15068
15070
  }
15069
15071
  return store.upsert("plans", { ...plan, ...patch, updated_at: new Date().toISOString() });
15070
15072
  }
15073
+ function matchAgentByName(agents, name, options) {
15074
+ const target = normalizeAgentNameInput(name);
15075
+ if (!target)
15076
+ return null;
15077
+ const matches = agents.filter((agent) => normalizeAgentNameInput(agent.name) === target && (options?.includeArchived !== false || agent.status !== "archived"));
15078
+ if (matches.length === 0)
15079
+ return null;
15080
+ return matches.reduce((freshest, candidate) => new Date(candidate.last_seen_at).getTime() > new Date(freshest.last_seen_at).getTime() ? candidate : freshest);
15081
+ }
15071
15082
  async function registerAgent2(input, store, context) {
15072
- const existing = (await store.list("agents")).find((agent2) => agent2.name === input.name && agent2.status !== "archived");
15083
+ const canonicalName = normalizeAgentNameInput(input.name);
15084
+ const existing = matchAgentByName(await store.list("agents"), canonicalName, {
15085
+ includeArchived: false
15086
+ });
15073
15087
  if (existing && !input.force && existing.session_id && existing.session_id !== input.session_id) {
15074
- return { conflict: true, message: `Agent name '${input.name}' is already active` };
15088
+ return { conflict: true, message: `Agent name '${canonicalName}' is already active` };
15075
15089
  }
15076
15090
  const timestamp2 = new Date().toISOString();
15077
15091
  const agent = {
15078
15092
  id: existing?.id ?? randomUUID3().slice(0, 8),
15079
- name: input.name,
15093
+ name: canonicalName,
15080
15094
  description: input.description ?? existing?.description ?? null,
15081
15095
  role: input.role ?? existing?.role ?? null,
15082
15096
  title: input.title ?? existing?.title ?? null,
@@ -15114,7 +15128,7 @@ async function resolveAgent(idOrName, store) {
15114
15128
  const byId = await store.get("agents", idOrName);
15115
15129
  if (byId)
15116
15130
  return byId;
15117
- return (await store.list("agents")).find((agent) => agent.name === idOrName) ?? null;
15131
+ return matchAgentByName(await store.list("agents"), idOrName);
15118
15132
  }
15119
15133
  async function heartbeatAgent(idOrName, store, context) {
15120
15134
  const agent = await resolveAgent(idOrName, store);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/todos",
3
- "version": "0.13.3",
3
+ "version": "0.13.4",
4
4
  "description": "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",