@symerian/symi 3.4.7 → 3.4.8

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.
Files changed (51) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/{chrome-CPSDqbK6.js → chrome-CQn8fDIy.js} +7 -7
  4. package/dist/{command-registry-ByBvyNis.js → command-registry-D8fj6th4.js} +4 -4
  5. package/dist/{completion-cli-BFBbL-u4.js → completion-cli-BxspmuYm.js} +2 -2
  6. package/dist/{completion-cli-rzEsCzmE.js → completion-cli-C-85b5b8.js} +1 -1
  7. package/dist/control-ui/js/metrics.js +0 -10
  8. package/dist/{deliver-Mqq3tgqB.js → deliver-DvW5xHHr.js} +4 -4
  9. package/dist/{doctor-completion-B8cqL1A0.js → doctor-completion-BwHbIZjF.js} +1 -1
  10. package/dist/{doctor-completion-BqbhVdbe.js → doctor-completion-CX7LjkOD.js} +1 -1
  11. package/dist/entry.js +1 -1
  12. package/dist/extensionAPI.js +4 -4
  13. package/dist/{gateway-cli-DYJxZ5dh.js → gateway-cli-CTcK1Az2.js} +1 -1
  14. package/dist/{gateway-cli-DfRlFuH-.js → gateway-cli-CW-Z71cE.js} +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/{manager-MbrGCH4o.js → manager-D0NIHMuQ.js} +1 -1
  17. package/dist/{onboard-kDOde8WJ.js → onboard-C8IQnigm.js} +1 -1
  18. package/dist/{onboard-_3W1qIFk.js → onboard-CAIujkV7.js} +1 -1
  19. package/dist/{onboarding-CXaQnqxR.js → onboarding-4v9LJueP.js} +1 -1
  20. package/dist/{onboarding-BJ27gXxY.js → onboarding-BIq5BxG0.js} +1 -1
  21. package/dist/{onboarding.finalize-CSgYg74M.js → onboarding.finalize-Bkcwe5RS.js} +4 -4
  22. package/dist/{onboarding.finalize-CsyhJcuq.js → onboarding.finalize-CXAQzVXM.js} +5 -5
  23. package/dist/{pi-embedded-8Zh_Y5ur.js → pi-embedded-CGebiST2.js} +10 -10
  24. package/dist/plugin-sdk/index.js +6 -6
  25. package/dist/{program-BPcy7UBj.js → program-C19G7o-Q.js} +2 -2
  26. package/dist/{program-context-DYS38Clb.js → program-context-BSUkEz3n.js} +7 -7
  27. package/dist/{prompt-select-styled-Kgvc0-w2.js → prompt-select-styled-B5wlPYN5.js} +1 -1
  28. package/dist/{prompt-select-styled-uUOSg6Qq.js → prompt-select-styled-CnYM7W0j.js} +1 -1
  29. package/dist/{pw-ai-w6Qalz1W.js → pw-ai-BB1pJj9_.js} +1 -1
  30. package/dist/{register.maintenance-CNcd1-Vv.js → register.maintenance-CKsv0lok.js} +5 -5
  31. package/dist/{register.maintenance-BMswbbSL.js → register.maintenance-DDzKUGYJ.js} +4 -4
  32. package/dist/{register.onboard-DR2Wu59i.js → register.onboard-BHtTh0b_.js} +2 -2
  33. package/dist/{register.onboard-CRNjEhnQ.js → register.onboard-CkIM3hU7.js} +2 -2
  34. package/dist/{register.setup-Crrj2t2B.js → register.setup-CLhdFQHW.js} +2 -2
  35. package/dist/{register.setup-Dbe-Z2xu.js → register.setup-CYtYDKMU.js} +2 -2
  36. package/dist/{register.subclis-BRPnstmu.js → register.subclis-CnDo2jzv.js} +4 -4
  37. package/dist/{run-main-CMQVjdht.js → run-main-BIRbWKyA.js} +3 -3
  38. package/dist/{synthesis-iB7TWRW4.js → synthesis-CQdzrLFL.js} +4 -4
  39. package/dist/{tui-B4Pd0T9l.js → tui-D0j61PXx.js} +1 -1
  40. package/dist/{tui-DBrpAw57.js → tui-DFuScHlA.js} +1 -1
  41. package/dist/{tui-cli-B-obcHoZ.js → tui-cli-25xTveHh.js} +1 -1
  42. package/dist/{tui-cli-tbUaY-Pu.js → tui-cli-C3dXNtPo.js} +1 -1
  43. package/dist/{update-cli-Mpq0iwGk.js → update-cli-CWufRpkr.js} +4 -4
  44. package/dist/{update-cli-CUgElk5d.js → update-cli-Dl_QbjXc.js} +5 -5
  45. package/docs/reference/templates/AGENTS.dev.md +0 -4
  46. package/docs/reference/templates/AGENTS.md +7 -68
  47. package/docs/reference/templates/CONFIG-SCHEMA.md +0 -7
  48. package/extensions/shared/resolve-target-test-helpers.ts +1 -1
  49. package/package.json +1 -1
  50. package/skills/coding-agent/SKILL.md +2 -2
  51. package/docs/reference/templates/SYMIPULSE.md +0 -103
@@ -44,7 +44,7 @@ import { n as logConfigUpdated } from "./logging-B96FQvnn.js";
44
44
  import { n as detectLegacyStateMigrations, r as runLegacyStateMigrations, t as loadAndMaybeMigrateDoctorConfig } from "./doctor-config-flow-CYDx1U0Z.js";
45
45
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-PqG8iGCt.js";
46
46
  import { t as formatHealthCheckFailure } from "./health-format-39e76m9p.js";
47
- import { n as doctorShellCompletion } from "./doctor-completion-B8cqL1A0.js";
47
+ import { n as doctorShellCompletion } from "./doctor-completion-BwHbIZjF.js";
48
48
  import path from "node:path";
49
49
  import fs from "node:fs";
50
50
  import os from "node:os";
@@ -40,7 +40,7 @@ import { n as logConfigUpdated } from "./logging-BeA4q4J_.js";
40
40
  import { n as detectLegacyStateMigrations, r as runLegacyStateMigrations, t as loadAndMaybeMigrateDoctorConfig } from "./doctor-config-flow-wvoEFNeZ.js";
41
41
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-BM4qvprK.js";
42
42
  import { t as formatHealthCheckFailure } from "./health-format-DaP03FBk.js";
43
- import { n as doctorShellCompletion } from "./doctor-completion-BqbhVdbe.js";
43
+ import { n as doctorShellCompletion } from "./doctor-completion-CX7LjkOD.js";
44
44
  import { execFile } from "node:child_process";
45
45
  import os from "node:os";
46
46
  import path from "node:path";
@@ -6,7 +6,7 @@ import { Q as formatCliCommand } from "./model-selection-DUQlsUfk.js";
6
6
  import "./github-copilot-token-BbsJ0Qbo.js";
7
7
  import "./ssrf-CBajKNWO.js";
8
8
  import "./manifest-registry-CAWGTwb5.js";
9
- import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-CPSDqbK6.js";
9
+ import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-CQn8fDIy.js";
10
10
  import "./redact-ojHFHOAb.js";
11
11
  import { n as formatErrorMessage } from "./errors-C6sHIFo_.js";
12
12
  import path from "node:path";
@@ -85,10 +85,10 @@ import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint }
85
85
  import "./note-DKRm9hYC.js";
86
86
  import "./plugin-auto-enable-DSliW8o4.js";
87
87
  import "./channels-status-issues-GSsGZvfn.js";
88
- import "./register.subclis-BRPnstmu.js";
89
- import "./command-registry-ByBvyNis.js";
88
+ import "./register.subclis-CnDo2jzv.js";
89
+ import "./command-registry-D8fj6th4.js";
90
90
  import "./program-context-BFKw4l9I.js";
91
- import "./completion-cli-BFBbL-u4.js";
91
+ import "./completion-cli-BxspmuYm.js";
92
92
  import "./daemon-runtime-2Y9RfgcP.js";
93
93
  import "./runtime-guard-p4-FMx0l.js";
94
94
  import { f as openUrl, g as resolveControlUiLinks, i as detectBrowserOpenSupport, o as formatControlUiSshHint } from "./onboard-helpers-Bm-oyLWy.js";
@@ -105,8 +105,8 @@ import "./logging-BeA4q4J_.js";
105
105
  import "./doctor-config-flow-wvoEFNeZ.js";
106
106
  import "./systemd-linger-BM4qvprK.js";
107
107
  import "./health-format-DaP03FBk.js";
108
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-uUOSg6Qq.js";
109
- import "./doctor-completion-BqbhVdbe.js";
108
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CnYM7W0j.js";
109
+ import "./doctor-completion-CX7LjkOD.js";
110
110
  import path from "node:path";
111
111
  import fs from "node:fs/promises";
112
112
  import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
@@ -83,7 +83,7 @@ import "./replies-B2O2eRh6.js";
83
83
  import "./pi-tools.policy-Dyx3nBmp.js";
84
84
  import "./model-BRcKPW49.js";
85
85
  import "./runtime-guard-BZ3_1QqS.js";
86
- import "./program-context-DYS38Clb.js";
86
+ import "./program-context-BSUkEz3n.js";
87
87
  import "./catalog-CSgSg5Gp.js";
88
88
  import "./skills-status-BNDqwHkP.js";
89
89
  import { t as copyToClipboard } from "./clipboard-McRwF3r0.js";
@@ -91,7 +91,7 @@ import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint }
91
91
  import "./note-CHrtEumO.js";
92
92
  import "./plugin-auto-enable-D2TNEv3x.js";
93
93
  import "./channels-status-issues-DC8vgOMo.js";
94
- import "./completion-cli-rzEsCzmE.js";
94
+ import "./completion-cli-C-85b5b8.js";
95
95
  import "./daemon-runtime-BpfA4d6Q.js";
96
96
  import { f as openUrl, g as resolveControlUiLinks, i as detectBrowserOpenSupport, o as formatControlUiSshHint } from "./onboard-helpers-CHfdRdZR.js";
97
97
  import "./systemd-9LEEqibe.js";
@@ -107,8 +107,8 @@ import "./logging-B96FQvnn.js";
107
107
  import "./doctor-config-flow-CYDx1U0Z.js";
108
108
  import "./systemd-linger-PqG8iGCt.js";
109
109
  import "./health-format-39e76m9p.js";
110
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-Kgvc0-w2.js";
111
- import "./doctor-completion-B8cqL1A0.js";
110
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-B5wlPYN5.js";
111
+ import "./doctor-completion-BwHbIZjF.js";
112
112
  import path from "node:path";
113
113
  import fs from "node:fs/promises";
114
114
  import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
@@ -35,7 +35,7 @@ import "./onboard-helpers-CHfdRdZR.js";
35
35
  import "./systemd-9LEEqibe.js";
36
36
  import "./service-AP9pR9R5.js";
37
37
  import "./health-D8cKia4i.js";
38
- import "./onboarding-CXaQnqxR.js";
38
+ import "./onboarding-4v9LJueP.js";
39
39
  import "./shared-_wwqvx84.js";
40
40
  import "./auth-token-SebYuqfR.js";
41
41
  import "./logging-B96FQvnn.js";
@@ -44,7 +44,7 @@ import "./openai-model-default-CDDFpxUr.js";
44
44
  import "./model-picker-CV56GE8A.js";
45
45
  import "./systemd-linger-PqG8iGCt.js";
46
46
  import "./onboard-custom-B2fJvyxt.js";
47
- import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-kDOde8WJ.js";
47
+ import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-C8IQnigm.js";
48
48
 
49
49
  //#region src/cli/program/register.onboard.ts
50
50
  function resolveInstallDaemonFlag(command, opts) {
@@ -30,7 +30,7 @@ import "./onboard-helpers-Bm-oyLWy.js";
30
30
  import "./systemd-p_nEAkHC.js";
31
31
  import "./service-BIixwO-v.js";
32
32
  import "./health-DdzNc1yA.js";
33
- import "./onboarding-BJ27gXxY.js";
33
+ import "./onboarding-BIq5BxG0.js";
34
34
  import "./shared-CIeW3aWF.js";
35
35
  import "./auth-token-Brb1Askz.js";
36
36
  import "./logging-BeA4q4J_.js";
@@ -39,7 +39,7 @@ import "./openai-model-default-BVPmAuXK.js";
39
39
  import "./model-picker-4NUXHy8M.js";
40
40
  import "./systemd-linger-BM4qvprK.js";
41
41
  import "./onboard-custom-DcZ2SEUv.js";
42
- import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-_3W1qIFk.js";
42
+ import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-CAIujkV7.js";
43
43
 
44
44
  //#region src/cli/program/register.onboard.ts
45
45
  function resolveInstallDaemonFlag(command, opts) {
@@ -36,7 +36,7 @@ import "./onboard-helpers-CHfdRdZR.js";
36
36
  import "./systemd-9LEEqibe.js";
37
37
  import "./service-AP9pR9R5.js";
38
38
  import "./health-D8cKia4i.js";
39
- import "./onboarding-CXaQnqxR.js";
39
+ import "./onboarding-4v9LJueP.js";
40
40
  import "./shared-_wwqvx84.js";
41
41
  import "./auth-token-SebYuqfR.js";
42
42
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-B96FQvnn.js";
@@ -44,7 +44,7 @@ import "./openai-model-default-CDDFpxUr.js";
44
44
  import "./model-picker-CV56GE8A.js";
45
45
  import "./systemd-linger-PqG8iGCt.js";
46
46
  import "./onboard-custom-B2fJvyxt.js";
47
- import { t as onboardCommand } from "./onboard-kDOde8WJ.js";
47
+ import { t as onboardCommand } from "./onboard-C8IQnigm.js";
48
48
  import JSON5 from "json5";
49
49
  import fs from "node:fs/promises";
50
50
 
@@ -31,7 +31,7 @@ import "./onboard-helpers-Bm-oyLWy.js";
31
31
  import "./systemd-p_nEAkHC.js";
32
32
  import "./service-BIixwO-v.js";
33
33
  import "./health-DdzNc1yA.js";
34
- import "./onboarding-BJ27gXxY.js";
34
+ import "./onboarding-BIq5BxG0.js";
35
35
  import "./shared-CIeW3aWF.js";
36
36
  import "./auth-token-Brb1Askz.js";
37
37
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-BeA4q4J_.js";
@@ -39,7 +39,7 @@ import "./openai-model-default-BVPmAuXK.js";
39
39
  import "./model-picker-4NUXHy8M.js";
40
40
  import "./systemd-linger-BM4qvprK.js";
41
41
  import "./onboard-custom-DcZ2SEUv.js";
42
- import { t as onboardCommand } from "./onboard-_3W1qIFk.js";
42
+ import { t as onboardCommand } from "./onboard-CAIujkV7.js";
43
43
  import JSON5 from "json5";
44
44
  import fs from "node:fs/promises";
45
45
 
@@ -41,7 +41,7 @@ const entries = [
41
41
  description: "Run, inspect, and query the WebSocket Gateway",
42
42
  hasSubcommands: true,
43
43
  register: async (program) => {
44
- (await import("./gateway-cli-DfRlFuH-.js")).registerGatewayCli(program);
44
+ (await import("./gateway-cli-CW-Z71cE.js")).registerGatewayCli(program);
45
45
  }
46
46
  },
47
47
  {
@@ -121,7 +121,7 @@ const entries = [
121
121
  description: "Open a terminal UI connected to the Gateway",
122
122
  hasSubcommands: false,
123
123
  register: async (program) => {
124
- (await import("./tui-cli-B-obcHoZ.js")).registerTuiCli(program);
124
+ (await import("./tui-cli-25xTveHh.js")).registerTuiCli(program);
125
125
  }
126
126
  },
127
127
  {
@@ -229,7 +229,7 @@ const entries = [
229
229
  description: "Update Symi and inspect update channel status",
230
230
  hasSubcommands: true,
231
231
  register: async (program) => {
232
- (await import("./update-cli-CUgElk5d.js")).registerUpdateCli(program);
232
+ (await import("./update-cli-Dl_QbjXc.js")).registerUpdateCli(program);
233
233
  }
234
234
  },
235
235
  {
@@ -237,7 +237,7 @@ const entries = [
237
237
  description: "Generate shell completion script",
238
238
  hasSubcommands: false,
239
239
  register: async (program) => {
240
- (await import("./completion-cli-BFBbL-u4.js").then((n) => n.n)).registerCompletionCli(program);
240
+ (await import("./completion-cli-BxspmuYm.js").then((n) => n.n)).registerCompletionCli(program);
241
241
  }
242
242
  }
243
243
  ];
@@ -360,7 +360,7 @@ async function runCli(argv = process$1.argv) {
360
360
  assertSupportedRuntime();
361
361
  if (await tryRouteCli(normalizedArgv)) return;
362
362
  enableConsoleCapture();
363
- const { buildProgram } = await import("./program-BPcy7UBj.js");
363
+ const { buildProgram } = await import("./program-C19G7o-Q.js");
364
364
  const program = buildProgram();
365
365
  installUnhandledRejectionHandler();
366
366
  process$1.on("uncaughtException", (error) => {
@@ -392,10 +392,10 @@ async function runCli(argv = process$1.argv) {
392
392
  const { getProgramContext } = await import("./program-context-BFKw4l9I.js").then((n) => n.n);
393
393
  const ctx = getProgramContext(program);
394
394
  if (ctx) {
395
- const { registerCoreCliByName } = await import("./command-registry-ByBvyNis.js").then((n) => n.t);
395
+ const { registerCoreCliByName } = await import("./command-registry-D8fj6th4.js").then((n) => n.t);
396
396
  await registerCoreCliByName(program, ctx, primary, parseArgv);
397
397
  }
398
- const { registerSubCliByName } = await import("./register.subclis-BRPnstmu.js").then((n) => n.a);
398
+ const { registerSubCliByName } = await import("./register.subclis-CnDo2jzv.js").then((n) => n.a);
399
399
  await registerSubCliByName(program, primary);
400
400
  }
401
401
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -7,21 +7,21 @@ import "./reply-prefix-i-FPYcoQ.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./plugins-Cp39v6b_.js";
9
9
  import "./replies-DU-fXkSk.js";
10
- import { n as runAgentTurn } from "./pi-embedded-8Zh_Y5ur.js";
11
- import "./deliver-Mqq3tgqB.js";
10
+ import { n as runAgentTurn } from "./pi-embedded-CGebiST2.js";
11
+ import "./deliver-DvW5xHHr.js";
12
12
  import "./diagnostic-BvZmqxYI.js";
13
13
  import "./diagnostic-session-state-CWtaDOiK.js";
14
14
  import "./chunk-BjnT3w_x.js";
15
15
  import "./ssrf-CBajKNWO.js";
16
16
  import "./manifest-registry-CAWGTwb5.js";
17
- import "./chrome-CPSDqbK6.js";
17
+ import "./chrome-CQn8fDIy.js";
18
18
  import "./skills-Bn0f9KTL.js";
19
19
  import "./redact-ojHFHOAb.js";
20
20
  import "./errors-C6sHIFo_.js";
21
21
  import "./tokens-Dm_xa-oz.js";
22
22
  import "./thinking-BKsvyjWX.js";
23
23
  import "./paths-N698mtPE.js";
24
- import "./manager-MbrGCH4o.js";
24
+ import "./manager-D0NIHMuQ.js";
25
25
  import "./sqlite-jFnvSfLz.js";
26
26
  import "./markdown-tables-BtWlyyt1.js";
27
27
  import "./commands-registry-BRWqR35Z.js";
@@ -2381,7 +2381,7 @@ function createSessionActions(context) {
2381
2381
  if (message.role === "user") {
2382
2382
  const text = extractTextFromMessage(message);
2383
2383
  if (text) {
2384
- if (text.startsWith("Read SYMIPULSE.md") || text.startsWith("Review your response against the original") || /^\[.+\]\s+(Not connected|Connected as)\b/i.test(text)) {
2384
+ if (text.startsWith("Review your response against the original") || /^\[.+\]\s+(Not connected|Connected as)\b/i.test(text)) {
2385
2385
  if (showTools) chatLog.addSystem(text);
2386
2386
  continue;
2387
2387
  }
@@ -2381,7 +2381,7 @@ function createSessionActions(context) {
2381
2381
  if (message.role === "user") {
2382
2382
  const text = extractTextFromMessage(message);
2383
2383
  if (text) {
2384
- if (text.startsWith("Read SYMIPULSE.md") || text.startsWith("Review your response against the original") || /^\[.+\]\s+(Not connected|Connected as)\b/i.test(text)) {
2384
+ if (text.startsWith("Review your response against the original") || /^\[.+\]\s+(Not connected|Connected as)\b/i.test(text)) {
2385
2385
  if (showTools) chatLog.addSystem(text);
2386
2386
  continue;
2387
2387
  }
@@ -36,7 +36,7 @@ import "./commands-registry-Bccp0eH5.js";
36
36
  import "./tool-display-wSdT0Ynz.js";
37
37
  import { t as parseTimeoutMs } from "./parse-timeout-CMozMfzr.js";
38
38
  import { t as formatDocsLink } from "./links-Db3Rw0Tg.js";
39
- import { t as runTui } from "./tui-B4Pd0T9l.js";
39
+ import { t as runTui } from "./tui-D0j61PXx.js";
40
40
 
41
41
  //#region src/cli/tui-cli.ts
42
42
  function registerTuiCli(program) {
@@ -41,7 +41,7 @@ import "./pairing-token-CURbSHdi.js";
41
41
  import "./tool-display-Dr6VaTg5.js";
42
42
  import { t as parseTimeoutMs } from "./parse-timeout-CpgyC-LD.js";
43
43
  import { t as formatDocsLink } from "./links-CSaUKNKm.js";
44
- import { t as runTui } from "./tui-DBrpAw57.js";
44
+ import { t as runTui } from "./tui-DFuScHlA.js";
45
45
 
46
46
  //#region src/cli/tui-cli.ts
47
47
  function registerTuiCli(program) {
@@ -86,7 +86,7 @@ import "./replies-B2O2eRh6.js";
86
86
  import "./pi-tools.policy-Dyx3nBmp.js";
87
87
  import "./model-BRcKPW49.js";
88
88
  import { r as parseSemver } from "./runtime-guard-BZ3_1QqS.js";
89
- import "./program-context-DYS38Clb.js";
89
+ import "./program-context-BSUkEz3n.js";
90
90
  import "./catalog-CSgSg5Gp.js";
91
91
  import "./skills-status-BNDqwHkP.js";
92
92
  import { n as inheritOptionFromParent } from "./command-options-ChiIn6Na.js";
@@ -98,7 +98,7 @@ import "./npm-registry-spec-BXw_6vF6.js";
98
98
  import "./skill-scanner-YF2jR4RY.js";
99
99
  import "./installs-DhSLZRT7.js";
100
100
  import "./channels-status-issues-DC8vgOMo.js";
101
- import { r as installCompletion } from "./completion-cli-rzEsCzmE.js";
101
+ import { r as installCompletion } from "./completion-cli-C-85b5b8.js";
102
102
  import "./daemon-runtime-BpfA4d6Q.js";
103
103
  import "./onboard-helpers-CHfdRdZR.js";
104
104
  import "./systemd-9LEEqibe.js";
@@ -119,8 +119,8 @@ import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from
119
119
  import "./doctor-config-flow-CYDx1U0Z.js";
120
120
  import "./systemd-linger-PqG8iGCt.js";
121
121
  import "./health-format-39e76m9p.js";
122
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-Kgvc0-w2.js";
123
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-B8cqL1A0.js";
122
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-B5wlPYN5.js";
123
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BwHbIZjF.js";
124
124
  import path from "node:path";
125
125
  import os from "node:os";
126
126
  import fs from "node:fs/promises";
@@ -92,10 +92,10 @@ import "./npm-registry-spec-NLo2PCol.js";
92
92
  import "./skill-scanner-CuoStu03.js";
93
93
  import "./installs-cPraL4Dg.js";
94
94
  import "./channels-status-issues-GSsGZvfn.js";
95
- import "./register.subclis-BRPnstmu.js";
96
- import "./command-registry-ByBvyNis.js";
95
+ import "./register.subclis-CnDo2jzv.js";
96
+ import "./command-registry-D8fj6th4.js";
97
97
  import "./program-context-BFKw4l9I.js";
98
- import { r as installCompletion } from "./completion-cli-BFBbL-u4.js";
98
+ import { r as installCompletion } from "./completion-cli-BxspmuYm.js";
99
99
  import "./daemon-runtime-2Y9RfgcP.js";
100
100
  import { r as parseSemver } from "./runtime-guard-p4-FMx0l.js";
101
101
  import "./onboard-helpers-Bm-oyLWy.js";
@@ -117,8 +117,8 @@ import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from
117
117
  import "./doctor-config-flow-wvoEFNeZ.js";
118
118
  import "./systemd-linger-BM4qvprK.js";
119
119
  import "./health-format-DaP03FBk.js";
120
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-uUOSg6Qq.js";
121
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BqbhVdbe.js";
120
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CnYM7W0j.js";
121
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CX7LjkOD.js";
122
122
  import { spawn, spawnSync } from "node:child_process";
123
123
  import os from "node:os";
124
124
  import path from "node:path";
@@ -38,10 +38,6 @@ git commit -m "Add agent workspace"
38
38
  - On session start, read today + yesterday if present.
39
39
  - Capture durable facts, preferences, and decisions; avoid secrets.
40
40
 
41
- ## Heartbeats (optional)
42
-
43
- - SYMIPULSE.md can hold a tiny checklist for heartbeat runs; keep it small.
44
-
45
41
  ## Customize
46
42
 
47
43
  - Add your preferred style, rules, and "memory" here.
@@ -190,88 +190,27 @@ Skills provide your tools. When you need one, check its `SKILL.md`. Keep local n
190
190
 
191
191
  - **WhatsApp:** No headers — use **bold** or CAPS for emphasis
192
192
 
193
- ## 💓 Heartbeats - Be Proactive!
193
+ ## Periodic Work Use Cron
194
194
 
195
- When you receive a heartbeat poll (message matches the configured heartbeat prompt), don't just reply `SYMIPULSE_OK` every time. Use heartbeats productively!
195
+ For scheduled or periodic tasks, use the cron tool. Examples:
196
196
 
197
- Default heartbeat prompt:
198
- `Read SYMIPULSE.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply SYMIPULSE_OK.`
199
-
200
- You are free to edit `SYMIPULSE.md` with a short checklist or reminders. Keep it small to limit token burn.
201
-
202
- ### Heartbeat vs Cron: When to Use Each
203
-
204
- **Use heartbeat when:**
205
-
206
- - Multiple checks can batch together (inbox + calendar + notifications in one turn)
207
- - You need conversational context from recent messages
208
- - Timing can drift slightly (every ~30 min is fine, not exact)
209
- - You want to reduce API calls by combining periodic checks
210
-
211
- **Use cron when:**
212
-
213
- - Exact timing matters ("9:00 AM sharp every Monday")
197
+ - Exact timing ("9:00 AM sharp every Monday")
214
198
  - Task needs isolation from main session history
215
- - You want a different model or thinking level for the task
199
+ - A different model or thinking level for the task
216
200
  - One-shot reminders ("remind me in 20 minutes")
217
201
  - Output should deliver directly to a channel without main session involvement
218
202
 
219
- **Tip:** Batch similar periodic checks into `SYMIPULSE.md` instead of creating multiple cron jobs. Use cron for precise schedules and standalone tasks.
220
-
221
- **Things to check (rotate through these, 2-4 times per day):**
222
-
223
- - **Emails** - Any urgent unread messages?
224
- - **Calendar** - Upcoming events in next 24-48h?
225
- - **Mentions** - Twitter/social notifications?
226
- - **Weather** - Relevant if your human might go out?
227
-
228
- **Track your checks** in `memory/heartbeat-state.json`:
203
+ ## 🔄 Memory Maintenance
229
204
 
230
- ```json
231
- {
232
- "lastChecks": {
233
- "email": 1703275200,
234
- "calendar": 1703260800,
235
- "weather": null
236
- }
237
- }
238
- ```
205
+ L3 consolidation runs automatically after each memory-flush. You don't hand-roll it. What you _can_ do:
239
206
 
240
- **When to reach out:**
241
-
242
- - Important email arrived
243
- - Calendar event coming up (<2h)
244
- - Something interesting you found
245
- - It's been >8h since you said anything
246
-
247
- **When to stay quiet (SYMIPULSE_OK):**
248
-
249
- - Late night (23:00-08:00) unless urgent
250
- - Human is clearly busy
251
- - Nothing new since last check
252
- - You just checked <30 minutes ago
253
-
254
- **Proactive work you can do without asking:**
255
-
256
- - Read and organize memory files
257
- - Check on projects (git status, etc.)
258
- - Update documentation
259
- - Commit and push your own changes
260
- - **Review recent daily memory** (see below)
261
-
262
- ### 🔄 Memory Maintenance (During Heartbeats)
263
-
264
- L3 consolidation runs automatically after each memory-flush. You don't hand-roll it. What you _can_ do on a heartbeat:
265
-
266
- 1. Read through recent `memory/YYYY-MM-DD.md` files for context.
207
+ 1. Read recent `memory/YYYY-MM-DD.md` files for context.
267
208
  2. Read `memory/symi-core.md` + `memory/symi-beliefs.md` to see what has stabilized about you and the user.
268
209
  3. Notice when a recurring pattern hasn't been pinned yet — if the human has said the same preference three times over different days, call `memory_pin` on it.
269
210
  4. If `symi-core.md` contains a stale belief contradicted by recent events, write the correction into today's `memory/YYYY-MM-DD.md` and (if the human is present) mention you've updated. The next L3 cycle will reconcile.
270
211
 
271
212
  Daily files are raw observations. `symi-core.md` is your curated evolving self, rewritten by L3 each cycle. `MEMORY.md` is the human's own notes — read it, don't rewrite it.
272
213
 
273
- The goal: Be helpful without being annoying. Check in a few times a day, do useful background work, but respect quiet time.
274
-
275
214
  ## Make It Yours
276
215
 
277
216
  This is a starting point. Add your own conventions, style, and rules as you figure out what works.
@@ -76,13 +76,6 @@ Use `symi config get` (no args) to see all top-level keys.
76
76
  | `memory.backend` | string | `"builtin"`, `"qmd"` |
77
77
  | `memory.citations` | string | `"auto"`, `"on"`, `"off"` |
78
78
 
79
- ## Symipulse (Heartbeat)
80
-
81
- | Path | Type | Example |
82
- | ------------------------------------------- | ------- | ------- |
83
- | `agents.defaults.heartbeat.enabled` | boolean | `true` |
84
- | `agents.defaults.heartbeat.intervalMinutes` | number | `30` |
85
-
86
79
  ## Tool Access Control
87
80
 
88
81
  | Path | Type | Example |
@@ -1,6 +1,6 @@
1
1
  import { expect, it } from "vitest";
2
2
 
3
- type ResolveTargetMode = "explicit" | "implicit" | "heartbeat";
3
+ type ResolveTargetMode = "explicit" | "implicit";
4
4
 
5
5
  type ResolveTargetResult = {
6
6
  ok: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symerian/symi",
3
- "version": "3.4.7",
3
+ "version": "3.4.8",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/jaysteelmind/symi#readme",
@@ -253,13 +253,13 @@ This prevents the user from seeing only "Agent failed before reply" and having n
253
253
 
254
254
  ## Auto-Notify on Completion
255
255
 
256
- For long-running background tasks, append a wake trigger to your prompt so Symi gets notified immediately when the agent finishes (instead of waiting for the next heartbeat):
256
+ For long-running background tasks, append a wake trigger to your prompt so Symi gets notified immediately when the agent finishes:
257
257
 
258
258
  ```
259
259
  ... your task here.
260
260
 
261
261
  When completely finished, run this command to notify me:
262
- symi system event --text "Done: [brief summary of what was built]" --mode now
262
+ symi system event --text "Done: [brief summary of what was built]"
263
263
  ```
264
264
 
265
265
  **Example:**
@@ -1,103 +0,0 @@
1
- ---
2
- title: "SYMIPULSE.md Template"
3
- summary: "Workspace template for SYMIPULSE.md"
4
- read_when:
5
- - Bootstrapping a workspace manually
6
- ---
7
-
8
- # SYMIPULSE.md - Periodic Tasks
9
-
10
- ## Daily Journaling (Every Heartbeat — Priority 1)
11
-
12
- Before anything else, write to today's daily log (`memory/YYYY-MM-DD.md`; create `memory/` if needed).
13
-
14
- ### What to journal
15
-
16
- Review the current session transcript since the last heartbeat. If there were any user interactions, tool uses, decisions, errors, or notable events — append a brief entry:
17
-
18
- ```markdown
19
- ## Session: [short label] (HH:MM TZ)
20
-
21
- - [1-3 bullet points: what happened, what was decided, what was learned]
22
- ```
23
-
24
- ### Rules
25
-
26
- - **APPEND only** — never overwrite existing entries in the file
27
- - Skip if the only activity since last heartbeat was another heartbeat (no user interaction)
28
- - Keep entries concise: 2-5 lines per session block
29
- - Include timestamps so entries are traceable
30
- - If truly nothing happened (no user messages, no tool calls), skip journaling and move to consolidation
31
-
32
- ## Memory Consolidation (Priority 2)
33
-
34
- Every heartbeat, check if consolidation is needed. Run consolidation when:
35
-
36
- - It's been more than 24 hours since the last consolidation (check `memory/heartbeat-state.json` → `lastChecks.memoryConsolidation`)
37
- - There are 3+ daily log files that haven't been distilled into MEMORY.md
38
-
39
- ### Consolidation Steps
40
-
41
- 1. **Read all recent daily logs** (`memory/YYYY-MM-DD*.md` from last 7 days)
42
- 2. **Distill into structured MEMORY.md sections:**
43
- - `## User` — name, timezone, preferences, working style, communication patterns
44
- - `## Projects` — active projects, status, key decisions, blockers
45
- - `## Preferences` — technical choices, tool preferences, response style
46
- - `## Lessons Learned` — what worked, what didn't, mistakes to avoid
47
- - `## People & Contacts` — names, roles, relationships mentioned
48
- - `## Open Items` — pending tasks, follow-ups, things to remember
49
- 3. **Keep MEMORY.md under 2000 tokens** — be ruthlessly concise. Use bullet points, not prose. Every line should be a retrievable fact.
50
- 4. **Remove stale entries** — delete items from MEMORY.md that are resolved, outdated, or superseded
51
- 5. **Archive old daily logs** — files older than 14 days: extract any unrecorded insights, then move to `memory/archive/` (create if needed)
52
- 6. **Update heartbeat state** — set `lastChecks.memoryConsolidation` to current timestamp
53
-
54
- ### MEMORY.md Format (Target)
55
-
56
- ```markdown
57
- ## User
58
-
59
- - Name: [name], TZ: [timezone]
60
- - Prefers: [concise/detailed], [practical/theoretical]
61
- - Working on: [current focus]
62
-
63
- ## Projects
64
-
65
- - [project]: [status] — [key decision or note]
66
-
67
- ## Preferences
68
-
69
- - [preference]: [detail]
70
-
71
- ## Lessons Learned
72
-
73
- - [lesson]: [context]
74
-
75
- ## Open Items
76
-
77
- - [ ] [task or follow-up]
78
- ```
79
-
80
- ### Why This Matters
81
-
82
- MEMORY.md is injected into every system prompt. A bloated or disorganized MEMORY.md wastes tokens and degrades recall quality. A tight, structured one makes the model contextually aware on every turn.
83
-
84
- ## Pattern Detection (Every 5th Heartbeat)
85
-
86
- - Search recent conversations for repeated themes: "always", "never", "prefer", "don't like"
87
- - Identify new communication or technical preferences
88
- - Update MEMORY.md Preferences section
89
- - Look for: time patterns, recurring tasks, common frustrations
90
-
91
- ## Self-Assessment (Every 10th Heartbeat)
92
-
93
- - Verify MEMORY.md preferences are being followed in recent interactions
94
- - Check if past mistakes are being repeated
95
- - Remove any MEMORY.md entries that are no longer accurate
96
-
97
- ## Execution Rules
98
-
99
- - Only run consolidation in main session (not group chats)
100
- - If nothing needs consolidation, reply SYMIPULSE_OK
101
- - Keep all updates concise — quality over quantity
102
- - Archive, don't delete — raw logs may be useful later
103
- - After consolidation, briefly note what was updated in the daily log