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 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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"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"}
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;
@@ -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;AAGlE,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;CACxB;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,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;AAkKD,eAAO,MAAM,MAAM,YAAgB,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,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
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,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAgC,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAoB,MAAM,cAAc,CAAC;AAClE,OAAO,EACL,0CAA0C,EAC1C,oCAAoC,GAErC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC9E,MAAM,kCAAkC,GAAG,IAAI,CAAC;AAChD,MAAM,sCAAsC,GAAG,IAAI,CAAC;AA8EpD,SAAS,kBAAkB,CAAC,GAAY,EAAE,YAAoB;IAC5D,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAA4B,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC;QAC7E,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY,EAAE,QAAgB;IACxD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAA4B,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,CAAC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAE5C,4EAA4E;IAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,GAAG,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,OAAO,CAAC;IACxF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IACtD,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpC,aAAa,EAAE,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACrC,eAAe,EAAE,CAAC,CAAC,eAAe,KAAK,IAAI;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY,EAAE,QAAgB;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,MAAM,EAAE,IAAwB,EAAE,MAA0B,EAAE,EAAE;QACzH,MAAM,IAAI,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,KAAK,GAAG;QAC9B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAY;IAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAA4B,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,CACpB,OAAO,CAAC,GAAG,CAAC,sBAAsB;WAC/B,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;WACxC,EAAE,CACN,CAAC,IAAI,EAAE,CAAC;IAET,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAC/B,SAAS,EAAE,gBAAgB,CACzB,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,CAAC,SAAS,EAC5D,oCAAoC,CACrC;QACD,cAAc,EAAE,gBAAgB,CAC9B,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,CAAC,CAAC,cAAc,EACvE,0CAA0C,CAC3C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAiD;IACxE,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAiD;IAC3E,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAA4C,CAAC;IAClF,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAA4B,CAAC;IACxD,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,IAAI,GAAG,CAAC,YAAY,CAAC;IACpE,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACvD,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,UAAU,KAAK,CAAC,CAAC;IAEzE,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC7B,QAAQ,CAAC,QAAQ,EAAE,KAA4B;QAChD,EAAE,CAAC;IAEL,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,CAAC,YAAY;QACvB,QAAQ,CAAC,QAAQ,EAAE,GAA0B;QAC9C,EAAE,CAAC;IAEL,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC5B,QAAQ,CAAC,QAAQ,EAAE,QAA+B;QACnD,EAAE,CAAC;IAEL,MAAM,mBAAmB,GAAG,MAAM,CAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB;QAChC,QAAQ,CAAC,QAAQ,EAAE,WAAkC;QACtD,MAAM,CACP,CAAC;IACF,MAAM,uBAAuB,GAAG,kBAAkB,CAChD,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACrC,QAAQ,CAAC,QAAQ,EAAE,eAA+C;QACnE,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;IACF,MAAM,0BAA0B,GAAG,kBAAkB,CACnD,OAAO,CAAC,GAAG,CAAC,8BAA8B;QACzC,QAAQ,CAAC,QAAQ,EAAE,kBAAkD;QACtE,sCAAsC,EACtC,sCAAsC,CACvC,CAAC;IAEF,0CAA0C;IAC1C,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAI1C,CAAC;IACH,MAAM,UAAU,GAAqB,aAAa;SAC/C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC;SACtC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACZ,IAAI,EAAE,EAAE,CAAC,IAAK;QACd,QAAQ,EAAE,EAAE,CAAC,QAAS;QACtB,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,aAAa;KAC7C,CAAC,CAAC,CAAC;IAEN,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,uBAAuB,CAAW,CAAC;IAE5F,OAAO;QACL,aAAa;QACb,KAAK;QACL,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACxE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC;QAC5E,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC;QACvD,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;QAChC,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM;QACxH,gBAAgB,EAAE,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACpE,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAkB;QACnE,UAAU;QACV,WAAW;QACX,gBAAgB;QAChB,mBAAmB;QACnB,uBAAuB;QACvB,0BAA0B;QAC1B,qBAAqB,EAAE,CAAC,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAA2B;QACnF,iBAAiB,EAAE,eAAe,CAAC,QAAQ,CAAC;QAC5C,aAAa,EAAE,kBAAkB,CAAC,QAAQ,CAAC;QAC3C,WAAW,EAAG,IAAI,CAAC,WAAsB,IAAI,IAAI;QACjD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,KAAK,KAAK;QACnD,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QACrE,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAChD,UAAU;QACV,eAAe;QACf,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC"}
@@ -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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"}
@@ -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
@@ -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;AAiBxC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAA0B;gBAE7B,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9C,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAUZ,oCAAoC;IACpC,OAAO,CAAC,YAAY;YAeN,IAAI;CA+BnB"}
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"}
@@ -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 TRIGGER_FILE = join(homedir(), ".tomo", "continuity.trigger");
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 dir = join(homedir(), ".tomo");
50
+ const triggerFile = join(this.triggerDir, "continuity.trigger");
46
51
  try {
47
- this.watcher = watch(dir, (_event, filename) => {
48
- if (filename === "continuity.trigger" && existsSync(TRIGGER_FILE)) {
52
+ this.watcher = watch(this.triggerDir, (_event, filename) => {
53
+ if (filename === "continuity.trigger" && existsSync(triggerFile)) {
49
54
  try {
50
- unlinkSync(TRIGGER_FILE);
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
- const prompt = `System: It is ${timestamp}.${weatherLine} Read CONTINUITY.md. This is free time — reflect, research, or prepare something useful.`;
81
- log.info({ city: this.city, weather: weatherLine || "(none)" }, "Continuity heartbeat fired");
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");
@@ -1 +1 @@
1
- {"version":3,"file":"continuity.js","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"continuity.js","sourceRoot":"","sources":["../src/continuity.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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;AAmCD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAQ1C;AAyBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,GAAG,IAAI,CA0EtB;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,CAsGtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAsB9D"}
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"}
@@ -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" && resolvedPeriod === localDateTag(new Date())) {
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 (const e of events) {
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);
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tomo-ai",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "description": "Personal assistant powered by Claude Agent SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",