@telora/daemon 0.17.22 → 0.17.28

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/build-info.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "commitSha": "9400821a",
3
- "builtAt": "2026-06-07T20:39:53.913Z",
2
+ "commitSha": "c113310c",
3
+ "builtAt": "2026-06-08T21:14:55.859Z",
4
4
  "expectedMigrations": [
5
5
  "20250829113330_create_org_nodes_table.sql",
6
6
  "20250829113402_fix_function_security_search_path.sql",
@@ -2,8 +2,10 @@
2
2
  * `telora-daemon session-state` subcommand.
3
3
  *
4
4
  * One-shot bootstrap helper for the Claude Code SessionStart and PreToolUse
5
- * hooks. Reads `.telora/daemon.json` from cwd (or `--config <path>`), calls
6
- * the product-api `session_state` action, and emits either:
5
+ * hooks. Reads daemon config using global-first search order
6
+ * (`~/.telora/daemon.json`, then `.telora/daemon.json` in cwd), or the
7
+ * explicit `--config <path>` override. Calls the product-api `session_state`
8
+ * action and emits either:
7
9
  *
8
10
  * - default: two-line invariant summary suitable for Claude's session
9
11
  * context. Line 1 is the connection (URL + org + product name); line 2
@@ -19,6 +21,21 @@
19
21
  * errors and git errors degrade gracefully -- they print to stderr and the
20
22
  * command still exits 0 so the hook never blocks Claude Code.
21
23
  */
24
+ interface DaemonJsonProduct {
25
+ id?: string;
26
+ repoPath?: string;
27
+ }
28
+ interface DaemonJson {
29
+ teloraUrl?: string;
30
+ trackerId?: string;
31
+ productId?: string;
32
+ products?: DaemonJsonProduct[];
33
+ engines?: {
34
+ strategy?: {
35
+ integrationBranch?: string;
36
+ };
37
+ };
38
+ }
22
39
  interface SessionStateResponse {
23
40
  success?: boolean;
24
41
  connectedUrl?: string;
@@ -39,16 +56,77 @@ interface SessionStateResponse {
39
56
  export interface SessionStateOptions {
40
57
  /** Emit structured JSON instead of human-readable text. */
41
58
  json?: boolean;
42
- /** Override the daemon.json path (default: ./.telora/daemon.json). */
59
+ /** Override the daemon.json path. Default: global `~/.telora/daemon.json`, then `.telora/daemon.json` in cwd. */
43
60
  config?: string;
44
61
  }
45
62
  /**
46
- * Two-line invariant summary. Dynamic state (active focus, branches,
47
- * deliveries) is intentionally omitted -- it should be resolved on demand
48
- * via MCP at the point of use, not baked into the bootstrap where it goes
49
- * stale during the session. Exported for unit testing.
63
+ * Three-line invariant summary. Line 1 is the connection; line 2 reminds
64
+ * the agent to resolve dynamic state on demand; line 3 is the load-bearing
65
+ * default-and-exception rule (declare intent before code). Dynamic state
66
+ * (active focus, branches, deliveries) is intentionally omitted -- it
67
+ * should be resolved on demand via MCP at the point of use, not baked into
68
+ * the bootstrap where it goes stale during the session. This output is
69
+ * injected by the SessionStart hook and is NOT wrapped in the harness's
70
+ * "may or may not be relevant" caveat, so it is the most reliable channel
71
+ * for the one invariant the agent must not reason its way around.
72
+ * Exported for unit testing.
50
73
  */
51
74
  export declare function formatPlain(state: SessionStateResponse): string;
75
+ /**
76
+ * Resolve the default daemon.json path using global-first search order:
77
+ * 1. ~/.telora/daemon.json (global; written by `connect` for all current installs)
78
+ * 2. .telora/daemon.json in cwd (repo-local; legacy / hand-crafted)
79
+ *
80
+ * Returns the first path that exists, or null when neither does (not connected).
81
+ * Exported for unit testing.
82
+ */
83
+ export declare function resolveDefaultConfigPath(): string | null;
84
+ /**
85
+ * Return the productId and repoPath for the product that owns the current cwd.
86
+ *
87
+ * In a multi-product config (e.g. Hue + Telora), the hook fetches session state
88
+ * for the product the session is INSIDE, not blindly for products[0]. This fixes
89
+ * the silent divergence where the bootstrap line reported one product while the
90
+ * daemon serviced another.
91
+ *
92
+ * Falls back to products[0] when no product's repoPath contains cwd (safe
93
+ * degradation for configs with no repoPath entries, or manual configs without a
94
+ * matching entry).
95
+ */
96
+ export declare function resolveProductIdAndRepoPath(cfg: DaemonJson): {
97
+ productId: string | null;
98
+ repoPath: string;
99
+ };
100
+ /**
101
+ * Pick the configured product whose repo the session is running inside.
102
+ *
103
+ * The hook calls `session-state` from the session cwd, so the cwd-matching
104
+ * product -- NOT blindly `products[0]` -- is the one whose CLAUDE.md should be
105
+ * self-healed. A repo matches when its `repoPath` equals the cwd or contains it
106
+ * (cwd is the repo root or a subdirectory). Returns the resolved repo path, or
107
+ * null when the cwd is outside every configured repo (clean no-op).
108
+ */
109
+ export declare function resolveCwdRepoPath(cfg: DaemonJson): string | null;
110
+ /**
111
+ * Self-heal the CLAUDE.md Telora seed block for the cwd-matching product on
112
+ * every session open. This is the session-open analog of the daemon's
113
+ * boot-time `refreshClaudeMdForProducts`: a connected repo whose daemon process
114
+ * is not running otherwise keeps a seed frozen at connect-time, so newly
115
+ * shipped Telora directives never reach that workstation. The SessionStart hook
116
+ * runs `session-state` regardless of whether the daemon process is up, so doing
117
+ * the refresh here closes that gap.
118
+ *
119
+ * Reuses `writeOrMergeClaudeMd` (the same function the boot refresh uses) with
120
+ * productName=null -- it replaces only the delimited block, preserves all user
121
+ * content, and is a no-op write when the block is already current.
122
+ *
123
+ * Side-effect only: its `io.out` messages are routed to stderr so the
124
+ * `formatPlain` / `--json` stdout contract is byte-identical with or without a
125
+ * refresh. Every failure (missing file, IO/parse error, cwd outside all repos)
126
+ * is swallowed with a stderr note so the hook always exits 0 and session start
127
+ * is never blocked.
128
+ */
129
+ export declare function selfHealClaudeMdSeed(cfg: DaemonJson): void;
52
130
  export declare function runSessionState(opts: SessionStateOptions): Promise<void>;
53
131
  export {};
54
132
  //# sourceMappingURL=session-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/cli/session-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAqBH,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,GAAG;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;QACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAChD,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwGD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAQ/D;AAiBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B9E"}
1
+ {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/cli/session-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,UAAU,iBAAiB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE;YAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C,CAAC;CACH;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,GAAG;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;QACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAChD,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iHAAiH;IACjH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwGD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAS/D;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAMxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,UAAU,GAAG;IAC5D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAiBA;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAWjE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAqB1D;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC9E"}
@@ -2,8 +2,10 @@
2
2
  * `telora-daemon session-state` subcommand.
3
3
  *
4
4
  * One-shot bootstrap helper for the Claude Code SessionStart and PreToolUse
5
- * hooks. Reads `.telora/daemon.json` from cwd (or `--config <path>`), calls
6
- * the product-api `session_state` action, and emits either:
5
+ * hooks. Reads daemon config using global-first search order
6
+ * (`~/.telora/daemon.json`, then `.telora/daemon.json` in cwd), or the
7
+ * explicit `--config <path>` override. Calls the product-api `session_state`
8
+ * action and emits either:
7
9
  *
8
10
  * - default: two-line invariant summary suitable for Claude's session
9
11
  * context. Line 1 is the connection (URL + org + product name); line 2
@@ -21,7 +23,9 @@
21
23
  */
22
24
  import { existsSync, readFileSync } from 'node:fs';
23
25
  import { execFileSync } from 'node:child_process';
24
- import { resolve } from 'node:path';
26
+ import { homedir } from 'node:os';
27
+ import { resolve, sep } from 'node:path';
28
+ import { writeOrMergeClaudeMd } from './connect.js';
25
29
  function loadDaemonJson(configPath) {
26
30
  if (!existsSync(configPath))
27
31
  return null;
@@ -118,10 +122,16 @@ async function callSessionState(cfg, productId) {
118
122
  }
119
123
  }
120
124
  /**
121
- * Two-line invariant summary. Dynamic state (active focus, branches,
122
- * deliveries) is intentionally omitted -- it should be resolved on demand
123
- * via MCP at the point of use, not baked into the bootstrap where it goes
124
- * stale during the session. Exported for unit testing.
125
+ * Three-line invariant summary. Line 1 is the connection; line 2 reminds
126
+ * the agent to resolve dynamic state on demand; line 3 is the load-bearing
127
+ * default-and-exception rule (declare intent before code). Dynamic state
128
+ * (active focus, branches, deliveries) is intentionally omitted -- it
129
+ * should be resolved on demand via MCP at the point of use, not baked into
130
+ * the bootstrap where it goes stale during the session. This output is
131
+ * injected by the SessionStart hook and is NOT wrapped in the harness's
132
+ * "may or may not be relevant" caveat, so it is the most reliable channel
133
+ * for the one invariant the agent must not reason its way around.
134
+ * Exported for unit testing.
125
135
  */
126
136
  export function formatPlain(state) {
127
137
  const url = state.connectedUrl ?? '';
@@ -130,26 +140,136 @@ export function formatPlain(state) {
130
140
  return [
131
141
  `Telora connected: ${url} / ${orgName} / ${productName}`,
132
142
  'Active focuses, branches, and deliveries are resolved on demand via Telora MCP.',
143
+ 'DEFAULT: declare intent in Telora (Focus -> delivery -> issue, moved to In Progress) BEFORE writing or scaffolding code; build directly in the working tree only when the user explicitly says so (e.g. "build locally", "just write it").',
133
144
  ].join('\n');
134
145
  }
135
- function resolveProductIdAndRepoPath(cfg) {
136
- const cwd = process.cwd();
146
+ /**
147
+ * Resolve the default daemon.json path using global-first search order:
148
+ * 1. ~/.telora/daemon.json (global; written by `connect` for all current installs)
149
+ * 2. .telora/daemon.json in cwd (repo-local; legacy / hand-crafted)
150
+ *
151
+ * Returns the first path that exists, or null when neither does (not connected).
152
+ * Exported for unit testing.
153
+ */
154
+ export function resolveDefaultConfigPath() {
155
+ const globalPath = resolve(homedir(), '.telora', 'daemon.json');
156
+ if (existsSync(globalPath))
157
+ return globalPath;
158
+ const localPath = resolve(process.cwd(), '.telora', 'daemon.json');
159
+ if (existsSync(localPath))
160
+ return localPath;
161
+ return null;
162
+ }
163
+ /**
164
+ * Return the productId and repoPath for the product that owns the current cwd.
165
+ *
166
+ * In a multi-product config (e.g. Hue + Telora), the hook fetches session state
167
+ * for the product the session is INSIDE, not blindly for products[0]. This fixes
168
+ * the silent divergence where the bootstrap line reported one product while the
169
+ * daemon serviced another.
170
+ *
171
+ * Falls back to products[0] when no product's repoPath contains cwd (safe
172
+ * degradation for configs with no repoPath entries, or manual configs without a
173
+ * matching entry).
174
+ */
175
+ export function resolveProductIdAndRepoPath(cfg) {
176
+ const cwd = resolve(process.cwd());
137
177
  if (cfg.products && cfg.products.length > 0) {
178
+ // Prefer the product whose repo contains cwd (the one this session is FOR).
179
+ for (const product of cfg.products) {
180
+ if (!product.repoPath)
181
+ continue;
182
+ const repo = resolve(product.repoPath);
183
+ if (repo === cwd || cwd.startsWith(repo + sep)) {
184
+ return { productId: product.id ?? cfg.productId ?? null, repoPath: repo };
185
+ }
186
+ }
187
+ // No cwd match -- fall back to first product.
138
188
  const first = cfg.products[0];
139
- return {
140
- productId: first.id ?? cfg.productId ?? null,
141
- repoPath: first.repoPath ?? cwd,
142
- };
189
+ return { productId: first.id ?? cfg.productId ?? null, repoPath: first.repoPath ?? cwd };
143
190
  }
191
+ // Single-product legacy format.
144
192
  return { productId: cfg.productId ?? null, repoPath: cwd };
145
193
  }
194
+ /**
195
+ * Pick the configured product whose repo the session is running inside.
196
+ *
197
+ * The hook calls `session-state` from the session cwd, so the cwd-matching
198
+ * product -- NOT blindly `products[0]` -- is the one whose CLAUDE.md should be
199
+ * self-healed. A repo matches when its `repoPath` equals the cwd or contains it
200
+ * (cwd is the repo root or a subdirectory). Returns the resolved repo path, or
201
+ * null when the cwd is outside every configured repo (clean no-op).
202
+ */
203
+ export function resolveCwdRepoPath(cfg) {
204
+ const cwd = resolve(process.cwd());
205
+ for (const product of cfg.products ?? []) {
206
+ if (!product.repoPath)
207
+ continue;
208
+ const repo = resolve(product.repoPath);
209
+ if (repo === cwd || cwd.startsWith(repo + sep))
210
+ return repo;
211
+ }
212
+ // Single-product legacy format: productId without a products array.
213
+ // The hook runs from the repo root, so cwd is the repo path.
214
+ if (!cfg.products?.length && cfg.productId)
215
+ return cwd;
216
+ return null;
217
+ }
218
+ /**
219
+ * Self-heal the CLAUDE.md Telora seed block for the cwd-matching product on
220
+ * every session open. This is the session-open analog of the daemon's
221
+ * boot-time `refreshClaudeMdForProducts`: a connected repo whose daemon process
222
+ * is not running otherwise keeps a seed frozen at connect-time, so newly
223
+ * shipped Telora directives never reach that workstation. The SessionStart hook
224
+ * runs `session-state` regardless of whether the daemon process is up, so doing
225
+ * the refresh here closes that gap.
226
+ *
227
+ * Reuses `writeOrMergeClaudeMd` (the same function the boot refresh uses) with
228
+ * productName=null -- it replaces only the delimited block, preserves all user
229
+ * content, and is a no-op write when the block is already current.
230
+ *
231
+ * Side-effect only: its `io.out` messages are routed to stderr so the
232
+ * `formatPlain` / `--json` stdout contract is byte-identical with or without a
233
+ * refresh. Every failure (missing file, IO/parse error, cwd outside all repos)
234
+ * is swallowed with a stderr note so the hook always exits 0 and session start
235
+ * is never blocked.
236
+ */
237
+ export function selfHealClaudeMdSeed(cfg) {
238
+ try {
239
+ const repoPath = resolveCwdRepoPath(cfg);
240
+ if (!repoPath)
241
+ return; // cwd is not a configured product repo -- clean no-op.
242
+ // Only REFRESH an existing CLAUDE.md; creation is `connect`'s job. A
243
+ // connected repo always has one, so a missing file is treated as a safe
244
+ // no-op rather than silently spawning a CLAUDE.md from a session hook.
245
+ if (!existsSync(resolve(repoPath, 'CLAUDE.md')))
246
+ return;
247
+ const io = {
248
+ // Route stdout-bound notes to stderr: the refresh must not perturb the
249
+ // plain/json payload the hook consumes from stdout.
250
+ out: (msg) => process.stderr.write(msg),
251
+ err: (msg) => process.stderr.write(msg),
252
+ fetch: globalThis.fetch,
253
+ };
254
+ writeOrMergeClaudeMd(repoPath, null, io);
255
+ }
256
+ catch (err) {
257
+ process.stderr.write(`session-state: CLAUDE.md seed refresh skipped: ${err.message}\n`);
258
+ }
259
+ }
146
260
  export async function runSessionState(opts) {
147
- const configPath = resolve(opts.config ?? '.telora/daemon.json');
261
+ const configPath = opts.config ? resolve(opts.config) : resolveDefaultConfigPath();
262
+ if (!configPath)
263
+ return; // Not Telora-connected -- silent success.
148
264
  const cfg = loadDaemonJson(configPath);
149
265
  if (!cfg) {
150
266
  // Not Telora-connected -- silent success.
151
267
  return;
152
268
  }
269
+ // Self-heal the CLAUDE.md seed before anything else so it runs on BOTH the
270
+ // plain and --json paths and regardless of whether the network call below
271
+ // succeeds. Local fs only; no network; degrade-safe.
272
+ selfHealClaudeMdSeed(cfg);
153
273
  const { productId, repoPath } = resolveProductIdAndRepoPath(cfg);
154
274
  if (!productId) {
155
275
  process.stderr.write('session-state: daemon.json has no productId\n');
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/cli/session-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/cli/session-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAkB,MAAM,cAAc,CAAC;AAgDpE,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAe,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,UAAU,KAAM,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,IAAc,EAAE,GAAW;IACzC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,iBAAyB,EAAE,QAAgB;IACpE,uEAAuE;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,iBAAiB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjF,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,WAAW,GAAG,MAAM,CACxB,CAAC,cAAc,EAAE,2BAA2B,EAAE,aAAa,CAAC,EAC5D,QAAQ,CACT,CAAC;IACF,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,0EAA0E;QAC1E,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ;YAAE,SAAS;QACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,iBAAiB,KAAK,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC;YAAE,SAAS;QAClE,MAAM,IAAI,GAAe,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QAC9D,MAAM,cAAc,GAAG,MAAM,CAC3B;YACE,KAAK;YACL,GAAG,iBAAiB,KAAK,MAAM,EAAE;YACjC,WAAW;YACX,cAAc;YACd,IAAI;SACL,EACD,QAAQ,CACT,CAAC;QACF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,GAAe,EACf,SAAiB;IAEjB,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,SAAS,2BAA2B,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,GAAG,CAAC,SAAS,EAAE;gBACxC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;YAC5D,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,CAC5E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAiC,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,KAA2B;IACrD,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,IAAI,SAAS,CAAC;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,SAAS,CAAC;IACnD,OAAO;QACL,qBAAqB,GAAG,MAAM,OAAO,MAAM,WAAW,EAAE;QACxD,iFAAiF;QACjF,4OAA4O;KAC7O,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAChE,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAe;IAIzD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,4EAA4E;QAC5E,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,SAAS;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,8CAA8C;QAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC;IAC3F,CAAC;IACD,gCAAgC;IAChC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAe;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,SAAS;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC9D,CAAC;IACD,oEAAoE;IACpE,6DAA6D;IAC7D,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAe;IAClD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,uDAAuD;QAC9E,qEAAqE;QACrE,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO;QACxD,MAAM,EAAE,GAAc;YACpB,uEAAuE;YACvE,oDAAoD;YACpD,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/C,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/C,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC;QACF,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kDAAmD,GAAa,CAAC,OAAO,IAAI,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC;IACnF,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,0CAA0C;IACnE,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,0CAA0C;QAC1C,OAAO;IACT,CAAC;IAED,2EAA2E;IAC3E,0EAA0E;IAC1E,qDAAqD;IACrD,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,IAAI,GAAG,CAAC,SAAS;QAAE,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC;IAEtD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,6DAA6D;QAC7D,sEAAsE;QACtE,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,IAAI,aAAa,CAAC;QACpF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG;YACd,GAAG,KAAK;YACR,QAAQ;SACT,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AACnE,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAoH/D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CASjE"}
1
+ {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AACnE,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AA8J/D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CASjE"}
@@ -19,6 +19,48 @@ This repo is connected to Telora -- a differential control plane for
19
19
  software delivery. Intent and reality are paired signals; the meaningful
20
20
  work happens at the difference.
21
21
 
22
+ ## Before you write any code (read this first)
23
+
24
+ DEFAULT: on a Telora-connected workstation, a new capability starts as
25
+ **declared intent** before any code. When the user says "I want to build
26
+ X", your first move is NOT to scaffold X -- it is to declare it: create
27
+ (or select) a Focus -> delivery -> issue and move an issue to **In
28
+ Progress**. Code is written only after intent is anchored above it.
29
+
30
+ This polarity is deliberate and easy to get backwards. Building directly
31
+ in the working tree -- scaffolding, installing dependencies, starting a
32
+ dev server, writing application files -- is the **exception**, taken ONLY
33
+ when the user explicitly asks for it. Recognized bypass phrases:
34
+ "build locally", "just write it", "skip Telora", "don't track this",
35
+ "throwaway". Absent an explicit signal like these, treat any build
36
+ request as a request to declare intent in Telora first.
37
+
38
+ Asking good clarifying questions about stack, scope, or dependencies is
39
+ NOT a substitute for this step -- that is execution-layer scoping, and it
40
+ comes *after* the capability is declared, not instead of it. Scoping is
41
+ agent work; declaring that a capability matters is the part that must
42
+ land in Telora first.
43
+
44
+ **Surface the fork; do not silently pick it.** The common failure is
45
+ resolving an ambiguous request toward the path of least resistance --
46
+ e.g. reading "a web app I run locally on my LAN" (a deployment target) as
47
+ "build locally" (skip Telora). When intent is not already explicit, your
48
+ FIRST response to a build request names the choice rather than assuming
49
+ it: "I'll scope this in Telora unless you want it built locally -- which?"
50
+ One question, once, at the start. Let the user pick; never pick for them
51
+ by starting to type code.
52
+
53
+ **First action rule.** On a build / new-capability request, your first
54
+ tool call is a Telora planning call (telora_product_focus / _delivery /
55
+ _issue) OR the fork question above -- never Write, Edit, or a code-running
56
+ Bash command. If the first move cannot be code, building-before-intent
57
+ cannot happen.
58
+
59
+ Why: an artifact with no declared intent above it is reality moving with
60
+ nothing to measure it against -- pure noise to the differential loop. The
61
+ whole system is built to compute intent-minus-reality; code that skips
62
+ the intent half defeats the instrument.
63
+
22
64
  ## Planning hierarchy
23
65
 
24
66
  - **Focus** = one capability. All phases of building one thing belong
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE/D,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,WAA0B;IACvD,MAAM,WAAW,GAAG,WAAW;QAC7B,CAAC,CAAC,kCAAkC,WAAW,SAAS;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GACT,GAAG,sBAAsB,IAAI;QAC7B,GAAG,WAAW,GAAG,SAAS,EAAE;QAC5B,GAAG,oBAAoB,IAAI,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE/D,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,WAA0B;IACvD,MAAM,WAAW,GAAG,WAAW;QAC7B,CAAC,CAAC,kCAAkC,WAAW,SAAS;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GACT,GAAG,sBAAsB,IAAI;QAC7B,GAAG,WAAW,GAAG,SAAS,EAAE;QAC5B,GAAG,oBAAoB,IAAI,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,19 +1,29 @@
1
1
  /**
2
2
  * Non-blocking npm registry version check.
3
3
  *
4
- * Checks if a newer version of @telora/daemon is available on the configured
5
- * registry. Fails silently on any error -- a registry outage never prevents
6
- * startup or normal operation.
4
+ * Checks if a newer version of @telora/daemon is available on the public
5
+ * registry the package is actually installed from. Fails open on any error --
6
+ * a registry outage never prevents startup or normal operation -- but logs a
7
+ * warn line so a broken update path produces a signal instead of silent rot.
7
8
  */
8
9
  export interface VersionCheckResult {
9
10
  latestVersion: string;
10
11
  updateAvailable: boolean;
11
12
  }
13
+ /**
14
+ * True when `candidate` is a strictly greater semver than `current`
15
+ * (major.minor.patch compare). Falls back to string inequality only when
16
+ * either version cannot be parsed, so a malformed tag never silently no-ops.
17
+ */
18
+ export declare function isNewerVersion(candidate: string, current: string): boolean;
12
19
  /**
13
20
  * Check the npm registry for the latest published version of @telora/daemon.
14
21
  *
15
22
  * @param currentVersion - The currently running version (e.g., "0.7.5")
16
23
  * @returns VersionCheckResult or null on any failure (network, timeout, parse, etc.)
24
+ *
25
+ * Fail-open: returns null on any error but logs a warn line including the
26
+ * resolved registry URL so a broken update path is observable in the daemon log.
17
27
  */
18
28
  export declare function checkForUpdates(currentVersion: string, packageName?: string): Promise<VersionCheckResult | null>;
19
29
  //# sourceMappingURL=version-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAmBD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,SAAmB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAqChI"}
1
+ {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAiCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,SAAmB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAoDhI"}
@@ -1,38 +1,75 @@
1
1
  /**
2
2
  * Non-blocking npm registry version check.
3
3
  *
4
- * Checks if a newer version of @telora/daemon is available on the configured
5
- * registry. Fails silently on any error -- a registry outage never prevents
6
- * startup or normal operation.
4
+ * Checks if a newer version of @telora/daemon is available on the public
5
+ * registry the package is actually installed from. Fails open on any error --
6
+ * a registry outage never prevents startup or normal operation -- but logs a
7
+ * warn line so a broken update path produces a signal instead of silent rot.
7
8
  */
8
- import { readFileSync } from 'node:fs';
9
- import { dirname, join } from 'node:path';
10
- import { fileURLToPath } from 'node:url';
11
9
  const CHECK_TIMEOUT_MS = 5000;
10
+ /** Public registry the package is installed from; the update check targets this. */
11
+ const DEFAULT_REGISTRY_URL = 'https://registry.npmjs.org/';
12
12
  /**
13
- * Read the npm registry URL from package.json publishConfig.
14
- * Falls back to https://registry.npmjs.org/ if not set.
13
+ * Resolve the registry URL the update check should target.
14
+ *
15
+ * Defaults to the public npmjs registry the package is installed from. Does NOT
16
+ * derive from package.json publishConfig.registry -- that field points at the
17
+ * internal Gitea LAN host for PUBLISHING and is unreachable from installed
18
+ * daemons in the field. TELORA_REGISTRY_URL stays as the explicit LAN/dev
19
+ * override.
15
20
  */
16
21
  function getRegistryUrl() {
17
- try {
18
- const thisDir = dirname(fileURLToPath(import.meta.url));
19
- const pkgPath = join(thisDir, '..', 'package.json');
20
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
21
- return pkg.publishConfig?.registry || 'https://registry.npmjs.org/';
22
+ return process.env.TELORA_REGISTRY_URL || DEFAULT_REGISTRY_URL;
23
+ }
24
+ /**
25
+ * Parse a semver string's numeric major.minor.patch core, ignoring any
26
+ * pre-release / build suffix (e.g. "1.2.3-beta.1" -> [1, 2, 3]).
27
+ * Returns null when the core cannot be parsed.
28
+ */
29
+ function parseVersionCore(version) {
30
+ const core = version.trim().replace(/^v/, '').split(/[-+]/)[0];
31
+ const parts = core.split('.');
32
+ if (parts.length < 1)
33
+ return null;
34
+ const nums = [];
35
+ for (let i = 0; i < 3; i++) {
36
+ const n = Number(parts[i] ?? '0');
37
+ if (!Number.isInteger(n) || n < 0)
38
+ return null;
39
+ nums.push(n);
22
40
  }
23
- catch {
24
- return 'https://registry.npmjs.org/';
41
+ return [nums[0], nums[1], nums[2]];
42
+ }
43
+ /**
44
+ * True when `candidate` is a strictly greater semver than `current`
45
+ * (major.minor.patch compare). Falls back to string inequality only when
46
+ * either version cannot be parsed, so a malformed tag never silently no-ops.
47
+ */
48
+ export function isNewerVersion(candidate, current) {
49
+ const c = parseVersionCore(candidate);
50
+ const r = parseVersionCore(current);
51
+ if (!c || !r)
52
+ return candidate !== current;
53
+ for (let i = 0; i < 3; i++) {
54
+ if (c[i] > r[i])
55
+ return true;
56
+ if (c[i] < r[i])
57
+ return false;
25
58
  }
59
+ return false;
26
60
  }
27
61
  /**
28
62
  * Check the npm registry for the latest published version of @telora/daemon.
29
63
  *
30
64
  * @param currentVersion - The currently running version (e.g., "0.7.5")
31
65
  * @returns VersionCheckResult or null on any failure (network, timeout, parse, etc.)
66
+ *
67
+ * Fail-open: returns null on any error but logs a warn line including the
68
+ * resolved registry URL so a broken update path is observable in the daemon log.
32
69
  */
33
70
  export async function checkForUpdates(currentVersion, packageName = '@telora/daemon') {
71
+ const registryUrl = getRegistryUrl();
34
72
  try {
35
- const registryUrl = process.env.TELORA_REGISTRY_URL || getRegistryUrl();
36
73
  const base = registryUrl.endsWith('/') ? registryUrl : registryUrl + '/';
37
74
  // Scoped package names use URL-encoded slash in the npm protocol
38
75
  const encodedName = packageName.replace('/', '%2F');
@@ -44,23 +81,30 @@ export async function checkForUpdates(currentVersion, packageName = '@telora/dae
44
81
  signal: controller.signal,
45
82
  headers: { Accept: 'application/json' },
46
83
  });
47
- if (!response.ok)
84
+ if (!response.ok) {
85
+ console.warn(`[auto-update] Version check failed: registry ${registryUrl} returned HTTP ${response.status} for ${packageName}`);
48
86
  return null;
87
+ }
49
88
  const data = (await response.json());
50
89
  const latestVersion = data['dist-tags']?.latest;
51
- if (!latestVersion)
90
+ if (!latestVersion) {
91
+ console.warn(`[auto-update] Version check inconclusive: no dist-tags.latest for ${packageName} at registry ${registryUrl}`);
52
92
  return null;
93
+ }
53
94
  return {
54
95
  latestVersion,
55
- updateAvailable: latestVersion !== currentVersion,
96
+ updateAvailable: isNewerVersion(latestVersion, currentVersion),
56
97
  };
57
98
  }
58
99
  finally {
59
100
  clearTimeout(timeout);
60
101
  }
61
102
  }
62
- catch {
63
- // Fail silent -- registry outage, network error, parse error, abort, etc.
103
+ catch (err) {
104
+ // Fail open -- registry outage, network error, parse error, abort, etc.
105
+ // Log so a dead update path produces a signal instead of looking identical
106
+ // to "already up to date".
107
+ console.warn(`[auto-update] Version check error against registry ${registryUrl}: ${err instanceof Error ? err.message : String(err)}`);
64
108
  return null;
65
109
  }
66
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAO9B;;;GAGG;AACH,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAEpD,CAAC;QACF,OAAO,GAAG,CAAC,aAAa,EAAE,QAAQ,IAAI,6BAA6B,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6BAA6B,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,cAAsB,EAAE,WAAW,GAAG,gBAAgB;IAC1F,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,cAAc,EAAE,CAAC;QACxE,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC;QACzE,iEAAiE;QACjE,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,WAAW,EAAE,CAAC;QAEpC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;aACxC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YAE9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;YACF,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAEhD,IAAI,CAAC,aAAa;gBAAE,OAAO,IAAI,CAAC;YAEhC,OAAO;gBACL,aAAa;gBACb,eAAe,EAAE,aAAa,KAAK,cAAc;aAClD,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/daemon",
3
- "version": "0.17.22",
3
+ "version": "0.17.28",
4
4
  "description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
5
5
  "type": "module",
6
6
  "bin": {