@x12i/pagenti-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/config.d.ts +13 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +121 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/hash.d.ts +15 -0
  6. package/dist/hash.d.ts.map +1 -0
  7. package/dist/hash.js +34 -0
  8. package/dist/hash.js.map +1 -0
  9. package/dist/index.d.ts +11 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +11 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lockfile.d.ts +8 -0
  14. package/dist/lockfile.d.ts.map +1 -0
  15. package/dist/lockfile.js +41 -0
  16. package/dist/lockfile.js.map +1 -0
  17. package/dist/manifest.d.ts +9 -0
  18. package/dist/manifest.d.ts.map +1 -0
  19. package/dist/manifest.js +27 -0
  20. package/dist/manifest.js.map +1 -0
  21. package/dist/pack.d.ts +8 -0
  22. package/dist/pack.d.ts.map +1 -0
  23. package/dist/pack.js +109 -0
  24. package/dist/pack.js.map +1 -0
  25. package/dist/package-name.d.ts +4 -0
  26. package/dist/package-name.d.ts.map +1 -0
  27. package/dist/package-name.js +11 -0
  28. package/dist/package-name.js.map +1 -0
  29. package/dist/package-spec.d.ts +3 -0
  30. package/dist/package-spec.d.ts.map +1 -0
  31. package/dist/package-spec.js +49 -0
  32. package/dist/package-spec.js.map +1 -0
  33. package/dist/records.d.ts +52 -0
  34. package/dist/records.d.ts.map +1 -0
  35. package/dist/records.js +175 -0
  36. package/dist/records.js.map +1 -0
  37. package/dist/resolve.d.ts +2 -0
  38. package/dist/resolve.d.ts.map +1 -0
  39. package/dist/resolve.js +11 -0
  40. package/dist/resolve.js.map +1 -0
  41. package/dist/validate.d.ts +10 -0
  42. package/dist/validate.d.ts.map +1 -0
  43. package/dist/validate.js +137 -0
  44. package/dist/validate.js.map +1 -0
  45. package/package.json +41 -0
@@ -0,0 +1,13 @@
1
+ import type { InstallTargetConfig } from "@x12i/pagenti-types";
2
+ export declare const PAGENTIRC_FILENAME = ".pagentirc";
3
+ export type PagentiConfig = {
4
+ installTarget: InstallTargetConfig;
5
+ };
6
+ export declare function readPagentircFile(cwd?: string): Promise<Record<string, string>>;
7
+ export declare function writePagentircFile(cwd: string, values: Record<string, string>): Promise<void>;
8
+ export declare function getPagentircValue(key: string, cwd?: string): Promise<string | undefined>;
9
+ export declare function setPagentircValue(key: string, value: string, cwd?: string): Promise<void>;
10
+ export declare function deletePagentircValue(key: string, cwd?: string): Promise<boolean>;
11
+ export declare function readPagentiConfig(cwd?: string): Promise<PagentiConfig>;
12
+ export declare function mergeInstallTarget(config: PagentiConfig, overrides: InstallTargetConfig): InstallTargetConfig;
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AA6DF,wBAAsB,iBAAiB,CACrC,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAUjC;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,SAAgB,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,GAAG,SAAgB,GAClB,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,SAAgB,GAClB,OAAO,CAAC,aAAa,CAAC,CAkBxB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,mBAAmB,GAC7B,mBAAmB,CAYrB"}
package/dist/config.js ADDED
@@ -0,0 +1,121 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export const PAGENTIRC_FILENAME = ".pagentirc";
4
+ function formatIni(values) {
5
+ return `${Object.entries(values)
6
+ .map(([key, value]) => `${key}=${value}`)
7
+ .join("\n")}\n`;
8
+ }
9
+ function parseIni(content) {
10
+ const values = {};
11
+ for (const rawLine of content.split(/\r?\n/)) {
12
+ const line = rawLine.trim();
13
+ if (!line || line.startsWith("#") || line.startsWith(";"))
14
+ continue;
15
+ const eq = line.indexOf("=");
16
+ if (eq === -1)
17
+ continue;
18
+ const key = line.slice(0, eq).trim();
19
+ let value = line.slice(eq + 1).trim();
20
+ if ((value.startsWith('"') && value.endsWith('"')) ||
21
+ (value.startsWith("'") && value.endsWith("'"))) {
22
+ value = value.slice(1, -1);
23
+ }
24
+ values[key] = value;
25
+ }
26
+ return values;
27
+ }
28
+ function readEnvTarget() {
29
+ const target = {};
30
+ if (process.env.PAGENTI_APP)
31
+ target.appId = process.env.PAGENTI_APP;
32
+ if (process.env.PAGENTI_AGENT)
33
+ target.agentId = process.env.PAGENTI_AGENT;
34
+ if (process.env.PAGENTI_STORE)
35
+ target.storeId = process.env.PAGENTI_STORE;
36
+ if (process.env.PAGENTI_DOMAIN) {
37
+ target.domainIds = process.env.PAGENTI_DOMAIN.split(",")
38
+ .map((part) => part.trim())
39
+ .filter(Boolean);
40
+ }
41
+ return target;
42
+ }
43
+ function targetFromValues(values) {
44
+ const target = {};
45
+ if (values.app)
46
+ target.appId = values.app;
47
+ if (values.agent)
48
+ target.agentId = values.agent;
49
+ if (values.store)
50
+ target.storeId = values.store;
51
+ if (values.domain) {
52
+ target.domainIds = values.domain
53
+ .split(",")
54
+ .map((part) => part.trim())
55
+ .filter(Boolean);
56
+ }
57
+ return target;
58
+ }
59
+ export async function readPagentircFile(cwd = process.cwd()) {
60
+ try {
61
+ const raw = await readFile(join(cwd, PAGENTIRC_FILENAME), "utf8");
62
+ return parseIni(raw);
63
+ }
64
+ catch (error) {
65
+ if (error.code === "ENOENT") {
66
+ return {};
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ export async function writePagentircFile(cwd, values) {
72
+ await writeFile(join(cwd, PAGENTIRC_FILENAME), formatIni(values));
73
+ }
74
+ export async function getPagentircValue(key, cwd = process.cwd()) {
75
+ const values = await readPagentircFile(cwd);
76
+ return values[key];
77
+ }
78
+ export async function setPagentircValue(key, value, cwd = process.cwd()) {
79
+ const values = await readPagentircFile(cwd);
80
+ values[key] = value;
81
+ await writePagentircFile(cwd, values);
82
+ }
83
+ export async function deletePagentircValue(key, cwd = process.cwd()) {
84
+ const values = await readPagentircFile(cwd);
85
+ if (!(key in values))
86
+ return false;
87
+ delete values[key];
88
+ await writePagentircFile(cwd, values);
89
+ return true;
90
+ }
91
+ export async function readPagentiConfig(cwd = process.cwd()) {
92
+ let fileValues = {};
93
+ try {
94
+ const raw = await readFile(join(cwd, PAGENTIRC_FILENAME), "utf8");
95
+ fileValues = parseIni(raw);
96
+ }
97
+ catch (error) {
98
+ if (error.code !== "ENOENT") {
99
+ throw error;
100
+ }
101
+ }
102
+ return {
103
+ installTarget: {
104
+ ...readEnvTarget(),
105
+ ...targetFromValues(fileValues),
106
+ },
107
+ };
108
+ }
109
+ export function mergeInstallTarget(config, overrides) {
110
+ return {
111
+ appId: overrides.appId ?? config.installTarget.appId,
112
+ agentId: overrides.agentId ?? config.installTarget.agentId,
113
+ storeId: overrides.storeId ?? config.installTarget.storeId,
114
+ domainIds: overrides.domainIds?.length
115
+ ? overrides.domainIds
116
+ : config.installTarget.domainIds,
117
+ workspaceId: overrides.workspaceId ?? config.installTarget.workspaceId,
118
+ tenantId: overrides.tenantId ?? config.installTarget.tenantId,
119
+ };
120
+ }
121
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/hash.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ export declare function sha256(content: string | Buffer): string;
2
+ export declare function sha256File(filePath: string): Promise<string>;
3
+ export declare function filePathHash(path: string): string;
4
+ export declare function compositeItemId(skillCode: string, code: string): string;
5
+ export declare function versionKey(packageName: string, version: string): string;
6
+ export declare function installTargetKey(target: {
7
+ storeId?: string;
8
+ appId?: string;
9
+ agentId?: string;
10
+ domainIds?: string[];
11
+ workspaceId?: string;
12
+ tenantId?: string;
13
+ }): string;
14
+ export declare function installedPackageId(targetKey: string, packageName: string): string;
15
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAUT;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
package/dist/hash.js ADDED
@@ -0,0 +1,34 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile } from "node:fs/promises";
3
+ export function sha256(content) {
4
+ const hash = createHash("sha256").update(content).digest("hex");
5
+ return `sha256:${hash}`;
6
+ }
7
+ export async function sha256File(filePath) {
8
+ const content = await readFile(filePath);
9
+ return sha256(content);
10
+ }
11
+ export function filePathHash(path) {
12
+ return createHash("sha256").update(path).digest("hex").slice(0, 16);
13
+ }
14
+ export function compositeItemId(skillCode, code) {
15
+ return `${skillCode}:${code}`;
16
+ }
17
+ export function versionKey(packageName, version) {
18
+ return `${packageName}:${version}`;
19
+ }
20
+ export function installTargetKey(target) {
21
+ const parts = [
22
+ target.tenantId ?? "",
23
+ target.storeId ?? "",
24
+ target.appId ?? "",
25
+ target.agentId ?? "",
26
+ (target.domainIds ?? []).slice().sort().join(","),
27
+ target.workspaceId ?? "",
28
+ ];
29
+ return parts.join("|");
30
+ }
31
+ export function installedPackageId(targetKey, packageName) {
32
+ return `${targetKey}:${packageName}`;
33
+ }
34
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,UAAU,MAAM,CAAC,OAAwB;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,IAAY;IAC7D,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,OAAe;IAC7D,OAAO,GAAG,WAAW,IAAI,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAOhC;IACC,MAAM,KAAK,GAAG;QACZ,MAAM,CAAC,QAAQ,IAAI,EAAE;QACrB,MAAM,CAAC,OAAO,IAAI,EAAE;QACpB,MAAM,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,CAAC,OAAO,IAAI,EAAE;QACpB,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QACjD,MAAM,CAAC,WAAW,IAAI,EAAE;KACzB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,WAAmB;IAEnB,OAAO,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { readManifest, writeManifest, normalizeManifest, MANIFEST_FILENAME, } from "./manifest.js";
2
+ export { parsePackageName, normalizePackageName } from "./package-name.js";
3
+ export { parsePackageSpec } from "./package-spec.js";
4
+ export { readPagentiConfig, readPagentircFile, writePagentircFile, getPagentircValue, setPagentircValue, deletePagentircValue, mergeInstallTarget, PAGENTIRC_FILENAME, type PagentiConfig, } from "./config.js";
5
+ export { readLockfile, writeLockfile, createEmptyLockfile, upsertLockEntry, removeLockEntry, LOCKFILE_FILENAME, } from "./lockfile.js";
6
+ export { pickResolvedVersion } from "./resolve.js";
7
+ export { sha256, sha256File, filePathHash, compositeItemId, versionKey, installTargetKey, installedPackageId, } from "./hash.js";
8
+ export { validateManifest, normalizeContextDimensions, buildBelongsToRelation, countFilledContextDimensions, } from "./validate.js";
9
+ export { prepareKnowledgeRecords, prepareExecutionRecords, preparePackageFiles, prepareExports, prepareDependencies, preparePackageRecord, prepareVersionRecord, } from "./records.js";
10
+ export { packPackage, resolveExports } from "./pack.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { readManifest, writeManifest, normalizeManifest, MANIFEST_FILENAME, } from "./manifest.js";
2
+ export { parsePackageName, normalizePackageName } from "./package-name.js";
3
+ export { parsePackageSpec } from "./package-spec.js";
4
+ export { readPagentiConfig, readPagentircFile, writePagentircFile, getPagentircValue, setPagentircValue, deletePagentircValue, mergeInstallTarget, PAGENTIRC_FILENAME, } from "./config.js";
5
+ export { readLockfile, writeLockfile, createEmptyLockfile, upsertLockEntry, removeLockEntry, LOCKFILE_FILENAME, } from "./lockfile.js";
6
+ export { pickResolvedVersion } from "./resolve.js";
7
+ export { sha256, sha256File, filePathHash, compositeItemId, versionKey, installTargetKey, installedPackageId, } from "./hash.js";
8
+ export { validateManifest, normalizeContextDimensions, buildBelongsToRelation, countFilledContextDimensions, } from "./validate.js";
9
+ export { prepareKnowledgeRecords, prepareExecutionRecords, preparePackageFiles, prepareExports, prepareDependencies, preparePackageRecord, prepareVersionRecord, } from "./records.js";
10
+ export { packPackage, resolveExports } from "./pack.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PagentiLockEntry, PagentiLockfile } from "@x12i/pagenti-types";
2
+ export declare const LOCKFILE_FILENAME = "pagenti-lock.json";
3
+ export declare function createEmptyLockfile(): PagentiLockfile;
4
+ export declare function readLockfile(packageDir: string): Promise<PagentiLockfile | null>;
5
+ export declare function writeLockfile(packageDir: string, lockfile: PagentiLockfile): Promise<void>;
6
+ export declare function upsertLockEntry(lockfile: PagentiLockfile, packageName: string, entry: PagentiLockEntry): PagentiLockfile;
7
+ export declare function removeLockEntry(lockfile: PagentiLockfile, packageName: string): PagentiLockfile;
8
+ //# sourceMappingURL=lockfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../src/lockfile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE7E,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,wBAAgB,mBAAmB,IAAI,eAAe,CAKrD;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAUjC;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,gBAAgB,GACtB,eAAe,CAQjB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,MAAM,GAClB,eAAe,CAMjB"}
@@ -0,0 +1,41 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export const LOCKFILE_FILENAME = "pagenti-lock.json";
4
+ export function createEmptyLockfile() {
5
+ return {
6
+ lockfileVersion: 1,
7
+ dependencies: {},
8
+ };
9
+ }
10
+ export async function readLockfile(packageDir) {
11
+ try {
12
+ const raw = await readFile(join(packageDir, LOCKFILE_FILENAME), "utf8");
13
+ return JSON.parse(raw);
14
+ }
15
+ catch (error) {
16
+ if (error.code === "ENOENT") {
17
+ return null;
18
+ }
19
+ throw error;
20
+ }
21
+ }
22
+ export async function writeLockfile(packageDir, lockfile) {
23
+ await writeFile(join(packageDir, LOCKFILE_FILENAME), `${JSON.stringify(lockfile, null, 2)}\n`);
24
+ }
25
+ export function upsertLockEntry(lockfile, packageName, entry) {
26
+ return {
27
+ ...lockfile,
28
+ dependencies: {
29
+ ...lockfile.dependencies,
30
+ [packageName]: entry,
31
+ },
32
+ };
33
+ }
34
+ export function removeLockEntry(lockfile, packageName) {
35
+ const { [packageName]: _removed, ...dependencies } = lockfile.dependencies;
36
+ return {
37
+ ...lockfile,
38
+ dependencies,
39
+ };
40
+ }
41
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../src/lockfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,QAAyB;IAEzB,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EACnC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAyB,EACzB,WAAmB,EACnB,KAAuB;IAEvB,OAAO;QACL,GAAG,QAAQ;QACX,YAAY,EAAE;YACZ,GAAG,QAAQ,CAAC,YAAY;YACxB,CAAC,WAAW,CAAC,EAAE,KAAK;SACrB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAyB,EACzB,WAAmB;IAEnB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC3E,OAAO;QACL,GAAG,QAAQ;QACX,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PagentiManifest } from "@x12i/pagenti-types";
2
+ export declare const MANIFEST_FILENAME = "pagenti.json";
3
+ export declare function readManifest(packageDir: string): Promise<{
4
+ manifest: PagentiManifest;
5
+ manifestPath: string;
6
+ }>;
7
+ export declare function normalizeManifest(manifest: PagentiManifest): PagentiManifest;
8
+ export declare function writeManifest(packageDir: string, manifest: PagentiManifest): Promise<void>;
9
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAK9D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,CAW5E;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,27 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { PAGENTI_MANIFEST_SCHEMA } from "@x12i/pagenti-types";
4
+ export const MANIFEST_FILENAME = "pagenti.json";
5
+ export async function readManifest(packageDir) {
6
+ const manifestPath = join(packageDir, MANIFEST_FILENAME);
7
+ const raw = await readFile(manifestPath, "utf8");
8
+ const manifest = JSON.parse(raw);
9
+ return { manifest, manifestPath };
10
+ }
11
+ export function normalizeManifest(manifest) {
12
+ return {
13
+ ...manifest,
14
+ schemaVersion: PAGENTI_MANIFEST_SCHEMA,
15
+ knowledge: manifest.knowledge ?? [],
16
+ execution: manifest.execution ?? [],
17
+ dependencies: manifest.dependencies ?? {},
18
+ exports: manifest.exports ?? {},
19
+ keywords: manifest.keywords ?? [],
20
+ visibility: manifest.visibility ?? "private",
21
+ };
22
+ }
23
+ export async function writeManifest(packageDir, manifest) {
24
+ const manifestPath = join(packageDir, MANIFEST_FILENAME);
25
+ await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
26
+ }
27
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB;IAElB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IACpD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAyB;IACzD,OAAO;QACL,GAAG,QAAQ;QACX,aAAa,EAAE,uBAAuB;QACtC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;QACnC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;QACnC,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,EAAE;QACzC,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;QAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,SAAS;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,QAAyB;IAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1E,CAAC"}
package/dist/pack.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { PackResult, PagentiManifest } from "@x12i/pagenti-types";
2
+ /**
3
+ * Build a simple gzip-compressed tarball-like artifact (tar.gz via system tar when available,
4
+ * otherwise a gzipped concatenation manifest for local dev).
5
+ */
6
+ export declare function packPackage(packageDir: string, manifest: PagentiManifest, outputDir?: string): Promise<PackResult>;
7
+ export declare function resolveExports(manifest: PagentiManifest): Promise<Record<string, unknown>>;
8
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA+CvE;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,EACzB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CA+CrB;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiBhG"}
package/dist/pack.js ADDED
@@ -0,0 +1,109 @@
1
+ import { createWriteStream } from "node:fs";
2
+ import { mkdir, readdir, readFile, stat } from "node:fs/promises";
3
+ import { join, relative } from "node:path";
4
+ import { pipeline } from "node:stream/promises";
5
+ import { createGzip } from "node:zlib";
6
+ import { sha256File } from "./hash.js";
7
+ import { preparePackageFiles } from "./records.js";
8
+ const PACK_IGNORE = new Set([
9
+ "node_modules",
10
+ ".git",
11
+ "dist",
12
+ ".pagenti",
13
+ ]);
14
+ async function collectFiles(dir, base) {
15
+ const entries = await readdir(dir, { withFileTypes: true });
16
+ const files = [];
17
+ for (const entry of entries) {
18
+ if (PACK_IGNORE.has(entry.name))
19
+ continue;
20
+ const full = join(dir, entry.name);
21
+ if (entry.isDirectory()) {
22
+ files.push(...(await collectFiles(full, base)));
23
+ }
24
+ else if (entry.isFile()) {
25
+ files.push(relative(base, full));
26
+ }
27
+ }
28
+ return files.sort();
29
+ }
30
+ function inferRole(path, manifest) {
31
+ if (path === "pagenti.json")
32
+ return "manifest";
33
+ for (const k of manifest.knowledge ?? []) {
34
+ if (path === k.path.replace(/^\.\//, ""))
35
+ return "knowledge";
36
+ }
37
+ for (const e of manifest.execution ?? []) {
38
+ if (path === e.path.replace(/^\.\//, ""))
39
+ return "execution";
40
+ }
41
+ if (path.startsWith("schemas/"))
42
+ return "schema";
43
+ if (path.startsWith("assets/"))
44
+ return "asset";
45
+ if (/^readme/i.test(path))
46
+ return "readme";
47
+ if (/^license/i.test(path))
48
+ return "license";
49
+ return "example";
50
+ }
51
+ /**
52
+ * Build a simple gzip-compressed tarball-like artifact (tar.gz via system tar when available,
53
+ * otherwise a gzipped concatenation manifest for local dev).
54
+ */
55
+ export async function packPackage(packageDir, manifest, outputDir) {
56
+ const outDir = outputDir ?? join(packageDir, ".pagenti");
57
+ await mkdir(outDir, { recursive: true });
58
+ const artifactName = `${manifest.name.replace(/^@/, "").replace(/\//g, "-")}-${manifest.version}.tgz`;
59
+ const artifactPath = join(outDir, artifactName);
60
+ const filePaths = await collectFiles(packageDir, packageDir);
61
+ const fileEntries = [];
62
+ for (const path of filePaths) {
63
+ const full = join(packageDir, path);
64
+ const info = await stat(full);
65
+ if (!info.isFile())
66
+ continue;
67
+ fileEntries.push({
68
+ path,
69
+ sha256: await sha256File(full),
70
+ role: inferRole(path, manifest),
71
+ });
72
+ }
73
+ const lines = [];
74
+ for (const path of filePaths) {
75
+ const content = await readFile(join(packageDir, path));
76
+ lines.push(JSON.stringify({ path, content: content.toString("base64") }));
77
+ }
78
+ const payload = lines.join("\n");
79
+ await pipeline(async function* () {
80
+ yield Buffer.from(payload);
81
+ }, createGzip(), createWriteStream(artifactPath));
82
+ const artifactHash = await sha256File(artifactPath);
83
+ return {
84
+ artifactPath,
85
+ sha256: artifactHash,
86
+ files: fileEntries.length > 0 ? fileEntries : (await preparePackageFiles(manifest, packageDir)).map((f) => ({
87
+ path: f.path,
88
+ sha256: f.sha256,
89
+ role: f.role,
90
+ })),
91
+ };
92
+ }
93
+ export async function resolveExports(manifest) {
94
+ const exports = { ...(manifest.exports ?? {}) };
95
+ for (const entry of manifest.knowledge ?? []) {
96
+ for (const exportPath of entry.exports ?? []) {
97
+ if (!exports[exportPath]) {
98
+ exports[exportPath] = {
99
+ type: "knowledge",
100
+ catalogId: "pagenti_knowledge",
101
+ code: entry.code,
102
+ skillCode: entry.skillCode,
103
+ };
104
+ }
105
+ }
106
+ }
107
+ return exports;
108
+ }
109
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ParsedPackageName } from "@x12i/pagenti-types";
2
+ export declare function parsePackageName(packageName: string): ParsedPackageName;
3
+ export declare function normalizePackageName(name: string): string;
4
+ //# sourceMappingURL=package-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-name.d.ts","sourceRoot":"","sources":["../src/package-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAMvE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,11 @@
1
+ export function parsePackageName(packageName) {
2
+ const match = /^(@[^/]+)\/(.+)$/.exec(packageName);
3
+ if (match) {
4
+ return { packageName, scope: match[1], name: match[2] };
5
+ }
6
+ return { packageName, scope: null, name: packageName };
7
+ }
8
+ export function normalizePackageName(name) {
9
+ return name.trim();
10
+ }
11
+ //# sourceMappingURL=package-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-name.js","sourceRoot":"","sources":["../src/package-name.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ParsedPackageSpec } from "@x12i/pagenti-types";
2
+ export declare function parsePackageSpec(spec: string): ParsedPackageSpec;
3
+ //# sourceMappingURL=package-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-spec.d.ts","sourceRoot":"","sources":["../src/package-spec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAwBhE"}
@@ -0,0 +1,49 @@
1
+ import { valid as isValidSemver } from "semver";
2
+ import { normalizePackageName } from "./package-name.js";
3
+ export function parsePackageSpec(spec) {
4
+ const trimmed = spec.trim();
5
+ if (!trimmed) {
6
+ throw new Error("Package spec must not be empty");
7
+ }
8
+ if (trimmed.startsWith("@")) {
9
+ const at = trimmed.lastIndexOf("@");
10
+ if (at > 0) {
11
+ const packageName = normalizePackageName(trimmed.slice(0, at));
12
+ const fetchSpec = trimmed.slice(at + 1);
13
+ return buildParsedSpec(packageName, fetchSpec);
14
+ }
15
+ return buildParsedSpec(normalizePackageName(trimmed), "latest");
16
+ }
17
+ const at = trimmed.indexOf("@");
18
+ if (at === -1) {
19
+ return buildParsedSpec(normalizePackageName(trimmed), "latest");
20
+ }
21
+ const packageName = normalizePackageName(trimmed.slice(0, at));
22
+ const fetchSpec = trimmed.slice(at + 1);
23
+ return buildParsedSpec(packageName, fetchSpec);
24
+ }
25
+ function buildParsedSpec(packageName, fetchSpec) {
26
+ if (!fetchSpec || fetchSpec === "latest") {
27
+ return { packageName, fetchSpec: "latest", tag: "latest" };
28
+ }
29
+ if (isValidSemver(fetchSpec, { loose: true })) {
30
+ return {
31
+ packageName,
32
+ fetchSpec,
33
+ version: fetchSpec,
34
+ };
35
+ }
36
+ if (/^[a-zA-Z][a-zA-Z0-9._-]*$/.test(fetchSpec)) {
37
+ return {
38
+ packageName,
39
+ fetchSpec,
40
+ tag: fetchSpec,
41
+ };
42
+ }
43
+ return {
44
+ packageName,
45
+ fetchSpec,
46
+ range: fetchSpec,
47
+ };
48
+ }
49
+ //# sourceMappingURL=package-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-spec.js","sourceRoot":"","sources":["../src/package-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACxC,OAAO,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,eAAe,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACd,OAAO,eAAe,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACxC,OAAO,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CACtB,WAAmB,EACnB,SAAiB;IAEjB,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,WAAW;YACX,SAAS;YACT,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,OAAO;YACL,WAAW;YACX,SAAS;YACT,GAAG,EAAE,SAAS;SACf,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW;QACX,SAAS;QACT,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { PagentiExecutionItem, PagentiKnowledgeItem, PagentiManifest, PagentiPackageDependency, PagentiPackageExport, PagentiPackageFile } from "@x12i/pagenti-types";
2
+ import { filePathHash } from "./hash.js";
3
+ export declare function prepareKnowledgeRecords(manifest: PagentiManifest, packageDir: string): Promise<PagentiKnowledgeItem[]>;
4
+ export declare function prepareExecutionRecords(manifest: PagentiManifest, packageDir: string): Promise<PagentiExecutionItem[]>;
5
+ export declare function preparePackageFiles(manifest: PagentiManifest, packageDir: string): Promise<PagentiPackageFile[]>;
6
+ export declare function prepareExports(manifest: PagentiManifest): PagentiPackageExport[];
7
+ export declare function prepareDependencies(manifest: PagentiManifest): PagentiPackageDependency[];
8
+ export declare function preparePackageRecord(manifest: PagentiManifest): {
9
+ packageName: string;
10
+ scope: string | undefined;
11
+ name: string;
12
+ title: string;
13
+ description: string | undefined;
14
+ visibility: import("@x12i/pagenti-types").PackageVisibility;
15
+ status: "active";
16
+ latestVersion: string;
17
+ keywords: string[];
18
+ };
19
+ export declare function prepareVersionRecord(manifest: PagentiManifest, artifact: {
20
+ sha256: string;
21
+ storageProvider: "gcs" | "local" | "filesystem";
22
+ bucket?: string;
23
+ objectKey?: string;
24
+ localPath?: string;
25
+ }, summary: {
26
+ knowledgeCount: number;
27
+ executionCount: number;
28
+ fileCount: number;
29
+ dependencyCount: number;
30
+ }): {
31
+ packageName: string;
32
+ version: string;
33
+ versionKey: string;
34
+ status: "published";
35
+ visibility: import("@x12i/pagenti-types").PackageVisibility;
36
+ artifact: {
37
+ type: "tarball";
38
+ storageProvider: "gcs" | "local" | "filesystem";
39
+ bucket: string | undefined;
40
+ objectKey: string | undefined;
41
+ localPath: string | undefined;
42
+ sha256: string;
43
+ };
44
+ contentSummary: {
45
+ knowledgeCount: number;
46
+ executionCount: number;
47
+ fileCount: number;
48
+ dependencyCount: number;
49
+ };
50
+ };
51
+ export { filePathHash };
52
+ //# sourceMappingURL=records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EAAmB,YAAY,EAAsB,MAAM,WAAW,CAAC;AAgB9E,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA8BjC;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA8BjC;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA2C/B;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,eAAe,GACxB,oBAAoB,EAAE,CAsBxB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,GACxB,wBAAwB,EAAE,CAW5B;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe;;;;;;;;;;EAa7D;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE;IACR,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,OAAO,EAAE;IACP,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;;;;;;;;;;;;;;;wBAJiB,MAAM;wBACN,MAAM;mBACX,MAAM;yBACA,MAAM;;EAmB1B;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,175 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { CONTENT_CATALOGS, CONTEXT_DIMENSIONS, } from "@x12i/pagenti-types";
4
+ import { buildBelongsToRelation, normalizeContextDimensions, } from "./validate.js";
5
+ import { compositeItemId, filePathHash, sha256, sha256File } from "./hash.js";
6
+ import { parsePackageName } from "./package-name.js";
7
+ function pickContextDimensions(entry) {
8
+ const result = {};
9
+ for (const dim of CONTEXT_DIMENSIONS) {
10
+ const value = entry[dim];
11
+ if (Array.isArray(value) && value.length > 0) {
12
+ result[dim] = value.map(String);
13
+ }
14
+ }
15
+ return result;
16
+ }
17
+ export async function prepareKnowledgeRecords(manifest, packageDir) {
18
+ const records = [];
19
+ for (const raw of manifest.knowledge ?? []) {
20
+ const entry = normalizeContextDimensions(raw);
21
+ const sourcePath = entry.path.replace(/^\.\//, "");
22
+ const fullPath = join(packageDir, sourcePath);
23
+ const body = await readFile(fullPath, "utf8");
24
+ const contentHash = sha256(body);
25
+ records.push({
26
+ code: entry.code,
27
+ title: entry.title,
28
+ skillCode: entry.skillCode,
29
+ summary: entry.summary,
30
+ body,
31
+ guidance: entry.guidance ?? [],
32
+ relations: [buildBelongsToRelation()],
33
+ scope: entry.scope,
34
+ metadata: {
35
+ packageName: manifest.name,
36
+ packageVersion: manifest.version,
37
+ sourcePath: entry.path,
38
+ contentHash,
39
+ },
40
+ ...pickContextDimensions(entry),
41
+ });
42
+ }
43
+ return records;
44
+ }
45
+ export async function prepareExecutionRecords(manifest, packageDir) {
46
+ const records = [];
47
+ for (const raw of manifest.execution ?? []) {
48
+ const entry = normalizeContextDimensions(raw);
49
+ const sourcePath = entry.path.replace(/^\.\//, "");
50
+ const fullPath = join(packageDir, sourcePath);
51
+ const body = await readFile(fullPath, "utf8");
52
+ const contentHash = sha256(body);
53
+ records.push({
54
+ code: entry.code,
55
+ title: entry.title,
56
+ skillCode: entry.skillCode,
57
+ instructions: entry.instructions ?? body,
58
+ prompt: entry.prompt,
59
+ rules: entry.rules,
60
+ relations: [buildBelongsToRelation()],
61
+ scope: entry.scope,
62
+ metadata: {
63
+ packageName: manifest.name,
64
+ packageVersion: manifest.version,
65
+ sourcePath: entry.path,
66
+ contentHash,
67
+ },
68
+ ...pickContextDimensions(entry),
69
+ });
70
+ }
71
+ return records;
72
+ }
73
+ export async function preparePackageFiles(manifest, packageDir) {
74
+ const files = [];
75
+ const manifestPath = join(packageDir, "pagenti.json");
76
+ const manifestContent = await readFile(manifestPath);
77
+ files.push({
78
+ packageName: manifest.name,
79
+ version: manifest.version,
80
+ path: "pagenti.json",
81
+ fileType: "json",
82
+ role: "manifest",
83
+ sha256: sha256(manifestContent),
84
+ });
85
+ for (const entry of manifest.knowledge ?? []) {
86
+ const sourcePath = entry.path.replace(/^\.\//, "");
87
+ files.push({
88
+ packageName: manifest.name,
89
+ version: manifest.version,
90
+ path: sourcePath,
91
+ fileType: "markdown",
92
+ role: "knowledge",
93
+ sha256: await sha256File(join(packageDir, sourcePath)),
94
+ linkedCatalogId: CONTENT_CATALOGS.KNOWLEDGE,
95
+ linkedItemId: compositeItemId(entry.skillCode, entry.code),
96
+ });
97
+ }
98
+ for (const entry of manifest.execution ?? []) {
99
+ const sourcePath = entry.path.replace(/^\.\//, "");
100
+ files.push({
101
+ packageName: manifest.name,
102
+ version: manifest.version,
103
+ path: sourcePath,
104
+ fileType: "markdown",
105
+ role: "execution",
106
+ sha256: await sha256File(join(packageDir, sourcePath)),
107
+ linkedCatalogId: CONTENT_CATALOGS.EXECUTION,
108
+ linkedItemId: compositeItemId(entry.skillCode, entry.code),
109
+ });
110
+ }
111
+ return files;
112
+ }
113
+ export function prepareExports(manifest) {
114
+ const exports = [];
115
+ for (const [exportPath, target] of Object.entries(manifest.exports ?? {})) {
116
+ const itemId = target.skillCode != null
117
+ ? compositeItemId(target.skillCode, target.code)
118
+ : target.code;
119
+ exports.push({
120
+ packageName: manifest.name,
121
+ version: manifest.version,
122
+ exportPath,
123
+ exportType: target.type,
124
+ target: {
125
+ catalogId: target.catalogId,
126
+ itemId,
127
+ },
128
+ });
129
+ }
130
+ return exports;
131
+ }
132
+ export function prepareDependencies(manifest) {
133
+ return Object.entries(manifest.dependencies ?? {}).map(([toPackageName, requestedRange]) => ({
134
+ fromPackageName: manifest.name,
135
+ fromVersion: manifest.version,
136
+ toPackageName,
137
+ requestedRange,
138
+ dependencyType: "runtime",
139
+ optional: false,
140
+ }));
141
+ }
142
+ export function preparePackageRecord(manifest) {
143
+ const parsed = parsePackageName(manifest.name);
144
+ return {
145
+ packageName: manifest.name,
146
+ scope: parsed.scope ?? undefined,
147
+ name: parsed.name,
148
+ title: manifest.title,
149
+ description: manifest.description,
150
+ visibility: manifest.visibility ?? "private",
151
+ status: "active",
152
+ latestVersion: manifest.version,
153
+ keywords: manifest.keywords ?? [],
154
+ };
155
+ }
156
+ export function prepareVersionRecord(manifest, artifact, summary) {
157
+ return {
158
+ packageName: manifest.name,
159
+ version: manifest.version,
160
+ versionKey: `${manifest.name}:${manifest.version}`,
161
+ status: "published",
162
+ visibility: manifest.visibility ?? "private",
163
+ artifact: {
164
+ type: "tarball",
165
+ storageProvider: artifact.storageProvider,
166
+ bucket: artifact.bucket,
167
+ objectKey: artifact.objectKey,
168
+ localPath: artifact.localPath,
169
+ sha256: artifact.sha256,
170
+ },
171
+ contentSummary: summary,
172
+ };
173
+ }
174
+ export { filePathHash };
175
+ //# sourceMappingURL=records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function pickResolvedVersion(requested: string, availableVersions: string[]): string | null;
2
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,MAAM,GAAG,IAAI,CAWf"}
@@ -0,0 +1,11 @@
1
+ import { maxSatisfying, valid as isValidSemver } from "semver";
2
+ export function pickResolvedVersion(requested, availableVersions) {
3
+ const versions = availableVersions.filter((version) => isValidSemver(version, { loose: true }));
4
+ if (versions.length === 0)
5
+ return null;
6
+ if (isValidSemver(requested, { loose: true })) {
7
+ return versions.includes(requested) ? requested : null;
8
+ }
9
+ return maxSatisfying(versions, requested, { loose: true });
10
+ }
11
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE/D,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,iBAA2B;IAE3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACpD,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CACxC,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,OAAO,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type PagentiManifest, type ValidationResult } from "@x12i/pagenti-types";
2
+ export declare function normalizeContextDimensions<T extends Record<string, unknown>>(entry: T): T;
3
+ export declare function validateManifest(manifest: PagentiManifest, packageDir: string): ValidationResult;
4
+ export declare function buildBelongsToRelation(): {
5
+ relationType: string;
6
+ toCatalogId: "knowledge_categories";
7
+ toItemId: "pagenti";
8
+ };
9
+ export declare function countFilledContextDimensions(entry: Record<string, unknown>): number;
10
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAmC7B,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1E,KAAK,EAAE,CAAC,GACP,CAAC,CAWH;AA+FD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAsClB;AAED,wBAAgB,sBAAsB;;;;EAMrC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAKR"}
@@ -0,0 +1,137 @@
1
+ import { CONTEXT_DIMENSIONS, CONTENT_CATALOGS, PAGENTI_CATEGORY_ID, PAGENTI_MANIFEST_SCHEMA, SME_SKILL_CODES, } from "@x12i/pagenti-types";
2
+ import { valid as isValidSemver } from "semver";
3
+ import { existsSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ function issue(path, message, code) {
6
+ return { path, message, code };
7
+ }
8
+ function normalizeToArray(value) {
9
+ if (value === undefined || value === null)
10
+ return undefined;
11
+ if (Array.isArray(value)) {
12
+ return value.every((item) => typeof item === "string")
13
+ ? value
14
+ : undefined;
15
+ }
16
+ return undefined;
17
+ }
18
+ function validateContextDimensions(entry, base, issues) {
19
+ for (const dim of CONTEXT_DIMENSIONS) {
20
+ const value = entry[dim];
21
+ if (value === undefined || value === null)
22
+ continue;
23
+ if (!Array.isArray(value) || !value.every((item) => typeof item === "string")) {
24
+ issues.push(issue(`${base}.${dim}`, "must be string[]", "invalid_type"));
25
+ }
26
+ }
27
+ }
28
+ export function normalizeContextDimensions(entry) {
29
+ const normalized = { ...entry };
30
+ for (const dim of CONTEXT_DIMENSIONS) {
31
+ const value = normalizeToArray(normalized[dim]);
32
+ if (value !== undefined) {
33
+ normalized[dim] = value;
34
+ }
35
+ else {
36
+ delete normalized[dim];
37
+ }
38
+ }
39
+ return normalized;
40
+ }
41
+ function validateSkillCode(skillCode, path, issues) {
42
+ if (!skillCode) {
43
+ issues.push(issue(path, "skillCode is required", "required"));
44
+ return;
45
+ }
46
+ if (!SME_SKILL_CODES.includes(skillCode)) {
47
+ issues.push(issue(path, `skillCode "${skillCode}" is not a valid SME skill code`, "invalid_skill_code"));
48
+ }
49
+ }
50
+ function validateKnowledgeEntry(entry, index, packageDir, issues) {
51
+ const base = `knowledge[${index}]`;
52
+ if (!entry.code)
53
+ issues.push(issue(`${base}.code`, "code is required"));
54
+ if (!entry.title)
55
+ issues.push(issue(`${base}.title`, "title is required"));
56
+ if (!entry.summary)
57
+ issues.push(issue(`${base}.summary`, "summary is required"));
58
+ if (!entry.path)
59
+ issues.push(issue(`${base}.path`, "path is required"));
60
+ validateSkillCode(entry.skillCode, `${base}.skillCode`, issues);
61
+ validateContextDimensions(entry, base, issues);
62
+ const guidance = entry.guidance ?? [];
63
+ if (guidance.length < 1) {
64
+ issues.push(issue(`${base}.guidance`, "at least one guidance item is required", "required"));
65
+ }
66
+ if (entry.path) {
67
+ const resolved = join(packageDir, entry.path.replace(/^\.\//, ""));
68
+ if (!existsSync(resolved)) {
69
+ issues.push(issue(`${base}.path`, `file not found: ${entry.path}`, "missing_file"));
70
+ }
71
+ }
72
+ }
73
+ function validateExecutionEntry(entry, index, packageDir, issues) {
74
+ const base = `execution[${index}]`;
75
+ if (!entry.code)
76
+ issues.push(issue(`${base}.code`, "code is required"));
77
+ if (!entry.title)
78
+ issues.push(issue(`${base}.title`, "title is required"));
79
+ if (!entry.path)
80
+ issues.push(issue(`${base}.path`, "path is required"));
81
+ validateSkillCode(entry.skillCode, `${base}.skillCode`, issues);
82
+ validateContextDimensions(entry, base, issues);
83
+ const hasContent = Boolean(entry.instructions?.trim()) ||
84
+ Boolean(entry.prompt?.trim()) ||
85
+ (entry.rules?.length ?? 0) > 0;
86
+ if (!hasContent) {
87
+ issues.push(issue(base, "instructions, prompt, or rules is required", "required"));
88
+ }
89
+ if (entry.path) {
90
+ const resolved = join(packageDir, entry.path.replace(/^\.\//, ""));
91
+ if (!existsSync(resolved)) {
92
+ issues.push(issue(`${base}.path`, `file not found: ${entry.path}`, "missing_file"));
93
+ }
94
+ }
95
+ }
96
+ export function validateManifest(manifest, packageDir) {
97
+ const issues = [];
98
+ if (manifest.schemaVersion !== PAGENTI_MANIFEST_SCHEMA) {
99
+ issues.push(issue("schemaVersion", `expected ${PAGENTI_MANIFEST_SCHEMA}`, "invalid_schema"));
100
+ }
101
+ if (!manifest.name?.trim()) {
102
+ issues.push(issue("name", "package name is required"));
103
+ }
104
+ else if (!/^(@[\w.-]+\/)?[\w.-]+$/.test(manifest.name)) {
105
+ issues.push(issue("name", "invalid package name format"));
106
+ }
107
+ if (!manifest.version?.trim()) {
108
+ issues.push(issue("version", "version is required"));
109
+ }
110
+ else if (!isValidSemver(manifest.version)) {
111
+ issues.push(issue("version", "version must be valid semver"));
112
+ }
113
+ if (!manifest.title?.trim()) {
114
+ issues.push(issue("title", "title is required"));
115
+ }
116
+ for (const [i, entry] of (manifest.knowledge ?? []).entries()) {
117
+ validateKnowledgeEntry(entry, i, packageDir, issues);
118
+ }
119
+ for (const [i, entry] of (manifest.execution ?? []).entries()) {
120
+ validateExecutionEntry(entry, i, packageDir, issues);
121
+ }
122
+ return { valid: issues.length === 0, issues };
123
+ }
124
+ export function buildBelongsToRelation() {
125
+ return {
126
+ relationType: "belongs_to",
127
+ toCatalogId: CONTENT_CATALOGS.KNOWLEDGE_CATEGORIES,
128
+ toItemId: PAGENTI_CATEGORY_ID,
129
+ };
130
+ }
131
+ export function countFilledContextDimensions(entry) {
132
+ return CONTEXT_DIMENSIONS.filter((dim) => {
133
+ const value = entry[dim];
134
+ return Array.isArray(value) ? value.length > 0 : Boolean(value);
135
+ }).length;
136
+ }
137
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@x12i/pagenti-core",
3
+ "version": "0.1.0",
4
+ "description": "Local package logic for Pagenti: validate, pack, and prepare knowledge and execution records",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/x12i/pagenti.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "engines": {
16
+ "node": ">=20"
17
+ },
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "default": "./dist/index.js"
22
+ }
23
+ },
24
+ "main": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "files": ["dist"],
27
+ "scripts": {
28
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
29
+ "build": "npm run clean && tsc -p tsconfig.json",
30
+ "typecheck": "tsc -p tsconfig.json --noEmit",
31
+ "test": "node --import tsx --test \"test/**/*.test.ts\"",
32
+ "prepublishOnly": "npm run build"
33
+ },
34
+ "dependencies": {
35
+ "@x12i/pagenti-types": "^0.1.0",
36
+ "semver": "^7.7.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/semver": "^7.5.8"
40
+ }
41
+ }