@telora/daemon 0.17.78 → 0.17.82
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/README.md +9 -5
- package/build-info.json +4 -3
- package/dist/auto-update.d.ts +8 -4
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +9 -5
- package/dist/auto-update.js.map +1 -1
- package/dist/cli/backfill-frt-prose.d.ts +34 -0
- package/dist/cli/backfill-frt-prose.d.ts.map +1 -1
- package/dist/cli/backfill-frt-prose.js +53 -4
- package/dist/cli/backfill-frt-prose.js.map +1 -1
- package/dist/cli/connect.d.ts +25 -15
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +76 -20
- package/dist/cli/connect.js.map +1 -1
- package/dist/index.js +14 -7
- package/dist/index.js.map +1 -1
- package/dist/loop-engine.d.ts.map +1 -1
- package/dist/loop-engine.js +12 -3
- package/dist/loop-engine.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +19 -1
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompts/starter-prompt.d.ts +1 -1
- package/dist/prompts/starter-prompt.d.ts.map +1 -1
- package/dist/prompts/starter-prompt.js +1 -1
- package/dist/queries/focuses.d.ts +39 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +87 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/index.d.ts +2 -2
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +1 -1
- package/dist/queries/index.js.map +1 -1
- package/dist/retire-aware-restatement.d.ts +26 -0
- package/dist/retire-aware-restatement.d.ts.map +1 -1
- package/dist/retire-aware-restatement.js +98 -17
- package/dist/retire-aware-restatement.js.map +1 -1
- package/dist/self-update.d.ts +21 -0
- package/dist/self-update.d.ts.map +1 -1
- package/dist/self-update.js +56 -4
- package/dist/self-update.js.map +1 -1
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +40 -1
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +11 -1
- package/dist/unified-shell.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ For long-running daemon hosts, install globally so `telora-daemon update` and th
|
|
|
21
21
|
npm install -g @telora/daemon
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
`npx
|
|
24
|
+
`npx` is supported only for one-shot bootstrap commands (`init`, `connect`, `check-update`). The long-running daemon (`run`/`start`) **refuses** to run from an npx cache and exits with the global-install instruction: the cache makes the running binary effectively immutable -- `npm install -g` writes to the global prefix while the process keeps loading the cached copy, so a daemon launched via npx could never self-update. Install on disk (`npm install -g @telora/daemon`) and start `telora-daemon run`. (The refusal is overridable for false positives via `TELORA_ALLOW_NPX_RUN=1`, but a non-updating daemon is not recommended.)
|
|
25
25
|
|
|
26
26
|
> **Note:** The `.mcp.json` file for Claude Code integration is auto-generated by `telora-daemon init`.
|
|
27
27
|
|
|
@@ -77,11 +77,15 @@ telora-daemon run
|
|
|
77
77
|
### Option 3: One-shot via npx
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
npx -p @telora/daemon telora-daemon init # interactive setup
|
|
81
|
-
|
|
80
|
+
npx -p @telora/daemon telora-daemon init # interactive setup (one-shot)
|
|
81
|
+
npm install -g @telora/daemon # then install on disk
|
|
82
|
+
telora-daemon run # start the daemon
|
|
82
83
|
```
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
npx is fine for the one-shot `init`, but the long-running daemon refuses to run
|
|
86
|
+
from an npx cache -- it can't update itself there. Install globally with
|
|
87
|
+
`npm install -g @telora/daemon` and start `telora-daemon run` for any host you
|
|
88
|
+
expect to leave running.
|
|
85
89
|
|
|
86
90
|
## Updating
|
|
87
91
|
|
|
@@ -92,7 +96,7 @@ telora-daemon update # stop, install latest, apply migrations, restart
|
|
|
92
96
|
|
|
93
97
|
When installed globally or from a git checkout, the daemon also self-updates on a periodic timer (configurable via `autoUpdate.intervalMs` in `.telora/daemon.json`, or disable with `--no-auto-update`).
|
|
94
98
|
|
|
95
|
-
|
|
99
|
+
The long-running daemon refuses to run from an npx cache, so there is no auto-updating npx mode. If you reach an npx-cache daemon via the `TELORA_ALLOW_NPX_RUN` override, `telora-daemon update` cannot restart it in place (the running process loads from a cache it just cleared); install on disk instead -- `npm install -g @telora/daemon`, then `telora-daemon run`.
|
|
96
100
|
|
|
97
101
|
## Configuration
|
|
98
102
|
|
package/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"commitSha": "
|
|
3
|
-
"builtAt": "2026-06-
|
|
2
|
+
"commitSha": "512919ac",
|
|
3
|
+
"builtAt": "2026-06-15T16:15:31.546Z",
|
|
4
4
|
"expectedMigrations": [
|
|
5
5
|
"20250829113330_create_org_nodes_table.sql",
|
|
6
6
|
"20250829113402_fix_function_security_search_path.sql",
|
|
@@ -633,6 +633,7 @@
|
|
|
633
633
|
"20260614222838_product_focuses_answer_rearm.sql",
|
|
634
634
|
"20260614231203_product_requests_reopen_audit.sql",
|
|
635
635
|
"20260615103408_add_frt_statement_drafted.sql",
|
|
636
|
-
"20260615105344_add_verify_classification.sql"
|
|
636
|
+
"20260615105344_add_verify_classification.sql",
|
|
637
|
+
"20260615132122_add_work_facing_to_org_nodes.sql"
|
|
637
638
|
]
|
|
638
639
|
}
|
package/dist/auto-update.d.ts
CHANGED
|
@@ -96,11 +96,15 @@ export declare function createUpdateController(deps: AutoUpdateDeps): UpdateCont
|
|
|
96
96
|
/**
|
|
97
97
|
* Start the safe-seam auto-update loop.
|
|
98
98
|
*
|
|
99
|
-
* Disabled entirely when running from an ephemeral npx cache: `npm install -g`
|
|
100
|
-
* writes to the global prefix, but the running process keeps loading from
|
|
101
|
-
* `~/.npm/_npx/<hash>/`, so a "successful" install would not take effect.
|
|
102
|
-
*
|
|
103
99
|
* Returns a cleanup function that stops the timer.
|
|
100
|
+
*
|
|
101
|
+
* NOTE: the npx-cache branch below is now a DEAD PATH for the normal run/start
|
|
102
|
+
* flow. The runtime refusal guard (`isNpxRunMode` in unified-shell.ts /
|
|
103
|
+
* index.ts) exits the process before any engine -- or this loop -- starts, so a
|
|
104
|
+
* daemon that reaches `startAutoUpdateLoop` is already on a stable on-disk
|
|
105
|
+
* install. The check is retained as cheap defense-in-depth (e.g. if the guard
|
|
106
|
+
* is overridden via TELORA_ALLOW_NPX_RUN, auto-update still correctly disables
|
|
107
|
+
* itself rather than spinning an install that can never take effect).
|
|
104
108
|
*/
|
|
105
109
|
export declare function startAutoUpdateLoop(opts: AutoUpdateOptions): () => void;
|
|
106
110
|
//# sourceMappingURL=auto-update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,sFAAsF;IACtF,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,mFAAmF;AACnF,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBvE;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CA4G7E;AAED
|
|
1
|
+
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,sFAAsF;IACtF,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,mFAAmF;AACnF,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBvE;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CA4G7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,IAAI,CA4BvE"}
|
package/dist/auto-update.js
CHANGED
|
@@ -147,16 +147,20 @@ export function createUpdateController(deps) {
|
|
|
147
147
|
/**
|
|
148
148
|
* Start the safe-seam auto-update loop.
|
|
149
149
|
*
|
|
150
|
-
* Disabled entirely when running from an ephemeral npx cache: `npm install -g`
|
|
151
|
-
* writes to the global prefix, but the running process keeps loading from
|
|
152
|
-
* `~/.npm/_npx/<hash>/`, so a "successful" install would not take effect.
|
|
153
|
-
*
|
|
154
150
|
* Returns a cleanup function that stops the timer.
|
|
151
|
+
*
|
|
152
|
+
* NOTE: the npx-cache branch below is now a DEAD PATH for the normal run/start
|
|
153
|
+
* flow. The runtime refusal guard (`isNpxRunMode` in unified-shell.ts /
|
|
154
|
+
* index.ts) exits the process before any engine -- or this loop -- starts, so a
|
|
155
|
+
* daemon that reaches `startAutoUpdateLoop` is already on a stable on-disk
|
|
156
|
+
* install. The check is retained as cheap defense-in-depth (e.g. if the guard
|
|
157
|
+
* is overridden via TELORA_ALLOW_NPX_RUN, auto-update still correctly disables
|
|
158
|
+
* itself rather than spinning an install that can never take effect).
|
|
155
159
|
*/
|
|
156
160
|
export function startAutoUpdateLoop(opts) {
|
|
157
161
|
const { intervalMs = DEFAULT_SAMPLE_INTERVAL_MS } = opts;
|
|
158
162
|
if (detectInstallMode() === 'npx') {
|
|
159
|
-
console.log('[auto-update] Disabled: running from npx cache.
|
|
163
|
+
console.log('[auto-update] Disabled: running from npx cache. Install globally with `npm install -g @telora/daemon` and start `telora-daemon run` to enable auto-update.');
|
|
160
164
|
return () => { };
|
|
161
165
|
}
|
|
162
166
|
let stopped = false;
|
package/dist/auto-update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,19 @@
|
|
|
28
28
|
* injection's flipped UDEs from durable `reality_tree_node_history` (the
|
|
29
29
|
* `targets` edges are deleted at verify) and authors any missing `frt_statement`.
|
|
30
30
|
*
|
|
31
|
+
* PROVENANCE-FREE HISTORICAL TAIL. Some flipped DEs pre-date instrumentation:
|
|
32
|
+
* they have NEITHER a `reality_tree_node_history` row NOR surviving `targets`
|
|
33
|
+
* edges, so the precise per-node history path above finds no provenance and
|
|
34
|
+
* drops them -- their `frt_statement` stays blank forever (present-tense UDE
|
|
35
|
+
* text in the Ship Log / FRT canvas). This command enables the helper's opt-in
|
|
36
|
+
* PROVENANCE-FREE FALLBACK (`includeProvenanceFreeFallback: true`) on BOTH the
|
|
37
|
+
* dry-run and write paths so those blank flipped DEs are also authored,
|
|
38
|
+
* conditioned on the TREE's verified/retired injection statements (the same
|
|
39
|
+
* list for every fallback node on the tree). The fallback is OFF by default
|
|
40
|
+
* everywhere else (the active eager loop + departed-focus catch-up never set
|
|
41
|
+
* it), so it can never interfere with going-forward per-injection authoring;
|
|
42
|
+
* the precise per-node history path still wins whenever provenance exists.
|
|
43
|
+
*
|
|
31
44
|
* Idempotent: the helper authors only nodes whose `frt_statement` is still blank
|
|
32
45
|
* and whose base statement is still the raw pre-flip UDE text. Re-runs are safe
|
|
33
46
|
* and converge to a no-op.
|
|
@@ -61,6 +74,27 @@
|
|
|
61
74
|
* that its node was in the resolved cascade (flipped or `resolved===true`) for
|
|
62
75
|
* that tree -- surviving UDEs are intentionally left untouched.
|
|
63
76
|
*
|
|
77
|
+
* PROVENANCE-FREE TAIL -- POST-DEPLOY OPERATOR VERIFICATION (NOT an automated
|
|
78
|
+
* check; the test suite cannot reach prod data). After this change deploys,
|
|
79
|
+
* an OPERATOR performs the following against PROD by hand:
|
|
80
|
+
*
|
|
81
|
+
* 1. Run `telora-daemon backfill-frt-prose --dry-run` against the prod config.
|
|
82
|
+
* With the provenance-free fallback now enabled, the dry-run should
|
|
83
|
+
* enumerate the historical-tail flipped DEs that the per-node history path
|
|
84
|
+
* previously skipped -- expect the count of blank cascade DEs across
|
|
85
|
+
* completed focuses (~66 at time of writing) to be the bulk of what is
|
|
86
|
+
* now reported as `[would author]`, trending toward 0 once authored.
|
|
87
|
+
* 2. Once the preview looks right, run the real write:
|
|
88
|
+
* `telora-daemon backfill-frt-prose`.
|
|
89
|
+
* 3. Spot-check ONE repaired completed focus: open its Ship Log AND its FRT
|
|
90
|
+
* canvas and confirm the previously present-tense flipped UDE entries now
|
|
91
|
+
* read as future-state desired-effect prose. Re-run `--dry-run` to confirm
|
|
92
|
+
* it converges to ~0 remaining candidates (idempotent no-op on re-run).
|
|
93
|
+
*
|
|
94
|
+
* This is a one-time post-deploy operator observation step, deliberately NOT
|
|
95
|
+
* wired into CI -- it depends on live prod completed-focus data that the local
|
|
96
|
+
* DB does not carry.
|
|
97
|
+
*
|
|
64
98
|
* @module cli/backfill-frt-prose
|
|
65
99
|
*/
|
|
66
100
|
import { loadConfig } from '../config.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-frt-prose.d.ts","sourceRoot":"","sources":["../../src/cli/backfill-frt-prose.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"backfill-frt-prose.d.ts","sourceRoot":"","sources":["../../src/cli/backfill-frt-prose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGG;AAEH,OAAO,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,YAAY,EAA6B,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,kCAAkC,IAAI,yCAAyC,EAC/E,yCAAyC,IAAI,gDAAgD,EAC9F,MAAM,gCAAgC,CAAC;AAYxC,MAAM,WAAW,0BAA0B;IACzC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,6FAA6F;IAC7F,kCAAkC,CAAC,EAAE,OAAO,yCAAyC,CAAC;IACtF,iGAAiG;IACjG,yCAAyC,CAAC,EAAE,OAAO,gDAAgD,CAAC;IACpG,iFAAiF;IACjF,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,2FAA2F;IAC3F,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IACnC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,gBAAgB,EAAE,KAAK,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAqBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,EAChC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,uBAAuB,CAAC,CAqJlC"}
|
|
@@ -28,6 +28,19 @@
|
|
|
28
28
|
* injection's flipped UDEs from durable `reality_tree_node_history` (the
|
|
29
29
|
* `targets` edges are deleted at verify) and authors any missing `frt_statement`.
|
|
30
30
|
*
|
|
31
|
+
* PROVENANCE-FREE HISTORICAL TAIL. Some flipped DEs pre-date instrumentation:
|
|
32
|
+
* they have NEITHER a `reality_tree_node_history` row NOR surviving `targets`
|
|
33
|
+
* edges, so the precise per-node history path above finds no provenance and
|
|
34
|
+
* drops them -- their `frt_statement` stays blank forever (present-tense UDE
|
|
35
|
+
* text in the Ship Log / FRT canvas). This command enables the helper's opt-in
|
|
36
|
+
* PROVENANCE-FREE FALLBACK (`includeProvenanceFreeFallback: true`) on BOTH the
|
|
37
|
+
* dry-run and write paths so those blank flipped DEs are also authored,
|
|
38
|
+
* conditioned on the TREE's verified/retired injection statements (the same
|
|
39
|
+
* list for every fallback node on the tree). The fallback is OFF by default
|
|
40
|
+
* everywhere else (the active eager loop + departed-focus catch-up never set
|
|
41
|
+
* it), so it can never interfere with going-forward per-injection authoring;
|
|
42
|
+
* the precise per-node history path still wins whenever provenance exists.
|
|
43
|
+
*
|
|
31
44
|
* Idempotent: the helper authors only nodes whose `frt_statement` is still blank
|
|
32
45
|
* and whose base statement is still the raw pre-flip UDE text. Re-runs are safe
|
|
33
46
|
* and converge to a no-op.
|
|
@@ -61,10 +74,32 @@
|
|
|
61
74
|
* that its node was in the resolved cascade (flipped or `resolved===true`) for
|
|
62
75
|
* that tree -- surviving UDEs are intentionally left untouched.
|
|
63
76
|
*
|
|
77
|
+
* PROVENANCE-FREE TAIL -- POST-DEPLOY OPERATOR VERIFICATION (NOT an automated
|
|
78
|
+
* check; the test suite cannot reach prod data). After this change deploys,
|
|
79
|
+
* an OPERATOR performs the following against PROD by hand:
|
|
80
|
+
*
|
|
81
|
+
* 1. Run `telora-daemon backfill-frt-prose --dry-run` against the prod config.
|
|
82
|
+
* With the provenance-free fallback now enabled, the dry-run should
|
|
83
|
+
* enumerate the historical-tail flipped DEs that the per-node history path
|
|
84
|
+
* previously skipped -- expect the count of blank cascade DEs across
|
|
85
|
+
* completed focuses (~66 at time of writing) to be the bulk of what is
|
|
86
|
+
* now reported as `[would author]`, trending toward 0 once authored.
|
|
87
|
+
* 2. Once the preview looks right, run the real write:
|
|
88
|
+
* `telora-daemon backfill-frt-prose`.
|
|
89
|
+
* 3. Spot-check ONE repaired completed focus: open its Ship Log AND its FRT
|
|
90
|
+
* canvas and confirm the previously present-tense flipped UDE entries now
|
|
91
|
+
* read as future-state desired-effect prose. Re-run `--dry-run` to confirm
|
|
92
|
+
* it converges to ~0 remaining candidates (idempotent no-op on re-run).
|
|
93
|
+
*
|
|
94
|
+
* This is a one-time post-deploy operator observation step, deliberately NOT
|
|
95
|
+
* wired into CI -- it depends on live prod completed-focus data that the local
|
|
96
|
+
* DB does not carry.
|
|
97
|
+
*
|
|
64
98
|
* @module cli/backfill-frt-prose
|
|
65
99
|
*/
|
|
66
100
|
import { loadConfig, configForProduct } from '../config.js';
|
|
67
101
|
import { initSupabase, callApi as defaultCallApi } from '../queries/shared.js';
|
|
102
|
+
import { scanAllFocuses } from '../queries/focuses.js';
|
|
68
103
|
import { authorRetiredInjectionRestatements as defaultAuthorRetiredInjectionRestatements, findRetiredInjectionRestatementCandidates as defaultFindRetiredInjectionRestatementCandidates, } from '../retire-aware-restatement.js';
|
|
69
104
|
/**
|
|
70
105
|
* Resolve the set of products to scan: the single `--product` when given (must
|
|
@@ -126,11 +161,19 @@ export async function runBackfillFrtProse(opts, deps = {}) {
|
|
|
126
161
|
initApi(pc);
|
|
127
162
|
let focuses;
|
|
128
163
|
try {
|
|
129
|
-
|
|
164
|
+
// Page through ALL completed focuses -- a single unpaged call truncates at
|
|
165
|
+
// the focus_list default limit (50), which is the defect this backfill
|
|
166
|
+
// fixes (most verified-injection trees live past the first page).
|
|
167
|
+
const scan = await scanAllFocuses({
|
|
130
168
|
productId: product.id,
|
|
131
169
|
status: 'complete',
|
|
170
|
+
callApi,
|
|
132
171
|
});
|
|
133
|
-
focuses =
|
|
172
|
+
focuses = scan.focuses;
|
|
173
|
+
if (scan.hasMore) {
|
|
174
|
+
out(` [warn] focus_list scan for product ${product.id} hit the page cap ` +
|
|
175
|
+
`(${focuses.length} of ${scan.total}); some completed focuses may be unscanned.\n`);
|
|
176
|
+
}
|
|
134
177
|
}
|
|
135
178
|
catch (err) {
|
|
136
179
|
out(` [skip] focus_list failed for product ${product.id}: ${err.message}\n`);
|
|
@@ -158,7 +201,10 @@ export async function runBackfillFrtProse(opts, deps = {}) {
|
|
|
158
201
|
// writes.
|
|
159
202
|
let candidates;
|
|
160
203
|
try {
|
|
161
|
-
candidates = await findCandidates(tree.id, {
|
|
204
|
+
candidates = await findCandidates(tree.id, {
|
|
205
|
+
callApi,
|
|
206
|
+
includeProvenanceFreeFallback: true,
|
|
207
|
+
});
|
|
162
208
|
}
|
|
163
209
|
catch (err) {
|
|
164
210
|
out(` [skip] candidate scan failed for tree ${tree.id}: ${err.message}\n`);
|
|
@@ -182,7 +228,10 @@ export async function runBackfillFrtProse(opts, deps = {}) {
|
|
|
182
228
|
}
|
|
183
229
|
// WRITE: idempotent, best-effort per node inside the retire-aware helper.
|
|
184
230
|
try {
|
|
185
|
-
const res = await authorRetired(tree.id, {
|
|
231
|
+
const res = await authorRetired(tree.id, {
|
|
232
|
+
callApi,
|
|
233
|
+
includeProvenanceFreeFallback: true,
|
|
234
|
+
});
|
|
186
235
|
if (res.authored.length + res.skipped.length > 0)
|
|
187
236
|
summary.treesWithCandidates += 1;
|
|
188
237
|
summary.authored += res.authored.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-frt-prose.js","sourceRoot":"","sources":["../../src/cli/backfill-frt-prose.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"backfill-frt-prose.js","sourceRoot":"","sources":["../../src/cli/backfill-frt-prose.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/connect.d.ts
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
* `telora-daemon connect <token>` subcommand.
|
|
3
3
|
*
|
|
4
4
|
* Redeems a Telora connect token, writes the daemon config + a committable
|
|
5
|
-
* `.mcp.json`, then starts the daemon in the background
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* `.mcp.json`, then starts the daemon in the background from a stable on-disk
|
|
6
|
+
* install (a global `telora-daemon`, installed best-effort if absent). It does
|
|
7
|
+
* NOT route the long-running daemon through `npx` -- an npx-cache daemon cannot
|
|
8
|
+
* self-update. Designed to be invoked at the tail end of the bash bootstrap
|
|
9
|
+
* (`scripts/connect.sh`) so the user lands in `claude` with everything wired.
|
|
10
|
+
* A global install leaves no node-side footprint (no package.json, no
|
|
11
|
+
* node_modules, no dev dependency) in the user's repo, so Rust/Python/Go/empty
|
|
12
|
+
* repos stay untouched.
|
|
11
13
|
*/
|
|
12
14
|
import { type AgentsMdConnectionInvariant } from '../templates/agents-md.js';
|
|
13
15
|
import { type CodexLocalCoords } from './codex-provision.js';
|
|
@@ -160,20 +162,28 @@ export declare function writeStarterPromptArtifacts(repoPath: string, io: Connec
|
|
|
160
162
|
*/
|
|
161
163
|
export declare function ensureGitignoreEntries(repoPath: string, io: ConnectIO): void;
|
|
162
164
|
/**
|
|
163
|
-
*
|
|
165
|
+
* Start the daemon as a detached background process from a stable on-disk
|
|
166
|
+
* install -- never from an ephemeral npx cache (which cannot self-update).
|
|
164
167
|
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
168
|
+
* Resolution order:
|
|
169
|
+
* 1. Use an existing on-disk binary (global install on PATH, or a repo-local
|
|
170
|
+
* `node_modules/.bin/telora-daemon` dev dependency).
|
|
171
|
+
* 2. If none exists, run `npm install -g @telora/daemon` best-effort. Global
|
|
172
|
+
* install keeps the connect flow language-agnostic -- it leaves no
|
|
173
|
+
* `package.json`/`node_modules`/dev-dependency footprint in the user's
|
|
174
|
+
* repo (Rust/Python/Go/empty repos stay untouched).
|
|
175
|
+
* 3. Spawn the resolved on-disk `telora-daemon run`.
|
|
176
|
+
*
|
|
177
|
+
* On install failure this throws (the caller surfaces the manual
|
|
178
|
+
* `npm install -g @telora/daemon` instruction and skips auto-start); it does
|
|
179
|
+
* NOT fall back to npx, because an npx-run daemon is exactly what this focus
|
|
180
|
+
* retires.
|
|
170
181
|
*
|
|
171
182
|
* Bin name is explicit (`telora-daemon`) because the package's bins are
|
|
172
183
|
* `telora-daemon` and `telora-daemon-wrapper`; neither matches the unscoped
|
|
173
|
-
* package name `daemon
|
|
174
|
-
* aborts with a misleading error (lesson from commit 0368f4b6).
|
|
184
|
+
* package name `daemon`.
|
|
175
185
|
*/
|
|
176
|
-
export declare function
|
|
186
|
+
export declare function startDaemonOnDisk(repoPath: string): number;
|
|
177
187
|
/**
|
|
178
188
|
* Look up an existing product entry in `~/.telora/daemon.json` whose
|
|
179
189
|
* repoPath matches the given path. Returns the product id when found,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAyBH,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,2BAA2B,CAAC;AAKnC,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,4DAA4D;IAC5D,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,GAAG,IAAI,CAS9E;AAED,MAAM,WAAW,SAAS;IACxB,wDAAwD;IACxD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,wDAAwD;IACxD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,2DAA2D;IAC3D,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjD,eAAO,MAAM,wBAAwB,EAAE,eAA0B,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,gDAAgD;IAChD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mCAAmC;IACnC,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yEAAyE;IACzE,iBAAiB,EAAE,OAAO,CAAC;IAC3B;kEAC8D;IAC9D,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAuB/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAUD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,SAAS,CAAC;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CA4CT;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,SAAS,GACZ,MAAM,GAAG,IAAI,CAsBf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAiB5E;AAiCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA+B1D;AAiCD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,EAAE,EAAE,SAAS,GACZ,IAAI,CAiDN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,2BAA2B,EAChC,EAAE,EAAE,SAAS,GACZ,IAAI,CA0CN;AAQD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAaT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACxE,IAAI,CA8DN;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CA0BhF;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAQ9C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,SAAS,CAAC;CACf,GAAG,OAAO,CA0BV;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,SAAS,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAwET;AAWD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAY1E;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAmO7E"}
|
package/dist/cli/connect.js
CHANGED
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
* `telora-daemon connect <token>` subcommand.
|
|
3
3
|
*
|
|
4
4
|
* Redeems a Telora connect token, writes the daemon config + a committable
|
|
5
|
-
* `.mcp.json`, then starts the daemon in the background
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* `.mcp.json`, then starts the daemon in the background from a stable on-disk
|
|
6
|
+
* install (a global `telora-daemon`, installed best-effort if absent). It does
|
|
7
|
+
* NOT route the long-running daemon through `npx` -- an npx-cache daemon cannot
|
|
8
|
+
* self-update. Designed to be invoked at the tail end of the bash bootstrap
|
|
9
|
+
* (`scripts/connect.sh`) so the user lands in `claude` with everything wired.
|
|
10
|
+
* A global install leaves no node-side footprint (no package.json, no
|
|
11
|
+
* node_modules, no dev dependency) in the user's repo, so Rust/Python/Go/empty
|
|
12
|
+
* repos stay untouched.
|
|
11
13
|
*/
|
|
12
14
|
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, writeFileSync, } from 'node:fs';
|
|
13
|
-
import { spawn, spawnSync } from 'node:child_process';
|
|
15
|
+
import { spawn, spawnSync, execFileSync } from 'node:child_process';
|
|
14
16
|
import { resolve, delimiter } from 'node:path';
|
|
15
17
|
import { homedir } from 'node:os';
|
|
16
18
|
import { isLegacyMcpConfigShape, resolveMcpServerPath, writeMcpConfigFile, } from '../mcp-resolution.js';
|
|
@@ -192,25 +194,76 @@ export function ensureGitignoreEntries(repoPath, io) {
|
|
|
192
194
|
io.out(`Created ${gitignorePath}.\n`);
|
|
193
195
|
}
|
|
194
196
|
/**
|
|
195
|
-
*
|
|
197
|
+
* Resolve an existing on-disk `telora-daemon` binary.
|
|
196
198
|
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
199
|
+
* Checks, in order:
|
|
200
|
+
* 1. A global install on PATH (`which telora-daemon`) -- the canonical
|
|
201
|
+
* long-running install.
|
|
202
|
+
* 2. A repo-local `node_modules/.bin/telora-daemon` dev dependency.
|
|
203
|
+
*
|
|
204
|
+
* Returns the absolute path to the binary, or null when none is on disk.
|
|
205
|
+
* Deliberately does NOT resolve an npx-cache binary: a daemon launched from
|
|
206
|
+
* `~/.npm/_npx/<hash>/` cannot self-update (the running process keeps loading
|
|
207
|
+
* from the cache while `npm install -g` writes the global prefix), so the
|
|
208
|
+
* long-running daemon must run from a stable on-disk install.
|
|
209
|
+
*/
|
|
210
|
+
function resolveOnDiskDaemonBinary(repoPath) {
|
|
211
|
+
try {
|
|
212
|
+
const resolved = execFileSync('which', ['telora-daemon'], {
|
|
213
|
+
encoding: 'utf-8',
|
|
214
|
+
timeout: 5_000,
|
|
215
|
+
}).trim();
|
|
216
|
+
if (resolved && existsSync(resolved))
|
|
217
|
+
return resolved;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Not on PATH -- fall through to the repo-local dev dependency.
|
|
221
|
+
}
|
|
222
|
+
const localBin = resolve(repoPath, 'node_modules', '.bin', 'telora-daemon');
|
|
223
|
+
if (existsSync(localBin))
|
|
224
|
+
return localBin;
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Start the daemon as a detached background process from a stable on-disk
|
|
229
|
+
* install -- never from an ephemeral npx cache (which cannot self-update).
|
|
230
|
+
*
|
|
231
|
+
* Resolution order:
|
|
232
|
+
* 1. Use an existing on-disk binary (global install on PATH, or a repo-local
|
|
233
|
+
* `node_modules/.bin/telora-daemon` dev dependency).
|
|
234
|
+
* 2. If none exists, run `npm install -g @telora/daemon` best-effort. Global
|
|
235
|
+
* install keeps the connect flow language-agnostic -- it leaves no
|
|
236
|
+
* `package.json`/`node_modules`/dev-dependency footprint in the user's
|
|
237
|
+
* repo (Rust/Python/Go/empty repos stay untouched).
|
|
238
|
+
* 3. Spawn the resolved on-disk `telora-daemon run`.
|
|
239
|
+
*
|
|
240
|
+
* On install failure this throws (the caller surfaces the manual
|
|
241
|
+
* `npm install -g @telora/daemon` instruction and skips auto-start); it does
|
|
242
|
+
* NOT fall back to npx, because an npx-run daemon is exactly what this focus
|
|
243
|
+
* retires.
|
|
202
244
|
*
|
|
203
245
|
* Bin name is explicit (`telora-daemon`) because the package's bins are
|
|
204
246
|
* `telora-daemon` and `telora-daemon-wrapper`; neither matches the unscoped
|
|
205
|
-
* package name `daemon
|
|
206
|
-
* aborts with a misleading error (lesson from commit 0368f4b6).
|
|
247
|
+
* package name `daemon`.
|
|
207
248
|
*/
|
|
208
|
-
export function
|
|
249
|
+
export function startDaemonOnDisk(repoPath) {
|
|
250
|
+
let binary = resolveOnDiskDaemonBinary(repoPath);
|
|
251
|
+
if (!binary) {
|
|
252
|
+
// No on-disk install -- install globally (no repo footprint), best-effort.
|
|
253
|
+
execFileSync('npm', ['install', '-g', '@telora/daemon'], {
|
|
254
|
+
stdio: 'inherit',
|
|
255
|
+
timeout: 120_000,
|
|
256
|
+
});
|
|
257
|
+
binary = resolveOnDiskDaemonBinary(repoPath);
|
|
258
|
+
if (!binary) {
|
|
259
|
+
throw new Error('telora-daemon is not on disk after `npm install -g @telora/daemon`.');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
209
262
|
ensureGlobalStateDir();
|
|
210
263
|
const logPath = resolveDaemonLogPath();
|
|
211
264
|
const logFd = openSync(logPath, 'a', 0o600);
|
|
212
265
|
try {
|
|
213
|
-
const child = spawn(
|
|
266
|
+
const child = spawn(binary, ['run'], {
|
|
214
267
|
detached: true,
|
|
215
268
|
stdio: ['ignore', logFd, logFd],
|
|
216
269
|
cwd: repoPath,
|
|
@@ -838,16 +891,19 @@ export async function runConnect(opts) {
|
|
|
838
891
|
` telora-ai config tracker_id ${trackerId}\n` +
|
|
839
892
|
` telora-ai setup-hooks\n`);
|
|
840
893
|
}
|
|
841
|
-
// -- Start daemon in background
|
|
894
|
+
// -- Start daemon in background from a stable on-disk install -------------
|
|
842
895
|
let daemonPid = null;
|
|
843
896
|
if (!opts.skipDaemonStart) {
|
|
844
897
|
try {
|
|
845
|
-
daemonPid =
|
|
898
|
+
daemonPid = startDaemonOnDisk(repoPath);
|
|
846
899
|
io.out(`Daemon started (PID ${daemonPid}). Logs: telora-daemon logs --follow\n`);
|
|
847
900
|
}
|
|
848
901
|
catch (err) {
|
|
902
|
+
// On-disk install/start failed. Do NOT fall back to npx (an npx-run
|
|
903
|
+
// daemon cannot self-update). Connect still completes; the user starts
|
|
904
|
+
// the daemon manually after a global install.
|
|
849
905
|
io.err(`Warning: could not start daemon in background: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
850
|
-
io.err('Run `
|
|
906
|
+
io.err('Run `telora-daemon run` manually (install with `npm install -g @telora/daemon` if needed).\n');
|
|
851
907
|
}
|
|
852
908
|
}
|
|
853
909
|
// -- Security-hardening pointer (least-privilege service user) ----------
|