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
2 changes: 1 addition & 1 deletion .github/plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"name": "pstack",
"source": "./plugins/pstack",
"description": "if you want to go fast, go deep first. pstack helps you write less, but higher quality code. rigorous agent workflows you can parallelize with confidence. GitHub Copilot port of pstack-claude 0.9.57. Original pstack by Lauren Tan (poteto); Claude Code port by Michael Denyer.",
"version": "0.9.57-copilot.3"
"version": "1.0.0"
}
]
}
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# pstack for GitHub Copilot

[![check](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml/badge.svg)](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml) [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![version](https://img.shields.io/badge/version-0.9.57--copilot.3-7C3AED.svg)](https://github.com/hackernotfound/pstack-vscode/releases/tag/v0.9.57-copilot.3)
[![check](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml/badge.svg)](https://github.com/hackernotfound/pstack-vscode/actions/workflows/check.yml) [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![version](https://img.shields.io/badge/version-1.0.0-7C3AED.svg)](https://github.com/hackernotfound/pstack-vscode/releases/tag/v1.0.0)

**Run [pstack](https://github.com/cursor/plugins/tree/main/pstack) in the VS Code agents window with GitHub Copilot.**

Expand Down Expand Up @@ -61,12 +61,14 @@ architect the new sync engine before writing code
how does auth work in this repo?
```

> **First read in a session.** pstack keeps its playbooks inside the plugin folder, outside your workspace. The first time a session reads one, VS Code asks **Allow reading file outside of workspace?** and shows the plugin path. Choose **Allow in this Session**. Reads of pstack's other files in that session then go through without asking.

<details>
<summary><b>Options</b>: turn off the startup hook, pick models, pin a version</summary>

- **Turn off the startup hook.** Add `session hook: off` to `~/.copilot/pstack-models.md`. pstack then runs only when you ask for it.
- **Pick models.** By default Copilot chooses each subagent's model, because which models you can use depends on your plan. To pin models per role, run `setup-pstack`. It writes `~/.copilot/pstack-models.md` with model names your account accepts, such as `claude-opus-5.5`.
- **Pin a version.** Marketplace installs follow `main`. To stay on one release, clone this repo, check out its tag (for example `v0.9.57-copilot.2`), and in VS Code set `"chat.pluginLocations": { "/absolute/path/to/pstack-vscode/plugins/pstack": true }` instead of the marketplace line.
- **Pin a version.** Marketplace installs follow `main`. To stay on one release, clone this repo, check out its tag (for example `v1.0.0`), and in VS Code set `"chat.pluginLocations": { "/absolute/path/to/pstack-vscode/plugins/pstack": true }` instead of the marketplace line.

</details>

Expand Down
1 change: 1 addition & 0 deletions VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1.0.0
2 changes: 1 addition & 1 deletion docs/maintaining.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## Update to a newer pstack-claude

1. Set `sha` and `version` in [`upstream.json`](../upstream.json) to the new pstack-claude commit. Reset `portRevision` to 1.
1. Set `sha` and `version` in [`upstream.json`](../upstream.json) to the new pstack-claude commit, and bump [`VERSION`](../VERSION). Use a patch bump for fixes, a minor bump for a new upstream sync, and a major bump when installs or behavior change incompatibly.
2. Run `node tools/build.mjs`. Each edit must match its anchor text exactly once. If upstream reworded an anchor, the build stops and names the file.
3. Run `node tools/check.mjs` for the static checks.
4. Run `tools/eval.sh` and `node tools/eval-vscode.mjs` for the live checks.
Expand Down
2 changes: 1 addition & 1 deletion plugins/pstack/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "pstack",
"displayName": "pstack (GitHub Copilot port)",
"version": "0.9.57-copilot.3",
"version": "1.0.0",
"description": "if you want to go fast, go deep first. pstack helps you write less, but higher quality code. rigorous agent workflows you can parallelize with confidence. GitHub Copilot port of pstack-claude 0.9.57. Original pstack by Lauren Tan (poteto); Claude Code port by Michael Denyer.",
"author": {
"name": "hackernotfound",
Expand Down
3 changes: 2 additions & 1 deletion tools/build.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import { fileURLToPath } from 'node:url';

const root = join(dirname(fileURLToPath(import.meta.url)), '..');
const upstream = JSON.parse(readFileSync(join(root, 'upstream.json'), 'utf8'));
const version = `${upstream.version}-copilot.${upstream.portRevision}`;
const version = readFileSync(join(root, 'VERSION'), 'utf8').trim();
if (!/^\d+\.\d+\.\d+$/.test(version)) throw new Error(`VERSION must be MAJOR.MINOR.PATCH, got ${JSON.stringify(version)}`);
const out = join(root, 'plugins/pstack');

function fetchSource() {
Expand Down
4 changes: 3 additions & 1 deletion tools/check.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ check('build is idempotent (rebuild leaves no diff)', dirty === '');
const plugin = JSON.parse(read('plugin.json'));
const upstream = JSON.parse(readFileSync(join(root, 'upstream.json'), 'utf8'));
check('plugin.json name is pstack', plugin.name === 'pstack');
check('plugin.json version tracks upstream', plugin.version === `${upstream.version}-copilot.${upstream.portRevision}`);
const version = readFileSync(join(root, 'VERSION'), 'utf8').trim();
check('plugin.json version matches VERSION and is MAJOR.MINOR.PATCH', /^\d+\.\d+\.\d+$/.test(version) && plugin.version === version);
check('plugin.json names the pinned upstream version', plugin.description.includes(`pstack-claude ${upstream.version}`));
check('no .claude-plugin manifest (VS Code would parse it as Claude format)', !existsSync(join(out, '.claude-plugin')));
check('plugin ships no agents (the VS Code agents window lists each plugin agent twice)', !('agents' in plugin) && !existsSync(join(out, 'agents')) && !readdirSync(out, { recursive: true }).some((rel) => /(^|\/)agents\/[^/]+\.md$/.test(rel) && !rel.startsWith('skills/')));
check('hooks file exists', existsSync(join(out, plugin.hooks)));
Expand Down
3 changes: 1 addition & 2 deletions upstream.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{
"repo": "https://github.com/michael-denyer/pstack-claude.git",
"sha": "d709ffc96ca080da762f3527d49bfcf5e493cbc5",
"version": "0.9.57",
"portRevision": 3
"version": "0.9.57"
}
Loading