@tommy-ca/lazypi 0.7.0 → 0.8.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.
- package/README.md +1 -1
- package/bin/lazypi.mjs +18 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ LazyPi will:
|
|
|
13
13
|
1. Install `pi` for you if it isn't installed yet.
|
|
14
14
|
2. Ask if you want to install all the packages or choose which to install.
|
|
15
15
|
|
|
16
|
-
That setup is the harness core — isolated sub-agents, a structured ask gate, skill visibility, $ skill mention, a long-objective gate, side chat, context budgeting, code simplification review, web research, and
|
|
16
|
+
That setup is the harness core — isolated sub-agents, a structured ask gate, skill visibility, $ skill mention, a long-objective gate, side chat, context budgeting, code simplification review, web research, FFF search, a workflow engine for sub-agent fan-out, and ponytail discipline review. Optional extras (skill arguments, memory, MCP, interactive shell overlays, research loops, themes) install on demand with `pi install`.
|
|
17
17
|
|
|
18
18
|
That's it. Once done - run `pi` and experience a feature rich coding agent experience.
|
|
19
19
|
|
package/bin/lazypi.mjs
CHANGED
|
@@ -44,6 +44,8 @@ export const PACKAGES = [
|
|
|
44
44
|
{ id: "simplify", category: "core", source: "npm:pi-simplify", essential: true, description: "Code simplify review", hint: "Reviews recently changed code for clarity, consistency, and maintainability." },
|
|
45
45
|
{ id: "web-access", category: "core", source: "npm:pi-web-access", essential: true, description: "Web search and page fetch", hint: "Built-in web search and URL fetching." },
|
|
46
46
|
{ id: "fff", category: "core", source: "npm:@ff-labs/pi-fff", essential: true, description: "FFF fuzzy search", hint: "Additive fffind / ffgrep / fff-multi-grep beside the built-in tools; /fff-health checks the index." },
|
|
47
|
+
{ id: "dynamic-workflows", category: "core", source: "npm:@quintinshaw/pi-dynamic-workflows", essential: true, description: "Workflow engine", hint: "Fan work out across subagents: /workflows TUI, deep-research, resume, token accounting." },
|
|
48
|
+
{ id: "ponytail", category: "core", source: "npm:@dietrichgebert/ponytail", essential: true, description: "Lazy senior dev mode", hint: "Enforces minimal, stdlib-first code; /ponytail review, audit, and a debt ledger." },
|
|
47
49
|
];
|
|
48
50
|
|
|
49
51
|
// ---------------------------------------------------------------------------
|
|
@@ -196,7 +198,7 @@ ${bold("Default behaviour:")}
|
|
|
196
198
|
- With --yes, --only, or --except the picker is skipped.
|
|
197
199
|
|
|
198
200
|
${bold("Categories:")}
|
|
199
|
-
core the harness control plane: sub-agents, ask gate, skill visibility, $ mention, goal, side chat, context budget, simplify, web research, fff search
|
|
201
|
+
core the harness control plane: sub-agents, workflows, ask gate, skill visibility, $ mention, goal, side chat, context budget, simplify, web research, fff search, ponytail discipline
|
|
200
202
|
Non-catalog extras (pi install npm:<source>): skill-args, memory, mcp,
|
|
201
203
|
interactive-shell, ralph-wiggum, curated-themes (65 dark themes)
|
|
202
204
|
|
|
@@ -330,8 +332,15 @@ function legacySourcesForPackage(pkg) {
|
|
|
330
332
|
return Array.isArray(pkg.legacySources) ? pkg.legacySources : [];
|
|
331
333
|
}
|
|
332
334
|
|
|
335
|
+
// An installed source matches a catalog source when equal or when it is the
|
|
336
|
+
// same source with a version/pin suffix (npm:pkg vs npm:pkg@x.y.z,
|
|
337
|
+
// git:... vs git:...@sha).
|
|
338
|
+
export function sourcesMatch(catalogSource, installedSource) {
|
|
339
|
+
return catalogSource === installedSource || installedSource.startsWith(`${catalogSource}@`);
|
|
340
|
+
}
|
|
341
|
+
|
|
333
342
|
function isLegacySourceForPackage(pkg, source) {
|
|
334
|
-
return legacySourcesForPackage(pkg).
|
|
343
|
+
return legacySourcesForPackage(pkg).some((legacy) => sourcesMatch(legacy, source));
|
|
335
344
|
}
|
|
336
345
|
|
|
337
346
|
function findLegacyInstalledSources(pkg, installedPiSources) {
|
|
@@ -352,10 +361,11 @@ function removeLegacy(pkg, installedPiSources, local, interactive) {
|
|
|
352
361
|
|
|
353
362
|
function packageInstallStatus(pkg, installedPiSources) {
|
|
354
363
|
const legacySources = findLegacyInstalledSources(pkg, installedPiSources);
|
|
364
|
+
const installed = [...installedPiSources].some((src) => sourcesMatch(pkg.source, src));
|
|
355
365
|
return {
|
|
356
|
-
installed
|
|
366
|
+
installed,
|
|
357
367
|
legacy: legacySources.length > 0,
|
|
358
|
-
present:
|
|
368
|
+
present: installed || legacySources.length > 0,
|
|
359
369
|
};
|
|
360
370
|
}
|
|
361
371
|
|
|
@@ -694,11 +704,12 @@ function cmdStatus(flags) {
|
|
|
694
704
|
return 1;
|
|
695
705
|
}
|
|
696
706
|
|
|
697
|
-
const piCatalogSources = new Set(PACKAGES.flatMap((p) => [p.source, ...legacySourcesForPackage(p)]));
|
|
698
707
|
const installed = PACKAGES.filter((pkg) => packageInstallStatus(pkg, sources).installed);
|
|
699
708
|
const legacy = PACKAGES.filter((pkg) => packageInstallStatus(pkg, sources).legacy);
|
|
700
709
|
const missing = PACKAGES.filter((pkg) => !packageInstallStatus(pkg, sources).present);
|
|
701
|
-
const others = [...sources].filter(
|
|
710
|
+
const others = [...sources].filter(
|
|
711
|
+
(src) => !PACKAGES.some((pkg) => sourcesMatch(pkg.source, src) || isLegacySourceForPackage(pkg, src)),
|
|
712
|
+
);
|
|
702
713
|
|
|
703
714
|
printHeader(`Installed from LazyPi catalog (${installed.length}/${PACKAGES.length}):`);
|
|
704
715
|
if (installed.length === 0) console.log(dim(" none"));
|
|
@@ -853,7 +864,7 @@ async function cmdRemove(flags, targets) {
|
|
|
853
864
|
|
|
854
865
|
const sourcesToRemove = pkg
|
|
855
866
|
? [
|
|
856
|
-
...
|
|
867
|
+
...[...installedSources].filter((src) => sourcesMatch(pkg.source, src)),
|
|
857
868
|
...findLegacyInstalledSources(pkg, installedSources),
|
|
858
869
|
]
|
|
859
870
|
: [source];
|