draken 0.6.0 → 0.8.0
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/CHANGELOG.md +43 -0
- package/MEMORY.md +64 -13
- package/README.md +25 -19
- package/SETUP.md +26 -3
- package/TRAY.md +3 -3
- package/VOICE.md +8 -6
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +65 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/memory/readiness.d.ts +4 -3
- package/dist/memory/readiness.d.ts.map +1 -1
- package/dist/memory/readiness.js +128 -35
- package/dist/memory/readiness.js.map +1 -1
- package/dist/memory/storage.d.ts.map +1 -1
- package/dist/memory/storage.js +1 -0
- package/dist/memory/storage.js.map +1 -1
- package/dist/routes/sync.d.ts.map +1 -1
- package/dist/routes/sync.js +9 -0
- package/dist/routes/sync.js.map +1 -1
- package/dist/sync/activity.d.ts +11 -1
- package/dist/sync/activity.d.ts.map +1 -1
- package/dist/sync/activity.js +18 -3
- package/dist/sync/activity.js.map +1 -1
- package/dist/sync/background.d.ts +7 -2
- package/dist/sync/background.d.ts.map +1 -1
- package/dist/sync/background.js +66 -19
- package/dist/sync/background.js.map +1 -1
- package/dist/sync/conversation.d.ts +20 -0
- package/dist/sync/conversation.d.ts.map +1 -0
- package/dist/sync/conversation.js +127 -0
- package/dist/sync/conversation.js.map +1 -0
- package/dist/sync/manager.d.ts.map +1 -1
- package/dist/sync/manager.js +56 -16
- package/dist/sync/manager.js.map +1 -1
- package/dist/sync/preparation.d.ts +1 -1
- package/dist/sync/preparation.d.ts.map +1 -1
- package/dist/sync/preparation.js +23 -5
- package/dist/sync/preparation.js.map +1 -1
- package/dist/sync/store.d.ts +4 -1
- package/dist/sync/store.d.ts.map +1 -1
- package/dist/sync/store.js +24 -7
- package/dist/sync/store.js.map +1 -1
- package/dist/sync/summary-preparation.d.ts +14 -0
- package/dist/sync/summary-preparation.d.ts.map +1 -0
- package/dist/sync/summary-preparation.js +205 -0
- package/dist/sync/summary-preparation.js.map +1 -0
- package/dist/sync/tree.d.ts +17 -1
- package/dist/sync/tree.d.ts.map +1 -1
- package/dist/sync/tree.js +94 -29
- package/dist/sync/tree.js.map +1 -1
- package/dist/sync/update-status.d.ts +9 -0
- package/dist/sync/update-status.d.ts.map +1 -0
- package/dist/sync/update-status.js +21 -0
- package/dist/sync/update-status.js.map +1 -0
- package/dist/sync/usage.d.ts +3 -1
- package/dist/sync/usage.d.ts.map +1 -1
- package/dist/sync/usage.js +24 -6
- package/dist/sync/usage.js.map +1 -1
- package/dist/types.d.ts +21 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/voice/live-context.d.ts +1 -1
- package/dist/voice/live-context.d.ts.map +1 -1
- package/dist/voice/live-context.js +1 -1
- package/dist/voice/live.d.ts.map +1 -1
- package/dist/voice/live.js +265 -32
- package/dist/voice/live.js.map +1 -1
- package/package.json +1 -1
- package/public/assets/index-sHcfjDUD.js +131 -0
- package/public/index.html +1 -1
- package/public/assets/index-DXPfCm7z.js +0 -131
package/dist/sync/activity.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/** Callable release remains compatible with existing call owners. All child
|
|
2
|
+
* leases close over this reservation, never a sync ID that can be reused. */
|
|
3
|
+
export interface VoiceLease {
|
|
4
|
+
(): void;
|
|
5
|
+
connected(): void;
|
|
6
|
+
hold(): () => void;
|
|
7
|
+
beginTurn(): () => void;
|
|
8
|
+
}
|
|
1
9
|
/** Process-local ownership, separate from durable run status. Cancellation only
|
|
2
10
|
* requests a stop: the owner keeps its lease until its resources are released. */
|
|
3
11
|
declare class SyncActivity {
|
|
@@ -14,12 +22,14 @@ declare class SyncActivity {
|
|
|
14
22
|
get busy(): boolean;
|
|
15
23
|
get starting(): boolean;
|
|
16
24
|
get callActive(): boolean;
|
|
25
|
+
get backgroundIdle(): boolean;
|
|
26
|
+
voiceTurnActive(id: number): boolean;
|
|
17
27
|
jobActive(id: number): boolean;
|
|
18
28
|
voiceActive(id: number): boolean;
|
|
19
29
|
beginJob(id: number, controller: AbortController): () => void;
|
|
20
30
|
cancelJob(id: number): boolean;
|
|
21
31
|
beginStart(): () => void;
|
|
22
|
-
beginCall(id: number):
|
|
32
|
+
beginCall(id: number): VoiceLease;
|
|
23
33
|
}
|
|
24
34
|
export declare const activity: SyncActivity;
|
|
25
35
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/sync/activity.ts"],"names":[],"mappings":"AAEA;kFACkF;AAClF,cAAM,YAAY;IAChB,OAAO,CAAC,IAAI,CAAsD;IAClE,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/sync/activity.ts"],"names":[],"mappings":"AAEA;6EAC6E;AAC7E,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,CAAC;IACT,SAAS,IAAI,IAAI,CAAC;IAClB,IAAI,IAAI,MAAM,IAAI,CAAC;IACnB,SAAS,IAAI,MAAM,IAAI,CAAC;CACzB;AAED;kFACkF;AAClF,cAAM,YAAY;IAChB,OAAO,CAAC,IAAI,CAAsD;IAClE,OAAO,CAAC,IAAI,CAAC,CAA4F;IACzG,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,IAAI,OAAO,IAAI,MAAM,EAAE,CAAkC;IACzD,IAAI,IAAI,IAAI,OAAO,CAAkD;IACrE,IAAI,QAAQ,IAAI,OAAO,CAAqC;IAC5D,IAAI,UAAU,IAAI,OAAO,CAAoC;IAC7D,IAAI,cAAc,IAAI,OAAO,CAAoI;IACjK,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IACpC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAC9B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAEhC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,MAAM,IAAI;IAQ7D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK9B,UAAU,IAAI,MAAM,IAAI;IAOxB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU;CAkBlC;AAED,eAAO,MAAM,QAAQ,cAAqB,CAAC"}
|
package/dist/sync/activity.js
CHANGED
|
@@ -27,6 +27,8 @@ class SyncActivity {
|
|
|
27
27
|
get busy() { return Boolean(this.start || this.jobs.size); }
|
|
28
28
|
get starting() { return this.start !== undefined; }
|
|
29
29
|
get callActive() { return this.call !== undefined; }
|
|
30
|
+
get backgroundIdle() { return !this.stopping && !this.busy && (!this.call || (this.call.connected && !this.call.holds.size && !this.call.turns.size)); }
|
|
31
|
+
voiceTurnActive(id) { return this.call?.id === id && this.call.turns.size > 0; }
|
|
30
32
|
jobActive(id) { return this.jobs.has(id); }
|
|
31
33
|
voiceActive(id) { return this.call?.id === id; }
|
|
32
34
|
beginJob(id, controller) {
|
|
@@ -69,11 +71,24 @@ class SyncActivity {
|
|
|
69
71
|
if (this.jobs.has(id))
|
|
70
72
|
throw new errors_1.HttpError(409, 'A reply is still being generated. Wait or cancel before changing this sync.');
|
|
71
73
|
const token = Symbol();
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
const owner = { id, token, connected: false, holds: new Set(), turns: new Set() };
|
|
75
|
+
this.call = owner;
|
|
76
|
+
const lease = (leases) => {
|
|
77
|
+
if (this.call !== owner)
|
|
78
|
+
return () => { };
|
|
79
|
+
const child = Symbol();
|
|
80
|
+
leases.add(child);
|
|
81
|
+
return () => { leases.delete(child); };
|
|
82
|
+
};
|
|
83
|
+
return Object.assign(() => { if (this.call === owner) {
|
|
74
84
|
this.call = undefined;
|
|
75
85
|
this.changed();
|
|
76
|
-
} }
|
|
86
|
+
} }, {
|
|
87
|
+
connected: () => { if (this.call === owner)
|
|
88
|
+
owner.connected = true; },
|
|
89
|
+
hold: () => lease(owner.holds),
|
|
90
|
+
beginTurn: () => lease(owner.turns),
|
|
91
|
+
});
|
|
77
92
|
}
|
|
78
93
|
}
|
|
79
94
|
exports.activity = new SyncActivity();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/sync/activity.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/sync/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,16 +4,20 @@ interface Operations {
|
|
|
4
4
|
enabled(): boolean;
|
|
5
5
|
idle(): boolean;
|
|
6
6
|
now(): number;
|
|
7
|
+
expire?(now: number): void;
|
|
8
|
+
activeConversations?(): boolean;
|
|
9
|
+
needsPreparation?(): boolean;
|
|
7
10
|
scan(signal: AbortSignal): Promise<{
|
|
8
11
|
warnings: string[];
|
|
9
12
|
}>;
|
|
10
13
|
stamp(before: string): Map<string, string>;
|
|
11
14
|
baseline(): Map<string, string> | undefined;
|
|
12
15
|
prepare(before: string, signal: AbortSignal): Promise<void>;
|
|
16
|
+
prepareSummaries?(signal: AbortSignal): Promise<void>;
|
|
13
17
|
completed(at: string): void;
|
|
14
18
|
}
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
19
|
+
/** One cancellable owner for discovery, local indexing and separately opted-in
|
|
20
|
+
* paid cache preparation. It never creates snapshots or final briefings. */
|
|
17
21
|
declare class AutoIndexer {
|
|
18
22
|
private ops;
|
|
19
23
|
state: State;
|
|
@@ -33,5 +37,6 @@ export declare function stopBackgroundIndexing(): Promise<void>;
|
|
|
33
37
|
export declare function yieldBackgroundIndexing(): Promise<void>;
|
|
34
38
|
export declare function autoIndexSettings(): AutoIndexSettings;
|
|
35
39
|
export declare function setAutoIndex(value: unknown): AutoIndexSettings;
|
|
40
|
+
export declare function setAutoSummary(value: unknown): import("../types").SummaryPreparationSettings;
|
|
36
41
|
export {};
|
|
37
42
|
//# sourceMappingURL=background.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/sync/background.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/sync/background.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAIlD,KAAK,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,OAAO,CAAC,CAAC;AAClG,UAAU,UAAU;IAClB,OAAO,IAAI,OAAO,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC;IAAC,GAAG,IAAI,MAAM,CAAC;IACnD,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mBAAmB,CAAC,IAAI,OAAO,CAAC;IAChC,gBAAgB,CAAC,IAAI,OAAO,CAAC;IAC7B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC3D,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,gBAAgB,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAGD;4EAC4E;AAC5E,cAAM,WAAW;IAKH,OAAO,CAAC,GAAG;IAJvB,KAAK,QAAa;IAClB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,IAAI,CAAC,CAAkB;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAgB;gBACR,GAAG,EAAE,UAAU;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,KAAK;IAIC,IAAI;IACV,KAAK;YACS,GAAG;CA+ClB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,eAAkC;AAKnF,wBAAgB,uBAAuB,SAYtC;AACD,wBAAsB,sBAAsB,kBAO3C;AACD,wBAAsB,uBAAuB,kBAAuE;AACpH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAMrD;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAM9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,iDAM5C"}
|
package/dist/sync/background.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.stopBackgroundIndexing = stopBackgroundIndexing;
|
|
|
6
6
|
exports.yieldBackgroundIndexing = yieldBackgroundIndexing;
|
|
7
7
|
exports.autoIndexSettings = autoIndexSettings;
|
|
8
8
|
exports.setAutoIndex = setAutoIndex;
|
|
9
|
+
exports.setAutoSummary = setAutoSummary;
|
|
9
10
|
const schema_1 = require("../db/schema");
|
|
10
11
|
const data_dir_1 = require("../data-dir");
|
|
11
12
|
const stamps_1 = require("../memory/stamps");
|
|
@@ -14,10 +15,13 @@ const store_1 = require("./store");
|
|
|
14
15
|
const activity_1 = require("./activity");
|
|
15
16
|
const errors_1 = require("../errors");
|
|
16
17
|
const service_1 = require("../memory/service");
|
|
18
|
+
const conversation_1 = require("./conversation");
|
|
19
|
+
const update_status_1 = require("./update-status");
|
|
20
|
+
const summary_preparation_1 = require("./summary-preparation");
|
|
17
21
|
const CHECK_MS = 60_000, RETRY_MS = 5 * 60_000, BATCH = 64;
|
|
18
22
|
const initial = () => ({ phase: 'off', pending_records: 0, last_completed_at: null, error: '' });
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
23
|
+
/** One cancellable owner for discovery, local indexing and separately opted-in
|
|
24
|
+
* paid cache preparation. It never creates snapshots or final briefings. */
|
|
21
25
|
class AutoIndexer {
|
|
22
26
|
ops;
|
|
23
27
|
state = initial();
|
|
@@ -28,6 +32,10 @@ class AutoIndexer {
|
|
|
28
32
|
this.ops = ops;
|
|
29
33
|
}
|
|
30
34
|
async tick() {
|
|
35
|
+
// Expiry is server lifecycle work, not indexing consent or browser activity.
|
|
36
|
+
// It also runs while an owned job is in flight; foreground turns are protected
|
|
37
|
+
// by the conversation module's activity admission checks.
|
|
38
|
+
this.ops.expire?.(this.ops.now());
|
|
31
39
|
if (this.job)
|
|
32
40
|
return this.job;
|
|
33
41
|
if (!this.ops.enabled()) {
|
|
@@ -74,21 +82,40 @@ class AutoIndexer {
|
|
|
74
82
|
if (!current.has(key))
|
|
75
83
|
changed++;
|
|
76
84
|
this.state.pending_records = changed;
|
|
77
|
-
if (changed < BATCH) {
|
|
78
|
-
this.state.phase = 'waiting';
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
85
|
if (!this.ops.idle()) {
|
|
82
86
|
this.state.phase = 'paused';
|
|
83
87
|
return;
|
|
84
88
|
}
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
// With no active conversation, retain the strict64/no-timed-tail policy.
|
|
90
|
+
// Live conversations get the first positive delta at the minute check.
|
|
91
|
+
// Metadata/link/receipt upgrades can need a local pass with zero counter
|
|
92
|
+
// delta; this path shares the same bounded cancellation and error backoff.
|
|
93
|
+
const live = this.ops.activeConversations?.() === true;
|
|
94
|
+
if (changed >= BATCH || (live && (changed > 0 || this.ops.needsPreparation?.()))) {
|
|
95
|
+
this.state.phase = 'indexing';
|
|
96
|
+
await this.ops.prepare(before, signal);
|
|
97
|
+
if (signal.aborted || !this.ops.enabled())
|
|
98
|
+
return;
|
|
99
|
+
const completed = new Date(this.ops.now()).toISOString();
|
|
100
|
+
this.ops.completed(completed);
|
|
101
|
+
this.state = { phase: 'waiting', pending_records: 0, last_completed_at: completed, error: '' };
|
|
102
|
+
}
|
|
87
103
|
if (signal.aborted || !this.ops.enabled())
|
|
88
104
|
return;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
105
|
+
if (!this.ops.idle()) {
|
|
106
|
+
this.state.phase = 'paused';
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.state.phase = 'waiting';
|
|
110
|
+
// Summary backlog is independent of the embedding checkpoint. Its helper
|
|
111
|
+
// owns durable failure/retry state; provider failures never roll back or
|
|
112
|
+
// misreport successful local indexing.
|
|
113
|
+
try {
|
|
114
|
+
await this.ops.prepareSummaries?.(signal);
|
|
115
|
+
}
|
|
116
|
+
catch { /* separate paid-work failure domain */ }
|
|
117
|
+
if (!signal.aborted)
|
|
118
|
+
this.state.phase = 'waiting';
|
|
92
119
|
}
|
|
93
120
|
catch (error) {
|
|
94
121
|
if (!signal.aborted && error instanceof errors_1.HttpError && error.status === 409) {
|
|
@@ -110,12 +137,18 @@ class AutoIndexer {
|
|
|
110
137
|
function createAutoIndexer(ops) { return new AutoIndexer(ops); }
|
|
111
138
|
const enabled = () => (0, schema_1.getDb)().prepare("SELECT value FROM sync_settings WHERE key='auto_index'").get()?.value === 'true';
|
|
112
139
|
let worker, timer;
|
|
140
|
+
let unregisterStatus;
|
|
113
141
|
function startBackgroundIndexing() {
|
|
114
142
|
if (timer)
|
|
115
143
|
return;
|
|
116
|
-
worker
|
|
117
|
-
now: Date.now,
|
|
144
|
+
worker ||= createAutoIndexer({ enabled, idle: () => activity_1.activity.backgroundIdle && !(0, service_1.historyProgress)().active && !(0, service_1.historyProgress)().queued,
|
|
145
|
+
now: Date.now, expire: conversation_1.expireConversations, activeConversations: conversation_1.hasActiveConversations, needsPreparation: () => !(0, service_1.historyReadiness)().ready,
|
|
146
|
+
scan: collector_1.scanSessions, stamp: before => (0, stamps_1.sourceStamps)((0, schema_1.getDb)(), before), baseline: () => (0, stamps_1.loadSourceCheckpoint)((0, data_dir_1.getDataDir)()), prepare: (before, signal) => (0, service_1.prepareHistory)(before, signal, true),
|
|
147
|
+
prepareSummaries: signal => (0, summary_preparation_1.warmSummaryCache)(signal, () => { if (worker)
|
|
148
|
+
worker.state.phase = 'summarizing'; }),
|
|
118
149
|
completed: at => { (0, schema_1.getDb)().prepare("INSERT INTO sync_settings(key,value) VALUES ('auto_last_completed',?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(at); } });
|
|
150
|
+
const owner = worker;
|
|
151
|
+
unregisterStatus = (0, update_status_1.registerUpdateStatus)(() => owner.state);
|
|
119
152
|
timer = setInterval(() => {
|
|
120
153
|
void worker?.tick().catch(() => {
|
|
121
154
|
if (worker) {
|
|
@@ -129,15 +162,19 @@ function startBackgroundIndexing() {
|
|
|
129
162
|
async function stopBackgroundIndexing() {
|
|
130
163
|
clearInterval(timer);
|
|
131
164
|
timer = undefined;
|
|
132
|
-
const prior = worker;
|
|
133
|
-
|
|
134
|
-
|
|
165
|
+
const prior = worker, unregister = unregisterStatus;
|
|
166
|
+
await Promise.all([prior?.stop(), (0, summary_preparation_1.cancelSummaryPreparation)()]);
|
|
167
|
+
unregister?.();
|
|
168
|
+
if (unregisterStatus === unregister)
|
|
169
|
+
unregisterStatus = undefined;
|
|
170
|
+
if (!timer && worker === prior)
|
|
171
|
+
worker = undefined;
|
|
135
172
|
}
|
|
136
|
-
async function yieldBackgroundIndexing() { await worker?.stop(); }
|
|
173
|
+
async function yieldBackgroundIndexing() { await Promise.all([worker?.stop(), (0, summary_preparation_1.cancelSummaryPreparation)()]); }
|
|
137
174
|
function autoIndexSettings() {
|
|
138
175
|
const on = enabled();
|
|
139
176
|
const last = (0, schema_1.getDb)().prepare("SELECT value FROM sync_settings WHERE key='auto_last_completed'").get();
|
|
140
|
-
return { enabled: on, check_seconds: CHECK_MS / 1000, batch_records: BATCH, pending_entries: (0, store_1.availableCount)(),
|
|
177
|
+
return { enabled: on, summary_enabled: (0, summary_preparation_1.summaryPreparationEnabled)(), check_seconds: CHECK_MS / 1000, batch_records: BATCH, pending_entries: (0, store_1.availableCount)(),
|
|
141
178
|
...(worker?.state || initial()), last_completed_at: worker?.state.last_completed_at || last?.value || null, ...(!on && worker?.state.phase !== 'stopping' ? { phase: 'off' }
|
|
142
179
|
: on && (!worker || worker.state.phase === 'off') ? { phase: 'waiting' } : {}) };
|
|
143
180
|
}
|
|
@@ -146,10 +183,20 @@ function setAutoIndex(value) {
|
|
|
146
183
|
throw new errors_1.HttpError(400, 'enabled must be a boolean');
|
|
147
184
|
(0, schema_1.getDb)().prepare("INSERT INTO sync_settings(key,value) VALUES ('auto_index',?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(String(value));
|
|
148
185
|
startBackgroundIndexing();
|
|
149
|
-
if (!value)
|
|
186
|
+
if (!value) {
|
|
150
187
|
worker.pause();
|
|
188
|
+
void (0, summary_preparation_1.cancelSummaryPreparation)();
|
|
189
|
+
}
|
|
151
190
|
else
|
|
152
191
|
worker.retry();
|
|
153
192
|
return autoIndexSettings();
|
|
154
193
|
}
|
|
194
|
+
function setAutoSummary(value) {
|
|
195
|
+
(0, summary_preparation_1.configureAutoSummary)(value);
|
|
196
|
+
startBackgroundIndexing();
|
|
197
|
+
worker.pause();
|
|
198
|
+
if (value)
|
|
199
|
+
worker.retry();
|
|
200
|
+
return (0, summary_preparation_1.summaryPreparationSettings)();
|
|
201
|
+
}
|
|
155
202
|
//# sourceMappingURL=background.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../src/sync/background.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../src/sync/background.ts"],"names":[],"mappings":";;AAyGA,8CAAmF;AAKnF,0DAYC;AACD,wDAOC;AACD,0DAAoH;AACpH,8CAMC;AACD,oCAMC;AAED,wCAMC;AAzJD,yCAAqC;AACrC,0CAAyC;AACzC,6CAAsE;AACtE,2CAA2C;AAC3C,mCAAyC;AACzC,yCAAsC;AACtC,sCAAsC;AACtC,+CAAsF;AACtF,iDAA6E;AAC7E,mDAAuD;AAEvD,+DAAgK;AAEhK,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,GAAG,EAAE,CAAC;AAc3D,MAAM,OAAO,GAAG,GAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AAExG;4EAC4E;AAC5E,MAAM,WAAW;IAKK;IAJpB,KAAK,GAAG,OAAO,EAAE,CAAC;IACV,OAAO,GAAG,CAAC,CAAC;IACZ,IAAI,CAAmB;IACvB,GAAG,CAAiB;IAC5B,YAAoB,GAAe;QAAf,QAAG,GAAH,GAAG,CAAY;IAAG,CAAC;IACvC,KAAK,CAAC,IAAI;QACR,6EAA6E;QAC7E,+EAA+E;QAC/E,0DAA0D;QAC1D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1C,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IACxG,CAAC;IACD,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACtH,KAAK,CAAC,GAAG,CAAC,MAAmB;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBAAE,OAAO;YAClD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO;gBAAE,IAAI,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;oBAAE,OAAO,EAAE,CAAC;YAChF,IAAI,QAAQ;gBAAE,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE;oBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,OAAO,EAAE,CAAC;YAClF,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,OAAO,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC9D,yEAAyE;YACzE,uEAAuE;YACvE,yEAAyE;YACzE,2EAA2E;YAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,KAAK,IAAI,CAAC;YACvD,IAAI,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjF,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBAAE,OAAO;gBAClD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACzD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACjG,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBAAE,OAAO;YAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAC7B,yEAAyE;YACzE,yEAAyE;YACzE,uCAAuC;YACvC,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;YACpG,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,YAAY,kBAAS,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1E,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;YACxE,CAAC;iBAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,wJAAwJ,CAAC;gBAC5K,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;YAC3C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QACtG,CAAC;IACH,CAAC;CACF;AAED,SAAgB,iBAAiB,CAAC,GAAe,IAAI,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEnF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAE,IAAA,cAAK,GAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,EAAoC,EAAE,KAAK,KAAK,MAAM,CAAC;AAC3J,IAAI,MAA+B,EAAE,KAAiC,CAAC;AACvE,IAAI,gBAA0C,CAAC;AAC/C,SAAgB,uBAAuB;IACrC,IAAI,KAAK;QAAE,OAAO;IAClB,MAAM,KAAK,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,mBAAQ,CAAC,cAAc,IAAI,CAAC,IAAA,yBAAe,GAAE,CAAC,MAAM,IAAI,CAAC,IAAA,yBAAe,GAAE,CAAC,MAAM;QACnI,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,kCAAmB,EAAE,mBAAmB,EAAE,qCAAsB,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,IAAA,0BAAgB,GAAE,CAAC,KAAK;QAC1I,IAAI,EAAE,wBAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,IAAA,qBAAY,EAAC,IAAA,cAAK,GAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,6BAAoB,EAAC,IAAA,qBAAU,GAAE,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,IAAA,wBAAc,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;QACzL,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,IAAA,sCAAgB,EAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/G,SAAS,EAAE,EAAE,CAAC,EAAE,GAAG,IAAA,cAAK,GAAE,CAAC,OAAO,CAAC,2HAA2H,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChL,MAAM,KAAK,GAAG,MAAM,CAAC;IACrB,gBAAgB,GAAG,IAAA,oCAAoB,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3D,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAAG,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACzD,IAAI,MAAM,EAAE,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,wEAAwE,CAAC;YAAC,CAAC;QAC9I,CAAC,CAAC,CAAC;IAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC;AACM,KAAK,UAAU,sBAAsB;IAC1C,aAAa,CAAC,KAAK,CAAC,CAAC;IAAC,KAAK,GAAG,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACpD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,IAAA,8CAAwB,GAAE,CAAC,CAAC,CAAC;IAC/D,UAAU,EAAE,EAAE,CAAC;IACf,IAAI,gBAAgB,KAAK,UAAU;QAAE,gBAAgB,GAAG,SAAS,CAAC;IAClE,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,KAAK;QAAE,MAAM,GAAG,SAAS,CAAC;AACrD,CAAC;AACM,KAAK,UAAU,uBAAuB,KAAK,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAA,8CAAwB,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpH,SAAgB,iBAAiB;IAC/B,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,IAAA,cAAK,GAAE,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,EAAmC,CAAC;IACvI,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,IAAA,+CAAyB,GAAE,EAAE,aAAa,EAAE,QAAQ,GAAG,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,IAAA,sBAAc,GAAE;QACzJ,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,iBAAiB,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAc,EAAE;YACnL,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAChG,CAAC;AACD,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,kBAAS,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;IACtF,IAAA,cAAK,GAAE,CAAC,OAAO,CAAC,kHAAkH,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvJ,uBAAuB,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,MAAO,CAAC,KAAK,EAAE,CAAC;QAAC,KAAK,IAAA,8CAAwB,GAAE,CAAC;IAAC,CAAC;;QAAM,MAAO,CAAC,KAAK,EAAE,CAAC;IACvF,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAA,0CAAoB,EAAC,KAAK,CAAC,CAAC;IAC5B,uBAAuB,EAAE,CAAC;IAC1B,MAAO,CAAC,KAAK,EAAE,CAAC;IAChB,IAAI,KAAK;QAAE,MAAO,CAAC,KAAK,EAAE,CAAC;IAC3B,OAAO,IAAA,gDAA0B,GAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ConversationState } from '../types';
|
|
2
|
+
/** Request-local metadata only: never starts work, adopts a cutoff, touches the
|
|
3
|
+
* idle clock or persists expiry. Global checks are lazy and shared across cards,
|
|
4
|
+
* never across responses (required original files must be checked again). */
|
|
5
|
+
export declare function conversationStatuses(ids: number[]): ConversationState[];
|
|
6
|
+
export declare function conversationStatus(id: number): ConversationState;
|
|
7
|
+
/** Write admission/timer cleanup, independent of explicit review and coverage. */
|
|
8
|
+
export declare function expireConversations(now?: number): void;
|
|
9
|
+
export declare function assertConversationActive(id: number): void;
|
|
10
|
+
/** Call only in the same transaction as accepting a NEW real user turn. */
|
|
11
|
+
export declare function touchConversation(id: number, at?: number): void;
|
|
12
|
+
/** Scheduler hint, with no original-source access or lifecycle writes. */
|
|
13
|
+
export declare function hasActiveConversations(): boolean;
|
|
14
|
+
/** Turn admission only. Never turns a never-prepared conversation into a ready
|
|
15
|
+
* one merely because another conversation/background job prepared the corpus. */
|
|
16
|
+
export declare function captureConversationHistory(id: number): string | null;
|
|
17
|
+
/** Initial explicit preparation success only; background work cannot revive or
|
|
18
|
+
* prepare a conversation, and subsequent preparation cannot move its cutoff. */
|
|
19
|
+
export declare function markConversationPrepared(id: number, before: string): void;
|
|
20
|
+
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/sync/conversation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyBlD;;6EAE6E;AAC7E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAiCvE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAEhE;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,GAAG,SAAa,GAAG,IAAI,CAS1D;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,SAAa,GAAG,IAAI,CAInE;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,IAAI,OAAO,CAIhD;AAED;iFACiF;AACjF,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQpE;AAED;gFACgF;AAChF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIzE"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.conversationStatuses = conversationStatuses;
|
|
4
|
+
exports.conversationStatus = conversationStatus;
|
|
5
|
+
exports.expireConversations = expireConversations;
|
|
6
|
+
exports.assertConversationActive = assertConversationActive;
|
|
7
|
+
exports.touchConversation = touchConversation;
|
|
8
|
+
exports.hasActiveConversations = hasActiveConversations;
|
|
9
|
+
exports.captureConversationHistory = captureConversationHistory;
|
|
10
|
+
exports.markConversationPrepared = markConversationPrepared;
|
|
11
|
+
const schema_1 = require("../db/schema");
|
|
12
|
+
const errors_1 = require("../errors");
|
|
13
|
+
const service_1 = require("../memory/service");
|
|
14
|
+
const activity_1 = require("./activity");
|
|
15
|
+
const update_status_1 = require("./update-status");
|
|
16
|
+
const IDLE_MS = 30 * 60_000;
|
|
17
|
+
function row(id) {
|
|
18
|
+
const value = (0, schema_1.getDb)().prepare(`SELECT id,status,created_at,conversation_last_user_at,
|
|
19
|
+
conversation_ended_at,conversation_before FROM syncs WHERE id=?`).get(id);
|
|
20
|
+
if (!value)
|
|
21
|
+
throw new errors_1.HttpError(404, 'Sync not found');
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function deadline(value) { return Date.parse(value.conversation_last_user_at || value.created_at) + IDLE_MS; }
|
|
25
|
+
function inFlight(id) { return activity_1.activity.jobActive(id) || activity_1.activity.voiceTurnActive(id); }
|
|
26
|
+
function ended(value, now) {
|
|
27
|
+
return value.conversation_ended_at || (value.status === 'open' && deadline(value) <= now && !inFlight(value.id)
|
|
28
|
+
? new Date(deadline(value)).toISOString() : null);
|
|
29
|
+
}
|
|
30
|
+
/** Request-local metadata only: never starts work, adopts a cutoff, touches the
|
|
31
|
+
* idle clock or persists expiry. Global checks are lazy and shared across cards,
|
|
32
|
+
* never across responses (required original files must be checked again). */
|
|
33
|
+
function conversationStatuses(ids) {
|
|
34
|
+
let shared;
|
|
35
|
+
let strict;
|
|
36
|
+
const now = Date.now();
|
|
37
|
+
return ids.map(id => {
|
|
38
|
+
const value = row(id), end = ended(value, now);
|
|
39
|
+
const base = { last_user_at: value.conversation_last_user_at || value.created_at,
|
|
40
|
+
expires_at: new Date(deadline(value)).toISOString(), ended_at: end, history_before: value.conversation_before };
|
|
41
|
+
if (end || value.status !== 'open')
|
|
42
|
+
return Object.freeze({ ...base, available_before: null, update_state: 'paused', error: '' });
|
|
43
|
+
const { history, progress, enabled, background } = shared ||= {
|
|
44
|
+
history: (0, service_1.historyReadiness)(true), progress: (0, service_1.historyProgress)(), background: (0, update_status_1.backgroundUpdateStatus)(),
|
|
45
|
+
enabled: (0, schema_1.getDb)().prepare("SELECT value FROM sync_settings WHERE key='auto_index'").get()?.value === 'true',
|
|
46
|
+
};
|
|
47
|
+
const available = history.ready ? history.before : null;
|
|
48
|
+
let update_state, error = '';
|
|
49
|
+
if (!enabled)
|
|
50
|
+
update_state = 'paused';
|
|
51
|
+
else if (background?.phase === 'error' || background?.error) {
|
|
52
|
+
update_state = 'error';
|
|
53
|
+
// Do not expose worker/provider/source error details through conversation GETs.
|
|
54
|
+
error = 'Live updates could not finish. Check session sources and local model availability. Completed history is retained; automatic indexing will retry.';
|
|
55
|
+
}
|
|
56
|
+
else if (available && (!value.conversation_before || available > value.conversation_before))
|
|
57
|
+
update_state = 'new_info';
|
|
58
|
+
else {
|
|
59
|
+
// Search/read work and paid summary preparation are not new H-source work.
|
|
60
|
+
const preparing = (progress.active && progress.work?.stage !== 'searching' && progress.work?.stage !== 'reading')
|
|
61
|
+
|| progress.queued > 0 || background?.phase === 'scanning' || background?.phase === 'indexing'
|
|
62
|
+
|| (background?.pending_records || 0) > 0;
|
|
63
|
+
// Captured readiness may remain valid while newly admitted records await
|
|
64
|
+
// preparation. Only ask for strict readiness when it affects the label.
|
|
65
|
+
update_state = preparing || !history.ready || !(strict ||= (0, service_1.historyReadiness)()).ready ? 'preparing' : 'up_to_date';
|
|
66
|
+
}
|
|
67
|
+
return Object.freeze({ ...base, available_before: available, update_state, error });
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function conversationStatus(id) {
|
|
71
|
+
return conversationStatuses([id])[0];
|
|
72
|
+
}
|
|
73
|
+
/** Write admission/timer cleanup, independent of explicit review and coverage. */
|
|
74
|
+
function expireConversations(now = Date.now()) {
|
|
75
|
+
const db = (0, schema_1.getDb)();
|
|
76
|
+
const rows = db.prepare(`SELECT id,status,created_at,conversation_last_user_at,conversation_ended_at,conversation_before
|
|
77
|
+
FROM syncs WHERE status='open' AND conversation_ended_at IS NULL
|
|
78
|
+
AND COALESCE(conversation_last_user_at,created_at)<=?`).all(new Date(now - IDLE_MS).toISOString());
|
|
79
|
+
const save = db.prepare('UPDATE syncs SET conversation_ended_at=? WHERE id=? AND conversation_ended_at IS NULL');
|
|
80
|
+
// Persist the actual end time, not a backdated deadline: an answer holding a
|
|
81
|
+
// lease may legitimately finish after expires_at without renewing that clock.
|
|
82
|
+
db.transaction(() => { for (const value of rows)
|
|
83
|
+
if (!inFlight(value.id))
|
|
84
|
+
save.run(new Date(now).toISOString(), value.id); })();
|
|
85
|
+
}
|
|
86
|
+
function assertConversationActive(id) {
|
|
87
|
+
expireConversations();
|
|
88
|
+
const value = row(id);
|
|
89
|
+
if (value.conversation_ended_at)
|
|
90
|
+
throw new errors_1.HttpError(410, 'This conversation ended after 30 minutes without a user turn. Start a new sync to continue; the transcript and notes are preserved.');
|
|
91
|
+
if (value.status !== 'open')
|
|
92
|
+
throw new errors_1.HttpError(409, 'This sync is already closed. Start a new sync to continue.');
|
|
93
|
+
}
|
|
94
|
+
/** Call only in the same transaction as accepting a NEW real user turn. */
|
|
95
|
+
function touchConversation(id, at = Date.now()) {
|
|
96
|
+
assertConversationActive(id);
|
|
97
|
+
(0, schema_1.getDb)().prepare(`UPDATE syncs SET conversation_last_user_at=MAX(COALESCE(conversation_last_user_at,created_at),?)
|
|
98
|
+
WHERE id=? AND status='open' AND conversation_ended_at IS NULL`).run(new Date(at).toISOString(), id);
|
|
99
|
+
}
|
|
100
|
+
/** Scheduler hint, with no original-source access or lifecycle writes. */
|
|
101
|
+
function hasActiveConversations() {
|
|
102
|
+
const rows = (0, schema_1.getDb)().prepare(`SELECT id,status,created_at,conversation_last_user_at,conversation_ended_at,conversation_before
|
|
103
|
+
FROM syncs WHERE status='open' AND conversation_ended_at IS NULL`).all();
|
|
104
|
+
return rows.some(value => !ended(value, Date.now()));
|
|
105
|
+
}
|
|
106
|
+
/** Turn admission only. Never turns a never-prepared conversation into a ready
|
|
107
|
+
* one merely because another conversation/background job prepared the corpus. */
|
|
108
|
+
function captureConversationHistory(id) {
|
|
109
|
+
assertConversationActive(id);
|
|
110
|
+
const value = row(id);
|
|
111
|
+
if (!value.conversation_before)
|
|
112
|
+
return null;
|
|
113
|
+
const latest = (0, service_1.historyReadiness)(true);
|
|
114
|
+
const before = latest.ready && latest.before && latest.before > value.conversation_before ? latest.before : value.conversation_before;
|
|
115
|
+
if (before !== value.conversation_before)
|
|
116
|
+
(0, schema_1.getDb)().prepare('UPDATE syncs SET conversation_before=? WHERE id=?').run(before, id);
|
|
117
|
+
return before;
|
|
118
|
+
}
|
|
119
|
+
/** Initial explicit preparation success only; background work cannot revive or
|
|
120
|
+
* prepare a conversation, and subsequent preparation cannot move its cutoff. */
|
|
121
|
+
function markConversationPrepared(id, before) {
|
|
122
|
+
assertConversationActive(id);
|
|
123
|
+
if (!Number.isFinite(Date.parse(before)) || new Date(before).toISOString() !== before)
|
|
124
|
+
throw new Error('Invalid prepared history cutoff');
|
|
125
|
+
(0, schema_1.getDb)().prepare('UPDATE syncs SET conversation_before=? WHERE id=? AND conversation_before IS NULL').run(before, id);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/sync/conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sync/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sync/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,UAAU,EAAE,MAAM,UAAU,CAAC;AAkChD,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG5C;AAiDD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAI9E;AAQD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAuI1K;AAED,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAqBlD;AAED;yEACyE;AACzE,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAetF;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAQrE"}
|