perttool 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/README.md +66 -28
  3. package/dist/cli.js +41 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/command/actuals-discovery.d.ts.map +1 -1
  6. package/dist/command/actuals-discovery.js +92 -13
  7. package/dist/command/actuals-discovery.js.map +1 -1
  8. package/dist/history/git-probe.d.ts +4 -0
  9. package/dist/history/git-probe.d.ts.map +1 -1
  10. package/dist/history/git-probe.js +23 -14
  11. package/dist/history/git-probe.js.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/schema/registry.d.ts +53 -0
  17. package/dist/schema/registry.d.ts.map +1 -0
  18. package/dist/schema/registry.js +346 -0
  19. package/dist/schema/registry.js.map +1 -0
  20. package/dist/version.d.ts +1 -1
  21. package/dist/version.js +1 -1
  22. package/package.json +5 -2
  23. package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +607 -0
  24. package/schemas/Perttool.AnalysisResult.v4.schema.json +790 -0
  25. package/schemas/Perttool.CheckResult.v3.schema.json +203 -0
  26. package/schemas/Perttool.CliError.v1.schema.json +119 -0
  27. package/schemas/Perttool.CommandHelpResult.v1.schema.json +377 -0
  28. package/schemas/Perttool.Common.v1.schema.json +1893 -0
  29. package/schemas/Perttool.ExportResult.v1.schema.json +96 -0
  30. package/schemas/Perttool.FormatResult.v1.schema.json +82 -0
  31. package/schemas/Perttool.GuideResult.v1.schema.json +138 -0
  32. package/schemas/Perttool.ImportResult.v1.schema.json +111 -0
  33. package/schemas/Perttool.InitResult.v1.schema.json +70 -0
  34. package/schemas/Perttool.MutationResult.v3.schema.json +194 -0
  35. package/schemas/Perttool.NextResult.v5.schema.json +1264 -0
  36. package/schemas/Perttool.OverrideDecision.v1.schema.json +402 -0
  37. package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +283 -0
  38. package/schemas/Perttool.ProjectResult.v3.schema.json +217 -0
  39. package/schemas/Perttool.SchemaResult.v1.schema.json +137 -0
  40. package/schemas/Perttool.UnitMigrationResult.v3.schema.json +343 -0
  41. package/schemas/Perttool.VelocityObservationResult.v1.schema.json +301 -0
@@ -0,0 +1,346 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { TOOL_VERSION } from "../version.js";
3
+ export const JSON_SCHEMA_DIALECT = "https://json-schema.org/draft/2020-12/schema";
4
+ export const JSON_SCHEMA_RESULT_SCHEMA_VERSION = "Perttool.SchemaResult.v1";
5
+ const commandResultSchemaIds = Object.freeze([
6
+ "Perttool.AgentGuidanceResult.v1",
7
+ "Perttool.AnalysisResult.v4",
8
+ "Perttool.CheckResult.v3",
9
+ "Perttool.CliError.v1",
10
+ "Perttool.CommandHelpResult.v1",
11
+ "Perttool.ExportResult.v1",
12
+ "Perttool.FormatResult.v1",
13
+ "Perttool.GuideResult.v1",
14
+ "Perttool.ImportResult.v1",
15
+ "Perttool.InitResult.v1",
16
+ "Perttool.MutationResult.v3",
17
+ "Perttool.NextResult.v5",
18
+ "Perttool.ProjectHistoryResult.v1",
19
+ "Perttool.ProjectResult.v3",
20
+ JSON_SCHEMA_RESULT_SCHEMA_VERSION,
21
+ "Perttool.UnitMigrationResult.v3",
22
+ "Perttool.VelocityObservationResult.v1",
23
+ ]);
24
+ const publicLibraryResultSchemaIds = Object.freeze([
25
+ "Perttool.OverrideDecision.v1",
26
+ ]);
27
+ const commonArtifact = Object.freeze({
28
+ schemaId: "Perttool.Common.v1",
29
+ artifactPath: "schemas/Perttool.Common.v1.schema.json",
30
+ });
31
+ const catalog = Object.freeze([
32
+ ...commandResultSchemaIds.map((schemaId) => ({
33
+ schemaId,
34
+ artifactPath: `schemas/${schemaId}.schema.json`,
35
+ commandResult: true,
36
+ publicLibraryResult: false,
37
+ })),
38
+ ...publicLibraryResultSchemaIds.map((schemaId) => ({
39
+ schemaId,
40
+ artifactPath: `schemas/${schemaId}.schema.json`,
41
+ commandResult: false,
42
+ publicLibraryResult: true,
43
+ })),
44
+ ]
45
+ .sort((left, right) => left.schemaId < right.schemaId
46
+ ? -1
47
+ : left.schemaId > right.schemaId
48
+ ? 1
49
+ : 0)
50
+ .map((entry) => Object.freeze(entry)));
51
+ const byId = new Map(catalog.map((entry) => [entry.schemaId, entry]));
52
+ const loaded = new Map();
53
+ function freezeJson(value) {
54
+ if (Array.isArray(value)) {
55
+ return Object.freeze(value.map(freezeJson));
56
+ }
57
+ if (typeof value === "object" && value !== null) {
58
+ return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, child]) => [key, freezeJson(child)])));
59
+ }
60
+ return value;
61
+ }
62
+ function load(entry) {
63
+ const cached = loaded.get(entry.schemaId);
64
+ if (cached !== undefined)
65
+ return cached;
66
+ const url = new URL(`../../${entry.artifactPath}`, import.meta.url);
67
+ const parsed = JSON.parse(readFileSync(url, "utf8"));
68
+ if (typeof parsed !== "object" ||
69
+ parsed === null ||
70
+ Array.isArray(parsed) ||
71
+ parsed["$schema"] !== JSON_SCHEMA_DIALECT) {
72
+ throw new Error(`invalid bundled JSON Schema artifact for ${entry.schemaId}`);
73
+ }
74
+ const schema = freezeJson(parsed);
75
+ loaded.set(entry.schemaId, schema);
76
+ return schema;
77
+ }
78
+ function isRecord(value) {
79
+ return typeof value === "object" && value !== null && !Array.isArray(value);
80
+ }
81
+ function schemaIdentity(schema) {
82
+ const identity = schema["$id"];
83
+ if (typeof identity !== "string") {
84
+ throw new Error("bundled JSON Schema artifact has no $id");
85
+ }
86
+ return identity;
87
+ }
88
+ function pointerToken(value) {
89
+ return value.replaceAll("~", "~0").replaceAll("/", "~1");
90
+ }
91
+ function childPointer(pointer, key) {
92
+ return `${pointer}/${pointerToken(key)}`;
93
+ }
94
+ function isConcreteObjectSchema(value) {
95
+ const type = value["type"];
96
+ const objectType = type === "object" ||
97
+ (Array.isArray(type) && type.includes("object"));
98
+ return objectType && isRecord(value["properties"]);
99
+ }
100
+ function absoluteReference(reference, sourceId) {
101
+ return new URL(reference, sourceId).href;
102
+ }
103
+ function outlineValue(value, sourceId, pointer, layerRoot) {
104
+ if (Array.isArray(value)) {
105
+ return value.map((item, index) => outlineValue(item, sourceId, childPointer(pointer, String(index)), false));
106
+ }
107
+ if (!isRecord(value))
108
+ return value;
109
+ if (!layerRoot && isConcreteObjectSchema(value)) {
110
+ return Object.freeze({
111
+ $ref: `${sourceId}#${pointer}`,
112
+ });
113
+ }
114
+ return Object.fromEntries(Object.entries(value)
115
+ .filter(([key]) => key !== "$defs")
116
+ .map(([key, child]) => [
117
+ key,
118
+ key === "$ref" && typeof child === "string"
119
+ ? absoluteReference(child, sourceId)
120
+ : outlineValue(child, sourceId, childPointer(pointer, key), false),
121
+ ]));
122
+ }
123
+ function outlineProjectionId(sourceId, pointer) {
124
+ const identity = new URL(sourceId);
125
+ identity.searchParams.set("view", "outline");
126
+ if (pointer !== "")
127
+ identity.searchParams.set("ref", pointer);
128
+ return identity.href;
129
+ }
130
+ function outlineProjection(source, selected, pointer) {
131
+ const sourceId = schemaIdentity(source);
132
+ const projection = outlineValue(selected, sourceId, pointer, true);
133
+ if (!isRecord(projection)) {
134
+ throw new Error(`JSON Schema outline target is not an object: ${pointer}`);
135
+ }
136
+ const title = typeof selected["title"] === "string"
137
+ ? selected["title"]
138
+ : `${String(source["title"] ?? sourceId)} ${pointer || "#"}`;
139
+ const body = Object.fromEntries(Object.entries(projection).filter(([key]) => key !== "$schema" && key !== "$id" && key !== "title"));
140
+ return freezeJson({
141
+ $schema: JSON_SCHEMA_DIALECT,
142
+ $id: outlineProjectionId(sourceId, pointer),
143
+ title,
144
+ ...body,
145
+ });
146
+ }
147
+ function decodeJsonPointer(fragment) {
148
+ let pointer;
149
+ try {
150
+ pointer = decodeURIComponent(fragment);
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ if (pointer === "")
156
+ return Object.freeze([]);
157
+ if (!pointer.startsWith("/"))
158
+ return null;
159
+ const tokens = [];
160
+ for (const encoded of pointer.slice(1).split("/")) {
161
+ if (/~(?:[^01]|$)/u.test(encoded))
162
+ return null;
163
+ tokens.push(encoded.replaceAll("~1", "/").replaceAll("~0", "~"));
164
+ }
165
+ return Object.freeze(tokens);
166
+ }
167
+ function resolvePointer(schema, tokens) {
168
+ let current = schema;
169
+ for (const token of tokens) {
170
+ if (Array.isArray(current)) {
171
+ if (!/^(?:0|[1-9][0-9]*)$/u.test(token))
172
+ return null;
173
+ current = current[Number(token)];
174
+ }
175
+ else if (isRecord(current) && Object.hasOwn(current, token)) {
176
+ current = current[token];
177
+ }
178
+ else {
179
+ return null;
180
+ }
181
+ }
182
+ return isRecord(current) ? current : null;
183
+ }
184
+ function resolveOutlineReference(selectedRoot, reference) {
185
+ const selectedId = schemaIdentity(selectedRoot);
186
+ let target;
187
+ try {
188
+ target = new URL(reference, selectedId);
189
+ }
190
+ catch {
191
+ return null;
192
+ }
193
+ const fragment = target.hash.slice(1);
194
+ target.hash = "";
195
+ const common = load(commonArtifact);
196
+ const commonId = schemaIdentity(common);
197
+ const targetSource = target.href === selectedId
198
+ ? selectedRoot
199
+ : target.href === commonId
200
+ ? common
201
+ : null;
202
+ if (targetSource === null || fragment === "")
203
+ return null;
204
+ const tokens = decodeJsonPointer(fragment);
205
+ if (tokens === null)
206
+ return null;
207
+ const selected = resolvePointer(targetSource, tokens);
208
+ if (selected === null)
209
+ return null;
210
+ return Object.freeze({
211
+ source: targetSource,
212
+ selected,
213
+ pointer: decodeURIComponent(fragment),
214
+ });
215
+ }
216
+ export function getJsonSchemaCatalog() {
217
+ return catalog;
218
+ }
219
+ export function getJsonSchema(schemaId) {
220
+ const entry = byId.get(schemaId);
221
+ return entry === undefined ? null : load(entry);
222
+ }
223
+ export function getJsonSchemaResult(schemaId, options = {}) {
224
+ const explicitView = options.view !== undefined;
225
+ const view = options.view ?? "full";
226
+ if (view !== "full" && view !== "outline") {
227
+ throw new TypeError(`unknown JSON Schema view: ${String(view)}`);
228
+ }
229
+ if (schemaId === null && (explicitView || options.ref !== undefined)) {
230
+ throw new TypeError("JSON Schema view selection requires a schema identity");
231
+ }
232
+ if (options.ref !== undefined && view !== "outline") {
233
+ throw new TypeError("JSON Schema reference selection requires outline view");
234
+ }
235
+ const selected = schemaId === null ? null : byId.get(schemaId);
236
+ let diagnostics = schemaId !== null && selected === undefined
237
+ ? Object.freeze([Object.freeze({
238
+ code: "PTSCH-001",
239
+ severity: "error",
240
+ message: `unknown JSON Schema identity: ${schemaId}`,
241
+ data: Object.freeze({ schemaId }),
242
+ })])
243
+ : Object.freeze([]);
244
+ let schema = null;
245
+ if (selected !== undefined && selected !== null) {
246
+ const complete = load(selected);
247
+ if (view === "full") {
248
+ schema = complete;
249
+ }
250
+ else if (options.ref === undefined) {
251
+ schema = outlineProjection(complete, complete, "");
252
+ }
253
+ else {
254
+ const resolved = resolveOutlineReference(complete, options.ref);
255
+ if (resolved === null) {
256
+ diagnostics = Object.freeze([Object.freeze({
257
+ code: "PTSCH-002",
258
+ severity: "error",
259
+ message: `unavailable bundled JSON Schema reference: ${options.ref}`,
260
+ data: Object.freeze({ schemaId: selected.schemaId, ref: options.ref }),
261
+ })]);
262
+ }
263
+ else {
264
+ schema = outlineProjection(resolved.source, resolved.selected, resolved.pointer);
265
+ }
266
+ }
267
+ }
268
+ return Object.freeze({
269
+ schemaVersion: JSON_SCHEMA_RESULT_SCHEMA_VERSION,
270
+ cliContractVersion: 6,
271
+ toolVersion: TOOL_VERSION,
272
+ operation: "schema",
273
+ ok: diagnostics.length === 0,
274
+ query: Object.freeze({
275
+ schemaId,
276
+ ...(explicitView ? { view } : {}),
277
+ ...(options.ref === undefined ? {} : { ref: options.ref }),
278
+ }),
279
+ schemas: catalog,
280
+ schema,
281
+ diagnostics,
282
+ });
283
+ }
284
+ export function jsonSchemaResultToJson(result) {
285
+ return {
286
+ schema_version: result.schemaVersion,
287
+ cli_contract_version: result.cliContractVersion,
288
+ tool_version: result.toolVersion,
289
+ operation: result.operation,
290
+ ok: result.ok,
291
+ query: {
292
+ schema_id: result.query.schemaId,
293
+ ...(result.query.view === undefined ? {} : { view: result.query.view }),
294
+ ...(result.query.ref === undefined ? {} : { ref: result.query.ref }),
295
+ },
296
+ schemas: result.schemas.map((entry) => ({
297
+ schema_id: entry.schemaId,
298
+ artifact_path: entry.artifactPath,
299
+ command_result: entry.commandResult,
300
+ public_library_result: entry.publicLibraryResult,
301
+ })),
302
+ schema: result.schema,
303
+ diagnostics: result.diagnostics.map((diagnostic) => ({
304
+ code: diagnostic.code,
305
+ severity: diagnostic.severity,
306
+ message: diagnostic.message,
307
+ data: {
308
+ schema_id: diagnostic.data.schemaId,
309
+ ...("ref" in diagnostic.data ? { ref: diagnostic.data.ref } : {}),
310
+ },
311
+ })),
312
+ };
313
+ }
314
+ export function serializeJsonSchemaResult(result) {
315
+ return `${JSON.stringify(jsonSchemaResultToJson(result), null, 2)}\n`;
316
+ }
317
+ export function renderJsonSchemaResult(result) {
318
+ if (!result.ok) {
319
+ return `${result.diagnostics
320
+ .map(({ code, severity, message }) => `${code} ${severity}: ${message}`)
321
+ .join("\n")}\n`;
322
+ }
323
+ if (result.query.schemaId !== null) {
324
+ const entry = result.schemas.find(({ schemaId }) => schemaId === result.query.schemaId);
325
+ return [
326
+ `Schema: ${entry.schemaId}`,
327
+ `Artifact: ${entry.artifactPath}`,
328
+ `Dialect: ${JSON_SCHEMA_DIALECT}`,
329
+ `Command result: ${entry.commandResult}`,
330
+ `Public library result: ${entry.publicLibraryResult}`,
331
+ ...(result.query.view === undefined
332
+ ? []
333
+ : [`View: ${result.query.view}`]),
334
+ ...(result.query.ref === undefined
335
+ ? []
336
+ : [`Reference: ${result.query.ref}`]),
337
+ "",
338
+ ].join("\n");
339
+ }
340
+ return `${[
341
+ `perttool JSON Schema catalog (${JSON_SCHEMA_DIALECT})`,
342
+ "",
343
+ ...result.schemas.map((entry) => ` ${entry.schemaId} ${entry.artifactPath}`),
344
+ ].join("\n")}\n`;
345
+ }
346
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/schema/registry.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const TOOL_VERSION = "0.5.0";
1
+ export declare const TOOL_VERSION = "0.5.2";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const TOOL_VERSION = "0.5.0";
1
+ export const TOOL_VERSION = "0.5.2";
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "perttool",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Document-based PERT/CPM and resource scheduling CLI",
5
5
  "keywords": [
6
6
  "pert",
@@ -26,6 +26,7 @@
26
26
  "type": "module",
27
27
  "files": [
28
28
  "dist",
29
+ "schemas",
29
30
  "CHANGELOG.md"
30
31
  ],
31
32
  "bin": {
@@ -37,7 +38,8 @@
37
38
  ".": {
38
39
  "types": "./dist/index.d.ts",
39
40
  "import": "./dist/index.js"
40
- }
41
+ },
42
+ "./schemas/*": "./schemas/*"
41
43
  },
42
44
  "engines": {
43
45
  "node": ">=22"
@@ -57,6 +59,7 @@
57
59
  },
58
60
  "devDependencies": {
59
61
  "@types/node": "22.20.1",
62
+ "ajv": "^8.20.0",
60
63
  "typescript": "7.0.2"
61
64
  }
62
65
  }