@bigking67/pi-67 0.10.5 → 0.10.6
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/CHANGELOG.md +14 -0
- package/README.md +9 -0
- package/package.json +1 -1
- package/scripts/check.mjs +8 -0
- package/src/commands/doctor.mjs +4 -2
- package/src/commands/report.mjs +24 -3
- package/src/lib/distro-scripts.mjs +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.10.6]
|
|
4
|
+
|
|
5
|
+
- Adds runtime request retry to the canonical `xtalpi-pi-tools` provider path,
|
|
6
|
+
including attempt/retry/suppression telemetry in debug JSONL output.
|
|
7
|
+
- Adds final-answer compliance repair to Bash and PowerShell xtalpi smoke:
|
|
8
|
+
validated tool runs that only miss required final text get one `--no-tools`
|
|
9
|
+
repair pass instead of rerunning tools.
|
|
10
|
+
- Accepts `pi-67 doctor --no-skill-list` and raises doctor skill-list timeout
|
|
11
|
+
defaults to 60 seconds.
|
|
12
|
+
- Supports command-level `pi-67 report --json`, emitting either a dry-run JSON
|
|
13
|
+
object or the generated report JSON.
|
|
14
|
+
- Runs full `scripts/pi67-smoke.sh --ci` in the npm publish workflow before
|
|
15
|
+
pack/publish.
|
|
16
|
+
|
|
3
17
|
## [0.10.5]
|
|
4
18
|
|
|
5
19
|
- Uses `git fetch` plus `git merge --ff-only FETCH_HEAD` in Bash and
|
package/README.md
CHANGED
|
@@ -52,6 +52,14 @@ For automation, `pi-67 update --check --json` includes explicit `actions`,
|
|
|
52
52
|
`blocked`, and `warnings` arrays. Each action lists planned writes and preserved
|
|
53
53
|
paths, so update previews stay auditable instead of relying on prose output.
|
|
54
54
|
|
|
55
|
+
Long or slow doctor runs can skip Pi's live skill listing while still checking
|
|
56
|
+
local metadata, config, provider/model, shared skill files, and endpoint
|
|
57
|
+
contracts:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pi-67 doctor --no-skill-list
|
|
61
|
+
```
|
|
62
|
+
|
|
55
63
|
If the local manager may be stale, run the latest npm package for one repair:
|
|
56
64
|
|
|
57
65
|
```bash
|
|
@@ -143,6 +151,7 @@ pi-67 doctor
|
|
|
143
151
|
pi-67 smoke --quick
|
|
144
152
|
pi-67 status
|
|
145
153
|
pi-67 report
|
|
154
|
+
pi-67 report --json
|
|
146
155
|
pi-67 version
|
|
147
156
|
pi-67 xtalpi health
|
|
148
157
|
pi-67 xtalpi smoke --quick
|
package/package.json
CHANGED
package/scripts/check.mjs
CHANGED
|
@@ -59,6 +59,14 @@ function runArgsSelfTests() {
|
|
|
59
59
|
parseCommandOptions(["--help"], { bools: [] }).options.help,
|
|
60
60
|
"command option parser must accept --help for every command",
|
|
61
61
|
);
|
|
62
|
+
assert(
|
|
63
|
+
parseCommandOptions(["--no-skill-list"], { bools: ["no-skill-list"] }).options.noSkillList,
|
|
64
|
+
"command option parser must accept doctor --no-skill-list",
|
|
65
|
+
);
|
|
66
|
+
assert(
|
|
67
|
+
parseCommandOptions(["--json"], { bools: ["json"] }).options.json,
|
|
68
|
+
"command option parser must accept command-level --json",
|
|
69
|
+
);
|
|
62
70
|
}
|
|
63
71
|
|
|
64
72
|
function runCliHelpContractSelfTests() {
|
package/src/commands/doctor.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { isWindows } from "../lib/platform.mjs";
|
|
|
4
4
|
|
|
5
5
|
export async function doctorCommand(ctx, argv) {
|
|
6
6
|
const { options } = parseCommandOptions(argv, {
|
|
7
|
-
bools: ["json", "quiet", "dry-run", "deep-mcp", "strict-shared-skills"],
|
|
7
|
+
bools: ["json", "quiet", "dry-run", "deep-mcp", "no-skill-list", "strict-shared-skills"],
|
|
8
8
|
strings: ["mcp-timeout-ms", "skill-list-timeout-seconds"],
|
|
9
9
|
});
|
|
10
10
|
if (options.help) {
|
|
@@ -19,6 +19,7 @@ export async function doctorCommand(ctx, argv) {
|
|
|
19
19
|
if (options.strictSharedSkills) args.push(isWindows() ? "-StrictSharedSkills" : "--strict-shared-skills");
|
|
20
20
|
if (!isWindows() && options.deepMcp) args.push("--deep-mcp");
|
|
21
21
|
if (!isWindows() && options.mcpTimeoutMs) args.push("--mcp-timeout-ms", options.mcpTimeoutMs);
|
|
22
|
+
if (!isWindows() && options.noSkillList) args.push("--no-skill-list");
|
|
22
23
|
if (options.skillListTimeoutSeconds) {
|
|
23
24
|
args.push(isWindows() ? "-SkillListTimeoutSeconds" : "--skill-list-timeout-seconds", options.skillListTimeoutSeconds);
|
|
24
25
|
}
|
|
@@ -38,8 +39,9 @@ Options:
|
|
|
38
39
|
--quiet Reduce human output where supported.
|
|
39
40
|
--deep-mcp Run deeper MCP probes on POSIX platforms.
|
|
40
41
|
--mcp-timeout-ms N Timeout for deep MCP probes on POSIX platforms.
|
|
42
|
+
--no-skill-list Skip pi skill list on POSIX platforms; accepted as a no-op on Windows.
|
|
41
43
|
--skill-list-timeout-seconds N
|
|
42
|
-
Timeout for pi skill list
|
|
44
|
+
Timeout for pi skill list where enabled.
|
|
43
45
|
--strict-shared-skills Treat differing shared skills as blocking.
|
|
44
46
|
--dry-run Print the script invocation without running it.
|
|
45
47
|
|
package/src/commands/report.mjs
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
1
3
|
import { parseCommandOptions } from "../lib/args.mjs";
|
|
2
4
|
import { runDistroScript } from "../lib/distro-scripts.mjs";
|
|
3
5
|
import { isWindows } from "../lib/platform.mjs";
|
|
6
|
+
import { printJson } from "../lib/output.mjs";
|
|
4
7
|
|
|
5
8
|
export async function reportCommand(ctx, argv) {
|
|
6
9
|
const { options } = parseCommandOptions(argv, {
|
|
7
|
-
bools: ["dry-run", "no-doctor"],
|
|
10
|
+
bools: ["json", "dry-run", "no-doctor"],
|
|
8
11
|
strings: ["operation", "output"],
|
|
9
12
|
});
|
|
10
13
|
if (options.help) {
|
|
@@ -15,21 +18,39 @@ export async function reportCommand(ctx, argv) {
|
|
|
15
18
|
? ["-AgentDir", ctx.agentDir, "-RepoRoot", ctx.repoRoot, "-SkillsDir", ctx.skillsDir]
|
|
16
19
|
: ["--agent-dir", ctx.agentDir, "--repo-root", ctx.repoRoot, "--skills-dir", ctx.skillsDir];
|
|
17
20
|
if (options.operation) args.push(isWindows() ? "-Operation" : "--operation", options.operation);
|
|
18
|
-
|
|
21
|
+
const outputPath = options.output || path.join(ctx.agentDir, "pi67-report.json");
|
|
22
|
+
const resolvedOutputPath = path.isAbsolute(outputPath) ? outputPath : path.resolve(ctx.repoRoot, outputPath);
|
|
23
|
+
args.push(isWindows() ? "-Output" : "--output", outputPath);
|
|
19
24
|
if (options.noDoctor) args.push(isWindows() ? "-NoDoctor" : "--no-doctor");
|
|
20
25
|
if (ctx.dryRun || options.dryRun) args.push(isWindows() ? "-DryRun" : "--dry-run");
|
|
26
|
+
const json = ctx.json || options.json;
|
|
27
|
+
if (json && (ctx.dryRun || options.dryRun)) {
|
|
28
|
+
printJson({
|
|
29
|
+
schema: "pi67.report-command.v1",
|
|
30
|
+
dryRun: true,
|
|
31
|
+
output: resolvedOutputPath,
|
|
32
|
+
operation: options.operation || "manual",
|
|
33
|
+
doctor: options.noDoctor ? "skipped" : "enabled",
|
|
34
|
+
});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
21
37
|
runDistroScript(ctx, { sh: "pi67-report.sh", ps1: "pi67-report.ps1" }, args, {
|
|
22
38
|
dryRun: false,
|
|
39
|
+
stdio: json ? "pipe" : "inherit",
|
|
23
40
|
});
|
|
41
|
+
if (json) {
|
|
42
|
+
process.stdout.write(fs.readFileSync(resolvedOutputPath, "utf8"));
|
|
43
|
+
}
|
|
24
44
|
}
|
|
25
45
|
|
|
26
46
|
function printReportHelp() {
|
|
27
47
|
process.stdout.write(`pi-67 report - generate pi67-report.json
|
|
28
48
|
|
|
29
49
|
Usage:
|
|
30
|
-
pi-67 report [--operation NAME] [--output FILE] [--no-doctor] [--dry-run]
|
|
50
|
+
pi-67 report [--json] [--operation NAME] [--output FILE] [--no-doctor] [--dry-run]
|
|
31
51
|
|
|
32
52
|
Options:
|
|
53
|
+
--json Emit the generated report JSON to stdout.
|
|
33
54
|
--operation NAME Operation label to embed in the report.
|
|
34
55
|
--output FILE Output path. Defaults to the distro report location.
|
|
35
56
|
--no-doctor Skip doctor data collection where supported.
|
|
@@ -17,11 +17,15 @@ export function runDistroScript(ctx, names, args = [], options = {}) {
|
|
|
17
17
|
cwd: ctx.repoRoot,
|
|
18
18
|
dryRun: options.dryRun,
|
|
19
19
|
env: options.env,
|
|
20
|
+
stdio: options.stdio,
|
|
21
|
+
timeoutMs: options.timeoutMs,
|
|
20
22
|
});
|
|
21
23
|
}
|
|
22
24
|
return runCommand("bash", [file, ...args], {
|
|
23
25
|
cwd: ctx.repoRoot,
|
|
24
26
|
dryRun: options.dryRun,
|
|
25
27
|
env: options.env,
|
|
28
|
+
stdio: options.stdio,
|
|
29
|
+
timeoutMs: options.timeoutMs,
|
|
26
30
|
});
|
|
27
31
|
}
|