@codyswann/lisa 4.17.6 → 4.17.7
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/all/copy-contents/gitignore +6 -0
- package/dist/cli/doctor-reconciliation.d.ts +15 -0
- package/dist/cli/doctor-reconciliation.d.ts.map +1 -0
- package/dist/cli/doctor-reconciliation.js +123 -0
- package/dist/cli/doctor-reconciliation.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +15 -1
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/reconciliation-report.d.ts +100 -0
- package/dist/core/reconciliation-report.d.ts.map +1 -0
- package/dist/core/reconciliation-report.js +178 -0
- package/dist/core/reconciliation-report.js.map +1 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +7 -1
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/utils/postinstall-trampoline-report-source.d.ts +50 -0
- package/dist/utils/postinstall-trampoline-report-source.d.ts.map +1 -0
- package/dist/utils/postinstall-trampoline-report-source.js +113 -0
- package/dist/utils/postinstall-trampoline-report-source.js.map +1 -0
- package/dist/utils/postinstall-trampoline-source.d.ts +65 -0
- package/dist/utils/postinstall-trampoline-source.d.ts.map +1 -0
- package/dist/utils/postinstall-trampoline-source.js +312 -0
- package/dist/utils/postinstall-trampoline-source.js.map +1 -0
- package/dist/utils/postinstall-trampoline.d.ts +4 -2
- package/dist/utils/postinstall-trampoline.d.ts.map +1 -1
- package/dist/utils/postinstall-trampoline.js +5 -197
- package/dist/utils/postinstall-trampoline.js.map +1 -1
- package/package.json +2 -2
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
|
@@ -3,8 +3,9 @@ import { createHash } from "node:crypto";
|
|
|
3
3
|
import { readFileSync } from "node:fs";
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
import {
|
|
6
|
+
import { sanitizeEnvForReconciliation } from "./pm-env.js";
|
|
7
7
|
import { LOCKFILE_REGEN_PLANS, detectPackageManagers, enginesForbiddenManagers, getLockfileRegenPlan, } from "./package-manager-detect.js";
|
|
8
|
+
import { buildTrampolineSource } from "./postinstall-trampoline-source.js";
|
|
8
9
|
/**
|
|
9
10
|
* Env var set by npm/bun/yarn/pnpm when running lifecycle scripts (postinstall, etc.).
|
|
10
11
|
* Used to detect whether Lisa was invoked as a postinstall child of a package manager.
|
|
@@ -232,10 +233,11 @@ export async function regenerateLockfilesInProcess(projectDir, spawnFn = spawn)
|
|
|
232
233
|
* @param projectDir - Absolute path to the project directory Lisa will reconcile
|
|
233
234
|
* @param lisaDistDir - Absolute path to Lisa's dist directory (where index.js lives)
|
|
234
235
|
* @param parentPid - PID of the package-manager process to wait on (usually process.ppid)
|
|
236
|
+
* @param reporting - Report path/schema plus the pre-apply package.json baseline the child compares against
|
|
235
237
|
* @param spawnFn - Optional spawn implementation; defaults to node:child_process spawn. Tests pass a vi.fn() spy here as a dependency-injection seam, avoiding the unreliable vi.doMock-on-builtins pattern that breaks under v8 coverage in CI runners.
|
|
236
238
|
* @returns Promise that resolves immediately after spawning the detached child
|
|
237
239
|
*/
|
|
238
|
-
export async function scheduleReconciliationChild(projectDir, lisaDistDir, parentPid,
|
|
240
|
+
export async function scheduleReconciliationChild(projectDir, lisaDistDir, parentPid, reporting,
|
|
239
241
|
// Dependency-injection seam: callers can override the spawn function for
|
|
240
242
|
// testing. Default is the real node:child_process spawn. Production callers
|
|
241
243
|
// pass nothing; tests pass a vi.fn() spy and assert on it directly without
|
|
@@ -254,6 +256,7 @@ spawnFn = spawn) {
|
|
|
254
256
|
nodeBin,
|
|
255
257
|
trampolineEnvVar: TRAMPOLINE_ENV_VAR,
|
|
256
258
|
lockfileRegenPlans: LOCKFILE_REGEN_PLANS,
|
|
259
|
+
reporting,
|
|
257
260
|
});
|
|
258
261
|
const child = spawnFn(nodeBin, ["-e", trampolineSource], {
|
|
259
262
|
cwd: projectDir,
|
|
@@ -285,199 +288,4 @@ function inheritedEnv() {
|
|
|
285
288
|
// eslint-disable-next-line no-restricted-syntax -- detached child requires the full parent environment to find node binaries/PATH; scoped to this single read
|
|
286
289
|
return { ...process.env };
|
|
287
290
|
}
|
|
288
|
-
/**
|
|
289
|
-
* Build the inline JS source that runs inside the detached trampoline child.
|
|
290
|
-
* The source is passed to `node -e` so it must be self-contained (no imports that
|
|
291
|
-
* require resolution via package.json, which is exactly the file we're racing).
|
|
292
|
-
*
|
|
293
|
-
* The trampoline now runs in two phases inside the child:
|
|
294
|
-
* 1. Wait for the parent PM to exit, then re-invoke Lisa to reconcile package.json.
|
|
295
|
-
* 2. If Lisa's re-invocation mutated package.json, regenerate whichever lockfiles
|
|
296
|
-
* are present in the project so `bun install --frozen-lockfile` / `npm ci` in
|
|
297
|
-
* downstream CI jobs do not fail with "lockfile had changes, but lockfile is
|
|
298
|
-
* frozen." Lockfile regen runs with `--ignore-scripts` so the parent PM's
|
|
299
|
-
* lifecycle hooks are not re-invoked (which would retrigger this trampoline).
|
|
300
|
-
* @param params - Embedded constants to inline into the trampoline source
|
|
301
|
-
* @returns JS source suitable for `node -e`
|
|
302
|
-
*/
|
|
303
|
-
function buildTrampolineSource(params) {
|
|
304
|
-
// JSON.stringify gives us safe inline literals for all primitive types.
|
|
305
|
-
const literals = {
|
|
306
|
-
parentPid: JSON.stringify(params.parentPid),
|
|
307
|
-
pollIntervalMs: JSON.stringify(params.pollIntervalMs),
|
|
308
|
-
maxWaitMs: JSON.stringify(params.maxWaitMs),
|
|
309
|
-
settleDelayMs: JSON.stringify(params.settleDelayMs),
|
|
310
|
-
lisaEntry: JSON.stringify(params.lisaEntry),
|
|
311
|
-
projectDir: JSON.stringify(params.projectDir),
|
|
312
|
-
nodeBin: JSON.stringify(params.nodeBin),
|
|
313
|
-
trampolineEnvVar: JSON.stringify(params.trampolineEnvVar),
|
|
314
|
-
lockfilePlans: JSON.stringify(params.lockfileRegenPlans),
|
|
315
|
-
pmEnvPrefixes: JSON.stringify(PM_PATH_ENV_PREFIXES),
|
|
316
|
-
pmEnvNames: JSON.stringify(PM_PATH_ENV_NAMES),
|
|
317
|
-
};
|
|
318
|
-
return [
|
|
319
|
-
buildTrampolinePrelude(literals),
|
|
320
|
-
buildTrampolineHelpers(literals),
|
|
321
|
-
buildTrampolineMain(literals),
|
|
322
|
-
].join("\n");
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Inline `require` prelude + the lockfile plan table. Kept separate so each
|
|
326
|
-
* chunk of the trampoline source stays under the 75-line max-lines-per-function
|
|
327
|
-
* cap enforced by eslint.
|
|
328
|
-
* @param literals - Inlined JSON-safe literals
|
|
329
|
-
* @param literals.lockfilePlans - JSON-serialized lockfile plan table
|
|
330
|
-
* @param literals.pmEnvPrefixes - JSON-serialized package-manager env var prefixes to strip
|
|
331
|
-
* @param literals.pmEnvNames - JSON-serialized package-manager env var names to strip
|
|
332
|
-
* @returns JS source fragment
|
|
333
|
-
*/
|
|
334
|
-
function buildTrampolinePrelude(literals) {
|
|
335
|
-
return `
|
|
336
|
-
const { spawn } = require("node:child_process");
|
|
337
|
-
const { createHash } = require("node:crypto");
|
|
338
|
-
const { existsSync, readFileSync } = require("node:fs");
|
|
339
|
-
const path = require("node:path");
|
|
340
|
-
|
|
341
|
-
const LOCKFILE_PLANS = ${literals.lockfilePlans};
|
|
342
|
-
const PM_ENV_PREFIXES = ${literals.pmEnvPrefixes};
|
|
343
|
-
const PM_ENV_NAMES = ${literals.pmEnvNames};
|
|
344
|
-
// Strip PM path/lifecycle vars from spawned bun/Lisa env. Mirrors pm-env.ts.
|
|
345
|
-
function sanitizeEnv(env) {
|
|
346
|
-
const bad = (k) => PM_ENV_NAMES.indexOf(k) !== -1 || PM_ENV_PREFIXES.some((p) => k.startsWith(p));
|
|
347
|
-
return Object.fromEntries(Object.entries(env).filter(([k]) => !bad(k)));
|
|
348
|
-
}
|
|
349
|
-
`;
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Helper functions inlined into the trampoline child: parent-liveness probe,
|
|
353
|
-
* file hasher, package-manager detector, Lisa re-invoker, and best-effort
|
|
354
|
-
* lockfile regenerator. Each mirrors an exported TS helper in this module so
|
|
355
|
-
* the logic stays test-covered via the exported versions.
|
|
356
|
-
* @param literals - Inlined JSON-safe literals
|
|
357
|
-
* @param literals.parentPid - Parent package-manager PID for liveness probe
|
|
358
|
-
* @param literals.pollIntervalMs - Poll interval for parent-liveness checks
|
|
359
|
-
* @param literals.maxWaitMs - Max wait deadline before bailing out
|
|
360
|
-
* @param literals.nodeBin - Node binary path to re-invoke Lisa with
|
|
361
|
-
* @param literals.lisaEntry - Absolute path to Lisa's dist/index.js
|
|
362
|
-
* @param literals.projectDir - Project directory Lisa will reconcile
|
|
363
|
-
* @param literals.trampolineEnvVar - Env var name used to mark child as trampoline
|
|
364
|
-
* @returns JS source fragment
|
|
365
|
-
*/
|
|
366
|
-
function buildTrampolineHelpers(literals) {
|
|
367
|
-
return `
|
|
368
|
-
function isAlive(pid) {
|
|
369
|
-
if (!pid || pid <= 1) return false;
|
|
370
|
-
try { process.kill(pid, 0); return true; } catch { return false; }
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
function hashFile(p) {
|
|
374
|
-
try { return createHash("sha256").update(readFileSync(p)).digest("hex"); }
|
|
375
|
-
catch { return null; }
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
function enginesForbiddenManagers(dir) {
|
|
379
|
-
try {
|
|
380
|
-
const pkg = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf8"));
|
|
381
|
-
const engines = (pkg && pkg.engines) || {};
|
|
382
|
-
return ["bun", "npm", "yarn", "pnpm"].filter(
|
|
383
|
-
(pm) => typeof engines[pm] === "string" && /please-use|do-not-use/i.test(engines[pm])
|
|
384
|
-
);
|
|
385
|
-
} catch {
|
|
386
|
-
return [];
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
function detectPackageManagers(dir) {
|
|
391
|
-
const forbidden = enginesForbiddenManagers(dir);
|
|
392
|
-
return Object.values(LOCKFILE_PLANS)
|
|
393
|
-
.filter((plan) => [plan.lockfile].concat(plan.lockfileAlternatives || []).some((f) => existsSync(path.join(dir, f))))
|
|
394
|
-
.map((plan) => plan.pm)
|
|
395
|
-
.filter((pm) => forbidden.indexOf(pm) === -1);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
async function waitForParent() {
|
|
399
|
-
const deadline = Date.now() + ${literals.maxWaitMs};
|
|
400
|
-
while (Date.now() < deadline) {
|
|
401
|
-
if (!isAlive(${literals.parentPid})) return true;
|
|
402
|
-
await new Promise((r) => setTimeout(r, ${literals.pollIntervalMs}));
|
|
403
|
-
}
|
|
404
|
-
return false;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
function spawnChild(command, args) {
|
|
408
|
-
return new Promise((resolve) => {
|
|
409
|
-
try {
|
|
410
|
-
const child = spawn(command, args, {
|
|
411
|
-
cwd: ${literals.projectDir},
|
|
412
|
-
stdio: "ignore",
|
|
413
|
-
env: Object.assign(sanitizeEnv(process.env), { [${literals.trampolineEnvVar}]: "1" }),
|
|
414
|
-
});
|
|
415
|
-
child.on("exit", (code) => resolve(code === 0));
|
|
416
|
-
child.on("error", () => resolve(false));
|
|
417
|
-
} catch {
|
|
418
|
-
resolve(false);
|
|
419
|
-
}
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
function runLisa() {
|
|
424
|
-
return spawnChild(${literals.nodeBin}, [${literals.lisaEntry}, "--yes", "--skip-git-check", ${literals.projectDir}]);
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
async function regenerateLockfiles() {
|
|
428
|
-
for (const pm of detectPackageManagers(${literals.projectDir})) {
|
|
429
|
-
const plan = LOCKFILE_PLANS[pm];
|
|
430
|
-
if (!plan) continue;
|
|
431
|
-
// Best-effort: failures are intentionally swallowed so a missing PM
|
|
432
|
-
// binary (e.g., no global bun on the PATH) does not cascade into an
|
|
433
|
-
// install failure.
|
|
434
|
-
await spawnChild(plan.command, plan.args);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
`;
|
|
438
|
-
}
|
|
439
|
-
/**
|
|
440
|
-
* Top-level async IIFE that orchestrates the trampoline child:
|
|
441
|
-
* 1) wait for parent PM to exit,
|
|
442
|
-
* 2) hash package.json,
|
|
443
|
-
* 3) re-run Lisa,
|
|
444
|
-
* 4) if Lisa changed package.json, regenerate lockfiles.
|
|
445
|
-
*
|
|
446
|
-
* Timing out MUST NOT re-run Lisa — that would reintroduce the package.json
|
|
447
|
-
* race the trampoline is designed to avoid (parent PM still writing).
|
|
448
|
-
* @param literals - Inlined JSON-safe literals
|
|
449
|
-
* @param literals.settleDelayMs - Settle delay before re-invoking Lisa
|
|
450
|
-
* @param literals.projectDir - Project directory Lisa will reconcile
|
|
451
|
-
* @returns JS source fragment
|
|
452
|
-
*/
|
|
453
|
-
function buildTrampolineMain(literals) {
|
|
454
|
-
return `
|
|
455
|
-
(async () => {
|
|
456
|
-
try {
|
|
457
|
-
const parentExited = await waitForParent();
|
|
458
|
-
if (!parentExited) {
|
|
459
|
-
process.exit(0);
|
|
460
|
-
}
|
|
461
|
-
await new Promise((r) => setTimeout(r, ${literals.settleDelayMs}));
|
|
462
|
-
|
|
463
|
-
const pkgPath = path.join(${literals.projectDir}, "package.json");
|
|
464
|
-
const preHash = hashFile(pkgPath);
|
|
465
|
-
|
|
466
|
-
const lisaOk = await runLisa();
|
|
467
|
-
|
|
468
|
-
const postHash = hashFile(pkgPath);
|
|
469
|
-
const packageJsonChanged =
|
|
470
|
-
lisaOk && preHash !== null && postHash !== null && preHash !== postHash;
|
|
471
|
-
|
|
472
|
-
if (packageJsonChanged) {
|
|
473
|
-
await regenerateLockfiles();
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
process.exit(0);
|
|
477
|
-
} catch {
|
|
478
|
-
process.exit(0);
|
|
479
|
-
}
|
|
480
|
-
})();
|
|
481
|
-
`;
|
|
482
|
-
}
|
|
483
291
|
//# sourceMappingURL=postinstall-trampoline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postinstall-trampoline.js","sourceRoot":"","sources":["../../src/utils/postinstall-trampoline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"postinstall-trampoline.js","sourceRoot":"","sources":["../../src/utils/postinstall-trampoline.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
"zod-validation-error": "^4.0.0"
|
|
154
154
|
},
|
|
155
155
|
"name": "@codyswann/lisa",
|
|
156
|
-
"version": "4.17.
|
|
156
|
+
"version": "4.17.7",
|
|
157
157
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
158
158
|
"main": "dist/index.js",
|
|
159
159
|
"exports": {
|
|
@@ -292,5 +292,5 @@
|
|
|
292
292
|
"vite": "^8.0.16"
|
|
293
293
|
},
|
|
294
294
|
"type": "module",
|
|
295
|
-
"lisaReleaseCommit": "
|
|
295
|
+
"lisaReleaseCommit": "15d2dcd67f8782ab147e9e2d371f0af050b00caf"
|
|
296
296
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.17.
|
|
3
|
+
"version": "4.17.7",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.17.
|
|
3
|
+
"version": "4.17.7",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.17.
|
|
3
|
+
"version": "4.17.7",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.17.
|
|
3
|
+
"version": "4.17.7",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.17.
|
|
3
|
+
"version": "4.17.7",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|