pi-para 0.6.0 → 0.6.2
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/ARCHITECTURE.md +0 -9
- package/CHANGELOG.md +22 -0
- package/CONFIGURATION.md +5 -23
- package/README.md +7 -31
- package/SETUP.md +5 -3
- package/STRUCTURE.md +0 -9
- package/dist/atomic-write.d.ts +2 -0
- package/dist/atomic-write.d.ts.map +1 -0
- package/dist/atomic-write.js +18 -0
- package/dist/atomic-write.js.map +1 -0
- package/dist/capture.d.ts +34 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +461 -0
- package/dist/capture.js.map +1 -0
- package/dist/cli-legacy.d.ts +4 -0
- package/dist/cli-legacy.d.ts.map +1 -0
- package/dist/cli-legacy.js +41 -0
- package/dist/cli-legacy.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +427 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +15 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +791 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +94 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +228 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +63 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +311 -0
- package/dist/context.js.map +1 -0
- package/dist/credentials.d.ts +27 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +85 -0
- package/dist/credentials.js.map +1 -0
- package/dist/daemon.d.ts +49 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +226 -0
- package/dist/daemon.js.map +1 -0
- package/dist/doctor.d.ts +20 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +197 -0
- package/dist/doctor.js.map +1 -0
- package/dist/frontmatter.d.ts +59 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +170 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +357 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +88 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +105 -0
- package/dist/ingest.js.map +1 -0
- package/dist/link-discovery.d.ts +40 -0
- package/dist/link-discovery.d.ts.map +1 -0
- package/dist/link-discovery.js +122 -0
- package/dist/link-discovery.js.map +1 -0
- package/dist/link-utils.d.ts +30 -0
- package/dist/link-utils.d.ts.map +1 -0
- package/dist/link-utils.js +145 -0
- package/dist/link-utils.js.map +1 -0
- package/dist/lint.d.ts +39 -0
- package/dist/lint.d.ts.map +1 -0
- package/dist/lint.js +827 -0
- package/dist/lint.js.map +1 -0
- package/dist/maintainer.d.ts +24 -0
- package/dist/maintainer.d.ts.map +1 -0
- package/dist/maintainer.js +358 -0
- package/dist/maintainer.js.map +1 -0
- package/dist/model-resolver.d.ts +30 -0
- package/dist/model-resolver.d.ts.map +1 -0
- package/dist/model-resolver.js +71 -0
- package/dist/model-resolver.js.map +1 -0
- package/dist/paths.d.ts +20 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +33 -0
- package/dist/paths.js.map +1 -0
- package/dist/processor.d.ts +14 -0
- package/dist/processor.d.ts.map +1 -0
- package/dist/processor.js +361 -0
- package/dist/processor.js.map +1 -0
- package/dist/qmd-providers.d.ts +12 -0
- package/dist/qmd-providers.d.ts.map +1 -0
- package/dist/qmd-providers.js +45 -0
- package/dist/qmd-providers.js.map +1 -0
- package/dist/query.d.ts +69 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +120 -0
- package/dist/query.js.map +1 -0
- package/dist/raw.d.ts +57 -0
- package/dist/raw.d.ts.map +1 -0
- package/dist/raw.js +219 -0
- package/dist/raw.js.map +1 -0
- package/dist/redact.d.ts +21 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +143 -0
- package/dist/redact.js.map +1 -0
- package/dist/repair.d.ts +11 -0
- package/dist/repair.d.ts.map +1 -0
- package/dist/repair.js +41 -0
- package/dist/repair.js.map +1 -0
- package/dist/scheduler/controls.d.ts +35 -0
- package/dist/scheduler/controls.d.ts.map +1 -0
- package/dist/scheduler/controls.js +98 -0
- package/dist/scheduler/controls.js.map +1 -0
- package/dist/scheduler/index.d.ts +70 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +245 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/leases.d.ts +22 -0
- package/dist/scheduler/leases.d.ts.map +1 -0
- package/dist/scheduler/leases.js +74 -0
- package/dist/scheduler/leases.js.map +1 -0
- package/dist/scheduler/session-capture.d.ts +33 -0
- package/dist/scheduler/session-capture.d.ts.map +1 -0
- package/dist/scheduler/session-capture.js +108 -0
- package/dist/scheduler/session-capture.js.map +1 -0
- package/dist/scheduler/state.d.ts +56 -0
- package/dist/scheduler/state.d.ts.map +1 -0
- package/dist/scheduler/state.js +210 -0
- package/dist/scheduler/state.js.map +1 -0
- package/dist/scope.d.ts +54 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +161 -0
- package/dist/scope.js.map +1 -0
- package/dist/scripts/bulk-link-fix.d.ts +9 -0
- package/dist/scripts/bulk-link-fix.d.ts.map +1 -0
- package/dist/scripts/bulk-link-fix.js +106 -0
- package/dist/scripts/bulk-link-fix.js.map +1 -0
- package/dist/session-tools.d.ts +33 -0
- package/dist/session-tools.d.ts.map +1 -0
- package/dist/session-tools.js +211 -0
- package/dist/session-tools.js.map +1 -0
- package/dist/settings.d.ts +37 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +176 -0
- package/dist/settings.js.map +1 -0
- package/dist/setup.d.ts +29 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +90 -0
- package/dist/setup.js.map +1 -0
- package/dist/state.d.ts +54 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +176 -0
- package/dist/state.js.map +1 -0
- package/dist/status.d.ts +22 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +93 -0
- package/dist/status.js.map +1 -0
- package/dist/store.d.ts +71 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +282 -0
- package/dist/store.js.map +1 -0
- package/dist/summarize.d.ts +60 -0
- package/dist/summarize.d.ts.map +1 -0
- package/dist/summarize.js +266 -0
- package/dist/summarize.js.map +1 -0
- package/dist/tag-registry.d.ts +56 -0
- package/dist/tag-registry.d.ts.map +1 -0
- package/dist/tag-registry.js +146 -0
- package/dist/tag-registry.js.map +1 -0
- package/dist/templates/prompts.d.ts +51 -0
- package/dist/templates/prompts.d.ts.map +1 -0
- package/dist/templates/prompts.js +203 -0
- package/dist/templates/prompts.js.map +1 -0
- package/dist/tools.d.ts +26 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +1198 -0
- package/dist/tools.js.map +1 -0
- package/dist/watcher.d.ts +25 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +84 -0
- package/dist/watcher.js.map +1 -0
- package/dist/webui/client/dist/index.html +1885 -0
- package/dist/webui/server.d.ts +31 -0
- package/dist/webui/server.d.ts.map +1 -0
- package/dist/webui/server.js +566 -0
- package/dist/webui/server.js.map +1 -0
- package/dist/wiki-tool-guidance.d.ts +6 -0
- package/dist/wiki-tool-guidance.d.ts.map +1 -0
- package/dist/wiki-tool-guidance.js +70 -0
- package/dist/wiki-tool-guidance.js.map +1 -0
- package/dist/wiki.d.ts +108 -0
- package/dist/wiki.d.ts.map +1 -0
- package/dist/wiki.js +497 -0
- package/dist/wiki.js.map +1 -0
- package/package.json +2 -1
- package/scripts/build-assets.mjs +1 -13
- package/skills/setup/SKILL.md +1 -1
- package/src/cli.ts +0 -70
- package/src/commands.ts +78 -3
- package/src/config.ts +0 -25
- package/src/doctor.ts +21 -1
- package/src/index.ts +16 -38
- package/src/scheduler/index.ts +64 -0
- package/src/settings.ts +88 -0
- package/src/setup.ts +1 -1
- package/src/templates/prompts.ts +0 -56
- package/scripts/gepa/dataset.py +0 -192
- package/scripts/gepa/lm_providers.py +0 -472
- package/scripts/gepa/metric.py +0 -279
- package/scripts/gepa/optimize.py +0 -367
- package/scripts/gepa/program.py +0 -99
- package/scripts/gepa/pyproject.toml +0 -19
- package/scripts/gepa/run-all.sh +0 -53
- package/scripts/gepa/wiki_reader.py +0 -113
- package/src/gepa/index.ts +0 -287
- package/src/gepa/optimized/capture-prompt.txt +0 -65
package/dist/cli.js
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI for pi-para.
|
|
4
|
+
*
|
|
5
|
+
* The old pi-para-daemon commands remain as deprecated compatibility aliases.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { homedir } from "node:os";
|
|
9
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
10
|
+
import { Daemon } from "./daemon.js";
|
|
11
|
+
import { StateDB } from "./state.js";
|
|
12
|
+
import { RegistryWatcher } from "./watcher.js";
|
|
13
|
+
import { formatLegacyDaemonWarning, isLegacyDaemonCommand } from "./cli-legacy.js";
|
|
14
|
+
// -- Model setup -------------------------------------------------------------
|
|
15
|
+
// Use MiniMax via the same config as qmd-engine
|
|
16
|
+
async function createModel(modelArg) {
|
|
17
|
+
const { parse } = await import("yaml");
|
|
18
|
+
const { readFileSync } = await import("node:fs");
|
|
19
|
+
const { getModel, getProviders, getEnvApiKey } = await import("@earendil-works/pi-ai/compat");
|
|
20
|
+
// 0. Try config.json daemonModel
|
|
21
|
+
if (!modelArg) {
|
|
22
|
+
try {
|
|
23
|
+
const configPath = join(homedir(), ".pi", "wiki", "config.json");
|
|
24
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
25
|
+
const config = JSON.parse(raw);
|
|
26
|
+
if (config.daemonModel) {
|
|
27
|
+
modelArg = config.daemonModel;
|
|
28
|
+
console.log(`[daemon] Using model from config.json: ${modelArg}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// No config or no daemonModel — continue to auto-detect
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// 1. Try CLI --model arg or config daemonModel
|
|
36
|
+
if (modelArg) {
|
|
37
|
+
const [provider, ...rest] = modelArg.split("/");
|
|
38
|
+
const modelId = rest.join("/");
|
|
39
|
+
if (provider && modelId) {
|
|
40
|
+
const model = getModel(provider, modelId);
|
|
41
|
+
if (model) {
|
|
42
|
+
// Resolve API key: try AuthStorage first (OAuth), then env vars
|
|
43
|
+
let authStore = null;
|
|
44
|
+
try {
|
|
45
|
+
const { AuthStorage } = await import("@earendil-works/pi-coding-agent");
|
|
46
|
+
authStore = AuthStorage.create();
|
|
47
|
+
}
|
|
48
|
+
catch { }
|
|
49
|
+
const getApiKey = async (p) => {
|
|
50
|
+
if (authStore) {
|
|
51
|
+
const k = await authStore.getApiKey(p);
|
|
52
|
+
if (k)
|
|
53
|
+
return k;
|
|
54
|
+
}
|
|
55
|
+
return getEnvApiKey(p) ?? "";
|
|
56
|
+
};
|
|
57
|
+
console.log(`[daemon] Using pi model: ${provider}/${modelId} (context: ${model.contextWindow})`);
|
|
58
|
+
return { model, getApiKey };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// 2. Try pi's auth storage (auth.json) — supports OAuth (Anthropic, GitHub Copilot, etc.)
|
|
63
|
+
try {
|
|
64
|
+
const { AuthStorage } = await import("@earendil-works/pi-coding-agent");
|
|
65
|
+
const authStorage = AuthStorage.create();
|
|
66
|
+
const { getModels } = await import("@earendil-works/pi-ai/compat");
|
|
67
|
+
// Check providers in preference order: anthropic first (best quality)
|
|
68
|
+
const preferredProviders = ["anthropic", "openai", "openrouter", "google-antigravity", "github-copilot"];
|
|
69
|
+
for (const provider of preferredProviders) {
|
|
70
|
+
if (!authStorage.hasAuth(provider))
|
|
71
|
+
continue;
|
|
72
|
+
const key = await authStorage.getApiKey(provider);
|
|
73
|
+
if (!key)
|
|
74
|
+
continue;
|
|
75
|
+
const models = getModels(provider);
|
|
76
|
+
const sorted = [...models].sort((a, b) => (b.contextWindow ?? 0) - (a.contextWindow ?? 0));
|
|
77
|
+
const picked = sorted.find(m => !m.reasoning) ?? sorted[0];
|
|
78
|
+
if (picked) {
|
|
79
|
+
const getApiKey = async (p) => {
|
|
80
|
+
const k = await authStorage.getApiKey(p);
|
|
81
|
+
return k ?? getEnvApiKey(p) ?? "";
|
|
82
|
+
};
|
|
83
|
+
console.log(`[daemon] Using pi auth: ${provider}/${picked.id} (context: ${picked.contextWindow})`);
|
|
84
|
+
return { model: picked, getApiKey };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// AuthStorage not available — continue to env/qmd fallback
|
|
90
|
+
}
|
|
91
|
+
// 3. Try env vars
|
|
92
|
+
const providers = getProviders();
|
|
93
|
+
for (const provider of providers) {
|
|
94
|
+
const key = getEnvApiKey(provider);
|
|
95
|
+
if (key) {
|
|
96
|
+
const { getModels } = await import("@earendil-works/pi-ai/compat");
|
|
97
|
+
const models = getModels(provider);
|
|
98
|
+
const sorted = [...models].sort((a, b) => (b.contextWindow ?? 0) - (a.contextWindow ?? 0));
|
|
99
|
+
const picked = sorted.find(m => !m.reasoning) ?? sorted[0];
|
|
100
|
+
if (picked) {
|
|
101
|
+
const getApiKey = async (p) => getEnvApiKey(p) ?? "";
|
|
102
|
+
console.log(`[daemon] Using env key: ${provider}/${picked.id} (context: ${picked.contextWindow})`);
|
|
103
|
+
return { model: picked, getApiKey };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// 3. Fall back to qmd config (MiniMax, OpenRouter, etc.)
|
|
108
|
+
const configPath = join(homedir(), ".config", "qmd", "index.yml");
|
|
109
|
+
if (existsSync(configPath)) {
|
|
110
|
+
const cfg = parse(readFileSync(configPath, "utf-8"));
|
|
111
|
+
const chat = cfg?.providers?.chat;
|
|
112
|
+
if (chat?.url && chat?.key) {
|
|
113
|
+
const model = {
|
|
114
|
+
id: chat.model || "MiniMax-M2.7-highspeed",
|
|
115
|
+
name: chat.model || "MiniMax-M2.7-highspeed",
|
|
116
|
+
provider: "custom",
|
|
117
|
+
api: chat.api === "anthropic" ? "anthropic-messages" : "openai-completions",
|
|
118
|
+
baseUrl: chat.url,
|
|
119
|
+
reasoning: false,
|
|
120
|
+
input: ["text"],
|
|
121
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
122
|
+
contextWindow: 196000,
|
|
123
|
+
maxTokens: 8192,
|
|
124
|
+
};
|
|
125
|
+
const getApiKey = async (_provider) => chat.key;
|
|
126
|
+
console.log(`[daemon] Using qmd provider: ${chat.model} at ${chat.url}`);
|
|
127
|
+
return { model, getApiKey };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
console.error("Error: No LLM available. Set API keys (ANTHROPIC_API_KEY, OPENAI_API_KEY, etc.) or configure ~/.config/qmd/index.yml");
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
// -- CLI ---------------------------------------------------------------------
|
|
134
|
+
async function main() {
|
|
135
|
+
const args = process.argv.slice(2);
|
|
136
|
+
const command = args[0];
|
|
137
|
+
const wikiDir = join(homedir(), ".pi", "wiki");
|
|
138
|
+
if (isLegacyDaemonCommand(command)) {
|
|
139
|
+
console.warn(formatLegacyDaemonWarning(command));
|
|
140
|
+
console.warn("");
|
|
141
|
+
}
|
|
142
|
+
switch (command) {
|
|
143
|
+
case "setup": {
|
|
144
|
+
const dryRun = args.includes("--dry-run");
|
|
145
|
+
const localIdx = args.indexOf("--local");
|
|
146
|
+
const localPath = localIdx >= 0 ? args[localIdx + 1] : undefined;
|
|
147
|
+
const { runSetup, formatSetupResult } = await import("./setup.js");
|
|
148
|
+
const result = await runSetup({ yes: args.includes("--yes"), dryRun, localPath });
|
|
149
|
+
console.log(formatSetupResult(result));
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case "doctor": {
|
|
153
|
+
const json = args.includes("--json");
|
|
154
|
+
const { runDoctor, formatDoctorResult } = await import("./doctor.js");
|
|
155
|
+
const result = await runDoctor({
|
|
156
|
+
fix: args.includes("--fix"),
|
|
157
|
+
testCaptureModel: args.includes("--test-capture-model"),
|
|
158
|
+
});
|
|
159
|
+
console.log(json ? JSON.stringify(result, null, 2) : formatDoctorResult(result));
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case "tasks": {
|
|
163
|
+
const sub = args[1] ?? "list";
|
|
164
|
+
const { listSchedulerTasks, retryFailedSchedulerTasks, getSchedulerTask, listSchedulerHistory, formatQueueItems, formatQueueItem, formatSchedulerHistory, } = await import("./scheduler/controls.js");
|
|
165
|
+
if (sub === "retry") {
|
|
166
|
+
const taskIdx = args.indexOf("--task");
|
|
167
|
+
const taskName = taskIdx >= 0 ? args[taskIdx + 1] : undefined;
|
|
168
|
+
const count = retryFailedSchedulerTasks(wikiDir, { taskName });
|
|
169
|
+
console.log(`Requeued ${count} failed task${count === 1 ? "" : "s"}.`);
|
|
170
|
+
}
|
|
171
|
+
else if (sub === "show") {
|
|
172
|
+
const id = parseInt(args[2] ?? "", 10);
|
|
173
|
+
if (!Number.isFinite(id)) {
|
|
174
|
+
console.error("Usage: pi-para tasks show <id>");
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
console.log(formatQueueItem(getSchedulerTask(wikiDir, id)));
|
|
178
|
+
}
|
|
179
|
+
else if (sub === "history") {
|
|
180
|
+
const taskIdx = args.indexOf("--task");
|
|
181
|
+
const limitIdx = args.indexOf("--limit");
|
|
182
|
+
const taskName = taskIdx >= 0 ? args[taskIdx + 1] : undefined;
|
|
183
|
+
const limit = limitIdx >= 0 ? parseInt(args[limitIdx + 1] ?? "20", 10) : 20;
|
|
184
|
+
console.log(formatSchedulerHistory(listSchedulerHistory(wikiDir, { taskName, limit })));
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const statusIdx = args.indexOf("--status");
|
|
188
|
+
const status = statusIdx >= 0 ? args[statusIdx + 1] : undefined;
|
|
189
|
+
console.log(formatQueueItems(listSchedulerTasks(wikiDir, { status })));
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case "capture-recent": {
|
|
194
|
+
const hoursIdx = args.indexOf("--hours");
|
|
195
|
+
const hours = hoursIdx >= 0 ? parseInt(args[hoursIdx + 1] ?? "24") : 24;
|
|
196
|
+
const { queueCaptureRecent, formatQueueCaptureRecentResult } = await import("./scheduler/controls.js");
|
|
197
|
+
const result = await queueCaptureRecent({ wikiDir, hours });
|
|
198
|
+
console.log(formatQueueCaptureRecentResult(result));
|
|
199
|
+
console.log("Queued captures run when a Pi session with pi-para is open.");
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case "providers": {
|
|
203
|
+
const sub = args[1] ?? "list";
|
|
204
|
+
const { readSecretStore, setSecret, removeSecret, redactCredential } = await import("./credentials.js");
|
|
205
|
+
if (sub === "set-secret") {
|
|
206
|
+
const name = args[2];
|
|
207
|
+
const value = args[3];
|
|
208
|
+
if (!name || !value) {
|
|
209
|
+
console.error("Usage: pi-para providers set-secret <name> <value>");
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
await setSecret(name, value);
|
|
213
|
+
console.log(`Stored secret:${name}`);
|
|
214
|
+
}
|
|
215
|
+
else if (sub === "remove-secret") {
|
|
216
|
+
const name = args[2];
|
|
217
|
+
if (!name) {
|
|
218
|
+
console.error("Usage: pi-para providers remove-secret <name>");
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
await removeSecret(name);
|
|
222
|
+
console.log(`Removed secret:${name}`);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const secrets = await readSecretStore();
|
|
226
|
+
const names = Object.keys(secrets.secrets);
|
|
227
|
+
console.log("pi-para providers");
|
|
228
|
+
console.log(" Credential policy: Pi AuthStorage preferred; pi-para secrets fallback; env vars not used by setup.");
|
|
229
|
+
if (names.length === 0)
|
|
230
|
+
console.log(" No pi-para local secrets configured.");
|
|
231
|
+
for (const name of names)
|
|
232
|
+
console.log(` secret:${name} = ${redactCredential(secrets.secrets[name])}`);
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "start": {
|
|
237
|
+
const modelIdx = args.indexOf("--model");
|
|
238
|
+
const modelArg = modelIdx >= 0 ? args[modelIdx + 1] : undefined;
|
|
239
|
+
const { model, getApiKey } = await createModel(modelArg);
|
|
240
|
+
// Load web wiki config
|
|
241
|
+
let webWiki;
|
|
242
|
+
try {
|
|
243
|
+
const { readFileSync } = await import("node:fs");
|
|
244
|
+
const configPath = join(homedir(), ".pi", "wiki", "config.json");
|
|
245
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
246
|
+
const config = JSON.parse(raw);
|
|
247
|
+
if (config.webWiki?.enabled) {
|
|
248
|
+
webWiki = {
|
|
249
|
+
enabled: true,
|
|
250
|
+
host: config.webWiki.host ?? "0.0.0.0",
|
|
251
|
+
port: config.webWiki.port ?? 10973,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
// No config or parse error — skip web wiki
|
|
257
|
+
}
|
|
258
|
+
const daemon = new Daemon({ wikiDir, model: model, getApiKey, webWiki });
|
|
259
|
+
process.on("SIGINT", async () => {
|
|
260
|
+
await daemon.stop();
|
|
261
|
+
process.exit(0);
|
|
262
|
+
});
|
|
263
|
+
process.on("SIGTERM", async () => {
|
|
264
|
+
await daemon.stop();
|
|
265
|
+
process.exit(0);
|
|
266
|
+
});
|
|
267
|
+
await daemon.start();
|
|
268
|
+
// Keep process alive
|
|
269
|
+
await new Promise(() => { });
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
case "stop": {
|
|
273
|
+
const state = new StateDB(wikiDir);
|
|
274
|
+
const pid = state.getState("daemon_pid");
|
|
275
|
+
state.close();
|
|
276
|
+
if (pid) {
|
|
277
|
+
try {
|
|
278
|
+
process.kill(parseInt(pid), "SIGTERM");
|
|
279
|
+
console.log(`Sent SIGTERM to daemon (PID ${pid})`);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
console.log(`Daemon not running (PID ${pid} not found)`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
console.log("No daemon PID recorded.");
|
|
287
|
+
}
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
case "status": {
|
|
291
|
+
const json = args.includes("--json");
|
|
292
|
+
const { getPiParaStatus, formatPiParaStatus } = await import("./status.js");
|
|
293
|
+
const result = await getPiParaStatus();
|
|
294
|
+
console.log(json ? JSON.stringify(result, null, 2) : formatPiParaStatus(result));
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
case "legacy-status": {
|
|
298
|
+
const state = new StateDB(wikiDir);
|
|
299
|
+
const pid = state.getState("daemon_pid");
|
|
300
|
+
const startedAt = state.getState("daemon_started_at");
|
|
301
|
+
const history = state.getHistory(undefined, 5);
|
|
302
|
+
const failed = state.getFailed();
|
|
303
|
+
state.close();
|
|
304
|
+
let running = false;
|
|
305
|
+
if (pid) {
|
|
306
|
+
try {
|
|
307
|
+
process.kill(parseInt(pid), 0);
|
|
308
|
+
running = true;
|
|
309
|
+
}
|
|
310
|
+
catch { }
|
|
311
|
+
}
|
|
312
|
+
console.log(`Daemon: ${running ? `running (PID ${pid})` : "not running"}`);
|
|
313
|
+
if (startedAt)
|
|
314
|
+
console.log(`Started: ${startedAt}`);
|
|
315
|
+
console.log(`Failed: ${failed.length}`);
|
|
316
|
+
console.log(`\nRecent history:`);
|
|
317
|
+
for (const h of history) {
|
|
318
|
+
const status = h.error ? `ERROR: ${h.error.slice(0, 50)}` : `${h.pagesCreated.length} pages`;
|
|
319
|
+
console.log(` ${h.processedAt} | ${h.scope} | ${status}`);
|
|
320
|
+
}
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
case "process": {
|
|
324
|
+
const sessionFile = args[1];
|
|
325
|
+
if (!sessionFile) {
|
|
326
|
+
console.error("Usage: pi-para-daemon process <session_file>");
|
|
327
|
+
process.exit(1);
|
|
328
|
+
}
|
|
329
|
+
const modelIdx2 = args.indexOf("--model");
|
|
330
|
+
const modelArg2 = modelIdx2 >= 0 ? args[modelIdx2 + 1] : undefined;
|
|
331
|
+
const { model, getApiKey } = await createModel(modelArg2);
|
|
332
|
+
const daemon = new Daemon({ wikiDir, model: model, getApiKey });
|
|
333
|
+
await daemon.start();
|
|
334
|
+
await daemon.processOne(sessionFile);
|
|
335
|
+
await daemon.stop();
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
case "process-recent": {
|
|
339
|
+
const hoursIdx = args.indexOf("--hours");
|
|
340
|
+
const hours = hoursIdx >= 0 ? parseInt(args[hoursIdx + 1] ?? "24") : 24;
|
|
341
|
+
const cutoff = Date.now() - hours * 60 * 60 * 1000;
|
|
342
|
+
// Find recent sessions from registry
|
|
343
|
+
const watcher = new RegistryWatcher(wikiDir, () => { });
|
|
344
|
+
const entries = watcher.getAllEntries().filter((e) => {
|
|
345
|
+
const ts = new Date(e.timestamp).getTime();
|
|
346
|
+
return ts > cutoff;
|
|
347
|
+
});
|
|
348
|
+
const state = new StateDB(wikiDir);
|
|
349
|
+
const unprocessed = entries.filter((e) => !state.isProcessed(e.sessionPath));
|
|
350
|
+
state.close();
|
|
351
|
+
if (unprocessed.length === 0) {
|
|
352
|
+
console.log(`No unprocessed sessions in the last ${hours} hour(s).`);
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
console.log(`Found ${unprocessed.length} unprocessed session(s)`);
|
|
356
|
+
const { model, getApiKey } = await createModel();
|
|
357
|
+
const daemon = new Daemon({ wikiDir, model: model, getApiKey });
|
|
358
|
+
await daemon.start();
|
|
359
|
+
for (const entry of unprocessed) {
|
|
360
|
+
await daemon.processOne(entry.sessionPath);
|
|
361
|
+
}
|
|
362
|
+
await daemon.stop();
|
|
363
|
+
break;
|
|
364
|
+
}
|
|
365
|
+
case "retry-failed": {
|
|
366
|
+
const { model, getApiKey } = await createModel();
|
|
367
|
+
const daemon = new Daemon({ wikiDir, model: model, getApiKey });
|
|
368
|
+
await daemon.start();
|
|
369
|
+
await daemon.retryFailed();
|
|
370
|
+
await daemon.stop();
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
case "history": {
|
|
374
|
+
const scopeIdx = args.indexOf("--scope");
|
|
375
|
+
const scope = scopeIdx >= 0 ? args[scopeIdx + 1] : undefined;
|
|
376
|
+
const state = new StateDB(wikiDir);
|
|
377
|
+
const history = state.getHistory(scope, 20);
|
|
378
|
+
state.close();
|
|
379
|
+
if (history.length === 0) {
|
|
380
|
+
console.log("No processing history.");
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
for (const h of history) {
|
|
384
|
+
const status = h.error
|
|
385
|
+
? `ERROR: ${h.error.slice(0, 60)}`
|
|
386
|
+
: h.pagesCreated.length > 0
|
|
387
|
+
? `${h.pagesCreated.length} page(s): ${h.pagesCreated.join(", ")}`
|
|
388
|
+
: "skipped";
|
|
389
|
+
console.log(`${h.processedAt} | ${h.scope} | ${status}`);
|
|
390
|
+
}
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
default:
|
|
394
|
+
console.log(`pi-para — PARA wiki extension CLI
|
|
395
|
+
|
|
396
|
+
Primary commands:
|
|
397
|
+
setup Configure pi-para for this machine (--yes, --dry-run, --local PATH)
|
|
398
|
+
doctor Validate install/config/wiki/QMD health (--fix, --json, --test-capture-model)
|
|
399
|
+
tasks Show scheduler queue (--status queued|running|done|failed)
|
|
400
|
+
tasks show <id> Show one queued/running/done/failed task payload
|
|
401
|
+
tasks history Show scheduler history [--task NAME] [--limit N]
|
|
402
|
+
tasks retry Requeue failed scheduler tasks [--task NAME]
|
|
403
|
+
status Show config/wiki/scheduler status (--json)
|
|
404
|
+
capture-recent Queue recent completed sessions for capture (--hours N)
|
|
405
|
+
providers List credential refs and local secrets
|
|
406
|
+
providers set-secret <name> <value>
|
|
407
|
+
providers remove-secret <name>
|
|
408
|
+
|
|
409
|
+
Legacy compatibility commands:
|
|
410
|
+
start Deprecated daemon foreground mode
|
|
411
|
+
stop Deprecated daemon stop
|
|
412
|
+
legacy-status Legacy daemon status and recent history
|
|
413
|
+
process <file> Process a single session file
|
|
414
|
+
process-recent Process unprocessed sessions (--hours N, default 24)
|
|
415
|
+
retry-failed Retry all failed sessions
|
|
416
|
+
history Show processing history (--scope NAME to filter)
|
|
417
|
+
|
|
418
|
+
Credential policy:
|
|
419
|
+
Use Pi AuthStorage or ~/.pi/para/secrets.json. Setup does not use env vars for API keys.`);
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
main().catch((err) => {
|
|
424
|
+
console.error(err);
|
|
425
|
+
process.exit(1);
|
|
426
|
+
});
|
|
427
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slash command registrations for user interaction.
|
|
3
|
+
*
|
|
4
|
+
* Commands: /wiki, /wiki-ingest, /wiki-lint, /wiki-capture,
|
|
5
|
+
* /wiki-scope, /wiki-search, /wiki-summarize,
|
|
6
|
+
* /wiki-scheduler, /wiki-daemon compatibility alias, /wiki-settings
|
|
7
|
+
*/
|
|
8
|
+
import type { QMDStore } from "qmd-engine";
|
|
9
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
10
|
+
import type { ProjectScope } from "./scope.js";
|
|
11
|
+
/**
|
|
12
|
+
* Register all slash commands with the pi extension API.
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerCommands(pi: ExtensionAPI, wikiDir: string, store: QMDStore, getScope: () => ProjectScope, setScope: (scope: ProjectScope) => void): void;
|
|
15
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsJ/C;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACtC,IAAI,CAmuBN"}
|