sensorium-mcp 3.1.0-refactor.9 → 3.1.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/dist/config/agent-settings.d.ts +6 -0
- package/dist/config/agent-settings.d.ts.map +1 -1
- package/dist/config/agent-settings.js +22 -0
- package/dist/config/agent-settings.js.map +1 -1
- package/dist/config/detail-grant.d.ts +39 -0
- package/dist/config/detail-grant.d.ts.map +1 -0
- package/dist/config/detail-grant.js +61 -0
- package/dist/config/detail-grant.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +5 -3
- package/dist/config/index.js.map +1 -1
- package/dist/config/misc-settings.d.ts +2 -0
- package/dist/config/misc-settings.d.ts.map +1 -1
- package/dist/config/misc-settings.js +22 -0
- package/dist/config/misc-settings.js.map +1 -1
- package/dist/config/settings-store.d.ts +41 -2
- package/dist/config/settings-store.d.ts.map +1 -1
- package/dist/config/settings-store.js +151 -14
- package/dist/config/settings-store.js.map +1 -1
- package/dist/dashboard/routes/copilot.d.ts.map +1 -1
- package/dist/dashboard/routes/copilot.js +17 -1
- package/dist/dashboard/routes/copilot.js.map +1 -1
- package/dist/dashboard/routes/settings.d.ts +2 -0
- package/dist/dashboard/routes/settings.d.ts.map +1 -1
- package/dist/dashboard/routes/settings.js +25 -1
- package/dist/dashboard/routes/settings.js.map +1 -1
- package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
- package/dist/dashboard/routes/threads-read.js +15 -3
- package/dist/dashboard/routes/threads-read.js.map +1 -1
- package/dist/dashboard/routes/threads.d.ts.map +1 -1
- package/dist/dashboard/routes/threads.js +13 -4
- package/dist/dashboard/routes/threads.js.map +1 -1
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +14 -5
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/dashboard/spa.html +11 -11
- package/dist/data/daily-marker.js +3 -3
- package/dist/data/daily-marker.js.map +1 -1
- package/dist/data/file-storage.d.ts.map +1 -1
- package/dist/data/file-storage.js +3 -3
- package/dist/data/file-storage.js.map +1 -1
- package/dist/data/memory/bootstrap.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.js +2 -3
- package/dist/data/memory/bootstrap.js.map +1 -1
- package/dist/data/memory/migration-runner.d.ts.map +1 -1
- package/dist/data/memory/migration-runner.js +4 -7
- package/dist/data/memory/migration-runner.js.map +1 -1
- package/dist/data/memory/schema.js +2 -2
- package/dist/data/memory/schema.js.map +1 -1
- package/dist/index.js +67 -21
- package/dist/index.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +21 -2
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/paths.d.ts +29 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +36 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/types.d.ts +1 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/server/factory.js +16 -6
- package/dist/server/factory.js.map +1 -1
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +52 -20
- package/dist/server/http-server.js.map +1 -1
- package/dist/services/agent-spawn.service.d.ts +3 -3
- package/dist/services/agent-spawn.service.d.ts.map +1 -1
- package/dist/services/agent-spawn.service.js +30 -9
- package/dist/services/agent-spawn.service.js.map +1 -1
- package/dist/services/background-runner.d.ts.map +1 -1
- package/dist/services/background-runner.js +22 -12
- package/dist/services/background-runner.js.map +1 -1
- package/dist/services/broker-client.d.ts +209 -0
- package/dist/services/broker-client.d.ts.map +1 -0
- package/dist/services/broker-client.js +359 -0
- package/dist/services/broker-client.js.map +1 -0
- package/dist/services/claude-spawn.service.d.ts +1 -1
- package/dist/services/claude-spawn.service.d.ts.map +1 -1
- package/dist/services/claude-spawn.service.js +25 -25
- package/dist/services/claude-spawn.service.js.map +1 -1
- package/dist/services/codex-spawn.service.d.ts +1 -1
- package/dist/services/codex-spawn.service.d.ts.map +1 -1
- package/dist/services/codex-spawn.service.js +19 -24
- package/dist/services/codex-spawn.service.js.map +1 -1
- package/dist/services/copilot-spawn.service.d.ts +1 -1
- package/dist/services/copilot-spawn.service.d.ts.map +1 -1
- package/dist/services/copilot-spawn.service.js +86 -37
- package/dist/services/copilot-spawn.service.js.map +1 -1
- package/dist/services/dispatcher/broker.d.ts +4 -3
- package/dist/services/dispatcher/broker.d.ts.map +1 -1
- package/dist/services/dispatcher/broker.js +23 -11
- package/dist/services/dispatcher/broker.js.map +1 -1
- package/dist/services/dispatcher/lock.js +2 -2
- package/dist/services/dispatcher/lock.js.map +1 -1
- package/dist/services/dispatcher/poller.d.ts.map +1 -1
- package/dist/services/dispatcher/poller.js +24 -5
- package/dist/services/dispatcher/poller.js.map +1 -1
- package/dist/services/flight-recorder.service.d.ts +37 -0
- package/dist/services/flight-recorder.service.d.ts.map +1 -0
- package/dist/services/flight-recorder.service.js +210 -0
- package/dist/services/flight-recorder.service.js.map +1 -0
- package/dist/services/keeper.service.d.ts +9 -0
- package/dist/services/keeper.service.d.ts.map +1 -1
- package/dist/services/keeper.service.js +198 -39
- package/dist/services/keeper.service.js.map +1 -1
- package/dist/services/maintenance-signal.d.ts.map +1 -1
- package/dist/services/maintenance-signal.js +2 -3
- package/dist/services/maintenance-signal.js.map +1 -1
- package/dist/services/process.service.d.ts +76 -61
- package/dist/services/process.service.d.ts.map +1 -1
- package/dist/services/process.service.js +224 -608
- package/dist/services/process.service.js.map +1 -1
- package/dist/services/reconnect-snapshot.service.js +2 -2
- package/dist/services/reconnect-snapshot.service.js.map +1 -1
- package/dist/services/scheduler.d.ts +1 -0
- package/dist/services/scheduler.d.ts.map +1 -1
- package/dist/services/scheduler.js +69 -14
- package/dist/services/scheduler.js.map +1 -1
- package/dist/services/self-update.service.d.ts +113 -15
- package/dist/services/self-update.service.d.ts.map +1 -1
- package/dist/services/self-update.service.js +382 -109
- package/dist/services/self-update.service.js.map +1 -1
- package/dist/services/spawn-common.d.ts +49 -23
- package/dist/services/spawn-common.d.ts.map +1 -1
- package/dist/services/spawn-common.js +262 -47
- package/dist/services/spawn-common.js.map +1 -1
- package/dist/services/spawn-exit-watcher.d.ts +43 -0
- package/dist/services/spawn-exit-watcher.d.ts.map +1 -0
- package/dist/services/spawn-exit-watcher.js +127 -0
- package/dist/services/spawn-exit-watcher.js.map +1 -0
- package/dist/services/telegram.d.ts +3 -2
- package/dist/services/telegram.d.ts.map +1 -1
- package/dist/services/telegram.js +8 -5
- package/dist/services/telegram.js.map +1 -1
- package/dist/services/thread-health.service.d.ts +1 -1
- package/dist/services/thread-health.service.d.ts.map +1 -1
- package/dist/services/thread-health.service.js +11 -7
- package/dist/services/thread-health.service.js.map +1 -1
- package/dist/services/thread-lifecycle.service.js +2 -2
- package/dist/services/thread-lifecycle.service.js.map +1 -1
- package/dist/services/topic.service.d.ts +1 -1
- package/dist/services/topic.service.d.ts.map +1 -1
- package/dist/services/topic.service.js +3 -2
- package/dist/services/topic.service.js.map +1 -1
- package/dist/services/worker-cleanup.service.d.ts.map +1 -1
- package/dist/services/worker-cleanup.service.js +25 -99
- package/dist/services/worker-cleanup.service.js.map +1 -1
- package/dist/test-bootstrap.d.ts +39 -0
- package/dist/test-bootstrap.d.ts.map +1 -0
- package/dist/test-bootstrap.js +78 -0
- package/dist/test-bootstrap.js.map +1 -0
- package/dist/tools/defs/session-defs.js +1 -1
- package/dist/tools/defs/session-defs.js.map +1 -1
- package/dist/tools/defs/utility-defs.d.ts.map +1 -1
- package/dist/tools/defs/utility-defs.js +4 -3
- package/dist/tools/defs/utility-defs.js.map +1 -1
- package/dist/tools/delegate-tool.d.ts +1 -1
- package/dist/tools/delegate-tool.d.ts.map +1 -1
- package/dist/tools/delegate-tool.js +37 -6
- package/dist/tools/delegate-tool.js.map +1 -1
- package/dist/tools/session-tools.d.ts.map +1 -1
- package/dist/tools/session-tools.js +34 -20
- package/dist/tools/session-tools.js.map +1 -1
- package/dist/tools/utility-tools.js +1 -1
- package/dist/tools/utility-tools.js.map +1 -1
- package/dist/tools/wait/context.d.ts +13 -0
- package/dist/tools/wait/context.d.ts.map +1 -1
- package/dist/tools/wait/message-delivery.d.ts.map +1 -1
- package/dist/tools/wait/message-delivery.js +2 -3
- package/dist/tools/wait/message-delivery.js.map +1 -1
- package/dist/tools/wait/poll-loop.d.ts.map +1 -1
- package/dist/tools/wait/poll-loop.js +8 -1
- package/dist/tools/wait/poll-loop.js.map +1 -1
- package/package.json +2 -2
|
@@ -36,6 +36,12 @@ export declare function isValidCopilotProviderType(v: unknown): v is CopilotProv
|
|
|
36
36
|
/** Model passed to the Copilot CLI via --model / COPILOT_MODEL (native or BYOK). */
|
|
37
37
|
export declare function getCopilotModel(): string;
|
|
38
38
|
export declare function setCopilotModel(model: string): void;
|
|
39
|
+
/** Reasoning effort written to the Copilot CLI's settings.json (low/medium/high). */
|
|
40
|
+
export declare function getCopilotEffortLevel(): string;
|
|
41
|
+
export declare function setCopilotEffortLevel(level: string): void;
|
|
42
|
+
/** Context window tier written to the Copilot CLI's settings.json (normal/long_context). */
|
|
43
|
+
export declare function getCopilotContextTier(): string;
|
|
44
|
+
export declare function setCopilotContextTier(tier: string): void;
|
|
39
45
|
export declare function getCopilotByokConfig(): CopilotByokConfig;
|
|
40
46
|
/**
|
|
41
47
|
* Merge a partial patch into the stored BYOK config and persist. The merged
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-settings.d.ts","sourceRoot":"","sources":["../../src/config/agent-settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,OAAO,CAAC;AAElF,qFAAqF;AACrF,eAAO,MAAM,kBAAkB,EAAE,SAAoB,CAAC;AAEtD,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAM9C,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAE3D;AAED,wBAAgB,YAAY,IAAI,SAAS,CAGxC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAIlD;AAWD,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAG9C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAG9C;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI5D;
|
|
1
|
+
{"version":3,"file":"agent-settings.d.ts","sourceRoot":"","sources":["../../src/config/agent-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,8 @@ export function updateDefaultWorkerModel(model) {
|
|
|
55
55
|
}
|
|
56
56
|
// ─── Copilot provider (BYOK / OpenRouter) settings ──────────────────────────
|
|
57
57
|
const DEFAULT_COPILOT_MODEL = "claude-opus-4-6";
|
|
58
|
+
const DEFAULT_COPILOT_EFFORT_LEVEL = "high";
|
|
59
|
+
const DEFAULT_COPILOT_CONTEXT_TIER = "long_context";
|
|
58
60
|
const DEFAULT_COPILOT_BYOK = {
|
|
59
61
|
enabled: false,
|
|
60
62
|
providerType: "openai",
|
|
@@ -76,6 +78,26 @@ export function setCopilotModel(model) {
|
|
|
76
78
|
s.copilotModel = model;
|
|
77
79
|
});
|
|
78
80
|
}
|
|
81
|
+
/** Reasoning effort written to the Copilot CLI's settings.json (low/medium/high). */
|
|
82
|
+
export function getCopilotEffortLevel() {
|
|
83
|
+
const v = readSettings().copilotEffortLevel;
|
|
84
|
+
return typeof v === "string" && v.length > 0 ? v : DEFAULT_COPILOT_EFFORT_LEVEL;
|
|
85
|
+
}
|
|
86
|
+
export function setCopilotEffortLevel(level) {
|
|
87
|
+
updateSettings((s) => {
|
|
88
|
+
s.copilotEffortLevel = level;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/** Context window tier written to the Copilot CLI's settings.json (normal/long_context). */
|
|
92
|
+
export function getCopilotContextTier() {
|
|
93
|
+
const v = readSettings().copilotContextTier;
|
|
94
|
+
return typeof v === "string" && v.length > 0 ? v : DEFAULT_COPILOT_CONTEXT_TIER;
|
|
95
|
+
}
|
|
96
|
+
export function setCopilotContextTier(tier) {
|
|
97
|
+
updateSettings((s) => {
|
|
98
|
+
s.copilotContextTier = tier;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
79
101
|
/** Coerce an untrusted value into a fully-valid CopilotByokConfig, filling defaults. */
|
|
80
102
|
function normalizeByokConfig(raw) {
|
|
81
103
|
if (!raw || typeof raw !== "object")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-settings.js","sourceRoot":"","sources":["../../src/config/agent-settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMnE,qFAAqF;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAAc,QAAQ,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,SAAS;IACT,QAAQ;IACR,OAAO;IACP,cAAc;IACd,OAAO;CACR,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,CAAU;IACzC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC,SAAS,CAAC;IACnC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;QACnB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAC/C,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAEjD,gFAAgF;AAChF,mEAAmE;AACnE,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAE7C,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC,UAAU,CAAC;IACpC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC,kBAAkB,CAAC;IAC5C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC,kBAAkB,CAAC;IAC5C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;QACnB,CAAC,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;QACnB,CAAC,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAE/E,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-settings.js","sourceRoot":"","sources":["../../src/config/agent-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ephemeral, per-thread "detail grant" — an operator-side opt-in that lets the
|
|
3
|
+
* agent's next long report_progress bubble bypass the hard length cap.
|
|
4
|
+
*
|
|
5
|
+
* This is the ONE trustworthy verbosity signal: it is set by an operator
|
|
6
|
+
* `/detail` command that the SERVER sees (poller.ts), never by a flag the agent
|
|
7
|
+
* sets on itself. A bare `detailed:true` is now ignored — the length check only
|
|
8
|
+
* relaxes while a grant is live. Semantics: "next long message OR N minutes,
|
|
9
|
+
* whichever comes first" — consumed when the first over-cap message passes, else
|
|
10
|
+
* it expires.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately in-memory only: a ~30-minute grant surviving a server restart has
|
|
13
|
+
* no value, so it is never persisted to settings.json.
|
|
14
|
+
*/
|
|
15
|
+
/** Length of a granted window, in minutes. Configurable via DETAIL_GRANT_MINUTES. */
|
|
16
|
+
export declare const DETAIL_GRANT_MINUTES: number;
|
|
17
|
+
/**
|
|
18
|
+
* Open a detail window for a thread: valid until the next long message or
|
|
19
|
+
* DETAIL_GRANT_MINUTES from now, whichever comes first. Overwrites any existing
|
|
20
|
+
* grant (a fresh `/detail` restarts the clock).
|
|
21
|
+
*/
|
|
22
|
+
export declare function grantDetailWindow(threadId: number, nowMs?: number): void;
|
|
23
|
+
/** Drop a thread's grant immediately (operator `/detail off`). Idempotent. */
|
|
24
|
+
export declare function revokeDetailGrant(threadId: number): void;
|
|
25
|
+
/**
|
|
26
|
+
* Non-consuming peek: is there a live (unexpired) grant for this thread? Lazily
|
|
27
|
+
* evicts an expired entry so the Map never accumulates stale grants.
|
|
28
|
+
*
|
|
29
|
+
* `nowMs` defaults to `Date.now()`; it is injectable purely so the window's
|
|
30
|
+
* expiry is testable without stubbing the clock.
|
|
31
|
+
*/
|
|
32
|
+
export declare function isDetailGrantActive(threadId: number, nowMs?: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Consume the grant: if active, delete it and return true (one long message is
|
|
35
|
+
* allowed through). If inactive or expired, return false and leave nothing
|
|
36
|
+
* behind. One-shot — a second long message needs a fresh `/detail`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function consumeDetailGrant(threadId: number, nowMs?: number): boolean;
|
|
39
|
+
//# sourceMappingURL=detail-grant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-grant.d.ts","sourceRoot":"","sources":["../../src/config/detail-grant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,QACkE,CAAC;AAUpG;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,IAAI,CAEpF;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,OAAO,CAQzF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,OAAO,CAIxF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ephemeral, per-thread "detail grant" — an operator-side opt-in that lets the
|
|
3
|
+
* agent's next long report_progress bubble bypass the hard length cap.
|
|
4
|
+
*
|
|
5
|
+
* This is the ONE trustworthy verbosity signal: it is set by an operator
|
|
6
|
+
* `/detail` command that the SERVER sees (poller.ts), never by a flag the agent
|
|
7
|
+
* sets on itself. A bare `detailed:true` is now ignored — the length check only
|
|
8
|
+
* relaxes while a grant is live. Semantics: "next long message OR N minutes,
|
|
9
|
+
* whichever comes first" — consumed when the first over-cap message passes, else
|
|
10
|
+
* it expires.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately in-memory only: a ~30-minute grant surviving a server restart has
|
|
13
|
+
* no value, so it is never persisted to settings.json.
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_GRANT_MINUTES = 30;
|
|
16
|
+
const rawGrantMinutes = parseFloat(process.env.DETAIL_GRANT_MINUTES ?? "");
|
|
17
|
+
/** Length of a granted window, in minutes. Configurable via DETAIL_GRANT_MINUTES. */
|
|
18
|
+
export const DETAIL_GRANT_MINUTES = Number.isFinite(rawGrantMinutes) && rawGrantMinutes > 0 ? rawGrantMinutes : DEFAULT_GRANT_MINUTES;
|
|
19
|
+
/** threadId → active grant. Absent key = no grant. */
|
|
20
|
+
const grants = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Open a detail window for a thread: valid until the next long message or
|
|
23
|
+
* DETAIL_GRANT_MINUTES from now, whichever comes first. Overwrites any existing
|
|
24
|
+
* grant (a fresh `/detail` restarts the clock).
|
|
25
|
+
*/
|
|
26
|
+
export function grantDetailWindow(threadId, nowMs = Date.now()) {
|
|
27
|
+
grants.set(threadId, { expiresAt: nowMs + DETAIL_GRANT_MINUTES * 60_000 });
|
|
28
|
+
}
|
|
29
|
+
/** Drop a thread's grant immediately (operator `/detail off`). Idempotent. */
|
|
30
|
+
export function revokeDetailGrant(threadId) {
|
|
31
|
+
grants.delete(threadId);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Non-consuming peek: is there a live (unexpired) grant for this thread? Lazily
|
|
35
|
+
* evicts an expired entry so the Map never accumulates stale grants.
|
|
36
|
+
*
|
|
37
|
+
* `nowMs` defaults to `Date.now()`; it is injectable purely so the window's
|
|
38
|
+
* expiry is testable without stubbing the clock.
|
|
39
|
+
*/
|
|
40
|
+
export function isDetailGrantActive(threadId, nowMs = Date.now()) {
|
|
41
|
+
const grant = grants.get(threadId);
|
|
42
|
+
if (!grant)
|
|
43
|
+
return false;
|
|
44
|
+
if (grant.expiresAt <= nowMs) {
|
|
45
|
+
grants.delete(threadId);
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Consume the grant: if active, delete it and return true (one long message is
|
|
52
|
+
* allowed through). If inactive or expired, return false and leave nothing
|
|
53
|
+
* behind. One-shot — a second long message needs a fresh `/detail`.
|
|
54
|
+
*/
|
|
55
|
+
export function consumeDetailGrant(threadId, nowMs = Date.now()) {
|
|
56
|
+
if (!isDetailGrantActive(threadId, nowMs))
|
|
57
|
+
return false;
|
|
58
|
+
grants.delete(threadId);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=detail-grant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-grant.js","sourceRoot":"","sources":["../../src/config/detail-grant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;AAC3E,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAC/B,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAOpG,sDAAsD;AACtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;IAC5E,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,GAAG,oBAAoB,GAAG,MAAM,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;IAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;IAC7E,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export * from "./mcp-settings.js";
|
|
|
10
10
|
export * from "./agent-templates.js";
|
|
11
11
|
export * from "./keep-alive-settings.js";
|
|
12
12
|
export * from "./misc-settings.js";
|
|
13
|
+
export * from "./detail-grant.js";
|
|
14
|
+
export declare const TELEGRAM_API_BASE_URL: string;
|
|
13
15
|
export declare const AUTONOMOUS_MODE: boolean;
|
|
14
16
|
export declare const TEMPLATES_DIR: string;
|
|
15
17
|
export declare const config: AppConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AASlC,eAAO,MAAM,qBAAqB,QAC+B,CAAC;AAGlE,eAAO,MAAM,eAAe,SAAyC,CAAC;AA8BtE,eAAO,MAAM,aAAa,QAAwB,CAAC;AAKnD,eAAO,MAAM,MAAM,EAAE,SAWpB,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -6,20 +6,21 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { createRequire } from "node:module";
|
|
8
8
|
import { mkdirSync } from "node:fs";
|
|
9
|
-
import { homedir } from "node:os";
|
|
10
|
-
import { join } from "node:path";
|
|
11
9
|
import { log } from "../lib/logger.js";
|
|
10
|
+
import { dataPath } from "../lib/paths.js";
|
|
12
11
|
import { getWaitTimeoutMinutes } from "./misc-settings.js";
|
|
13
12
|
export * from "./agent-settings.js";
|
|
14
13
|
export * from "./mcp-settings.js";
|
|
15
14
|
export * from "./agent-templates.js";
|
|
16
15
|
export * from "./keep-alive-settings.js";
|
|
17
16
|
export * from "./misc-settings.js";
|
|
17
|
+
export * from "./detail-grant.js";
|
|
18
18
|
const esmRequire = createRequire(import.meta.url);
|
|
19
19
|
const { version: PKG_VERSION } = esmRequire("../../package.json");
|
|
20
20
|
// ─── Environment variables ──────────────────────────────────────────────────
|
|
21
21
|
const TELEGRAM_TOKEN = process.env.TELEGRAM_TOKEN ?? "";
|
|
22
22
|
const TELEGRAM_CHAT_ID = process.env.TELEGRAM_CHAT_ID ?? "";
|
|
23
|
+
export const TELEGRAM_API_BASE_URL = process.env.TELEGRAM_API_BASE_URL ?? "https://api.telegram.org";
|
|
23
24
|
const OPENAI_API_KEY = process.env.OPENAI_API_KEY ?? "";
|
|
24
25
|
const VOICE_ANALYSIS_URL = process.env.VOICE_ANALYSIS_URL ?? "";
|
|
25
26
|
export const AUTONOMOUS_MODE = process.env.AUTONOMOUS_MODE === "true";
|
|
@@ -41,12 +42,13 @@ if (process.env.TRANSCRIPTION_BASE_URL) {
|
|
|
41
42
|
log.info(`Transcription provider configured: ${process.env.TRANSCRIPTION_BASE_URL} (model: ${model})`);
|
|
42
43
|
}
|
|
43
44
|
// ─── Templates directory ────────────────────────────────────────────────────
|
|
44
|
-
export const TEMPLATES_DIR =
|
|
45
|
+
export const TEMPLATES_DIR = dataPath("templates");
|
|
45
46
|
mkdirSync(TEMPLATES_DIR, { recursive: true });
|
|
46
47
|
// ─── Exported config object ─────────────────────────────────────────────────
|
|
47
48
|
export const config = {
|
|
48
49
|
TELEGRAM_TOKEN,
|
|
49
50
|
TELEGRAM_CHAT_ID,
|
|
51
|
+
TELEGRAM_API_BASE_URL,
|
|
50
52
|
OPENAI_API_KEY,
|
|
51
53
|
VOICE_ANALYSIS_URL,
|
|
52
54
|
get WAIT_TIMEOUT_MINUTES() {
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAElC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,oBAAoB,CAAwB,CAAC;AAEzF,+EAA+E;AAE/E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;AACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;AAC5D,MAAM,CAAC,MAAM,qBAAqB,GAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,0BAA0B,CAAC;AAClE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;AACxD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;AAEtE,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;AACjF,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CACnC,GAAG,EACH,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CACnE,CAAC;AAEF,+EAA+E;AAE/E,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzC,GAAG,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;IACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,cAAc,EAAE,CAAC;IACpB,GAAG,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;AAC/E,CAAC;AACD,IAAI,kBAAkB,EAAE,CAAC;IACvB,GAAG,CAAC,IAAI,CAAC,sCAAsC,kBAAkB,EAAE,CAAC,CAAC;AACvE,CAAC;AACD,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,WAAW,CAAC;IAC7D,GAAG,CAAC,IAAI,CACN,sCAAsC,OAAO,CAAC,GAAG,CAAC,sBAAsB,YAAY,KAAK,GAAG,CAC7F,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AACnD,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAE9C,+EAA+E;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAc;IAC/B,cAAc;IACd,gBAAgB;IAChB,qBAAqB;IACrB,cAAc;IACd,kBAAkB;IAClB,IAAI,oBAAoB;QACtB,OAAO,qBAAqB,EAAE,CAAC;IACjC,CAAC;IACD,oBAAoB;IACpB,WAAW;CACZ,CAAC"}
|
|
@@ -24,6 +24,8 @@ export declare function setThreadConversationMode(threadId: number, mode: Conver
|
|
|
24
24
|
/** Number of recent episodes injected into the bootstrap as "Recent Conversation". */
|
|
25
25
|
export declare function getBootstrapMessageCount(): number;
|
|
26
26
|
export declare function setBootstrapMessageCount(count: number): void;
|
|
27
|
+
export declare function getReplyMaxChars(): number;
|
|
28
|
+
export declare function setReplyMaxChars(chars: number): void;
|
|
27
29
|
export declare function getWaitTimeoutMinutes(): number;
|
|
28
30
|
export declare function setWaitTimeoutMinutes(minutes: number): void;
|
|
29
31
|
export interface PredefinedPrompt {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc-settings.d.ts","sourceRoot":"","sources":["../../src/config/misc-settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,eAAO,MAAM,WAAW,6CAA8C,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAE3D;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CASnD;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAM3D;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAItD;AAID,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnD,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAO5E;AAED,+CAA+C;AAC/C,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAMxF;AAOD,sFAAsF;AACtF,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM5D;AAQD,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM3D;AAQD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,yEAAyE;AACzE,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAY3E;AAED,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAInE;AAID,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAI3D;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,SAAS,CAK5D"}
|
|
1
|
+
{"version":3,"file":"misc-settings.d.ts","sourceRoot":"","sources":["../../src/config/misc-settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,eAAO,MAAM,WAAW,6CAA8C,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAE3D;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CASnD;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAM3D;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAItD;AAID,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnD,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAO5E;AAED,+CAA+C;AAC/C,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAMxF;AAOD,sFAAsF;AACtF,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM5D;AAYD,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMpD;AAQD,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM3D;AAQD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,yEAAyE;AACzE,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAY3E;AAED,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAInE;AAID,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAI3D;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,SAAS,CAK5D"}
|
|
@@ -72,6 +72,28 @@ export function setBootstrapMessageCount(count) {
|
|
|
72
72
|
s.bootstrapMessageCount = clamped;
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
|
+
// ─── Reply length limit ─────────────────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* Hard character ceiling for a single `report_progress` text bubble. Above this
|
|
78
|
+
* the message is rejected (agent must shorten or use send_voice) and the agent
|
|
79
|
+
* is told the limit in its per-turn reminder so it adapts proactively. The soft
|
|
80
|
+
* warn threshold is derived as half of this. Dashboard-configurable.
|
|
81
|
+
*/
|
|
82
|
+
const DEFAULT_REPLY_MAX_CHARS = 300;
|
|
83
|
+
export function getReplyMaxChars() {
|
|
84
|
+
const v = readSettings().replyMaxChars;
|
|
85
|
+
if (typeof v === "number" && Number.isFinite(v) && v >= 1)
|
|
86
|
+
return Math.round(v);
|
|
87
|
+
return DEFAULT_REPLY_MAX_CHARS;
|
|
88
|
+
}
|
|
89
|
+
export function setReplyMaxChars(chars) {
|
|
90
|
+
const clamped = Math.max(1, Math.round(chars));
|
|
91
|
+
if (!Number.isFinite(clamped))
|
|
92
|
+
return;
|
|
93
|
+
updateSettings((s) => {
|
|
94
|
+
s.replyMaxChars = clamped;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
75
97
|
// ——— Wait timeout setting ———————————————————————————————————————————
|
|
76
98
|
const DEFAULT_WAIT_TIMEOUT_MINUTES = 1440;
|
|
77
99
|
const envWaitTimeoutMinutes = parseInt(process.env.WAIT_TIMEOUT_MINUTES ?? "", 10);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc-settings.js","sourceRoot":"","sources":["../../src/config/misc-settings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"misc-settings.js","sourceRoot":"","sources":["../../src/config/misc-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,48 @@
|
|
|
2
2
|
* Settings persistence core — atomic read/modify/write of settings.json
|
|
3
3
|
* under the user's home directory. All config domain modules go through
|
|
4
4
|
* readSettings/updateSettings; nothing else touches the file directly.
|
|
5
|
+
*
|
|
6
|
+
* Fail-closed policy (D5 in the 2026-07-26 process-lifecycle plan): a corrupt
|
|
7
|
+
* settings.json must never be silently replaced by `{}` — a single bad read
|
|
8
|
+
* followed by any write used to wipe the whole config. Instead the corrupt
|
|
9
|
+
* file is quarantined, and reads fall back to settings.json.bak, then to the
|
|
10
|
+
* in-memory last-known-good copy, and only throw when no trusted source
|
|
11
|
+
* exists at all.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Read and parse the settings file.
|
|
15
|
+
*
|
|
16
|
+
* - ENOENT → `{}` (legitimate first run).
|
|
17
|
+
* - Any other failure → quarantine the corrupt file, then fall back to
|
|
18
|
+
* settings.json.bak (restoring it as the live file), then to the in-memory
|
|
19
|
+
* last-known-good copy (also restored as the live file, so the ENOENT
|
|
20
|
+
* fast-path never fabricates {} on the read after a quarantine). If no
|
|
21
|
+
* trusted source exists, THROW — callers must
|
|
22
|
+
* not proceed on a fabricated empty config, because a later write would
|
|
23
|
+
* persist the wipe.
|
|
5
24
|
*/
|
|
6
|
-
/** Read and parse the settings file, returning an empty object on any failure. */
|
|
7
25
|
export declare function readSettings(): Record<string, unknown>;
|
|
8
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Non-destructive boot-time config health check. Returns a description of a
|
|
28
|
+
* fatal problem, or null when boot may proceed. Unlike readSettings() it never
|
|
29
|
+
* quarantines or writes anything, so a supervisor restart loop keeps hitting
|
|
30
|
+
* the same state (and the same loud message) instead of silently degrading to
|
|
31
|
+
* an ENOENT→{} read on the second boot.
|
|
32
|
+
*/
|
|
33
|
+
export declare function checkSettingsAtBoot(): string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Boot guard against the corrupt-config crash-loop. readSettings() rightly
|
|
36
|
+
* throws when settings.json is corrupt and no trusted fallback exists, but at
|
|
37
|
+
* boot (lastGoodSettings is still null) that surfaces as an opaque uncaught
|
|
38
|
+
* throw from whichever of its many callers runs first — the supervisor
|
|
39
|
+
* restarts, and the loop repeats with no operator signal. Decide explicitly
|
|
40
|
+
* instead: log an actionable line and exit before any config consumer loads.
|
|
41
|
+
*/
|
|
42
|
+
export declare function assertSettingsSafeAtBoot(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Read settings, apply a mutator, and atomically persist the result.
|
|
45
|
+
* Propagates readSettings failures: a mutation is never applied to (and never
|
|
46
|
+
* persists) a fabricated empty config after a failed read.
|
|
47
|
+
*/
|
|
9
48
|
export declare function updateSettings(mutator: (s: Record<string, unknown>) => void): void;
|
|
10
49
|
//# sourceMappingURL=settings-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-store.d.ts","sourceRoot":"","sources":["../../src/config/settings-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"settings-store.d.ts","sourceRoot":"","sources":["../../src/config/settings-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiFH;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+CtD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAoBnD;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,CAIlF"}
|
|
@@ -2,13 +2,26 @@
|
|
|
2
2
|
* Settings persistence core — atomic read/modify/write of settings.json
|
|
3
3
|
* under the user's home directory. All config domain modules go through
|
|
4
4
|
* readSettings/updateSettings; nothing else touches the file directly.
|
|
5
|
+
*
|
|
6
|
+
* Fail-closed policy (D5 in the 2026-07-26 process-lifecycle plan): a corrupt
|
|
7
|
+
* settings.json must never be silently replaced by `{}` — a single bad read
|
|
8
|
+
* followed by any write used to wipe the whole config. Instead the corrupt
|
|
9
|
+
* file is quarantined, and reads fall back to settings.json.bak, then to the
|
|
10
|
+
* in-memory last-known-good copy, and only throw when no trusted source
|
|
11
|
+
* exists at all.
|
|
5
12
|
*/
|
|
6
13
|
import { chmodSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
7
|
-
import { homedir } from "node:os";
|
|
8
|
-
import { join } from "node:path";
|
|
9
14
|
import { log } from "../lib/logger.js";
|
|
10
|
-
|
|
15
|
+
import { dataPath } from "../lib/paths.js";
|
|
16
|
+
const SETTINGS_PATH = dataPath("settings.json");
|
|
11
17
|
const SETTINGS_TMP_PATH = SETTINGS_PATH + ".tmp";
|
|
18
|
+
const SETTINGS_BAK_PATH = SETTINGS_PATH + ".bak";
|
|
19
|
+
/**
|
|
20
|
+
* Last successfully parsed settings. Fallback of last resort when both
|
|
21
|
+
* settings.json and its backup are unreadable; never written to disk except
|
|
22
|
+
* as the base of an explicit updateSettings mutation.
|
|
23
|
+
*/
|
|
24
|
+
let lastGoodSettings = null;
|
|
12
25
|
/**
|
|
13
26
|
* Rename with a short bounded retry. On Windows, antivirus/indexer services
|
|
14
27
|
* transiently lock the destination, making renameSync throw EPERM/EACCES even
|
|
@@ -32,31 +45,155 @@ function renameSyncRetry(from, to) {
|
|
|
32
45
|
}
|
|
33
46
|
}
|
|
34
47
|
}
|
|
35
|
-
|
|
36
|
-
function atomicWriteSettings(settings) {
|
|
37
|
-
writeFileSync(SETTINGS_TMP_PATH, JSON.stringify(settings, null, 2), "utf-8");
|
|
38
|
-
renameSyncRetry(SETTINGS_TMP_PATH, SETTINGS_PATH);
|
|
48
|
+
function restrictToOwner(path) {
|
|
39
49
|
// settings.json holds MCP auth headers/tokens — restrict to owner (no-op on
|
|
40
50
|
// Windows NTFS, effective on POSIX where the server may also run).
|
|
41
51
|
try {
|
|
42
|
-
chmodSync(
|
|
52
|
+
chmodSync(path, 0o600);
|
|
43
53
|
}
|
|
44
54
|
catch {
|
|
45
55
|
/* best-effort */
|
|
46
56
|
}
|
|
47
57
|
}
|
|
48
|
-
/**
|
|
58
|
+
/** Atomically persist settings: write to .tmp then rename over the original. */
|
|
59
|
+
function atomicWriteSettings(settings) {
|
|
60
|
+
const json = JSON.stringify(settings, null, 2);
|
|
61
|
+
writeFileSync(SETTINGS_TMP_PATH, json, "utf-8");
|
|
62
|
+
renameSyncRetry(SETTINGS_TMP_PATH, SETTINGS_PATH);
|
|
63
|
+
restrictToOwner(SETTINGS_PATH);
|
|
64
|
+
lastGoodSettings = structuredClone(settings);
|
|
65
|
+
// Backup written only after a successful primary write, so it always holds
|
|
66
|
+
// a complete, parseable snapshot (at worst one version behind). Written via
|
|
67
|
+
// the same tmp+rename as the primary — a torn .bak would defeat its whole
|
|
68
|
+
// purpose as the recovery source for a torn settings.json.
|
|
69
|
+
try {
|
|
70
|
+
const bakTmp = SETTINGS_BAK_PATH + ".tmp";
|
|
71
|
+
writeFileSync(bakTmp, json, "utf-8");
|
|
72
|
+
renameSyncRetry(bakTmp, SETTINGS_BAK_PATH);
|
|
73
|
+
restrictToOwner(SETTINGS_BAK_PATH);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
log.warn(`[config] Failed to write settings backup: ${err}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Move the unreadable settings file aside so it is preserved for forensics. */
|
|
80
|
+
function quarantineCorruptSettings() {
|
|
81
|
+
const quarantinePath = `${SETTINGS_PATH}.corrupt-${Date.now()}`;
|
|
82
|
+
try {
|
|
83
|
+
renameSyncRetry(SETTINGS_PATH, quarantinePath);
|
|
84
|
+
return quarantinePath;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
log.warn(`[config] Failed to quarantine corrupt settings: ${err}`);
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Read and parse the settings file.
|
|
93
|
+
*
|
|
94
|
+
* - ENOENT → `{}` (legitimate first run).
|
|
95
|
+
* - Any other failure → quarantine the corrupt file, then fall back to
|
|
96
|
+
* settings.json.bak (restoring it as the live file), then to the in-memory
|
|
97
|
+
* last-known-good copy (also restored as the live file, so the ENOENT
|
|
98
|
+
* fast-path never fabricates {} on the read after a quarantine). If no
|
|
99
|
+
* trusted source exists, THROW — callers must
|
|
100
|
+
* not proceed on a fabricated empty config, because a later write would
|
|
101
|
+
* persist the wipe.
|
|
102
|
+
*/
|
|
49
103
|
export function readSettings() {
|
|
50
104
|
try {
|
|
51
|
-
|
|
105
|
+
const parsed = JSON.parse(readFileSync(SETTINGS_PATH, "utf-8"));
|
|
106
|
+
lastGoodSettings = structuredClone(parsed);
|
|
107
|
+
return parsed;
|
|
52
108
|
}
|
|
53
109
|
catch (err) {
|
|
54
|
-
if (err?.code
|
|
55
|
-
|
|
56
|
-
|
|
110
|
+
if (err?.code === "ENOENT")
|
|
111
|
+
return {};
|
|
112
|
+
log.error(`[config] settings.json is unreadable (NOT substituting empty config): ${err}`);
|
|
113
|
+
const quarantined = quarantineCorruptSettings();
|
|
114
|
+
if (quarantined)
|
|
115
|
+
log.error(`[config] Corrupt settings quarantined at ${quarantined}`);
|
|
116
|
+
try {
|
|
117
|
+
const backup = JSON.parse(readFileSync(SETTINGS_BAK_PATH, "utf-8"));
|
|
118
|
+
atomicWriteSettings(backup);
|
|
119
|
+
log.error(`[config] Restored settings.json from backup ${SETTINGS_BAK_PATH}`);
|
|
120
|
+
return backup;
|
|
121
|
+
}
|
|
122
|
+
catch (bakErr) {
|
|
123
|
+
if (bakErr?.code !== "ENOENT")
|
|
124
|
+
log.error(`[config] Settings backup is also unreadable: ${bakErr}`);
|
|
125
|
+
}
|
|
126
|
+
if (lastGoodSettings !== null) {
|
|
127
|
+
log.error(`[config] Serving in-memory last-known-good settings (disk copies unreadable)`);
|
|
128
|
+
const restored = structuredClone(lastGoodSettings);
|
|
129
|
+
// Restore the live file too, mirroring the .bak branch. The corrupt file
|
|
130
|
+
// was just quarantined away, so without this the NEXT read hits the
|
|
131
|
+
// ENOENT fast-path, returns {}, and a subsequent updateSettings persists
|
|
132
|
+
// the wipe — the invariant is: after any non-throwing readSettings(),
|
|
133
|
+
// settings.json exists on disk and equals what was returned.
|
|
134
|
+
try {
|
|
135
|
+
atomicWriteSettings(restored);
|
|
136
|
+
}
|
|
137
|
+
catch (writeErr) {
|
|
138
|
+
log.error(`[config] Failed to restore settings.json from last-known-good: ${writeErr}`);
|
|
139
|
+
}
|
|
140
|
+
return restored;
|
|
141
|
+
}
|
|
142
|
+
throw new Error(`settings.json is corrupt and no backup or last-known-good copy exists; ` +
|
|
143
|
+
`refusing to substitute an empty config (corrupt file ${quarantined ?? "left in place"})`, { cause: err });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Non-destructive boot-time config health check. Returns a description of a
|
|
148
|
+
* fatal problem, or null when boot may proceed. Unlike readSettings() it never
|
|
149
|
+
* quarantines or writes anything, so a supervisor restart loop keeps hitting
|
|
150
|
+
* the same state (and the same loud message) instead of silently degrading to
|
|
151
|
+
* an ENOENT→{} read on the second boot.
|
|
152
|
+
*/
|
|
153
|
+
export function checkSettingsAtBoot() {
|
|
154
|
+
let primaryErr;
|
|
155
|
+
try {
|
|
156
|
+
JSON.parse(readFileSync(SETTINGS_PATH, "utf-8"));
|
|
157
|
+
return null; // parseable — normal boot
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
if (err?.code === "ENOENT")
|
|
161
|
+
return null; // genuine first run
|
|
162
|
+
primaryErr = err;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
JSON.parse(readFileSync(SETTINGS_BAK_PATH, "utf-8"));
|
|
166
|
+
return null; // corrupt primary but trusted backup — readSettings() will restore it
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
/* backup also missing/unreadable */
|
|
57
170
|
}
|
|
171
|
+
return (`settings.json is corrupt and no trusted backup exists — refusing to fabricate ` +
|
|
172
|
+
`an empty config. Fix or delete ${SETTINGS_PATH} (and ${SETTINGS_BAK_PATH}) before ` +
|
|
173
|
+
`restarting; the corrupt file has been left in place untouched. Parse error: ${primaryErr}`);
|
|
58
174
|
}
|
|
59
|
-
/**
|
|
175
|
+
/**
|
|
176
|
+
* Boot guard against the corrupt-config crash-loop. readSettings() rightly
|
|
177
|
+
* throws when settings.json is corrupt and no trusted fallback exists, but at
|
|
178
|
+
* boot (lastGoodSettings is still null) that surfaces as an opaque uncaught
|
|
179
|
+
* throw from whichever of its many callers runs first — the supervisor
|
|
180
|
+
* restarts, and the loop repeats with no operator signal. Decide explicitly
|
|
181
|
+
* instead: log an actionable line and exit before any config consumer loads.
|
|
182
|
+
*/
|
|
183
|
+
export function assertSettingsSafeAtBoot() {
|
|
184
|
+
const problem = checkSettingsAtBoot();
|
|
185
|
+
if (problem === null)
|
|
186
|
+
return;
|
|
187
|
+
const msg = `[config] FATAL AT BOOT: ${problem}`;
|
|
188
|
+
log.error(msg);
|
|
189
|
+
console.error(msg);
|
|
190
|
+
process.exit(78); // EX_CONFIG (sysexits): distinguishable from a generic crash
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Read settings, apply a mutator, and atomically persist the result.
|
|
194
|
+
* Propagates readSettings failures: a mutation is never applied to (and never
|
|
195
|
+
* persists) a fabricated empty config after a failed read.
|
|
196
|
+
*/
|
|
60
197
|
export function updateSettings(mutator) {
|
|
61
198
|
const settings = readSettings();
|
|
62
199
|
mutator(settings);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/config/settings-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/config/settings-store.ts"],"names":[],"mappings":"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"}
|