pi-para 0.5.2 → 0.5.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/ARCHITECTURE.md +160 -0
- package/CHANGELOG.md +29 -0
- package/CONFIGURATION.md +243 -0
- package/README.md +140 -237
- package/SETUP.md +196 -112
- package/STRUCTURE.md +140 -0
- 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 +4 -4
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +1 -1
- package/dist/capture.js.map +1 -1
- 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 +2 -9
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +135 -29
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +3 -3
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +189 -256
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +104 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +242 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +4 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -7
- package/dist/context.js.map +1 -1
- 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 +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/doctor.d.ts +20 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +171 -0
- package/dist/doctor.js.map +1 -0
- package/dist/gepa/index.js +1 -1
- package/dist/gepa/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +102 -37
- package/dist/index.js.map +1 -1
- package/dist/maintainer.d.ts +2 -2
- package/dist/maintainer.d.ts.map +1 -1
- package/dist/maintainer.js +2 -2
- package/dist/maintainer.js.map +1 -1
- 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 +2 -2
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +2 -2
- package/dist/processor.js.map +1 -1
- 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 +1 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +14 -1
- package/dist/query.js.map +1 -1
- 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 +48 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +193 -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/session-tools.d.ts +1 -1
- package/dist/session-tools.d.ts.map +1 -1
- package/dist/settings.d.ts +19 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +106 -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/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 +23 -8
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +89 -34
- package/dist/store.js.map +1 -1
- package/dist/summarize.d.ts +6 -2
- package/dist/summarize.d.ts.map +1 -1
- package/dist/summarize.js +60 -25
- package/dist/summarize.js.map +1 -1
- package/dist/templates/prompts.d.ts +1 -1
- package/dist/templates/prompts.d.ts.map +1 -1
- package/dist/templates/prompts.js +1 -1
- package/dist/tools.d.ts +5 -5
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +243 -78
- package/dist/tools.js.map +1 -1
- 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 +6 -1
- package/dist/wiki.d.ts.map +1 -1
- package/dist/wiki.js +88 -19
- package/dist/wiki.js.map +1 -1
- package/package.json +80 -15
- package/scripts/install.ps1 +44 -0
- package/scripts/install.sh +62 -0
- package/scripts/smoke-install.mjs +61 -0
- package/skills/para/SKILL.md +1 -1
- package/skills/setup/SKILL.md +1 -1
- package/src/atomic-write.ts +17 -0
- package/src/capture.ts +4 -4
- package/src/cli-legacy.ts +43 -0
- package/src/cli.ts +133 -28
- package/src/commands.ts +203 -243
- package/src/config.ts +355 -0
- package/src/context.ts +29 -14
- package/src/credentials.ts +100 -0
- package/src/daemon.ts +1 -1
- package/src/doctor.ts +204 -0
- package/src/gepa/index.ts +1 -1
- package/src/index.ts +119 -40
- package/src/maintainer.ts +4 -4
- package/src/model-resolver.ts +96 -0
- package/src/paths.ts +48 -0
- package/src/processor.ts +4 -4
- package/src/qmd-providers.ts +63 -0
- package/src/query.ts +15 -1
- package/src/repair.ts +49 -0
- package/src/scheduler/controls.ts +125 -0
- package/src/scheduler/index.ts +210 -0
- package/src/scheduler/leases.ts +98 -0
- package/src/scheduler/session-capture.ts +146 -0
- package/src/scheduler/state.ts +304 -0
- package/src/session-tools.ts +1 -1
- package/src/settings.ts +126 -0
- package/src/setup.ts +116 -0
- package/src/status.ts +115 -0
- package/src/store.ts +116 -31
- package/src/summarize.ts +72 -16
- package/src/templates/prompts.ts +1 -1
- package/src/tools.ts +280 -90
- package/src/wiki-tool-guidance.ts +84 -0
- package/src/wiki.ts +98 -26
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { mkdirSync } from "node:fs";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { getParaPaths } from "../paths.js";
|
|
5
|
+
import { ensureLeaseSchema } from "./leases.js";
|
|
6
|
+
export class SchedulerStateDB {
|
|
7
|
+
db;
|
|
8
|
+
constructor(dbPath = getParaPaths().schedulerDbPath) {
|
|
9
|
+
mkdirSync(dirname(dbPath), { recursive: true });
|
|
10
|
+
this.db = new Database(dbPath);
|
|
11
|
+
this.db.pragma("journal_mode = WAL");
|
|
12
|
+
this.migrate();
|
|
13
|
+
}
|
|
14
|
+
migrate() {
|
|
15
|
+
ensureLeaseSchema(this.db);
|
|
16
|
+
this.db.exec(`
|
|
17
|
+
CREATE TABLE IF NOT EXISTS scheduler_tasks (
|
|
18
|
+
task_key TEXT PRIMARY KEY,
|
|
19
|
+
task_name TEXT NOT NULL,
|
|
20
|
+
scope TEXT,
|
|
21
|
+
schedule TEXT,
|
|
22
|
+
next_due_at TEXT,
|
|
23
|
+
last_run_at TEXT,
|
|
24
|
+
last_status TEXT,
|
|
25
|
+
retry_count INTEGER NOT NULL DEFAULT 0,
|
|
26
|
+
updated_at TEXT NOT NULL
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS scheduler_queue (
|
|
30
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
31
|
+
task_name TEXT NOT NULL,
|
|
32
|
+
payload_json TEXT NOT NULL,
|
|
33
|
+
priority INTEGER NOT NULL DEFAULT 0,
|
|
34
|
+
available_at TEXT NOT NULL,
|
|
35
|
+
dedupe_key TEXT,
|
|
36
|
+
status TEXT NOT NULL DEFAULT 'queued',
|
|
37
|
+
attempts INTEGER NOT NULL DEFAULT 0,
|
|
38
|
+
created_at TEXT NOT NULL,
|
|
39
|
+
updated_at TEXT NOT NULL
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
CREATE UNIQUE INDEX IF NOT EXISTS scheduler_queue_dedupe
|
|
43
|
+
ON scheduler_queue(dedupe_key)
|
|
44
|
+
WHERE dedupe_key IS NOT NULL AND status IN ('queued', 'running');
|
|
45
|
+
|
|
46
|
+
CREATE TABLE IF NOT EXISTS scheduler_history (
|
|
47
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
48
|
+
task_name TEXT NOT NULL,
|
|
49
|
+
payload_json TEXT,
|
|
50
|
+
status TEXT NOT NULL,
|
|
51
|
+
started_at TEXT NOT NULL,
|
|
52
|
+
finished_at TEXT,
|
|
53
|
+
duration_ms INTEGER,
|
|
54
|
+
error TEXT
|
|
55
|
+
);
|
|
56
|
+
`);
|
|
57
|
+
}
|
|
58
|
+
enqueue(taskName, payload, opts = {}) {
|
|
59
|
+
const now = opts.now ?? new Date();
|
|
60
|
+
const availableAt = opts.availableAt ?? now;
|
|
61
|
+
const payloadJson = JSON.stringify(payload ?? {});
|
|
62
|
+
const existing = opts.dedupeKey ? this.getQueuedByDedupe(opts.dedupeKey) : null;
|
|
63
|
+
if (existing)
|
|
64
|
+
return existing.id;
|
|
65
|
+
const result = this.db.prepare(`
|
|
66
|
+
INSERT INTO scheduler_queue
|
|
67
|
+
(task_name, payload_json, priority, available_at, dedupe_key, status, attempts, created_at, updated_at)
|
|
68
|
+
VALUES (?, ?, ?, ?, ?, 'queued', 0, ?, ?)
|
|
69
|
+
`).run(taskName, payloadJson, opts.priority ?? 0, availableAt.toISOString(), opts.dedupeKey ?? null, now.toISOString(), now.toISOString());
|
|
70
|
+
return Number(result.lastInsertRowid);
|
|
71
|
+
}
|
|
72
|
+
claimNext(now = new Date()) {
|
|
73
|
+
this.db.exec("BEGIN IMMEDIATE");
|
|
74
|
+
try {
|
|
75
|
+
const row = this.db.prepare(`
|
|
76
|
+
SELECT * FROM scheduler_queue
|
|
77
|
+
WHERE status = 'queued' AND available_at <= ?
|
|
78
|
+
ORDER BY priority DESC, id ASC
|
|
79
|
+
LIMIT 1
|
|
80
|
+
`).get(now.toISOString());
|
|
81
|
+
if (!row) {
|
|
82
|
+
this.db.exec("COMMIT");
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
this.db.prepare(`
|
|
86
|
+
UPDATE scheduler_queue
|
|
87
|
+
SET status = 'running', attempts = attempts + 1, updated_at = ?
|
|
88
|
+
WHERE id = ?
|
|
89
|
+
`).run(now.toISOString(), row.id);
|
|
90
|
+
this.db.exec("COMMIT");
|
|
91
|
+
return rowToItem({ ...row, status: "running", attempts: row.attempts + 1, updated_at: now.toISOString() });
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
try {
|
|
95
|
+
this.db.exec("ROLLBACK");
|
|
96
|
+
}
|
|
97
|
+
catch { }
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
complete(id, now = new Date()) {
|
|
102
|
+
this.db.prepare("UPDATE scheduler_queue SET status = 'done', updated_at = ? WHERE id = ?").run(now.toISOString(), id);
|
|
103
|
+
}
|
|
104
|
+
fail(id, error, opts = {}) {
|
|
105
|
+
const now = opts.now ?? new Date();
|
|
106
|
+
const row = this.get(id);
|
|
107
|
+
if (!row)
|
|
108
|
+
return;
|
|
109
|
+
const maxAttempts = opts.maxAttempts ?? 3;
|
|
110
|
+
if (row.attempts < maxAttempts && opts.retryAt) {
|
|
111
|
+
this.db.prepare(`
|
|
112
|
+
UPDATE scheduler_queue
|
|
113
|
+
SET status = 'queued', available_at = ?, updated_at = ?
|
|
114
|
+
WHERE id = ?
|
|
115
|
+
`).run(opts.retryAt.toISOString(), now.toISOString(), id);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.db.prepare("UPDATE scheduler_queue SET status = 'failed', updated_at = ? WHERE id = ?").run(now.toISOString(), id);
|
|
119
|
+
}
|
|
120
|
+
this.recordHistory(row.taskName, row.payload, "failed", now, now, 0, error);
|
|
121
|
+
}
|
|
122
|
+
get(id) {
|
|
123
|
+
const row = this.db.prepare("SELECT * FROM scheduler_queue WHERE id = ?").get(id);
|
|
124
|
+
return row ? rowToItem(row) : null;
|
|
125
|
+
}
|
|
126
|
+
list(status) {
|
|
127
|
+
const rows = status
|
|
128
|
+
? this.db.prepare("SELECT * FROM scheduler_queue WHERE status = ? ORDER BY id ASC").all(status)
|
|
129
|
+
: this.db.prepare("SELECT * FROM scheduler_queue ORDER BY id ASC").all();
|
|
130
|
+
return rows.map(rowToItem);
|
|
131
|
+
}
|
|
132
|
+
requeueRunning(now = new Date()) {
|
|
133
|
+
const result = this.db.prepare(`
|
|
134
|
+
UPDATE scheduler_queue
|
|
135
|
+
SET status = 'queued', available_at = ?, updated_at = ?
|
|
136
|
+
WHERE status = 'running'
|
|
137
|
+
`).run(now.toISOString(), now.toISOString());
|
|
138
|
+
return result.changes;
|
|
139
|
+
}
|
|
140
|
+
retryFailed(taskName, now = new Date()) {
|
|
141
|
+
const result = taskName
|
|
142
|
+
? this.db.prepare(`
|
|
143
|
+
UPDATE scheduler_queue
|
|
144
|
+
SET status = 'queued', available_at = ?, updated_at = ?
|
|
145
|
+
WHERE status = 'failed' AND task_name = ?
|
|
146
|
+
`).run(now.toISOString(), now.toISOString(), taskName)
|
|
147
|
+
: this.db.prepare(`
|
|
148
|
+
UPDATE scheduler_queue
|
|
149
|
+
SET status = 'queued', available_at = ?, updated_at = ?
|
|
150
|
+
WHERE status = 'failed'
|
|
151
|
+
`).run(now.toISOString(), now.toISOString());
|
|
152
|
+
return result.changes;
|
|
153
|
+
}
|
|
154
|
+
listHistory(opts = {}) {
|
|
155
|
+
const limit = opts.limit ?? 20;
|
|
156
|
+
const rows = opts.taskName
|
|
157
|
+
? this.db.prepare("SELECT * FROM scheduler_history WHERE task_name = ? ORDER BY id DESC LIMIT ?").all(opts.taskName, limit)
|
|
158
|
+
: this.db.prepare("SELECT * FROM scheduler_history ORDER BY id DESC LIMIT ?").all(limit);
|
|
159
|
+
return rows.map(rowToHistoryItem);
|
|
160
|
+
}
|
|
161
|
+
getHistoryItem(id) {
|
|
162
|
+
const row = this.db.prepare("SELECT * FROM scheduler_history WHERE id = ?").get(id);
|
|
163
|
+
return row ? rowToHistoryItem(row) : null;
|
|
164
|
+
}
|
|
165
|
+
recordHistory(taskName, payload, status, startedAt, finishedAt, durationMs, error) {
|
|
166
|
+
this.db.prepare(`
|
|
167
|
+
INSERT INTO scheduler_history
|
|
168
|
+
(task_name, payload_json, status, started_at, finished_at, duration_ms, error)
|
|
169
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
170
|
+
`).run(taskName, JSON.stringify(payload ?? {}), status, startedAt.toISOString(), finishedAt?.toISOString() ?? null, durationMs, error);
|
|
171
|
+
}
|
|
172
|
+
close() {
|
|
173
|
+
this.db.close();
|
|
174
|
+
}
|
|
175
|
+
getQueuedByDedupe(dedupeKey) {
|
|
176
|
+
const row = this.db.prepare(`
|
|
177
|
+
SELECT * FROM scheduler_queue
|
|
178
|
+
WHERE dedupe_key = ? AND status IN ('queued', 'running')
|
|
179
|
+
ORDER BY id ASC LIMIT 1
|
|
180
|
+
`).get(dedupeKey);
|
|
181
|
+
return row ? rowToItem(row) : null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function rowToItem(row) {
|
|
185
|
+
return {
|
|
186
|
+
id: row.id,
|
|
187
|
+
taskName: row.task_name,
|
|
188
|
+
payload: JSON.parse(row.payload_json),
|
|
189
|
+
priority: row.priority,
|
|
190
|
+
availableAt: row.available_at,
|
|
191
|
+
dedupeKey: row.dedupe_key,
|
|
192
|
+
status: row.status,
|
|
193
|
+
attempts: row.attempts,
|
|
194
|
+
createdAt: row.created_at,
|
|
195
|
+
updatedAt: row.updated_at,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function rowToHistoryItem(row) {
|
|
199
|
+
return {
|
|
200
|
+
id: row.id,
|
|
201
|
+
taskName: row.task_name,
|
|
202
|
+
payload: row.payload_json ? JSON.parse(row.payload_json) : null,
|
|
203
|
+
status: row.status,
|
|
204
|
+
startedAt: row.started_at,
|
|
205
|
+
finishedAt: row.finished_at,
|
|
206
|
+
durationMs: row.duration_ms,
|
|
207
|
+
error: row.error,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/scheduler/state.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAmChD,MAAM,OAAO,gBAAgB;IAClB,EAAE,CAAoB;IAE/B,YAAY,MAAM,GAAG,YAAY,EAAE,CAAC,eAAe;QACjD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,OAAO;QACL,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwCZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,QAAgB,EAAE,OAAgB,EAAE,OAAuB,EAAE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,EAAE,CAAC;QAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI9B,CAAC,CAAC,GAAG,CACJ,QAAQ,EACR,WAAW,EACX,IAAI,CAAC,QAAQ,IAAI,CAAC,EAClB,WAAW,CAAC,WAAW,EAAE,EACzB,IAAI,CAAC,SAAS,IAAI,IAAI,EACtB,GAAG,CAAC,WAAW,EAAE,EACjB,GAAG,CAAC,WAAW,EAAE,CAClB,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;QACxB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAK3B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAyB,CAAC;YAElD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAIf,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC7G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC1C,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,EAAU,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IACxH,CAAC;IAED,IAAI,CAAC,EAAU,EAAE,KAAa,EAAE,OAA6D,EAAE;QAC7F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAIf,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1H,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,EAAE,CAAyB,CAAC;QAC1G,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,MAAoB;QACvB,MAAM,IAAI,GAAG,MAAM;YACjB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAe;YAC7G,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAgB,CAAC;QACzF,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI9B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,QAAiB,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAIjB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAIjB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,OAA8C,EAAE;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;YACxB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,8EAA8E,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAiB;YAC3I,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC,GAAG,CAAC,KAAK,CAAiB,CAAC;QAC3G,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,cAAc,CAAC,EAAU;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,CAAC,EAAE,CAA2B,CAAC;QAC9G,OAAO,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED,aAAa,CACX,QAAgB,EAChB,OAAgB,EAChB,MAAc,EACd,SAAe,EACf,UAAuB,EACvB,UAAyB,EACzB,KAAoB;QAEpB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAIf,CAAC,CAAC,GAAG,CACJ,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,EAC7B,MAAM,EACN,SAAS,CAAC,WAAW,EAAE,EACvB,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI,EACjC,UAAU,EACV,KAAK,CACN,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAEO,iBAAiB,CAAC,SAAiB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI3B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAyB,CAAC;QAC1C,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;CACF;AA0BD,SAAS,SAAS,CAAC,GAAa;IAC9B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAY;QAChD,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAe;IACvC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAY,CAAC,CAAC,CAAC,IAAI;QAC1E,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC"}
|
package/dist/session-tools.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* without loading the entire thing into the prompt — the TypeScript
|
|
6
6
|
* equivalent of RLM's REPL-based exploration.
|
|
7
7
|
*/
|
|
8
|
-
import type { AgentTool } from "@
|
|
8
|
+
import type { AgentTool } from "@earendil-works/pi-agent-core";
|
|
9
9
|
interface SessionMessage {
|
|
10
10
|
role: string;
|
|
11
11
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-tools.d.ts","sourceRoot":"","sources":["../src/session-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,
|
|
1
|
+
{"version":3,"file":"session-tools.d.ts","sourceRoot":"","sources":["../src/session-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,+BAA+B,CAAC;AAIhF,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAyF9D;AAgBD,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,CAqHtE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ParaUserConfig, ProviderCredentialRef } from "./config.js";
|
|
2
|
+
export declare function modelSelectionLabel(selection: ParaUserConfig["models"]["capture"]): string;
|
|
3
|
+
export declare function providerProfileLabel(profile: ProviderCredentialRef | null | undefined): string;
|
|
4
|
+
export declare function setContextMaxTokens(config: ParaUserConfig, value: string): number;
|
|
5
|
+
export declare function setSearchLimit(config: ParaUserConfig, value: string): number;
|
|
6
|
+
export declare function setLintStaleDays(config: ParaUserConfig, value: string): number;
|
|
7
|
+
export declare function toggleSearchGraphBoost(config: ParaUserConfig): boolean;
|
|
8
|
+
export declare function toggleLintAutoFix(config: ParaUserConfig): boolean;
|
|
9
|
+
export declare function setCaptureModelAuto(config: ParaUserConfig): void;
|
|
10
|
+
export declare function setCaptureModel(config: ParaUserConfig, provider: string, model: string): ProviderCredentialRef;
|
|
11
|
+
export declare function setWebWikiEnabled(config: ParaUserConfig, enabled: boolean): void;
|
|
12
|
+
export declare function setWebWikiHost(config: ParaUserConfig, host: string): void;
|
|
13
|
+
export declare function setWebWikiPort(config: ParaUserConfig, value: string): number;
|
|
14
|
+
export declare function setProviderProfileField(profile: ProviderCredentialRef, field: "provider" | "baseUrl" | "model" | "apiFormat" | "credentialRef", value: string): void;
|
|
15
|
+
export declare function setProviderDims(profile: ProviderCredentialRef, value: string): number;
|
|
16
|
+
export declare function ensureEmbeddingProfile(config: ParaUserConfig): ProviderCredentialRef;
|
|
17
|
+
export declare function ensureRerankProfile(config: ParaUserConfig): ProviderCredentialRef;
|
|
18
|
+
export declare function disableRerank(config: ParaUserConfig): void;
|
|
19
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAG1F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAK9F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI9E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAGtE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAGjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAEhE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAQ9G;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAEhF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,EACvE,KAAK,EAAE,MAAM,GACZ,IAAI,CAgBN;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAQpF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAQjF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAE1D"}
|
package/dist/settings.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
export function modelSelectionLabel(selection) {
|
|
2
|
+
if (selection === "auto")
|
|
3
|
+
return "auto";
|
|
4
|
+
return `${selection.provider}/${selection.model ?? "auto"} via ${selection.credentialRef}`;
|
|
5
|
+
}
|
|
6
|
+
export function providerProfileLabel(profile) {
|
|
7
|
+
if (!profile)
|
|
8
|
+
return "not configured";
|
|
9
|
+
const model = profile.model ?? "model not set";
|
|
10
|
+
const location = profile.baseUrl ? ` at ${profile.baseUrl}` : "";
|
|
11
|
+
return `${profile.provider}/${model}${location} via ${profile.credentialRef}`;
|
|
12
|
+
}
|
|
13
|
+
export function setContextMaxTokens(config, value) {
|
|
14
|
+
const parsed = parsePositiveInteger(value, config.context.maxTokens);
|
|
15
|
+
config.context.maxTokens = parsed;
|
|
16
|
+
return parsed;
|
|
17
|
+
}
|
|
18
|
+
export function setSearchLimit(config, value) {
|
|
19
|
+
const parsed = parsePositiveInteger(value, config.context.searchLimit);
|
|
20
|
+
config.context.searchLimit = parsed;
|
|
21
|
+
return parsed;
|
|
22
|
+
}
|
|
23
|
+
export function setLintStaleDays(config, value) {
|
|
24
|
+
const parsed = parsePositiveInteger(value, config.lint.staleDays);
|
|
25
|
+
config.lint.staleDays = parsed;
|
|
26
|
+
return parsed;
|
|
27
|
+
}
|
|
28
|
+
export function toggleSearchGraphBoost(config) {
|
|
29
|
+
config.context.searchGraphBoost = !config.context.searchGraphBoost;
|
|
30
|
+
return config.context.searchGraphBoost;
|
|
31
|
+
}
|
|
32
|
+
export function toggleLintAutoFix(config) {
|
|
33
|
+
config.lint.autoFix = !config.lint.autoFix;
|
|
34
|
+
return config.lint.autoFix;
|
|
35
|
+
}
|
|
36
|
+
export function setCaptureModelAuto(config) {
|
|
37
|
+
config.models.capture = "auto";
|
|
38
|
+
}
|
|
39
|
+
export function setCaptureModel(config, provider, model) {
|
|
40
|
+
const profile = {
|
|
41
|
+
provider,
|
|
42
|
+
model,
|
|
43
|
+
credentialRef: `pi-auth:${provider}`,
|
|
44
|
+
};
|
|
45
|
+
config.models.capture = profile;
|
|
46
|
+
return profile;
|
|
47
|
+
}
|
|
48
|
+
export function setWebWikiEnabled(config, enabled) {
|
|
49
|
+
config.webWiki.enabled = enabled;
|
|
50
|
+
}
|
|
51
|
+
export function setWebWikiHost(config, host) {
|
|
52
|
+
config.webWiki.host = host.trim() || config.webWiki.host;
|
|
53
|
+
}
|
|
54
|
+
export function setWebWikiPort(config, value) {
|
|
55
|
+
const parsed = parsePositiveInteger(value, config.webWiki.port);
|
|
56
|
+
config.webWiki.port = parsed;
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
export function setProviderProfileField(profile, field, value) {
|
|
60
|
+
if (field === "apiFormat") {
|
|
61
|
+
if (value !== "openai" && value !== "anthropic" && value !== "custom") {
|
|
62
|
+
throw new Error("apiFormat must be openai, anthropic, or custom");
|
|
63
|
+
}
|
|
64
|
+
profile.apiFormat = value;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (field === "credentialRef") {
|
|
68
|
+
if (value !== "none" && !value.startsWith("pi-auth:") && !value.startsWith("secret:")) {
|
|
69
|
+
throw new Error("credentialRef must be pi-auth:<provider>, secret:<name>, or none");
|
|
70
|
+
}
|
|
71
|
+
profile.credentialRef = value;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
profile[field] = value;
|
|
75
|
+
}
|
|
76
|
+
export function setProviderDims(profile, value) {
|
|
77
|
+
const parsed = parsePositiveInteger(value, profile.dims ?? 0);
|
|
78
|
+
profile.dims = parsed;
|
|
79
|
+
return parsed;
|
|
80
|
+
}
|
|
81
|
+
export function ensureEmbeddingProfile(config) {
|
|
82
|
+
config.qmd.embedding ??= {
|
|
83
|
+
provider: "openai",
|
|
84
|
+
model: "text-embedding-3-small",
|
|
85
|
+
apiFormat: "openai",
|
|
86
|
+
credentialRef: "secret:embedding",
|
|
87
|
+
};
|
|
88
|
+
return config.qmd.embedding;
|
|
89
|
+
}
|
|
90
|
+
export function ensureRerankProfile(config) {
|
|
91
|
+
config.qmd.rerank ??= {
|
|
92
|
+
provider: "jina",
|
|
93
|
+
model: "jina-reranker-v2-base-multilingual",
|
|
94
|
+
apiFormat: "openai",
|
|
95
|
+
credentialRef: "secret:rerank",
|
|
96
|
+
};
|
|
97
|
+
return config.qmd.rerank;
|
|
98
|
+
}
|
|
99
|
+
export function disableRerank(config) {
|
|
100
|
+
config.qmd.rerank = null;
|
|
101
|
+
}
|
|
102
|
+
function parsePositiveInteger(value, fallback) {
|
|
103
|
+
const parsed = parseInt(value, 10);
|
|
104
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type LoadedParaConfig } from "./config.js";
|
|
2
|
+
export interface SetupOptions {
|
|
3
|
+
homeDir?: string;
|
|
4
|
+
yes?: boolean;
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
localPath?: string;
|
|
7
|
+
validateQmd?: boolean;
|
|
8
|
+
initWiki?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface SetupResult {
|
|
11
|
+
dryRun: boolean;
|
|
12
|
+
extensionRef: string;
|
|
13
|
+
configPath: string;
|
|
14
|
+
wikiDir: string;
|
|
15
|
+
changes: string[];
|
|
16
|
+
warnings: string[];
|
|
17
|
+
migratedFromLegacy: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function runSetup(options?: SetupOptions): Promise<SetupResult>;
|
|
20
|
+
export declare function formatSetupResult(result: SetupResult): string;
|
|
21
|
+
export declare function resolveExtensionRef(localPath?: string): string;
|
|
22
|
+
export declare function ensurePiExtensionRegistration(settingsPath: string, extensionRef: string, opts?: {
|
|
23
|
+
dryRun?: boolean;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
changed: boolean;
|
|
26
|
+
packages: string[];
|
|
27
|
+
}>;
|
|
28
|
+
export declare function summarizeSetupConfig(loaded: LoadedParaConfig): string;
|
|
29
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpE,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CA+C/E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAM7D;AAED,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAYnD;AAOD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAErE"}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { mkdir } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { atomicWriteFile } from "./atomic-write.js";
|
|
5
|
+
import { loadParaConfig } from "./config.js";
|
|
6
|
+
import { getParaPaths, resolvePath } from "./paths.js";
|
|
7
|
+
import { initWiki } from "./wiki.js";
|
|
8
|
+
import { openStore, closeStore } from "./store.js";
|
|
9
|
+
export async function runSetup(options = {}) {
|
|
10
|
+
const loaded = await loadParaConfig({ homeDir: options.homeDir, migrate: true });
|
|
11
|
+
const paths = getParaPaths({ homeDir: options.homeDir, wikiDir: loaded.config.wiki.dir });
|
|
12
|
+
const extensionRef = resolveExtensionRef(options.localPath);
|
|
13
|
+
const changes = [];
|
|
14
|
+
const warnings = [];
|
|
15
|
+
if (loaded.migratedFromLegacy) {
|
|
16
|
+
changes.push(`migrated legacy config to ${paths.userConfigPath}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
changes.push(`config ready at ${paths.userConfigPath}`);
|
|
20
|
+
}
|
|
21
|
+
if (options.initWiki !== false) {
|
|
22
|
+
if (!options.dryRun)
|
|
23
|
+
await initWiki(paths.wikiDir);
|
|
24
|
+
changes.push(`initialized wiki at ${paths.wikiDir}`);
|
|
25
|
+
}
|
|
26
|
+
const registration = await ensurePiExtensionRegistration(paths.piSettingsPath, extensionRef, {
|
|
27
|
+
dryRun: options.dryRun ?? false,
|
|
28
|
+
});
|
|
29
|
+
changes.push(registration.changed ? `registered extension ${extensionRef}` : `extension already registered: ${extensionRef}`);
|
|
30
|
+
if (options.validateQmd !== false) {
|
|
31
|
+
try {
|
|
32
|
+
if (!options.dryRun) {
|
|
33
|
+
const store = await openStore(paths.wikiDir, {
|
|
34
|
+
paraConfig: { ...loaded.config, qmd: { ...loaded.config.qmd, embedEnabled: false } },
|
|
35
|
+
secretsPath: paths.secretsPath,
|
|
36
|
+
});
|
|
37
|
+
await closeStore(store);
|
|
38
|
+
}
|
|
39
|
+
changes.push("validated QMD SDK store");
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
warnings.push(`QMD SDK validation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
dryRun: options.dryRun ?? false,
|
|
47
|
+
extensionRef,
|
|
48
|
+
configPath: paths.userConfigPath,
|
|
49
|
+
wikiDir: paths.wikiDir,
|
|
50
|
+
changes,
|
|
51
|
+
warnings,
|
|
52
|
+
migratedFromLegacy: loaded.migratedFromLegacy,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function formatSetupResult(result) {
|
|
56
|
+
const lines = [`pi-para setup ${result.dryRun ? "dry run " : ""}complete.`];
|
|
57
|
+
for (const change of result.changes)
|
|
58
|
+
lines.push(` ✓ ${change}`);
|
|
59
|
+
for (const warning of result.warnings)
|
|
60
|
+
lines.push(` ⚠ ${warning}`);
|
|
61
|
+
lines.push("", "Next: restart open Pi sessions, then run /wiki or pi-para doctor.");
|
|
62
|
+
return lines.join("\n");
|
|
63
|
+
}
|
|
64
|
+
export function resolveExtensionRef(localPath) {
|
|
65
|
+
if (!localPath)
|
|
66
|
+
return "npm:pi-para";
|
|
67
|
+
return resolvePath(localPath, process.cwd());
|
|
68
|
+
}
|
|
69
|
+
export async function ensurePiExtensionRegistration(settingsPath, extensionRef, opts = {}) {
|
|
70
|
+
const settings = readPiSettings(settingsPath);
|
|
71
|
+
const packages = Array.isArray(settings.packages) ? settings.packages.map(String) : [];
|
|
72
|
+
if (packages.includes(extensionRef))
|
|
73
|
+
return { changed: false, packages };
|
|
74
|
+
const nextPackages = [...packages, extensionRef];
|
|
75
|
+
settings.packages = nextPackages;
|
|
76
|
+
if (!opts.dryRun) {
|
|
77
|
+
await mkdir(dirname(settingsPath), { recursive: true });
|
|
78
|
+
await atomicWriteFile(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, 0o600);
|
|
79
|
+
}
|
|
80
|
+
return { changed: true, packages: nextPackages };
|
|
81
|
+
}
|
|
82
|
+
function readPiSettings(settingsPath) {
|
|
83
|
+
if (!existsSync(settingsPath))
|
|
84
|
+
return {};
|
|
85
|
+
return JSON.parse(readFileSync(settingsPath, "utf-8"));
|
|
86
|
+
}
|
|
87
|
+
export function summarizeSetupConfig(loaded) {
|
|
88
|
+
return `config=${loaded.sourcePath} wiki=${loaded.config.wiki.dir}`;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/status.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ParaCategory } from "./wiki.js";
|
|
2
|
+
import { type QueueStatus } from "./scheduler/state.js";
|
|
3
|
+
export interface PiParaStatusOptions {
|
|
4
|
+
homeDir?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PiParaStatusResult {
|
|
7
|
+
configPath: string;
|
|
8
|
+
wikiDir: string;
|
|
9
|
+
configSource: "canonical" | "migrated";
|
|
10
|
+
schedulerDbPath: string;
|
|
11
|
+
qmdDbPath: string;
|
|
12
|
+
pages: {
|
|
13
|
+
total: number;
|
|
14
|
+
byCategory: Record<ParaCategory, number>;
|
|
15
|
+
};
|
|
16
|
+
scheduler: Record<QueueStatus, number>;
|
|
17
|
+
qmdDbExists: boolean;
|
|
18
|
+
warnings: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare function getPiParaStatus(options?: PiParaStatusOptions): Promise<PiParaStatusResult>;
|
|
21
|
+
export declare function formatPiParaStatus(status: PiParaStatusResult): string;
|
|
22
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,WAAW,GAAG,UAAU,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID,wBAAsB,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuBpG;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAiBrE"}
|
package/dist/status.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { loadParaConfig } from "./config.js";
|
|
3
|
+
import { getParaPaths } from "./paths.js";
|
|
4
|
+
import { listPages } from "./wiki.js";
|
|
5
|
+
import { SchedulerStateDB } from "./scheduler/state.js";
|
|
6
|
+
const QUEUE_STATUSES = ["queued", "running", "done", "failed"];
|
|
7
|
+
export async function getPiParaStatus(options = {}) {
|
|
8
|
+
const loaded = await loadParaConfig({ homeDir: options.homeDir, migrate: true });
|
|
9
|
+
const paths = getParaPaths({ homeDir: options.homeDir, wikiDir: loaded.config.wiki.dir });
|
|
10
|
+
const warnings = [];
|
|
11
|
+
const pages = await getPageCounts(paths.wikiDir, warnings);
|
|
12
|
+
const scheduler = getSchedulerCounts(paths.schedulerDbPath, warnings);
|
|
13
|
+
if (!existsSync(paths.wikiDir))
|
|
14
|
+
warnings.push(`wiki directory not found: ${paths.wikiDir}`);
|
|
15
|
+
if (!existsSync(paths.schedulerDbPath))
|
|
16
|
+
warnings.push("scheduler DB not created yet; it will be initialized when Pi starts");
|
|
17
|
+
if (!existsSync(paths.qmdDbPath))
|
|
18
|
+
warnings.push("QMD DB not created yet; search index is initialized on first store open");
|
|
19
|
+
return {
|
|
20
|
+
configPath: paths.userConfigPath,
|
|
21
|
+
wikiDir: paths.wikiDir,
|
|
22
|
+
configSource: loaded.migratedFromLegacy ? "migrated" : "canonical",
|
|
23
|
+
schedulerDbPath: paths.schedulerDbPath,
|
|
24
|
+
qmdDbPath: paths.qmdDbPath,
|
|
25
|
+
pages,
|
|
26
|
+
scheduler,
|
|
27
|
+
qmdDbExists: existsSync(paths.qmdDbPath),
|
|
28
|
+
warnings,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function formatPiParaStatus(status) {
|
|
32
|
+
const lines = [
|
|
33
|
+
"pi-para status",
|
|
34
|
+
` Config: ${status.configPath} (${status.configSource})`,
|
|
35
|
+
` Wiki: ${status.wikiDir}`,
|
|
36
|
+
` Pages: ${status.pages.total} total (${formatCategoryCounts(status.pages.byCategory)})`,
|
|
37
|
+
` Scheduler: ${status.scheduler.queued} queued, ${status.scheduler.running} running, ${status.scheduler.failed} failed`,
|
|
38
|
+
` QMD SDK DB: ${status.qmdDbExists ? status.qmdDbPath : "not initialized"}`,
|
|
39
|
+
];
|
|
40
|
+
if (status.warnings.length > 0) {
|
|
41
|
+
lines.push("", "Warnings:");
|
|
42
|
+
for (const warning of status.warnings)
|
|
43
|
+
lines.push(` ⚠ ${warning}`);
|
|
44
|
+
}
|
|
45
|
+
lines.push("", "Next: use 'pi-para doctor' for diagnostics or '/wiki-scheduler status' inside Pi.");
|
|
46
|
+
return lines.join("\n");
|
|
47
|
+
}
|
|
48
|
+
async function getPageCounts(wikiDir, warnings) {
|
|
49
|
+
const byCategory = {
|
|
50
|
+
projects: 0,
|
|
51
|
+
areas: 0,
|
|
52
|
+
resources: 0,
|
|
53
|
+
archives: 0,
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
if (!existsSync(wikiDir))
|
|
57
|
+
return { total: 0, byCategory };
|
|
58
|
+
const pages = await listPages(wikiDir);
|
|
59
|
+
for (const page of pages)
|
|
60
|
+
byCategory[page.category]++;
|
|
61
|
+
return { total: pages.length, byCategory };
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
warnings.push(`could not count wiki pages: ${err instanceof Error ? err.message : String(err)}`);
|
|
65
|
+
return { total: 0, byCategory };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function getSchedulerCounts(dbPath, warnings) {
|
|
69
|
+
const counts = {
|
|
70
|
+
queued: 0,
|
|
71
|
+
running: 0,
|
|
72
|
+
done: 0,
|
|
73
|
+
failed: 0,
|
|
74
|
+
};
|
|
75
|
+
try {
|
|
76
|
+
const db = new SchedulerStateDB(dbPath);
|
|
77
|
+
try {
|
|
78
|
+
for (const status of QUEUE_STATUSES)
|
|
79
|
+
counts[status] = db.list(status).length;
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
db.close();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
warnings.push(`could not read scheduler DB: ${err instanceof Error ? err.message : String(err)}`);
|
|
87
|
+
}
|
|
88
|
+
return counts;
|
|
89
|
+
}
|
|
90
|
+
function formatCategoryCounts(counts) {
|
|
91
|
+
return `projects ${counts.projects}, areas ${counts.areas}, resources ${counts.resources}, archives ${counts.archives}`;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAqB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAoB,MAAM,sBAAsB,CAAC;AAqB1E,MAAM,cAAc,GAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA+B,EAAE;IACrE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAEtE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAC7H,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IAE3H,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,cAAc;QAChC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;QAClE,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK;QACL,SAAS;QACT,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;QACxC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,KAAK,GAAG;QACZ,gBAAgB;QAChB,aAAa,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,YAAY,GAAG;QACzD,WAAW,MAAM,CAAC,OAAO,EAAE;QAC3B,YAAY,MAAM,CAAC,KAAK,CAAC,KAAK,WAAW,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG;QACzF,gBAAgB,MAAM,CAAC,SAAS,CAAC,MAAM,YAAY,MAAM,CAAC,SAAS,CAAC,OAAO,aAAa,MAAM,CAAC,SAAS,CAAC,MAAM,SAAS;QACxH,iBAAiB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,EAAE;KAC7E,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC5B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,mFAAmF,CAAC,CAAC;IACpG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,QAAkB;IAC9D,MAAM,UAAU,GAAiC;QAC/C,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,QAAkB;IAC5D,MAAM,MAAM,GAAgC;QAC1C,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;KACV,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,KAAK,MAAM,MAAM,IAAI,cAAc;gBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAC/E,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAoC;IAChE,OAAO,YAAY,MAAM,CAAC,QAAQ,WAAW,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,SAAS,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC1H,CAAC"}
|