@voidlabs.gg/voidshift 0.4.5 → 0.4.6

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/README.md CHANGED
@@ -127,9 +127,18 @@ vsf memory status # the vault and where recall is on
127
127
  vsf memory search WORDS # notes recall would bring up
128
128
  vsf memory try "a prompt" # exactly what recall would add to that prompt
129
129
  vsf memory check # notes missing from INDEX.md, broken links
130
+ vsf memory sync # pull and push the vault through its git remote
130
131
  vsf memory on | off # turn recall on or off
131
132
  ```
132
133
 
134
+ To share the vault between machines, make it a git repository with a remote
135
+ named `origin` (any host; a private repository). `vsf memory sync` commits new
136
+ notes, rebases onto the remote and pushes. It also runs in the background from
137
+ the recall hook when the last sync is over ten minutes old, and the agents
138
+ runner syncs before and after every run. When a note changed on both sides,
139
+ the remote's version stays and this machine's copy is saved beside it as
140
+ `note.conflict-<machine>-<time>.md`, so nothing is lost.
141
+
133
142
  Setup creates a vault at `~/memory` or uses one you already have. Codex asks you
134
143
  to trust the recall hook once: run `/hooks` in Codex.
135
144
 
@@ -180,8 +189,12 @@ pnpm test
180
189
  node packages/cli/src/main.ts
181
190
  ```
182
191
 
183
- Node 22.18 or newer runs the TypeScript sources directly. Releases are cut by
184
- pushing a `v*` tag; CI publishes every package at that version.
192
+ Node 22.18 or newer runs the TypeScript sources directly. Each package
193
+ releases on its own: bump its `package.json` and push `agents-v0.5.0` (or
194
+ `cli-v`, `memory-v`, `awake-v`), and CI publishes only that package. A plain
195
+ `v*` tag publishes all four at one version. Tools declare the CLI contract
196
+ they were built for; a CLI that is too old refuses to load them and says to
197
+ run `vsf update`.
185
198
 
186
199
  ## License
187
200
 
package/dist/loader.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { ToolEntry } from './registry.ts';
2
- import type { Tool } from './tool.ts';
2
+ import { type Tool } from './tool.ts';
3
3
  export declare function locate(entry: ToolEntry, configDir: string): string | null;
4
4
  export declare function npm(args: string[]): boolean;
5
5
  export declare function fetchTool(entry: ToolEntry, configDir: string): boolean;
package/dist/loader.js CHANGED
@@ -10,6 +10,7 @@ import { spawnSync } from 'node:child_process';
10
10
  import { existsSync } from 'node:fs';
11
11
  import { join } from 'node:path';
12
12
  import { fileURLToPath, pathToFileURL } from 'node:url';
13
+ import { CONTRACT } from "./tool.js";
13
14
  // Inside the monorepo, tools load straight from source. Installed copies
14
15
  // live under <configDir>/tools, one npm prefix shared by every tool.
15
16
  function sourcePath(entry) {
@@ -47,5 +48,8 @@ export async function loadTool(entry, configDir) {
47
48
  if (!path)
48
49
  throw new Error(`could not download ${entry.pkg}. Check your connection and run vsf setup again.`);
49
50
  const mod = (await import(__rewriteRelativeImportExtension(pathToFileURL(path).href)));
51
+ const contract = mod.default.contract ?? 1;
52
+ if (contract > CONTRACT)
53
+ throw new Error(`${entry.name} needs a newer vsf (it uses tool contract ${contract}, this vsf knows ${CONTRACT}). Run vsf update.`);
50
54
  return mod.default;
51
55
  }
package/dist/tool.d.ts CHANGED
@@ -37,9 +37,11 @@ export interface ToolContext {
37
37
  ui: Ui;
38
38
  }
39
39
  export type ToolCommand = (args: string[], ctx: ToolContext) => Promise<number>;
40
+ export declare const CONTRACT = 1;
40
41
  export interface Tool {
41
42
  name: string;
42
43
  summary: string;
44
+ contract?: number;
43
45
  install(ctx: ToolContext): Promise<void>;
44
46
  uninstall(ctx: ToolContext): Promise<void>;
45
47
  checks(ctx: ToolContext): Promise<Check[]>;
package/dist/tool.js CHANGED
@@ -1,4 +1,6 @@
1
1
  // The contract every voidshift tool implements. The CLI owns discovery,
2
2
  // install and reporting; a tool only knows how to set itself up, take
3
3
  // itself down, say whether it is healthy, and run its own subcommands.
4
- export {};
4
+ // The version of this contract. A tool built for a newer one may call things
5
+ // this CLI does not have, so it is not loaded; tools without the field are 1.
6
+ export const CONTRACT = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voidlabs.gg/voidshift",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "description": "One CLI for the Void dev tools: keep your Mac awake, run agents in the background, shared skills and memory for Claude Code and Codex.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {