jouzu 0.0.1 → 0.1.1
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/README.md +50 -0
- package/dist/args.d.ts +45 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +221 -0
- package/dist/args.js.map +1 -0
- package/dist/cli.js +250 -29
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +36 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +224 -0
- package/dist/doctor.js.map +1 -0
- package/dist/keybindings.d.ts +68 -0
- package/dist/keybindings.d.ts.map +1 -0
- package/dist/keybindings.js +559 -0
- package/dist/keybindings.js.map +1 -0
- package/dist/metadata.d.ts +21 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +22 -0
- package/dist/metadata.js.map +1 -0
- package/dist/paths.d.ts +17 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +65 -0
- package/dist/paths.js.map +1 -0
- package/dist/pi.lock.json +15 -0
- package/dist/presentation.d.ts +45 -0
- package/dist/presentation.d.ts.map +1 -0
- package/dist/presentation.js +202 -0
- package/dist/presentation.js.map +1 -0
- package/dist/private-fs.d.ts +12 -0
- package/dist/private-fs.d.ts.map +1 -0
- package/dist/private-fs.js +64 -0
- package/dist/private-fs.js.map +1 -0
- package/dist/profile-choice.d.ts +14 -0
- package/dist/profile-choice.d.ts.map +1 -0
- package/dist/profile-choice.js +83 -0
- package/dist/profile-choice.js.map +1 -0
- package/dist/profile-manager.d.ts +50 -0
- package/dist/profile-manager.d.ts.map +1 -0
- package/dist/profile-manager.js +364 -0
- package/dist/profile-manager.js.map +1 -0
- package/dist/profiles/core/assets/jouzu-core-skill.md +12 -0
- package/dist/profiles/core/assets/jouzu-review.md +1 -0
- package/dist/profiles/core/manifest.json +17 -0
- package/dist/profiles/ja/assets/APPEND_SYSTEM.md +8 -0
- package/dist/profiles/ja/manifest.json +13 -0
- package/dist/profiles.d.ts +18 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +153 -0
- package/dist/profiles.js.map +1 -0
- package/dist/resume.d.ts +7 -0
- package/dist/resume.d.ts.map +1 -0
- package/dist/resume.js +23 -0
- package/dist/resume.js.map +1 -0
- package/dist/runtime.d.ts +18 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +59 -0
- package/dist/runtime.js.map +1 -0
- package/dist/state-lock.d.ts +39 -0
- package/dist/state-lock.d.ts.map +1 -0
- package/dist/state-lock.js +143 -0
- package/dist/state-lock.js.map +1 -0
- package/dist/updater.d.ts +113 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +698 -0
- package/dist/updater.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, existsSync, fsyncSync, lstatSync, openSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve, sep } from "node:path";
|
|
4
|
+
import { copyPrivateFile, ensurePrivateDirectory, validatePrivateDirectory } from "./private-fs.js";
|
|
5
|
+
import { acquireStateLock, STATE_LOCK_STALE_MS } from "./state-lock.js";
|
|
6
|
+
const STATE_FIELDS = new Set([
|
|
7
|
+
"schemaVersion",
|
|
8
|
+
"activeProfile",
|
|
9
|
+
"profileVersion",
|
|
10
|
+
"manifestSha256",
|
|
11
|
+
"jouzuVersion",
|
|
12
|
+
"transactionId",
|
|
13
|
+
"appliedAt",
|
|
14
|
+
"managedTargets",
|
|
15
|
+
]);
|
|
16
|
+
const MANAGED_TARGET_FIELDS = new Set(["target", "sha256"]);
|
|
17
|
+
const SHA256_RE = /^[0-9a-f]{64}$/;
|
|
18
|
+
export class ProfileStateError extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "ProfileStateError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function formatProfilePlan(plan) {
|
|
25
|
+
const lines = [
|
|
26
|
+
"Jouzu profile plan",
|
|
27
|
+
`Profile: ${plan.profile} v${plan.profileVersion}`,
|
|
28
|
+
`Manifest: ${plan.manifestSha256}`,
|
|
29
|
+
`Agent root: ${plan.agentDir}`,
|
|
30
|
+
`Actions (${plan.actions.length}):`,
|
|
31
|
+
];
|
|
32
|
+
if (plan.actions.length === 0)
|
|
33
|
+
lines.push("- none");
|
|
34
|
+
for (const action of plan.actions) {
|
|
35
|
+
lines.push(`- ${action.type.toUpperCase()} ${action.target} (${action.reason})`);
|
|
36
|
+
}
|
|
37
|
+
return lines.join("\n");
|
|
38
|
+
}
|
|
39
|
+
export class ProfileConflictError extends Error {
|
|
40
|
+
exitCode = 3;
|
|
41
|
+
plan;
|
|
42
|
+
constructor(plan) {
|
|
43
|
+
super("profile plan contains conflicts");
|
|
44
|
+
this.name = "ProfileConflictError";
|
|
45
|
+
this.plan = plan;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function sha256(value) {
|
|
49
|
+
return createHash("sha256").update(value).digest("hex");
|
|
50
|
+
}
|
|
51
|
+
function exactFields(value, fields) {
|
|
52
|
+
return Object.keys(value).every((key) => fields.has(key));
|
|
53
|
+
}
|
|
54
|
+
export function readProfileState(path) {
|
|
55
|
+
try {
|
|
56
|
+
validatePrivateDirectory(dirname(path));
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new ProfileStateError(error instanceof Error ? error.message : String(error));
|
|
60
|
+
}
|
|
61
|
+
if (!existsSync(path))
|
|
62
|
+
return undefined;
|
|
63
|
+
const metadata = lstatSync(path);
|
|
64
|
+
if (!metadata.isFile() || metadata.isSymbolicLink())
|
|
65
|
+
throw new ProfileStateError(`profile state must be a regular file: ${path}`);
|
|
66
|
+
let parsed;
|
|
67
|
+
try {
|
|
68
|
+
parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
throw new ProfileStateError(`profile state is invalid JSON at ${path}: ${error instanceof Error ? error.message : error}`);
|
|
72
|
+
}
|
|
73
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
74
|
+
throw new ProfileStateError("profile state must be an object");
|
|
75
|
+
const state = parsed;
|
|
76
|
+
if (!exactFields(state, STATE_FIELDS))
|
|
77
|
+
throw new ProfileStateError("profile state has unknown fields");
|
|
78
|
+
if (state.schemaVersion !== 1 ||
|
|
79
|
+
(state.activeProfile !== "core" && state.activeProfile !== "ja") ||
|
|
80
|
+
!Number.isInteger(state.profileVersion) ||
|
|
81
|
+
Number(state.profileVersion) < 1 ||
|
|
82
|
+
typeof state.manifestSha256 !== "string" ||
|
|
83
|
+
!SHA256_RE.test(state.manifestSha256) ||
|
|
84
|
+
typeof state.jouzuVersion !== "string" ||
|
|
85
|
+
typeof state.transactionId !== "string" ||
|
|
86
|
+
typeof state.appliedAt !== "string" ||
|
|
87
|
+
!Array.isArray(state.managedTargets)) {
|
|
88
|
+
throw new ProfileStateError(`profile state fields are invalid at ${path}`);
|
|
89
|
+
}
|
|
90
|
+
const targets = new Set();
|
|
91
|
+
const managedTargets = state.managedTargets.map((entry) => {
|
|
92
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
93
|
+
throw new ProfileStateError("profile state managed target must be an object");
|
|
94
|
+
}
|
|
95
|
+
const target = entry;
|
|
96
|
+
if (!exactFields(target, MANAGED_TARGET_FIELDS) ||
|
|
97
|
+
typeof target.target !== "string" ||
|
|
98
|
+
typeof target.sha256 !== "string" ||
|
|
99
|
+
!SHA256_RE.test(target.sha256) ||
|
|
100
|
+
targets.has(target.target)) {
|
|
101
|
+
throw new ProfileStateError("profile state managed target is invalid or duplicated");
|
|
102
|
+
}
|
|
103
|
+
targets.add(target.target);
|
|
104
|
+
return { target: target.target, sha256: target.sha256 };
|
|
105
|
+
});
|
|
106
|
+
return {
|
|
107
|
+
schemaVersion: 1,
|
|
108
|
+
activeProfile: state.activeProfile,
|
|
109
|
+
profileVersion: Number(state.profileVersion),
|
|
110
|
+
manifestSha256: state.manifestSha256,
|
|
111
|
+
jouzuVersion: state.jouzuVersion,
|
|
112
|
+
transactionId: state.transactionId,
|
|
113
|
+
appliedAt: state.appliedAt,
|
|
114
|
+
managedTargets,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function targetPath(agentDir, target) {
|
|
118
|
+
const resolved = resolve(agentDir, ...target.split("/"));
|
|
119
|
+
const root = resolve(agentDir);
|
|
120
|
+
if (resolved !== root && !resolved.startsWith(`${root}${sep}`))
|
|
121
|
+
throw new ProfileStateError(`profile target escaped agent root: ${target}`);
|
|
122
|
+
return resolved;
|
|
123
|
+
}
|
|
124
|
+
function unsafeParent(agentDir, target) {
|
|
125
|
+
let current = resolve(agentDir);
|
|
126
|
+
for (const part of target.split("/").slice(0, -1)) {
|
|
127
|
+
current = join(current, part);
|
|
128
|
+
if (!existsSync(current))
|
|
129
|
+
continue;
|
|
130
|
+
const metadata = lstatSync(current);
|
|
131
|
+
if (metadata.isSymbolicLink() || !metadata.isDirectory())
|
|
132
|
+
return part;
|
|
133
|
+
}
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
function observedFile(agentDir, target) {
|
|
137
|
+
if (unsafeParent(agentDir, target))
|
|
138
|
+
return { kind: "unsafe" };
|
|
139
|
+
const path = targetPath(agentDir, target);
|
|
140
|
+
if (!existsSync(path))
|
|
141
|
+
return { kind: "missing" };
|
|
142
|
+
const metadata = lstatSync(path);
|
|
143
|
+
if (!metadata.isFile() || metadata.isSymbolicLink())
|
|
144
|
+
return { kind: "unsafe" };
|
|
145
|
+
const bytes = readFileSync(path);
|
|
146
|
+
let unsupportedEncoding = false;
|
|
147
|
+
try {
|
|
148
|
+
new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
unsupportedEncoding = true;
|
|
152
|
+
}
|
|
153
|
+
return { kind: "file", sha256: sha256(bytes), unsupportedEncoding };
|
|
154
|
+
}
|
|
155
|
+
function stateMatches(state, profile, jouzuVersion) {
|
|
156
|
+
if (!state ||
|
|
157
|
+
state.activeProfile !== profile.id ||
|
|
158
|
+
state.profileVersion !== profile.version ||
|
|
159
|
+
state.manifestSha256 !== profile.manifestSha256 ||
|
|
160
|
+
state.jouzuVersion !== jouzuVersion ||
|
|
161
|
+
state.managedTargets.length !== profile.assets.length) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
const expected = profile.assets.map((asset) => `${asset.target}:${asset.sha256}`).sort();
|
|
165
|
+
const current = state.managedTargets.map((asset) => `${asset.target}:${asset.sha256}`).sort();
|
|
166
|
+
return expected.every((value, index) => value === current[index]);
|
|
167
|
+
}
|
|
168
|
+
function sortedActions(actions) {
|
|
169
|
+
return actions.sort((left, right) => left.target.localeCompare(right.target) || left.type.localeCompare(right.type));
|
|
170
|
+
}
|
|
171
|
+
export function planProfile(profile, paths, jouzuVersion) {
|
|
172
|
+
try {
|
|
173
|
+
validatePrivateDirectory(paths.agentDir);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
throw new ProfileStateError(error instanceof Error ? error.message : String(error));
|
|
177
|
+
}
|
|
178
|
+
const state = readProfileState(paths.profileStatePath);
|
|
179
|
+
const previous = new Map(state?.managedTargets.map((item) => [item.target, item.sha256]) ?? []);
|
|
180
|
+
const desired = new Map(profile.assets.map((asset) => [asset.target, asset]));
|
|
181
|
+
const actions = [];
|
|
182
|
+
for (const asset of profile.assets) {
|
|
183
|
+
const observed = observedFile(paths.agentDir, asset.target);
|
|
184
|
+
const installedSha256 = previous.get(asset.target);
|
|
185
|
+
if (observed.kind === "unsafe") {
|
|
186
|
+
actions.push({ type: "conflict", target: asset.target, reason: "unsafe-target", desiredSha256: asset.sha256 });
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (observed.kind === "missing") {
|
|
190
|
+
actions.push({
|
|
191
|
+
type: "create",
|
|
192
|
+
target: asset.target,
|
|
193
|
+
reason: installedSha256 ? "managed-missing" : "missing",
|
|
194
|
+
desiredSha256: asset.sha256,
|
|
195
|
+
});
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (!installedSha256) {
|
|
199
|
+
actions.push(observed.sha256 === asset.sha256
|
|
200
|
+
? {
|
|
201
|
+
type: "adopt",
|
|
202
|
+
target: asset.target,
|
|
203
|
+
reason: "matching-unmanaged",
|
|
204
|
+
desiredSha256: asset.sha256,
|
|
205
|
+
observedSha256: observed.sha256,
|
|
206
|
+
}
|
|
207
|
+
: {
|
|
208
|
+
type: "conflict",
|
|
209
|
+
target: asset.target,
|
|
210
|
+
reason: observed.unsupportedEncoding ? "unsupported-encoding" : "unmanaged-different",
|
|
211
|
+
desiredSha256: asset.sha256,
|
|
212
|
+
observedSha256: observed.sha256,
|
|
213
|
+
});
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (observed.sha256 === asset.sha256)
|
|
217
|
+
continue;
|
|
218
|
+
if (observed.sha256 !== installedSha256) {
|
|
219
|
+
actions.push({
|
|
220
|
+
type: "conflict",
|
|
221
|
+
target: asset.target,
|
|
222
|
+
reason: observed.unsupportedEncoding ? "unsupported-encoding" : "managed-modified",
|
|
223
|
+
desiredSha256: asset.sha256,
|
|
224
|
+
observedSha256: observed.sha256,
|
|
225
|
+
});
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
actions.push({
|
|
229
|
+
type: "update",
|
|
230
|
+
target: asset.target,
|
|
231
|
+
reason: "managed-upgrade",
|
|
232
|
+
desiredSha256: asset.sha256,
|
|
233
|
+
observedSha256: observed.sha256,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
for (const [target, installedSha256] of previous) {
|
|
237
|
+
if (desired.has(target))
|
|
238
|
+
continue;
|
|
239
|
+
const observed = observedFile(paths.agentDir, target);
|
|
240
|
+
if (observed.kind === "missing")
|
|
241
|
+
continue;
|
|
242
|
+
if (observed.kind === "unsafe" || observed.sha256 !== installedSha256) {
|
|
243
|
+
actions.push({
|
|
244
|
+
type: "conflict",
|
|
245
|
+
target,
|
|
246
|
+
reason: observed.kind === "unsafe"
|
|
247
|
+
? "unsafe-target"
|
|
248
|
+
: observed.unsupportedEncoding
|
|
249
|
+
? "unsupported-encoding"
|
|
250
|
+
: "managed-modified",
|
|
251
|
+
observedSha256: observed.sha256,
|
|
252
|
+
});
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
actions.push({
|
|
256
|
+
type: "delete",
|
|
257
|
+
target,
|
|
258
|
+
reason: "retired-managed",
|
|
259
|
+
observedSha256: observed.sha256,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
if (!stateMatches(state, profile, jouzuVersion)) {
|
|
263
|
+
actions.push({
|
|
264
|
+
type: "state-update",
|
|
265
|
+
target: "profile-state.json",
|
|
266
|
+
reason: state ? "state-drift" : "state-missing",
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
schemaVersion: 1,
|
|
271
|
+
profile: profile.id,
|
|
272
|
+
profileVersion: profile.version,
|
|
273
|
+
manifestSha256: profile.manifestSha256,
|
|
274
|
+
agentDir: paths.agentDir,
|
|
275
|
+
actions: sortedActions(actions),
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
function atomicWrite(path, bytes, privateRoot) {
|
|
279
|
+
ensurePrivateDirectory(privateRoot, dirname(path));
|
|
280
|
+
const temporary = join(dirname(path), `.${randomUUID()}.tmp`);
|
|
281
|
+
let descriptor;
|
|
282
|
+
try {
|
|
283
|
+
descriptor = openSync(temporary, "wx", 0o600);
|
|
284
|
+
writeFileSync(descriptor, bytes);
|
|
285
|
+
fsyncSync(descriptor);
|
|
286
|
+
closeSync(descriptor);
|
|
287
|
+
descriptor = undefined;
|
|
288
|
+
renameSync(temporary, path);
|
|
289
|
+
}
|
|
290
|
+
finally {
|
|
291
|
+
if (descriptor !== undefined)
|
|
292
|
+
closeSync(descriptor);
|
|
293
|
+
rmSync(temporary, { force: true });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
function stateBytes(profile, jouzuVersion, transactionId) {
|
|
297
|
+
const state = {
|
|
298
|
+
schemaVersion: 1,
|
|
299
|
+
activeProfile: profile.id,
|
|
300
|
+
profileVersion: profile.version,
|
|
301
|
+
manifestSha256: profile.manifestSha256,
|
|
302
|
+
jouzuVersion,
|
|
303
|
+
transactionId,
|
|
304
|
+
appliedAt: new Date().toISOString(),
|
|
305
|
+
managedTargets: profile.assets.map((asset) => ({ target: asset.target, sha256: asset.sha256 })),
|
|
306
|
+
};
|
|
307
|
+
return Buffer.from(`${JSON.stringify(state, null, 2)}\n`);
|
|
308
|
+
}
|
|
309
|
+
export function applyProfile(profile, paths, jouzuVersion) {
|
|
310
|
+
const initialPlan = planProfile(profile, paths, jouzuVersion);
|
|
311
|
+
if (initialPlan.actions.some((action) => action.type === "conflict"))
|
|
312
|
+
throw new ProfileConflictError(initialPlan);
|
|
313
|
+
if (initialPlan.actions.length === 0)
|
|
314
|
+
return { changed: false, plan: initialPlan };
|
|
315
|
+
ensurePrivateDirectory(paths.stateDir);
|
|
316
|
+
const releaseLock = acquireStateLock({
|
|
317
|
+
path: join(paths.stateDir, "profile.lock"),
|
|
318
|
+
staleMs: STATE_LOCK_STALE_MS,
|
|
319
|
+
describe: "profile",
|
|
320
|
+
onBusy: (inspection) => new ProfileStateError(inspection.status === "invalid"
|
|
321
|
+
? "profile.lock is not a regular lock file"
|
|
322
|
+
: "another profile operation is in progress"),
|
|
323
|
+
});
|
|
324
|
+
try {
|
|
325
|
+
const plan = planProfile(profile, paths, jouzuVersion);
|
|
326
|
+
if (plan.actions.some((action) => action.type === "conflict"))
|
|
327
|
+
throw new ProfileConflictError(plan);
|
|
328
|
+
if (plan.actions.length === 0)
|
|
329
|
+
return { changed: false, plan };
|
|
330
|
+
const transactionId = randomUUID();
|
|
331
|
+
const transactionBackupDir = join(paths.backupDir, transactionId);
|
|
332
|
+
const desired = new Map(profile.assets.map((asset) => [asset.target, asset]));
|
|
333
|
+
for (const action of plan.actions) {
|
|
334
|
+
if (action.type === "state-update" || action.type === "adopt")
|
|
335
|
+
continue;
|
|
336
|
+
const path = targetPath(paths.agentDir, action.target);
|
|
337
|
+
if (action.type === "update" || action.type === "delete") {
|
|
338
|
+
const backup = targetPath(transactionBackupDir, action.target);
|
|
339
|
+
copyPrivateFile(path, backup, paths.stateDir);
|
|
340
|
+
}
|
|
341
|
+
if (action.type === "delete") {
|
|
342
|
+
unlinkSync(path);
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
const asset = desired.get(action.target);
|
|
346
|
+
if (!asset)
|
|
347
|
+
throw new ProfileStateError(`missing desired profile asset: ${action.target}`);
|
|
348
|
+
if (unsafeParent(paths.agentDir, action.target))
|
|
349
|
+
throw new ProfileStateError(`unsafe profile parent: ${action.target}`);
|
|
350
|
+
atomicWrite(path, asset.bytes, paths.agentDir);
|
|
351
|
+
}
|
|
352
|
+
atomicWrite(paths.profileStatePath, stateBytes(profile, jouzuVersion, transactionId), paths.stateDir);
|
|
353
|
+
return {
|
|
354
|
+
changed: true,
|
|
355
|
+
plan,
|
|
356
|
+
transactionId,
|
|
357
|
+
...(existsSync(transactionBackupDir) ? { backupDir: transactionBackupDir } : {}),
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
finally {
|
|
361
|
+
releaseLock();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=profile-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-manager.js","sourceRoot":"","sources":["../src/profile-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,MAAM,EACN,UAAU,EACV,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC5B,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,WAAW;IACX,gBAAgB;CAChB,CAAC,CAAC;AACH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5D,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAuCnC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACjC,CAAC;CACD;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IAClD,MAAM,KAAK,GAAG;QACb,oBAAoB;QACpB,YAAY,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE;QAClD,aAAa,IAAI,CAAC,cAAc,EAAE;QAClC,eAAe,IAAI,CAAC,QAAQ,EAAE;QAC9B,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI;KACnC,CAAC;IACF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACrC,QAAQ,GAAG,CAAC,CAAC;IACb,IAAI,CAAc;IAE3B,YAAY,IAAiB;QAC5B,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;CACD;AAED,SAAS,MAAM,CAAC,KAAiB;IAChC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B,EAAE,MAAmB;IACvE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,IAAI,CAAC;QACJ,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,iBAAiB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE;QAClD,MAAM,IAAI,iBAAiB,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;IAC9E,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,iBAAiB,CAC1B,oCAAoC,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAC7F,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACjE,MAAM,IAAI,iBAAiB,CAAC,iCAAiC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAiC,CAAC;IAChD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,kCAAkC,CAAC,CAAC;IACvG,IACC,KAAK,CAAC,aAAa,KAAK,CAAC;QACzB,CAAC,KAAK,CAAC,aAAa,KAAK,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;QAChE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;QAChC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QACxC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QACrC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;QACtC,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QACvC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EACnC,CAAC;QACF,MAAM,IAAI,iBAAiB,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,iBAAiB,CAAC,gDAAgD,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IACC,CAAC,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC;YAC3C,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YACjC,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YACjC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EACzB,CAAC;YACF,MAAM,IAAI,iBAAiB,CAAC,uDAAuD,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,OAAO;QACN,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;QAC5C,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,cAAc;KACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,MAAc;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;QAC7D,MAAM,IAAI,iBAAiB,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,MAAc;IACrD,IAAI,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;IACvE,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CACpB,QAAgB,EAChB,MAAc;IAEd,IAAI,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC/E,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,CAAC;QACJ,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACR,mBAAmB,GAAG,IAAI,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CAAC,KAA+B,EAAE,OAAwB,EAAE,YAAoB;IACpG,IACC,CAAC,KAAK;QACN,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,EAAE;QAClC,KAAK,CAAC,cAAc,KAAK,OAAO,CAAC,OAAO;QACxC,KAAK,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc;QAC/C,KAAK,CAAC,YAAY,KAAK,YAAY;QACnC,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EACpD,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzF,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9F,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,OAAwB;IAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAwB,EAAE,KAAiB,EAAE,YAAoB;IAC5F,IAAI,CAAC;QACJ,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,iBAAiB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/G,SAAS;QACV,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;gBACvD,aAAa,EAAE,KAAK,CAAC,MAAM;aAC3B,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CACX,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAC/B,CAAC,CAAC;oBACA,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,oBAAoB;oBAC5B,aAAa,EAAE,KAAK,CAAC,MAAM;oBAC3B,cAAc,EAAE,QAAQ,CAAC,MAAM;iBAC/B;gBACF,CAAC,CAAC;oBACA,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,qBAAqB;oBACrF,aAAa,EAAE,KAAK,CAAC,MAAM;oBAC3B,cAAc,EAAE,QAAQ,CAAC,MAAM;iBAC/B,CACH,CAAC;YACF,SAAS;QACV,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,SAAS;QAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,kBAAkB;gBAClF,aAAa,EAAE,KAAK,CAAC,MAAM;gBAC3B,cAAc,EAAE,QAAQ,CAAC,MAAM;aAC/B,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,iBAAiB;YACzB,aAAa,EAAE,KAAK,CAAC,MAAM;YAC3B,cAAc,EAAE,QAAQ,CAAC,MAAM;SAC/B,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,QAAQ,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU;gBAChB,MAAM;gBACN,MAAM,EACL,QAAQ,CAAC,IAAI,KAAK,QAAQ;oBACzB,CAAC,CAAC,eAAe;oBACjB,CAAC,CAAC,QAAQ,CAAC,mBAAmB;wBAC7B,CAAC,CAAC,sBAAsB;wBACxB,CAAC,CAAC,kBAAkB;gBACvB,cAAc,EAAE,QAAQ,CAAC,MAAM;aAC/B,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,MAAM;YACN,MAAM,EAAE,iBAAiB;YACzB,cAAc,EAAE,QAAQ,CAAC,MAAM;SAC/B,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe;SAC/C,CAAC,CAAC;IACJ,CAAC;IACD,OAAO;QACN,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;KAC/B,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAiB,EAAE,WAAmB;IACxE,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,UAA8B,CAAC;IACnC,IAAI,CAAC;QACJ,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,UAAU,GAAG,SAAS,CAAC;QACvB,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;YAAS,CAAC;QACV,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,OAAwB,EAAE,YAAoB,EAAE,aAAqB;IACxF,MAAM,KAAK,GAAiB;QAC3B,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,OAAO,CAAC,EAAE;QACzB,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY;QACZ,aAAa;QACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/F,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAwB,EAAE,KAAiB,EAAE,YAAoB;IAC7F,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;QAAE,MAAM,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAClH,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAEnF,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,gBAAgB,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC;QAC1C,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,iBAAiB,CACpB,UAAU,CAAC,MAAM,KAAK,SAAS;YAC9B,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,0CAA0C,CAC7C;KACF,CAAC,CAAC;IACH,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;YAAE,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAE/D,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC;QACnC,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9E,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAS;YACxE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjB,SAAS;YACV,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,iBAAiB,CAAC,kCAAkC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3F,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;gBAC9C,MAAM,IAAI,iBAAiB,CAAC,0BAA0B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,WAAW,CAAC,KAAK,CAAC,gBAAgB,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtG,OAAO;YACN,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,aAAa;YACb,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC;IACH,CAAC;YAAS,CAAC;QACV,WAAW,EAAE,CAAC;IACf,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jouzu-core
|
|
3
|
+
description: Apply Jouzu's provider-neutral coding workflow when a task needs deliberate planning, safe edits, validation, and a concise handoff.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jouzu Core Workflow
|
|
7
|
+
|
|
8
|
+
1. Read repository instructions and inspect the current state before editing.
|
|
9
|
+
2. Preserve user-owned work and make the smallest coherent change.
|
|
10
|
+
3. Prefer deterministic checks and exact tool output over unsupported claims.
|
|
11
|
+
4. Validate the affected behavior, then summarize changed files, checks, and remaining limitations.
|
|
12
|
+
5. Never infer provider, region, privacy, retention, routing, or certification properties that were not explicitly verified.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Review the current change as a release-minded coding assistant. Check correctness, regressions, user-owned data safety, tests, documentation parity, and unsupported claims. Report concrete findings first; if there are no findings, say so and name any validation gaps.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "core",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"assets": [
|
|
6
|
+
{
|
|
7
|
+
"source": "assets/jouzu-core-skill.md",
|
|
8
|
+
"target": "skills/jouzu-core/SKILL.md",
|
|
9
|
+
"sha256": "fb9b2835a3f5d908c45a9767552256b0fa4124b20dc8cbaac758d997e7bca2fa"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"source": "assets/jouzu-review.md",
|
|
13
|
+
"target": "prompts/jouzu-review.md",
|
|
14
|
+
"sha256": "80c2f09bdb7f6fc10c1c3987e2307aa6c391b393ffdb0c1dbad0ed9db0d05ad6"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Jouzu Japanese-First Policy
|
|
2
|
+
|
|
3
|
+
- 原則として、利用者への説明と作業報告は、簡潔で自然な日本語で行ってください。利用者が別の言語を指定した場合は、その指定を優先してください。
|
|
4
|
+
- コード、識別子、コマンド、オプション、パス、URL、API 名、ログ、引用、原文のエラーメッセージは正確に保持し、勝手に翻訳・正規化・全角化しないでください。
|
|
5
|
+
- コードコメント、ドキュメント、コミットメッセージの言語は、利用者の指示と対象リポジトリの既存方針を優先してください。
|
|
6
|
+
- 日本語の要件が曖昧な場合は、重要な前提だけを確認してください。明確な要件は過度に聞き返さず実行してください。
|
|
7
|
+
- 丁寧さを保ちながら冗長な前置きを避け、変更内容、検証結果、残る制約を明確に伝えてください。
|
|
8
|
+
- モデル、プロバイダー、地域、プライバシー、保持期間、ルーティング、認証、認定について、確認していない性質を推測したり保証したりしないでください。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "ja",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"extends": "core",
|
|
6
|
+
"assets": [
|
|
7
|
+
{
|
|
8
|
+
"source": "assets/APPEND_SYSTEM.md",
|
|
9
|
+
"target": "APPEND_SYSTEM.md",
|
|
10
|
+
"sha256": "31a4e6380e2d56b637f0626f592e833fe38321feef9ada6a0b225f8173d0b8e6"
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProfileId } from "./args.js";
|
|
2
|
+
export interface ResolvedProfileAsset {
|
|
3
|
+
target: string;
|
|
4
|
+
sha256: string;
|
|
5
|
+
bytes: Buffer;
|
|
6
|
+
}
|
|
7
|
+
export interface ResolvedProfile {
|
|
8
|
+
id: ProfileId;
|
|
9
|
+
version: number;
|
|
10
|
+
manifestSha256: string;
|
|
11
|
+
assets: ResolvedProfileAsset[];
|
|
12
|
+
}
|
|
13
|
+
export declare class ProfileManifestError extends Error {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
export declare function loadProfileFromRoot(root: string, id: ProfileId): ResolvedProfile;
|
|
17
|
+
export declare function loadBundledProfile(id: ProfileId): ResolvedProfile;
|
|
18
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAoB3C,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI3B;AAwHD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,eAAe,CAiBhF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,GAAG,eAAe,CAEjE"}
|
package/dist/profiles.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstatSync, readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
const MANIFEST_FIELDS = new Set(["schemaVersion", "id", "version", "extends", "assets"]);
|
|
6
|
+
const ASSET_FIELDS = new Set(["source", "target", "sha256"]);
|
|
7
|
+
const SHA256_RE = /^[0-9a-f]{64}$/;
|
|
8
|
+
export class ProfileManifestError extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "ProfileManifestError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function sha256(value) {
|
|
15
|
+
return createHash("sha256").update(value).digest("hex");
|
|
16
|
+
}
|
|
17
|
+
function assertExactFields(value, fields, subject) {
|
|
18
|
+
const unknown = Object.keys(value).filter((key) => !fields.has(key));
|
|
19
|
+
if (unknown.length > 0)
|
|
20
|
+
throw new ProfileManifestError(`${subject} has unknown fields: ${unknown.sort().join(", ")}`);
|
|
21
|
+
}
|
|
22
|
+
function safeRelativePath(value, subject) {
|
|
23
|
+
if (!value || value.startsWith("/") || value.includes("\\")) {
|
|
24
|
+
throw new ProfileManifestError(`${subject} must be a relative POSIX path`);
|
|
25
|
+
}
|
|
26
|
+
const parts = value.split("/");
|
|
27
|
+
if (parts.some((part) => !part || part === "." || part === "..")) {
|
|
28
|
+
throw new ProfileManifestError(`${subject} contains an unsafe path segment`);
|
|
29
|
+
}
|
|
30
|
+
return parts;
|
|
31
|
+
}
|
|
32
|
+
function validateTarget(target) {
|
|
33
|
+
const parts = safeRelativePath(target, `profile target ${target}`);
|
|
34
|
+
if (target === "APPEND_SYSTEM.md")
|
|
35
|
+
return;
|
|
36
|
+
if (parts[0] === "skills" && parts.length >= 3 && parts[1].startsWith("jouzu-") && parts.at(-1) === "SKILL.md") {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (parts[0] === "prompts" && parts.length === 2 && parts[1].startsWith("jouzu-") && parts[1].endsWith(".md")) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
throw new ProfileManifestError(`unsupported profile target: ${target}`);
|
|
43
|
+
}
|
|
44
|
+
function readManifest(root, id) {
|
|
45
|
+
const manifestPath = resolve(root, id, "manifest.json");
|
|
46
|
+
let metadata;
|
|
47
|
+
try {
|
|
48
|
+
metadata = lstatSync(manifestPath);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw new ProfileManifestError(`profile ${id} manifest is missing`);
|
|
52
|
+
}
|
|
53
|
+
if (!metadata.isFile() || metadata.isSymbolicLink()) {
|
|
54
|
+
throw new ProfileManifestError(`profile ${id} manifest must be a regular file`);
|
|
55
|
+
}
|
|
56
|
+
let parsed;
|
|
57
|
+
try {
|
|
58
|
+
parsed = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new ProfileManifestError(`profile ${id} manifest is invalid JSON: ${error instanceof Error ? error.message : error}`);
|
|
62
|
+
}
|
|
63
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
64
|
+
throw new ProfileManifestError(`profile ${id} manifest must be an object`);
|
|
65
|
+
}
|
|
66
|
+
const value = parsed;
|
|
67
|
+
assertExactFields(value, MANIFEST_FIELDS, `profile ${id} manifest`);
|
|
68
|
+
if (value.schemaVersion !== 1 || value.id !== id || !Number.isInteger(value.version) || Number(value.version) < 1) {
|
|
69
|
+
throw new ProfileManifestError(`profile ${id} manifest has invalid schema, id, or version`);
|
|
70
|
+
}
|
|
71
|
+
if ((id === "core" && value.extends !== undefined) || (id === "ja" && value.extends !== "core")) {
|
|
72
|
+
throw new ProfileManifestError(`profile ${id} has invalid inheritance`);
|
|
73
|
+
}
|
|
74
|
+
if (!Array.isArray(value.assets))
|
|
75
|
+
throw new ProfileManifestError(`profile ${id} assets must be an array`);
|
|
76
|
+
const assets = value.assets.map((entry, index) => {
|
|
77
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
78
|
+
throw new ProfileManifestError(`profile ${id} asset ${index} must be an object`);
|
|
79
|
+
}
|
|
80
|
+
const asset = entry;
|
|
81
|
+
assertExactFields(asset, ASSET_FIELDS, `profile ${id} asset ${index}`);
|
|
82
|
+
if (typeof asset.source !== "string" || typeof asset.target !== "string" || typeof asset.sha256 !== "string") {
|
|
83
|
+
throw new ProfileManifestError(`profile ${id} asset ${index} fields must be strings`);
|
|
84
|
+
}
|
|
85
|
+
const sourceParts = safeRelativePath(asset.source, `profile ${id} asset source`);
|
|
86
|
+
if (sourceParts[0] !== "assets")
|
|
87
|
+
throw new ProfileManifestError(`profile ${id} asset source must be below assets/`);
|
|
88
|
+
validateTarget(asset.target);
|
|
89
|
+
if (!SHA256_RE.test(asset.sha256))
|
|
90
|
+
throw new ProfileManifestError(`profile ${id} asset has invalid SHA-256`);
|
|
91
|
+
return { source: asset.source, target: asset.target, sha256: asset.sha256 };
|
|
92
|
+
});
|
|
93
|
+
return {
|
|
94
|
+
schemaVersion: 1,
|
|
95
|
+
id,
|
|
96
|
+
version: Number(value.version),
|
|
97
|
+
...(value.extends === "core" ? { extends: "core" } : {}),
|
|
98
|
+
assets,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function loadOwnAssets(root, manifest) {
|
|
102
|
+
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
103
|
+
return manifest.assets.map((asset) => {
|
|
104
|
+
const sourcePath = resolve(root, manifest.id, ...asset.source.split("/"));
|
|
105
|
+
const expectedParent = resolve(root, manifest.id, dirname(asset.source));
|
|
106
|
+
if (dirname(sourcePath) !== expectedParent)
|
|
107
|
+
throw new ProfileManifestError(`profile ${manifest.id} asset escaped its root`);
|
|
108
|
+
let metadata;
|
|
109
|
+
try {
|
|
110
|
+
metadata = lstatSync(sourcePath);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
throw new ProfileManifestError(`profile ${manifest.id} asset is missing: ${asset.source}`);
|
|
114
|
+
}
|
|
115
|
+
if (!metadata.isFile() || metadata.isSymbolicLink()) {
|
|
116
|
+
throw new ProfileManifestError(`profile ${manifest.id} asset must be a regular file: ${asset.source}`);
|
|
117
|
+
}
|
|
118
|
+
const bytes = readFileSync(sourcePath);
|
|
119
|
+
try {
|
|
120
|
+
decoder.decode(bytes);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
throw new ProfileManifestError(`profile ${manifest.id} asset is not valid UTF-8: ${asset.source}`);
|
|
124
|
+
}
|
|
125
|
+
if (bytes.includes(0))
|
|
126
|
+
throw new ProfileManifestError(`profile ${manifest.id} asset contains NUL bytes: ${asset.source}`);
|
|
127
|
+
if (sha256(bytes) !== asset.sha256) {
|
|
128
|
+
throw new ProfileManifestError(`profile ${manifest.id} asset digest mismatch: ${asset.source}`);
|
|
129
|
+
}
|
|
130
|
+
return { target: asset.target, sha256: asset.sha256, bytes };
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
export function loadProfileFromRoot(root, id) {
|
|
134
|
+
const manifest = readManifest(root, id);
|
|
135
|
+
const inherited = manifest.extends === "core" ? loadProfileFromRoot(root, "core").assets : [];
|
|
136
|
+
const assets = [...inherited, ...loadOwnAssets(root, manifest)].sort((left, right) => left.target.localeCompare(right.target));
|
|
137
|
+
const targets = new Set();
|
|
138
|
+
for (const asset of assets) {
|
|
139
|
+
if (targets.has(asset.target))
|
|
140
|
+
throw new ProfileManifestError(`duplicate resolved profile target: ${asset.target}`);
|
|
141
|
+
targets.add(asset.target);
|
|
142
|
+
}
|
|
143
|
+
const canonical = JSON.stringify({
|
|
144
|
+
profile: id,
|
|
145
|
+
profileVersion: manifest.version,
|
|
146
|
+
targets: assets.map((asset) => ({ target: asset.target, sha256: asset.sha256 })),
|
|
147
|
+
});
|
|
148
|
+
return { id, version: manifest.version, manifestSha256: sha256(canonical), assets };
|
|
149
|
+
}
|
|
150
|
+
export function loadBundledProfile(id) {
|
|
151
|
+
return loadProfileFromRoot(fileURLToPath(new URL("./profiles/", import.meta.url)), id);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/resume.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type AsyncOperation<T> = () => Promise<T>;
|
|
2
|
+
/** Replace Pi's process-level exit hint without changing stock Pi or its session files. */
|
|
3
|
+
export declare function rewriteResumeHint(text: string): string;
|
|
4
|
+
/** Scope the exit-hint adapter to the pinned Pi runtime invocation. */
|
|
5
|
+
export declare function withJouzuResumeHint<T>(operation: AsyncOperation<T>): Promise<T>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=resume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAQ1C,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,uEAAuE;AACvE,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAarF"}
|