@tekmidian/pai 1.0.4 → 1.0.5
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/.claude-plugin/plugin.json +1 -1
- package/dist/{auto-route-21GdHL70.mjs → auto-route-DUYr57rs.mjs} +2 -2
- package/dist/auto-route-DWYK_0i0.mjs +11 -0
- package/dist/budget-DX-VIWGf.mjs +15 -0
- package/dist/{caller-identity-yLFb7CKq.mjs → caller-identity-Bim8JT-D.mjs} +3 -3
- package/dist/{capacity-DEveQdFV.mjs → capacity-CsZMkVyg.mjs} +7 -4
- package/dist/{chain-D7PFur8Y.mjs → chain-Dzz6xcKH.mjs} +5 -5
- package/dist/cli/index.mjs +107 -91
- package/dist/{cockpit-actions-OodH_vx_.mjs → cockpit-actions-BTA1njMO.mjs} +27 -23
- package/dist/{cockpit-actions-BfRMr2sm.mjs → cockpit-actions-BgsiNcUY.mjs} +17 -17
- package/dist/cockpit-memory-DIrNs4xr.mjs +20 -0
- package/dist/config/defaults/config.yaml +3 -0
- package/dist/{config-XpZWOYOG.mjs → config-CST2uq1v.mjs} +29 -4
- package/dist/{config-Bu1_vbY8.mjs → config-DYbyEe4-.mjs} +2 -2
- package/dist/{config-DtENJ6cL.mjs → config-Dv3t7xnT.mjs} +1 -1
- package/dist/config-h5qK3fst.mjs +4 -0
- package/dist/{controls-JLm6g0yP.mjs → controls-OiVVbe-f.mjs} +15 -15
- package/dist/daemon/index.mjs +37 -36
- package/dist/{daemon-nXanenDM.mjs → daemon-C1dycZ3W.mjs} +28 -26
- package/dist/daemon-ieo0lnpq.mjs +46 -0
- package/dist/daemon-mcp/index.mjs +34 -34
- package/dist/detect-C0ZBXqDL.mjs +10 -0
- package/dist/{detect-BLKsUOgG.mjs → detect-CHuxFrLy.mjs} +2 -2
- package/dist/{embed-pass-e64AwDCa.mjs → embed-pass-DtVF2fOV.mjs} +4 -4
- package/dist/{embedding-gate-Cnk4YCyX.mjs → embedding-gate-B98PK_wz.mjs} +2 -2
- package/dist/{embedding-gate-6rZrWRXa.mjs → embedding-gate-CTAk8STe.mjs} +2 -2
- package/dist/{endreason-BC-v05H_.mjs → endreason-BqyyU7BH.mjs} +4 -4
- package/dist/{factory-B7nv75rC.mjs → factory-BV0MQA3T.mjs} +4 -4
- package/dist/{factory-Bs9imVMq.mjs → factory-DeASMV7Z.mjs} +4 -4
- package/dist/{fallback-CBWpp2F2.mjs → fallback-Bj2cyVk_.mjs} +6 -6
- package/dist/{health-C4FQmkJn.mjs → health-kufVIf6i.mjs} +4 -4
- package/dist/{helpers-DSNK_1KP.mjs → helpers-CvbYEKoD.mjs} +2 -2
- package/dist/{helpers-Dz7mjTSw.mjs → helpers-WV8tdQHM.mjs} +5 -5
- package/dist/hooks/block-sleep-poll.mjs +1 -1
- package/dist/hooks/load-project-context.mjs +7 -7
- package/dist/hooks/local-model-hint.mjs +1 -1
- package/dist/hooks/route-agents-to-worker.mjs +1 -1
- package/dist/hooks/security-validator.mjs +2 -2
- package/dist/hooks/worker-edit-repair.mjs +2 -2
- package/dist/hooks/worker-guard.mjs +8 -8
- package/dist/hooks/worker-note.mjs +2 -2
- package/dist/hooks/worker-pool-host.mjs +106 -46
- package/dist/hooks/worker-proxy.mjs +1 -1
- package/dist/hooks/worker-status-line.mjs +16 -16
- package/dist/hooks/worker-supervision.mjs +1 -1
- package/dist/hooks/worker-tool-name-repair.mjs +2 -2
- package/dist/index.mjs +8 -8
- package/dist/{indexer-backend-BdjeL4P8.mjs → indexer-backend-B2vtFl38.mjs} +13 -13
- package/dist/kill-tree-CXZ0WfVf.mjs +10 -0
- package/dist/{kill-tree-DleMNZX3.mjs → kill-tree-CcpsRLCZ.mjs} +7 -7
- package/dist/{launch-Di7N-J5X.mjs → launch-DpQPZGsT.mjs} +3 -3
- package/dist/{launch-DlZTKE3u.mjs → launch-UPQBoW2q.mjs} +3 -3
- package/dist/{local-candidate-DLdwQt0s.mjs → local-candidate-Cp_bw4kK.mjs} +3 -3
- package/dist/{local-instances-ZeRkkuS5.mjs → local-instances-B-c-CxzP.mjs} +4 -4
- package/dist/{local-instances-DOxSgT_L.mjs → local-instances-bdCNNSsL.mjs} +2 -2
- package/dist/{local-tiers-BE4jGaMa.mjs → local-tiers-BtdEEe5n.mjs} +2 -2
- package/dist/{local-tiers-DNMI5W86.mjs → local-tiers-OBqAAfOg.mjs} +3 -3
- package/dist/{main-config-ops-kTXR8Pyv.mjs → main-config-ops-BYsK3BxM.mjs} +3 -3
- package/dist/{main-resolver-yp_puSSb.mjs → main-resolver-CAC3xfZM.mjs} +17 -17
- package/dist/{model-inventory-h6Z9fN_o.mjs → model-inventory-BuTpi9a6.mjs} +13 -13
- package/dist/{models-add-TVni3A7V.mjs → models-add-CJx2YAwh.mjs} +36 -35
- package/dist/operator-Bpxq_WB5.mjs +7 -0
- package/dist/{operator-CyuB3aVw.mjs → operator-DrwWItVt.mjs} +2 -2
- package/dist/{pai-marker-BcZyJguM.mjs → pai-marker-DLKJ9Yr5.mjs} +2 -2
- package/dist/{pane-audit-Lqy9N_Ki.mjs → pane-audit-wv9UkyCe.mjs} +8 -8
- package/dist/{paths-CFHTloSe.mjs → paths-DBd78I7Z.mjs} +3 -3
- package/dist/{paths-CHifubDh.mjs → paths-DS5VQKoR.mjs} +3 -3
- package/dist/{planner-j77ndkBf.mjs → planner-K0mFrCpL.mjs} +28 -28
- package/dist/{pool-Dh-q3iJi.mjs → pool-BZ94nFuq.mjs} +2 -2
- package/dist/{pool-cli-BggU8GRp.mjs → pool-cli-B1eKySeN.mjs} +5 -5
- package/dist/{pool-cli-DQ6OzRy2.mjs → pool-cli-BjYQDfx6.mjs} +6 -6
- package/dist/{postgres-DNIOQijl.mjs → postgres-C-T5OWer.mjs} +3 -3
- package/dist/{postgres-BK4FP9Zg.mjs → postgres-CBHY5PIi.mjs} +3 -3
- package/dist/{project-setup-CBRtFFh0.mjs → project-setup-pIPHZaXf.mjs} +24 -24
- package/dist/{providers-C9QC0TtO.mjs → providers-Dzx5GAUI.mjs} +6 -6
- package/dist/providers-QJzpaNhX.mjs +16 -0
- package/dist/{registrable-DpyTtajg.mjs → registrable-CXBBpUcz.mjs} +4 -4
- package/dist/registrable-Drn8wIDO.mjs +9 -0
- package/dist/render-C4KR8qQ8.mjs +13 -0
- package/dist/{render-C84BqQRC.mjs → render-Cz3BWIBO.mjs} +8 -8
- package/dist/root-Bfb1zgwE.mjs +36 -0
- package/dist/{root-C4oXlXS_.mjs → root-bG48WVpW.mjs} +10 -10
- package/dist/route-table-ZVMNBsy7.mjs +15 -0
- package/dist/{routing-DmkheCRH.mjs → routing-BlD_tKjW.mjs} +15 -15
- package/dist/{routing-f2zulGwD.mjs → routing-D27jxj9x.mjs} +13 -13
- package/dist/{run-BwZKBJZZ.mjs → run-AZVwceiU.mjs} +35 -27
- package/dist/{scan-BBGvU5EB.mjs → scan-C3uotg_f.mjs} +5 -5
- package/dist/{scope-D-h6F6DN.mjs → scope-D8HK6vU7.mjs} +4 -4
- package/dist/{session-Dn5OJXlg.mjs → session-BAfypQb9.mjs} +26 -26
- package/dist/session-BcnhepLZ.mjs +35 -0
- package/dist/{session-scan-DUn10MBd.mjs → session-scan-BmnjSReu.mjs} +5 -5
- package/dist/session-scan-CqUQdCac.mjs +9 -0
- package/dist/{session-usage-CPvXvSkw.mjs → session-usage-oycSdiD3.mjs} +117 -2
- package/dist/{status-ggJ7lgVg.mjs → status-COtzewKV.mjs} +3 -3
- package/dist/{status-Dm4dYciN.mjs → status-D_SWmOlH.mjs} +4 -4
- package/dist/{tool-errors-CJWODvlo.mjs → tool-errors-B2LnIqR0.mjs} +6 -6
- package/dist/{tool-errors-7E13StWd.mjs → tool-errors-DXJ70-sr.mjs} +2 -2
- package/dist/{viewer-wfKnvnrI.mjs → viewer-BgGRqXfD.mjs} +14 -14
- package/dist/viewer-CbGN2Ri4.mjs +22 -0
- package/dist/{wait-ByV0OyMZ.mjs → wait-ChpHKJZV.mjs} +3 -3
- package/dist/worker-config-D1KVAMp4.mjs +42 -0
- package/dist/{worker-config-eY5Qy4vl.mjs → worker-config-DgdT0iTB.mjs} +139 -33
- package/dist/workers-config-BhZBrR-Q.mjs +4 -0
- package/dist/{worktree-CRs2gyg0.mjs → worktree-BY--Rgmy.mjs} +5 -5
- package/dist/{zettelkasten-tpCRBYvH.mjs → zettelkasten-BHVx5zj-.mjs} +3 -3
- package/dist/{zettelkasten-_h_tUm2T.mjs → zettelkasten-LoH9RBiN.mjs} +2 -2
- package/docs/commands/README.md +1 -0
- package/docs/commands/config.md +20 -0
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/pai-plugin.json +1 -1
- package/plugins/context-preservation/plugin.json +1 -1
- package/plugins/core/plugin.json +1 -1
- package/plugins/creative/plugin.json +1 -1
- package/plugins/observability/plugin.json +1 -1
- package/plugins/productivity/plugin.json +1 -1
- package/plugins/semantic-search/plugin.json +1 -1
- package/plugins/ui/plugin.json +1 -1
- package/plugins/zettelkasten/plugin.json +1 -1
- package/dist/auto-route-C3S2W3Bc.mjs +0 -11
- package/dist/budget-BrloTOZW.mjs +0 -15
- package/dist/cockpit-memory-teG9M8bG.mjs +0 -20
- package/dist/config-Cxi-aBf4.mjs +0 -4
- package/dist/daemon-DeYImF1F.mjs +0 -45
- package/dist/detect-Rrimh0xc.mjs +0 -10
- package/dist/kill-tree-SV6hrIa3.mjs +0 -10
- package/dist/operator-BTqvTIc8.mjs +0 -7
- package/dist/providers-FvCLzFge.mjs +0 -16
- package/dist/registrable-BzH4TObg.mjs +0 -9
- package/dist/render-B35bQTE-.mjs +0 -13
- package/dist/root-DD1xx_Vu.mjs +0 -36
- package/dist/route-table-FEfDuhIV.mjs +0 -15
- package/dist/session-BAhtXdxj.mjs +0 -35
- package/dist/session-scan-B57dNuA4.mjs +0 -9
- package/dist/viewer-DEySE4c_.mjs +0 -22
- package/dist/worker-config-CO5FXLAT.mjs +0 -41
- package/dist/workers-config-f8KrkY4L.mjs +0 -4
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { _ as warn, c as ok, i as err, n as dim } from "./utils-J2b9y8PC.mjs";
|
|
2
2
|
import { g as paiHomePath, h as paiHomeDir, l as claudeHomeDir, t as aibrokerHomeDir, u as claudeProjectsDir } from "./runtime-paths-WsO9sJFc.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { i as ledgerPath, t as WORKER_ID_RE, u as workersLogDir } from "./paths-
|
|
6
|
-
import { E as worktreesStatsCached, l as formatWorktreesStats } from "./worktree-
|
|
7
|
-
import { T as ownsPidCached, b as loadStatusesCached, g as isLive, v as loadStatus } from "./status-
|
|
8
|
-
import { C as describeMcp, _ as readPoolMetrics, f as poolMetricsPath, h as poolSettings, i as bundleBuildStamp, l as poolHostProbe, o as poolCarry, u as poolHostStale, v as readPoolState, x as warmOrCold } from "./pool-
|
|
9
|
-
import { a as ownerSessionName } from "./scope-
|
|
10
|
-
import { $n as
|
|
11
|
-
import { C as stopLines, T as tierButtons, _ as readLocalConfig, a as LocalTierError, c as fetchServedModels, f as listensOnPort, g as planStart, h as parseServers, l as fmtRss, m as parseLocalConfig, u as healthUrl, v as resolveModelPath, x as stopCommandFor } from "./local-tiers-
|
|
12
|
-
import { _ as buildSlots, a as buildsDir, g as waitReason, l as listBuildsSync, m as ticketKind, n as breakStaleMutex, x as testSlots } from "./caller-identity-
|
|
3
|
+
import { B as isLoopbackUrl, Et as appendLedger, J as migrateWorkersToYaml, K as initWorkersYaml, M as readWorkersSection, Ot as parseLedger, T as parseProvider, V as loopbackUrl, X as parseBuiltinAnthropic, Y as needsWorkersYamlRelocation, Z as parseWorkersYamlDocument, c as WorkersConfigError, dt as findTier, et as relocateWorkersYaml, m as isLocalProvider, mt as parseEntry, nt as workersYamlLegacyNotice, o as PROVIDER_TAGS, ot as yamlProviderToRaw, p as getProviderOrNative, q as inlineWorkersYamlKeys, rt as workersYamlPath, t as ANTHROPIC_NATIVE, y as nativeAnthropicProvider } from "./config-CST2uq1v.mjs";
|
|
4
|
+
import { O as readJsonStrict, f as readMainConfigRaw, k as writeJsonAtomic, m as deepMergeConfig, n as CONFIG_FILE, o as expandHome, u as paiConfigFilePath, v as shippedDefaultsDir, w as readDualFormatConfigRaw, y as shippedMainDefaults } from "./config-DYbyEe4-.mjs";
|
|
5
|
+
import { i as ledgerPath, t as WORKER_ID_RE, u as workersLogDir } from "./paths-DS5VQKoR.mjs";
|
|
6
|
+
import { E as worktreesStatsCached, l as formatWorktreesStats } from "./worktree-BY--Rgmy.mjs";
|
|
7
|
+
import { T as ownsPidCached, b as loadStatusesCached, g as isLive, v as loadStatus } from "./status-COtzewKV.mjs";
|
|
8
|
+
import { C as describeMcp, _ as readPoolMetrics, f as poolMetricsPath, h as poolSettings, i as bundleBuildStamp, l as poolHostProbe, o as poolCarry, u as poolHostStale, v as readPoolState, x as warmOrCold } from "./pool-BZ94nFuq.mjs";
|
|
9
|
+
import { a as ownerSessionName } from "./scope-D8HK6vU7.mjs";
|
|
10
|
+
import { $n as usageLogFile, $t as clearPolicy, E as budgetCache, Ft as clearSessionRoute, Gt as servingChip, Ht as routeChoices, I as buildSpeed, Jn as isTimeOrdered, Jt as setRoute, L as percentile, Mt as loopbackRefusal, Pt as applyPolicyToRoutes, Qn as splitBySessionKind, Qt as POLICY_MODES, Rt as flowText, Tt as duplicateModelIds, Ut as routeRows, Vt as resolveSessionArg, W as currentInventory, Wt as routeText, Yn as markTimeOrdered, Yt as setSessionRoute, _n as currentLocalStatus, an as readPolicy, at as readInventoryInput, bn as pickLocal, dn as getProfile, in as parseDuration, it as readInventory, jt as isTailnetOrLocalName, nn as findLocal, on as routeRun, pn as readProfiles, rn as onBattery, rt as processTreeRssMb, sn as writePolicy, xn as probeLoopback, yn as localTierOrder } from "./routing-BlD_tKjW.mjs";
|
|
11
|
+
import { C as stopLines, T as tierButtons, _ as readLocalConfig, a as LocalTierError, c as fetchServedModels, f as listensOnPort, g as planStart, h as parseServers, l as fmtRss, m as parseLocalConfig, u as healthUrl, v as resolveModelPath, x as stopCommandFor } from "./local-tiers-BtdEEe5n.mjs";
|
|
12
|
+
import { _ as buildSlots, a as buildsDir, g as waitReason, l as listBuildsSync, m as ticketKind, n as breakStaleMutex, x as testSlots } from "./caller-identity-Bim8JT-D.mjs";
|
|
13
13
|
import { f as sharedScheduler, o as readSchedFile, u as schedPlain } from "./scheduler-CtUyWJ3O.mjs";
|
|
14
|
-
import { l as reorderQueue, o as providerCap, s as queueRows, u as reorderQueueTo } from "./capacity-
|
|
15
|
-
import { a as instancesFromProcesses, d as reconcileInstances, i as instanceNumber, l as readInstances, p as writeInstances, r as instanceEngineKey, u as readLiveInstances } from "./local-instances-
|
|
16
|
-
import { i as localStatusLine, s as readLocalStatus } from "./local-candidate-
|
|
14
|
+
import { l as reorderQueue, o as providerCap, s as queueRows, u as reorderQueueTo } from "./capacity-CsZMkVyg.mjs";
|
|
15
|
+
import { a as instancesFromProcesses, d as reconcileInstances, i as instanceNumber, l as readInstances, p as writeInstances, r as instanceEngineKey, u as readLiveInstances } from "./local-instances-bdCNNSsL.mjs";
|
|
16
|
+
import { i as localStatusLine, s as readLocalStatus } from "./local-candidate-Cp_bw4kK.mjs";
|
|
17
17
|
import { t as LOCAL_PROBE_TIMEOUT_MS } from "./timeouts-1MLooEBB.mjs";
|
|
18
18
|
import { n as OPT, t as CliError } from "./define-CjJsmq-6.mjs";
|
|
19
|
-
import { c as resolveFromModule } from "./postgres-
|
|
20
|
-
import { c as ensureProxyRunning, l as proxyPort, u as stopProxy } from "./launch-
|
|
21
|
-
import { a as colorEnabled, f as renderTable, n as readBudget, o as makeStyle } from "./health-
|
|
22
|
-
import { H as testProvider, o as sessionWorkersLine } from "./run-
|
|
23
|
-
import { U as planRows, V as loadPlanStatuses, i as localIdleLine, n as markControlsHeld, s as readLocalIdle, t as clickrControlsArgv, yt as psTable } from "./controls-
|
|
24
|
-
import { w as parseDenialText } from "./render-
|
|
25
|
-
import { n as diskBundleMtime, r as ensurePoolHost } from "./pool-cli-
|
|
26
|
-
import { a as readAudit, d as loadPaneRunStatuses, f as paneRunRows } from "./pane-audit-
|
|
27
|
-
import { i as fallbackStatusText, n as fallbackOn, r as fallbackStatus, t as fallbackOff } from "./fallback-
|
|
28
|
-
import { b as useProvider, f as setClass, g as setWorkersEnabled, l as removeProvider, m as setProviderEnabled, p as setProviderCap, r as classTargetText, s as describeProviders, t as addProvider, v as unsetClass, y as updateProvider } from "./providers-
|
|
29
|
-
import { A as cockpitMemoryPayload, B as cockpitLayout, N as liveMemoryDeps, O as embeddingRuntimeName, P as memoryJobProgress, S as runtimeJobProgress, V as cockpitProbeSettings, c as defaultDeps, g as readLabels, h as readCockpitJob, k as readRuntimeCommands, t as COCKPIT_ACTION_EVENT, v as runCockpitAction, x as runningRuntimeJobs } from "./cockpit-actions-
|
|
30
|
-
import { n as isRealUserPrompt, t as extractUserPromptText } from "./session-usage-
|
|
19
|
+
import { c as resolveFromModule } from "./postgres-C-T5OWer.mjs";
|
|
20
|
+
import { c as ensureProxyRunning, l as proxyPort, u as stopProxy } from "./launch-DpQPZGsT.mjs";
|
|
21
|
+
import { a as colorEnabled, f as renderTable, n as readBudget, o as makeStyle } from "./health-kufVIf6i.mjs";
|
|
22
|
+
import { H as testProvider, o as sessionWorkersLine } from "./run-AZVwceiU.mjs";
|
|
23
|
+
import { U as planRows, V as loadPlanStatuses, i as localIdleLine, n as markControlsHeld, s as readLocalIdle, t as clickrControlsArgv, yt as psTable } from "./controls-OiVVbe-f.mjs";
|
|
24
|
+
import { w as parseDenialText } from "./render-Cz3BWIBO.mjs";
|
|
25
|
+
import { n as diskBundleMtime, r as ensurePoolHost } from "./pool-cli-B1eKySeN.mjs";
|
|
26
|
+
import { a as readAudit, d as loadPaneRunStatuses, f as paneRunRows } from "./pane-audit-wv9UkyCe.mjs";
|
|
27
|
+
import { i as fallbackStatusText, n as fallbackOn, r as fallbackStatus, t as fallbackOff } from "./fallback-Bj2cyVk_.mjs";
|
|
28
|
+
import { b as useProvider, f as setClass, g as setWorkersEnabled, l as removeProvider, m as setProviderEnabled, p as setProviderCap, r as classTargetText, s as describeProviders, t as addProvider, v as unsetClass, y as updateProvider } from "./providers-Dzx5GAUI.mjs";
|
|
29
|
+
import { A as cockpitMemoryPayload, B as cockpitLayout, N as liveMemoryDeps, O as embeddingRuntimeName, P as memoryJobProgress, S as runtimeJobProgress, V as cockpitProbeSettings, c as defaultDeps, g as readLabels, h as readCockpitJob, k as readRuntimeCommands, t as COCKPIT_ACTION_EVENT, v as runCockpitAction, x as runningRuntimeJobs } from "./cockpit-actions-BTA1njMO.mjs";
|
|
30
|
+
import { n as isRealUserPrompt, s as workersConfigShadows, t as extractUserPromptText } from "./session-usage-oycSdiD3.mjs";
|
|
31
31
|
import { appendFileSync, chmodSync, closeSync, copyFileSync, createReadStream, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, realpathSync, renameSync, rmSync, rmdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
32
32
|
import { createHash } from "node:crypto";
|
|
33
33
|
import { basename, dirname, isAbsolute, join, normalize, relative, resolve } from "node:path";
|
|
@@ -231,6 +231,37 @@ function pathFromMessage(msg) {
|
|
|
231
231
|
text: m[2]
|
|
232
232
|
};
|
|
233
233
|
}
|
|
234
|
+
/** Shadowed/unused keys of `text` against config.yaml: unchanged ones warn, a new or changed one is refused (the effective value lives elsewhere). */
|
|
235
|
+
function shadowFindings(text, current, ctx, at) {
|
|
236
|
+
const out = {
|
|
237
|
+
errors: [],
|
|
238
|
+
warnings: []
|
|
239
|
+
};
|
|
240
|
+
const parse = (t) => {
|
|
241
|
+
const v = parseDocument(t, { uniqueKeys: false }).toJS() ?? {};
|
|
242
|
+
return typeof v === "object" && v !== null && !Array.isArray(v) ? v : {};
|
|
243
|
+
};
|
|
244
|
+
let main = {};
|
|
245
|
+
try {
|
|
246
|
+
main = readDualFormatConfigRaw(ctx.mainConfigPath ?? paiConfigFilePath());
|
|
247
|
+
} catch {}
|
|
248
|
+
const before = new Map(workersConfigShadows(main, parse(current)).filter((s) => s.file === "workers.yaml").map((s) => [s.key, JSON.stringify(s.value)]));
|
|
249
|
+
for (const s of workersConfigShadows(main, parse(text))) {
|
|
250
|
+
if (s.file !== "workers.yaml") continue;
|
|
251
|
+
const path = s.key.split(".");
|
|
252
|
+
if (before.get(s.key) === JSON.stringify(s.value)) out.warnings.push({
|
|
253
|
+
path: s.key,
|
|
254
|
+
line: at(path),
|
|
255
|
+
message: s.message
|
|
256
|
+
});
|
|
257
|
+
else out.errors.push({
|
|
258
|
+
path: s.key,
|
|
259
|
+
line: at(path),
|
|
260
|
+
message: `${s.message}; not saved here`
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return out;
|
|
264
|
+
}
|
|
234
265
|
/**
|
|
235
266
|
* Validate registry YAML text. `current` (the text on disk) scopes the
|
|
236
267
|
* port-in-use and removal checks to what the edit changes.
|
|
@@ -332,6 +363,8 @@ function validateRegistry(yamlText, ctx, current = "") {
|
|
|
332
363
|
"model"
|
|
333
364
|
], `model file not found: ${t.model}`);
|
|
334
365
|
}
|
|
366
|
+
const shadow = shadowFindings(yamlText, current, ctx, at);
|
|
367
|
+
errors.push(...shadow.errors);
|
|
335
368
|
const running = (ctx.running?.() ?? []).filter((i) => i.state === "starting" || i.state === "ready");
|
|
336
369
|
for (const name of Object.keys(before)) {
|
|
337
370
|
if (tiers[name]) continue;
|
|
@@ -340,7 +373,10 @@ function validateRegistry(yamlText, ctx, current = "") {
|
|
|
340
373
|
}
|
|
341
374
|
const provNames = new Set(Object.keys(providers));
|
|
342
375
|
for (const inst of running) if (inst.origin === "registered" && !provNames.has(inst.provider)) add(["providers"], `cannot remove provider "${inst.provider}": instance ${inst.id} is running`);
|
|
343
|
-
return {
|
|
376
|
+
return {
|
|
377
|
+
errors,
|
|
378
|
+
warnings: shadow.warnings
|
|
379
|
+
};
|
|
344
380
|
}
|
|
345
381
|
/**
|
|
346
382
|
* Every providers.<name> entry carries an explicit `enabled:` so a search for `enabled: true` finds
|
|
@@ -419,7 +455,7 @@ function validateRequest(yamlText, baseHash, ctx) {
|
|
|
419
455
|
}],
|
|
420
456
|
diff: []
|
|
421
457
|
};
|
|
422
|
-
const { errors } = validateRegistry(yamlText, ctx, cur);
|
|
458
|
+
const { errors, warnings } = validateRegistry(yamlText, ctx, cur);
|
|
423
459
|
let shown = yamlText;
|
|
424
460
|
if (!errors.length) {
|
|
425
461
|
if (ctx.explicitEnabled) shown = withExplicitEnabled(shown);
|
|
@@ -428,6 +464,7 @@ function validateRequest(yamlText, baseHash, ctx) {
|
|
|
428
464
|
return {
|
|
429
465
|
ok: errors.length === 0,
|
|
430
466
|
errors,
|
|
467
|
+
warnings,
|
|
431
468
|
diff: diffLines(cur, shown)
|
|
432
469
|
};
|
|
433
470
|
}
|
|
@@ -4181,11 +4218,25 @@ function wmdModelActs(id){
|
|
|
4181
4218
|
run:function(){var m=wmdModel(id);runIt("more","local.scale",{target:m.tier,count:m.instances.length+1})}}
|
|
4182
4219
|
];
|
|
4183
4220
|
}
|
|
4221
|
+
/** "parallel N" with -/+ for a provider that has a concurrency cap; over the server's slot count a warning tooltip. */
|
|
4222
|
+
function wmdParallel(m){
|
|
4223
|
+
if(!m.maxConcurrent||!m.provider)return"";
|
|
4224
|
+
var over=m.slots&&m.maxConcurrent>m.slots,min=m.capMin||1,max=m.capMax||16;
|
|
4225
|
+
return' <span class="num wmd-par'+(over?" warn":"")+'"'+(over?' title="above the server\'s '+m.slots+' slots: extra runs queue at the server"':' title="runs the provider admits in parallel"')+'>parallel '+m.maxConcurrent+(m.slots?" / "+m.slots+" slots":"")+
|
|
4226
|
+
' <button type="button" class="b wmd-par-b" data-p="'+esc(m.provider)+'" data-d="-1"'+(m.maxConcurrent<=min?" disabled":"")+' title="one parallel run fewer">\u2212</button>'+
|
|
4227
|
+
'<button type="button" class="b wmd-par-b" data-p="'+esc(m.provider)+'" data-d="1"'+(m.maxConcurrent>=max?" disabled":"")+' title="one parallel run more">+</button></span>';
|
|
4228
|
+
}
|
|
4184
4229
|
Win.registerType("model",{minW:300,minH:90,defaultH:120,
|
|
4185
4230
|
mount:function(ctx){
|
|
4186
4231
|
ctx.body.innerHTML='<div class="wmd"><div class="wmd-top" data-k="badges"></div><div class="dim wmd-n" data-k="note"></div><div class="wmd-i" data-k="inst"></div></div>';
|
|
4187
4232
|
ctx.body.addEventListener("click",function(ev){
|
|
4188
4233
|
var b=ev.target;
|
|
4234
|
+
if(b&&b.classList&&b.classList.contains("wmd-par-b")){
|
|
4235
|
+
b.disabled=true;
|
|
4236
|
+
winHost().fetch("/cockpit/providers/"+encodeURIComponent(b.getAttribute("data-p"))+"/concurrency",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({delta:Number(b.getAttribute("data-d"))}),cache:"no-store"})
|
|
4237
|
+
.then(function(){if(typeof loadModels==="function")loadModels()},function(){b.disabled=false});
|
|
4238
|
+
return;
|
|
4239
|
+
}
|
|
4189
4240
|
if(!b||!b.classList||!b.classList.contains("wmd-stop"))return;
|
|
4190
4241
|
WinA.winClick(b,ctx.id,"local.stop",{target:b.getAttribute("data-id"),value:b.getAttribute("data-busy")!=="0"?"confirm":undefined},winHost());
|
|
4191
4242
|
});
|
|
@@ -4194,7 +4245,7 @@ Win.registerType("model",{minW:300,minH:90,defaultH:120,
|
|
|
4194
4245
|
var m=wmdModel(ctx.id);
|
|
4195
4246
|
if(!m){ctx.status("stale","no longer reported");return}
|
|
4196
4247
|
var n=m.instances.length;
|
|
4197
|
-
ctx.html("badges",'<span class="badge">'+esc(m.engine)+'</span> <span class="badge mstate">'+esc(m.state)+'</span> '+(WMD&&WMD.inv&&WMD.inv.localDefaultTier===m.tier?'<span class="badge ok" title="the running model local work goes to (pai worker run --local)">local default</span> ':"")+'<span class="num" title="running instances / max instances">instances '+n+" / "+m.maxInstances+'</span> <span class="num" title="requests in flight / the provider maxConcurrent (none = no cap)">requests '+m.instances.reduce(function(a,x){return a+(x.inflight||0)},0)+(m.maxConcurrent?" / "+m.maxConcurrent:"")+"</span>");
|
|
4248
|
+
ctx.html("badges",'<span class="badge">'+esc(m.engine)+'</span> <span class="badge mstate">'+esc(m.state)+'</span> '+(WMD&&WMD.inv&&WMD.inv.localDefaultTier===m.tier?'<span class="badge ok" title="the running model local work goes to (pai worker run --local)">local default</span> ':"")+'<span class="num" title="running instances / max instances">instances '+n+" / "+m.maxInstances+'</span> <span class="num" title="requests in flight / the provider maxConcurrent (none = no cap)">requests '+m.instances.reduce(function(a,x){return a+(x.inflight||0)},0)+(m.maxConcurrent?" / "+m.maxConcurrent:"")+"</span>"+wmdParallel(m));
|
|
4198
4249
|
ctx.html("note",(m.weightsBytes?'<span class="num" title="weight size on disk">'+gbm(m.weightsBytes/1048576)+" GB</span> · ":"")+'<span title="'+esc(m.file)+'">'+esc(String(m.file).replace(/^.*\//,""))+"</span> · :"+m.port);
|
|
4199
4250
|
ctx.list("inst",m.instances,function(i){return i.id},function(){var d=document.createElement("div");d.className="linst";return d},function(d,i){
|
|
4200
4251
|
var h='<span class="ok">'+esc(i.id)+'</span> <span class="dim">:'+i.port+(i.pid!=null?" · pid "+i.pid:"")+" · "+(i.inflight||0)+' in flight</span> <button type="button" class="b wmd-stop" data-act="local.stop" data-id="'+esc(i.id)+'" data-busy="'+(i.inflight||0)+'" title="stop instance '+esc(i.id)+' (asks to confirm when requests are in flight)">stop</button>';
|
|
@@ -7625,7 +7676,20 @@ async function cockpitModelsPayload() {
|
|
|
7625
7676
|
function registryModelsNow() {
|
|
7626
7677
|
try {
|
|
7627
7678
|
const providers = readWorkersSection().workers.providers;
|
|
7628
|
-
|
|
7679
|
+
const { concurrencyMin, concurrencyMax } = cockpitLayout();
|
|
7680
|
+
const cfg = readLocalConfig(workersYamlPath());
|
|
7681
|
+
return registryModels(cfg, localInstanceRows(), weightsBytes, (t) => providers[t.provider]?.maxConcurrent).map((m) => {
|
|
7682
|
+
const provider = cfg.tiers[m.tier]?.provider;
|
|
7683
|
+
const p = provider ? providers[provider] : void 0;
|
|
7684
|
+
if (m.maxConcurrent === void 0 || !provider || !p) return m;
|
|
7685
|
+
return {
|
|
7686
|
+
...m,
|
|
7687
|
+
provider,
|
|
7688
|
+
...p.conversationSlots !== void 0 ? { slots: p.conversationSlots } : {},
|
|
7689
|
+
capMin: concurrencyMin,
|
|
7690
|
+
capMax: concurrencyMax
|
|
7691
|
+
};
|
|
7692
|
+
});
|
|
7629
7693
|
} catch {
|
|
7630
7694
|
return [];
|
|
7631
7695
|
}
|
|
@@ -8214,6 +8278,48 @@ function handleCockpit(req, res, limits, readRows = cachedRows(), sessionMap = l
|
|
|
8214
8278
|
})));
|
|
8215
8279
|
return true;
|
|
8216
8280
|
}
|
|
8281
|
+
const concurrency = req.method === "POST" ? /^\/cockpit\/providers\/([^/]+)\/concurrency$/.exec(url.pathname) : null;
|
|
8282
|
+
if (concurrency) {
|
|
8283
|
+
if (!sameOriginAction(req)) return send(403, "application/json", JSON.stringify({
|
|
8284
|
+
ok: false,
|
|
8285
|
+
message: "cross-origin action refused"
|
|
8286
|
+
})), true;
|
|
8287
|
+
const name = decodeURIComponent(concurrency[1]);
|
|
8288
|
+
readJsonObject(readBody, req).then((b) => {
|
|
8289
|
+
const { delta } = b;
|
|
8290
|
+
if (delta !== 1 && delta !== -1) return send(400, "application/json", JSON.stringify({
|
|
8291
|
+
ok: false,
|
|
8292
|
+
message: "delta must be +1 or -1"
|
|
8293
|
+
}));
|
|
8294
|
+
try {
|
|
8295
|
+
const cur = readWorkersSection().workers.providers[name]?.maxConcurrent;
|
|
8296
|
+
if (cur === void 0) return send(404, "application/json", JSON.stringify({
|
|
8297
|
+
ok: false,
|
|
8298
|
+
message: `provider "${name}" has no concurrency cap`
|
|
8299
|
+
}));
|
|
8300
|
+
const { concurrencyMin, concurrencyMax } = cockpitLayout();
|
|
8301
|
+
const next = Math.min(concurrencyMax, Math.max(concurrencyMin, cur + delta));
|
|
8302
|
+
if (next !== cur) setProviderCap(name, next);
|
|
8303
|
+
send(200, "application/json", JSON.stringify({
|
|
8304
|
+
ok: true,
|
|
8305
|
+
provider: name,
|
|
8306
|
+
maxConcurrent: next,
|
|
8307
|
+
min: concurrencyMin,
|
|
8308
|
+
max: concurrencyMax,
|
|
8309
|
+
clamped: next !== cur + delta
|
|
8310
|
+
}));
|
|
8311
|
+
} catch (e) {
|
|
8312
|
+
send(409, "application/json", JSON.stringify({
|
|
8313
|
+
ok: false,
|
|
8314
|
+
message: e.message
|
|
8315
|
+
}));
|
|
8316
|
+
}
|
|
8317
|
+
}).catch((e) => send(bodyErrorStatus(e), "application/json", JSON.stringify({
|
|
8318
|
+
ok: false,
|
|
8319
|
+
message: e.message
|
|
8320
|
+
})));
|
|
8321
|
+
return true;
|
|
8322
|
+
}
|
|
8217
8323
|
if (req.method === "POST" && url.pathname === "/cockpit/action") {
|
|
8218
8324
|
if (!sameOriginAction(req)) return send(403, "application/json", JSON.stringify({
|
|
8219
8325
|
ok: false,
|
|
@@ -10568,9 +10674,9 @@ async function stopInstance(cfg, target, opts = {}, deps = {}) {
|
|
|
10568
10674
|
*/
|
|
10569
10675
|
async function cliInflight(cfg, deps = {}) {
|
|
10570
10676
|
const [{ engineInflight }, { readSchedFile }, { instanceEngineKey }] = await Promise.all([
|
|
10571
|
-
import("./cockpit-actions-
|
|
10677
|
+
import("./cockpit-actions-BgsiNcUY.mjs"),
|
|
10572
10678
|
import("./scheduler-dmHXoRvm.mjs"),
|
|
10573
|
-
import("./local-instances-
|
|
10679
|
+
import("./local-instances-B-c-CxzP.mjs")
|
|
10574
10680
|
]);
|
|
10575
10681
|
const now = deps.now ?? Date.now();
|
|
10576
10682
|
const snap = readSchedFile(deps.startDir ?? logDir(), now);
|
|
@@ -10988,7 +11094,7 @@ const workerPoolCommand = {
|
|
|
10988
11094
|
async run(ctx) {
|
|
10989
11095
|
try {
|
|
10990
11096
|
const action = ctx.args.ACTION;
|
|
10991
|
-
const { poolOn, poolOff, poolStatusText } = await import("./pool-cli-
|
|
11097
|
+
const { poolOn, poolOff, poolStatusText } = await import("./pool-cli-BjYQDfx6.mjs");
|
|
10992
11098
|
if (action === void 0 || action === "status") return void out(await poolStatusText(logDir()));
|
|
10993
11099
|
if (action === "on") return void (await poolOn(logDir())).forEach((l) => out(l));
|
|
10994
11100
|
if (action === "off") return void (await poolOff(logDir())).forEach((l) => out(l));
|
|
@@ -11165,4 +11271,4 @@ const WORKER_CONFIG_COMMANDS = [
|
|
|
11165
11271
|
|
|
11166
11272
|
//#endregion
|
|
11167
11273
|
export { exportDefaultLayout as $, workerMcpCommand as A, mergeSettings as B, workerBenchCommand as C, workerFallbackCommand as D, workerControlsCommand as E, workerProvidersCommand as F, cachedRows as G, canBind as H, workerProxyCommand as I, handleCockpit as J, cachedSessionMap as K, workerRolesCommand as L, workerOnCommand as M, workerPolicyCommand as N, workerInstallCommand as O, workerPoolCommand as P, warmCockpit as Q, workerRouteCommand as R, stopInstance as S, workerConfigCommand as T, sizeOnDiskGb as U, allocatePort as V, SystemMonitor as W, setEndpointHealth as X, setActionHooks as Y, setRuntimeSampler as Z, portOpen as _, collectEnv as a, withWorkerAttribution as at, startTier as b, currentInstances as c, saveRegistry as ct, isUp as d, loadBuildsConfig as et, killInstance as f, portListeners as g, parseCostTier as h, cliInflight as i, sessionDisplayName as it, workerOffCommand as j, workerLocalCommand as k, fail as l, providersCommand as lt, listServers as m, WORKER_CONFIG_COMMANDS as n, loadSessionMap as nt, collectTags as o, defaultRegistryCtx as ot, launchDetached as p, cachedWorkerWindows as q, buildClassTarget as r, loadWorkerWindows as rt, controlsArgv as s, hashText as st, PROVIDER_EDIT_COMMANDS as t, createEndpointHealth as tt, healthOk as u, serverLine as v, workerClassesCommand as w, stopAll as x, startInstance as y, installWorkers as z };
|
|
11168
|
-
//# sourceMappingURL=worker-config-
|
|
11274
|
+
//# sourceMappingURL=worker-config-DgdT0iTB.mjs.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { $ as readWorkersYaml, G as effectiveWorkersYamlData, H as WORKERS_YAML_FILENAME, J as migrateWorkersToYaml, K as initWorkersYaml, Q as readMergeVerify, U as buildWorkersYamlText, W as defaultWorkersYamlPath, X as parseBuiltinAnthropic, Y as needsWorkersYamlRelocation, Z as parseWorkersYamlDocument, at as writeWorkersYamlText, et as relocateWorkersYaml, it as writeWorkersYaml, nt as workersYamlLegacyNotice, ot as yamlProviderToRaw, q as inlineWorkersYamlKeys, rt as workersYamlPath, tt as starterWorkersYamlText } from "./config-CST2uq1v.mjs";
|
|
2
|
+
import "./config-DYbyEe4-.mjs";
|
|
3
|
+
|
|
4
|
+
export { workersYamlPath };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as writeFileAtomic } from "./atomic-file-BorMa4T3.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { i as ledgerPath, l as statusPath } from "./paths-
|
|
4
|
-
import { a as UNLABELED, g as isLive, k as saveStatus, v as loadStatus, y as loadStatuses } from "./status-
|
|
2
|
+
import { Et as appendLedger } from "./config-CST2uq1v.mjs";
|
|
3
|
+
import { i as ledgerPath, l as statusPath } from "./paths-DS5VQKoR.mjs";
|
|
4
|
+
import { a as UNLABELED, g as isLive, k as saveStatus, v as loadStatus, y as loadStatuses } from "./status-COtzewKV.mjs";
|
|
5
5
|
import { t as fmtAge } from "./fmt-age-ByDkvkoU.mjs";
|
|
6
|
-
import { v as readPoolState } from "./pool-
|
|
6
|
+
import { v as readPoolState } from "./pool-BZ94nFuq.mjs";
|
|
7
7
|
import { existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { basename, dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
9
9
|
import { platform, tmpdir } from "node:os";
|
|
@@ -2710,4 +2710,4 @@ function gcWorktreesThrottled(logDir, everyMin = 60, now = Date.now(), opts = {}
|
|
|
2710
2710
|
|
|
2711
2711
|
//#endregion
|
|
2712
2712
|
export { applyScratchEnv as A, worktreeWanted as C, formatPending as D, worktreesStatsCached as E, pendingGate as O, worktreeSystemPrompt as S, worktreesStats as T, ownedTree as _, archiveEmptyResult as a, verifyWorker as b, formatKnowledge as c, gcWorktrees as d, gcWorktreesThrottled as f, mergeWorker as g, markResumed as h, adoptTree as i, scratchPromptLine as j, pendingResults as k, formatWorktreesStats as l, leftoverWorktrees as m, MergeConflictError as n, commitLines as o, inPlaceSystemPrompt as p, addWorktree as r, discardWorker as s, GATE_MARK as t, gcPoolWorktrees as u, recordWorktree as v, worktreesDir as w, worktreeRefusesStart as x, salvageOnExit as y };
|
|
2713
|
-
//# sourceMappingURL=worktree-
|
|
2713
|
+
//# sourceMappingURL=worktree-BY--Rgmy.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./config-
|
|
2
|
-
import "./embedding-gate-
|
|
1
|
+
import "./config-DYbyEe4-.mjs";
|
|
2
|
+
import "./embedding-gate-CTAk8STe.mjs";
|
|
3
3
|
import "./embeddings-BVq3esBF.mjs";
|
|
4
4
|
import { r as saveQueryResult } from "./query-feedback-DN52N9C5.mjs";
|
|
5
|
-
import { a as zettelThemes, c as zettelExplore, i as zettelHealth, n as zettelGodNotes, o as zettelConverse, r as zettelSuggest, s as zettelSurprise, t as zettelCommunities } from "./zettelkasten-
|
|
5
|
+
import { a as zettelThemes, c as zettelExplore, i as zettelHealth, n as zettelGodNotes, o as zettelConverse, r as zettelSuggest, s as zettelSurprise, t as zettelCommunities } from "./zettelkasten-LoH9RBiN.mjs";
|
|
6
6
|
|
|
7
7
|
export { zettelConverse, zettelExplore, zettelHealth, zettelSuggest, zettelSurprise, zettelThemes };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as STOP_WORDS$1 } from "./stop-words-DSEYQdNe.mjs";
|
|
2
|
-
import { a as requireQueryEmbedding } from "./embedding-gate-
|
|
2
|
+
import { a as requireQueryEmbedding } from "./embedding-gate-CTAk8STe.mjs";
|
|
3
3
|
import { i as deserializeEmbedding, r as cosineSimilarity } from "./embeddings-BVq3esBF.mjs";
|
|
4
4
|
import { basename, dirname } from "node:path";
|
|
5
5
|
|
|
@@ -1213,4 +1213,4 @@ async function zettelCommunities(backend, opts) {
|
|
|
1213
1213
|
|
|
1214
1214
|
//#endregion
|
|
1215
1215
|
export { zettelThemes as a, zettelExplore as c, zettelHealth as i, zettelGodNotes as n, zettelConverse as o, zettelSuggest as r, zettelSurprise as s, zettelCommunities as t };
|
|
1216
|
-
//# sourceMappingURL=zettelkasten-
|
|
1216
|
+
//# sourceMappingURL=zettelkasten-LoH9RBiN.mjs.map
|
package/docs/commands/README.md
CHANGED
|
@@ -104,6 +104,7 @@ Generated reference for every `pai` command. Read any page in the terminal with
|
|
|
104
104
|
| `pai config path` | Print where PAI keeps its settings |
|
|
105
105
|
| `pai config set` | Change one setting |
|
|
106
106
|
| `pai config unset` | Reset one setting to its default |
|
|
107
|
+
| `pai config validate` | Warn about workers settings that are shadowed or unused |
|
|
107
108
|
| `pai config yaml` | Convert config.json to config.yaml |
|
|
108
109
|
| `pai daemon` | The background service: status, start, stop, restart, logs |
|
|
109
110
|
| `pai daemon install` | Install the daemon as a login service |
|
package/docs/commands/config.md
CHANGED
|
@@ -168,6 +168,25 @@ pai config list
|
|
|
168
168
|
|
|
169
169
|
See also: `pai config migrate`, `pai config set`
|
|
170
170
|
|
|
171
|
+
### pai config validate
|
|
172
|
+
|
|
173
|
+
Warn about workers settings that are shadowed or unused
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
pai config validate
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Warn about workers settings that are shadowed or unused.
|
|
180
|
+
|
|
181
|
+
The non-provider workers.* settings (pool, pane, routing, …) are read from config.yaml only; the routing tables (providers, tiers, classes, mcp_sets, …) from workers.yaml only. Names every key written in the file that does not win, and every top-level workers.yaml block nothing reads.
|
|
182
|
+
|
|
183
|
+
```sh
|
|
184
|
+
pai config validate
|
|
185
|
+
pai config get workers.pool.maxSlots --source
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
See also: `pai config get`, `pai config set`
|
|
189
|
+
|
|
171
190
|
### pai config migrate
|
|
172
191
|
|
|
173
192
|
Move old settings files into the current layout
|
|
@@ -218,6 +237,7 @@ See also: `pai config unset`
|
|
|
218
237
|
| `pai config get` | Print one setting |
|
|
219
238
|
| `pai config set` | Change one setting |
|
|
220
239
|
| `pai config unset` | Reset one setting to its default |
|
|
240
|
+
| `pai config validate` | Warn about workers settings that are shadowed or unused |
|
|
221
241
|
| `pai config migrate` | Move old settings files into the current layout |
|
|
222
242
|
|
|
223
243
|
## See also
|
package/gemini-extension.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@tekmidian/pai",
|
|
3
3
|
"displayName": "PAI Knowledge OS",
|
|
4
4
|
"description": "Personal AI Infrastructure — persistent memory and session continuity for AI coding assistants",
|
|
5
|
-
"version": "1.0.
|
|
5
|
+
"version": "1.0.5",
|
|
6
6
|
"author": "Matthias Nott",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"homepage": "https://github.com/mnott/PAI",
|
package/package.json
CHANGED
package/pai-plugin.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "@tekmidian/pai",
|
|
4
4
|
"displayName": "PAI Knowledge OS",
|
|
5
5
|
"description": "Personal AI Infrastructure — persistent memory, session continuity, and knowledge graph",
|
|
6
|
-
"version": "1.0.
|
|
6
|
+
"version": "1.0.5",
|
|
7
7
|
"author": "Matthias Nott",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"homepage": "https://github.com/mnott/PAI",
|
package/plugins/core/plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "pai-productivity",
|
|
3
3
|
"displayName": "PAI Productivity",
|
|
4
4
|
"description": "Planning, journaling, reviewing, research, sharing, and cross-session task routing",
|
|
5
|
-
"version": "1.0.
|
|
5
|
+
"version": "1.0.5",
|
|
6
6
|
"hooks": "./hooks/hooks.json",
|
|
7
7
|
"skills": ["./skills/"]
|
|
8
8
|
}
|
package/plugins/ui/plugin.json
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import "./config-XpZWOYOG.mjs";
|
|
2
|
-
import "./config-Bu1_vbY8.mjs";
|
|
3
|
-
import "./paths-CHifubDh.mjs";
|
|
4
|
-
import "./worktree-CRs2gyg0.mjs";
|
|
5
|
-
import "./status-ggJ7lgVg.mjs";
|
|
6
|
-
import "./pool-Dh-q3iJi.mjs";
|
|
7
|
-
import "./registrable-DpyTtajg.mjs";
|
|
8
|
-
import "./pai-marker-BcZyJguM.mjs";
|
|
9
|
-
import { n as formatAutoRouteJson, t as autoRoute } from "./auto-route-21GdHL70.mjs";
|
|
10
|
-
|
|
11
|
-
export { autoRoute, formatAutoRouteJson };
|
package/dist/budget-BrloTOZW.mjs
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import "./config-XpZWOYOG.mjs";
|
|
2
|
-
import "./config-Bu1_vbY8.mjs";
|
|
3
|
-
import "./paths-CHifubDh.mjs";
|
|
4
|
-
import "./status-ggJ7lgVg.mjs";
|
|
5
|
-
import "./scope-D-h6F6DN.mjs";
|
|
6
|
-
import { A as budgetSkipReason, D as budgetExceeded, E as budgetCache, M as budgetWall, N as fetchBudgetReading, O as budgetFresh, P as pickBudgetWindow, T as BudgetCache, j as budgetUntilLabel, k as budgetFull, w as BUDGET_TTL_MS } from "./routing-DmkheCRH.mjs";
|
|
7
|
-
import "./tool-errors-7E13StWd.mjs";
|
|
8
|
-
import "./wait-ByV0OyMZ.mjs";
|
|
9
|
-
import "./local-tiers-BE4jGaMa.mjs";
|
|
10
|
-
import "./caller-identity-yLFb7CKq.mjs";
|
|
11
|
-
import "./capacity-DEveQdFV.mjs";
|
|
12
|
-
import "./local-instances-DOxSgT_L.mjs";
|
|
13
|
-
import "./local-candidate-DLdwQt0s.mjs";
|
|
14
|
-
|
|
15
|
-
export { BUDGET_TTL_MS, BudgetCache, budgetCache, budgetExceeded, budgetFresh, budgetFull, budgetSkipReason, budgetUntilLabel, budgetWall, fetchBudgetReading, pickBudgetWindow };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import "./config-XpZWOYOG.mjs";
|
|
2
|
-
import "./config-Bu1_vbY8.mjs";
|
|
3
|
-
import "./paths-CHifubDh.mjs";
|
|
4
|
-
import "./status-ggJ7lgVg.mjs";
|
|
5
|
-
import "./scope-D-h6F6DN.mjs";
|
|
6
|
-
import "./routing-DmkheCRH.mjs";
|
|
7
|
-
import "./tool-errors-7E13StWd.mjs";
|
|
8
|
-
import "./wait-ByV0OyMZ.mjs";
|
|
9
|
-
import "./local-tiers-BE4jGaMa.mjs";
|
|
10
|
-
import "./caller-identity-yLFb7CKq.mjs";
|
|
11
|
-
import "./capacity-DEveQdFV.mjs";
|
|
12
|
-
import "./local-instances-DOxSgT_L.mjs";
|
|
13
|
-
import "./local-candidate-DLdwQt0s.mjs";
|
|
14
|
-
import "./providers-C9QC0TtO.mjs";
|
|
15
|
-
import "./main-config-ops-kTXR8Pyv.mjs";
|
|
16
|
-
import { A as cockpitMemoryPayload, F as memoryRunLog, I as rateSeries, L as runProgress, M as latestMemoryJob, N as liveMemoryDeps, P as memoryJobProgress, R as runningMemoryJob, j as fetchDaemonMemory, z as sameModel } from "./cockpit-actions-OodH_vx_.mjs";
|
|
17
|
-
import "./ipc-client-CnYEF31R.mjs";
|
|
18
|
-
import "./embed-pass-e64AwDCa.mjs";
|
|
19
|
-
|
|
20
|
-
export { fetchDaemonMemory };
|
package/dist/config-Cxi-aBf4.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { A as providerQuotaSkipAt, C as parseMcpSetsValue, D as providerContextWindow, E as parseWorkersConfig, F as writeWorkersSection, M as resolveCapability, N as resolveModelCapability, O as providerCostTier, P as resolveProviderKey, S as parseClassesValue, T as parseProvider, _ as maskKey, a as MODEL_CAPABILITIES, b as nativeOrchestratorModel, c as WorkersConfigError, d as defaultWorkersConfig, f as escalationCloud, g as keysDir, h as isModelCapability, ht as DEFAULT_CONTEXT_WINDOW, i as DEFAULT_POOL_PORT, j as readWorkersSection, k as providerKeyPath, l as assertProviderRunnable, m as isLocalProvider, n as CAPABILITY_NAME_RE, o as PROVIDER_TAGS, p as getProviderOrNative, r as DEFAULT_COST_TIER, s as WORKER_CLASSES, t as ANTHROPIC_NATIVE, u as classModelCapability, v as nativeAnthropicModels, w as parseModelsBlock, x as parseCapabilitiesValue, y as nativeAnthropicProvider } from "./config-XpZWOYOG.mjs";
|
|
2
|
-
import { o as expandHome, s as homeRel } from "./config-Bu1_vbY8.mjs";
|
|
3
|
-
|
|
4
|
-
export { ANTHROPIC_NATIVE, CAPABILITY_NAME_RE, DEFAULT_CONTEXT_WINDOW, DEFAULT_COST_TIER, DEFAULT_POOL_PORT, MODEL_CAPABILITIES, PROVIDER_TAGS, WORKER_CLASSES, WorkersConfigError, assertProviderRunnable, classModelCapability, defaultWorkersConfig, escalationCloud, expandHome, getProviderOrNative, homeRel, isLocalProvider, isModelCapability, keysDir, maskKey, nativeAnthropicModels, nativeAnthropicProvider, nativeOrchestratorModel, parseCapabilitiesValue, parseClassesValue, parseMcpSetsValue, parseModelsBlock, parseProvider, parseWorkersConfig, providerContextWindow, providerCostTier, providerKeyPath, providerQuotaSkipAt, readWorkersSection, resolveCapability, resolveModelCapability, resolveProviderKey, writeWorkersSection };
|
package/dist/daemon-DeYImF1F.mjs
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import "./utils-J2b9y8PC.mjs";
|
|
2
|
-
import "./migrate-DrA_OwlZ.mjs";
|
|
3
|
-
import "./config-XpZWOYOG.mjs";
|
|
4
|
-
import "./config-Bu1_vbY8.mjs";
|
|
5
|
-
import "./paths-CHifubDh.mjs";
|
|
6
|
-
import "./worktree-CRs2gyg0.mjs";
|
|
7
|
-
import "./status-ggJ7lgVg.mjs";
|
|
8
|
-
import "./pool-Dh-q3iJi.mjs";
|
|
9
|
-
import "./registrable-DpyTtajg.mjs";
|
|
10
|
-
import "./pai-marker-BcZyJguM.mjs";
|
|
11
|
-
import "./helpers-CRuBUas3.mjs";
|
|
12
|
-
import "./reranker-CqCbpGnX.mjs";
|
|
13
|
-
import "./scope-D-h6F6DN.mjs";
|
|
14
|
-
import "./routing-DmkheCRH.mjs";
|
|
15
|
-
import "./tool-errors-7E13StWd.mjs";
|
|
16
|
-
import "./wait-ByV0OyMZ.mjs";
|
|
17
|
-
import "./local-tiers-BE4jGaMa.mjs";
|
|
18
|
-
import "./caller-identity-yLFb7CKq.mjs";
|
|
19
|
-
import "./capacity-DEveQdFV.mjs";
|
|
20
|
-
import "./local-instances-DOxSgT_L.mjs";
|
|
21
|
-
import "./local-candidate-DLdwQt0s.mjs";
|
|
22
|
-
import "./factory-B7nv75rC.mjs";
|
|
23
|
-
import "./postgres-DNIOQijl.mjs";
|
|
24
|
-
import "./embedding-gate-6rZrWRXa.mjs";
|
|
25
|
-
import "./embeddings-BVq3esBF.mjs";
|
|
26
|
-
import "./router-CQSc3lk3.mjs";
|
|
27
|
-
import "./detect-BLKsUOgG.mjs";
|
|
28
|
-
import "./scan-BBGvU5EB.mjs";
|
|
29
|
-
import "./launch-Di7N-J5X.mjs";
|
|
30
|
-
import "./run-BwZKBJZZ.mjs";
|
|
31
|
-
import "./controls-JLm6g0yP.mjs";
|
|
32
|
-
import "./endreason-BC-v05H_.mjs";
|
|
33
|
-
import "./render-C84BqQRC.mjs";
|
|
34
|
-
import "./operator-CyuB3aVw.mjs";
|
|
35
|
-
import "./kill-tree-DleMNZX3.mjs";
|
|
36
|
-
import "./pool-cli-BggU8GRp.mjs";
|
|
37
|
-
import "./pane-audit-Lqy9N_Ki.mjs";
|
|
38
|
-
import "./ipc-client-CnYEF31R.mjs";
|
|
39
|
-
import "./embed-pass-e64AwDCa.mjs";
|
|
40
|
-
import "./indexer-backend-BdjeL4P8.mjs";
|
|
41
|
-
import { t as serve } from "./daemon-nXanenDM.mjs";
|
|
42
|
-
import "./auto-route-21GdHL70.mjs";
|
|
43
|
-
import "./zettelkasten-_h_tUm2T.mjs";
|
|
44
|
-
|
|
45
|
-
export { serve };
|
package/dist/detect-Rrimh0xc.mjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import "./config-Bu1_vbY8.mjs";
|
|
2
|
-
import "./helpers-CRuBUas3.mjs";
|
|
3
|
-
import "./factory-B7nv75rC.mjs";
|
|
4
|
-
import "./postgres-DNIOQijl.mjs";
|
|
5
|
-
import "./embedding-gate-6rZrWRXa.mjs";
|
|
6
|
-
import "./embeddings-BVq3esBF.mjs";
|
|
7
|
-
import "./router-CQSc3lk3.mjs";
|
|
8
|
-
import { n as formatDetection, r as formatDetectionJson, t as detectProject } from "./detect-BLKsUOgG.mjs";
|
|
9
|
-
|
|
10
|
-
export { detectProject };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import "./config-XpZWOYOG.mjs";
|
|
2
|
-
import "./config-Bu1_vbY8.mjs";
|
|
3
|
-
import "./paths-CHifubDh.mjs";
|
|
4
|
-
import "./status-ggJ7lgVg.mjs";
|
|
5
|
-
import "./scope-D-h6F6DN.mjs";
|
|
6
|
-
import "./caller-identity-yLFb7CKq.mjs";
|
|
7
|
-
import "./endreason-BC-v05H_.mjs";
|
|
8
|
-
import { i as killTree, n as isOwner, r as killRefusal, t as descendantsLeavesFirst } from "./kill-tree-DleMNZX3.mjs";
|
|
9
|
-
|
|
10
|
-
export { killTree };
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import "./config-XpZWOYOG.mjs";
|
|
2
|
-
import "./config-Bu1_vbY8.mjs";
|
|
3
|
-
import "./paths-CHifubDh.mjs";
|
|
4
|
-
import "./status-ggJ7lgVg.mjs";
|
|
5
|
-
import { n as operatorSocketPath, r as sayToWorker, t as createOperatorServer } from "./operator-CyuB3aVw.mjs";
|
|
6
|
-
|
|
7
|
-
export { sayToWorker };
|