eve-hub 0.6.23 → 0.6.24

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,11 @@
1
1
  # eve-hub
2
2
 
3
+ ## 0.6.24
4
+
5
+ ### Patch Changes
6
+
7
+ - A hosted main keeps its dash and compact schedules: the deploy build and the kit bump write them into a repo that lacks them, and skip a stub whose slot the repo already authors in another source format (dash.mjs, dash.md), which eve would fail as two sources for one slot. Hosted dash has no PR data and compact has nothing to compact until hosted sessions record their last model call; prune stays off.
8
+
3
9
  ## 0.6.23
4
10
 
5
11
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve-hub",
3
- "version": "0.6.23",
3
+ "version": "0.6.24",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Bot-side code shared by every hub agent: registry tools, the roster hook, the eve channel, the host sandbox and browser, and model helpers.",
6
6
  "type": "module",
package/stubs.mjs CHANGED
@@ -53,9 +53,13 @@ export const MAIN_KIT_FILES = {
53
53
  // the mention gate (the
54
54
  // daemon's per-process HUB_AGENT and patched model credential), the tools that
55
55
  // remove or restart bots on the hub's disk (a deployment changes its roster by
56
- // commit; create_agent is that commit, made by the hosted hub), memory (the workspace's files), and main's schedules.
56
+ // commit; create_agent is that commit, made by the hosted hub), memory (the workspace's files), and main's prune schedule (it cleans the hub machine's disk).
57
+ // main's compact and dash schedules stay: off the hub's machine compact finds no session to compact
58
+ // (hosted sessions carry no last-model-call time), and dash has no PR data (its lookup runs `gh`).
57
59
  export const DEPLOYED_KIT_FILES = new Set([
58
60
  "channels/eve.ts",
61
+ "schedules/compact.ts",
62
+ "schedules/dash.ts",
59
63
  "skills/onboarding-profile.ts",
60
64
  "tools/onboarding_scripts.ts",
61
65
  ...["react", "show", "update_thread", "list_threads", "read_thread", "post_message"].map((t) => `tools/${t}.ts`),
package/sync-kit.mjs CHANGED
@@ -12,14 +12,18 @@ import {
12
12
  const KIT_DIRS = ["tools", "skills", "hooks", "channels", "schedules", "instructions", "memory", "connections"];
13
13
  const SUBAGENT = /^(?:subagents\/[^/]+\/)+/;
14
14
  const STUB_FILE = new RegExp(`^(${KIT_DIRS.join("|")})/[^/]+\\.ts$`);
15
+ // eve takes one source per slot (dash.ts, dash.mjs and dash.md all claim schedules/dash); a .d.ts, an asset, or a markdown file eve doesn't read there (only schedules and instructions take .md) claims none.
16
+ const SOURCE_FILE = new RegExp(`^(?:(?:${KIT_DIRS.join("|")})/[^/]+\\.[mc]?[tj]s|(?:schedules|instructions)/[^/]+\\.md)$`);
17
+ const isSource = (file) => SOURCE_FILE.test(file.replace(SUBAGENT, "")) && !/\.d\.[mc]?ts$/.test(file);
18
+ const slotOf = (file) => file.replace(/\.[^./]+$/, "");
15
19
  const KIT_IMPORT = new RegExp(`^\\s*(?:import|export)\\b(?:[^;"']*?\\bfrom)?\\s*["']eve-hub/((?:${KIT_DIRS.join("|")})/[\\w-]+)["']`, "gm");
16
20
  const ALL_STUBS = { ...KIT_FILES, ...MAIN_KIT_FILES };
17
21
  const HOST_ONLY = [...Object.keys(ALL_STUBS), ...Object.keys(MEMORY_STUBS)].filter((file) => !DEPLOYED_KIT_FILES.has(file));
18
22
  const moduleOf = (file) => (MEMORY_STUBS[file] ? file.slice(0, -3) : kitPath(ALL_STUBS[file][1] ?? file).slice("eve-hub/".length));
19
23
  const HOST_ONLY_MODULES = new Set(HOST_ONLY.map(moduleOf));
20
24
 
21
- /** Whether `file` (relative to a bot's agent/ folder, subagents included) is one syncKit reads. */
22
- export const isKitFile = (file) => file === "instructions.md" || file === MAIN_INSTRUCTIONS || STUB_FILE.test(file.replace(SUBAGENT, ""));
25
+ /** Whether `file` (relative to a bot's agent/ folder, subagents included) is one syncKit reads: a stub, or any source that holds a stub's slot. */
26
+ export const isKitFile = (file) => file === "instructions.md" || file === MAIN_INSTRUCTIONS || isSource(file);
23
27
 
24
28
  // Every kit module the file imports, from its import and export lines only.
25
29
  function kitImports(text) {
@@ -80,7 +84,8 @@ export function syncKit({ bots, modules }) {
80
84
  else change.report.push({ bot, file, reason: `imports eve-hub/${host}, which needs the hub's own machine` });
81
85
  }
82
86
  }
83
- for (const file of wanted) if (files[file] === undefined) write(file, content(file));
87
+ const slots = new Set(Object.keys(files).filter((file) => isSource(file)).map(slotOf));
88
+ for (const file of wanted) if (!slots.has(slotOf(file))) write(file, content(file));
84
89
  }
85
90
  return change;
86
91
  }
@@ -97,7 +102,7 @@ export function readBotFiles(agentDir, prefix = "") {
97
102
  }
98
103
  for (const dir of KIT_DIRS) {
99
104
  if (!existsSync(join(agentDir, dir))) continue;
100
- for (const entry of readdirSync(join(agentDir, dir), { withFileTypes: true })) if (entry.isFile() && entry.name.endsWith(".ts")) read(`${dir}/${entry.name}`);
105
+ for (const entry of readdirSync(join(agentDir, dir), { withFileTypes: true })) if (entry.isFile() && isKitFile(`${dir}/${entry.name}`)) read(`${dir}/${entry.name}`);
101
106
  }
102
107
  if (existsSync(join(agentDir, "subagents"))) {
103
108
  for (const entry of readdirSync(join(agentDir, "subagents"), { withFileTypes: true })) {
@@ -1,4 +1,4 @@
1
1
  - **Team.** `create_agent` takes `runsOn` (`hosted` or `local`) and commits the new bot to the workspace repository; it joins with the next deployment, and a `local` bot then runs on the owner's Mac. There is no `remove_agent`: the roster is `hub.workspace.json`, and a deployment changes it by commit. If nobody on the team covers the work well, ask the human before going on.
2
2
  - **Restarts.** There is no `restart_agent` or `restart_hub`: you cannot restart a bot or the hub. A new deployment replaces the running bots.
3
3
  - **Memory.** Add an entry as your Memory section says, by committing the file to the workspace repository (see Changing it above). With no repository, write nothing and tell the human to link one first.
4
- - **Schedules.** The build removes the kit's schedules (`dash`, `compact`, `prune`), so no classifier runs, no tick posts, and nothing rewrites track summaries. What you write with `set_summary` and `dash_update` stands until you change it.
4
+ - **Schedules.** Your `dash` schedule runs every 8 minutes: it classifies the threads that changed into the Dash and rewrites track summaries that have news, without PR data (a function has no `gh`). `compact` is deployed but finds nothing to compact until hosted sessions record their last model call. `prune` is not deployed: it cleans the hub machine's disk.