jouzu 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +50 -0
  2. package/dist/args.d.ts +45 -0
  3. package/dist/args.d.ts.map +1 -0
  4. package/dist/args.js +221 -0
  5. package/dist/args.js.map +1 -0
  6. package/dist/cli.js +250 -29
  7. package/dist/cli.js.map +1 -1
  8. package/dist/doctor.d.ts +36 -0
  9. package/dist/doctor.d.ts.map +1 -0
  10. package/dist/doctor.js +224 -0
  11. package/dist/doctor.js.map +1 -0
  12. package/dist/keybindings.d.ts +68 -0
  13. package/dist/keybindings.d.ts.map +1 -0
  14. package/dist/keybindings.js +460 -0
  15. package/dist/keybindings.js.map +1 -0
  16. package/dist/metadata.d.ts +21 -0
  17. package/dist/metadata.d.ts.map +1 -0
  18. package/dist/metadata.js +22 -0
  19. package/dist/metadata.js.map +1 -0
  20. package/dist/paths.d.ts +17 -0
  21. package/dist/paths.d.ts.map +1 -0
  22. package/dist/paths.js +65 -0
  23. package/dist/paths.js.map +1 -0
  24. package/dist/pi.lock.json +15 -0
  25. package/dist/presentation.d.ts +45 -0
  26. package/dist/presentation.d.ts.map +1 -0
  27. package/dist/presentation.js +202 -0
  28. package/dist/presentation.js.map +1 -0
  29. package/dist/private-fs.d.ts +12 -0
  30. package/dist/private-fs.d.ts.map +1 -0
  31. package/dist/private-fs.js +64 -0
  32. package/dist/private-fs.js.map +1 -0
  33. package/dist/profile-choice.d.ts +14 -0
  34. package/dist/profile-choice.d.ts.map +1 -0
  35. package/dist/profile-choice.js +83 -0
  36. package/dist/profile-choice.js.map +1 -0
  37. package/dist/profile-manager.d.ts +50 -0
  38. package/dist/profile-manager.d.ts.map +1 -0
  39. package/dist/profile-manager.js +364 -0
  40. package/dist/profile-manager.js.map +1 -0
  41. package/dist/profiles/core/assets/jouzu-core-skill.md +12 -0
  42. package/dist/profiles/core/assets/jouzu-review.md +1 -0
  43. package/dist/profiles/core/manifest.json +17 -0
  44. package/dist/profiles/ja/assets/APPEND_SYSTEM.md +8 -0
  45. package/dist/profiles/ja/manifest.json +13 -0
  46. package/dist/profiles.d.ts +18 -0
  47. package/dist/profiles.d.ts.map +1 -0
  48. package/dist/profiles.js +153 -0
  49. package/dist/profiles.js.map +1 -0
  50. package/dist/resume.d.ts +7 -0
  51. package/dist/resume.d.ts.map +1 -0
  52. package/dist/resume.js +23 -0
  53. package/dist/resume.js.map +1 -0
  54. package/dist/runtime.d.ts +18 -0
  55. package/dist/runtime.d.ts.map +1 -0
  56. package/dist/runtime.js +59 -0
  57. package/dist/runtime.js.map +1 -0
  58. package/dist/state-lock.d.ts +39 -0
  59. package/dist/state-lock.d.ts.map +1 -0
  60. package/dist/state-lock.js +143 -0
  61. package/dist/state-lock.js.map +1 -0
  62. package/dist/updater.d.ts +113 -0
  63. package/dist/updater.d.ts.map +1 -0
  64. package/dist/updater.js +698 -0
  65. package/dist/updater.js.map +1 -0
  66. package/package.json +7 -4
@@ -0,0 +1,460 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { closeSync, existsSync, fsyncSync, lstatSync, openSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync, } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { copyPrivateFile, ensurePrivateDirectory, validatePrivateDirectory } from "./private-fs.js";
5
+ import { acquireStateLock, STATE_LOCK_STALE_MS } from "./state-lock.js";
6
+ export const JOUZU_KEYBINDING_DEFAULTS_VERSION = 1;
7
+ export const JOUZU_KEYBINDING_DEFAULTS = Object.freeze({
8
+ "app.message.followUp": "tab",
9
+ "app.message.dequeue": "ctrl+up",
10
+ });
11
+ const STATE_FIELDS = new Set([
12
+ "schemaVersion",
13
+ "defaultsVersion",
14
+ "policy",
15
+ "transactionId",
16
+ "updatedAt",
17
+ "createdConfig",
18
+ "insertedBindings",
19
+ ]);
20
+ const INSERTED_BINDING_FIELDS = new Set(["action", "binding"]);
21
+ const EDITOR_PRIORITY_ACTIONS = new Set(["tui.editor.historyPrevious", "tui.editor.historyNext"]);
22
+ const LEGACY_ACTIONS = Object.freeze({
23
+ "app.message.followUp": "followUp",
24
+ "app.message.dequeue": "dequeue",
25
+ });
26
+ export class KeybindingConfigError extends Error {
27
+ exitCode = 5;
28
+ constructor(message) {
29
+ super(message);
30
+ this.name = "KeybindingConfigError";
31
+ }
32
+ }
33
+ export class KeybindingConflictError extends KeybindingConfigError {
34
+ plan;
35
+ constructor(plan) {
36
+ super("keybinding plan contains conflicts");
37
+ this.name = "KeybindingConflictError";
38
+ this.plan = plan;
39
+ }
40
+ }
41
+ function exactFields(value, fields) {
42
+ return Object.keys(value).every((key) => fields.has(key)) && Object.keys(value).length === fields.size;
43
+ }
44
+ function bindingIsValid(value) {
45
+ return ((typeof value === "string" && value.length > 0) ||
46
+ (Array.isArray(value) && value.every((entry) => typeof entry === "string" && entry.length > 0)));
47
+ }
48
+ function bindingKeys(value) {
49
+ return (typeof value === "string" ? [value] : value).map((key) => key.toLowerCase());
50
+ }
51
+ function bindingEquals(left, right) {
52
+ const a = bindingKeys(left);
53
+ const b = bindingKeys(right);
54
+ return a.length === b.length && a.every((key, index) => key === b[index]);
55
+ }
56
+ function configPath(paths) {
57
+ return join(paths.agentDir, "keybindings.json");
58
+ }
59
+ export function keybindingStatePath(paths) {
60
+ return join(paths.stateDir, "keybindings-state.json");
61
+ }
62
+ function lockPath(paths) {
63
+ return join(paths.stateDir, "keybindings.lock");
64
+ }
65
+ function readRegularJson(path, label) {
66
+ const metadata = lstatSync(path);
67
+ if (!metadata.isFile() || metadata.isSymbolicLink()) {
68
+ throw new KeybindingConfigError(`${label} must be a regular file`);
69
+ }
70
+ try {
71
+ return JSON.parse(readFileSync(path, "utf8"));
72
+ }
73
+ catch (error) {
74
+ throw new KeybindingConfigError(`${label} is invalid JSON: ${error instanceof Error ? error.message : error}`);
75
+ }
76
+ }
77
+ export function readKeybindingConfig(path) {
78
+ if (!existsSync(path))
79
+ return undefined;
80
+ const parsed = readRegularJson(path, "keybindings.json");
81
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
82
+ throw new KeybindingConfigError("keybindings.json must be an object");
83
+ }
84
+ const config = {};
85
+ for (const [action, binding] of Object.entries(parsed)) {
86
+ if (!bindingIsValid(binding)) {
87
+ throw new KeybindingConfigError(`keybindings.json binding for ${action} must be a key or array of keys`);
88
+ }
89
+ config[action] = binding;
90
+ }
91
+ return config;
92
+ }
93
+ export function readKeybindingState(path) {
94
+ if (!existsSync(path))
95
+ return undefined;
96
+ const parsed = readRegularJson(path, "keybinding state");
97
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
98
+ throw new KeybindingConfigError("keybinding state must be an object");
99
+ }
100
+ const value = parsed;
101
+ if (!exactFields(value, STATE_FIELDS) ||
102
+ value.schemaVersion !== 1 ||
103
+ !Number.isInteger(value.defaultsVersion) ||
104
+ Number(value.defaultsVersion) < 1 ||
105
+ (value.policy !== "applied" && value.policy !== "disabled") ||
106
+ typeof value.transactionId !== "string" ||
107
+ typeof value.updatedAt !== "string" ||
108
+ !Number.isFinite(Date.parse(value.updatedAt)) ||
109
+ typeof value.createdConfig !== "boolean" ||
110
+ !Array.isArray(value.insertedBindings)) {
111
+ throw new KeybindingConfigError("keybinding state fields are invalid");
112
+ }
113
+ const actions = new Set();
114
+ const insertedBindings = value.insertedBindings.map((entry) => {
115
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
116
+ throw new KeybindingConfigError("keybinding state inserted binding must be an object");
117
+ }
118
+ const binding = entry;
119
+ if (!exactFields(binding, INSERTED_BINDING_FIELDS) ||
120
+ typeof binding.action !== "string" ||
121
+ !bindingIsValid(binding.binding) ||
122
+ actions.has(binding.action)) {
123
+ throw new KeybindingConfigError("keybinding state inserted binding is invalid or duplicated");
124
+ }
125
+ actions.add(binding.action);
126
+ return { action: binding.action, binding: binding.binding };
127
+ });
128
+ return {
129
+ schemaVersion: 1,
130
+ defaultsVersion: Number(value.defaultsVersion),
131
+ policy: value.policy,
132
+ transactionId: value.transactionId,
133
+ updatedAt: value.updatedAt,
134
+ createdConfig: value.createdConfig,
135
+ insertedBindings,
136
+ };
137
+ }
138
+ function claimsEditorPriority(action) {
139
+ return action.startsWith("app.") || EDITOR_PRIORITY_ACTIONS.has(action);
140
+ }
141
+ function findConflict(config, targetAction, targetBinding) {
142
+ const desiredKeys = new Set(bindingKeys(targetBinding));
143
+ for (const [action, binding] of Object.entries(config)) {
144
+ if (action === targetAction || !claimsEditorPriority(action))
145
+ continue;
146
+ if (bindingKeys(binding).some((key) => desiredKeys.has(key)))
147
+ return action;
148
+ }
149
+ return undefined;
150
+ }
151
+ function observedBinding(config, action) {
152
+ return config[action] ?? (LEGACY_ACTIONS[action] ? config[LEGACY_ACTIONS[action]] : undefined);
153
+ }
154
+ function statusFor(config) {
155
+ if (!config)
156
+ return "uninitialized";
157
+ return Object.entries(JOUZU_KEYBINDING_DEFAULTS).every(([action, binding]) => {
158
+ const observed = observedBinding(config, action);
159
+ return observed !== undefined && bindingEquals(observed, binding);
160
+ })
161
+ ? "converged"
162
+ : "customized";
163
+ }
164
+ function getPortabilityWarnings(options = {}) {
165
+ const platform = options.platform ?? process.platform;
166
+ const env = options.env ?? process.env;
167
+ const warnings = [
168
+ "ctrl+up requires the terminal to report modified arrow keys; tmux users should enable extended-keys with extended-keys-format csi-u",
169
+ ];
170
+ if (platform === "darwin") {
171
+ warnings.push("macOS may reserve Control+Up for Mission Control until the system shortcut is changed");
172
+ }
173
+ if (env.TERM === "dumb")
174
+ warnings.push("TERM=dumb cannot provide reliable interactive key events");
175
+ return warnings;
176
+ }
177
+ export function planKeybindings(paths, options = {}) {
178
+ try {
179
+ validatePrivateDirectory(paths.agentDir);
180
+ validatePrivateDirectory(paths.stateDir);
181
+ }
182
+ catch (error) {
183
+ throw new KeybindingConfigError(error instanceof Error ? error.message : String(error));
184
+ }
185
+ const path = configPath(paths);
186
+ const statePath = keybindingStatePath(paths);
187
+ const config = readKeybindingConfig(path);
188
+ const state = readKeybindingState(statePath);
189
+ const actions = [];
190
+ for (const [action, binding] of Object.entries(JOUZU_KEYBINDING_DEFAULTS)) {
191
+ const observed = config ? observedBinding(config, action) : undefined;
192
+ if (observed !== undefined && !bindingEquals(observed, binding)) {
193
+ actions.push({ type: "conflict", action, binding, observed, reason: "user-binding-differs" });
194
+ continue;
195
+ }
196
+ const conflictingAction = config ? findConflict(config, action, binding) : undefined;
197
+ if (conflictingAction) {
198
+ actions.push({
199
+ type: "conflict",
200
+ action,
201
+ binding,
202
+ reason: "key-claimed-by-another-editor-action",
203
+ conflictingAction,
204
+ });
205
+ continue;
206
+ }
207
+ if (observed === undefined)
208
+ actions.push({ type: "set", action, binding, reason: config ? "missing" : "new-config" });
209
+ }
210
+ return {
211
+ schemaVersion: 1,
212
+ defaultsVersion: JOUZU_KEYBINDING_DEFAULTS_VERSION,
213
+ configPath: path,
214
+ statePath,
215
+ configExists: config !== undefined,
216
+ policy: state?.policy ?? "unset",
217
+ status: statusFor(config),
218
+ portabilityWarnings: getPortabilityWarnings(options),
219
+ actions,
220
+ };
221
+ }
222
+ function atomicWrite(path, bytes, privateRoot) {
223
+ ensurePrivateDirectory(privateRoot, dirname(path));
224
+ const temporary = join(dirname(path), `.${randomUUID()}.tmp`);
225
+ let descriptor;
226
+ try {
227
+ descriptor = openSync(temporary, "wx", 0o600);
228
+ writeFileSync(descriptor, bytes);
229
+ fsyncSync(descriptor);
230
+ closeSync(descriptor);
231
+ descriptor = undefined;
232
+ renameSync(temporary, path);
233
+ }
234
+ finally {
235
+ if (descriptor !== undefined)
236
+ closeSync(descriptor);
237
+ rmSync(temporary, { force: true });
238
+ }
239
+ }
240
+ function writeJson(path, value, privateRoot) {
241
+ atomicWrite(path, `${JSON.stringify(value, null, 2)}\n`, privateRoot);
242
+ }
243
+ function withLock(paths, operation) {
244
+ const releaseLock = acquireStateLock({
245
+ path: lockPath(paths),
246
+ staleMs: STATE_LOCK_STALE_MS,
247
+ describe: "keybinding",
248
+ onBusy: (inspection) => new KeybindingConfigError(inspection.status === "invalid"
249
+ ? "keybindings.lock is not a regular lock file"
250
+ : "another keybinding operation is in progress"),
251
+ });
252
+ try {
253
+ return operation();
254
+ }
255
+ finally {
256
+ releaseLock();
257
+ }
258
+ }
259
+ function backupConfig(paths, transactionId, source) {
260
+ const directory = join(paths.backupDir, "keybindings", transactionId);
261
+ copyPrivateFile(source, join(directory, "keybindings.json"), paths.stateDir);
262
+ return directory;
263
+ }
264
+ function makeState(options) {
265
+ return {
266
+ schemaVersion: 1,
267
+ defaultsVersion: JOUZU_KEYBINDING_DEFAULTS_VERSION,
268
+ policy: options.policy,
269
+ transactionId: options.transactionId,
270
+ updatedAt: options.now.toISOString(),
271
+ createdConfig: options.createdConfig,
272
+ insertedBindings: [...options.insertedBindings].sort((left, right) => left.action.localeCompare(right.action)),
273
+ };
274
+ }
275
+ export function applyKeybindings(paths, now = new Date()) {
276
+ const initial = planKeybindings(paths);
277
+ if (initial.actions.some((action) => action.type === "conflict"))
278
+ throw new KeybindingConflictError(initial);
279
+ return withLock(paths, () => {
280
+ const plan = planKeybindings(paths);
281
+ if (plan.actions.some((action) => action.type === "conflict"))
282
+ throw new KeybindingConflictError(plan);
283
+ const config = readKeybindingConfig(plan.configPath) ?? {};
284
+ const previousState = readKeybindingState(plan.statePath);
285
+ const setActions = plan.actions.filter((action) => action.type === "set");
286
+ if (setActions.length === 0 && previousState?.policy === "applied")
287
+ return { changed: false, plan };
288
+ const transactionId = randomUUID();
289
+ const previousBytes = existsSync(plan.configPath) ? readFileSync(plan.configPath) : undefined;
290
+ const createdConfig = previousState?.createdConfig ?? previousBytes === undefined;
291
+ let backupDir;
292
+ if (previousBytes)
293
+ backupDir = backupConfig(paths, transactionId, plan.configPath);
294
+ const inserted = new Map(previousState?.insertedBindings.map((entry) => [entry.action, entry]) ?? []);
295
+ for (const action of setActions) {
296
+ if (action.binding === undefined)
297
+ throw new KeybindingConfigError("keybinding set action is missing a binding");
298
+ config[action.action] = action.binding;
299
+ inserted.set(action.action, { action: action.action, binding: action.binding });
300
+ }
301
+ const state = makeState({
302
+ policy: "applied",
303
+ transactionId,
304
+ createdConfig,
305
+ insertedBindings: [...inserted.values()],
306
+ now,
307
+ });
308
+ try {
309
+ if (setActions.length > 0)
310
+ writeJson(plan.configPath, config, paths.agentDir);
311
+ writeJson(plan.statePath, state, paths.stateDir);
312
+ }
313
+ catch (error) {
314
+ if (setActions.length > 0) {
315
+ if (previousBytes)
316
+ atomicWrite(plan.configPath, previousBytes, paths.agentDir);
317
+ else
318
+ rmSync(plan.configPath, { force: true });
319
+ }
320
+ throw error;
321
+ }
322
+ return {
323
+ changed: setActions.length > 0 || previousState?.policy !== "applied",
324
+ plan,
325
+ transactionId,
326
+ ...(backupDir ? { backupDir } : {}),
327
+ };
328
+ });
329
+ }
330
+ export function resetKeybindings(paths, now = new Date()) {
331
+ return withLock(paths, () => {
332
+ const path = configPath(paths);
333
+ const statePath = keybindingStatePath(paths);
334
+ const config = readKeybindingConfig(path);
335
+ const state = readKeybindingState(statePath);
336
+ const actions = [];
337
+ for (const inserted of state?.insertedBindings ?? []) {
338
+ const observed = config?.[inserted.action];
339
+ if (observed === undefined)
340
+ continue;
341
+ if (!bindingEquals(observed, inserted.binding)) {
342
+ actions.push({
343
+ type: "conflict",
344
+ action: inserted.action,
345
+ binding: inserted.binding,
346
+ observed,
347
+ reason: "jouzu-seeded-binding-was-modified",
348
+ });
349
+ }
350
+ else {
351
+ actions.push({ type: "remove", action: inserted.action, binding: inserted.binding, reason: "reset-default" });
352
+ }
353
+ }
354
+ const plan = {
355
+ schemaVersion: 1,
356
+ defaultsVersion: JOUZU_KEYBINDING_DEFAULTS_VERSION,
357
+ configPath: path,
358
+ statePath,
359
+ configExists: config !== undefined,
360
+ policy: state?.policy ?? "unset",
361
+ status: statusFor(config),
362
+ portabilityWarnings: getPortabilityWarnings(),
363
+ actions,
364
+ };
365
+ if (actions.some((action) => action.type === "conflict"))
366
+ throw new KeybindingConflictError(plan);
367
+ const transactionId = randomUUID();
368
+ const previousBytes = config ? readFileSync(path) : undefined;
369
+ let backupDir;
370
+ if (previousBytes)
371
+ backupDir = backupConfig(paths, transactionId, path);
372
+ const nextConfig = { ...(config ?? {}) };
373
+ for (const action of actions)
374
+ delete nextConfig[action.action];
375
+ const disabledState = makeState({
376
+ policy: "disabled",
377
+ transactionId,
378
+ createdConfig: false,
379
+ insertedBindings: [],
380
+ now,
381
+ });
382
+ try {
383
+ if (actions.length > 0) {
384
+ if (Object.keys(nextConfig).length === 0 && state?.createdConfig)
385
+ unlinkSync(path);
386
+ else
387
+ writeJson(path, nextConfig, paths.agentDir);
388
+ }
389
+ writeJson(statePath, disabledState, paths.stateDir);
390
+ }
391
+ catch (error) {
392
+ if (previousBytes)
393
+ atomicWrite(path, previousBytes, paths.agentDir);
394
+ throw error;
395
+ }
396
+ return {
397
+ changed: actions.length > 0 || state?.policy !== "disabled",
398
+ plan,
399
+ transactionId,
400
+ ...(backupDir ? { backupDir } : {}),
401
+ };
402
+ });
403
+ }
404
+ export function ensureDefaultKeybindings(paths, env = process.env) {
405
+ if (["1", "true", "yes", "on"].includes((env.JOUZU_NO_KEYBINDING_DEFAULTS ?? "").toLowerCase())) {
406
+ return { changed: false };
407
+ }
408
+ try {
409
+ const state = readKeybindingState(keybindingStatePath(paths));
410
+ const configExists = existsSync(configPath(paths));
411
+ if (configExists)
412
+ readKeybindingConfig(configPath(paths));
413
+ if (state || configExists)
414
+ return { changed: false };
415
+ const result = applyKeybindings(paths);
416
+ return { changed: result.changed };
417
+ }
418
+ catch (error) {
419
+ return {
420
+ changed: false,
421
+ message: `Jouzu keybinding defaults were not applied: ${error instanceof Error ? error.message : error}`,
422
+ };
423
+ }
424
+ }
425
+ function formatBinding(binding) {
426
+ if (binding === undefined)
427
+ return "Pi default or unbound";
428
+ return typeof binding === "string" ? binding : binding.length > 0 ? binding.join(", ") : "unbound";
429
+ }
430
+ export function formatKeybindingPlan(plan) {
431
+ const lines = [
432
+ "Jouzu keybinding plan",
433
+ `Defaults: v${plan.defaultsVersion}`,
434
+ `Status: ${plan.status}`,
435
+ `Policy: ${plan.policy}`,
436
+ `Config: ${plan.configPath}`,
437
+ "Desired bindings:",
438
+ ];
439
+ for (const [action, binding] of Object.entries(JOUZU_KEYBINDING_DEFAULTS)) {
440
+ lines.push(`- ${action}: ${formatBinding(binding)}`);
441
+ }
442
+ if (plan.portabilityWarnings.length > 0) {
443
+ lines.push("Portability:");
444
+ for (const warning of plan.portabilityWarnings)
445
+ lines.push(`- ${warning}`);
446
+ }
447
+ lines.push(`Actions (${plan.actions.length}):`);
448
+ if (plan.actions.length === 0)
449
+ lines.push("- none");
450
+ for (const action of plan.actions) {
451
+ const detail = action.conflictingAction
452
+ ? `; conflicts with ${action.conflictingAction}`
453
+ : action.observed !== undefined
454
+ ? `; current ${formatBinding(action.observed)}`
455
+ : "";
456
+ lines.push(`- ${action.type.toUpperCase()} ${action.action} (${action.reason}${detail})`);
457
+ }
458
+ return lines.join("\n");
459
+ }
460
+ //# sourceMappingURL=keybindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../src/keybindings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface PiLock {
2
+ schemaVersion: number;
3
+ repository: string;
4
+ tag: string;
5
+ commit: string;
6
+ packages: Record<string, {
7
+ version: string;
8
+ integrity: string;
9
+ }>;
10
+ reviewedAt: string | null;
11
+ compatibilityStatus: string;
12
+ deviations: unknown[];
13
+ }
14
+ export interface JouzuMetadata {
15
+ jouzuVersion: string;
16
+ piVersion: string;
17
+ profileSchemaVersion: number;
18
+ lock: PiLock;
19
+ }
20
+ export declare function loadMetadata(): JouzuMetadata;
21
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,MAAM;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACb;AAMD,wBAAgB,YAAY,IAAI,aAAa,CAgB5C"}
@@ -0,0 +1,22 @@
1
+ import { readFileSync } from "node:fs";
2
+ const PI_PACKAGE = "@earendil-works/pi-coding-agent";
3
+ function readJson(url) {
4
+ return JSON.parse(readFileSync(url, "utf8"));
5
+ }
6
+ export function loadMetadata() {
7
+ const packageMetadata = readJson(new URL("../package.json", import.meta.url));
8
+ const lock = readJson(new URL("./pi.lock.json", import.meta.url));
9
+ const piRecord = lock.packages[PI_PACKAGE];
10
+ if (!piRecord)
11
+ throw new Error(`bundled Pi lock is missing ${PI_PACKAGE}`);
12
+ if (packageMetadata.dependencies?.[PI_PACKAGE] !== piRecord.version) {
13
+ throw new Error(`Jouzu runtime dependency ${packageMetadata.dependencies?.[PI_PACKAGE] ?? "(missing)"} does not match bundled Pi lock ${piRecord.version}`);
14
+ }
15
+ return {
16
+ jouzuVersion: packageMetadata.version,
17
+ piVersion: piRecord.version,
18
+ profileSchemaVersion: 1,
19
+ lock,
20
+ };
21
+ }
22
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,UAAU,GAAG,iCAAiC,CAAC;AA0BrD,SAAS,QAAQ,CAAI,GAAQ;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAM,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY;IAC3B,MAAM,eAAe,GAAG,QAAQ,CAAkB,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,QAAQ,CAAS,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;IAC3E,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CACd,4BAA4B,eAAe,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,IAAI,WAAW,mCAAmC,QAAQ,CAAC,OAAO,EAAE,CAC1I,CAAC;IACH,CAAC;IACD,OAAO;QACN,YAAY,EAAE,eAAe,CAAC,OAAO;QACrC,SAAS,EAAE,QAAQ,CAAC,OAAO;QAC3B,oBAAoB,EAAE,CAAC;QACvB,IAAI;KACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface JouzuPaths {
2
+ agentDir: string;
3
+ stateDir: string;
4
+ cacheDir: string;
5
+ sessionDir: string;
6
+ profileStatePath: string;
7
+ backupDir: string;
8
+ }
9
+ export interface PathResolutionOptions {
10
+ platform?: NodeJS.Platform;
11
+ env?: NodeJS.ProcessEnv;
12
+ homeDir?: string;
13
+ cwd?: string;
14
+ homeOverride?: string;
15
+ }
16
+ export declare function resolveJouzuPaths(options?: PathResolutionOptions): JouzuPaths;
17
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAgEjF"}
package/dist/paths.js ADDED
@@ -0,0 +1,65 @@
1
+ import { homedir } from "node:os";
2
+ import { posix, win32 } from "node:path";
3
+ function nonEmpty(value) {
4
+ return value && value.trim().length > 0 ? value : undefined;
5
+ }
6
+ function expandHome(value, home, platform) {
7
+ if (value === "~")
8
+ return home;
9
+ if (value.startsWith("~/") || value.startsWith("~\\")) {
10
+ const pathApi = platform === "win32" ? win32 : posix;
11
+ return pathApi.join(home, value.slice(2));
12
+ }
13
+ return value;
14
+ }
15
+ function absolutePath(value, home, cwd, platform) {
16
+ const pathApi = platform === "win32" ? win32 : posix;
17
+ return pathApi.resolve(cwd, expandHome(value, home, platform));
18
+ }
19
+ export function resolveJouzuPaths(options = {}) {
20
+ const platform = options.platform ?? process.platform;
21
+ const env = options.env ?? process.env;
22
+ const home = options.homeDir ?? homedir();
23
+ const pathApi = platform === "win32" ? win32 : posix;
24
+ const cwd = options.cwd ?? process.cwd();
25
+ const homeOverride = nonEmpty(options.homeOverride) ?? nonEmpty(env.JOUZU_HOME);
26
+ let agentDir;
27
+ let stateDir;
28
+ let cacheDir;
29
+ if (homeOverride) {
30
+ const root = absolutePath(homeOverride, home, cwd, platform);
31
+ agentDir = pathApi.join(root, "agent");
32
+ stateDir = pathApi.join(root, "state");
33
+ cacheDir = pathApi.join(root, "cache");
34
+ }
35
+ else if (platform === "darwin") {
36
+ const applicationSupport = pathApi.join(home, "Library", "Application Support", "Jouzu");
37
+ agentDir = pathApi.join(applicationSupport, "agent");
38
+ stateDir = pathApi.join(applicationSupport, "state");
39
+ cacheDir = pathApi.join(home, "Library", "Caches", "Jouzu");
40
+ }
41
+ else if (platform === "win32") {
42
+ const roaming = absolutePath(nonEmpty(env.APPDATA) ?? pathApi.join(home, "AppData", "Roaming"), home, cwd, platform);
43
+ const local = absolutePath(nonEmpty(env.LOCALAPPDATA) ?? pathApi.join(home, "AppData", "Local"), home, cwd, platform);
44
+ agentDir = pathApi.join(roaming, "Jouzu", "agent");
45
+ stateDir = pathApi.join(local, "Jouzu", "state");
46
+ cacheDir = pathApi.join(local, "Jouzu", "cache");
47
+ }
48
+ else {
49
+ const configHome = absolutePath(nonEmpty(env.XDG_CONFIG_HOME) ?? pathApi.join(home, ".config"), home, cwd, platform);
50
+ const stateHome = absolutePath(nonEmpty(env.XDG_STATE_HOME) ?? pathApi.join(home, ".local", "state"), home, cwd, platform);
51
+ const cacheHome = absolutePath(nonEmpty(env.XDG_CACHE_HOME) ?? pathApi.join(home, ".cache"), home, cwd, platform);
52
+ agentDir = pathApi.join(configHome, "jouzu", "agent");
53
+ stateDir = pathApi.join(stateHome, "jouzu");
54
+ cacheDir = pathApi.join(cacheHome, "jouzu");
55
+ }
56
+ return {
57
+ agentDir,
58
+ stateDir,
59
+ cacheDir,
60
+ sessionDir: pathApi.join(stateDir, "sessions"),
61
+ profileStatePath: pathApi.join(stateDir, "profile-state.json"),
62
+ backupDir: pathApi.join(stateDir, "backups"),
63
+ };
64
+ }
65
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "repository": "https://github.com/earendil-works/pi",
4
+ "tag": "v0.84.2",
5
+ "commit": "914cf1472e715297caa30db4b9535d534a9eb718",
6
+ "packages": {
7
+ "@earendil-works/pi-coding-agent": {
8
+ "version": "0.84.2",
9
+ "integrity": "sha512-l4E+B7hgXKWddRo8bC/eSue2aWZjEgJ9xIpf5p0Og+lq8a2TArCwJ0HCoCPCgaBP/tN4zbYH/wOwvx9pJpeLCA=="
10
+ }
11
+ },
12
+ "reviewedAt": "2026-08-20",
13
+ "compatibilityStatus": "qualified",
14
+ "deviations": []
15
+ }