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
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22.23.2
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.4.0
Expand Down
3 changes: 2 additions & 1 deletion NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Summary of structural changes:
- The native `plugins/pstack/skills/` tree is the only user-facing workflow surface. Claude Code and Codex invoke those skills directly.
- Seven skills imported from `cursor-team-kit`: `deslop`, `thermo-nuclear-code-quality-review`, `make-pr-easy-to-review`, `fix-ci`, `fix-merge-conflicts`, `get-pr-comments`, `what-did-i-get-done`. All copied verbatim — no rewiring needed.
- `plugins/pstack/skills/babysit/` is independently authored as the Claude Code analog of Cursor's `/babysit` built-in. It has no upstream pstack equivalent; its workflow is informed by Cursor's public `/babysit` behavior. No code or prose was copied from any source.
- `plugins/pstack/skills/poteto-mode/scripts/` is vendored from upstream (`watch-pr`, `orch`, `bootstrap.ts`, `worktree-audit.sh`, `package.json`, `bun.lock`) with three edits: `worktree-audit.sh` reads `~/.claude/projects/` instead of Cursor's transcript directory and warns when `jq` or `rg` is missing (their absence silently blanks the columns the prune decision reads), and the private workspace package is named `@open-pstack/poteto-mode-tools`. Everything else is upstream's code under the same MIT license.
- `plugins/pstack/skills/poteto-mode/scripts/` is vendored from upstream (`watch-pr`, `orch`, `bootstrap.ts`, `worktree-audit.sh`, `package.json`, `bun.lock`) with five edits and one port-authored test: `worktree-audit.sh` reads `~/.claude/projects/` instead of Cursor's transcript directory and warns when `jq` or `rg` is missing (their absence silently blanks the columns the prune decision reads), the private workspace package is named `@open-pstack/poteto-mode-tools`, `bootstrap.ts` rejects Node before it reads Bun-only APIs, and `package.json` includes `bootstrap.test.ts` in `bun run test`. The `bootstrap.test.ts` file is authored for this port. Everything else is upstream's code under the same MIT license.
- `plugins/pstack/agents/comment-sicko.md` is upstream's `Comment Sicko` agent, renamed to `comment-sicko` so the name works as a Claude Code `subagent_type`. The body is verbatim.
- Claude-native Fable and Opus lanes are port-authored agent definitions. They pin model plus requested effort for every selectable Claude-native pair in the provider-dispatch model matrix.
- A Codex build shares the same `skills/` tree. It adds `plugins/pstack/.codex-plugin/plugin.json`, a root `.agents/plugins/marketplace.json`, and `plugins/pstack/skills/poteto-mode/references/codex-tools.md` (the Claude-to-Codex tool, model, and built-in map), plus a one-line Platform note in the skills that name a Claude primitive. The skill content itself is unchanged. See [CHANGES.md](CHANGES.md#codex-port).
Expand All @@ -45,6 +45,7 @@ Files authored for this port (not derived from upstream):
- `plugins/pstack/.codex-plugin/plugin.json`
- `.agents/plugins/marketplace.json` (repo root)
- `plugins/pstack/skills/poteto-mode/references/codex-tools.md`
- `plugins/pstack/skills/poteto-mode/scripts/bootstrap.test.ts`
- `plugins/pstack/skills/babysit/SKILL.md` (independently authored; workflow informed by Cursor's public `/babysit` behavior)
- `plugins/pstack/agents/pstack-fable-*.md` and `plugins/pstack/agents/pstack-opus-*.md` (Claude-native frontier lanes at each selectable effort)
- `plugins/pstack/hooks/hooks.json`, `plugins/pstack/hooks/session-start`, and `plugins/pstack/hooks/session-start-context.md` (the auto-fire hook and its mandate)
Expand Down
2 changes: 1 addition & 1 deletion plugins/pstack/skills/no-comments/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Spawn comment-sicko. Act on accepted findings.

Authoring agents defend comments. Defer to comment-sicko's fresh perspective.

**Platform note.** On Codex or another non-Claude runtime, there is no `comment-sicko` subagent type; dispatch a `spawn_agent` told to read `agents/comment-sicko.md` first. Resolve the tool names via [`codex-tools.md`](../poteto-mode/references/codex-tools.md).
**Platform note.** On Codex or another non-Claude runtime, the `comment-sicko` subagent and the Claude tool names below are Claude defaults. Resolve them via [`codex-tools.md`](../poteto-mode/references/codex-tools.md).

## Scope

Expand Down
21 changes: 21 additions & 0 deletions plugins/pstack/skills/poteto-mode/scripts/bootstrap.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { describe, expect, it } from "bun:test";
import { join } from "node:path";

const nodeEntryPoints = [
["bootstrap", "bootstrap.ts"],
["watch-pr", "watch-pr/watch-pr"],
] as const;

describe("Bun runtime guard", () => {
for (const [name, path] of nodeEntryPoints) {
it(`rejects Node before ${name} uses Bun-only APIs`, () => {
const result = Bun.spawnSync(["node", join(import.meta.dir, path)]);

expect(result.exitCode).toBe(1);
expect(result.stdout.toString()).toBe("");
expect(result.stderr.toString()).toBe(
"pstack poteto-mode tooling requires Bun (https://bun.sh). Install Bun, then re-run.\n"
);
});
}
});
7 changes: 7 additions & 0 deletions plugins/pstack/skills/poteto-mode/scripts/bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@ import { createHash } from "node:crypto";
import { existsSync, readFileSync, writeFileSync } from "node:fs";
import { join } from "node:path";

if (typeof Bun === "undefined") {
console.error(
"pstack poteto-mode tooling requires Bun (https://bun.sh). Install Bun, then re-run."
);
process.exit(1);
}

const scriptsDirectory = import.meta.dir;
const nodeModulesDirectory = join(scriptsDirectory, "node_modules");
const commanderPackagePath = join(
Expand Down
2 changes: 1 addition & 1 deletion plugins/pstack/skills/poteto-mode/scripts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"private": true,
"type": "module",
"scripts": {
"test": "\"$npm_execpath\" test --parallel orch watch-pr runner",
"test": "\"$npm_execpath\" test --parallel bootstrap orch watch-pr runner",
"typecheck": "tsc --project watch-pr/tsconfig.json --noEmit --strict && tsc --project runner/tsconfig.json --noEmit --strict"
},
"dependencies": {
Expand Down
Loading