@cryptiklemur/lattice 5.10.0 → 5.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/client/assets/{angular-html-BDIcxkJq.js → angular-html-BoFzmWT8.js} +1 -1
  2. package/dist/client/assets/{angular-ts-Bt22ouNH.js → angular-ts-DZnI8rKE.js} +1 -1
  3. package/dist/client/assets/{apl-p8qkxzEK.js → apl-DstVmncE.js} +1 -1
  4. package/dist/client/assets/{astro-CIaMc49M.js → astro-DTPCjzEx.js} +1 -1
  5. package/dist/client/assets/{blade-BR56EAMD.js → blade-6q42Ss3F.js} +1 -1
  6. package/dist/client/assets/{c-Dli0HzAh.js → c-BQDGJ-nQ.js} +1 -1
  7. package/dist/client/assets/{cobol-Cad15ECy.js → cobol-Dlh0WvsZ.js} +1 -1
  8. package/dist/client/assets/{coffee-DpyATEbF.js → coffee-DdQv129j.js} +1 -1
  9. package/dist/client/assets/{cpp-KN8_NFsf.js → cpp-DhbQJIv4.js} +1 -1
  10. package/dist/client/assets/{crystal-CuyGv0kh.js → crystal-C22kERUB.js} +1 -1
  11. package/dist/client/assets/{css-Cm3q4bxn.js → css-n31O5kHj.js} +1 -1
  12. package/dist/client/assets/{dist-BjxsMc4u.js → dist-D8okl7lw.js} +2 -2
  13. package/dist/client/assets/{edge-B6S7CSbx.js → edge-Cgwx-o_7.js} +1 -1
  14. package/dist/client/assets/{elixir-CNUy9H8T.js → elixir-DAGM2WKD.js} +1 -1
  15. package/dist/client/assets/{elm-CNfcWmb9.js → elm-BLw_7oO9.js} +1 -1
  16. package/dist/client/assets/{erb-DWebzDaI.js → erb-DCaNhYa7.js} +1 -1
  17. package/dist/client/assets/{git-rebase-B_Pt2ZBK.js → git-rebase-CNNhb8-g.js} +1 -1
  18. package/dist/client/assets/{glimmer-js-CVwoOd72.js → glimmer-js-BnZd88Wi.js} +1 -1
  19. package/dist/client/assets/{glimmer-ts-CjtFSxjz.js → glimmer-ts-DvFNbZu-.js} +1 -1
  20. package/dist/client/assets/{glsl-CP4rggAA.js → glsl-Dnrk_Jnx.js} +1 -1
  21. package/dist/client/assets/{graphql-Dbm6sAtp.js → graphql-DlWTPvCG.js} +1 -1
  22. package/dist/client/assets/{hack-Bj9y3SGf.js → hack-DQg1Ek33.js} +1 -1
  23. package/dist/client/assets/{haml-DRGrdf3f.js → haml-DSk45qIE.js} +1 -1
  24. package/dist/client/assets/{handlebars-CFKjcBMg.js → handlebars-DuLvATB2.js} +1 -1
  25. package/dist/client/assets/{html-Vcd4eHHg.js → html-D4DiUnLg.js} +1 -1
  26. package/dist/client/assets/{html-derivative-BF0YbD4L.js → html-derivative-CS5MZ6d9.js} +1 -1
  27. package/dist/client/assets/{http-CGVTa2NT.js → http-CkDncfer.js} +1 -1
  28. package/dist/client/assets/{hurl-B0GrsGqd.js → hurl-DU39oO3U.js} +1 -1
  29. package/dist/client/assets/{index-CX1tudsF.js → index-CHPfE1Zl.js} +129 -129
  30. package/dist/client/assets/index-DHUKmLLC.css +2 -0
  31. package/dist/client/assets/{java-BJHQqHsm.js → java-lntACKEu.js} +1 -1
  32. package/dist/client/assets/{javascript-CmuMsKrc.js → javascript-CxkFc6nV.js} +1 -1
  33. package/dist/client/assets/{jinja-JxCLeq1j.js → jinja-DolO2zO7.js} +1 -1
  34. package/dist/client/assets/{jison-BdgAUhei.js → jison-Cok5FPev.js} +1 -1
  35. package/dist/client/assets/{json-DtPissHL.js → json-BebuQPrq.js} +1 -1
  36. package/dist/client/assets/{jsx-DUAxxDkP.js → jsx-iLBaUyXr.js} +1 -1
  37. package/dist/client/assets/{julia-DxDlbL6e.js → julia-C5Dsc7cH.js} +1 -1
  38. package/dist/client/assets/{just-CVmAAx2R.js → just-DJYqq_9R.js} +1 -1
  39. package/dist/client/assets/{latex-uwxggTWA.js → latex-BTTYiKj1.js} +1 -1
  40. package/dist/client/assets/{liquid-xsETAJJy.js → liquid-DpAKCrOB.js} +1 -1
  41. package/dist/client/assets/{lua-B2Hh8PgD.js → lua-BZ6b1hko.js} +1 -1
  42. package/dist/client/assets/{marko-yDeGxD87.js → marko-D8VK6iGt.js} +1 -1
  43. package/dist/client/assets/{mdc-QMp4ieYR.js → mdc-Paa3XzwY.js} +1 -1
  44. package/dist/client/assets/{nginx-7gmRmcqz.js → nginx-C5k9mWtJ.js} +1 -1
  45. package/dist/client/assets/{nim-CA8SNY_7.js → nim-Dst6YSnE.js} +1 -1
  46. package/dist/client/assets/{perl-lx5nW4VC.js → perl-XhiCjgBp.js} +1 -1
  47. package/dist/client/assets/{php-DgHiW953.js → php-BcsPLnLU.js} +1 -1
  48. package/dist/client/assets/{pug-CbbB1vwb.js → pug-GLH9-eAJ.js} +1 -1
  49. package/dist/client/assets/{qml-COrzwCIh.js → qml-Cj_lJioE.js} +1 -1
  50. package/dist/client/assets/{r-Dv7pZJDH.js → r-B70aGYK5.js} +1 -1
  51. package/dist/client/assets/{razor-D2m8EDP5.js → razor-R3gub_zy.js} +1 -1
  52. package/dist/client/assets/{regexp-BXLT-jPc.js → regexp-itC0dIUJ.js} +1 -1
  53. package/dist/client/assets/{rst-_S6rrUYh.js → rst-DdyoV8E2.js} +1 -1
  54. package/dist/client/assets/{ruby-C3XO7tYY.js → ruby-BYBZsv66.js} +1 -1
  55. package/dist/client/assets/{sas-DP2k4iuN.js → sas-fqfqXqj1.js} +1 -1
  56. package/dist/client/assets/{scss-lhLFMXGn.js → scss-B-ELv6mu.js} +1 -1
  57. package/dist/client/assets/{shellscript-BYlBPHen.js → shellscript-BgB8TNw6.js} +1 -1
  58. package/dist/client/assets/{shellsession-CbVyQKWZ.js → shellsession-BLK2Dgkm.js} +1 -1
  59. package/dist/client/assets/{soy-Be8a0lHq.js → soy-C7_RmNrp.js} +1 -1
  60. package/dist/client/assets/{sql-2KxvU9YS.js → sql-AUgbUJq4.js} +1 -1
  61. package/dist/client/assets/{stata-BxlWftTS.js → stata-CIVqSIOr.js} +1 -1
  62. package/dist/client/assets/{surrealql-CJ-q86nR.js → surrealql-BzRQzc5S.js} +1 -1
  63. package/dist/client/assets/{svelte-Q1ml0OiY.js → svelte-BCIwEwtb.js} +1 -1
  64. package/dist/client/assets/{templ-BbfPZhtu.js → templ-C1hbwe4u.js} +1 -1
  65. package/dist/client/assets/{tex-Dcth4Gi6.js → tex-CI4tIsaP.js} +1 -1
  66. package/dist/client/assets/{ts-tags-BKhSOXI3.js → ts-tags-SUeikhEp.js} +1 -1
  67. package/dist/client/assets/{tsx-CS6iQ0XH.js → tsx-xkp7aIZs.js} +1 -1
  68. package/dist/client/assets/{twig-BHp31ZxS.js → twig-CGgBSAyc.js} +1 -1
  69. package/dist/client/assets/{typescript-16YJBTaO.js → typescript-O2YMTl_s.js} +1 -1
  70. package/dist/client/assets/{vue-CMKwTi4r.js → vue-DsNRxos1.js} +1 -1
  71. package/dist/client/assets/{vue-html-Dr8VUA2G.js → vue-html-CuY3t7bs.js} +1 -1
  72. package/dist/client/assets/{vue-vine-DZUqDerl.js → vue-vine-C6kSCKwY.js} +1 -1
  73. package/dist/client/assets/{xml-CBbBKKDC.js → xml-DafwzOLY.js} +1 -1
  74. package/dist/client/assets/{xsl-DWEX6PKX.js → xsl-1SGGZibr.js} +1 -1
  75. package/dist/client/assets/{yaml-DvKvvh3X.js → yaml-DSVhzmhr.js} +1 -1
  76. package/dist/client/index.html +2 -2
  77. package/dist/client/sw.js +1 -1
  78. package/dist/server/analytics/engine.js +241 -241
  79. package/dist/server/assets.js +4 -4
  80. package/dist/server/auth/passphrase.js +13 -13
  81. package/dist/server/config.js +7 -7
  82. package/dist/server/daemon.js +93 -93
  83. package/dist/server/features/brainstorm.js +42 -42
  84. package/dist/server/features/ralph-loop.js +33 -33
  85. package/dist/server/features/scheduler.js +53 -53
  86. package/dist/server/features/specs.js +54 -54
  87. package/dist/server/features/sticky-notes.js +17 -17
  88. package/dist/server/features/superpowers.js +24 -24
  89. package/dist/server/handlers/analytics.js +1 -1
  90. package/dist/server/handlers/attachment.js +32 -32
  91. package/dist/server/handlers/bookmarks.js +4 -4
  92. package/dist/server/handlers/brainstorm.js +4 -4
  93. package/dist/server/handlers/chat.js +54 -54
  94. package/dist/server/handlers/editor.js +13 -13
  95. package/dist/server/handlers/fs.js +51 -51
  96. package/dist/server/handlers/hooks.js +20 -20
  97. package/dist/server/handlers/loop.js +6 -6
  98. package/dist/server/handlers/memory.js +44 -44
  99. package/dist/server/handlers/mesh.js +60 -60
  100. package/dist/server/handlers/notes.js +7 -7
  101. package/dist/server/handlers/plugins.js +174 -174
  102. package/dist/server/handlers/project-settings.js +26 -26
  103. package/dist/server/handlers/scheduler.js +6 -6
  104. package/dist/server/handlers/session.js +24 -24
  105. package/dist/server/handlers/settings.js +21 -21
  106. package/dist/server/handlers/skills.js +91 -91
  107. package/dist/server/handlers/specs.js +51 -28
  108. package/dist/server/handlers/terminal.js +13 -13
  109. package/dist/server/handlers/themes.js +21 -21
  110. package/dist/server/handlers/update.js +17 -17
  111. package/dist/server/hooks/event_forward.sh +34 -0
  112. package/dist/server/hooks/post_tool_use.sh +26 -0
  113. package/dist/server/hooks/statusline.sh +26 -0
  114. package/dist/server/identity.js +6 -6
  115. package/dist/server/index.js +111 -111
  116. package/dist/server/logger.js +1 -1
  117. package/dist/server/mesh/connector.js +78 -78
  118. package/dist/server/mesh/crypto.js +20 -20
  119. package/dist/server/mesh/discovery.js +14 -14
  120. package/dist/server/mesh/pairing.js +30 -30
  121. package/dist/server/mesh/peers.js +10 -10
  122. package/dist/server/mesh/proxy.js +14 -14
  123. package/dist/server/mesh/session-sync.js +23 -23
  124. package/dist/server/project/bookmarks.js +11 -11
  125. package/dist/server/project/context-breakdown.js +70 -70
  126. package/dist/server/project/file-browser.js +17 -17
  127. package/dist/server/project/project-files.js +68 -68
  128. package/dist/server/project/registry.js +10 -10
  129. package/dist/server/project/sdk-bridge.js +157 -157
  130. package/dist/server/project/session.js +201 -199
  131. package/dist/server/project/terminal.js +15 -15
  132. package/dist/server/project/warmup.js +37 -37
  133. package/dist/server/push.js +11 -11
  134. package/dist/server/runtime.js +1 -1
  135. package/dist/server/tls.js +15 -15
  136. package/dist/server/tui.js +15 -15
  137. package/dist/server/update-checker.js +21 -21
  138. package/dist/server/ws/broadcast.js +18 -18
  139. package/dist/server/ws/router.js +17 -17
  140. package/dist/shared/constants.js +8 -8
  141. package/package.json +2 -2
  142. package/dist/client/assets/index-DlfI20Gn.css +0 -2
@@ -7,7 +7,7 @@ import { join } from "node:path";
7
7
  import { homedir } from "node:os";
8
8
  import { readProjectClaudeMd, writeProjectClaudeMd, readProjectClaudeSettings, mergeProjectClaudeSettings, readProjectRules, writeProjectRules, readProjectMcpServers, writeProjectMcpServers, readProjectSkills, readGlobalRules, readGlobalPermissions, readGlobalMcpServers, readGlobalSkills, } from "../project/project-files.js";
9
9
  function loadGlobalClaudeMd() {
10
- var mdPath = join(homedir(), ".claude", "CLAUDE.md");
10
+ const mdPath = join(homedir(), ".claude", "CLAUDE.md");
11
11
  if (existsSync(mdPath)) {
12
12
  try {
13
13
  return readFileSync(mdPath, "utf-8");
@@ -17,22 +17,22 @@ function loadGlobalClaudeMd() {
17
17
  return "";
18
18
  }
19
19
  function buildProjectSettings(projectSlug) {
20
- var project = getProjectBySlug(projectSlug);
20
+ const project = getProjectBySlug(projectSlug);
21
21
  if (!project) {
22
22
  return { error: "Project not found" };
23
23
  }
24
24
  if (!existsSync(project.path)) {
25
25
  return { error: "Project path does not exist on disk" };
26
26
  }
27
- var claudeMd = readProjectClaudeMd(project.path);
28
- var claudeSettings = readProjectClaudeSettings(project.path);
29
- var lattice = (claudeSettings.lattice ?? {});
30
- var permissions = (claudeSettings.permissions ?? { allow: [], deny: [] });
31
- var rules = readProjectRules(project.path);
32
- var mcpServers = readProjectMcpServers(project.path);
33
- var skills = readProjectSkills(project.path);
34
- var config = loadConfig();
35
- var settings = {
27
+ const claudeMd = readProjectClaudeMd(project.path);
28
+ const claudeSettings = readProjectClaudeSettings(project.path);
29
+ const lattice = (claudeSettings.lattice ?? {});
30
+ const permissions = (claudeSettings.permissions ?? { allow: [], deny: [] });
31
+ const rules = readProjectRules(project.path);
32
+ const mcpServers = readProjectMcpServers(project.path);
33
+ const skills = readProjectSkills(project.path);
34
+ const config = loadConfig();
35
+ const settings = {
36
36
  title: project.title,
37
37
  path: project.path,
38
38
  icon: project.icon,
@@ -65,8 +65,8 @@ function buildProjectSettings(projectSlug) {
65
65
  }
66
66
  registerHandler("project-settings", function (clientId, message) {
67
67
  if (message.type === "project-settings:get") {
68
- var getMsg = message;
69
- var result = buildProjectSettings(getMsg.projectSlug);
68
+ const getMsg = message;
69
+ const result = buildProjectSettings(getMsg.projectSlug);
70
70
  if ("error" in result) {
71
71
  sendTo(clientId, { type: "project-settings:error", projectSlug: getMsg.projectSlug, message: result.error });
72
72
  return;
@@ -75,11 +75,11 @@ registerHandler("project-settings", function (clientId, message) {
75
75
  return;
76
76
  }
77
77
  if (message.type === "project-settings:update") {
78
- var updateMsg = message;
79
- var projectSlug = updateMsg.projectSlug;
80
- var section = updateMsg.section;
81
- var settings = updateMsg.settings;
82
- var project = getProjectBySlug(projectSlug);
78
+ const updateMsg = message;
79
+ const projectSlug = updateMsg.projectSlug;
80
+ const section = updateMsg.section;
81
+ const settings = updateMsg.settings;
82
+ const project = getProjectBySlug(projectSlug);
83
83
  if (!project) {
84
84
  sendTo(clientId, { type: "project-settings:error", projectSlug, message: "Project not found" });
85
85
  return;
@@ -91,8 +91,8 @@ registerHandler("project-settings", function (clientId, message) {
91
91
  try {
92
92
  if (section === "general") {
93
93
  invalidateConfigCache();
94
- var config = loadConfig();
95
- var idx = config.projects.findIndex(function (p) { return p.slug === projectSlug; });
94
+ const config = loadConfig();
95
+ const idx = config.projects.findIndex(function (p) { return p.slug === projectSlug; });
96
96
  if (idx !== -1) {
97
97
  if (typeof settings.title === "string") {
98
98
  config.projects[idx].title = settings.title;
@@ -107,7 +107,7 @@ registerHandler("project-settings", function (clientId, message) {
107
107
  if (typeof settings.claudeMd === "string") {
108
108
  writeProjectClaudeMd(project.path, settings.claudeMd);
109
109
  }
110
- var latticeUpdates = {};
110
+ const latticeUpdates = {};
111
111
  if (settings.defaultModel !== undefined)
112
112
  latticeUpdates.defaultModel = settings.defaultModel;
113
113
  if (settings.defaultEffort !== undefined)
@@ -122,8 +122,8 @@ registerHandler("project-settings", function (clientId, message) {
122
122
  }
123
123
  else if (section === "environment") {
124
124
  invalidateConfigCache();
125
- var config = loadConfig();
126
- var idx = config.projects.findIndex(function (p) { return p.slug === projectSlug; });
125
+ const config = loadConfig();
126
+ const idx = config.projects.findIndex(function (p) { return p.slug === projectSlug; });
127
127
  if (idx !== -1) {
128
128
  config.projects[idx].env = settings.env ?? {};
129
129
  saveConfig(config);
@@ -136,7 +136,7 @@ registerHandler("project-settings", function (clientId, message) {
136
136
  writeProjectRules(project.path, settings.rules ?? []);
137
137
  }
138
138
  else if (section === "plugins") {
139
- var disabledPlugins = Array.isArray(settings.disabledPlugins) ? settings.disabledPlugins : [];
139
+ const disabledPlugins = Array.isArray(settings.disabledPlugins) ? settings.disabledPlugins : [];
140
140
  mergeProjectClaudeSettings(project.path, {
141
141
  lattice: { disabledPlugins: disabledPlugins },
142
142
  });
@@ -151,11 +151,11 @@ registerHandler("project-settings", function (clientId, message) {
151
151
  }
152
152
  }
153
153
  catch (err) {
154
- var errMsg = err instanceof Error ? err.message : String(err);
154
+ const errMsg = err instanceof Error ? err.message : String(err);
155
155
  sendTo(clientId, { type: "project-settings:error", projectSlug, message: errMsg });
156
156
  return;
157
157
  }
158
- var updated = buildProjectSettings(projectSlug);
158
+ const updated = buildProjectSettings(projectSlug);
159
159
  if ("error" in updated) {
160
160
  sendTo(clientId, { type: "project-settings:error", projectSlug, message: updated.error });
161
161
  return;
@@ -7,8 +7,8 @@ registerHandler("scheduler", function (clientId, message) {
7
7
  return;
8
8
  }
9
9
  if (message.type === "scheduler:create") {
10
- var createMsg = message;
11
- var task = createTask({
10
+ const createMsg = message;
11
+ const task = createTask({
12
12
  name: createMsg.name,
13
13
  prompt: createMsg.prompt,
14
14
  cron: createMsg.cron,
@@ -23,20 +23,20 @@ registerHandler("scheduler", function (clientId, message) {
23
23
  return;
24
24
  }
25
25
  if (message.type === "scheduler:delete") {
26
- var deleteMsg = message;
26
+ const deleteMsg = message;
27
27
  deleteTask(deleteMsg.taskId);
28
28
  sendTo(clientId, { type: "scheduler:tasks", tasks: listTasks() });
29
29
  return;
30
30
  }
31
31
  if (message.type === "scheduler:toggle") {
32
- var toggleMsg = message;
32
+ const toggleMsg = message;
33
33
  toggleTask(toggleMsg.taskId);
34
34
  sendTo(clientId, { type: "scheduler:tasks", tasks: listTasks() });
35
35
  return;
36
36
  }
37
37
  if (message.type === "scheduler:update") {
38
- var updateMsg = message;
39
- var updated = updateTask(updateMsg.taskId, {
38
+ const updateMsg = message;
39
+ const updated = updateTask(updateMsg.taskId, {
40
40
  name: updateMsg.name,
41
41
  prompt: updateMsg.prompt,
42
42
  cron: updateMsg.cron,
@@ -9,10 +9,10 @@ import { wasSessionInterrupted, clearInterruptedFlag } from "../project/sdk-brid
9
9
  import { log } from "../logger.js";
10
10
  registerHandler("session", async function (clientId, message) {
11
11
  if (message.type === "session:list_request") {
12
- var listReqMsg = message;
13
- var offset = listReqMsg.offset || 0;
14
- var limit = listReqMsg.limit || 0;
15
- var t0 = Date.now();
12
+ const listReqMsg = message;
13
+ const offset = listReqMsg.offset || 0;
14
+ const limit = listReqMsg.limit || 0;
15
+ const t0 = Date.now();
16
16
  void listSessions(listReqMsg.projectSlug, { offset, limit }).then(function (result) {
17
17
  log.session("session:list_request for %s took %dms (%d sessions)", listReqMsg.projectSlug, Date.now() - t0, result.sessions.length);
18
18
  sendTo(clientId, {
@@ -26,7 +26,7 @@ registerHandler("session", async function (clientId, message) {
26
26
  return;
27
27
  }
28
28
  if (message.type === "session:preview_request") {
29
- var previewMsg = message;
29
+ const previewMsg = message;
30
30
  void getSessionPreview(previewMsg.projectSlug, previewMsg.sessionId).then(function (preview) {
31
31
  if (preview) {
32
32
  sendTo(clientId, { type: "session:preview", sessionId: previewMsg.sessionId, preview });
@@ -35,14 +35,14 @@ registerHandler("session", async function (clientId, message) {
35
35
  return;
36
36
  }
37
37
  if (message.type === "session:list_all_request") {
38
- var config = loadConfig();
39
- var allPromises = config.projects.map(function (p) {
38
+ const config = loadConfig();
39
+ const allPromises = config.projects.map(function (p) {
40
40
  return listSessions(p.slug, { limit: 20 });
41
41
  });
42
42
  void Promise.all(allPromises).then(function (results) {
43
- var merged = [];
44
- for (var i = 0; i < results.length; i++) {
45
- for (var j = 0; j < results[i].sessions.length; j++) {
43
+ const merged = [];
44
+ for (let i = 0; i < results.length; i++) {
45
+ for (let j = 0; j < results[i].sessions.length; j++) {
46
46
  merged.push(results[i].sessions[j]);
47
47
  }
48
48
  }
@@ -55,8 +55,8 @@ registerHandler("session", async function (clientId, message) {
55
55
  return;
56
56
  }
57
57
  if (message.type === "session:history_page") {
58
- var pageMsg = message;
59
- var activeSession = getActiveSession(clientId);
58
+ const pageMsg = message;
59
+ const activeSession = getActiveSession(clientId);
60
60
  void getSessionHistoryPage(pageMsg.sessionId, pageMsg.before, pageMsg.limit, activeSession?.projectSlug, pageMsg.loaded).then(function (page) {
61
61
  sendTo(clientId, {
62
62
  type: "session:history_page_result",
@@ -69,8 +69,8 @@ registerHandler("session", async function (clientId, message) {
69
69
  return;
70
70
  }
71
71
  if (message.type === "session:create") {
72
- var createMsg = message;
73
- var session = createSession(createMsg.projectSlug, createMsg.sessionType);
72
+ const createMsg = message;
73
+ const session = createSession(createMsg.projectSlug, createMsg.sessionType);
74
74
  updateSessionInIndex(createMsg.projectSlug, session);
75
75
  sendTo(clientId, { type: "session:created", session });
76
76
  broadcastToProject(createMsg.projectSlug, {
@@ -83,25 +83,25 @@ registerHandler("session", async function (clientId, message) {
83
83
  return;
84
84
  }
85
85
  if (message.type === "session:activate") {
86
- var activateMsg = message;
86
+ const activateMsg = message;
87
87
  setActiveSession(clientId, activateMsg.projectSlug, activateMsg.sessionId);
88
88
  setActiveProject(clientId, activateMsg.projectSlug);
89
89
  invalidateHistoryCache(activateMsg.sessionId);
90
- var fileSize = await getSessionFileSizeBytes(activateMsg.projectSlug, activateMsg.sessionId);
90
+ const fileSize = await getSessionFileSizeBytes(activateMsg.projectSlug, activateMsg.sessionId);
91
91
  sendTo(clientId, { type: "session:loading_progress", sessionId: activateMsg.sessionId, fileSize });
92
- var activateT0 = Date.now();
92
+ const activateT0 = Date.now();
93
93
  void Promise.all([
94
94
  loadSessionHistory(activateMsg.projectSlug, activateMsg.sessionId),
95
95
  getSessionTitle(activateMsg.projectSlug, activateMsg.sessionId).catch(function () { return null; }),
96
96
  getSessionUsage(activateMsg.projectSlug, activateMsg.sessionId).catch(function () { return null; }),
97
97
  getContextBreakdown(activateMsg.projectSlug, activateMsg.sessionId).catch(function () { return null; }),
98
98
  ]).then(function (results) {
99
- var historyResult = results[0];
100
- var sessionTitle = results[1];
101
- var usage = results[2];
102
- var breakdown = results[3];
99
+ const historyResult = results[0];
100
+ const sessionTitle = results[1];
101
+ const usage = results[2];
102
+ const breakdown = results[3];
103
103
  log.session("session:activate: %dms", Date.now() - activateT0);
104
- var interrupted = wasSessionInterrupted(activateMsg.sessionId);
104
+ const interrupted = wasSessionInterrupted(activateMsg.sessionId);
105
105
  if (interrupted) {
106
106
  clearInterruptedFlag(activateMsg.sessionId);
107
107
  }
@@ -140,7 +140,7 @@ registerHandler("session", async function (clientId, message) {
140
140
  return;
141
141
  }
142
142
  if (message.type === "session:rename") {
143
- var renameMsg = message;
143
+ const renameMsg = message;
144
144
  void findProjectSlugForSession(renameMsg.sessionId).then(function (projectSlug) {
145
145
  if (!projectSlug) {
146
146
  sendTo(clientId, { type: "chat:error", message: "Session not found" });
@@ -161,7 +161,7 @@ registerHandler("session", async function (clientId, message) {
161
161
  return;
162
162
  }
163
163
  if (message.type === "session:delete") {
164
- var deleteMsg = message;
164
+ const deleteMsg = message;
165
165
  void findProjectSlugForSession(deleteMsg.sessionId).then(function (deleteProjectSlug) {
166
166
  if (!deleteProjectSlug) {
167
167
  sendTo(clientId, { type: "chat:error", message: "Session not found" });
@@ -10,12 +10,12 @@ import { sendBudgetStatus } from "./chat.js";
10
10
  import { buildNodesMessage } from "./mesh.js";
11
11
  export function detectIdeProjectName(projectPath) {
12
12
  try {
13
- var ideDir = join(projectPath, ".idea");
13
+ const ideDir = join(projectPath, ".idea");
14
14
  if (!existsSync(ideDir))
15
15
  return undefined;
16
- var ideNameFile = join(ideDir, ".name");
16
+ const ideNameFile = join(ideDir, ".name");
17
17
  if (existsSync(ideNameFile)) {
18
- var name = readFileSync(ideNameFile, "utf-8").trim();
18
+ const name = readFileSync(ideNameFile, "utf-8").trim();
19
19
  if (name)
20
20
  return name;
21
21
  }
@@ -26,7 +26,7 @@ export function detectIdeProjectName(projectPath) {
26
26
  }
27
27
  import { loadOrCreateIdentity } from "../identity.js";
28
28
  function loadGlobalClaudeMd() {
29
- var mdPath = join(homedir(), ".claude", "CLAUDE.md");
29
+ const mdPath = join(homedir(), ".claude", "CLAUDE.md");
30
30
  if (existsSync(mdPath)) {
31
31
  try {
32
32
  return readFileSync(mdPath, "utf-8");
@@ -36,17 +36,17 @@ function loadGlobalClaudeMd() {
36
36
  return "";
37
37
  }
38
38
  function saveGlobalClaudeMd(content) {
39
- var claudeDir = join(homedir(), ".claude");
39
+ const claudeDir = join(homedir(), ".claude");
40
40
  if (!existsSync(claudeDir)) {
41
41
  mkdirSync(claudeDir, { recursive: true });
42
42
  }
43
43
  writeFileSync(join(claudeDir, "CLAUDE.md"), content, "utf-8");
44
44
  }
45
45
  function loadSpinnerVerbs() {
46
- var claudeSettingsPath = join(homedir(), ".claude", "settings.json");
47
- var defaultVerbs = ["Thinking", "Analyzing", "Processing", "Computing", "Evaluating", "Considering", "Examining", "Reviewing"];
46
+ const claudeSettingsPath = join(homedir(), ".claude", "settings.json");
47
+ const defaultVerbs = ["Thinking", "Analyzing", "Processing", "Computing", "Evaluating", "Considering", "Examining", "Reviewing"];
48
48
  try {
49
- var claudeSettings = JSON.parse(readFileSync(claudeSettingsPath, "utf-8"));
49
+ const claudeSettings = JSON.parse(readFileSync(claudeSettingsPath, "utf-8"));
50
50
  if (claudeSettings.spinnerVerbs) {
51
51
  if (claudeSettings.spinnerVerbs.mode === "replace") {
52
52
  return claudeSettings.spinnerVerbs.verbs || [];
@@ -59,9 +59,9 @@ function loadSpinnerVerbs() {
59
59
  }
60
60
  registerHandler("settings", function (clientId, message) {
61
61
  if (message.type === "settings:get") {
62
- var config = loadConfig();
63
- var identity = loadOrCreateIdentity();
64
- var configWithClaudeMd = { ...config, claudeMd: loadGlobalClaudeMd() };
62
+ const config = loadConfig();
63
+ const identity = loadOrCreateIdentity();
64
+ const configWithClaudeMd = { ...config, claudeMd: loadGlobalClaudeMd() };
65
65
  sendTo(clientId, {
66
66
  type: "settings:data",
67
67
  config: configWithClaudeMd,
@@ -82,9 +82,9 @@ registerHandler("settings", function (clientId, message) {
82
82
  return;
83
83
  }
84
84
  if (message.type === "settings:update") {
85
- var updateMsg = message;
86
- var current = loadConfig();
87
- var incoming = updateMsg.settings;
85
+ const updateMsg = message;
86
+ const current = loadConfig();
87
+ const incoming = updateMsg.settings;
88
88
  if (typeof incoming.claudeMd === "string") {
89
89
  saveGlobalClaudeMd(incoming.claudeMd);
90
90
  delete incoming.claudeMd;
@@ -97,15 +97,15 @@ registerHandler("settings", function (clientId, message) {
97
97
  removeProject(incoming.removeProject);
98
98
  delete incoming.removeProject;
99
99
  }
100
- var incomingProjects = incoming.projects;
100
+ const incomingProjects = incoming.projects;
101
101
  if (incomingProjects && incomingProjects.length > 0) {
102
- for (var i = 0; i < incomingProjects.length; i++) {
103
- var proj = incomingProjects[i];
102
+ for (let i = 0; i < incomingProjects.length; i++) {
103
+ const proj = incomingProjects[i];
104
104
  addProject(proj.path, proj.title);
105
105
  }
106
106
  }
107
- var refreshed = loadConfig();
108
- var updated = {
107
+ const refreshed = loadConfig();
108
+ const updated = {
109
109
  ...refreshed,
110
110
  ...incoming,
111
111
  globalEnv: {
@@ -118,7 +118,7 @@ registerHandler("settings", function (clientId, message) {
118
118
  delete updated.costBudget;
119
119
  }
120
120
  saveConfig(updated);
121
- var updatedWithClaudeMd = { ...updated, claudeMd: loadGlobalClaudeMd() };
121
+ const updatedWithClaudeMd = { ...updated, claudeMd: loadGlobalClaudeMd() };
122
122
  sendTo(clientId, {
123
123
  type: "settings:data",
124
124
  config: updatedWithClaudeMd,
@@ -128,7 +128,7 @@ registerHandler("settings", function (clientId, message) {
128
128
  spinnerVerbs: loadSpinnerVerbs(),
129
129
  wslDistro: process.env.WSL_DISTRO_NAME || undefined,
130
130
  });
131
- var updatedIdentity = loadOrCreateIdentity();
131
+ const updatedIdentity = loadOrCreateIdentity();
132
132
  broadcast({
133
133
  type: "projects:list",
134
134
  projects: updated.projects.map(function (p) {