Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ popup_script="$(properties | jq -r '."notch.stats".script')"
: >"$SKETCHYBAR_LOG"
NAME=notch.stats SENDER=mouse.entered /bin/sh -c "$popup_script"
assert '."notch.stats"."popup.drawing" == "on"'
[[ "$(wc -l <"$SKETCHYBAR_LOG" | tr -d ' ')" == 1 ]]
jq -es 'length == 1' "$SKETCHYBAR_LOG" >/dev/null
: >"$SKETCHYBAR_LOG"
NAME=notch.stats SENDER=forced /bin/sh -c "$popup_script"
NAME=notch.stats SENDER=routine /bin/sh -c "$popup_script"
Expand Down
56 changes: 28 additions & 28 deletions mise.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions mise.personal-macos.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion mise.personal-macos.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tools]
"aqua:aws/aws-cli" = "2.37.8"
"aqua:aws/aws-cli" = "2.37.9"
"aqua:opentofu/opentofu" = "1.13.1"
"pipx:ansible-core" = "2.21.4"
"pipx:ansible-lint" = "26.9.0"
Expand Down
2 changes: 1 addition & 1 deletion mise.toml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ rust = { version = "1.99.0", components = ["clippy", "rustfmt", "rust-src", "rus
"aqua:mvdan/sh" = "3.14.1"
"aqua:JohnnyMorganz/StyLua" = "2.5.2"
"aqua:docker/cli" = "29.8.2"
"aqua:docker/compose" = "5.5.1"
"aqua:docker/compose" = "5.6.0"
# Upstream does not publish macOS binaries; Cargo works on all shared platforms.
"cargo:eza" = "0.23.5"
"cargo:tree-sitter-cli" = "0.27.0"
Expand Down
7 changes: 2 additions & 5 deletions pi-extensions/bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 2 additions & 5 deletions pi-extensions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"@juicesharp/rpiv-ask-user-question": "2.12.0",
"@plannotator/pi-extension": "0.27.25",
"@router-for-me/pi-cliproxyapi-provider": "1.4.21",
"pi-subagents": "0.74.0",
"pi-subagents": "0.75.0",
"pi-vim": "0.14.2",
"pi-web-access": "0.35.0",
"proper-lockfile": "4.1.2"
Expand Down Expand Up @@ -75,8 +75,5 @@
"pi-web-access",
"@juicesharp/rpiv-ask-user-question",
"pi-subagents"
],
"patchedDependencies": {
"pi-subagents@0.74.0": "patches/pi-subagents@0.74.0.patch"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ await appendPrompt("recovered", ${JSON.stringify(historyPath)});

await writeFile(
historyPath,
'{"prompt":"valid"}\nnot-json\n{"prompt":42}\n{"prompt":"also valid"}\n',
' {"prompt":"valid"}\nnot-json\n{broken\nnull\n[]\n42\n"text"\n{"prompt":42}\n{"prompt":"also valid"}\n',
"utf8",
);

Expand Down
7 changes: 5 additions & 2 deletions pi-extensions/packages/shared-prompt-history/history-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@ export function getPromptHistoryPath(
}

function parsePromptEntry(line: string): PromptHistoryEntry | undefined {
if (!line.trim()) return undefined;
const trimmed = line.trim();
// History records are objects. Skip obvious garbage without throwing once
// per line when a bounded tail contains thousands of malformed records.
if (!trimmed.startsWith("{")) return undefined;
try {
const entry: unknown = JSON.parse(line);
const entry: unknown = JSON.parse(trimmed);
const prompt = entry ? Reflect.get(Object(entry), "prompt") : undefined;
if (typeof prompt !== "string" || !prompt.trim()) return undefined;

Expand Down
12 changes: 0 additions & 12 deletions pi-extensions/patches/pi-subagents@0.74.0.patch

This file was deleted.

17 changes: 14 additions & 3 deletions pi-extensions/subagents-host.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,21 @@ const piName = "@earendil-works/pi-coding-agent";

// Versions belong in declarations/locks, not compatibility assertions. This
// covers imports and a native runner session, not a complete delegated workflow.
const requiredSpecifiers = HOST_PEER_ALIASES.map(({ specifier }) => specifier);
const requiredSpecifiers = HOST_PEER_ALIASES.filter(
({ optional }) => !optional,
).map(({ specifier }) => specifier);

function assertAliasResolution(
result,
missing = [],
specifiers = requiredSpecifiers,
omitted = [],
) {
assert.deepEqual([...result.missing].sort(), [...missing].sort());
for (const specifier of specifiers) {
assert.equal(
Object.hasOwn(result.aliases, specifier),
!missing.includes(specifier),
!missing.includes(specifier) && !omitted.includes(specifier),
`${specifier}: required aliases must resolve, missing ones must not have fallback targets`,
);
}
Expand Down Expand Up @@ -175,10 +178,18 @@ test("historical isolated Pi layout: import-only exports resolve and missing dep
delete modified.exports[subpath];
writeFileSync(packagePath, JSON.stringify(modified));
try {
// An undeclared optional export is unreachable; a declared
// export with a missing file still fails closed above.
const omitted = missing.filter((specifier) =>
fixtureAliases.some(
(entry) => entry.specifier === specifier && entry.optional,
),
);
assertAliasResolution(
resolveHostPeerAliases(host),
missing,
missing.filter((specifier) => !omitted.includes(specifier)),
fixtureSpecifiers,
omitted,
);
} finally {
writeFileSync(packagePath, source);
Expand Down
Loading