@lucern/pack-host 1.0.37 → 1.0.39
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/dist/contracts.js +0 -2
- package/dist/convex.config.js +0 -2
- package/dist/dependencyResolution.js +0 -2
- package/dist/domain-pack/authoring.core.js +0 -2
- package/dist/domain-pack/authoring.js +0 -2
- package/dist/domain-pack/authoring.validation.js +0 -2
- package/dist/domain-pack/contracts.js +0 -2
- package/dist/domain-pack/index.js +0 -2
- package/dist/domain-pack/ontology/software-entities-v1.js +0 -2
- package/dist/domain-pack/packs/developer-reasoning.js +0 -2
- package/dist/domain-pack/packs/engineering-accelerator-tail.js +0 -2
- package/dist/domain-pack/packs/engineering-accelerator.js +0 -2
- package/dist/domain-pack/packs/index.js +0 -2
- package/dist/domain-pack/shaping.js +0 -2
- package/dist/domain-pack/validation.js +0 -2
- package/dist/domain-pack.js +0 -2
- package/dist/index.js +0 -2
- package/dist/lifecycle.js +0 -2
- package/dist/manifestValidation.js +0 -2
- package/dist/manifests/chat-v1.js +0 -2
- package/dist/manifests/deals-v1.js +0 -2
- package/dist/manifests/decisions-v1.js +0 -2
- package/dist/manifests/documents-v1.js +0 -2
- package/dist/manifests/epistemic-algorithms-v1.js +0 -2
- package/dist/manifests/graph-visualization-v1.js +0 -2
- package/dist/manifests/index.js +0 -2
- package/dist/manifests/news-v1.js +0 -2
- package/dist/manifests/philosophy-mode-v1.js +0 -2
- package/dist/manifests/sprints-v1.js +0 -2
- package/dist/manifests/task-management-v1.js +0 -2
- package/dist/manifests/team-analysis-v1.js +0 -2
- package/dist/manifests/themes-v1.js +0 -2
- package/dist/manifests/user-profiles-v1.js +0 -2
- package/dist/manifests.js +0 -2
- package/dist/namespacePolicy.js +0 -2
- package/dist/proof-attestation.json +1 -1
- package/dist/registry.js +0 -2
- package/dist/runtime.js +0 -2
- package/dist/serviceContracts.js +0 -2
- package/package.json +1 -1
- package/dist/contracts.js.map +0 -1
- package/dist/convex.config.js.map +0 -1
- package/dist/dependencyResolution.js.map +0 -1
- package/dist/domain-pack/authoring.core.js.map +0 -1
- package/dist/domain-pack/authoring.js.map +0 -1
- package/dist/domain-pack/authoring.validation.js.map +0 -1
- package/dist/domain-pack/contracts.js.map +0 -1
- package/dist/domain-pack/index.js.map +0 -1
- package/dist/domain-pack/ontology/software-entities-v1.js.map +0 -1
- package/dist/domain-pack/packs/developer-reasoning.js.map +0 -1
- package/dist/domain-pack/packs/engineering-accelerator-tail.js.map +0 -1
- package/dist/domain-pack/packs/engineering-accelerator.js.map +0 -1
- package/dist/domain-pack/packs/index.js.map +0 -1
- package/dist/domain-pack/shaping.js.map +0 -1
- package/dist/domain-pack/validation.js.map +0 -1
- package/dist/domain-pack.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lifecycle.js.map +0 -1
- package/dist/manifestValidation.js.map +0 -1
- package/dist/manifests/chat-v1.js.map +0 -1
- package/dist/manifests/deals-v1.js.map +0 -1
- package/dist/manifests/decisions-v1.js.map +0 -1
- package/dist/manifests/documents-v1.js.map +0 -1
- package/dist/manifests/epistemic-algorithms-v1.js.map +0 -1
- package/dist/manifests/graph-visualization-v1.js.map +0 -1
- package/dist/manifests/index.js.map +0 -1
- package/dist/manifests/news-v1.js.map +0 -1
- package/dist/manifests/philosophy-mode-v1.js.map +0 -1
- package/dist/manifests/sprints-v1.js.map +0 -1
- package/dist/manifests/task-management-v1.js.map +0 -1
- package/dist/manifests/team-analysis-v1.js.map +0 -1
- package/dist/manifests/themes-v1.js.map +0 -1
- package/dist/manifests/user-profiles-v1.js.map +0 -1
- package/dist/manifests.js.map +0 -1
- package/dist/namespacePolicy.js.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/serviceContracts.js.map +0 -1
package/dist/contracts.js
CHANGED
package/dist/convex.config.js
CHANGED
|
@@ -408,5 +408,3 @@ function parseDomainPackAuthoringManifest(source, format) {
|
|
|
408
408
|
}
|
|
409
409
|
|
|
410
410
|
export { DOMAIN_PACK_MANIFEST_KIND, countManifestArtifacts, defineDomainPackAuthoringManifest, parseDomainPackAuthoringManifest, serializeDomainPackAuthoringManifest };
|
|
411
|
-
//# sourceMappingURL=authoring.core.js.map
|
|
412
|
-
//# sourceMappingURL=authoring.core.js.map
|
|
@@ -2068,5 +2068,3 @@ var publishDomainPackAuthoringManifestSource2 = domainPackAuthoringValidation.pu
|
|
|
2068
2068
|
var createDomainPackAuthoringTools2 = domainPackAuthoringValidation.createDomainPackAuthoringTools;
|
|
2069
2069
|
|
|
2070
2070
|
export { createDomainPackAuthoringTools2 as createDomainPackAuthoringTools, defineDomainPackAuthoringManifest, parseDomainPackAuthoringManifest, previewDomainPackAuthoringManifest2 as previewDomainPackAuthoringManifest, previewDomainPackAuthoringManifestSource2 as previewDomainPackAuthoringManifestSource, publishDomainPackAuthoringManifest2 as publishDomainPackAuthoringManifest, publishDomainPackAuthoringManifestSource2 as publishDomainPackAuthoringManifestSource, serializeDomainPackAuthoringManifest, validateDomainPackAuthoringManifest2 as validateDomainPackAuthoringManifest, validateDomainPackAuthoringManifestSource2 as validateDomainPackAuthoringManifestSource };
|
|
2071
|
-
//# sourceMappingURL=authoring.js.map
|
|
2072
|
-
//# sourceMappingURL=authoring.js.map
|
|
@@ -4002,5 +4002,3 @@ var listShapingContributions = shapingContributionRegistry.list.bind(
|
|
|
4002
4002
|
);
|
|
4003
4003
|
|
|
4004
4004
|
export { DEVELOPER_REASONING_PACK, ENGINEERING_ACCELERATOR_PACK, SOFTWARE_ENTITIES_V1, buildShapingContribution, createDomainPackAuthoringTools2 as createDomainPackAuthoringTools, createShapingContributionRegistry, defineDomainPack, defineDomainPackAuthoringManifest, getDomainPack, getShapingContribution, listDomainPacks, listShapingContributions, parseDomainPackAuthoringManifest, previewDomainPackAuthoringManifest2 as previewDomainPackAuthoringManifest, previewDomainPackAuthoringManifestSource2 as previewDomainPackAuthoringManifestSource, publishDomainPackAuthoringManifest2 as publishDomainPackAuthoringManifest, publishDomainPackAuthoringManifestSource2 as publishDomainPackAuthoringManifestSource, serializeDomainPackAuthoringManifest, validateDomainPack, validateDomainPackAuthoringManifest2 as validateDomainPackAuthoringManifest, validateDomainPackAuthoringManifestSource2 as validateDomainPackAuthoringManifestSource, validateShapingContribution };
|
|
4005
|
-
//# sourceMappingURL=index.js.map
|
|
4006
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -2748,5 +2748,3 @@ var listShapingContributions = shapingContributionRegistry.list.bind(
|
|
|
2748
2748
|
);
|
|
2749
2749
|
|
|
2750
2750
|
export { DEVELOPER_REASONING_PACK, ENGINEERING_ACCELERATOR_PACK, getDomainPack, getShapingContribution, listDomainPacks, listShapingContributions };
|
|
2751
|
-
//# sourceMappingURL=index.js.map
|
|
2752
|
-
//# sourceMappingURL=index.js.map
|
package/dist/domain-pack.js
CHANGED
|
@@ -4002,5 +4002,3 @@ var listShapingContributions = shapingContributionRegistry.list.bind(
|
|
|
4002
4002
|
);
|
|
4003
4003
|
|
|
4004
4004
|
export { DEVELOPER_REASONING_PACK, ENGINEERING_ACCELERATOR_PACK, SOFTWARE_ENTITIES_V1, buildShapingContribution, createDomainPackAuthoringTools2 as createDomainPackAuthoringTools, createShapingContributionRegistry, defineDomainPack, defineDomainPackAuthoringManifest, getDomainPack, getShapingContribution, listDomainPacks, listShapingContributions, parseDomainPackAuthoringManifest, previewDomainPackAuthoringManifest2 as previewDomainPackAuthoringManifest, previewDomainPackAuthoringManifestSource2 as previewDomainPackAuthoringManifestSource, publishDomainPackAuthoringManifest2 as publishDomainPackAuthoringManifest, publishDomainPackAuthoringManifestSource2 as publishDomainPackAuthoringManifestSource, serializeDomainPackAuthoringManifest, validateDomainPack, validateDomainPackAuthoringManifest2 as validateDomainPackAuthoringManifest, validateDomainPackAuthoringManifestSource2 as validateDomainPackAuthoringManifestSource, validateShapingContribution };
|
|
4005
|
-
//# sourceMappingURL=domain-pack.js.map
|
|
4006
|
-
//# sourceMappingURL=domain-pack.js.map
|
package/dist/index.js
CHANGED
|
@@ -5848,5 +5848,3 @@ function evaluateAppPackEnablement(policy = {}) {
|
|
|
5848
5848
|
}
|
|
5849
5849
|
|
|
5850
5850
|
export { DEVELOPER_REASONING_PACK, ENGINEERING_ACCELERATOR_PACK, PACK_NAMESPACE_COLLISION_ALLOWLIST, SOFTWARE_ENTITIES_V1, allAppPackManifests, appPackRegistry, buildShapingContribution, chatV1Manifest, createDomainPackAuthoringTools2 as createDomainPackAuthoringTools, createShapingContributionRegistry, dealsV1Manifest, decisionsV1Manifest, defineAppPackManifest, defineDomainPack, defineDomainPackAuthoringManifest, detectNamespaceCollisions, documentsV1Manifest, epistemicAlgorithmsV1Manifest, evaluateAppPackEnablement, evaluateCatalogEnablement, evaluatePackEnablement, getAppPackManifest, getDependencyClosure, getDomainPack, getShapingContribution, graphVisualizationV1Manifest, listAppPackManifests, listDomainPacks, listShapingContributions, newsV1Manifest, parseDomainPackAuthoringManifest, philosophyModeV1Manifest, previewDomainPackAuthoringManifest2 as previewDomainPackAuthoringManifest, previewDomainPackAuthoringManifestSource2 as previewDomainPackAuthoringManifestSource, publishDomainPackAuthoringManifest2 as publishDomainPackAuthoringManifest, publishDomainPackAuthoringManifestSource2 as publishDomainPackAuthoringManifestSource, resolvePackDependencyGraph, serializeDomainPackAuthoringManifest, taskManagementV1Manifest, teamAnalysisV1Manifest, themesV1Manifest, userProfilesV1Manifest, validateAppPackManifest, validateAppPackRegistry, validateDomainPack, validateDomainPackAuthoringManifest2 as validateDomainPackAuthoringManifest, validateDomainPackAuthoringManifestSource2 as validateDomainPackAuthoringManifestSource, validatePackNamespacePolicies, validatePackRegistry, validatePackSharedServiceContracts, validateShapingContribution, worktreesV1Manifest };
|
|
5851
|
-
//# sourceMappingURL=index.js.map
|
|
5852
|
-
//# sourceMappingURL=index.js.map
|
package/dist/lifecycle.js
CHANGED
package/dist/manifests/index.js
CHANGED
|
@@ -1066,5 +1066,3 @@ var allAppPackManifests = [
|
|
|
1066
1066
|
];
|
|
1067
1067
|
|
|
1068
1068
|
export { allAppPackManifests, chatV1Manifest, dealsV1Manifest, decisionsV1Manifest, documentsV1Manifest, epistemicAlgorithmsV1Manifest, graphVisualizationV1Manifest, newsV1Manifest, philosophyModeV1Manifest, taskManagementV1Manifest, teamAnalysisV1Manifest, themesV1Manifest, userProfilesV1Manifest, worktreesV1Manifest };
|
|
1069
|
-
//# sourceMappingURL=index.js.map
|
|
1070
|
-
//# sourceMappingURL=index.js.map
|
package/dist/manifests.js
CHANGED
|
@@ -1066,5 +1066,3 @@ var allAppPackManifests = [
|
|
|
1066
1066
|
];
|
|
1067
1067
|
|
|
1068
1068
|
export { allAppPackManifests, chatV1Manifest, dealsV1Manifest, decisionsV1Manifest, documentsV1Manifest, epistemicAlgorithmsV1Manifest, graphVisualizationV1Manifest, newsV1Manifest, philosophyModeV1Manifest, taskManagementV1Manifest, teamAnalysisV1Manifest, themesV1Manifest, userProfilesV1Manifest, worktreesV1Manifest };
|
|
1069
|
-
//# sourceMappingURL=manifests.js.map
|
|
1070
|
-
//# sourceMappingURL=manifests.js.map
|
package/dist/namespacePolicy.js
CHANGED
|
@@ -125,5 +125,3 @@ function validatePackNamespacePolicies(manifests) {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
export { PACK_NAMESPACE_COLLISION_ALLOWLIST, detectNamespaceCollisions, validatePackNamespacePolicies };
|
|
128
|
-
//# sourceMappingURL=namespacePolicy.js.map
|
|
129
|
-
//# sourceMappingURL=namespacePolicy.js.map
|
package/dist/registry.js
CHANGED
|
@@ -1845,5 +1845,3 @@ function evaluateAppPackEnablement(policy = {}) {
|
|
|
1845
1845
|
}
|
|
1846
1846
|
|
|
1847
1847
|
export { appPackRegistry, evaluateAppPackEnablement, getAppPackManifest, getDependencyClosure, listAppPackManifests, validateAppPackRegistry };
|
|
1848
|
-
//# sourceMappingURL=registry.js.map
|
|
1849
|
-
//# sourceMappingURL=registry.js.map
|
package/dist/runtime.js
CHANGED
package/dist/serviceContracts.js
CHANGED
package/package.json
CHANGED
package/dist/contracts.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contracts.ts"],"names":[],"mappings":";AA+HA,SAAS,qBAAqB,MAAA,EAA4B;AACxD,EAAA,MAAM,UAAA,GAAa,MAAA,CAChB,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,IAAA,EAAM,CAAA,CAC3B,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AACrC,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,UAAU,CAAC,CAAA;AACvC;AAEO,SAAS,sBACd,QAAA,EACiB;AACjB,EAAA,MAAM,kBAAkB,QAAA,CAAS,cAAA,IAAkB,EAAC,EAAG,GAAA,CAAI,CAAC,WAAA,MAAiB;AAAA,IAC3E,GAAG,WAAA;AAAA,IACH,SAAA,EAAW,oBAAA,CAAqB,WAAA,CAAY,SAAS;AAAA,GACvD,CAAE,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,YAAA,EAAc,oBAAA,CAAqB,QAAA,CAAS,YAAY,CAAA;AAAA,IACxD,eAAA,EAAiB,oBAAA,CAAqB,QAAA,CAAS,eAAe,CAAA;AAAA,IAC9D;AAAA,GACF;AACF","file":"contracts.js","sourcesContent":["/**\n * App Pack Contracts\n *\n * Canonical type contracts for Lucern app-pack manifests and runtime metadata.\n */\n\nexport type PackLifecycle = \"active\" | \"beta\" | \"experimental\";\n\nexport type PackCategory =\n | \"conversation\"\n | \"research\"\n | \"graph\"\n | \"analytics\"\n | \"workflow\"\n | \"decision\"\n | \"news\"\n | \"documents\"\n | \"identity\"\n | \"operations\"\n | \"domain\";\n\nexport type PackAudience = string;\n\nexport type PolicyAction = \"read\" | \"summarize\" | \"export\" | \"mutate\" | \"admin\";\n\nexport type PolicyResource =\n | \"project\"\n | \"node\"\n | \"edge\"\n | \"artifact\"\n | \"report_section\"\n | \"tool_action\"\n | \"task\"\n | \"user_profile\"\n | \"team_analytics\";\n\nexport type ProjectionBehavior =\n | \"none\"\n | \"inherits_policy\"\n | \"projection_required\";\n\nexport type PackRuntimeStage =\n | \"registered\"\n | \"validated\"\n | \"installed\"\n | \"enabled\"\n | \"degraded\"\n | \"disabled\"\n | \"removed\";\n\nexport type SharedService =\n | \"decision-kernel\"\n | \"knowledge-compiler\"\n | \"learning-loop\";\n\nexport type SharedServiceMode = \"required\" | \"optional\";\n\nexport interface RouteNamespace {\n api: string[];\n web: string[];\n}\n\nexport interface SurfaceOwnership {\n components: string[];\n convex: string[];\n tools: string[];\n}\n\nexport interface PolicyRule {\n actions: PolicyAction[];\n notes?: string;\n resource: PolicyResource;\n}\n\nexport interface PolicyProfile {\n audiences: PackAudience[];\n rules: PolicyRule[];\n}\n\nexport interface DataContract {\n projectionBehavior: ProjectionBehavior;\n requiredEdgeTypes: string[];\n requiredNodeTypes: string[];\n requiredTables: string[];\n}\n\nexport interface TemplateAssets {\n prompts: string[];\n reports: string[];\n uiLabels: string[];\n workflows: string[];\n}\n\nexport interface PackTestSuite {\n contract: string[];\n parity: string[];\n policy: string[];\n}\n\nexport interface SharedServiceIntegration {\n contracts: string[];\n mode: SharedServiceMode;\n service: SharedService;\n}\n\nexport interface AppPackManifest {\n capabilityFlags: string[];\n category: PackCategory;\n dataContract: DataContract;\n dependencies: string[];\n description: string;\n key: string;\n lifecycle: PackLifecycle;\n name: string;\n policyProfile: PolicyProfile;\n routeNamespace: RouteNamespace;\n sharedServices: SharedServiceIntegration[];\n surfaces: SurfaceOwnership;\n templates: TemplateAssets;\n testSuite: PackTestSuite;\n version: string;\n}\n\ntype AppPackManifestInput = Omit<AppPackManifest, \"sharedServices\"> & {\n sharedServices?: SharedServiceIntegration[];\n};\n\nfunction normalizeStringArray(values: string[]): string[] {\n const normalized = values\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n return Array.from(new Set(normalized));\n}\n\nexport function defineAppPackManifest(\n manifest: AppPackManifestInput\n): AppPackManifest {\n const sharedServices = (manifest.sharedServices ?? []).map((integration) => ({\n ...integration,\n contracts: normalizeStringArray(integration.contracts),\n }));\n\n return {\n ...manifest,\n dependencies: normalizeStringArray(manifest.dependencies),\n capabilityFlags: normalizeStringArray(manifest.capabilityFlags),\n sharedServices,\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../convex.config.ts"],"names":[],"mappings":";;;AAEA,IAAM,SAAA,GAAY,gBAAgB,WAAW,CAAA;AAE7C,IAAO,qBAAA,GAAQ","file":"convex.config.js","sourcesContent":["import { defineComponent } from \"convex/server\";\n\nconst component = defineComponent(\"pack-host\");\n\nexport default component;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dependencyResolution.ts"],"names":[],"mappings":"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","file":"dependencyResolution.js","sourcesContent":["// biome-ignore-all lint/style/useFilenamingConvention: Legacy public @lucern/pack-host/dependencyResolution subpath.\n/**\n * Pack Dependency Resolution\n *\n * Dependency-graph validation and deterministic activation ordering.\n */\n\nimport type { AppPackManifest } from \"./contracts\";\nimport type { PackValidationIssue } from \"./manifestValidation\";\n\nexport interface PackDependencyResolutionResult {\n dependencyClosureByPack: Record<string, string[]>;\n issues: PackValidationIssue[];\n orderedPackKeys: string[];\n valid: boolean;\n}\n\ninterface PackDependencyGraph {\n adjacency: Map<string, string[]>;\n indegree: Map<string, number>;\n manifestsByKey: Map<string, AppPackManifest>;\n}\n\nfunction toIssue(\n code: string,\n message: string,\n path: string,\n severity: \"error\" | \"warning\" = \"error\"\n): PackValidationIssue {\n return {\n code,\n severity,\n message,\n path,\n };\n}\n\nfunction buildManifestMap(\n manifests: AppPackManifest[]\n): Map<string, AppPackManifest> {\n return new Map(manifests.map((manifest) => [manifest.key, manifest]));\n}\n\nfunction initializeDependencyGraph(\n manifests: AppPackManifest[]\n): PackDependencyGraph {\n const manifestsByKey = buildManifestMap(manifests);\n const indegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n for (const manifest of manifests) {\n indegree.set(manifest.key, indegree.get(manifest.key) ?? 0);\n adjacency.set(manifest.key, []);\n }\n\n return { adjacency, indegree, manifestsByKey };\n}\n\nfunction linkPackDependency(\n manifest: AppPackManifest,\n dependency: string,\n graph: PackDependencyGraph,\n issues: PackValidationIssue[]\n): void {\n if (!graph.manifestsByKey.has(dependency)) {\n issues.push(\n toIssue(\n \"PACK_DEPENDENCY_MISSING\",\n `Pack \"${manifest.key}\" depends on unknown pack \"${dependency}\".`,\n `dependencies:${manifest.key}`\n )\n );\n return;\n }\n\n const dependencyDependents = graph.adjacency.get(dependency) ?? [];\n dependencyDependents.push(manifest.key);\n graph.adjacency.set(dependency, dependencyDependents);\n graph.indegree.set(manifest.key, (graph.indegree.get(manifest.key) ?? 0) + 1);\n}\n\nfunction linkPackDependencies(\n manifests: AppPackManifest[],\n graph: PackDependencyGraph,\n issues: PackValidationIssue[]\n): void {\n for (const manifest of manifests) {\n for (const dependency of manifest.dependencies) {\n linkPackDependency(manifest, dependency, graph, issues);\n }\n }\n}\n\nfunction topologicalPackOrder(graph: PackDependencyGraph): string[] {\n const queue = [...graph.indegree.entries()]\n .filter(([, value]) => value === 0)\n .map(([packKey]) => packKey)\n .sort();\n\n const orderedPackKeys: string[] = [];\n while (queue.length > 0) {\n const nextKey = queue.shift();\n if (!nextKey) {\n break;\n }\n\n orderedPackKeys.push(nextKey);\n const dependents = graph.adjacency.get(nextKey) ?? [];\n for (const dependent of dependents) {\n const updated = (graph.indegree.get(dependent) ?? 0) - 1;\n graph.indegree.set(dependent, updated);\n if (updated === 0) {\n queue.push(dependent);\n }\n }\n queue.sort();\n }\n\n return orderedPackKeys;\n}\n\nfunction recordUnresolvedDependencyCycles(\n orderedPackKeys: string[],\n graph: PackDependencyGraph,\n issues: PackValidationIssue[]\n): void {\n if (orderedPackKeys.length === graph.manifestsByKey.size) {\n return;\n }\n\n const unresolved = [...graph.indegree.entries()]\n .filter(([, value]) => value > 0)\n .map(([key]) => key)\n .sort();\n\n issues.push(\n toIssue(\n \"PACK_DEPENDENCY_CYCLE\",\n `Dependency graph is not acyclic; unresolved packs: ${unresolved.join(\", \")}`,\n \"dependencies\"\n )\n );\n}\n\nfunction walkDependencyClosure(\n manifestKey: string,\n manifestsByKey: Map<string, AppPackManifest>,\n path: string[],\n closure: Set<string>,\n issues: PackValidationIssue[]\n): void {\n const manifest = manifestsByKey.get(manifestKey);\n if (!manifest) {\n return;\n }\n\n for (const dependency of manifest.dependencies) {\n if (!manifestsByKey.has(dependency)) {\n issues.push(\n toIssue(\n \"PACK_DEPENDENCY_MISSING\",\n `Pack \"${manifestKey}\" depends on unknown pack \"${dependency}\".`,\n `dependencies:${manifestKey}`\n )\n );\n continue;\n }\n\n if (path.includes(dependency)) {\n const cycle = [...path, dependency].join(\" -> \");\n issues.push(\n toIssue(\n \"PACK_DEPENDENCY_CYCLE\",\n `Cycle detected: ${cycle}`,\n `dependencies:${manifestKey}`\n )\n );\n continue;\n }\n\n if (closure.has(dependency)) {\n continue;\n }\n\n closure.add(dependency);\n walkDependencyClosure(\n dependency,\n manifestsByKey,\n [...path, dependency],\n closure,\n issues\n );\n }\n}\n\nfunction dependencyClosureByPack(\n manifests: AppPackManifest[],\n manifestsByKey: Map<string, AppPackManifest>,\n issues: PackValidationIssue[]\n): Record<string, string[]> {\n const dependencyClosure: Record<string, string[]> = {};\n for (const manifest of manifests) {\n const closure = new Set<string>();\n walkDependencyClosure(\n manifest.key,\n manifestsByKey,\n [manifest.key],\n closure,\n issues\n );\n dependencyClosure[manifest.key] = [...closure].sort();\n }\n return dependencyClosure;\n}\n\nexport function resolvePackDependencyGraph(\n manifests: AppPackManifest[]\n): PackDependencyResolutionResult {\n const issues: PackValidationIssue[] = [];\n const graph = initializeDependencyGraph(manifests);\n linkPackDependencies(manifests, graph, issues);\n const orderedPackKeys = topologicalPackOrder(graph);\n recordUnresolvedDependencyCycles(orderedPackKeys, graph, issues);\n\n return {\n orderedPackKeys,\n dependencyClosureByPack: dependencyClosureByPack(\n manifests,\n graph.manifestsByKey,\n issues\n ),\n issues,\n valid: issues.every((issue) => issue.severity !== \"error\"),\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/domain-pack/contracts.ts","../../src/domain-pack/authoring.core.ts"],"names":["dedupeStrings","normalizeRuntimeTargets"],"mappings":"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","file":"authoring.core.js","sourcesContent":["/**\n * Domain Pack Contracts\n *\n * A DomainPack is a self-contained reasoning context bundle that defines\n * how reasoning works in a specific domain. It binds ontology versions,\n * defines topic structure, declares workflow templates, gate schemas,\n * artifact schemas, and reasoning roles.\n *\n * This is the THIRD pack type in Lucern's architecture:\n * - AppPackManifest: UI routes, surfaces, policy profiles (app-level)\n * - MethodologyPack: Agent workflow phases, gates, enforcement (process-level)\n * - DomainPack: Reasoning domain context (domain-level)\n *\n * All fields are internal until RS-5+ external authoring certification.\n */\n\n// ---------------------------------------------------------------------------\n// Ontology Binding — ties a pack to specific ontology versions\n// ---------------------------------------------------------------------------\n\nexport type OntologyProvisionMode = \"bind\" | \"seed\" | \"extend\";\n\nexport interface OntologyBinding {\n ontologyId: string;\n provisionMode?: OntologyProvisionMode;\n required: boolean;\n requiredEdgeTypes?: string[];\n requiredEntityTypes?: string[];\n seedRef?: string;\n versionConstraint: string; // semver range, e.g., \"^1.0.0\"\n}\n\n// ---------------------------------------------------------------------------\n// Topic Root — defines the domain's top-level topic tree structure\n// ---------------------------------------------------------------------------\n\nexport interface TopicRoot {\n description: string;\n name: string;\n ontologyId?: string; // which ontology governs this root\n slug: string;\n}\n\n// ---------------------------------------------------------------------------\n// Workflow Template — shape of a workflow (not execution logic)\n// ---------------------------------------------------------------------------\n\nexport interface WorkflowStep {\n description: string;\n gateId?: string; // gate checked after this step\n name: string;\n produces?: string[]; // artifactId references\n requiredRoles: string[]; // roleId references\n stepId: string;\n}\n\nexport interface WorkflowTemplate {\n description: string;\n gateCheckpoints: string[]; // gateId references\n name: string;\n requiredArtifacts: string[]; // artifactId references\n steps: WorkflowStep[];\n workflowId: string;\n}\n\n// ---------------------------------------------------------------------------\n// Gate Schema — declarative description of what must be true\n// ---------------------------------------------------------------------------\n\nexport type GateCriterionOperator = \"gte\" | \"lte\" | \"eq\" | \"gt\" | \"lt\";\n\nexport interface GateCriterion {\n criterionId: string;\n description: string;\n metric: string;\n operator?: GateCriterionOperator;\n threshold?: number;\n}\n\nexport type GateSeverity = \"blocking\" | \"warning\" | \"informational\";\n\nexport interface GateSchema {\n criteria: GateCriterion[];\n description: string;\n gateId: string;\n name: string;\n severity: GateSeverity;\n}\n\n// ---------------------------------------------------------------------------\n// Artifact Schema — what artifacts workflows produce\n// ---------------------------------------------------------------------------\n\nexport interface ArtifactSchema {\n artifactId: string;\n contentSchema: Record<string, unknown>; // JSON Schema for content\n description: string;\n name: string;\n requiredFields: string[];\n stage: string; // workflow step that produces this\n}\n\n// ---------------------------------------------------------------------------\n// Reasoning Role — epistemic actors in the domain\n// ---------------------------------------------------------------------------\n\nexport interface ReasoningRole {\n description: string;\n mayBlock: boolean; // Epistemic Invariant #13: agents may block progress\n name: string;\n optimizesFor: string;\n perspective: string;\n roleId: string;\n}\n\n// ---------------------------------------------------------------------------\n// Inquiry Shaping — pack-level hooks for RS-3 auto-shaping\n// ---------------------------------------------------------------------------\n\nexport interface InquiryShapingQuestionTemplate {\n priority?: \"critical\" | \"high\" | \"medium\" | \"low\";\n questionType:\n | \"validation\"\n | \"falsification\"\n | \"assumption_probe\"\n | \"counterfactual\"\n | \"scope\"\n | \"comparison\"\n | \"mechanism\"\n | \"general\";\n template: string; // Supports {{objective}} and {{hypothesis}}\n templateId: string;\n whenObjectiveIncludes?: string[];\n}\n\nexport interface InquiryShapingTaskTemplate {\n description?: string; // Supports {{objective}} and {{hypothesis}}\n priority?: \"urgent\" | \"high\" | \"medium\" | \"low\";\n taskType?:\n | \"general\"\n | \"find_evidence\"\n | \"verify_claim\"\n | \"research\"\n | \"review\"\n | \"interview\"\n | \"analysis\"\n | \"track_metrics\";\n templateId: string;\n title: string; // Supports {{objective}} and {{hypothesis}}\n whenObjectiveIncludes?: string[];\n whenQuestionTypes?: string[];\n}\n\nexport interface InquiryShapingFrameworkHint {\n boost?: number;\n frameworkName: string;\n reason?: string;\n whenObjectiveIncludes?: string[];\n whenQuestionTypes?: string[];\n}\n\nexport interface InquiryShapingConfig {\n frameworkHints?: InquiryShapingFrameworkHint[];\n questionTemplates?: InquiryShapingQuestionTemplate[];\n taskTemplates?: InquiryShapingTaskTemplate[];\n}\n\n// ---------------------------------------------------------------------------\n// Operating System Layer — prompts, tools, topic bootstrap, install surfaces\n// ---------------------------------------------------------------------------\n\nexport type RuntimeTarget = \"claude-code\" | \"codex\" | \"hybrid\" | \"portable\";\n\nexport type PromptSource = \"langfuse\" | \"file\";\nexport type PromptChannel =\n | \"bootstrap\"\n | \"workflow\"\n | \"analysis\"\n | \"review\"\n | \"tool\";\n\nexport interface PromptBinding {\n channel: PromptChannel;\n description: string;\n fallbackRef?: string;\n promptId: string;\n ref: string;\n required: boolean;\n runtimeTargets?: RuntimeTarget[];\n source: PromptSource;\n}\n\nexport type ToolKind = \"mcp\" | \"cli\" | \"script\" | \"hook\" | \"ai-tool\";\n\nexport interface ToolBinding {\n description: string;\n entrypoint: string;\n kind: ToolKind;\n required: boolean;\n runtimeTargets?: RuntimeTarget[];\n toolId: string;\n}\n\nexport type SetupAssetKind =\n | \"instruction\"\n | \"settings\"\n | \"hook\"\n | \"skill\"\n | \"agent\"\n | \"manifest\"\n | \"template\"\n | \"inbox\"\n | \"script\"\n | \"ui\";\n\nexport interface SetupAsset {\n assetId: string;\n description: string;\n kind: SetupAssetKind;\n path: string;\n required: boolean;\n runtimeTargets?: RuntimeTarget[];\n}\n\nexport interface TopicTemplate {\n description: string;\n name: string;\n ontologyId?: string;\n parentSlug?: string;\n slug: string;\n}\n\nexport interface InstallProfile {\n assetIds: string[];\n defaultTopicSlugs: string[];\n description: string;\n name: string;\n profileId: string;\n promptIds: string[];\n runtimeTarget: RuntimeTarget;\n toolIds: string[];\n}\n\nexport interface OperatingSystemLayer {\n installProfiles?: InstallProfile[];\n prompts?: PromptBinding[];\n setupAssets?: SetupAsset[];\n tools?: ToolBinding[];\n topicTemplates?: TopicTemplate[];\n}\n\n// ---------------------------------------------------------------------------\n// Domain Pack — the top-level contract\n// ---------------------------------------------------------------------------\n\nexport interface DomainPack {\n // Composition — optional references to other pack types\n appPackKeys?: string[]; // AppPackManifest keys this domain uses\n\n // Artifact Schemas\n artifacts: ArtifactSchema[];\n\n // Gate Schemas\n gates: GateSchema[];\n\n // Inquiry shaping hooks\n inquiryShaping?: InquiryShapingConfig;\n methodologyPackId?: string; // MethodologyPack for agent behavior\n name: string;\n\n // Scope\n ontologyBindings: OntologyBinding[];\n\n // Runtime/install packaging layer\n operatingSystem?: OperatingSystemLayer;\n // Identity\n packId: string;\n\n // Reasoning Roles\n roles: ReasoningRole[];\n topicRoots: TopicRoot[];\n version: string; // semver\n\n // Workflow Templates\n workflows: WorkflowTemplate[];\n}\n\n// ---------------------------------------------------------------------------\n// Builder helper — normalizes arrays and validates basic structure\n// ---------------------------------------------------------------------------\n\nfunction dedupeStrings(values: string[]): string[] {\n return Array.from(\n new Set(values.map((v) => v.trim()).filter((v) => v.length > 0))\n );\n}\n\nexport type DomainPackInput = Omit<DomainPack, \"appPackKeys\"> & {\n appPackKeys?: string[];\n};\n\nfunction normalizeRuntimeTargets(\n values: RuntimeTarget[] | undefined\n): RuntimeTarget[] | undefined {\n return values ? (dedupeStrings(values) as RuntimeTarget[]) : undefined;\n}\n\nfunction normalizeOntologyBinding(binding: OntologyBinding): OntologyBinding {\n return {\n ...binding,\n requiredEntityTypes: binding.requiredEntityTypes\n ? dedupeStrings(binding.requiredEntityTypes)\n : undefined,\n requiredEdgeTypes: binding.requiredEdgeTypes\n ? dedupeStrings(binding.requiredEdgeTypes)\n : undefined,\n };\n}\n\nfunction normalizeOperatingSystem(\n layer: OperatingSystemLayer | undefined\n): OperatingSystemLayer | undefined {\n if (!layer) {\n return;\n }\n\n return {\n prompts: layer.prompts?.map((prompt) => ({\n ...prompt,\n runtimeTargets: normalizeRuntimeTargets(prompt.runtimeTargets),\n })),\n tools: layer.tools?.map((tool) => ({\n ...tool,\n runtimeTargets: normalizeRuntimeTargets(tool.runtimeTargets),\n })),\n setupAssets: layer.setupAssets?.map((asset) => ({\n ...asset,\n runtimeTargets: normalizeRuntimeTargets(asset.runtimeTargets),\n })),\n topicTemplates: layer.topicTemplates,\n installProfiles: layer.installProfiles?.map((profile) => ({\n ...profile,\n promptIds: dedupeStrings(profile.promptIds),\n toolIds: dedupeStrings(profile.toolIds),\n assetIds: dedupeStrings(profile.assetIds),\n defaultTopicSlugs: dedupeStrings(profile.defaultTopicSlugs),\n })),\n };\n}\n\nexport function defineDomainPack(input: DomainPackInput): DomainPack {\n return {\n ...input,\n ontologyBindings: input.ontologyBindings.map(normalizeOntologyBinding),\n appPackKeys: input.appPackKeys\n ? dedupeStrings(input.appPackKeys)\n : undefined,\n operatingSystem: normalizeOperatingSystem(input.operatingSystem),\n workflows: input.workflows.map((w) => ({\n ...w,\n requiredArtifacts: dedupeStrings(w.requiredArtifacts),\n gateCheckpoints: dedupeStrings(w.gateCheckpoints),\n steps: w.steps.map((s) => ({\n ...s,\n requiredRoles: dedupeStrings(s.requiredRoles),\n produces: s.produces ? dedupeStrings(s.produces) : undefined,\n })),\n })),\n };\n}\n","/**\n * Domain Pack Authoring Kit\n *\n * Config-first authoring surface for tenant-authored domain packs. This layer\n * wraps the internal DomainPack contract in a stable manifest envelope with\n * framework versioning, schema and ontology extension contracts, remix/fork\n * lineage, and tool-shaped validate/preview/publish handlers.\n */\n\nimport type { DomainPack, DomainPackInput, RuntimeTarget } from \"./contracts\";\nimport { defineDomainPack } from \"./contracts\";\nimport type { DomainPackValidationIssue } from \"./validation\";\n\nexport type { RuntimeTarget } from \"./contracts\";\n\nexport const DOMAIN_PACK_MANIFEST_KIND = \"lucern-domain-pack-manifest\" as const;\nconst CURRENT_MANIFEST_VERSION = \"1.0.0\";\nconst YAML_NUMERIC_SCALAR = /^-?\\d+(?:\\.\\d+)?$/;\n\nexport type DomainPackManifestFormat = \"json\" | \"yaml\";\n\nexport interface DomainPackFrameworkContract {\n frameworkId: string;\n required?: boolean;\n runtimeTargets?: RuntimeTarget[];\n version: string;\n versionConstraint?: string;\n}\n\nexport type DomainPackSchemaExtensionTarget =\n | \"artifact\"\n | \"workflow\"\n | \"gate\"\n | \"prompt\"\n | \"tool\"\n | \"install-profile\"\n | \"topic-template\";\n\nexport interface DomainPackSchemaExtension {\n description: string;\n extends?: string;\n extensionId: string;\n schema: Record<string, unknown>;\n target: DomainPackSchemaExtensionTarget;\n version: string;\n}\n\nexport interface DomainPackOntologyEntityExtension {\n description?: string;\n label: string;\n schema?: Record<string, unknown>;\n subtypes?: string[];\n value: string;\n}\n\nexport interface DomainPackOntologyEdgeExtension {\n constraintSeverity?: \"error\" | \"warning\" | \"informational\";\n description?: string;\n label: string;\n sourceTypes?: string[];\n targetTypes?: string[];\n value: string;\n}\n\nexport interface DomainPackOntologyExtension {\n additiveOnly: boolean;\n baseVersionConstraint: string;\n edgeTypes?: DomainPackOntologyEdgeExtension[];\n entityTypes?: DomainPackOntologyEntityExtension[];\n extensionId: string;\n ontologyId: string;\n}\n\nexport type DomainPackLineageMode = \"root\" | \"remix\" | \"fork\";\n\nexport interface DomainPackLineage {\n mode: DomainPackLineageMode;\n notes?: string;\n parentManifestDigest?: string;\n parentPackId?: string;\n parentVersion?: string;\n supersedesPackId?: string;\n}\n\nexport interface DomainPackAuthoringMetadata {\n description?: string;\n owner?: string;\n tags?: string[];\n}\n\nexport interface DomainPackAuthoringManifest {\n frameworks?: DomainPackFrameworkContract[];\n kind: typeof DOMAIN_PACK_MANIFEST_KIND;\n lineage: DomainPackLineage;\n manifestVersion: string;\n metadata?: DomainPackAuthoringMetadata;\n ontologyExtensions?: DomainPackOntologyExtension[];\n pack: DomainPack;\n schemaExtensions?: DomainPackSchemaExtension[];\n}\n\nexport interface DomainPackAuthoringManifestInput {\n frameworks?: DomainPackFrameworkContract[];\n kind?: typeof DOMAIN_PACK_MANIFEST_KIND;\n lineage?: DomainPackLineage;\n manifestVersion?: string;\n metadata?: DomainPackAuthoringMetadata;\n ontologyExtensions?: DomainPackOntologyExtension[];\n pack: DomainPack | DomainPackInput;\n schemaExtensions?: DomainPackSchemaExtension[];\n}\n\nexport type DomainPackAuthoringValidationIssue = DomainPackValidationIssue & {\n source:\n | \"manifest\"\n | \"pack\"\n | \"framework\"\n | \"schema-extension\"\n | \"ontology-extension\"\n | \"lineage\"\n | \"terminology\"\n | \"parse\";\n};\n\nexport interface DomainPackManifestCounts {\n artifacts: number;\n frameworks: number;\n gates: number;\n installProfiles: number;\n ontologyExtensions: number;\n prompts: number;\n roles: number;\n schemaExtensions: number;\n setupAssets: number;\n tools: number;\n topicRoots: number;\n workflows: number;\n}\n\nexport interface DomainPackAuthoringValidationResult {\n counts: DomainPackManifestCounts;\n format: DomainPackManifestFormat | null;\n issues: DomainPackAuthoringValidationIssue[];\n manifest: DomainPackAuthoringManifest | null;\n manifestDigest: string | null;\n valid: boolean;\n}\n\nexport type DomainPackAuthoringPreview = DomainPackAuthoringValidationResult & {\n readyToPublish: boolean;\n canonicalJson: string | null;\n canonicalYaml: string | null;\n lineageSummary: string | null;\n requiredRuntimeTargets: RuntimeTarget[];\n};\n\nexport interface DomainPackPublicationLineageEdge {\n childPackId: string;\n edgeType: \"remixed_from\" | \"supersedes\";\n parentPackId: string;\n parentVersion: string;\n}\n\nexport interface DomainPackPublication {\n canonicalJson: string;\n canonicalYaml: string;\n lineageEdge: DomainPackPublicationLineageEdge | null;\n manifest: DomainPackAuthoringManifest;\n manifestDigest: string;\n packId: string;\n publicationId: string;\n version: string;\n}\n\nexport interface DomainPackPublishResult {\n preview: DomainPackAuthoringPreview;\n publication: DomainPackPublication | null;\n published: boolean;\n}\n\nexport interface DomainPackAuthoringToolInput {\n format?: DomainPackManifestFormat;\n manifestText: string;\n}\n\nexport interface DomainPackAuthoringToolDefinition<Result> {\n description: string;\n execute: (args: DomainPackAuthoringToolInput) => Result;\n inputSchema: Record<string, unknown>;\n name:\n | \"validate_domain_pack_manifest\"\n | \"preview_domain_pack_manifest\"\n | \"publish_domain_pack_manifest\";\n}\n\nexport interface DomainPackAuthoringToolset {\n preview: DomainPackAuthoringToolDefinition<DomainPackAuthoringPreview>;\n publish: DomainPackAuthoringToolDefinition<DomainPackPublishResult>;\n validate: DomainPackAuthoringToolDefinition<DomainPackAuthoringValidationResult>;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nfunction dedupeStrings(values: string[] | undefined): string[] | undefined {\n if (!values) {\n return;\n }\n return Array.from(\n new Set(values.map((value) => value.trim()).filter((value) => value.length))\n );\n}\n\nfunction normalizeRuntimeTargets(\n values: RuntimeTarget[] | undefined\n): RuntimeTarget[] | undefined {\n return values ? (dedupeStrings(values) as RuntimeTarget[]) : undefined;\n}\n\nfunction normalizeFrameworks(\n frameworks: DomainPackFrameworkContract[] | undefined\n): DomainPackFrameworkContract[] | undefined {\n if (!frameworks) {\n return;\n }\n\n return frameworks.map((framework) => ({\n ...framework,\n frameworkId: framework.frameworkId.trim(),\n version: framework.version.trim(),\n versionConstraint: framework.versionConstraint?.trim(),\n runtimeTargets: normalizeRuntimeTargets(framework.runtimeTargets),\n }));\n}\n\nfunction normalizeSchemaExtensions(\n extensions: DomainPackSchemaExtension[] | undefined\n): DomainPackSchemaExtension[] | undefined {\n if (!extensions) {\n return;\n }\n\n return extensions.map((extension) => ({\n ...extension,\n extensionId: extension.extensionId.trim(),\n target: extension.target,\n description: extension.description.trim(),\n version: extension.version.trim(),\n extends: extension.extends?.trim(),\n }));\n}\n\nfunction normalizeOntologyExtensions(\n extensions: DomainPackOntologyExtension[] | undefined\n): DomainPackOntologyExtension[] | undefined {\n if (!extensions) {\n return;\n }\n\n return extensions.map((extension) => ({\n ...extension,\n extensionId: extension.extensionId.trim(),\n ontologyId: extension.ontologyId.trim(),\n baseVersionConstraint: extension.baseVersionConstraint.trim(),\n entityTypes: extension.entityTypes?.map((entityType) => ({\n ...entityType,\n value: entityType.value.trim(),\n label: entityType.label.trim(),\n description: entityType.description?.trim(),\n subtypes: dedupeStrings(entityType.subtypes),\n })),\n edgeTypes: extension.edgeTypes?.map((edgeType) => ({\n ...edgeType,\n value: edgeType.value.trim(),\n label: edgeType.label.trim(),\n description: edgeType.description?.trim(),\n sourceTypes: dedupeStrings(edgeType.sourceTypes),\n targetTypes: dedupeStrings(edgeType.targetTypes),\n })),\n }));\n}\n\nfunction normalizeLineage(\n lineage: DomainPackLineage | undefined\n): DomainPackLineage {\n if (!lineage) {\n return { mode: \"root\" };\n }\n\n return {\n mode: lineage.mode,\n parentPackId: lineage.parentPackId?.trim(),\n parentVersion: lineage.parentVersion?.trim(),\n parentManifestDigest: lineage.parentManifestDigest?.trim(),\n supersedesPackId: lineage.supersedesPackId?.trim(),\n notes: lineage.notes?.trim(),\n };\n}\n\nfunction normalizeMetadata(\n metadata: DomainPackAuthoringMetadata | undefined\n): DomainPackAuthoringMetadata | undefined {\n if (!metadata) {\n return;\n }\n\n return {\n description: metadata.description?.trim(),\n owner: metadata.owner?.trim(),\n tags: dedupeStrings(metadata.tags),\n };\n}\n\nfunction toDomainPack(pack: DomainPack | DomainPackInput): DomainPack {\n return defineDomainPack(pack as DomainPackInput);\n}\n\nexport function defineDomainPackAuthoringManifest(\n input: DomainPackAuthoringManifestInput\n): DomainPackAuthoringManifest {\n return {\n kind: input.kind ?? DOMAIN_PACK_MANIFEST_KIND,\n manifestVersion: input.manifestVersion?.trim() || CURRENT_MANIFEST_VERSION,\n pack: toDomainPack(input.pack),\n frameworks: normalizeFrameworks(input.frameworks),\n schemaExtensions: normalizeSchemaExtensions(input.schemaExtensions),\n ontologyExtensions: normalizeOntologyExtensions(input.ontologyExtensions),\n lineage: normalizeLineage(input.lineage),\n metadata: normalizeMetadata(input.metadata),\n };\n}\n\nexport function countManifestArtifacts(\n manifest: DomainPackAuthoringManifest | null\n): DomainPackManifestCounts {\n if (!manifest) {\n return {\n topicRoots: 0,\n workflows: 0,\n gates: 0,\n artifacts: 0,\n roles: 0,\n prompts: 0,\n tools: 0,\n setupAssets: 0,\n installProfiles: 0,\n frameworks: 0,\n schemaExtensions: 0,\n ontologyExtensions: 0,\n };\n }\n\n return {\n topicRoots: manifest.pack.topicRoots.length,\n workflows: manifest.pack.workflows.length,\n gates: manifest.pack.gates.length,\n artifacts: manifest.pack.artifacts.length,\n roles: manifest.pack.roles.length,\n prompts: manifest.pack.operatingSystem?.prompts?.length ?? 0,\n tools: manifest.pack.operatingSystem?.tools?.length ?? 0,\n setupAssets: manifest.pack.operatingSystem?.setupAssets?.length ?? 0,\n installProfiles:\n manifest.pack.operatingSystem?.installProfiles?.length ?? 0,\n frameworks: manifest.frameworks?.length ?? 0,\n schemaExtensions: manifest.schemaExtensions?.length ?? 0,\n ontologyExtensions: manifest.ontologyExtensions?.length ?? 0,\n };\n}\n\nfunction sortJsonValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortJsonValue);\n }\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entryValue]) => [key, sortJsonValue(entryValue)])\n );\n }\n return value;\n}\n\nfunction toYamlScalar(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"boolean\" || typeof value === \"number\") {\n return String(value);\n }\n return JSON.stringify(String(value));\n}\n\nfunction renderYaml(value: unknown, indent = 0): string[] {\n const prefix = \" \".repeat(indent);\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return [`${prefix}[]`];\n }\n return value.flatMap((entry) => {\n if (Array.isArray(entry) || isPlainObject(entry)) {\n return [`${prefix}-`, ...renderYaml(entry, indent + 2)];\n }\n return [`${prefix}- ${toYamlScalar(entry)}`];\n });\n }\n\n if (isPlainObject(value)) {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return [`${prefix}{}`];\n }\n return entries.flatMap(([key, entryValue]) => {\n if (entryValue === undefined) {\n return [];\n }\n if (Array.isArray(entryValue)) {\n if (entryValue.length === 0) {\n return [`${prefix}${key}: []`];\n }\n return [`${prefix}${key}:`, ...renderYaml(entryValue, indent + 2)];\n }\n if (isPlainObject(entryValue)) {\n if (Object.keys(entryValue).length === 0) {\n return [`${prefix}${key}: {}`];\n }\n return [`${prefix}${key}:`, ...renderYaml(entryValue, indent + 2)];\n }\n return [`${prefix}${key}: ${toYamlScalar(entryValue)}`];\n });\n }\n\n return [`${prefix}${toYamlScalar(value)}`];\n}\n\nfunction countIndent(line: string): number {\n return line.length - line.trimStart().length;\n}\n\nfunction parseYamlScalar(raw: string): unknown {\n const value = raw.trim();\n if (value === \"null\") {\n return null;\n }\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n if (YAML_NUMERIC_SCALAR.test(value)) {\n return Number(value);\n }\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n if (value.startsWith(\"'\")) {\n return value.slice(1, -1).replace(/''/g, \"'\");\n }\n return JSON.parse(value) as string;\n }\n if (value === \"[]\") {\n return [];\n }\n if (value === \"{}\") {\n return {};\n }\n return value;\n}\n\nfunction splitYamlKeyValue(trimmed: string): {\n key: string;\n value: string | null;\n} {\n const separatorIndex = trimmed.indexOf(\":\");\n if (separatorIndex === -1) {\n throw new Error(`Invalid YAML mapping entry: ${trimmed}`);\n }\n\n const key = trimmed.slice(0, separatorIndex).trim();\n const value = trimmed.slice(separatorIndex + 1).trim();\n return { key, value: value.length ? value : null };\n}\n\nfunction parseYamlDocument(text: string): unknown {\n const rawLines = text\n .replace(/\\r\\n/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => line.replace(/\\t/g, \" \"));\n const lines = rawLines.filter((line) => {\n const trimmed = line.trim();\n return trimmed.length > 0 && trimmed !== \"---\" && trimmed !== \"...\";\n });\n\n let index = 0;\n\n function parseBlock(indent: number): unknown {\n if (index >= lines.length) {\n return {};\n }\n\n const currentLine = lines[index];\n const currentIndent = countIndent(currentLine);\n if (currentIndent < indent) {\n return {};\n }\n if (currentLine.trimStart().startsWith(\"-\")) {\n return parseArray(indent);\n }\n return parseObject(indent);\n }\n\n function parseArray(indent: number): unknown[] {\n const items: unknown[] = [];\n\n while (index < lines.length) {\n const line = lines[index];\n const currentIndent = countIndent(line);\n if (currentIndent < indent) {\n break;\n }\n if (currentIndent !== indent) {\n throw new Error(`Invalid YAML indentation near: ${line.trim()}`);\n }\n\n const trimmed = line.trimStart();\n if (!trimmed.startsWith(\"-\")) {\n break;\n }\n\n const rest = trimmed.slice(1).trimStart();\n index += 1;\n\n if (!rest.length) {\n items.push(parseBlock(indent + 2));\n continue;\n }\n\n items.push(parseYamlScalar(rest));\n }\n\n return items;\n }\n\n function parseObject(indent: number): Record<string, unknown> {\n const objectValue: Record<string, unknown> = {};\n\n while (index < lines.length) {\n const line = lines[index];\n const currentIndent = countIndent(line);\n if (currentIndent < indent) {\n break;\n }\n if (currentIndent !== indent) {\n throw new Error(`Invalid YAML indentation near: ${line.trim()}`);\n }\n\n const trimmed = line.trim();\n if (trimmed.startsWith(\"-\")) {\n break;\n }\n\n const { key, value } = splitYamlKeyValue(trimmed);\n index += 1;\n objectValue[key] =\n value === null ? parseBlock(indent + 2) : parseYamlScalar(value);\n }\n\n return objectValue;\n }\n\n return parseBlock(0);\n}\n\nfunction detectDomainPackManifestFormat(\n source: string,\n explicitFormat?: DomainPackManifestFormat\n): DomainPackManifestFormat {\n if (explicitFormat) {\n return explicitFormat;\n }\n\n const trimmed = source.trim();\n if (trimmed.startsWith(\"{\")) {\n return \"json\";\n }\n return \"yaml\";\n}\n\nexport function serializeDomainPackAuthoringManifest(\n manifest: DomainPackAuthoringManifest,\n format: DomainPackManifestFormat = \"json\"\n): string {\n const canonicalValue = sortJsonValue(manifest);\n if (format === \"json\") {\n return `${JSON.stringify(canonicalValue, null, 2)}\\n`;\n }\n return `${renderYaml(canonicalValue).join(\"\\n\")}\\n`;\n}\n\nexport function parseDomainPackAuthoringManifest(\n source: string,\n format?: DomainPackManifestFormat\n): DomainPackAuthoringManifest {\n const detectedFormat = detectDomainPackManifestFormat(source, format);\n const parsed =\n detectedFormat === \"json\"\n ? (JSON.parse(source) as unknown)\n : parseYamlDocument(source);\n\n if (!isPlainObject(parsed)) {\n throw new Error(\"Domain pack manifest must parse to an object.\");\n }\n\n if (!(\"pack\" in parsed)) {\n throw new Error(\"Domain pack manifest requires a top-level pack object.\");\n }\n\n return defineDomainPackAuthoringManifest({\n kind: parsed.kind as typeof DOMAIN_PACK_MANIFEST_KIND | undefined,\n manifestVersion: parsed.manifestVersion as string | undefined,\n pack: parsed.pack as DomainPackInput,\n frameworks: parsed.frameworks as DomainPackFrameworkContract[] | undefined,\n schemaExtensions: parsed.schemaExtensions as\n | DomainPackSchemaExtension[]\n | undefined,\n ontologyExtensions: parsed.ontologyExtensions as\n | DomainPackOntologyExtension[]\n | undefined,\n lineage: parsed.lineage as DomainPackLineage | undefined,\n metadata: parsed.metadata as DomainPackAuthoringMetadata | undefined,\n });\n}\n"]}
|