@piagent/platform 1.13.0 → 1.14.0
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 +25 -0
- package/README.md +2 -2
- package/README.vi.md +2 -2
- package/docs/command-reference-vietnamese.md +2 -2
- package/docs/distribution-standard.md +6 -6
- package/docs/en/windows.md +20 -1
- package/docs/languages.json +4 -4
- package/docs/model-options.md +16 -0
- package/docs/operator-manual-vietnamese.md +7 -7
- package/docs/publishing-for-teams.md +2 -0
- package/docs/release-install-policy.md +2 -2
- package/docs/team-onboarding.md +2 -2
- package/docs/vi/windows.md +20 -1
- package/docs-site/architecture.html +2 -1
- package/docs-site/benchmark.html +2 -1
- package/docs-site/commands.html +2 -1
- package/docs-site/content/en/index.html +4 -4
- package/docs-site/content/en/quickstart.html +1 -1
- package/docs-site/content/en/whats-new.html +17 -0
- package/docs-site/content/en/windows.html +76 -0
- package/docs-site/content/index.html +4 -4
- package/docs-site/content/quickstart.html +2 -2
- package/docs-site/content/whats-new.html +17 -0
- package/docs-site/content/windows.html +76 -0
- package/docs-site/context-engine.html +2 -1
- package/docs-site/ecosystem.html +2 -1
- package/docs-site/en/architecture.html +2 -1
- package/docs-site/en/benchmark.html +2 -1
- package/docs-site/en/commands.html +2 -1
- package/docs-site/en/context-engine.html +2 -1
- package/docs-site/en/ecosystem.html +2 -1
- package/docs-site/en/index.html +6 -5
- package/docs-site/en/mcp-approval.html +2 -1
- package/docs-site/en/mcp-auth.html +2 -1
- package/docs-site/en/mcp-servers.html +2 -1
- package/docs-site/en/mcp.html +2 -1
- package/docs-site/en/permissions.html +2 -1
- package/docs-site/en/profiles.html +2 -1
- package/docs-site/en/quickstart.html +5 -4
- package/docs-site/en/runtime.html +2 -1
- package/docs-site/en/scope.html +2 -1
- package/docs-site/en/security.html +2 -1
- package/docs-site/en/team.html +2 -1
- package/docs-site/en/whats-new.html +21 -3
- package/docs-site/en/windows.html +216 -0
- package/docs-site/en/workflows.html +2 -1
- package/docs-site/index.html +6 -5
- package/docs-site/mcp-approval.html +2 -1
- package/docs-site/mcp-auth.html +2 -1
- package/docs-site/mcp-servers.html +2 -1
- package/docs-site/mcp.html +2 -1
- package/docs-site/permissions.html +2 -1
- package/docs-site/profiles.html +2 -1
- package/docs-site/quickstart.html +6 -5
- package/docs-site/runtime.html +2 -1
- package/docs-site/scope.html +2 -1
- package/docs-site/security.html +2 -1
- package/docs-site/team.html +2 -1
- package/docs-site/whats-new.html +21 -3
- package/docs-site/windows.html +216 -0
- package/docs-site/workflows.html +2 -1
- package/evals/private-holdout-v1/public-exposure.v2.json +1 -1
- package/package.json +1 -1
- package/packages/piagent-core/package.json +1 -1
- package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-D8wcWkJg.js → MarkdownMessage-CyT2G1H2.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{index-DWL_wVw7.js → index-BBEa7Ger.js} +11 -11
- package/packages/piagent-webui/dist/client/index.html +1 -1
- package/scripts/build-docs-site.mjs +11 -0
- package/scripts/configure-model-scope.sh +37 -8
- package/scripts/install-global.sh +22 -4
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<meta name="csp-nonce" content="__PIAGENT_CSP_NONCE__" />
|
|
8
8
|
<meta name="piagent-webui-mode" content="__PIAGENT_WEBUI_MODE__" />
|
|
9
9
|
<title>Piagent WebUI</title>
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-BBEa7Ger.js"></script>
|
|
11
11
|
<link rel="stylesheet" crossorigin href="/assets/index-Z91z6SlN.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
@@ -69,6 +69,12 @@ const NAV = [
|
|
|
69
69
|
title: "Step by step cho thành viên mới",
|
|
70
70
|
lead: "Hai lệnh để cài, mở repo, chọn profile và quyền, rồi giao việc bằng lời thường; guard kiểm tra từng tool call."
|
|
71
71
|
},
|
|
72
|
+
{
|
|
73
|
+
slug: "windows",
|
|
74
|
+
nav: "Cài trên Windows",
|
|
75
|
+
title: "Piagent trên Windows bằng một lệnh",
|
|
76
|
+
lead: "Một lệnh PowerShell cài WSL2, Ubuntu, Piagent và Agent Watch, nối key công ty và thêm Piagent vào Start menu; chạy lại để cập nhật."
|
|
77
|
+
},
|
|
72
78
|
{
|
|
73
79
|
slug: "whats-new",
|
|
74
80
|
nav: "Có gì mới",
|
|
@@ -200,6 +206,11 @@ const EN_PAGE_COPY = {
|
|
|
200
206
|
title: "Step by step for new team members",
|
|
201
207
|
lead: "Install with two commands, open a repository, choose its profile and permissions, then ask in plain language; the guard checks every tool call."
|
|
202
208
|
},
|
|
209
|
+
windows: {
|
|
210
|
+
nav: "Windows",
|
|
211
|
+
title: "Piagent on Windows with one command",
|
|
212
|
+
lead: "One PowerShell command installs WSL2, Ubuntu, Piagent and Agent Watch, binds the company key and adds Piagent to the Start menu; run it again to update."
|
|
213
|
+
},
|
|
203
214
|
"whats-new": {
|
|
204
215
|
nav: "What’s new",
|
|
205
216
|
title: "1.9.0: ask in plain language, the team's Harness checks",
|
|
@@ -14,6 +14,9 @@ Options:
|
|
|
14
14
|
--dry-run Print resulting settings JSON without writing
|
|
15
15
|
--prune Only remove enabledModels patterns that match no model
|
|
16
16
|
Pi knows (Pi warns about each on every start); keep the rest
|
|
17
|
+
--keep-member-choices Install/update mode: set the default model and model list
|
|
18
|
+
only where Pi has none yet; otherwise keep the member's and
|
|
19
|
+
add only models this release offers for the first time
|
|
17
20
|
-h, --help
|
|
18
21
|
|
|
19
22
|
Purpose:
|
|
@@ -36,6 +39,7 @@ DEFAULT_MODEL="openai-codex/gpt-6-sol:high"
|
|
|
36
39
|
SETTINGS_PATH="${PI_CODING_AGENT_DIR:-"${HOME}/.pi/agent"}/settings.json"
|
|
37
40
|
DRY_RUN=false
|
|
38
41
|
PRUNE=false
|
|
42
|
+
KEEP=false
|
|
39
43
|
|
|
40
44
|
# A flag whose value is missing swallows the next flag instead. `--settings
|
|
41
45
|
# --dry-run` used to set the settings path to the string "--dry-run", leave
|
|
@@ -75,6 +79,10 @@ while [[ $# -gt 0 ]]; do
|
|
|
75
79
|
PRUNE=true
|
|
76
80
|
shift
|
|
77
81
|
;;
|
|
82
|
+
--keep-member-choices)
|
|
83
|
+
KEEP=true
|
|
84
|
+
shift
|
|
85
|
+
;;
|
|
78
86
|
-h|--help)
|
|
79
87
|
usage
|
|
80
88
|
exit 0
|
|
@@ -102,14 +110,15 @@ case "$PRESET" in
|
|
|
102
110
|
;;
|
|
103
111
|
esac
|
|
104
112
|
|
|
105
|
-
PIAGENT_SCOPE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" node --input-type=module - "$SETTINGS_PATH" "$PRESET" "$DEFAULT_MODEL" "$DRY_RUN" <<'NODE'
|
|
113
|
+
PIAGENT_SCOPE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" node --input-type=module - "$SETTINGS_PATH" "$PRESET" "$DEFAULT_MODEL" "$DRY_RUN" "$KEEP" <<'NODE'
|
|
106
114
|
import fs from "node:fs";
|
|
107
115
|
import path from "node:path";
|
|
108
116
|
import { pathToFileURL } from "node:url";
|
|
109
117
|
const { prepareClaudeModelAdditions } = await import(pathToFileURL(process.env.PIAGENT_SCOPE_ROOT + "/scripts/claude-model-additions.mjs"));
|
|
110
118
|
|
|
111
|
-
const [settingsPath, preset, defaultModelInput, dryRunRaw] = process.argv.slice(2);
|
|
119
|
+
const [settingsPath, preset, defaultModelInput, dryRunRaw, keepRaw] = process.argv.slice(2);
|
|
112
120
|
const dryRun = dryRunRaw === "true";
|
|
121
|
+
const keep = keepRaw === "true";
|
|
113
122
|
|
|
114
123
|
const codexModels = [
|
|
115
124
|
"openai-codex/gpt-5.3-codex-spark:minimal",
|
|
@@ -160,10 +169,28 @@ const parsedDefault = parseDefaultModel(defaultModelInput);
|
|
|
160
169
|
const settingsBefore = fs.existsSync(settingsPath) ? fs.readFileSync(settingsPath, "utf8") : null;
|
|
161
170
|
const settings = settingsBefore === null ? {} : JSON.parse(settingsBefore);
|
|
162
171
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
172
|
+
// What Piagent last offered, so an update adds only models new to this
|
|
173
|
+
// release and never puts back one the member removed.
|
|
174
|
+
const recordPath = path.join(path.dirname(settingsPath), "piagent-model-scope.json");
|
|
175
|
+
let offered = null;
|
|
176
|
+
try { const record = JSON.parse(fs.readFileSync(recordPath, "utf8")); if (Array.isArray(record.offered)) offered = record.offered; } catch { /* none yet */ }
|
|
177
|
+
const notes = [];
|
|
178
|
+
if (!keep || !settings.defaultModel) {
|
|
179
|
+
settings.defaultProvider = parsedDefault.provider;
|
|
180
|
+
settings.defaultModel = parsedDefault.model;
|
|
181
|
+
settings.defaultThinkingLevel = parsedDefault.thinking;
|
|
182
|
+
} else {
|
|
183
|
+
notes.push(`kept the member's default: ${settings.defaultProvider ?? "?"}/${settings.defaultModel}${settings.defaultThinkingLevel ? `:${settings.defaultThinkingLevel}` : ""}`);
|
|
184
|
+
}
|
|
185
|
+
if (!keep || !Array.isArray(settings.enabledModels) || settings.enabledModels.length === 0) {
|
|
186
|
+
settings.enabledModels = enabledModels;
|
|
187
|
+
} else {
|
|
188
|
+
// Installed before this record existed: the member's list stays, and the
|
|
189
|
+
// record starts now.
|
|
190
|
+
const fresh = offered ? enabledModels.filter((model) => !offered.includes(model) && !settings.enabledModels.includes(model)) : [];
|
|
191
|
+
settings.enabledModels = [...settings.enabledModels, ...fresh];
|
|
192
|
+
notes.push(fresh.length ? `kept the member's model list, added ${fresh.join(", ")}` : "kept the member's model list");
|
|
193
|
+
}
|
|
167
194
|
|
|
168
195
|
const catalogEdit = preset === "codex" ? null : prepareClaudeModelAdditions(path.join(path.dirname(settingsPath), "models.json"));
|
|
169
196
|
const output = `${JSON.stringify(settings, null, 2)}\n`;
|
|
@@ -180,9 +207,11 @@ if (dryRun) {
|
|
|
180
207
|
}
|
|
181
208
|
throw error;
|
|
182
209
|
}
|
|
210
|
+
fs.writeFileSync(recordPath, `${JSON.stringify({ version: 1, preset, offered: enabledModels }, null, 2)}\n`);
|
|
183
211
|
console.log(`Configured Pi model scope: ${settingsPath}`);
|
|
184
212
|
console.log(` preset: ${preset}`);
|
|
185
|
-
console.log(` default: ${
|
|
186
|
-
console.log(` enabledModels: ${enabledModels.length}`);
|
|
213
|
+
console.log(` default: ${settings.defaultProvider}/${settings.defaultModel}:${settings.defaultThinkingLevel}`);
|
|
214
|
+
console.log(` enabledModels: ${settings.enabledModels.length}`);
|
|
215
|
+
for (const note of notes) console.log(` ${note}`);
|
|
187
216
|
}
|
|
188
217
|
NODE
|
|
@@ -24,7 +24,11 @@ Options:
|
|
|
24
24
|
Install pi-web-access for the researcher subagent (default: install).
|
|
25
25
|
--with-herdr Also configure Herdr integration.
|
|
26
26
|
--model-scope <full|codex|claude>
|
|
27
|
-
Model families to enable in Pi (default: full).
|
|
27
|
+
Model families to enable in Pi (default: full). A member who
|
|
28
|
+
already has a default model and model list keeps them; an
|
|
29
|
+
update only adds models new to this release.
|
|
30
|
+
--reset-model-scope Replace the member's default model and model list with the
|
|
31
|
+
preset (what every update did before 1.14.0).
|
|
28
32
|
--no-model-scope Leave the user's enabledModels untouched.
|
|
29
33
|
--default-model <provider/model[:thinking]>
|
|
30
34
|
Default model written to Pi settings
|
|
@@ -90,6 +94,7 @@ SUBAGENTS_MODEL_SCOPE="none"
|
|
|
90
94
|
WITH_WEB_ACCESS=true
|
|
91
95
|
WITH_HERDR=false
|
|
92
96
|
CONFIGURE_MODEL_SCOPE=true
|
|
97
|
+
RESET_MODEL_SCOPE=false
|
|
93
98
|
MODEL_SCOPE_PRESET="full"
|
|
94
99
|
DEFAULT_MODEL="openai-codex/gpt-6-sol:high"
|
|
95
100
|
DRY_RUN=false
|
|
@@ -135,7 +140,12 @@ detect_runtime_surface() {
|
|
|
135
140
|
arch_name="$(uname -m 2>/dev/null || echo unknown)"
|
|
136
141
|
|
|
137
142
|
if [[ "$os_name" == "Linux" && -r /proc/version ]] && grep -qiE "microsoft|wsl" /proc/version 2>/dev/null; then
|
|
138
|
-
|
|
143
|
+
# WSL2 is how Windows runs Piagent (since 1.13.0): the Windows setup and
|
|
144
|
+
# the bubblewrap sandbox run in CI on x86_64.
|
|
145
|
+
case "$arch_name" in
|
|
146
|
+
x86_64|amd64) printf 'wsl2/%s (verified in CI: Windows setup and the bubblewrap sandbox)' "$arch_name" ;;
|
|
147
|
+
*) printf 'wsl2/%s (supported target; run smoke before team rollout)' "$arch_name" ;;
|
|
148
|
+
esac
|
|
139
149
|
return
|
|
140
150
|
fi
|
|
141
151
|
|
|
@@ -153,7 +163,7 @@ detect_runtime_surface() {
|
|
|
153
163
|
printf 'linux-arm64 (supported target; run smoke before team rollout)'
|
|
154
164
|
;;
|
|
155
165
|
MINGW*|MSYS*|CYGWIN*)
|
|
156
|
-
printf 'native-windows/%s (not release-gated;
|
|
166
|
+
printf 'native-windows/%s (personal-mode preview, not release-gated; teams use WSL2)' "$arch_name"
|
|
157
167
|
;;
|
|
158
168
|
*)
|
|
159
169
|
printf '%s/%s (outside v1.2.0 release matrix)' "$os_name" "$arch_name"
|
|
@@ -530,6 +540,10 @@ while [[ $# -gt 0 ]]; do
|
|
|
530
540
|
DEFAULT_MODEL="$2"
|
|
531
541
|
shift 2
|
|
532
542
|
;;
|
|
543
|
+
--reset-model-scope)
|
|
544
|
+
RESET_MODEL_SCOPE=true
|
|
545
|
+
shift
|
|
546
|
+
;;
|
|
533
547
|
--no-model-scope)
|
|
534
548
|
CONFIGURE_MODEL_SCOPE=false
|
|
535
549
|
shift
|
|
@@ -750,7 +764,11 @@ fi
|
|
|
750
764
|
|
|
751
765
|
if [[ "$CONFIGURE_MODEL_SCOPE" == true ]]; then
|
|
752
766
|
echo "Configuring Pi model selector scope:"
|
|
753
|
-
|
|
767
|
+
if [[ "$RESET_MODEL_SCOPE" == true ]]; then
|
|
768
|
+
run_cmd bash "$PLATFORM_ROOT/scripts/configure-model-scope.sh" --preset "$MODEL_SCOPE_PRESET" --default-model "$DEFAULT_MODEL"
|
|
769
|
+
else
|
|
770
|
+
run_cmd bash "$PLATFORM_ROOT/scripts/configure-model-scope.sh" --preset "$MODEL_SCOPE_PRESET" --default-model "$DEFAULT_MODEL" --keep-member-choices
|
|
771
|
+
fi
|
|
754
772
|
fi
|
|
755
773
|
|
|
756
774
|
if [[ "$WITH_HERDR" == true ]]; then
|