impulso 0.20.21 → 0.21.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.
@@ -32,7 +32,7 @@ const REQUIRED_BINARIES = [
32
32
  { bin: 'plannotator', hint: 'curl -fsSL https://plannotator.ai/install.sh | bash' },
33
33
  ];
34
34
 
35
- function enforceRequiredBinaries() {
35
+ function warnRequiredBinaries() {
36
36
  const missing = REQUIRED_BINARIES.filter(({ bin }) => {
37
37
  const r = spawnSync('which', [bin], { stdio: ['ignore', 'pipe', 'ignore'] });
38
38
  return r.error || r.status !== 0;
@@ -42,13 +42,13 @@ function enforceRequiredBinaries() {
42
42
  '[impulso] hard-required binaries missing from PATH: ' +
43
43
  missing.map(({ bin, hint }) => `${bin} (install: ${hint})`).join(', ');
44
44
  console.error(msg);
45
- throw new Error(msg);
45
+ console.warn('[impulso] continuing without required binaries — some features may not work');
46
46
  }
47
47
  }
48
48
 
49
49
  export const ImpulsoPlugin = async (ctx) => {
50
- await installHub({ packageRoot: pkgRoot });
51
- enforceRequiredBinaries();
50
+ await installHub({ packageRoot: pkgRoot, verifyVersion: false });
51
+ warnRequiredBinaries();
52
52
 
53
53
  const sub = [];
54
54
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impulso",
3
- "version": "0.20.21",
3
+ "version": "0.21.0",
4
4
  "description": "Impulso — plugin bundle for opencode and Claude Code: Plannotator skills + Impulso-DirectSpeech (rethemed ex-Caveman) + RTK. Harness-neutral repo; per-harness glue under harnesses/.",
5
5
  "type": "module",
6
6
  "main": "harnesses/opencode/plugin.js",
@@ -24,7 +24,7 @@
24
24
  "sync:agents": "node scripts/sync-agents.cjs",
25
25
  "check:canaries": "node scripts/check-canaries.cjs",
26
26
  "check:hooks": "node scripts/check-hooks-parity.cjs",
27
- "test": "node shared/tests.cjs && node harnesses/claude/tests.cjs && node harnesses/opencode/tests.js && node scripts/impulso-bench.test.cjs && cd gate && go test ./...",
27
+ "test": "node shared/tests.cjs && node shared/repository-tests.cjs && node harnesses/claude/tests.cjs && node harnesses/opencode/tests.js && node scripts/impulso-bench.test.cjs && cd hub && go test ./...",
28
28
  "coverage": "c8 --check-coverage --lines 90 --functions 92 --branches 68 --reporter=text --reporter=text-summary npm test",
29
29
  "lint": "eslint shared/ harnesses/",
30
30
  "format": "prettier --write .",
@@ -40,6 +40,7 @@ export async function installHub({
40
40
  version,
41
41
  platform = process.platform,
42
42
  arch = process.arch,
43
+ verifyVersion = true,
43
44
  } = {}) {
44
45
  const packageJson = JSON.parse(await readFile(path.join(packageRoot, 'package.json'), 'utf8'));
45
46
  const packageVersion = version || packageJson.version;
@@ -47,7 +48,14 @@ export async function installHub({
47
48
  const source = bundledBinaryPath(packageRoot, target);
48
49
  await stat(source);
49
50
 
50
- if ((await installedVersion(destination)) === packageVersion) {
51
+ if (!verifyVersion) {
52
+ try {
53
+ await stat(destination);
54
+ return { target, updated: false, destination, version: packageVersion };
55
+ } catch (_e) {
56
+ // destination absent — fall through to copy
57
+ }
58
+ } else if ((await installedVersion(destination)) === packageVersion) {
51
59
  return { target, updated: false, destination, version: packageVersion };
52
60
  }
53
61