tomo-ai 0.8.1 → 0.8.2
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 +9 -0
- package/README.md +11 -0
- package/defaults/skills/system/CONFIG.md +6 -0
- package/dist/cli/start.js +1 -1
- package/dist/cli/start.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -1
- package/dist/config.js.map +1 -1
- package/dist/continuity-script.d.ts +9 -0
- package/dist/continuity-script.d.ts.map +1 -0
- package/dist/continuity-script.js +179 -0
- package/dist/continuity-script.js.map +1 -0
- package/dist/continuity.d.ts +8 -1
- package/dist/continuity.d.ts.map +1 -1
- package/dist/continuity.js +21 -8
- package/dist/continuity.js.map +1 -1
- package/dist/lcm/blocks.d.ts +36 -0
- package/dist/lcm/blocks.d.ts.map +1 -1
- package/dist/lcm/blocks.js +184 -2
- package/dist/lcm/blocks.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.8.2 (2026-06-08)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **Continuity script hook.** `~/.tomo/config.json` can now include an optional `continuityScript` path or object. On each scheduled heartbeat or manual `tomo continuity` trigger, Tomo runs the script once, captures bounded stdout/stderr or failure status, and appends that result to the normal continuity prompt before sending it to the agent.
|
|
10
|
+
- **LCM global fresh tail (cross-day warm context)** (#131). New `config.lcm.globalFreshTail` (default `false` — today-only behavior unchanged when unset) makes the LCM fresh tail a session-global boundary instead of a per-day one. With it on, the newest N conversational turns stay warm across day boundaries, so a new day starts with warm raw context instead of cold-starting from summaries. Implemented without a `compactSession` API change: daily rollups simply stop their range before the warm suffix, and `findDuePromotions` defers promotion of raw inside the window (serving as both the no-re-nudge guard and the GC trigger). A new `isWarmTailCandidate` classifier counts real user/assistant turns while ignoring cron/heartbeat injections and tool machinery; retention is positional so interleaved events and the `parentUuid` chain are preserved.
|
|
11
|
+
|
|
3
12
|
## 0.8.1 (2026-06-07)
|
|
4
13
|
|
|
5
14
|
### Bug fixes
|
package/README.md
CHANGED
|
@@ -225,6 +225,12 @@ Run `tomo config` for interactive setup, or edit `~/.tomo/config.json` directly:
|
|
|
225
225
|
},
|
|
226
226
|
"maxTurns": 50,
|
|
227
227
|
"saveInboundImages": true,
|
|
228
|
+
"continuity": true,
|
|
229
|
+
"continuityScript": {
|
|
230
|
+
"path": "~/bin/tomo-continuity.sh",
|
|
231
|
+
"timeoutMs": 30000,
|
|
232
|
+
"maxOutputChars": 8000
|
|
233
|
+
},
|
|
228
234
|
"groupSecret": "tomo-xxxxxxxx",
|
|
229
235
|
"lcm": {
|
|
230
236
|
"nudgeAtPct": 70,
|
|
@@ -246,8 +252,13 @@ Environment variables override config file values:
|
|
|
246
252
|
| `TOMO_LITELLM_MODE` | Optional LiteLLM mode: `anthropic-compatible` or `chatgpt-subscription` |
|
|
247
253
|
| `TOMO_WORKSPACE` | Override workspace directory |
|
|
248
254
|
| `TOMO_MAX_TURNS` | Override per-turn tool-use ceiling (default: `50`) |
|
|
255
|
+
| `TOMO_CONTINUITY_SCRIPT` | Override the optional continuity script path |
|
|
256
|
+
| `TOMO_CONTINUITY_SCRIPT_TIMEOUT_MS` | Override continuity script timeout (default: `30000`) |
|
|
257
|
+
| `TOMO_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS` | Override continuity script stdout/stderr cap (default: `8000`) |
|
|
249
258
|
| `LOG_LEVEL` | Log level (default: `debug`) |
|
|
250
259
|
|
|
260
|
+
`continuityScript` can also be a simple path string, e.g. `"continuityScript": "~/bin/tomo-continuity.sh"`. Relative paths resolve under `~/.tomo`; the script runs once per scheduled heartbeat and manual `tomo continuity` trigger, and its stdout/stderr or failure status is appended to the normal continuity prompt.
|
|
261
|
+
|
|
251
262
|
### LiteLLM / ChatGPT Subscription Models
|
|
252
263
|
|
|
253
264
|
Tomo still runs through Claude Agent SDK, but you can point the SDK at a local LiteLLM proxy and select a LiteLLM model name such as `chatgpt/gpt-5.5`. This keeps Tomo's Claude SDK sessions, memory, workspace, MCP tools, and LCM behavior while LiteLLM translates Anthropic `/v1/messages` streaming calls to the ChatGPT subscription backend.
|
|
@@ -11,6 +11,11 @@ Before direct edits, copy `~/.tomo/config.json` to `~/.tomo/config.json.bak`. Ch
|
|
|
11
11
|
"model": "claude-sonnet-4-6[1m]",
|
|
12
12
|
"city": "Seattle",
|
|
13
13
|
"continuity": false,
|
|
14
|
+
"continuityScript": {
|
|
15
|
+
"path": "~/bin/tomo-continuity.sh",
|
|
16
|
+
"timeoutMs": 30000,
|
|
17
|
+
"maxOutputChars": 8000
|
|
18
|
+
},
|
|
14
19
|
"groupSecret": "tomo-a1b2c3d4",
|
|
15
20
|
"channels": {
|
|
16
21
|
"telegram": {
|
|
@@ -74,6 +79,7 @@ Before direct edits, copy `~/.tomo/config.json` to `~/.tomo/config.json.bak`. Ch
|
|
|
74
79
|
| `model` | string | Claude model IDs/aliases, or a LiteLLM `provider/model` name such as `chatgpt/gpt-5.5`. Default model for every session. |
|
|
75
80
|
| `city` | string \| null | Any city name (e.g. `"Seattle"`). Used for weather in continuity pings. `null` or missing = no weather. |
|
|
76
81
|
| `continuity` | boolean | `true` / `false`. Enables periodic proactive heartbeats. Off by default. |
|
|
82
|
+
| `continuityScript` | string \| object \| null | Optional script run once per scheduled continuity heartbeat and manual `tomo continuity` trigger before the prompt is sent to Tomo. Use a string path (`"~/bin/tomo-continuity.sh"`) or `{ "path": "...", "timeoutMs": 30000, "maxOutputChars": 8000 }`. Relative paths resolve under `~/.tomo`; `~`, `$VAR`, and `${VAR}` expand. The script runs as the Tomo OS user with `TOMO_CONTINUITY=true`; stdout/stderr are appended to the heartbeat prompt and capped separately by `maxOutputChars`. Non-zero exits, missing files, and timeouts are passed to Tomo as script status instead of aborting the heartbeat. |
|
|
77
83
|
| `groupSecret` | string \| null | Passphrase users send in a group chat to activate Tomo there. `null` disables group chats entirely. |
|
|
78
84
|
| `channels.telegram.token` | string | BotFather token (`123456:...`). Required to enable the Telegram channel. |
|
|
79
85
|
| `channels.telegram.allowlist` | string[] | Telegram user IDs (as strings) permitted to DM the bot. Identity-bound chatIds are auto-allowed even if missing here. |
|
package/dist/cli/start.js
CHANGED
|
@@ -117,7 +117,7 @@ async function startForeground() {
|
|
|
117
117
|
const petScheduler = new PetScheduler(agent);
|
|
118
118
|
// Start continuity runner if enabled
|
|
119
119
|
const { ContinuityRunner } = await import("../continuity.js");
|
|
120
|
-
const continuity = new ContinuityRunner(agent, config.city);
|
|
120
|
+
const continuity = new ContinuityRunner(agent, config.city, config.continuityScript);
|
|
121
121
|
if (config.continuity) {
|
|
122
122
|
continuity.start();
|
|
123
123
|
}
|
package/dist/cli/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAE7C,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,YAAY,CAAC;KACzB,MAAM,CAAC,kBAAkB,EAAE,yCAAyC,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,eAAe;IAC5B,6EAA6E;IAC7E,2EAA2E;IAC3E,sDAAsD;IACtD,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,yCAAyC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAEjE,wEAAwE;IACxE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClF,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACtF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAEzD,qDAAqD;IACrD,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1E,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,QAAQ,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACnE,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QACD,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC9C,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAE1B,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAErF,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,KAAK,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACpE,KAAK,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC;YACtC,GAAG,EAAE,MAAM,CAAC,WAAW;YACvB,QAAQ,EAAE,MAAM,CAAC,gBAAgB;YACjC,WAAW,EAAE,MAAM,CAAC,mBAAmB;YACvC,iBAAiB;SAClB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAE7C,qCAAqC;IACrC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ExternalMcpServerConfig } from "./mcp/external-config.js";
|
|
2
2
|
import { type LiteLlmMode } from "./litellm.js";
|
|
3
|
+
import { type ContinuityScriptConfig } from "./continuity-script.js";
|
|
3
4
|
export declare const TOMO_HOME: string;
|
|
4
5
|
export declare const CONFIG_PATH: string;
|
|
5
6
|
export declare const CONFIG_BACKUP_PATH: string;
|
|
@@ -21,6 +22,11 @@ export interface LcmConfig {
|
|
|
21
22
|
* rollup so mid-day compacts don't wipe warm short-term texture. Counts SDK
|
|
22
23
|
* events (one tool round = multiple events), not user-typed messages. */
|
|
23
24
|
dailyFreshTail: number;
|
|
25
|
+
/** When true, the fresh tail is kept GLOBALLY (newest N conversational turns
|
|
26
|
+
* across all days) instead of only for today's rollup — so a new day doesn't
|
|
27
|
+
* cold-start with summaries only. N reuses `dailyFreshTail`. Default false
|
|
28
|
+
* (preserves the today-only behavior). */
|
|
29
|
+
globalFreshTail: boolean;
|
|
24
30
|
}
|
|
25
31
|
export interface LiteLlmConfig {
|
|
26
32
|
/** Gateway mode. ChatGPT mode documents the subscription/OAuth LiteLLM setup; runtime env wiring is the same. */
|
|
@@ -39,6 +45,8 @@ interface TomoConfig {
|
|
|
39
45
|
logsDir: string;
|
|
40
46
|
tomoHome: string;
|
|
41
47
|
continuity: boolean;
|
|
48
|
+
/** Optional local script to run once per continuity heartbeat and append to the heartbeat prompt. */
|
|
49
|
+
continuityScript: ContinuityScriptConfig | null;
|
|
42
50
|
city: string | null;
|
|
43
51
|
identities: IdentityConfig[];
|
|
44
52
|
imessageUrl: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,wBAAwB,CAAC;AAGhC,eAAO,MAAM,SAAS,QAAsB,CAAC;AAC7C,eAAO,MAAM,WAAW,QAAiC,CAAC;AAC1D,eAAO,MAAM,kBAAkB,QAAqC,CAAC;AACrE,eAAO,MAAM,mBAAmB,QAA6C,CAAC;AAI9E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAC;IACtB;iFAC6E;IAC7E,iBAAiB,EAAE,KAAK,GAAG,KAAK,CAAC;IACjC;;8EAE0E;IAC1E,cAAc,EAAE,MAAM,CAAC;IACvB;;;+CAG2C;IAC3C,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,iHAAiH;IACjH,IAAI,EAAE,WAAW,CAAC;IAClB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,UAAU;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,qGAAqG;IACrG,gBAAgB,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAChD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oGAAoG;IACpG,uBAAuB,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,0BAA0B,EAAE,MAAM,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,gGAAgG;IAChG,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C;;sEAEkE;IAClE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,kFAAkF;IAClF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gHAAgH;IAChH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,CAAC;IACjB,iHAAiH;IACjH,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACpD,qGAAqG;IACrG,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,GAAG,EAAE,SAAS,CAAC;CAChB;AA2MD,eAAO,MAAM,MAAM,YAAgB,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
2
|
+
import { isAbsolute, join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { parseExternalMcpServers } from "./mcp/external-config.js";
|
|
5
5
|
import { inferLiteLlmMode } from "./litellm.js";
|
|
6
|
+
import { DEFAULT_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS, DEFAULT_CONTINUITY_SCRIPT_TIMEOUT_MS, } from "./continuity-script.js";
|
|
6
7
|
const HOME = homedir();
|
|
7
8
|
export const TOMO_HOME = join(HOME, ".tomo");
|
|
8
9
|
export const CONFIG_PATH = join(TOMO_HOME, "config.json");
|
|
@@ -40,6 +41,34 @@ function parseLcmConfig(raw) {
|
|
|
40
41
|
nudgeResetPct: validHigh && validLow ? nudgeReset : (validHigh ? Math.max(0, nudgeAt - 10) : 60),
|
|
41
42
|
groupCompactStyle: style,
|
|
42
43
|
dailyFreshTail: validTail ? tail : 32,
|
|
44
|
+
globalFreshTail: r.globalFreshTail === true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function parsePositiveInt(raw, fallback) {
|
|
48
|
+
const n = Number(raw);
|
|
49
|
+
return Number.isFinite(n) && n > 0 ? Math.floor(n) : fallback;
|
|
50
|
+
}
|
|
51
|
+
function expandConfigPath(rawPath) {
|
|
52
|
+
const withEnv = rawPath.replace(/\$(\w+)|\$\{([^}]+)\}/g, (_match, bare, braced) => {
|
|
53
|
+
const name = bare ?? braced ?? "";
|
|
54
|
+
return process.env[name] ?? "";
|
|
55
|
+
});
|
|
56
|
+
const withHome = withEnv === "~"
|
|
57
|
+
? HOME
|
|
58
|
+
: (withEnv.startsWith("~/") ? join(HOME, withEnv.slice(2)) : withEnv);
|
|
59
|
+
return isAbsolute(withHome) ? withHome : join(TOMO_HOME, withHome);
|
|
60
|
+
}
|
|
61
|
+
function parseContinuityScriptConfig(raw) {
|
|
62
|
+
const r = (raw ?? {});
|
|
63
|
+
const rawPath = String(process.env.TOMO_CONTINUITY_SCRIPT
|
|
64
|
+
?? (typeof raw === "string" ? raw : r.path)
|
|
65
|
+
?? "").trim();
|
|
66
|
+
if (!rawPath)
|
|
67
|
+
return null;
|
|
68
|
+
return {
|
|
69
|
+
path: expandConfigPath(rawPath),
|
|
70
|
+
timeoutMs: parsePositiveInt(process.env.TOMO_CONTINUITY_SCRIPT_TIMEOUT_MS ?? r.timeoutMs, DEFAULT_CONTINUITY_SCRIPT_TIMEOUT_MS),
|
|
71
|
+
maxOutputChars: parsePositiveInt(process.env.TOMO_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS ?? r.maxOutputChars, DEFAULT_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS),
|
|
43
72
|
};
|
|
44
73
|
}
|
|
45
74
|
function loadConfigFile() {
|
|
@@ -120,6 +149,7 @@ function buildConfig() {
|
|
|
120
149
|
logsDir: join(TOMO_HOME, "logs"),
|
|
121
150
|
tomoHome: TOMO_HOME,
|
|
122
151
|
continuity: (process.env.TOMO_CONTINUITY ?? file.continuity ?? false) === true || process.env.TOMO_CONTINUITY === "true",
|
|
152
|
+
continuityScript: parseContinuityScriptConfig(file.continuityScript),
|
|
123
153
|
city: (process.env.TOMO_CITY ?? file.city ?? null),
|
|
124
154
|
identities,
|
|
125
155
|
imessageUrl,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const DEFAULT_CONTINUITY_SCRIPT_TIMEOUT_MS = 30000;
|
|
2
|
+
export declare const DEFAULT_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS = 8000;
|
|
3
|
+
export interface ContinuityScriptConfig {
|
|
4
|
+
path: string;
|
|
5
|
+
timeoutMs: number;
|
|
6
|
+
maxOutputChars: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function runContinuityScript(script: ContinuityScriptConfig): Promise<string>;
|
|
9
|
+
//# sourceMappingURL=continuity-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuity-script.d.ts","sourceRoot":"","sources":["../src/continuity-script.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAC3D,eAAO,MAAM,0CAA0C,OAAQ,CAAC;AAEhE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BzF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { statSync } from "node:fs";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
export const DEFAULT_CONTINUITY_SCRIPT_TIMEOUT_MS = 30_000;
|
|
5
|
+
export const DEFAULT_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS = 8_000;
|
|
6
|
+
export async function runContinuityScript(script) {
|
|
7
|
+
const scriptPath = script.path.trim();
|
|
8
|
+
if (!scriptPath) {
|
|
9
|
+
return formatPreflightFailure(scriptPath, "empty script path");
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const stat = statSync(scriptPath);
|
|
13
|
+
if (!stat.isFile()) {
|
|
14
|
+
return formatPreflightFailure(scriptPath, "path is not a file");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
19
|
+
return formatPreflightFailure(scriptPath, detail);
|
|
20
|
+
}
|
|
21
|
+
const timeoutMs = normalizePositiveInt(script.timeoutMs, DEFAULT_CONTINUITY_SCRIPT_TIMEOUT_MS);
|
|
22
|
+
const maxOutputChars = normalizePositiveInt(script.maxOutputChars, DEFAULT_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS);
|
|
23
|
+
const startedAt = Date.now();
|
|
24
|
+
let result = await runProcess(scriptPath, [], scriptPath, timeoutMs, maxOutputChars);
|
|
25
|
+
if (result.spawnError && (result.spawnError.code === "EACCES" || result.spawnError.code === "ENOEXEC")) {
|
|
26
|
+
result = await runProcess("/bin/sh", [scriptPath], scriptPath, timeoutMs, maxOutputChars);
|
|
27
|
+
}
|
|
28
|
+
return formatRunResult(scriptPath, result, Date.now() - startedAt, timeoutMs, maxOutputChars);
|
|
29
|
+
}
|
|
30
|
+
function normalizePositiveInt(value, fallback) {
|
|
31
|
+
return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
|
|
32
|
+
}
|
|
33
|
+
function runProcess(command, args, scriptPath, timeoutMs, maxOutputChars) {
|
|
34
|
+
return new Promise((resolve) => {
|
|
35
|
+
let settled = false;
|
|
36
|
+
let timedOut = false;
|
|
37
|
+
let stdout = "";
|
|
38
|
+
let stderr = "";
|
|
39
|
+
let stdoutTruncated = false;
|
|
40
|
+
let stderrTruncated = false;
|
|
41
|
+
let timeoutTimer = null;
|
|
42
|
+
let killTimer = null;
|
|
43
|
+
const resolveOnce = (result) => {
|
|
44
|
+
if (settled)
|
|
45
|
+
return;
|
|
46
|
+
settled = true;
|
|
47
|
+
if (timeoutTimer)
|
|
48
|
+
clearTimeout(timeoutTimer);
|
|
49
|
+
if (killTimer)
|
|
50
|
+
clearTimeout(killTimer);
|
|
51
|
+
resolve(result);
|
|
52
|
+
};
|
|
53
|
+
let child;
|
|
54
|
+
try {
|
|
55
|
+
child = spawn(command, args, {
|
|
56
|
+
cwd: dirname(scriptPath),
|
|
57
|
+
env: {
|
|
58
|
+
...process.env,
|
|
59
|
+
TOMO_CONTINUITY: "true",
|
|
60
|
+
},
|
|
61
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
resolveOnce({
|
|
66
|
+
stdout,
|
|
67
|
+
stderr,
|
|
68
|
+
stdoutTruncated,
|
|
69
|
+
stderrTruncated,
|
|
70
|
+
exitCode: null,
|
|
71
|
+
signal: null,
|
|
72
|
+
timedOut: false,
|
|
73
|
+
spawnError: err instanceof Error ? err : new Error(String(err)),
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
timeoutTimer = setTimeout(() => {
|
|
78
|
+
timedOut = true;
|
|
79
|
+
child.kill("SIGTERM");
|
|
80
|
+
killTimer = setTimeout(() => {
|
|
81
|
+
if (!settled)
|
|
82
|
+
child.kill("SIGKILL");
|
|
83
|
+
}, 1_000);
|
|
84
|
+
}, timeoutMs);
|
|
85
|
+
child.stdout?.on("data", (chunk) => {
|
|
86
|
+
const next = appendBounded(stdout, chunk, maxOutputChars);
|
|
87
|
+
stdout = next.text;
|
|
88
|
+
stdoutTruncated = stdoutTruncated || next.truncated;
|
|
89
|
+
});
|
|
90
|
+
child.stderr?.on("data", (chunk) => {
|
|
91
|
+
const next = appendBounded(stderr, chunk, maxOutputChars);
|
|
92
|
+
stderr = next.text;
|
|
93
|
+
stderrTruncated = stderrTruncated || next.truncated;
|
|
94
|
+
});
|
|
95
|
+
child.on("error", (err) => {
|
|
96
|
+
resolveOnce({
|
|
97
|
+
stdout,
|
|
98
|
+
stderr,
|
|
99
|
+
stdoutTruncated,
|
|
100
|
+
stderrTruncated,
|
|
101
|
+
exitCode: null,
|
|
102
|
+
signal: null,
|
|
103
|
+
timedOut,
|
|
104
|
+
spawnError: err,
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
child.on("close", (exitCode, signal) => {
|
|
108
|
+
resolveOnce({
|
|
109
|
+
stdout,
|
|
110
|
+
stderr,
|
|
111
|
+
stdoutTruncated,
|
|
112
|
+
stderrTruncated,
|
|
113
|
+
exitCode,
|
|
114
|
+
signal,
|
|
115
|
+
timedOut,
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function appendBounded(current, chunk, maxChars) {
|
|
121
|
+
if (current.length >= maxChars)
|
|
122
|
+
return { text: current, truncated: true };
|
|
123
|
+
const incoming = chunk.toString("utf8");
|
|
124
|
+
const remaining = maxChars - current.length;
|
|
125
|
+
if (incoming.length > remaining) {
|
|
126
|
+
return { text: current + incoming.slice(0, remaining), truncated: true };
|
|
127
|
+
}
|
|
128
|
+
return { text: current + incoming, truncated: false };
|
|
129
|
+
}
|
|
130
|
+
function formatPreflightFailure(scriptPath, detail) {
|
|
131
|
+
return [
|
|
132
|
+
"Continuity script result:",
|
|
133
|
+
`path: ${scriptPath || "(empty)"}`,
|
|
134
|
+
`status: failed (${detail})`,
|
|
135
|
+
].join("\n");
|
|
136
|
+
}
|
|
137
|
+
function formatRunResult(scriptPath, result, durationMs, timeoutMs, maxOutputChars) {
|
|
138
|
+
const lines = [
|
|
139
|
+
"Continuity script result:",
|
|
140
|
+
`path: ${scriptPath}`,
|
|
141
|
+
`status: ${formatStatus(result, timeoutMs)}`,
|
|
142
|
+
`durationMs: ${durationMs}`,
|
|
143
|
+
];
|
|
144
|
+
if (result.stdout.trimEnd()) {
|
|
145
|
+
lines.push("stdout:", indent(formatOutput(result.stdout, result.stdoutTruncated, maxOutputChars)));
|
|
146
|
+
}
|
|
147
|
+
if (result.stderr.trimEnd()) {
|
|
148
|
+
lines.push("stderr:", indent(formatOutput(result.stderr, result.stderrTruncated, maxOutputChars)));
|
|
149
|
+
}
|
|
150
|
+
if (!result.stdout.trimEnd() && !result.stderr.trimEnd()) {
|
|
151
|
+
lines.push("output: (none)");
|
|
152
|
+
}
|
|
153
|
+
return lines.join("\n");
|
|
154
|
+
}
|
|
155
|
+
function formatStatus(result, timeoutMs) {
|
|
156
|
+
if (result.spawnError) {
|
|
157
|
+
const code = result.spawnError.code ? `${result.spawnError.code}: ` : "";
|
|
158
|
+
return `failed to start (${code}${result.spawnError.message})`;
|
|
159
|
+
}
|
|
160
|
+
if (result.timedOut)
|
|
161
|
+
return `timed out after ${timeoutMs}ms`;
|
|
162
|
+
if (result.exitCode === 0)
|
|
163
|
+
return "completed successfully";
|
|
164
|
+
if (result.exitCode !== null)
|
|
165
|
+
return `exited with code ${result.exitCode}`;
|
|
166
|
+
if (result.signal)
|
|
167
|
+
return `terminated by signal ${result.signal}`;
|
|
168
|
+
return "completed";
|
|
169
|
+
}
|
|
170
|
+
function formatOutput(text, truncated, maxOutputChars) {
|
|
171
|
+
const trimmed = text.trimEnd();
|
|
172
|
+
if (!truncated)
|
|
173
|
+
return trimmed;
|
|
174
|
+
return `${trimmed}\n[truncated after ${maxOutputChars} chars]`;
|
|
175
|
+
}
|
|
176
|
+
function indent(text) {
|
|
177
|
+
return text.split("\n").map((line) => ` ${line}`).join("\n");
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=continuity-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuity-script.js","sourceRoot":"","sources":["../src/continuity-script.ts"],"names":[],"mappings":"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"}
|
package/dist/continuity.d.ts
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import type { Agent } from "./agent.js";
|
|
2
|
+
import { type ContinuityScriptConfig } from "./continuity-script.js";
|
|
3
|
+
interface ContinuityRunnerOptions {
|
|
4
|
+
triggerDir?: string;
|
|
5
|
+
}
|
|
2
6
|
export declare class ContinuityRunner {
|
|
3
7
|
private agent;
|
|
4
8
|
private city;
|
|
9
|
+
private script;
|
|
10
|
+
private triggerDir;
|
|
5
11
|
private timer;
|
|
6
12
|
private watcher;
|
|
7
|
-
constructor(agent: Agent, city?: string | null);
|
|
13
|
+
constructor(agent: Agent, city?: string | null, script?: ContinuityScriptConfig | null, options?: ContinuityRunnerOptions);
|
|
8
14
|
start(): void;
|
|
9
15
|
stop(): void;
|
|
10
16
|
/** Watch for manual trigger file */
|
|
11
17
|
private watchTrigger;
|
|
12
18
|
private fire;
|
|
13
19
|
}
|
|
20
|
+
export {};
|
|
14
21
|
//# sourceMappingURL=continuity.d.ts.map
|
package/dist/continuity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAuB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAK1F,UAAU,uBAAuB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAA0B;gBAGvC,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EACpB,MAAM,CAAC,EAAE,sBAAsB,GAAG,IAAI,EACtC,OAAO,GAAE,uBAA4B;IAQvC,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAUZ,oCAAoC;IACpC,OAAO,CAAC,YAAY;YAeN,IAAI;CAwCnB"}
|
package/dist/continuity.js
CHANGED
|
@@ -2,8 +2,9 @@ import { existsSync, unlinkSync, watch } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { log } from "./logger.js";
|
|
5
|
+
import { runContinuityScript } from "./continuity-script.js";
|
|
5
6
|
const CONTINUITY_INTERVAL_MS = 55 * 60 * 1000; // 55 minutes
|
|
6
|
-
const
|
|
7
|
+
const DEFAULT_TRIGGER_DIR = join(homedir(), ".tomo");
|
|
7
8
|
async function fetchWeather(city) {
|
|
8
9
|
try {
|
|
9
10
|
const res = await fetch(`https://wttr.in/${encodeURIComponent(city)}?format=%c+%t+%h+%w`, {
|
|
@@ -20,11 +21,15 @@ async function fetchWeather(city) {
|
|
|
20
21
|
export class ContinuityRunner {
|
|
21
22
|
agent;
|
|
22
23
|
city;
|
|
24
|
+
script;
|
|
25
|
+
triggerDir;
|
|
23
26
|
timer = null;
|
|
24
27
|
watcher = null;
|
|
25
|
-
constructor(agent, city) {
|
|
28
|
+
constructor(agent, city, script, options = {}) {
|
|
26
29
|
this.agent = agent;
|
|
27
30
|
this.city = city ?? null;
|
|
31
|
+
this.script = script ?? null;
|
|
32
|
+
this.triggerDir = options.triggerDir ?? DEFAULT_TRIGGER_DIR;
|
|
28
33
|
}
|
|
29
34
|
start() {
|
|
30
35
|
log.info("Continuity runner started (every 55m)");
|
|
@@ -42,12 +47,12 @@ export class ContinuityRunner {
|
|
|
42
47
|
}
|
|
43
48
|
/** Watch for manual trigger file */
|
|
44
49
|
watchTrigger() {
|
|
45
|
-
const
|
|
50
|
+
const triggerFile = join(this.triggerDir, "continuity.trigger");
|
|
46
51
|
try {
|
|
47
|
-
this.watcher = watch(
|
|
48
|
-
if (filename === "continuity.trigger" && existsSync(
|
|
52
|
+
this.watcher = watch(this.triggerDir, (_event, filename) => {
|
|
53
|
+
if (filename === "continuity.trigger" && existsSync(triggerFile)) {
|
|
49
54
|
try {
|
|
50
|
-
unlinkSync(
|
|
55
|
+
unlinkSync(triggerFile);
|
|
51
56
|
}
|
|
52
57
|
catch { /* ignore */ }
|
|
53
58
|
log.info("Continuity manually triggered");
|
|
@@ -77,8 +82,16 @@ export class ContinuityRunner {
|
|
|
77
82
|
weatherLine = ` Weather outside: ${weather}.`;
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
let scriptLine = "";
|
|
86
|
+
if (this.script) {
|
|
87
|
+
scriptLine = `\n\n${await runContinuityScript(this.script)}`;
|
|
88
|
+
}
|
|
89
|
+
const prompt = `System: It is ${timestamp}.${weatherLine} Read CONTINUITY.md. This is free time — reflect, research, or prepare something useful.${scriptLine}`;
|
|
90
|
+
log.info({
|
|
91
|
+
city: this.city,
|
|
92
|
+
weather: weatherLine || "(none)",
|
|
93
|
+
script: this.script?.path ?? "(none)",
|
|
94
|
+
}, "Continuity heartbeat fired");
|
|
82
95
|
try {
|
|
83
96
|
await this.agent.handleContinuity(prompt);
|
|
84
97
|
log.info("Continuity heartbeat completed");
|
package/dist/continuity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuity.js","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAkB,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"continuity.js","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"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"}
|
package/dist/lcm/blocks.d.ts
CHANGED
|
@@ -16,8 +16,43 @@ export interface ResolvedRange {
|
|
|
16
16
|
/** Human-readable explanation of what gets compacted */
|
|
17
17
|
description: string;
|
|
18
18
|
}
|
|
19
|
+
interface SdkEvent {
|
|
20
|
+
type: string;
|
|
21
|
+
uuid?: string;
|
|
22
|
+
timestamp?: string;
|
|
23
|
+
isCompactSummary?: boolean;
|
|
24
|
+
blockTag?: string;
|
|
25
|
+
[k: string]: any;
|
|
26
|
+
}
|
|
19
27
|
/** ISO week tag for a Date (YYYY-Www). Matches Python's isocalendar. */
|
|
20
28
|
export declare function isoWeekTag(d: Date): string;
|
|
29
|
+
/**
|
|
30
|
+
* Is this event a real CONVERSATIONAL turn — something the user actually said,
|
|
31
|
+
* or an assistant text reply — as opposed to a system/heartbeat/cron injection
|
|
32
|
+
* or pure tool machinery (tool_result user turns, tool_use-only assistant turns)?
|
|
33
|
+
*
|
|
34
|
+
* Used to COUNT the global fresh tail window (the newest N such turns). Retention
|
|
35
|
+
* is positional from the Nth-newest candidate, so non-candidate events that fall
|
|
36
|
+
* inside the retained suffix are still kept (chain continuity) — they just don't
|
|
37
|
+
* advance the count.
|
|
38
|
+
*
|
|
39
|
+
* Classification (verified against real SDK session shapes 2026-06-05):
|
|
40
|
+
* - real user msg: "[imessage · Fri 06/05 22:18 PDT] 🧱做好了" → candidate
|
|
41
|
+
* - coalesced msgs: "[imessage · …] [User sent 2 messages in quick succ…]" → candidate (real text)
|
|
42
|
+
* - cron: "[imessage · …] System: Scheduled task …" → NOT (System: after prefix)
|
|
43
|
+
* - continuity beat: "System: It is Fri … Weather …" → NOT (raw System:)
|
|
44
|
+
* - tool_result turn: user event with no text block → NOT (machinery)
|
|
45
|
+
* - tool_use-only assistant turn: no text → NOT (machinery)
|
|
46
|
+
*/
|
|
47
|
+
export declare function isWarmTailCandidate(e: SdkEvent): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Global index where the warm tail begins: the index of the Nth-newest
|
|
50
|
+
* warm-tail-candidate event. Everything at this index or later (candidates plus
|
|
51
|
+
* interleaved machinery/system events) is the retained contiguous suffix.
|
|
52
|
+
* Returns events.length when there's nothing to keep (n<=0 or no candidates) so
|
|
53
|
+
* callers treat the tail as empty.
|
|
54
|
+
*/
|
|
55
|
+
export declare function globalFreshTailStartIdx(events: SdkEvent[], n: number): number;
|
|
21
56
|
/**
|
|
22
57
|
* Resolve the event range for a given rollup level + optional explicit period.
|
|
23
58
|
* Returns null if there's nothing to compact (no matching events / children).
|
|
@@ -45,4 +80,5 @@ export declare function findDuePromotions(sdkSessionId: string): DuePromotion[];
|
|
|
45
80
|
* `daily <today>` block. Used to trigger the hot-tail cap nudge.
|
|
46
81
|
*/
|
|
47
82
|
export declare function countRawTailToday(sdkSessionId: string): number;
|
|
83
|
+
export {};
|
|
48
84
|
//# sourceMappingURL=blocks.d.ts.map
|
package/dist/lcm/blocks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/lcm/blocks.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/lcm/blocks.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AA0BD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAQ1C;AAsCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CA6BxD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAS7E;AAqCD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,GAAG,IAAI,CA4GtB;AAkED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAStD;AAaD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE,CAwItE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAsB9D"}
|
package/dist/lcm/blocks.js
CHANGED
|
@@ -58,6 +58,123 @@ function localMonthTag(d) {
|
|
|
58
58
|
function dailyFreshTail() {
|
|
59
59
|
return config.lcm.dailyFreshTail;
|
|
60
60
|
}
|
|
61
|
+
/** Concatenate text-block content from an event (SDK or simple shape). */
|
|
62
|
+
function extractText(e) {
|
|
63
|
+
const c = e.message?.content;
|
|
64
|
+
if (typeof c === "string")
|
|
65
|
+
return c;
|
|
66
|
+
if (Array.isArray(c)) {
|
|
67
|
+
return c
|
|
68
|
+
.filter((b) => b && typeof b === "object" && b.type === "text")
|
|
69
|
+
.map((b) => b.text ?? "")
|
|
70
|
+
.join("");
|
|
71
|
+
}
|
|
72
|
+
return "";
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Is this event a real CONVERSATIONAL turn — something the user actually said,
|
|
76
|
+
* or an assistant text reply — as opposed to a system/heartbeat/cron injection
|
|
77
|
+
* or pure tool machinery (tool_result user turns, tool_use-only assistant turns)?
|
|
78
|
+
*
|
|
79
|
+
* Used to COUNT the global fresh tail window (the newest N such turns). Retention
|
|
80
|
+
* is positional from the Nth-newest candidate, so non-candidate events that fall
|
|
81
|
+
* inside the retained suffix are still kept (chain continuity) — they just don't
|
|
82
|
+
* advance the count.
|
|
83
|
+
*
|
|
84
|
+
* Classification (verified against real SDK session shapes 2026-06-05):
|
|
85
|
+
* - real user msg: "[imessage · Fri 06/05 22:18 PDT] 🧱做好了" → candidate
|
|
86
|
+
* - coalesced msgs: "[imessage · …] [User sent 2 messages in quick succ…]" → candidate (real text)
|
|
87
|
+
* - cron: "[imessage · …] System: Scheduled task …" → NOT (System: after prefix)
|
|
88
|
+
* - continuity beat: "System: It is Fri … Weather …" → NOT (raw System:)
|
|
89
|
+
* - tool_result turn: user event with no text block → NOT (machinery)
|
|
90
|
+
* - tool_use-only assistant turn: no text → NOT (machinery)
|
|
91
|
+
*/
|
|
92
|
+
export function isWarmTailCandidate(e) {
|
|
93
|
+
if (e.type !== "user" && e.type !== "assistant")
|
|
94
|
+
return false;
|
|
95
|
+
if (e.isCompactSummary)
|
|
96
|
+
return false;
|
|
97
|
+
const text = extractText(e);
|
|
98
|
+
if (e.type === "assistant") {
|
|
99
|
+
// A real reply has text; pure tool_use turns are machinery.
|
|
100
|
+
const trimmed = text.trim();
|
|
101
|
+
if (!trimmed)
|
|
102
|
+
return false;
|
|
103
|
+
// Housekeeping cron/rollup/heartbeat turns often resolve silently.
|
|
104
|
+
if (/^NO_REPLY$/i.test(trimmed))
|
|
105
|
+
return false;
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
// user event
|
|
109
|
+
if (!text)
|
|
110
|
+
return false; // tool_result-only turn = machinery
|
|
111
|
+
// Strip ALL leading bracketed prefixes (+ whitespace), then a System: prefix
|
|
112
|
+
// means heartbeat/cron (both injected, not conversation). Looping matters:
|
|
113
|
+
// a cron turn with a pending note prepended looks like
|
|
114
|
+
// "[System: <note>]\n\n[imessage · …] System: Scheduled task …"
|
|
115
|
+
// so stripping just one bracket would leave "[imessage · …] System:" and
|
|
116
|
+
// misclassify the cron as conversational. Coalesced real msgs
|
|
117
|
+
// "[imessage · …] [User sent 2 messages …] real text"
|
|
118
|
+
// strip down to "real text" → still correctly a candidate.
|
|
119
|
+
let stripped = text;
|
|
120
|
+
for (let prev = ""; stripped !== prev;) {
|
|
121
|
+
prev = stripped;
|
|
122
|
+
stripped = stripped.replace(/^\[[^\]]*\]\s*/, "");
|
|
123
|
+
}
|
|
124
|
+
if (stripped.startsWith("System:"))
|
|
125
|
+
return false;
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Global index where the warm tail begins: the index of the Nth-newest
|
|
130
|
+
* warm-tail-candidate event. Everything at this index or later (candidates plus
|
|
131
|
+
* interleaved machinery/system events) is the retained contiguous suffix.
|
|
132
|
+
* Returns events.length when there's nothing to keep (n<=0 or no candidates) so
|
|
133
|
+
* callers treat the tail as empty.
|
|
134
|
+
*/
|
|
135
|
+
export function globalFreshTailStartIdx(events, n) {
|
|
136
|
+
if (n <= 0)
|
|
137
|
+
return events.length;
|
|
138
|
+
const candidateIdx = [];
|
|
139
|
+
for (let i = 0; i < events.length; i++) {
|
|
140
|
+
if (isWarmTailCandidate(events[i]))
|
|
141
|
+
candidateIdx.push(i);
|
|
142
|
+
}
|
|
143
|
+
if (candidateIdx.length === 0)
|
|
144
|
+
return events.length;
|
|
145
|
+
if (candidateIdx.length <= n)
|
|
146
|
+
return candidateIdx[0];
|
|
147
|
+
return candidateIdx[candidateIdx.length - n];
|
|
148
|
+
}
|
|
149
|
+
function monthForIsoWeekTag(weekTag) {
|
|
150
|
+
const m = /^(\d{4})-W(\d{2})$/.exec(weekTag);
|
|
151
|
+
if (!m)
|
|
152
|
+
return null;
|
|
153
|
+
return localMonthTag(isoWeekThursday(Number(m[1]), Number(m[2])));
|
|
154
|
+
}
|
|
155
|
+
function warmSuffixParentPeriods(events, tailStart) {
|
|
156
|
+
const weeks = new Set();
|
|
157
|
+
const months = new Set();
|
|
158
|
+
const years = new Set();
|
|
159
|
+
for (let i = tailStart; i < events.length; i++) {
|
|
160
|
+
const e = events[i];
|
|
161
|
+
if (e.type !== "user" && e.type !== "assistant")
|
|
162
|
+
continue;
|
|
163
|
+
if (e.isCompactSummary)
|
|
164
|
+
continue;
|
|
165
|
+
if (!e.timestamp)
|
|
166
|
+
continue;
|
|
167
|
+
const day = localDateTag(new Date(e.timestamp));
|
|
168
|
+
const week = isoWeekTag(new Date(day + "T12:00:00"));
|
|
169
|
+
weeks.add(week);
|
|
170
|
+
const month = monthForIsoWeekTag(week);
|
|
171
|
+
if (month) {
|
|
172
|
+
months.add(month);
|
|
173
|
+
years.add(month.slice(0, 4));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return { weeks, months, years };
|
|
177
|
+
}
|
|
61
178
|
/**
|
|
62
179
|
* Resolve the event range for a given rollup level + optional explicit period.
|
|
63
180
|
* Returns null if there's nothing to compact (no matching events / children).
|
|
@@ -81,6 +198,15 @@ export function resolveBlockRange(sdkSessionId, level, period) {
|
|
|
81
198
|
};
|
|
82
199
|
const resolvedPeriod = period ?? defaultPeriod(level);
|
|
83
200
|
const tag = `${level} ${resolvedPeriod}`;
|
|
201
|
+
if (config.lcm.globalFreshTail && level !== "daily") {
|
|
202
|
+
const tailStart = globalFreshTailStartIdx(events, dailyFreshTail());
|
|
203
|
+
const warmPeriods = warmSuffixParentPeriods(events, tailStart);
|
|
204
|
+
if ((level === "weekly" && warmPeriods.weeks.has(resolvedPeriod)) ||
|
|
205
|
+
(level === "monthly" && warmPeriods.months.has(resolvedPeriod)) ||
|
|
206
|
+
(level === "yearly" && warmPeriods.years.has(resolvedPeriod))) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
84
210
|
// Find source events to compact for this level.
|
|
85
211
|
const matches = []; // global indices
|
|
86
212
|
for (let i = 0; i < events.length; i++) {
|
|
@@ -100,7 +226,27 @@ export function resolveBlockRange(sdkSessionId, level, period) {
|
|
|
100
226
|
// with ≤ tail raw events can never be rolled up and stays forever in the
|
|
101
227
|
// hot context as un-promoted raw events.
|
|
102
228
|
let effectiveMatches = matches;
|
|
103
|
-
if (level === "daily" &&
|
|
229
|
+
if (level === "daily" && config.lcm.globalFreshTail) {
|
|
230
|
+
// Global fresh tail: keep the newest N conversational turns warm across ALL
|
|
231
|
+
// days (not just today), so a new day doesn't cold-start with summaries only.
|
|
232
|
+
// The tail start is a session-global boundary; this day's raw is compacted
|
|
233
|
+
// only up to (not into) that boundary. When the boundary later advances past
|
|
234
|
+
// this day's leftovers, a rebuild rollup (triggered by findDuePromotions,
|
|
235
|
+
// which uses the same boundary) absorbs them — that's the "GC" path.
|
|
236
|
+
const tailStart = globalFreshTailStartIdx(events, dailyFreshTail());
|
|
237
|
+
const rawOutsideTail = matches.filter((idx) => !events[idx].isCompactSummary && idx < tailStart);
|
|
238
|
+
if (rawOutsideTail.length === 0) {
|
|
239
|
+
// All of this day's raw is within the global warm tail → nothing to promote.
|
|
240
|
+
if (!matches.some((idx) => events[idx].isCompactSummary)) {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
effectiveMatches = matches.filter((idx) => events[idx].isCompactSummary);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
effectiveMatches = matches.filter((idx) => idx < tailStart || events[idx].isCompactSummary);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else if (level === "daily" && resolvedPeriod === localDateTag(new Date())) {
|
|
104
250
|
const tail = dailyFreshTail();
|
|
105
251
|
const rawOnly = matches.filter((idx) => !events[idx].isCompactSummary);
|
|
106
252
|
if (rawOnly.length <= tail) {
|
|
@@ -249,6 +395,24 @@ export function findDuePromotions(sdkSessionId) {
|
|
|
249
395
|
if (e.isCompactSummary && e.blockTag)
|
|
250
396
|
haveTags.add(e.blockTag);
|
|
251
397
|
}
|
|
398
|
+
// Global fresh tail boundary (events.length when the flag is off → inert).
|
|
399
|
+
const tailStart = config.lcm.globalFreshTail
|
|
400
|
+
? globalFreshTailStartIdx(events, dailyFreshTail())
|
|
401
|
+
: events.length;
|
|
402
|
+
// Parent periods that still contain raw events INSIDE the global warm suffix.
|
|
403
|
+
// Child blocks in such periods are partial *by design* (their newest turns are
|
|
404
|
+
// intentionally kept warm, not yet summarized), so they must NOT be promoted
|
|
405
|
+
// upward — else the parent would summarize an incomplete child and never
|
|
406
|
+
// re-run (haveTags) after the child later rebuilds to absorb the aged-out raw.
|
|
407
|
+
//
|
|
408
|
+
// Scope to in-suffix raw ONLY (not all raw): aged-out leftover raw must NOT
|
|
409
|
+
// block weekly, or we'd deadlock — the daily path suppresses sub-floor
|
|
410
|
+
// (<FLOOR_WITH_BLOCK) rebuilds, so a day with a block + 2 aged-out raw would
|
|
411
|
+
// be neither daily-due nor weekly-eligible. Sub-floor aged-out residue is
|
|
412
|
+
// tolerated (weekly promotes a near-complete block) exactly as in the
|
|
413
|
+
// today-only path. Under flag-off, tailStart=length → this set is empty →
|
|
414
|
+
// default behavior fully preserved.
|
|
415
|
+
const warmPeriods = warmSuffixParentPeriods(events, tailStart);
|
|
252
416
|
// Candidate periods: for each source block, derive its parent period.
|
|
253
417
|
const weeklyChildrenByWeek = new Map();
|
|
254
418
|
const monthlyChildrenByMonth = new Map();
|
|
@@ -260,6 +424,9 @@ export function findDuePromotions(sdkSessionId) {
|
|
|
260
424
|
let m = /^daily (\d{4}-\d{2}-\d{2})$/.exec(tag);
|
|
261
425
|
if (m) {
|
|
262
426
|
const wk = isoWeekTag(new Date(m[1] + "T12:00:00"));
|
|
427
|
+
// Skip the whole week while any raw in that week is still warm-by-design.
|
|
428
|
+
if (warmPeriods.weeks.has(wk))
|
|
429
|
+
continue;
|
|
263
430
|
if (wk !== currentWeek) {
|
|
264
431
|
weeklyChildrenByWeek.set(wk, (weeklyChildrenByWeek.get(wk) ?? 0) + 1);
|
|
265
432
|
}
|
|
@@ -269,6 +436,9 @@ export function findDuePromotions(sdkSessionId) {
|
|
|
269
436
|
if (m) {
|
|
270
437
|
const thursday = isoWeekThursday(Number(m[1]), Number(m[2]));
|
|
271
438
|
const month = localMonthTag(thursday);
|
|
439
|
+
// Skip the whole month while any raw in a child week is still warm.
|
|
440
|
+
if (warmPeriods.months.has(month))
|
|
441
|
+
continue;
|
|
272
442
|
if (month !== currentMonth) {
|
|
273
443
|
monthlyChildrenByMonth.set(month, (monthlyChildrenByMonth.get(month) ?? 0) + 1);
|
|
274
444
|
}
|
|
@@ -277,6 +447,9 @@ export function findDuePromotions(sdkSessionId) {
|
|
|
277
447
|
m = /^monthly (\d{4})-\d{2}$/.exec(tag);
|
|
278
448
|
if (m) {
|
|
279
449
|
const year = m[1];
|
|
450
|
+
// Skip the whole year while any raw in a child month is still warm.
|
|
451
|
+
if (warmPeriods.years.has(year))
|
|
452
|
+
continue;
|
|
280
453
|
if (year !== currentYear) {
|
|
281
454
|
yearlyChildrenByYear.set(year, (yearlyChildrenByYear.get(year) ?? 0) + 1);
|
|
282
455
|
}
|
|
@@ -309,14 +482,23 @@ export function findDuePromotions(sdkSessionId) {
|
|
|
309
482
|
// metadata/attachment residuals.
|
|
310
483
|
const FLOOR_WITH_BLOCK = 8; // block exists — only nudge if meaningful leftover
|
|
311
484
|
const FLOOR_WITHOUT_BLOCK = 1; // no block — any raw event is a reason to nudge
|
|
485
|
+
// With the global fresh tail on, raw events inside the warm-tail suffix are
|
|
486
|
+
// intentionally kept un-promoted — they must NOT trigger a daily nudge (else
|
|
487
|
+
// we'd re-nudge forever while they sit warm). Once the boundary advances past
|
|
488
|
+
// them, they fall outside the suffix and DO get counted → the rollup rebuild
|
|
489
|
+
// absorbs them. So the `i >= tailStart` check (tailStart computed above) is
|
|
490
|
+
// both the no-nudge guard and the GC trigger.
|
|
312
491
|
const rawDays = new Map();
|
|
313
|
-
for (
|
|
492
|
+
for (let i = 0; i < events.length; i++) {
|
|
493
|
+
const e = events[i];
|
|
314
494
|
if (e.type !== "user" && e.type !== "assistant")
|
|
315
495
|
continue;
|
|
316
496
|
if (e.isCompactSummary)
|
|
317
497
|
continue;
|
|
318
498
|
if (!e.timestamp)
|
|
319
499
|
continue;
|
|
500
|
+
if (i >= tailStart)
|
|
501
|
+
continue; // inside the global warm tail → not due
|
|
320
502
|
const day = localDateTag(new Date(e.timestamp));
|
|
321
503
|
if (day !== currentDay) {
|
|
322
504
|
rawDays.set(day, (rawDays.get(day) ?? 0) + 1);
|
package/dist/lcm/blocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/lcm/blocks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/lcm/blocks.ts"],"names":[],"mappings":"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"}
|