@forgeax/engine-pack 0.1.31 → 0.1.33

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 (40) hide show
  1. package/README.md +2 -2
  2. package/dist/build.d.ts +1 -1
  3. package/dist/build.d.ts.map +1 -1
  4. package/dist/build.mjs +252 -22
  5. package/dist/build.mjs.map +1 -1
  6. package/dist/cli-asset.d.ts +63 -0
  7. package/dist/cli-asset.d.ts.map +1 -1
  8. package/dist/cli-asset.mjs +142 -4
  9. package/dist/cli-asset.mjs.map +1 -1
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/native-cooker-registry.d.ts.map +1 -1
  12. package/dist/native-cooker.mjs +13 -1
  13. package/dist/native-cooker.mjs.map +1 -1
  14. package/dist/pack-authoring-node.d.ts +6 -0
  15. package/dist/pack-authoring-node.d.ts.map +1 -1
  16. package/dist/pack-authoring-node.mjs +230 -16
  17. package/dist/pack-authoring-node.mjs.map +1 -1
  18. package/dist/pack-authoring.d.ts +26 -0
  19. package/dist/pack-authoring.d.ts.map +1 -1
  20. package/dist/pack-authoring.mjs.map +1 -1
  21. package/dist/runtime-publication.d.ts +8 -0
  22. package/dist/runtime-publication.d.ts.map +1 -1
  23. package/dist/scanner.d.ts +1 -1
  24. package/dist/scanner.mjs +5 -5
  25. package/dist/scanner.mjs.map +1 -1
  26. package/dist/scriptable-pack-node.mjs.map +1 -1
  27. package/dist/scriptable-pack.mjs.map +1 -1
  28. package/package.json +2 -2
  29. package/src/__tests__/cli.unit.test.ts +87 -0
  30. package/src/__tests__/native-cooker-registry.test.ts +16 -0
  31. package/src/__tests__/pack-authoring-gateway.unit.test.ts +120 -1
  32. package/src/__tests__/pack.unit.test.ts +6 -6
  33. package/src/__tests__/runtime-publication.unit.test.ts +27 -1
  34. package/src/build.ts +2 -0
  35. package/src/cli-asset.ts +227 -5
  36. package/src/native-cooker-registry.ts +14 -1
  37. package/src/pack-authoring-node.ts +278 -13
  38. package/src/pack-authoring.ts +26 -0
  39. package/src/runtime-publication.ts +44 -0
  40. package/src/scanner.ts +5 -5
@@ -1,10 +1,67 @@
1
1
  #!/usr/bin/env node
2
+ import { type ScanSourceDeclaration } from './scanner.js';
2
3
  export { runAtlas } from './atlas/run-atlas.js';
3
4
  export interface PackEntry {
4
5
  readonly guid: string;
5
6
  readonly kind: string;
6
7
  readonly sourcePath: string;
7
8
  readonly name?: string;
9
+ readonly sourceKey?: string;
10
+ readonly sourceIndex?: number;
11
+ readonly sourceRevision?: string;
12
+ }
13
+ export interface AssetVerificationReport {
14
+ readonly schemaVersion: 'asset-verification-v1';
15
+ readonly root: string;
16
+ /** The bounded source scope used for this read-only report. */
17
+ readonly scope: {
18
+ readonly sourceCount: number;
19
+ readonly assetCount: number;
20
+ readonly sourcePaths: readonly string[];
21
+ readonly omittedSourceCount: number;
22
+ readonly assetLimit: number;
23
+ readonly truncated: boolean;
24
+ readonly scriptablePackSourceCount: number;
25
+ readonly scriptablePackSources: readonly {
26
+ readonly sourcePath: string;
27
+ readonly packageId: string;
28
+ readonly output: 'unproduced';
29
+ readonly reason: 'producer-not-run';
30
+ }[];
31
+ readonly omittedScriptablePackSourceCount: number;
32
+ };
33
+ readonly assets: readonly {
34
+ readonly guid: string;
35
+ readonly type: string;
36
+ readonly source: {
37
+ readonly path: string;
38
+ readonly format: 'meta.json' | 'pack.json' | 'pack.ts';
39
+ readonly revision?: string;
40
+ readonly role: 'author';
41
+ };
42
+ readonly output: {
43
+ readonly status: 'produced' | 'unproduced' | 'unknown';
44
+ readonly availability: 'available' | 'missing' | 'unknown';
45
+ readonly freshness: 'unknown';
46
+ readonly packagePath?: string;
47
+ readonly artifactPaths?: readonly string[];
48
+ };
49
+ readonly dependencies: readonly string[];
50
+ readonly producer: {
51
+ readonly state: 'not-run' | 'published' | 'unknown';
52
+ };
53
+ readonly name?: string;
54
+ readonly sourceKey?: string;
55
+ readonly sourceIndex?: number;
56
+ }[];
57
+ readonly summary: {
58
+ readonly assetCount: number;
59
+ readonly emittedAssetCount: number;
60
+ readonly materialCount: number;
61
+ readonly unproducedAssetCount: number;
62
+ readonly unknownAssetCount: number;
63
+ readonly unmaterializedScriptablePackCount: number;
64
+ };
8
65
  }
9
66
  interface AssetCtx {
10
67
  readonly stdoutWrite: (line: string) => void;
@@ -15,8 +72,14 @@ interface AssetCtx {
15
72
  export declare function scanEntries(roots: readonly string[], ctx: AssetCtx): Promise<{
16
73
  ok: true;
17
74
  value: PackEntry[];
75
+ declarations: ReadonlyMap<string, ScanSourceDeclaration>;
18
76
  } | {
19
77
  ok: false;
20
78
  }>;
21
79
  export declare function runCliAsset(rest: string[], ctx: AssetCtx): Promise<number>;
80
+ /** Build the bounded provenance projection from one validated scanner pass. */
81
+ export declare function createAssetVerificationReport(root: string, result: {
82
+ readonly value: readonly PackEntry[];
83
+ readonly declarations: ReadonlyMap<string, ScanSourceDeclaration>;
84
+ }): AssetVerificationReport;
22
85
  //# sourceMappingURL=cli-asset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-asset.d.ts","sourceRoot":"","sources":["../src/cli-asset.ts"],"names":[],"mappings":";AA+BA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,QAAQ;IAChB,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,mFAAmF;IACnF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAwBD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,CAgF3D;AAyBD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAiChF"}
1
+ {"version":3,"file":"cli-asset.d.ts","sourceRoot":"","sources":["../src/cli-asset.ts"],"names":[],"mappings":"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"}
@@ -9767,6 +9767,7 @@ function parsePackV2(value) {
9767
9767
  }
9768
9768
 
9769
9769
  // src/cli-asset.ts
9770
+ var ASSET_VERIFY_LIMIT = 256;
9770
9771
  function isRecord3(value) {
9771
9772
  return value !== null && typeof value === "object" && !Array.isArray(value);
9772
9773
  }
@@ -9805,6 +9806,8 @@ async function scanEntries(roots, ctx) {
9805
9806
  guid: asset.guid,
9806
9807
  kind: asset.kind,
9807
9808
  sourcePath,
9809
+ sourceIndex: asset.sourceIndex,
9810
+ sourceRevision: declaration.sourceRevision,
9808
9811
  ...name === void 0 ? {} : { name }
9809
9812
  });
9810
9813
  }
@@ -9834,6 +9837,9 @@ async function scanEntries(roots, ctx) {
9834
9837
  guid: inventoryEntry.guid,
9835
9838
  kind: inventoryEntry.kind,
9836
9839
  sourcePath: inventoryEntry.sourcePath,
9840
+ sourceRevision: inventoryEntry.sourceRevision,
9841
+ ...inventoryEntry.sourceKey === void 0 ? {} : { sourceKey: inventoryEntry.sourceKey },
9842
+ ...inventoryEntry.sourceIndex === void 0 ? {} : { sourceIndex: inventoryEntry.sourceIndex },
9837
9843
  ...name === void 0 ? {} : { name },
9838
9844
  ...declaration?.format === "pack.json" && declaration.value.schemaVersion === "3.0.0" && inventoryEntry.sourceKey !== void 0 && name === void 0 ? { name: inventoryEntry.sourceKey } : {}
9839
9845
  });
@@ -9841,7 +9847,7 @@ async function scanEntries(roots, ctx) {
9841
9847
  entries.sort(
9842
9848
  (left, right) => `${left.sourcePath}:${left.guid}`.localeCompare(`${right.sourcePath}:${right.guid}`)
9843
9849
  );
9844
- return { ok: true, value: entries };
9850
+ return { ok: true, value: entries, declarations: result.value.declarations };
9845
9851
  }
9846
9852
  function helpBody() {
9847
9853
  return [
@@ -9851,6 +9857,7 @@ function helpBody() {
9851
9857
  " forgeax asset list --root <project> --json",
9852
9858
  " forgeax asset inspect --subject <guid> --root <project> --json",
9853
9859
  " forgeax asset verify --root <project> --json",
9860
+ " output is bounded to 256 assets and includes the scanned source scope",
9854
9861
  " forgeax asset inspect --subject <source.pack.ts> --root <project> --json",
9855
9862
  " forgeax asset atlas --input <glob> --name <prefix> --root <project> [--output <dir>]",
9856
9863
  "",
@@ -10014,6 +10021,81 @@ async function runLookup(rest, ctx) {
10014
10021
  ctx.stdoutWrite(JSON.stringify(entry));
10015
10022
  return 0;
10016
10023
  }
10024
+ function artifactPaths(value) {
10025
+ if (!isRecord3(value)) return [];
10026
+ return Object.values(value).flatMap(
10027
+ (descriptor) => isRecord3(descriptor) && typeof descriptor.path === "string" ? [descriptor.path] : []
10028
+ );
10029
+ }
10030
+ function unknownVerificationFacts() {
10031
+ return {
10032
+ dependencies: [],
10033
+ output: {
10034
+ status: "unknown",
10035
+ availability: "unknown",
10036
+ freshness: "unknown"
10037
+ },
10038
+ producer: { state: "unknown" }
10039
+ };
10040
+ }
10041
+ function sourceVerificationFacts(entry, declaration) {
10042
+ if (declaration === void 0) return unknownVerificationFacts();
10043
+ if (declaration.format === "meta.json" || declaration.format === "pack.ts") {
10044
+ return {
10045
+ dependencies: [],
10046
+ output: {
10047
+ status: "unproduced",
10048
+ availability: "unknown",
10049
+ freshness: "unknown"
10050
+ },
10051
+ producer: { state: "not-run" }
10052
+ };
10053
+ }
10054
+ if (declaration.value.schemaVersion === "3.0.0") {
10055
+ const parsed = parsePackSourceJson(declaration.value);
10056
+ if (!parsed.ok || parsed.value.format !== "direct" || entry.sourceKey === void 0) {
10057
+ return {
10058
+ dependencies: [],
10059
+ output: {
10060
+ status: "unproduced",
10061
+ availability: "unknown",
10062
+ freshness: "unknown"
10063
+ },
10064
+ producer: { state: "not-run" }
10065
+ };
10066
+ }
10067
+ const asset2 = parsed.value.assets[entry.sourceKey];
10068
+ return {
10069
+ dependencies: asset2?.refs ?? [],
10070
+ output: {
10071
+ status: "unproduced",
10072
+ availability: "unknown",
10073
+ freshness: "unknown"
10074
+ },
10075
+ producer: { state: "not-run" }
10076
+ };
10077
+ }
10078
+ const asset = declaration.value.assets.find(
10079
+ (candidate) => candidate.guid.toLowerCase() === entry.guid.toLowerCase()
10080
+ );
10081
+ if (asset === void 0 || asset.execution !== "direct" && asset.execution !== "cooked") {
10082
+ return unknownVerificationFacts();
10083
+ }
10084
+ return {
10085
+ dependencies: asset.refs,
10086
+ output: {
10087
+ // A validated legacy package row is the only published evidence this
10088
+ // offline command reads. Artifact bytes and cook receipts remain
10089
+ // producer-owned, so availability/freshness stay explicitly unknown.
10090
+ status: "produced",
10091
+ availability: "unknown",
10092
+ freshness: "unknown",
10093
+ packagePath: entry.sourcePath,
10094
+ ...asset.artifacts === void 0 ? {} : { artifactPaths: artifactPaths(asset.artifacts) }
10095
+ },
10096
+ producer: { state: "published" }
10097
+ };
10098
+ }
10017
10099
  async function runVerify(rest, ctx) {
10018
10100
  if (rest.some((value) => value === "--guid")) return runEvidence(rest, ctx);
10019
10101
  try {
@@ -10035,10 +10117,66 @@ async function runVerify(rest, ctx) {
10035
10117
  const cwd = ctx.cwd ?? process.cwd();
10036
10118
  const result = await scanEntries([cwd], ctx);
10037
10119
  if (!result.ok) return 1;
10038
- const materialCount = result.value.filter((e) => e.kind === "material").length;
10039
- ctx.stdoutWrite(`material-validated: ${materialCount}`);
10120
+ ctx.stdoutWrite(JSON.stringify(createAssetVerificationReport(cwd, result)));
10040
10121
  return 0;
10041
10122
  }
10123
+ function createAssetVerificationReport(root, result) {
10124
+ const declarations = result.declarations;
10125
+ const sourcePaths = [...declarations.keys()].sort();
10126
+ const scriptablePackSources = [...declarations.values()].filter(
10127
+ (declaration) => declaration.format === "pack.ts"
10128
+ ).sort((left, right) => left.sourcePath.localeCompare(right.sourcePath));
10129
+ const emittedEntries = result.value.slice(0, ASSET_VERIFY_LIMIT);
10130
+ const facts = emittedEntries.map(
10131
+ (entry) => sourceVerificationFacts(entry, declarations.get(entry.sourcePath))
10132
+ );
10133
+ const materialCount = result.value.filter((e) => e.kind === "material").length;
10134
+ return {
10135
+ schemaVersion: "asset-verification-v1",
10136
+ root,
10137
+ scope: {
10138
+ sourceCount: sourcePaths.length,
10139
+ assetCount: result.value.length,
10140
+ sourcePaths: sourcePaths.slice(0, ASSET_VERIFY_LIMIT),
10141
+ omittedSourceCount: Math.max(0, sourcePaths.length - ASSET_VERIFY_LIMIT),
10142
+ assetLimit: ASSET_VERIFY_LIMIT,
10143
+ truncated: result.value.length > ASSET_VERIFY_LIMIT,
10144
+ scriptablePackSourceCount: scriptablePackSources.length,
10145
+ scriptablePackSources: scriptablePackSources.slice(0, ASSET_VERIFY_LIMIT).map((source) => ({
10146
+ sourcePath: source.sourcePath,
10147
+ packageId: source.value.packageId,
10148
+ output: "unproduced",
10149
+ reason: "producer-not-run"
10150
+ })),
10151
+ omittedScriptablePackSourceCount: Math.max(
10152
+ 0,
10153
+ scriptablePackSources.length - ASSET_VERIFY_LIMIT
10154
+ )
10155
+ },
10156
+ assets: emittedEntries.map((entry, index) => ({
10157
+ guid: entry.guid,
10158
+ type: entry.kind,
10159
+ source: {
10160
+ path: entry.sourcePath,
10161
+ format: declarations.get(entry.sourcePath)?.format ?? "pack.json",
10162
+ role: "author",
10163
+ ...entry.sourceRevision === void 0 ? {} : { revision: entry.sourceRevision }
10164
+ },
10165
+ ...facts[index],
10166
+ ...entry.name === void 0 ? {} : { name: entry.name },
10167
+ ...entry.sourceKey === void 0 ? {} : { sourceKey: entry.sourceKey },
10168
+ ...entry.sourceIndex === void 0 ? {} : { sourceIndex: entry.sourceIndex }
10169
+ })),
10170
+ summary: {
10171
+ assetCount: result.value.length,
10172
+ emittedAssetCount: emittedEntries.length,
10173
+ materialCount,
10174
+ unproducedAssetCount: facts.filter((value) => value.output.status === "unproduced").length,
10175
+ unknownAssetCount: facts.filter((value) => value.output.status === "unknown").length,
10176
+ unmaterializedScriptablePackCount: scriptablePackSources.length
10177
+ }
10178
+ };
10179
+ }
10042
10180
  function parseEvidenceOptions(rest, ctx) {
10043
10181
  try {
10044
10182
  const parsed = parseArgs({
@@ -10215,6 +10353,6 @@ if (isBinEntry) {
10215
10353
  process.exit(exitCode);
10216
10354
  }
10217
10355
 
10218
- export { runAtlas, runCliAsset, scanEntries };
10356
+ export { createAssetVerificationReport, runAtlas, runCliAsset, scanEntries };
10219
10357
  //# sourceMappingURL=cli-asset.mjs.map
10220
10358
  //# sourceMappingURL=cli-asset.mjs.map