mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b83a0480f6 |
@@ -139,16 +139,6 @@ npx impeccable link --source=.impeccable --providers=claude,cursor
|
||||
|
||||
### Option 3: Plugin install
|
||||
|
||||
**GitHub Copilot in VS Code:**
|
||||
|
||||
Install [Impeccable from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=renaissance-geek.impeccable), or run:
|
||||
|
||||
```bash
|
||||
code --install-extension renaissance-geek.impeccable
|
||||
```
|
||||
|
||||
Requires VS Code 1.109.3+, Copilot Chat access, and a trusted local workspace. Open Chat in Agent mode and try `/impeccable polish`. This skill-only extension does not install automatic hooks; avoid a duplicate Impeccable skill in the same workspace/profile. See [VS Code distribution details](docs/VSCODE-EXTENSION.md).
|
||||
|
||||
**Claude Code:**
|
||||
```bash
|
||||
/plugin marketplace add pbakaus/impeccable
|
||||
|
||||
@@ -35,6 +35,10 @@ impl Prompt {
|
||||
self.stdin_tty && self.stdout_tty && cfg!(unix)
|
||||
}
|
||||
|
||||
fn uses_tty_readline(&self, io: &Io) -> bool {
|
||||
cfg!(unix) && self.stdout_tty && io.env("TERM") != Some("dumb")
|
||||
}
|
||||
|
||||
fn ansi(&self, open: &str, close: &str, value: &str) -> String {
|
||||
if self.style {
|
||||
format!("{open}{value}{close}")
|
||||
@@ -70,7 +74,7 @@ impl Prompt {
|
||||
let next = self.piped.as_mut().and_then(|v| v.pop()).unwrap_or_default();
|
||||
return Ok(next.trim().to_lowercase());
|
||||
}
|
||||
if self.stdout_tty && io.env("TERM") != Some("dumb") {
|
||||
if self.uses_tty_readline(io) {
|
||||
return self.tty_readline(io, question);
|
||||
}
|
||||
io.out(question);
|
||||
@@ -624,6 +628,9 @@ fn terminal_rows() -> Option<u16> {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::collections::HashMap;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
@@ -637,4 +644,29 @@ mod tests {
|
||||
assert_eq!(visible_window(15, 16, 10), (6, 16));
|
||||
assert_eq!(visible_window(2, 3, 10), (0, 3));
|
||||
}
|
||||
|
||||
fn tty_prompt() -> Prompt {
|
||||
Prompt { stdin_tty: true, stdout_tty: true, style: false, piped: None }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ask_uses_raw_readline_only_on_unix() {
|
||||
let prompt = tty_prompt();
|
||||
let (io, _) = Io::captured("", PathBuf::from("."), HashMap::new());
|
||||
assert_eq!(prompt.uses_tty_readline(&io), cfg!(unix));
|
||||
}
|
||||
|
||||
#[cfg(not(unix))]
|
||||
#[test]
|
||||
fn ask_on_windows_tty_does_not_throw_unsupported() {
|
||||
// Line fallback reads process stdin. Skip on a live console so the
|
||||
// test cannot hang; CI pipes EOF and gets Ok("").
|
||||
if std::io::IsTerminal::is_terminal(&std::io::stdin()) {
|
||||
return;
|
||||
}
|
||||
let mut prompt = tty_prompt();
|
||||
let (mut io, _) = Io::captured("", PathBuf::from("."), HashMap::new());
|
||||
let result = prompt.ask(&mut io, "Update skills in 1 provider folder(s)? (Y/n) ");
|
||||
assert_eq!(result, Ok(String::new()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
|
||||
The VS Code extension is a declarative delivery channel for the GitHub Copilot skill. `bun run build` stages `dist/vscode/` from the GitHub provider output; `bun run package:vscode` builds and packages a VSIX with pinned `@vscode/vsce` tooling. Nothing is published by either command.
|
||||
|
||||
Install [Impeccable from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=renaissance-geek.impeccable), published by Renaissance Geek, or run `code --install-extension renaissance-geek.impeccable`. Requires VS Code 1.109.3+, Copilot Chat access, and a trusted local workspace. Use Chat in Agent mode, for example `/impeccable polish`. Avoid duplicate Impeccable skill installations in the same workspace/profile.
|
||||
|
||||
The package version follows `.claude-plugin/plugin.json`. Do not independently bump it for feature work. Publication and updates are separate maintainer steps; building or packaging does not publish.
|
||||
The package version follows `.claude-plugin/plugin.json`. Do not independently bump it for feature work. The Marketplace identifier is `renaissance-geek.impeccable`, under the registered Renaissance Geek publisher. Initial extension publication is a separate maintainer step; publisher registration alone does not publish the extension.
|
||||
|
||||
## Scope
|
||||
|
||||
@@ -39,7 +37,7 @@ Check that `/impeccable` is discoverable, the loaded SKILL.md is inside the inst
|
||||
|
||||
Test the oldest supported editor as well as current stable before publication. Windows and remote workspaces need separate smoke checks; do not infer them from a macOS local run. Plain browser-only VS Code cannot run the native launcher.
|
||||
|
||||
Initial macOS packaging checks: the VSIX installs in VS Code 1.109.3 (which resolves Copilot Chat 0.37.9) and 1.136.1. Both editor versions also passed the read-only Copilot behavior smoke below.
|
||||
Initial macOS packaging checks: the VSIX installs in VS Code 1.109.3 (which resolves Copilot Chat 0.37.9) and 1.136.1. The installed launcher loads the synthetic project's context correctly. The older editor has only been install-tested, not behavior-tested.
|
||||
|
||||
### Recorded Copilot smoke (September 7, 2026)
|
||||
|
||||
@@ -50,8 +48,4 @@ VS Code 1.136.1, Copilot Chat 0.64.1, Auto routed to GPT-5.6 Luna. A single read
|
||||
- The loader resolved the synthetic project root and its PRODUCT.md and DESIGN.md. Copilot then read `reference/polish.md` from the same extension, followed by the three fixture files.
|
||||
- The completed report correctly described the fixture. The project still contained only its original three files, with unchanged contents. No workspace skill copy, server, or image-generation call was created.
|
||||
|
||||
The final `renaissance-geek.impeccable` 4.2.2 VSIX also passed the same read-only smoke in VS Code 1.109.3 / Copilot Chat 0.37.9 (Auto selected GPT-5.3-Codex): slash discovery, the installed launcher, project context, and the polish reference all resolved correctly. One scoped command approval was granted, and all three fixture files remained unchanged.
|
||||
|
||||
After publication, `code --install-extension renaissance-geek.impeccable` installed 4.2.2 into fresh isolated profile/extensions directories in VS Code 1.136.1. All 55 extension payload files matched the tested VSIX (ignoring VS Code's added `package.json` installation metadata). Its installed launcher loaded the same fixture context successfully; fixture hashes and file inventory stayed unchanged. This Marketplace check verified download/install and payload identity, not an additional Copilot conversation.
|
||||
|
||||
These are packaging/path-resolution smokes, not activation-reliability or design-quality evaluations. They do not establish Windows or remote-host behavior.
|
||||
This is one packaging/path-resolution smoke, not an activation-reliability or design-quality evaluation. It does not establish Windows, remote-host, or minimum-version behavior.
|
||||
|
||||
Reference in New Issue
Block a user