@telora/daemon 0.17.25 → 0.17.31
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 +2 -2
- package/dist/cascade-restatement.d.ts +122 -0
- package/dist/cascade-restatement.d.ts.map +1 -0
- package/dist/cascade-restatement.js +271 -0
- package/dist/cascade-restatement.js.map +1 -0
- package/dist/cli/session-state.d.ts +5 -3
- package/dist/cli/session-state.d.ts.map +1 -1
- package/dist/cli/session-state.js +4 -2
- package/dist/cli/session-state.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +42 -0
- package/dist/focus-engine.js.map +1 -1
- package/dist/negative-branch.d.ts +105 -0
- package/dist/negative-branch.d.ts.map +1 -0
- package/dist/negative-branch.js +192 -0
- package/dist/negative-branch.js.map +1 -0
- package/dist/realign-apply.d.ts.map +1 -1
- package/dist/realign-apply.js +28 -2
- package/dist/realign-apply.js.map +1 -1
- package/dist/version-check.d.ts +13 -3
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +65 -21
- package/dist/version-check.js.map +1 -1
- package/package.json +1 -1
package/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"commitSha": "
|
|
3
|
-
"builtAt": "2026-06-
|
|
2
|
+
"commitSha": "adcfd672",
|
|
3
|
+
"builtAt": "2026-06-09T01:42:53.967Z",
|
|
4
4
|
"expectedMigrations": [
|
|
5
5
|
"20250829113330_create_org_nodes_table.sql",
|
|
6
6
|
"20250829113402_fix_function_security_search_path.sql",
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eager FRT-cascade desired-effect restatement authoring.
|
|
3
|
+
*
|
|
4
|
+
* When an injection flips a UDE, the derived-FRT engine marks not just the
|
|
5
|
+
* directly-targeted UDE as resolved but the FULL downstream consequence
|
|
6
|
+
* cascade (every UDE the flip propagates through). Today the verify-time path
|
|
7
|
+
* (`verify-restatement.ts`) only authors prose for the directly-targeted
|
|
8
|
+
* nodes, and only at verify -- so flipped downstream consequences keep reading
|
|
9
|
+
* as present-tense problems until (and unless) they are themselves a verify
|
|
10
|
+
* target.
|
|
11
|
+
*
|
|
12
|
+
* This module closes that gap. It authors future-state desired-effect prose
|
|
13
|
+
* (`frt_statement`) EAGERLY across the whole resolved cascade -- the targeted
|
|
14
|
+
* UDE plus every downstream resolved consequence -- in future tense, while the
|
|
15
|
+
* CRT base statement stays untouched until verify. It is the "daemon
|
|
16
|
+
* reconciliation backstop" the targetInjection edge comment promises.
|
|
17
|
+
*
|
|
18
|
+
* Reuses the de-restatement prose helper (`authorRestatement`) -- it does NOT
|
|
19
|
+
* duplicate the prompt/model logic -- and the server-side derive-FRT action
|
|
20
|
+
* (`reality_tree_derive_frt`, Delivery A) which returns the engine's derived
|
|
21
|
+
* cascade. Overlay-only: only `frt_statement` is written; node_type and the
|
|
22
|
+
* base statement are left untouched.
|
|
23
|
+
*
|
|
24
|
+
* Idempotent at the prose level: a cascade node that already carries a
|
|
25
|
+
* positive `frt_statement` is skipped (`needsRestatement` is false), so the
|
|
26
|
+
* per-tick scan does not churn already-authored trees.
|
|
27
|
+
*
|
|
28
|
+
* @module cascade-restatement
|
|
29
|
+
*/
|
|
30
|
+
import { type RestatementInputs, type RestatementOptions } from './de-restatement.js';
|
|
31
|
+
import { proposeNegativeBranchesForInjection as defaultProposeNegativeBranches, type ProposeNegativeBranchesDeps, type ProposeNegativeBranchesResult } from './negative-branch.js';
|
|
32
|
+
import { getActiveFocuses } from './queries/deliveries.js';
|
|
33
|
+
import type { DaemonConfig } from './types.js';
|
|
34
|
+
export type CallApiFn = <T>(action: string, params?: Record<string, unknown>) => Promise<T>;
|
|
35
|
+
export type AuthorRestatementFn = (inputs: RestatementInputs, opts?: RestatementOptions) => Promise<string>;
|
|
36
|
+
/** One FRT-visible node as returned by the derive-FRT action (Delivery A). */
|
|
37
|
+
export interface DerivedFrtNode {
|
|
38
|
+
id: string;
|
|
39
|
+
seq: number;
|
|
40
|
+
derivedNodeType: 'entity' | 'undesired_effect' | 'desired_effect' | 'injection';
|
|
41
|
+
resolved: boolean;
|
|
42
|
+
statement: string;
|
|
43
|
+
frtStatement: string | null;
|
|
44
|
+
}
|
|
45
|
+
/** Shape of the `reality_tree_derive_frt` server action response (Delivery A). */
|
|
46
|
+
export interface DeriveFrtResponse {
|
|
47
|
+
treeId: string;
|
|
48
|
+
clearedNodeIds: string[];
|
|
49
|
+
flippedNodeIds: string[];
|
|
50
|
+
nodes: DerivedFrtNode[];
|
|
51
|
+
}
|
|
52
|
+
export interface AuthorCascadeRestatementsDeps {
|
|
53
|
+
callApi?: CallApiFn;
|
|
54
|
+
authorRestatement?: AuthorRestatementFn;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Author injection-conditioned desired-effect prose across the FULL resolved
|
|
58
|
+
* cascade of a tree (the targeted UDE plus every downstream resolved
|
|
59
|
+
* consequence), eagerly.
|
|
60
|
+
*
|
|
61
|
+
* For each flipped/resolved node that still needs prose, authors one positive
|
|
62
|
+
* future-state sentence conditioned on the tree's active injection statements,
|
|
63
|
+
* then writes it to `frt_statement` via `reality_tree_node_update` (which
|
|
64
|
+
* leaves node_type and the base statement untouched).
|
|
65
|
+
*
|
|
66
|
+
* Best-effort per node: a per-node author-or-write failure is swallowed (that
|
|
67
|
+
* node is recorded as skipped) so one failure never aborts the cascade.
|
|
68
|
+
*
|
|
69
|
+
* Idempotent: a node whose `frt_statement` is already a positive sentence is
|
|
70
|
+
* skipped, not re-authored.
|
|
71
|
+
*/
|
|
72
|
+
export declare function authorCascadeRestatements(treeId: string, deps?: AuthorCascadeRestatementsDeps): Promise<{
|
|
73
|
+
authored: string[];
|
|
74
|
+
skipped: string[];
|
|
75
|
+
}>;
|
|
76
|
+
export interface RunCascadeProseTickDeps {
|
|
77
|
+
callApi?: CallApiFn;
|
|
78
|
+
authorRestatement?: AuthorRestatementFn;
|
|
79
|
+
/** Enumerate active focuses for a product. Defaults to the live query. */
|
|
80
|
+
getActiveFocuses?: typeof getActiveFocuses;
|
|
81
|
+
/** Author cascade prose for one tree. Defaults to authorCascadeRestatements. */
|
|
82
|
+
authorCascadeRestatements?: typeof authorCascadeRestatements;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Eager reconciliation tick. For every product -> active focus -> active
|
|
86
|
+
* reality tree that carries at least one applied injection, runs
|
|
87
|
+
* authorCascadeRestatements so flipped cascade nodes get future-state prose
|
|
88
|
+
* without waiting for verify.
|
|
89
|
+
*
|
|
90
|
+
* Trees with no applied (derivedNodeType==='injection') injection are skipped
|
|
91
|
+
* cheaply -- there is nothing flipped to restate. Idempotency in
|
|
92
|
+
* authorCascadeRestatements prevents churn on already-authored trees.
|
|
93
|
+
*/
|
|
94
|
+
export declare function runCascadeProseTick(config: DaemonConfig, deps?: RunCascadeProseTickDeps): Promise<{
|
|
95
|
+
treesScanned: number;
|
|
96
|
+
authored: number;
|
|
97
|
+
}>;
|
|
98
|
+
export interface RunNegativeBranchTickDeps {
|
|
99
|
+
callApi?: CallApiFn;
|
|
100
|
+
/** Enumerate active focuses for a product. Defaults to the live query. */
|
|
101
|
+
getActiveFocuses?: typeof getActiveFocuses;
|
|
102
|
+
/** Propose NB candidates for one injection. Defaults to proposeNegativeBranchesForInjection. */
|
|
103
|
+
proposeNegativeBranches?: (inputs: Parameters<typeof defaultProposeNegativeBranches>[0], deps?: ProposeNegativeBranchesDeps) => Promise<ProposeNegativeBranchesResult>;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Background tick that proposes negative-branch reservations for every applied
|
|
107
|
+
* injection that has not yet had candidates generated.
|
|
108
|
+
*
|
|
109
|
+
* Idempotency: an injection is skipped when any non-dismissed `add_node`
|
|
110
|
+
* proposal with `proposedMetadata.isNegativeBranch === true` and
|
|
111
|
+
* `proposedMetadata.sourceInjectionId === injectionId` already exists for the
|
|
112
|
+
* tree. This prevents re-generating on re-ticks and leaves dismissed proposals
|
|
113
|
+
* behind (the user cleared the concern; don't re-surface it).
|
|
114
|
+
*
|
|
115
|
+
* Shares the `TELORA_FRT_PROSE_LOOP` opt-out signal with the prose tick --
|
|
116
|
+
* both are FRT-overlay authoring concerns driven by the same guard.
|
|
117
|
+
*/
|
|
118
|
+
export declare function runNegativeBranchTick(config: DaemonConfig, deps?: RunNegativeBranchTickDeps): Promise<{
|
|
119
|
+
treesScanned: number;
|
|
120
|
+
proposed: number;
|
|
121
|
+
}>;
|
|
122
|
+
//# sourceMappingURL=cascade-restatement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-restatement.d.ts","sourceRoot":"","sources":["../src/cascade-restatement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mCAAmC,IAAI,8BAA8B,EACrE,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EACnC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAE5F,MAAM,MAAM,mBAAmB,GAAG,CAChC,MAAM,EAAE,iBAAiB,EACzB,IAAI,CAAC,EAAE,kBAAkB,KACtB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,QAAQ,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,CAAC;IAChF,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;CACzC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,6BAAkC,GACvC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6CpD;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;IACxC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,gFAAgF;IAChF,yBAAyB,CAAC,EAAE,OAAO,yBAAyB,CAAC;CAC9D;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAwErD;AAYD,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,gGAAgG;IAChG,uBAAuB,CAAC,EAAE,CACxB,MAAM,EAAE,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAC5D,IAAI,CAAC,EAAE,2BAA2B,KAC/B,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAC7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,IAAI,GAAE,yBAA8B,GACnC,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA6HrD"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eager FRT-cascade desired-effect restatement authoring.
|
|
3
|
+
*
|
|
4
|
+
* When an injection flips a UDE, the derived-FRT engine marks not just the
|
|
5
|
+
* directly-targeted UDE as resolved but the FULL downstream consequence
|
|
6
|
+
* cascade (every UDE the flip propagates through). Today the verify-time path
|
|
7
|
+
* (`verify-restatement.ts`) only authors prose for the directly-targeted
|
|
8
|
+
* nodes, and only at verify -- so flipped downstream consequences keep reading
|
|
9
|
+
* as present-tense problems until (and unless) they are themselves a verify
|
|
10
|
+
* target.
|
|
11
|
+
*
|
|
12
|
+
* This module closes that gap. It authors future-state desired-effect prose
|
|
13
|
+
* (`frt_statement`) EAGERLY across the whole resolved cascade -- the targeted
|
|
14
|
+
* UDE plus every downstream resolved consequence -- in future tense, while the
|
|
15
|
+
* CRT base statement stays untouched until verify. It is the "daemon
|
|
16
|
+
* reconciliation backstop" the targetInjection edge comment promises.
|
|
17
|
+
*
|
|
18
|
+
* Reuses the de-restatement prose helper (`authorRestatement`) -- it does NOT
|
|
19
|
+
* duplicate the prompt/model logic -- and the server-side derive-FRT action
|
|
20
|
+
* (`reality_tree_derive_frt`, Delivery A) which returns the engine's derived
|
|
21
|
+
* cascade. Overlay-only: only `frt_statement` is written; node_type and the
|
|
22
|
+
* base statement are left untouched.
|
|
23
|
+
*
|
|
24
|
+
* Idempotent at the prose level: a cascade node that already carries a
|
|
25
|
+
* positive `frt_statement` is skipped (`needsRestatement` is false), so the
|
|
26
|
+
* per-tick scan does not churn already-authored trees.
|
|
27
|
+
*
|
|
28
|
+
* @module cascade-restatement
|
|
29
|
+
*/
|
|
30
|
+
import { callApi as defaultCallApi } from './queries/shared.js';
|
|
31
|
+
import { authorRestatement as defaultAuthorRestatement, needsRestatement, } from './de-restatement.js';
|
|
32
|
+
import { proposeNegativeBranchesForInjection as defaultProposeNegativeBranches, } from './negative-branch.js';
|
|
33
|
+
import { configForProduct } from './config.js';
|
|
34
|
+
import { getActiveFocuses } from './queries/deliveries.js';
|
|
35
|
+
/**
|
|
36
|
+
* Author injection-conditioned desired-effect prose across the FULL resolved
|
|
37
|
+
* cascade of a tree (the targeted UDE plus every downstream resolved
|
|
38
|
+
* consequence), eagerly.
|
|
39
|
+
*
|
|
40
|
+
* For each flipped/resolved node that still needs prose, authors one positive
|
|
41
|
+
* future-state sentence conditioned on the tree's active injection statements,
|
|
42
|
+
* then writes it to `frt_statement` via `reality_tree_node_update` (which
|
|
43
|
+
* leaves node_type and the base statement untouched).
|
|
44
|
+
*
|
|
45
|
+
* Best-effort per node: a per-node author-or-write failure is swallowed (that
|
|
46
|
+
* node is recorded as skipped) so one failure never aborts the cascade.
|
|
47
|
+
*
|
|
48
|
+
* Idempotent: a node whose `frt_statement` is already a positive sentence is
|
|
49
|
+
* skipped, not re-authored.
|
|
50
|
+
*/
|
|
51
|
+
export async function authorCascadeRestatements(treeId, deps = {}) {
|
|
52
|
+
const callApi = deps.callApi ?? defaultCallApi;
|
|
53
|
+
const author = deps.authorRestatement ?? defaultAuthorRestatement;
|
|
54
|
+
const authored = [];
|
|
55
|
+
const skipped = [];
|
|
56
|
+
const derived = await callApi('reality_tree_derive_frt', { treeId });
|
|
57
|
+
const nodes = derived.nodes ?? [];
|
|
58
|
+
// Active (applied) injection statements condition the prose so each UDE
|
|
59
|
+
// becomes the positive state it reaches GIVEN those injections.
|
|
60
|
+
const injectionStatements = nodes
|
|
61
|
+
.filter((n) => n.derivedNodeType === 'injection' && n.statement && n.statement.trim() !== '')
|
|
62
|
+
.map((n) => n.statement);
|
|
63
|
+
// The resolved cascade: the engine's flipped set, plus any node it derives
|
|
64
|
+
// as resolved (defensive union -- they should coincide).
|
|
65
|
+
const flippedIds = new Set(derived.flippedNodeIds ?? []);
|
|
66
|
+
const cascade = nodes.filter((n) => flippedIds.has(n.id) || n.resolved === true);
|
|
67
|
+
for (const node of cascade) {
|
|
68
|
+
// Idempotent: prose already authored -> skip, never re-author.
|
|
69
|
+
if (!needsRestatement(node.frtStatement)) {
|
|
70
|
+
skipped.push(node.id);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const text = await author({
|
|
75
|
+
udeStatement: node.statement,
|
|
76
|
+
injectionStatements: injectionStatements.length > 0 ? injectionStatements : undefined,
|
|
77
|
+
});
|
|
78
|
+
if (!text || text.trim() === '') {
|
|
79
|
+
skipped.push(node.id);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
await callApi('reality_tree_node_update', { nodeId: node.id, frtStatement: text.trim() });
|
|
83
|
+
authored.push(node.id);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// best-effort: skip this node, keep going.
|
|
87
|
+
skipped.push(node.id);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { authored, skipped };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Eager reconciliation tick. For every product -> active focus -> active
|
|
94
|
+
* reality tree that carries at least one applied injection, runs
|
|
95
|
+
* authorCascadeRestatements so flipped cascade nodes get future-state prose
|
|
96
|
+
* without waiting for verify.
|
|
97
|
+
*
|
|
98
|
+
* Trees with no applied (derivedNodeType==='injection') injection are skipped
|
|
99
|
+
* cheaply -- there is nothing flipped to restate. Idempotency in
|
|
100
|
+
* authorCascadeRestatements prevents churn on already-authored trees.
|
|
101
|
+
*/
|
|
102
|
+
export async function runCascadeProseTick(config, deps = {}) {
|
|
103
|
+
const callApi = deps.callApi ?? defaultCallApi;
|
|
104
|
+
const listFocuses = deps.getActiveFocuses ?? getActiveFocuses;
|
|
105
|
+
const authorCascade = deps.authorCascadeRestatements ?? authorCascadeRestatements;
|
|
106
|
+
let treesScanned = 0;
|
|
107
|
+
let authored = 0;
|
|
108
|
+
for (const product of config.products) {
|
|
109
|
+
const pc = configForProduct(config, product);
|
|
110
|
+
let focuses;
|
|
111
|
+
try {
|
|
112
|
+
focuses = await listFocuses(pc.organizationId, product.id);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
console.warn(`[frt-prose] getActiveFocuses failed for product ${product.id}:`, err.message);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
for (const focus of focuses) {
|
|
119
|
+
let trees;
|
|
120
|
+
try {
|
|
121
|
+
const resp = await callApi('reality_tree_list', {
|
|
122
|
+
focusId: focus.focus_id,
|
|
123
|
+
});
|
|
124
|
+
trees = (resp.items ?? []).filter((t) => t.status === 'active');
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.warn(`[frt-prose] reality_tree_list failed for focus ${focus.focus_id}:`, err.message);
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
for (const tree of trees) {
|
|
131
|
+
// Cheap pre-check: derive the FRT once, skip trees with no applied
|
|
132
|
+
// injection (nothing flipped to restate).
|
|
133
|
+
let derived;
|
|
134
|
+
try {
|
|
135
|
+
derived = await callApi('reality_tree_derive_frt', { treeId: tree.id });
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
console.warn(`[frt-prose] derive_frt failed for tree ${tree.id}:`, err.message);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const hasInjection = (derived.nodes ?? []).some((n) => n.derivedNodeType === 'injection' && n.statement && n.statement.trim() !== '');
|
|
142
|
+
if (!hasInjection)
|
|
143
|
+
continue;
|
|
144
|
+
treesScanned += 1;
|
|
145
|
+
try {
|
|
146
|
+
const res = await authorCascade(tree.id, {
|
|
147
|
+
callApi,
|
|
148
|
+
authorRestatement: deps.authorRestatement,
|
|
149
|
+
});
|
|
150
|
+
authored += res.authored.length;
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
console.warn(`[frt-prose] authorCascadeRestatements failed for tree ${tree.id}:`, err.message);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return { treesScanned, authored };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Background tick that proposes negative-branch reservations for every applied
|
|
162
|
+
* injection that has not yet had candidates generated.
|
|
163
|
+
*
|
|
164
|
+
* Idempotency: an injection is skipped when any non-dismissed `add_node`
|
|
165
|
+
* proposal with `proposedMetadata.isNegativeBranch === true` and
|
|
166
|
+
* `proposedMetadata.sourceInjectionId === injectionId` already exists for the
|
|
167
|
+
* tree. This prevents re-generating on re-ticks and leaves dismissed proposals
|
|
168
|
+
* behind (the user cleared the concern; don't re-surface it).
|
|
169
|
+
*
|
|
170
|
+
* Shares the `TELORA_FRT_PROSE_LOOP` opt-out signal with the prose tick --
|
|
171
|
+
* both are FRT-overlay authoring concerns driven by the same guard.
|
|
172
|
+
*/
|
|
173
|
+
export async function runNegativeBranchTick(config, deps = {}) {
|
|
174
|
+
const callApi = deps.callApi ?? defaultCallApi;
|
|
175
|
+
const listFocuses = deps.getActiveFocuses ?? getActiveFocuses;
|
|
176
|
+
const proposeNb = deps.proposeNegativeBranches ?? defaultProposeNegativeBranches;
|
|
177
|
+
let treesScanned = 0;
|
|
178
|
+
let proposed = 0;
|
|
179
|
+
for (const product of config.products) {
|
|
180
|
+
const pc = configForProduct(config, product);
|
|
181
|
+
let focuses;
|
|
182
|
+
try {
|
|
183
|
+
focuses = await listFocuses(pc.organizationId, product.id);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
console.warn(`[negative-branch] getActiveFocuses failed for product ${product.id}:`, err.message);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
for (const focus of focuses) {
|
|
190
|
+
let trees;
|
|
191
|
+
try {
|
|
192
|
+
const resp = await callApi('reality_tree_list', {
|
|
193
|
+
focusId: focus.focus_id,
|
|
194
|
+
});
|
|
195
|
+
trees = (resp.items ?? []).filter((t) => t.status === 'active');
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
console.warn(`[negative-branch] reality_tree_list failed for focus ${focus.focus_id}:`, err.message);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
for (const tree of trees) {
|
|
202
|
+
let derived;
|
|
203
|
+
try {
|
|
204
|
+
derived = await callApi('reality_tree_derive_frt', {
|
|
205
|
+
treeId: tree.id,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
console.warn(`[negative-branch] derive_frt failed for tree ${tree.id}:`, err.message);
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
// Only trees with at least one applied injection need NB analysis.
|
|
213
|
+
const appliedInjections = (derived.nodes ?? []).filter((n) => n.derivedNodeType === 'injection' && n.statement && n.statement.trim() !== '');
|
|
214
|
+
if (appliedInjections.length === 0)
|
|
215
|
+
continue;
|
|
216
|
+
treesScanned += 1;
|
|
217
|
+
// Load existing proposals for this tree to check idempotency.
|
|
218
|
+
let existingProposals = [];
|
|
219
|
+
try {
|
|
220
|
+
const pr = await callApi('crt_drift_proposal_list', {
|
|
221
|
+
realityTreeId: tree.id,
|
|
222
|
+
});
|
|
223
|
+
existingProposals = pr.items ?? [];
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
console.warn(`[negative-branch] proposal_list failed for tree ${tree.id}:`, err.message);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
// Build a set of injection IDs that already have non-dismissed NB proposals.
|
|
230
|
+
const alreadyProposed = new Set();
|
|
231
|
+
for (const p of existingProposals) {
|
|
232
|
+
if (p.status === 'dismissed')
|
|
233
|
+
continue;
|
|
234
|
+
const meta = p.proposedMetadata ?? {};
|
|
235
|
+
if (meta.isNegativeBranch === true &&
|
|
236
|
+
typeof meta.sourceInjectionId === 'string' &&
|
|
237
|
+
meta.sourceInjectionId !== '') {
|
|
238
|
+
alreadyProposed.add(meta.sourceInjectionId);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// UDE statements for context: nodes that are flipped in the current cascade.
|
|
242
|
+
const flippedIds = new Set(derived.flippedNodeIds ?? []);
|
|
243
|
+
const targetUdeStatements = (derived.nodes ?? [])
|
|
244
|
+
.filter((n) => n.derivedNodeType === 'undesired_effect' && flippedIds.has(n.id))
|
|
245
|
+
.map((n) => n.statement);
|
|
246
|
+
for (const inj of appliedInjections) {
|
|
247
|
+
if (alreadyProposed.has(inj.id))
|
|
248
|
+
continue;
|
|
249
|
+
try {
|
|
250
|
+
const res = await proposeNb({
|
|
251
|
+
injectionNodeId: inj.id,
|
|
252
|
+
injectionStatement: inj.statement,
|
|
253
|
+
realityTreeId: tree.id,
|
|
254
|
+
focusId: focus.focus_id,
|
|
255
|
+
targetUdeStatements,
|
|
256
|
+
}, { callApi });
|
|
257
|
+
proposed += res.proposalIds.length;
|
|
258
|
+
if (res.errors.length > 0) {
|
|
259
|
+
console.warn(`[negative-branch] partial errors for injection ${inj.id}:`, res.errors.join('; '));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
console.warn(`[negative-branch] proposeNegativeBranches failed for injection ${inj.id}:`, err.message);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return { treesScanned, proposed };
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=cascade-restatement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-restatement.js","sourceRoot":"","sources":["../src/cascade-restatement.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
6
|
-
*
|
|
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
|
|
@@ -54,7 +56,7 @@ interface SessionStateResponse {
|
|
|
54
56
|
export interface SessionStateOptions {
|
|
55
57
|
/** Emit structured JSON instead of human-readable text. */
|
|
56
58
|
json?: boolean;
|
|
57
|
-
/** Override the daemon.json path
|
|
59
|
+
/** Override the daemon.json path. Default: global `~/.telora/daemon.json`, then `.telora/daemon.json` in cwd. */
|
|
58
60
|
config?: string;
|
|
59
61
|
}
|
|
60
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/cli/session-state.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
6
|
-
*
|
|
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/cli/session-state.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/cli/session-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-engine.d.ts","sourceRoot":"","sources":["../src/focus-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA2B,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"focus-engine.d.ts","sourceRoot":"","sources":["../src/focus-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA2B,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AAyDjG;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAKT;AAMD,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,IAAI,WAAW;IAExB,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAA6B;IAE3C,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAiC;IAEjD,sEAAsE;IACtE,OAAO,CAAC,SAAS,CAAwC;IAEzD,8EAA8E;IAC9E,OAAO,CAAC,qBAAqB,CAA6B;IAE1D;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAUlC,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDjE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsEjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAwSd,aAAa;YA8Bb,wBAAwB;IA+BtC,IAAI,IAAI,IAAI;IAeN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAqG/B,WAAW,IAAI,YAAY;IA0D3B,gBAAgB,IAAI,aAAa;IAwBjC;;;OAGG;IACH,OAAO,CAAC,aAAa;CAStB"}
|
package/dist/focus-engine.js
CHANGED
|
@@ -35,6 +35,7 @@ import { upsertGitActivity, getLatestGitActivityTimestamp } from './queries/git-
|
|
|
35
35
|
import { getActiveFocuses } from './queries/deliveries.js';
|
|
36
36
|
import { runFocusLoopOnce } from './focus-loop.js';
|
|
37
37
|
import { runVerificationTick } from './verification-engine.js';
|
|
38
|
+
import { runCascadeProseTick, runNegativeBranchTick } from './cascade-restatement.js';
|
|
38
39
|
import { runPrdControllerTickAll } from './prd-controller.js';
|
|
39
40
|
import { runMergeBackTick } from './merge-back-loop.js';
|
|
40
41
|
import { runDriftEvalTick, runPendingDriftEvalRequestsTick } from './drift-eval-loop.js';
|
|
@@ -264,6 +265,47 @@ export class FocusEngine {
|
|
|
264
265
|
else {
|
|
265
266
|
console.log('Verification loop tick: disabled (TELORA_VERIFICATION_LOOP=0)');
|
|
266
267
|
}
|
|
268
|
+
// FRT-rethink-on-flip: eager cascade-prose reconciliation tick (60s).
|
|
269
|
+
// Authors future-state desired-effect prose (frt_statement) across the full
|
|
270
|
+
// resolved cascade of any tree with an applied injection, so flipped
|
|
271
|
+
// downstream consequences stop reading as present-tense problems without
|
|
272
|
+
// waiting for verify. Idempotent -- a no-op on already-authored trees.
|
|
273
|
+
// Opt-out semantics: unset -> enabled (default), set TELORA_FRT_PROSE_LOOP=0 to disable.
|
|
274
|
+
if (shouldRunLoop('TELORA_FRT_PROSE_LOOP')) {
|
|
275
|
+
console.log('FRT-prose loop tick: enabled (set TELORA_FRT_PROSE_LOOP=0 to disable)');
|
|
276
|
+
this.intervals.push(safeInterval(async () => {
|
|
277
|
+
try {
|
|
278
|
+
const counts = await runCascadeProseTick(config);
|
|
279
|
+
if (counts.authored > 0) {
|
|
280
|
+
console.log(`[frt-prose] tick: treesScanned=${counts.treesScanned} authored=${counts.authored}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
console.warn('[frt-prose] tick failed:', err.message);
|
|
285
|
+
}
|
|
286
|
+
}, 60_000, 'frt-prose-loop'));
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
console.log('FRT-prose loop tick: disabled (TELORA_FRT_PROSE_LOOP=0)');
|
|
290
|
+
}
|
|
291
|
+
// Negative-branch reservation tick: for each applied injection without
|
|
292
|
+
// existing NB proposals, ask the model for candidate new UDEs and persist
|
|
293
|
+
// them as ratify-able drift proposals. Shares the TELORA_FRT_PROSE_LOOP
|
|
294
|
+
// opt-out -- same guard, FRT authoring family. Runs at 5-minute interval
|
|
295
|
+
// (model invocations; slower cadence than the prose tick is appropriate).
|
|
296
|
+
if (shouldRunLoop('TELORA_FRT_PROSE_LOOP')) {
|
|
297
|
+
this.intervals.push(safeInterval(async () => {
|
|
298
|
+
try {
|
|
299
|
+
const counts = await runNegativeBranchTick(config);
|
|
300
|
+
if (counts.proposed > 0) {
|
|
301
|
+
console.log(`[negative-branch] tick: treesScanned=${counts.treesScanned} proposed=${counts.proposed}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
console.warn('[negative-branch] tick failed:', err.message);
|
|
306
|
+
}
|
|
307
|
+
}, 300_000, 'negative-branch-loop'));
|
|
308
|
+
}
|
|
267
309
|
// Staged Assembly PRD layer: PRD-lifecycle controller tick (60s).
|
|
268
310
|
// Computes the PRT frontier for active PRDs and arms frontier foci via the
|
|
269
311
|
// existing assigned_agent_role_id queue toggle (focus_update). Adds NO new
|