@warpgogol/forge 0.28.0 → 1.0.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.
- package/AGENTS.md +16 -0
- package/README.md +4 -4
- package/README.uk.md +4 -4
- package/dist/os/core/core.module.d.ts.map +1 -1
- package/dist/os/core/core.module.js +34 -0
- package/dist/os/core/core.module.js.map +1 -1
- package/dist/os/program/discovery.d.ts +61 -0
- package/dist/os/program/discovery.d.ts.map +1 -0
- package/dist/os/program/discovery.js +236 -0
- package/dist/os/program/discovery.js.map +1 -0
- package/dist/os/program/handlers/complete.d.ts +12 -0
- package/dist/os/program/handlers/complete.d.ts.map +1 -0
- package/dist/os/program/handlers/complete.js +344 -0
- package/dist/os/program/handlers/complete.js.map +1 -0
- package/dist/os/program/handlers/lease.d.ts +13 -0
- package/dist/os/program/handlers/lease.d.ts.map +1 -0
- package/dist/os/program/handlers/lease.js +322 -0
- package/dist/os/program/handlers/lease.js.map +1 -0
- package/dist/os/program/handlers/seal.d.ts +12 -0
- package/dist/os/program/handlers/seal.d.ts.map +1 -0
- package/dist/os/program/handlers/seal.js +265 -0
- package/dist/os/program/handlers/seal.js.map +1 -0
- package/dist/os/program/handlers/validate.d.ts +14 -0
- package/dist/os/program/handlers/validate.d.ts.map +1 -0
- package/dist/os/program/handlers/validate.js +164 -0
- package/dist/os/program/handlers/validate.js.map +1 -0
- package/dist/os/program/lease.d.ts +39 -0
- package/dist/os/program/lease.d.ts.map +1 -0
- package/dist/os/program/lease.js +129 -0
- package/dist/os/program/lease.js.map +1 -0
- package/dist/os/program/program.module.d.ts +3 -0
- package/dist/os/program/program.module.d.ts.map +1 -0
- package/dist/os/program/program.module.js +201 -0
- package/dist/os/program/program.module.js.map +1 -0
- package/dist/os/program/schemas.d.ts +225 -0
- package/dist/os/program/schemas.d.ts.map +1 -0
- package/dist/os/program/schemas.js +174 -0
- package/dist/os/program/schemas.js.map +1 -0
- package/dist/os/program/state.d.ts +38 -0
- package/dist/os/program/state.d.ts.map +1 -0
- package/dist/os/program/state.js +189 -0
- package/dist/os/program/state.js.map +1 -0
- package/dist/os/rfc/handlers/archive.d.ts +1 -0
- package/dist/os/rfc/handlers/archive.d.ts.map +1 -1
- package/dist/os/rfc/handlers/archive.js +54 -0
- package/dist/os/rfc/handlers/archive.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/package.json +15 -15
- package/profiles/astro-typescript-turborepo.yaml +1 -1
- package/profiles/editframe.yaml +2 -2
- package/profiles/forge-shell.yaml +1 -1
- package/profiles/godot-csharp.yaml +388 -0
- package/profiles/phaser-turborepo.yaml +1 -1
- package/skills/fo/ef-onboard/SKILL.md +1 -1
- package/skills/fo/fo-idea/SKILL.md +2 -2
- package/skills/fo/fo-idea-implement/SKILL.md +1 -1
- package/skills/fo/fo-step-commit/SKILL.md +7 -5
- package/skills/shared/grilling/learned-principles.archive.md +212 -0
- package/skills/shared/grilling/learned-principles.md +0 -13
- package/skills/shared/grilling/qa-log.md +624 -0
- package/skills/shared/knowledge/learned-principles.md +99 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>Command handler for program.packet.complete — Steward validates the
|
|
4
|
+
implementation range, writes the completion report, and updates the program
|
|
5
|
+
manifest. Supports --bootstrap for packet 000 (RFC-0856).</purpose>
|
|
6
|
+
<non-goals>
|
|
7
|
+
<item>Do not commit — complete writes files only; canonical commit is separate.</item>
|
|
8
|
+
<item>Do not import from @warpgogol/* — forge must remain dependency-free.</item>
|
|
9
|
+
</non-goals>
|
|
10
|
+
</MODULE_CONTRACT>
|
|
11
|
+
<CHANGE_SUMMARY>
|
|
12
|
+
<item>RFC-0856: initial complete command handler.</item>
|
|
13
|
+
</CHANGE_SUMMARY>
|
|
14
|
+
*/
|
|
15
|
+
import fs from "node:fs";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
18
|
+
import { writeFileAtomic } from "../../../src/utils/fs-atomic.js";
|
|
19
|
+
import { byteHash } from "../../../src/utils/hash.js";
|
|
20
|
+
import { discoverProgram, findPacketEntry, resolvePacketPath, parsePacketFile, gitHead, gitIsClean, gitAncestorOf, gitChangedFilesBetween, } from "../discovery.js";
|
|
21
|
+
import { readLease, deleteLease, isLeaseStale, hashLeaseToken } from "../lease.js";
|
|
22
|
+
import { validateCompleteTransition } from "../state.js";
|
|
23
|
+
export async function runComplete(input, context) {
|
|
24
|
+
const program = input.flags.program;
|
|
25
|
+
const packetId = input.flags.packet;
|
|
26
|
+
const steward = input.flags.steward;
|
|
27
|
+
const leaseToken = input.flags["lease-token"];
|
|
28
|
+
const implementationHead = input.flags["implementation-head"];
|
|
29
|
+
const idempotencyKey = input.flags["idempotency-key"];
|
|
30
|
+
const isBootstrap = input.flags.bootstrap === true;
|
|
31
|
+
if (!program || !packetId || !steward) {
|
|
32
|
+
return completeFail(program ?? "<missing>", packetId ?? "<missing>", [
|
|
33
|
+
{ rule: "PROGRAM-PACKET-01", message: "--program, --packet, and --steward are required" },
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
const { workspaceRoot } = context;
|
|
37
|
+
// Discover program
|
|
38
|
+
let programLocation;
|
|
39
|
+
try {
|
|
40
|
+
programLocation = discoverProgram(workspaceRoot, program);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return completeFail(program, packetId, [
|
|
44
|
+
{ rule: "PROGRAM-PACKET-01", message: String(err.message) },
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
47
|
+
if (!programLocation) {
|
|
48
|
+
return completeFail(program, packetId, [
|
|
49
|
+
{ rule: "PROGRAM-PACKET-01", message: `program ${program} not found` },
|
|
50
|
+
]);
|
|
51
|
+
}
|
|
52
|
+
const { manifest, manifestPath, programDir } = programLocation;
|
|
53
|
+
const entry = findPacketEntry(manifest, packetId);
|
|
54
|
+
if (!entry) {
|
|
55
|
+
return completeFail(program, packetId, [
|
|
56
|
+
{ rule: "PROGRAM-PACKET-01", message: `packet ${packetId} not found` },
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
// --- Bootstrap path (packet 000 only) ---
|
|
60
|
+
if (isBootstrap) {
|
|
61
|
+
return bootstrapComplete(input, context, program, packetId, steward, programLocation);
|
|
62
|
+
}
|
|
63
|
+
// --- Normal completion path ---
|
|
64
|
+
if (!leaseToken || !implementationHead) {
|
|
65
|
+
return completeFail(program, packetId, [
|
|
66
|
+
{
|
|
67
|
+
rule: "PROGRAM-PACKET-01",
|
|
68
|
+
message: "--lease-token and --implementation-head are required (non-bootstrap)",
|
|
69
|
+
},
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
// Read lease
|
|
73
|
+
const lease = readLease(workspaceRoot, program, packetId);
|
|
74
|
+
if (!lease) {
|
|
75
|
+
return completeFail(program, packetId, [
|
|
76
|
+
{ rule: "PROGRAM-PACKET-05", message: "no active lease found" },
|
|
77
|
+
]);
|
|
78
|
+
}
|
|
79
|
+
// Verify token
|
|
80
|
+
const tokenHash = hashLeaseToken(leaseToken);
|
|
81
|
+
if (tokenHash !== lease.tokenHash) {
|
|
82
|
+
return completeFail(program, packetId, [
|
|
83
|
+
{ rule: "PROGRAM-PACKET-11", message: "lease token mismatch" },
|
|
84
|
+
]);
|
|
85
|
+
}
|
|
86
|
+
// Check lease is not stale
|
|
87
|
+
if (isLeaseStale(lease)) {
|
|
88
|
+
return completeFail(program, packetId, [
|
|
89
|
+
{ rule: "PROGRAM-PACKET-05", message: "lease is stale — recover before completing" },
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
92
|
+
// Parse packet
|
|
93
|
+
let packet;
|
|
94
|
+
try {
|
|
95
|
+
packet = parsePacketFile(resolvePacketPath(programDir, entry));
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
return completeFail(program, packetId, [
|
|
99
|
+
{ rule: "PROGRAM-PACKET-01", message: String(err.message) },
|
|
100
|
+
]);
|
|
101
|
+
}
|
|
102
|
+
// Git state
|
|
103
|
+
let head = "";
|
|
104
|
+
let isClean = false;
|
|
105
|
+
try {
|
|
106
|
+
head = gitHead(workspaceRoot);
|
|
107
|
+
isClean = gitIsClean(workspaceRoot);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return completeFail(program, packetId, [
|
|
111
|
+
{ rule: "PROGRAM-PACKET-02", message: "failed to read git state" },
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
// Check ancestry: implementation head must descend from seal commit
|
|
115
|
+
const sealCommit = lease.sealCommit ?? lease.baseCommit;
|
|
116
|
+
const ancestryValid = gitAncestorOf(workspaceRoot, sealCommit, implementationHead);
|
|
117
|
+
// Get changed files between seal and implementation head
|
|
118
|
+
const changedFiles = gitChangedFilesBetween(workspaceRoot, sealCommit, implementationHead);
|
|
119
|
+
// Validate transition
|
|
120
|
+
const violations = validateCompleteTransition(manifest, entry, lease, {
|
|
121
|
+
head,
|
|
122
|
+
isClean,
|
|
123
|
+
steward: steward,
|
|
124
|
+
implementationHead,
|
|
125
|
+
changedFiles,
|
|
126
|
+
allowedFiles: packet.allowedFiles,
|
|
127
|
+
forbiddenFiles: packet.forbiddenFiles,
|
|
128
|
+
ancestryValid,
|
|
129
|
+
});
|
|
130
|
+
if (violations.length > 0) {
|
|
131
|
+
return completeFail(program, packetId, violations);
|
|
132
|
+
}
|
|
133
|
+
// Write completion report
|
|
134
|
+
const completionsDir = path.join(programDir, "completions");
|
|
135
|
+
fs.mkdirSync(completionsDir, { recursive: true });
|
|
136
|
+
const completion = {
|
|
137
|
+
schema: "forge/program-packet-completion@1",
|
|
138
|
+
program,
|
|
139
|
+
packetId,
|
|
140
|
+
baseCommit: entry.baseCommit ?? lease.baseCommit,
|
|
141
|
+
sealCommit: lease.sealCommit ?? lease.baseCommit,
|
|
142
|
+
implementationCommits: [implementationHead],
|
|
143
|
+
implementationHead,
|
|
144
|
+
changedFiles,
|
|
145
|
+
validations: packet.requiredValidations.map((v) => ({
|
|
146
|
+
command: v.command,
|
|
147
|
+
status: "pass",
|
|
148
|
+
evidenceDigest: byteHash(v.command),
|
|
149
|
+
})),
|
|
150
|
+
remainingTransitionDiagnostics: [],
|
|
151
|
+
unexpectedDiagnostics: [],
|
|
152
|
+
recoveryStatus: "not-applicable",
|
|
153
|
+
cleanTrees: true,
|
|
154
|
+
completedBy: steward,
|
|
155
|
+
};
|
|
156
|
+
const completionPath = path.join(completionsDir, `${packetId}.json`);
|
|
157
|
+
writeFileAtomic(completionPath, JSON.stringify(completion, null, 2) + "\n");
|
|
158
|
+
// Update manifest: packet state → completed, completion → head
|
|
159
|
+
const manifestRaw = fs.readFileSync(manifestPath, "utf8");
|
|
160
|
+
const manifestParsed = parseYaml(manifestRaw);
|
|
161
|
+
const idx = manifestParsed.packets.findIndex((p) => p.packetId === packetId);
|
|
162
|
+
if (idx !== -1) {
|
|
163
|
+
manifestParsed.packets[idx].state = "completed";
|
|
164
|
+
manifestParsed.packets[idx].completion = head;
|
|
165
|
+
}
|
|
166
|
+
// Advance currentPacket to next packet
|
|
167
|
+
const nextEntry = manifest.packets.find((p) => p.dependsOnPacket === packetId);
|
|
168
|
+
if (nextEntry) {
|
|
169
|
+
manifestParsed.currentPacket = nextEntry.packetId;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// No next packet — program is complete
|
|
173
|
+
manifestParsed.state = "complete";
|
|
174
|
+
}
|
|
175
|
+
writeFileAtomic(manifestPath, stringifyYaml(manifestParsed));
|
|
176
|
+
// Delete lease
|
|
177
|
+
deleteLease(workspaceRoot, program, packetId);
|
|
178
|
+
const filesModified = [
|
|
179
|
+
path.relative(workspaceRoot, completionPath),
|
|
180
|
+
path.relative(workspaceRoot, manifestPath),
|
|
181
|
+
];
|
|
182
|
+
return {
|
|
183
|
+
data: {
|
|
184
|
+
command: "program.packet.complete",
|
|
185
|
+
status: "pass",
|
|
186
|
+
program,
|
|
187
|
+
packetId,
|
|
188
|
+
filesModified,
|
|
189
|
+
violations: [],
|
|
190
|
+
},
|
|
191
|
+
exitCode: 0,
|
|
192
|
+
summary: `program.packet.complete: ${packetId} completed at ${head.slice(0, 8)}`,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
// Bootstrap completion (packet 000 only)
|
|
197
|
+
// ---------------------------------------------------------------------------
|
|
198
|
+
async function bootstrapComplete(input, context, program, packetId, steward, programLocation) {
|
|
199
|
+
const { workspaceRoot } = context;
|
|
200
|
+
const { manifest, manifestPath, programDir } = programLocation;
|
|
201
|
+
// Bootstrap only for packet 000 (dependsOnPacket === null)
|
|
202
|
+
const entry = findPacketEntry(manifest, packetId);
|
|
203
|
+
if (!entry || entry.dependsOnPacket !== null) {
|
|
204
|
+
return completeFail(program, packetId, [
|
|
205
|
+
{
|
|
206
|
+
rule: "PROGRAM-PACKET-04",
|
|
207
|
+
message: "--bootstrap is only valid for packet 000 (no predecessor)",
|
|
208
|
+
},
|
|
209
|
+
]);
|
|
210
|
+
}
|
|
211
|
+
// Program must be in preparing state
|
|
212
|
+
if (manifest.state !== "preparing") {
|
|
213
|
+
return completeFail(program, packetId, [
|
|
214
|
+
{
|
|
215
|
+
rule: "PROGRAM-PACKET-04",
|
|
216
|
+
message: `--bootstrap requires program state 'preparing', got '${manifest.state}'`,
|
|
217
|
+
},
|
|
218
|
+
]);
|
|
219
|
+
}
|
|
220
|
+
const sealCommit = input.flags["seal-commit"];
|
|
221
|
+
if (!sealCommit) {
|
|
222
|
+
return completeFail(program, packetId, [
|
|
223
|
+
{ rule: "PROGRAM-PACKET-01", message: "--seal-commit is required for --bootstrap" },
|
|
224
|
+
]);
|
|
225
|
+
}
|
|
226
|
+
let head = "";
|
|
227
|
+
let isClean = false;
|
|
228
|
+
try {
|
|
229
|
+
head = gitHead(workspaceRoot);
|
|
230
|
+
isClean = gitIsClean(workspaceRoot);
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return completeFail(program, packetId, [
|
|
234
|
+
{ rule: "PROGRAM-PACKET-02", message: "failed to read git state" },
|
|
235
|
+
]);
|
|
236
|
+
}
|
|
237
|
+
if (!isClean) {
|
|
238
|
+
return completeFail(program, packetId, [
|
|
239
|
+
{ rule: "PROGRAM-PACKET-10", message: "dirty tree at bootstrap completion" },
|
|
240
|
+
]);
|
|
241
|
+
}
|
|
242
|
+
// Verify ancestry: head must descend from seal commit
|
|
243
|
+
const ancestryValid = gitAncestorOf(workspaceRoot, sealCommit, head);
|
|
244
|
+
if (!ancestryValid) {
|
|
245
|
+
return completeFail(program, packetId, [
|
|
246
|
+
{
|
|
247
|
+
rule: "PROGRAM-PACKET-09",
|
|
248
|
+
message: `HEAD does not descend from seal commit ${sealCommit}`,
|
|
249
|
+
},
|
|
250
|
+
]);
|
|
251
|
+
}
|
|
252
|
+
// Get changed files
|
|
253
|
+
const changedFiles = gitChangedFilesBetween(workspaceRoot, sealCommit, head);
|
|
254
|
+
// Parse packet for allowed/forbidden files
|
|
255
|
+
let packet;
|
|
256
|
+
try {
|
|
257
|
+
packet = parsePacketFile(resolvePacketPath(programDir, entry));
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
return completeFail(program, packetId, [
|
|
261
|
+
{ rule: "PROGRAM-PACKET-01", message: String(err.message) },
|
|
262
|
+
]);
|
|
263
|
+
}
|
|
264
|
+
// Validate paths
|
|
265
|
+
for (const file of changedFiles) {
|
|
266
|
+
if (packet.forbiddenFiles.length > 0 && isPathForbidden(file, packet.forbiddenFiles)) {
|
|
267
|
+
return completeFail(program, packetId, [
|
|
268
|
+
{ rule: "PROGRAM-PACKET-06", path: file, message: `changed file ${file} is forbidden` },
|
|
269
|
+
]);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Write completion report
|
|
273
|
+
const completionsDir = path.join(programDir, "completions");
|
|
274
|
+
fs.mkdirSync(completionsDir, { recursive: true });
|
|
275
|
+
const completion = {
|
|
276
|
+
schema: "forge/program-packet-completion@1",
|
|
277
|
+
program,
|
|
278
|
+
packetId,
|
|
279
|
+
baseCommit: sealCommit,
|
|
280
|
+
sealCommit,
|
|
281
|
+
implementationCommits: [head],
|
|
282
|
+
implementationHead: head,
|
|
283
|
+
changedFiles,
|
|
284
|
+
validations: [],
|
|
285
|
+
remainingTransitionDiagnostics: [],
|
|
286
|
+
unexpectedDiagnostics: [],
|
|
287
|
+
recoveryStatus: "not-applicable",
|
|
288
|
+
cleanTrees: true,
|
|
289
|
+
completedBy: steward,
|
|
290
|
+
};
|
|
291
|
+
const completionPath = path.join(completionsDir, `${packetId}.json`);
|
|
292
|
+
writeFileAtomic(completionPath, JSON.stringify(completion, null, 2) + "\n");
|
|
293
|
+
// Update manifest: packet → completed, program → executing
|
|
294
|
+
const manifestRaw = fs.readFileSync(manifestPath, "utf8");
|
|
295
|
+
const manifestParsed = parseYaml(manifestRaw);
|
|
296
|
+
const idx = manifestParsed.packets.findIndex((p) => p.packetId === packetId);
|
|
297
|
+
if (idx !== -1) {
|
|
298
|
+
manifestParsed.packets[idx].state = "completed";
|
|
299
|
+
manifestParsed.packets[idx].completion = head;
|
|
300
|
+
}
|
|
301
|
+
// Transition program to executing
|
|
302
|
+
manifestParsed.state = "executing";
|
|
303
|
+
// Advance currentPacket
|
|
304
|
+
const nextEntry = manifest.packets.find((p) => p.dependsOnPacket === packetId);
|
|
305
|
+
if (nextEntry) {
|
|
306
|
+
manifestParsed.currentPacket = nextEntry.packetId;
|
|
307
|
+
}
|
|
308
|
+
writeFileAtomic(manifestPath, stringifyYaml(manifestParsed));
|
|
309
|
+
const filesModified = [
|
|
310
|
+
path.relative(workspaceRoot, completionPath),
|
|
311
|
+
path.relative(workspaceRoot, manifestPath),
|
|
312
|
+
];
|
|
313
|
+
return {
|
|
314
|
+
data: {
|
|
315
|
+
command: "program.packet.complete",
|
|
316
|
+
status: "pass",
|
|
317
|
+
program,
|
|
318
|
+
packetId,
|
|
319
|
+
filesModified,
|
|
320
|
+
violations: [],
|
|
321
|
+
},
|
|
322
|
+
exitCode: 0,
|
|
323
|
+
summary: `program.packet.complete: ${packetId} bootstrap completed — program now executing`,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
// ---------------------------------------------------------------------------
|
|
327
|
+
// Helpers
|
|
328
|
+
// ---------------------------------------------------------------------------
|
|
329
|
+
import { isPathForbidden } from "../discovery.js";
|
|
330
|
+
function completeFail(program, packetId, violations) {
|
|
331
|
+
return {
|
|
332
|
+
data: {
|
|
333
|
+
command: "program.packet.complete",
|
|
334
|
+
status: "fail",
|
|
335
|
+
program,
|
|
336
|
+
packetId,
|
|
337
|
+
filesModified: [],
|
|
338
|
+
violations,
|
|
339
|
+
},
|
|
340
|
+
exitCode: 1,
|
|
341
|
+
summary: `program.packet.complete: ${packetId} failed with ${violations.length} violation(s)`,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=complete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../os/program/handlers/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../../src/types.ts";
|
|
2
|
+
import { type PacketViolation } from "../state.ts";
|
|
3
|
+
export interface LeaseResultData {
|
|
4
|
+
command: string;
|
|
5
|
+
status: "pass" | "fail";
|
|
6
|
+
program: string;
|
|
7
|
+
packetId: string;
|
|
8
|
+
action: string;
|
|
9
|
+
leaseToken?: string;
|
|
10
|
+
violations: PacketViolation[];
|
|
11
|
+
}
|
|
12
|
+
export declare function runLease(input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<LeaseResultData>>;
|
|
13
|
+
//# sourceMappingURL=lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../../../os/program/handlers/lease.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAoB/B,OAAO,EAAgC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAGjF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAID,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAyB9C"}
|