@lucern/pack-host 1.0.29 → 1.0.31

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 (68) hide show
  1. package/dist/contracts.d.ts +35 -35
  2. package/dist/contracts.js.map +1 -1
  3. package/dist/dependencyResolution.d.ts +3 -3
  4. package/dist/dependencyResolution.js +83 -59
  5. package/dist/dependencyResolution.js.map +1 -1
  6. package/dist/domain-pack/authoring.core.d.ts +82 -82
  7. package/dist/domain-pack/authoring.core.js +7 -6
  8. package/dist/domain-pack/authoring.core.js.map +1 -1
  9. package/dist/domain-pack/authoring.js +400 -281
  10. package/dist/domain-pack/authoring.js.map +1 -1
  11. package/dist/domain-pack/authoring.validation.js +400 -281
  12. package/dist/domain-pack/authoring.validation.js.map +1 -1
  13. package/dist/domain-pack/contracts.d.ts +95 -95
  14. package/dist/domain-pack/contracts.js.map +1 -1
  15. package/dist/domain-pack/index.js +416 -285
  16. package/dist/domain-pack/index.js.map +1 -1
  17. package/dist/domain-pack/ontology/software-entities-v1.d.ts +7 -7
  18. package/dist/domain-pack/ontology/software-entities-v1.js.map +1 -1
  19. package/dist/domain-pack/packs/developer-reasoning.js +7 -1
  20. package/dist/domain-pack/packs/developer-reasoning.js.map +1 -1
  21. package/dist/domain-pack/packs/engineering-accelerator.js.map +1 -1
  22. package/dist/domain-pack/packs/index.js +333 -239
  23. package/dist/domain-pack/packs/index.js.map +1 -1
  24. package/dist/domain-pack/shaping.d.ts +15 -15
  25. package/dist/domain-pack/shaping.js +326 -238
  26. package/dist/domain-pack/shaping.js.map +1 -1
  27. package/dist/domain-pack/validation.d.ts +6 -6
  28. package/dist/domain-pack/validation.js +318 -236
  29. package/dist/domain-pack/validation.js.map +1 -1
  30. package/dist/domain-pack.js +416 -285
  31. package/dist/domain-pack.js.map +1 -1
  32. package/dist/index.d.ts +6 -6
  33. package/dist/index.js +3793 -3643
  34. package/dist/index.js.map +1 -1
  35. package/dist/lifecycle.d.ts +9 -9
  36. package/dist/lifecycle.js.map +1 -1
  37. package/dist/manifestValidation.d.ts +9 -9
  38. package/dist/manifestValidation.js.map +1 -1
  39. package/dist/manifests/chat-v1.js +1 -1
  40. package/dist/manifests/chat-v1.js.map +1 -1
  41. package/dist/manifests/deals-v1.js +1 -6
  42. package/dist/manifests/deals-v1.js.map +1 -1
  43. package/dist/manifests/decisions-v1.js.map +1 -1
  44. package/dist/manifests/documents-v1.js.map +1 -1
  45. package/dist/manifests/epistemic-algorithms-v1.js.map +1 -1
  46. package/dist/manifests/graph-visualization-v1.js.map +1 -1
  47. package/dist/manifests/index.js +2 -7
  48. package/dist/manifests/index.js.map +1 -1
  49. package/dist/manifests/news-v1.js.map +1 -1
  50. package/dist/manifests/philosophy-mode-v1.js.map +1 -1
  51. package/dist/manifests/sprints-v1.js.map +1 -1
  52. package/dist/manifests/task-management-v1.js.map +1 -1
  53. package/dist/manifests/team-analysis-v1.js.map +1 -1
  54. package/dist/manifests/themes-v1.js.map +1 -1
  55. package/dist/manifests/user-profiles-v1.js.map +1 -1
  56. package/dist/manifests.js +2 -7
  57. package/dist/manifests.js.map +1 -1
  58. package/dist/namespacePolicy.d.ts +6 -6
  59. package/dist/namespacePolicy.js.map +1 -1
  60. package/dist/proof-attestation.json +1 -1
  61. package/dist/registry.js +85 -66
  62. package/dist/registry.js.map +1 -1
  63. package/dist/runtime.d.ts +6 -6
  64. package/dist/runtime.js +83 -59
  65. package/dist/runtime.js.map +1 -1
  66. package/dist/serviceContracts.d.ts +4 -4
  67. package/dist/serviceContracts.js.map +1 -1
  68. package/package.json +1 -1
package/dist/runtime.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AppPackManifest } from './contracts.js';
2
- import { PackManifestValidationResult, PackValidationIssue, PackSchemaDictionary } from './manifestValidation.js';
2
+ import { PackValidationIssue, PackManifestValidationResult, PackSchemaDictionary } from './manifestValidation.js';
3
3
 
4
4
  /**
5
5
  * Pack Runtime Validation Orchestrator
@@ -7,13 +7,13 @@ import { PackManifestValidationResult, PackValidationIssue, PackSchemaDictionary
7
7
  * Aggregates manifest, dependency, and shared-service contract checks.
8
8
  */
9
9
 
10
- type PackRegistryValidationResult = {
11
- valid: boolean;
12
- manifestResults: PackManifestValidationResult[];
13
- dependencyOrder: string[];
10
+ interface PackRegistryValidationResult {
14
11
  dependencyClosureByPack: Record<string, string[]>;
12
+ dependencyOrder: string[];
15
13
  issues: PackValidationIssue[];
16
- };
14
+ manifestResults: PackManifestValidationResult[];
15
+ valid: boolean;
16
+ }
17
17
  declare function validatePackRegistry(manifests: AppPackManifest[], dictionary?: PackSchemaDictionary): PackRegistryValidationResult;
18
18
 
19
19
  export { type PackRegistryValidationResult, validatePackRegistry };
package/dist/runtime.js CHANGED
@@ -12,6 +12,73 @@ function toIssue(code, message, path, severity = "error") {
12
12
  function buildManifestMap(manifests) {
13
13
  return new Map(manifests.map((manifest) => [manifest.key, manifest]));
14
14
  }
15
+ function initializeDependencyGraph(manifests) {
16
+ const manifestsByKey = buildManifestMap(manifests);
17
+ const indegree = /* @__PURE__ */ new Map();
18
+ const adjacency = /* @__PURE__ */ new Map();
19
+ for (const manifest of manifests) {
20
+ indegree.set(manifest.key, indegree.get(manifest.key) ?? 0);
21
+ adjacency.set(manifest.key, []);
22
+ }
23
+ return { adjacency, indegree, manifestsByKey };
24
+ }
25
+ function linkPackDependency(manifest, dependency, graph, issues) {
26
+ if (!graph.manifestsByKey.has(dependency)) {
27
+ issues.push(
28
+ toIssue(
29
+ "PACK_DEPENDENCY_MISSING",
30
+ `Pack "${manifest.key}" depends on unknown pack "${dependency}".`,
31
+ `dependencies:${manifest.key}`
32
+ )
33
+ );
34
+ return;
35
+ }
36
+ const dependencyDependents = graph.adjacency.get(dependency) ?? [];
37
+ dependencyDependents.push(manifest.key);
38
+ graph.adjacency.set(dependency, dependencyDependents);
39
+ graph.indegree.set(manifest.key, (graph.indegree.get(manifest.key) ?? 0) + 1);
40
+ }
41
+ function linkPackDependencies(manifests, graph, issues) {
42
+ for (const manifest of manifests) {
43
+ for (const dependency of manifest.dependencies) {
44
+ linkPackDependency(manifest, dependency, graph, issues);
45
+ }
46
+ }
47
+ }
48
+ function topologicalPackOrder(graph) {
49
+ const queue = [...graph.indegree.entries()].filter(([, value]) => value === 0).map(([packKey]) => packKey).sort();
50
+ const orderedPackKeys = [];
51
+ while (queue.length > 0) {
52
+ const nextKey = queue.shift();
53
+ if (!nextKey) {
54
+ break;
55
+ }
56
+ orderedPackKeys.push(nextKey);
57
+ const dependents = graph.adjacency.get(nextKey) ?? [];
58
+ for (const dependent of dependents) {
59
+ const updated = (graph.indegree.get(dependent) ?? 0) - 1;
60
+ graph.indegree.set(dependent, updated);
61
+ if (updated === 0) {
62
+ queue.push(dependent);
63
+ }
64
+ }
65
+ queue.sort();
66
+ }
67
+ return orderedPackKeys;
68
+ }
69
+ function recordUnresolvedDependencyCycles(orderedPackKeys, graph, issues) {
70
+ if (orderedPackKeys.length === graph.manifestsByKey.size) {
71
+ return;
72
+ }
73
+ const unresolved = [...graph.indegree.entries()].filter(([, value]) => value > 0).map(([key]) => key).sort();
74
+ issues.push(
75
+ toIssue(
76
+ "PACK_DEPENDENCY_CYCLE",
77
+ `Dependency graph is not acyclic; unresolved packs: ${unresolved.join(", ")}`,
78
+ "dependencies"
79
+ )
80
+ );
81
+ }
15
82
  function walkDependencyClosure(manifestKey, manifestsByKey, path, closure, issues) {
16
83
  const manifest = manifestsByKey.get(manifestKey);
17
84
  if (!manifest) {
@@ -52,63 +119,8 @@ function walkDependencyClosure(manifestKey, manifestsByKey, path, closure, issue
52
119
  );
53
120
  }
54
121
  }
55
- function resolvePackDependencyGraph(manifests) {
56
- const issues = [];
57
- const manifestsByKey = buildManifestMap(manifests);
58
- const indegree = /* @__PURE__ */ new Map();
59
- const adjacency = /* @__PURE__ */ new Map();
60
- for (const manifest of manifests) {
61
- indegree.set(manifest.key, indegree.get(manifest.key) ?? 0);
62
- adjacency.set(manifest.key, []);
63
- }
64
- for (const manifest of manifests) {
65
- for (const dependency of manifest.dependencies) {
66
- if (!manifestsByKey.has(dependency)) {
67
- issues.push(
68
- toIssue(
69
- "PACK_DEPENDENCY_MISSING",
70
- `Pack "${manifest.key}" depends on unknown pack "${dependency}".`,
71
- `dependencies:${manifest.key}`
72
- )
73
- );
74
- continue;
75
- }
76
- const dependencyDependents = adjacency.get(dependency) ?? [];
77
- dependencyDependents.push(manifest.key);
78
- adjacency.set(dependency, dependencyDependents);
79
- indegree.set(manifest.key, (indegree.get(manifest.key) ?? 0) + 1);
80
- }
81
- }
82
- const queue = [...indegree.entries()].filter(([, value]) => value === 0).map(([packKey]) => packKey).sort();
83
- const orderedPackKeys = [];
84
- while (queue.length > 0) {
85
- const nextKey = queue.shift();
86
- if (!nextKey) {
87
- break;
88
- }
89
- orderedPackKeys.push(nextKey);
90
- const dependents = adjacency.get(nextKey) ?? [];
91
- for (const dependent of dependents) {
92
- const current = indegree.get(dependent) ?? 0;
93
- const updated = current - 1;
94
- indegree.set(dependent, updated);
95
- if (updated === 0) {
96
- queue.push(dependent);
97
- }
98
- }
99
- queue.sort();
100
- }
101
- if (orderedPackKeys.length !== manifestsByKey.size) {
102
- const unresolved = [...indegree.entries()].filter(([, value]) => value > 0).map(([key]) => key).sort();
103
- issues.push(
104
- toIssue(
105
- "PACK_DEPENDENCY_CYCLE",
106
- `Dependency graph is not acyclic; unresolved packs: ${unresolved.join(", ")}`,
107
- "dependencies"
108
- )
109
- );
110
- }
111
- const dependencyClosureByPack = {};
122
+ function dependencyClosureByPack(manifests, manifestsByKey, issues) {
123
+ const dependencyClosure = {};
112
124
  for (const manifest of manifests) {
113
125
  const closure = /* @__PURE__ */ new Set();
114
126
  walkDependencyClosure(
@@ -118,11 +130,23 @@ function resolvePackDependencyGraph(manifests) {
118
130
  closure,
119
131
  issues
120
132
  );
121
- dependencyClosureByPack[manifest.key] = [...closure].sort();
133
+ dependencyClosure[manifest.key] = [...closure].sort();
122
134
  }
135
+ return dependencyClosure;
136
+ }
137
+ function resolvePackDependencyGraph(manifests) {
138
+ const issues = [];
139
+ const graph = initializeDependencyGraph(manifests);
140
+ linkPackDependencies(manifests, graph, issues);
141
+ const orderedPackKeys = topologicalPackOrder(graph);
142
+ recordUnresolvedDependencyCycles(orderedPackKeys, graph, issues);
123
143
  return {
124
144
  orderedPackKeys,
125
- dependencyClosureByPack,
145
+ dependencyClosureByPack: dependencyClosureByPack(
146
+ manifests,
147
+ graph.manifestsByKey,
148
+ issues
149
+ ),
126
150
  issues,
127
151
  valid: issues.every((issue) => issue.severity !== "error")
128
152
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dependencyResolution.ts","../src/manifestValidation.ts","../src/namespacePolicy.ts","../src/serviceContracts.ts","../src/runtime.ts"],"names":["toIssue"],"mappings":"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","file":"runtime.js","sourcesContent":["/**\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 type PackDependencyResolutionResult = {\n orderedPackKeys: string[];\n dependencyClosureByPack: Record<string, string[]>;\n issues: PackValidationIssue[];\n valid: boolean;\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 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\nexport function resolvePackDependencyGraph(\n manifests: AppPackManifest[]\n): PackDependencyResolutionResult {\n const issues: PackValidationIssue[] = [];\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 for (const manifest of manifests) {\n for (const dependency of manifest.dependencies) {\n if (!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 continue;\n }\n\n const dependencyDependents = adjacency.get(dependency) ?? [];\n dependencyDependents.push(manifest.key);\n adjacency.set(dependency, dependencyDependents);\n\n indegree.set(manifest.key, (indegree.get(manifest.key) ?? 0) + 1);\n }\n }\n\n const queue = [...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 = adjacency.get(nextKey) ?? [];\n for (const dependent of dependents) {\n const current = indegree.get(dependent) ?? 0;\n const updated = current - 1;\n indegree.set(dependent, updated);\n if (updated === 0) {\n queue.push(dependent);\n }\n }\n queue.sort();\n }\n\n if (orderedPackKeys.length !== manifestsByKey.size) {\n const unresolved = [...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\n const dependencyClosureByPack: 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 dependencyClosureByPack[manifest.key] = [...closure].sort();\n }\n\n return {\n orderedPackKeys,\n dependencyClosureByPack,\n issues,\n valid: issues.every((issue) => issue.severity !== \"error\"),\n };\n}\n","/**\n * Pack Manifest Validation\n *\n * Runtime schema and dictionary validation for app-pack manifests.\n */\n\nimport { z } from \"zod\";\nimport type { AppPackManifest } from \"./contracts\";\n\nconst manifestKeyPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*-v[0-9]+$/;\nconst semverPattern = /^\\d+\\.\\d+\\.\\d+(?:[-+][0-9A-Za-z.-]+)?$/;\n\nexport type PackValidationSeverity = \"error\" | \"warning\";\n\nexport type PackValidationIssue = {\n code: string;\n severity: PackValidationSeverity;\n message: string;\n path: string;\n};\n\nexport type PackManifestValidationResult = {\n manifestKey: string;\n valid: boolean;\n issues: PackValidationIssue[];\n};\n\nexport type PackSchemaDictionary = {\n nodeTypes: readonly string[];\n edgeTypes: readonly string[];\n tables: readonly string[];\n};\n\nconst appPackManifestSchema = z.object({\n key: z.string().regex(manifestKeyPattern),\n name: z.string().min(1),\n version: z.string().regex(semverPattern),\n lifecycle: z.enum([\"active\", \"beta\", \"experimental\"]),\n category: z.enum([\n \"conversation\",\n \"research\",\n \"graph\",\n \"analytics\",\n \"workflow\",\n \"decision\",\n \"news\",\n \"documents\",\n \"identity\",\n \"operations\",\n \"domain\",\n ]),\n description: z.string().min(1),\n dependencies: z.array(z.string().min(1)),\n capabilityFlags: z.array(z.string().min(1)),\n routeNamespace: z.object({\n web: z.array(z.string().min(1)),\n api: z.array(z.string().min(1)),\n }),\n surfaces: z.object({\n components: z.array(z.string().min(1)),\n convex: z.array(z.string().min(1)),\n tools: z.array(z.string().min(1)),\n }),\n policyProfile: z.object({\n audiences: z.array(z.string().min(1)).min(1),\n rules: z\n .array(\n z.object({\n resource: z.enum([\n \"project\",\n \"node\",\n \"edge\",\n \"artifact\",\n \"report_section\",\n \"tool_action\",\n \"task\",\n \"user_profile\",\n \"team_analytics\",\n ]),\n actions: z\n .array(z.enum([\"read\", \"summarize\", \"export\", \"mutate\", \"admin\"]))\n .min(1),\n notes: z.string().optional(),\n })\n )\n .min(1),\n }),\n dataContract: z.object({\n requiredNodeTypes: z.array(z.string().min(1)),\n requiredEdgeTypes: z.array(z.string().min(1)),\n requiredTables: z.array(z.string().min(1)).min(1),\n projectionBehavior: z.enum([\n \"none\",\n \"inherits_policy\",\n \"projection_required\",\n ]),\n }),\n templates: z.object({\n workflows: z.array(z.string().min(1)),\n prompts: z.array(z.string().min(1)),\n reports: z.array(z.string().min(1)),\n uiLabels: z.array(z.string().min(1)),\n }),\n testSuite: z.object({\n parity: z.array(z.string().min(1)).min(1),\n policy: z.array(z.string().min(1)).min(1),\n contract: z.array(z.string().min(1)).min(1),\n }),\n sharedServices: z.array(\n z.object({\n service: z.enum([\n \"decision-kernel\",\n \"knowledge-compiler\",\n \"learning-loop\",\n ]),\n mode: z.enum([\"required\", \"optional\"]),\n contracts: z.array(z.string().min(1)).min(1),\n })\n ),\n});\n\nfunction toIssue(\n code: string,\n message: string,\n path: string,\n severity: PackValidationSeverity = \"error\"\n): PackValidationIssue {\n return {\n code,\n severity,\n message,\n path,\n };\n}\n\nfunction collectDuplicateValues(values: readonly string[]): string[] {\n const counts = new Map<string, number>();\n for (const value of values) {\n counts.set(value, (counts.get(value) ?? 0) + 1);\n }\n return [...counts.entries()]\n .filter(([, count]) => count > 1)\n .map(([value]) => value)\n .sort();\n}\n\nfunction collectUnknownValues(\n values: readonly string[],\n knownValues: readonly string[]\n): string[] {\n const known = new Set(knownValues);\n return values.filter((value) => !known.has(value));\n}\n\nfunction validateManifestShape(\n manifest: AppPackManifest\n): PackValidationIssue[] {\n const parsed = appPackManifestSchema.safeParse(manifest);\n if (parsed.success) {\n return [];\n }\n\n return parsed.error.issues.map((issue) =>\n toIssue(\n \"PACK_MANIFEST_SCHEMA_INVALID\",\n issue.message,\n issue.path.join(\".\") || \"(root)\"\n )\n );\n}\n\nfunction validateManifestUniqueness(\n manifest: AppPackManifest\n): PackValidationIssue[] {\n const issues: PackValidationIssue[] = [];\n\n const duplicateDependencies = collectDuplicateValues(manifest.dependencies);\n if (duplicateDependencies.length > 0) {\n issues.push(\n toIssue(\n \"PACK_DEPENDENCIES_DUPLICATE\",\n `Duplicate dependencies declared: ${duplicateDependencies.join(\", \")}`,\n \"dependencies\"\n )\n );\n }\n\n if (manifest.dependencies.includes(manifest.key)) {\n issues.push(\n toIssue(\n \"PACK_DEPENDENCY_SELF_REFERENCE\",\n `Pack \"${manifest.key}\" cannot depend on itself.`,\n \"dependencies\"\n )\n );\n }\n\n const duplicateCapabilities = collectDuplicateValues(\n manifest.capabilityFlags\n );\n if (duplicateCapabilities.length > 0) {\n issues.push(\n toIssue(\n \"PACK_CAPABILITIES_DUPLICATE\",\n `Duplicate capability flags declared: ${duplicateCapabilities.join(\", \")}`,\n \"capabilityFlags\"\n )\n );\n }\n\n const duplicateWebRoutes = collectDuplicateValues(\n manifest.routeNamespace.web\n );\n if (duplicateWebRoutes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_WEB_ROUTES_DUPLICATE\",\n `Duplicate web routes declared: ${duplicateWebRoutes.join(\", \")}`,\n \"routeNamespace.web\"\n )\n );\n }\n\n const duplicateApiRoutes = collectDuplicateValues(\n manifest.routeNamespace.api\n );\n if (duplicateApiRoutes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_API_ROUTES_DUPLICATE\",\n `Duplicate api routes declared: ${duplicateApiRoutes.join(\", \")}`,\n \"routeNamespace.api\"\n )\n );\n }\n\n const duplicateServices = collectDuplicateValues(\n manifest.sharedServices.map((integration) => integration.service)\n );\n if (duplicateServices.length > 0) {\n issues.push(\n toIssue(\n \"PACK_SHARED_SERVICE_DUPLICATE\",\n `Duplicate shared-service integrations declared: ${duplicateServices.join(\", \")}`,\n \"sharedServices\"\n )\n );\n }\n\n return issues;\n}\n\nfunction validateManifestDictionary(\n manifest: AppPackManifest,\n dictionary?: PackSchemaDictionary\n): PackValidationIssue[] {\n if (!dictionary) {\n return [];\n }\n\n const issues: PackValidationIssue[] = [];\n const unknownNodeTypes = collectUnknownValues(\n manifest.dataContract.requiredNodeTypes,\n dictionary.nodeTypes\n );\n const unknownEdgeTypes = collectUnknownValues(\n manifest.dataContract.requiredEdgeTypes,\n dictionary.edgeTypes\n );\n const unknownTables = collectUnknownValues(\n manifest.dataContract.requiredTables,\n dictionary.tables\n );\n\n if (unknownNodeTypes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_UNKNOWN_NODE_TYPES\",\n `Unknown required node types: ${unknownNodeTypes.join(\", \")}`,\n \"dataContract.requiredNodeTypes\"\n )\n );\n }\n\n if (unknownEdgeTypes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_UNKNOWN_EDGE_TYPES\",\n `Unknown required edge types: ${unknownEdgeTypes.join(\", \")}`,\n \"dataContract.requiredEdgeTypes\"\n )\n );\n }\n\n if (unknownTables.length > 0) {\n issues.push(\n toIssue(\n \"PACK_UNKNOWN_TABLES\",\n `Unknown required tables: ${unknownTables.join(\", \")}`,\n \"dataContract.requiredTables\"\n )\n );\n }\n\n return issues;\n}\n\nexport function validateAppPackManifest(\n manifest: AppPackManifest,\n dictionary?: PackSchemaDictionary\n): PackManifestValidationResult {\n const issues: PackValidationIssue[] = [\n ...validateManifestShape(manifest),\n ...validateManifestUniqueness(manifest),\n ...validateManifestDictionary(manifest, dictionary),\n ];\n\n return {\n manifestKey: manifest.key,\n valid: issues.every((issue) => issue.severity !== \"error\"),\n issues,\n };\n}\n","/**\n * Pack Namespace Collision Policy\n *\n * Enforces explicit allowlisting for cross-pack route namespace sharing.\n */\n\nimport type { AppPackManifest } from \"./contracts\";\nimport type { PackValidationIssue } from \"./manifestValidation\";\n\nexport type NamespaceSurface = \"web\" | \"api\";\n\nexport type NamespaceCollision = {\n surface: NamespaceSurface;\n namespace: string;\n packKeys: string[];\n};\n\nexport type NamespaceCollisionAllowlistEntry = {\n surface: NamespaceSurface;\n namespace: string;\n allowedPackKeys: string[];\n rationale: string;\n};\n\nexport const PACK_NAMESPACE_COLLISION_ALLOWLIST: NamespaceCollisionAllowlistEntry[] =\n [\n {\n surface: \"web\",\n namespace: \"/(chat)/chat/[id]\",\n allowedPackKeys: [\"chat-v1\", \"philosophy-mode-v1\"],\n rationale:\n \"Philosophy mode extends the chat surface and intentionally shares the chat detail route.\",\n },\n {\n surface: \"web\",\n namespace: \"/(projects)/projects\",\n allowedPackKeys: [\"deals-v1\", \"themes-v1\"],\n rationale:\n \"Deals and themes intentionally share the topic index shell mounted under the legacy /projects customer-zero shell.\",\n },\n {\n surface: \"web\",\n namespace: \"/(projects)/projects/[projectId]\",\n allowedPackKeys: [\"deals-v1\", \"themes-v1\"],\n rationale:\n \"Deals and themes intentionally share topic detail shell routing while the outer customer-zero shell still uses legacy project path segments.\",\n },\n {\n surface: \"api\",\n namespace: \"/api/philosophy/get-profile\",\n allowedPackKeys: [\"philosophy-mode-v1\", \"user-profiles-v1\"],\n rationale:\n \"User profiles and philosophy mode share profile retrieval endpoint for compatibility.\",\n },\n {\n surface: \"api\",\n namespace: \"/api/research/*\",\n allowedPackKeys: [\"deals-v1\", \"themes-v1\"],\n rationale:\n \"Deals and themes share research API namespace until productized API gateway split.\",\n },\n {\n surface: \"api\",\n namespace: \"/api/reports/*\",\n allowedPackKeys: [\"deals-v1\", \"decisions-v1\", \"themes-v1\"],\n rationale:\n \"Domain packs intentionally consume shared report compiler endpoints in the same namespace.\",\n },\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 normalizeKeySet(values: string[]): string {\n return [...new Set(values)].sort().join(\"|\");\n}\n\nexport function detectNamespaceCollisions(\n manifests: AppPackManifest[]\n): NamespaceCollision[] {\n const collisions: NamespaceCollision[] = [];\n\n for (const surface of [\"web\", \"api\"] as const) {\n const namespaceToPacks = new Map<string, string[]>();\n for (const manifest of manifests) {\n const namespaces = manifest.routeNamespace[surface];\n for (const namespace of namespaces) {\n const existing = namespaceToPacks.get(namespace) ?? [];\n existing.push(manifest.key);\n namespaceToPacks.set(namespace, existing);\n }\n }\n\n for (const [namespace, packKeys] of namespaceToPacks.entries()) {\n if (packKeys.length <= 1) {\n continue;\n }\n collisions.push({\n surface,\n namespace,\n packKeys: [...new Set(packKeys)].sort(),\n });\n }\n }\n\n return collisions.sort((left, right) => {\n if (left.surface !== right.surface) {\n return left.surface.localeCompare(right.surface);\n }\n return left.namespace.localeCompare(right.namespace);\n });\n}\n\nexport function validatePackNamespacePolicies(\n manifests: AppPackManifest[]\n): PackValidationIssue[] {\n const issues: PackValidationIssue[] = [];\n const collisions = detectNamespaceCollisions(manifests);\n const allowlistByKey = new Map<string, NamespaceCollisionAllowlistEntry>();\n\n for (const entry of PACK_NAMESPACE_COLLISION_ALLOWLIST) {\n const key = `${entry.surface}:${entry.namespace}`;\n if (allowlistByKey.has(key)) {\n issues.push(\n toIssue(\n \"PACK_NAMESPACE_ALLOWLIST_DUPLICATE\",\n `Duplicate allowlist entry for ${key}.`,\n \"namespacePolicy.allowlist\"\n )\n );\n continue;\n }\n allowlistByKey.set(key, entry);\n }\n\n for (const collision of collisions) {\n const key = `${collision.surface}:${collision.namespace}`;\n const allowlistEntry = allowlistByKey.get(key);\n if (!allowlistEntry) {\n issues.push(\n toIssue(\n \"PACK_NAMESPACE_COLLISION_UNAPPROVED\",\n `Unapproved ${collision.surface} namespace collision for \"${collision.namespace}\" across packs: ${collision.packKeys.join(\", \")}`,\n `namespacePolicy.${collision.surface}`\n )\n );\n continue;\n }\n\n const collidedSet = normalizeKeySet(collision.packKeys);\n const allowedSet = normalizeKeySet(allowlistEntry.allowedPackKeys);\n if (collidedSet !== allowedSet) {\n issues.push(\n toIssue(\n \"PACK_NAMESPACE_COLLISION_MISMATCH\",\n `Collision set mismatch for \"${collision.namespace}\". collided=${collidedSet} allowlist=${allowedSet}`,\n `namespacePolicy.${collision.surface}`\n )\n );\n }\n }\n\n return issues;\n}\n","/**\n * Pack Shared-Service Contract Checks\n *\n * Validates report/learning/decision integration declarations at manifest level.\n */\n\nimport type { AppPackManifest, SharedService } from \"./contracts\";\n\nexport type PackSharedServiceIssue = {\n packKey: string;\n service: SharedService;\n severity: \"error\" | \"warning\";\n code: string;\n message: string;\n};\n\nfunction hasSharedService(\n manifest: AppPackManifest,\n service: SharedService\n): boolean {\n return manifest.sharedServices.some(\n (integration) => integration.service === service\n );\n}\n\nfunction hasDecisionIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.category === \"decision\") {\n return true;\n }\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"decision.\") || flag.includes(\"decision.integration\")\n );\n}\n\nfunction hasReportIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.templates.reports.length > 0) {\n return true;\n }\n return manifest.routeNamespace.api.some((namespace) =>\n namespace.includes(\"/api/reports\")\n );\n}\n\nfunction hasLearningIntegrationSignals(manifest: AppPackManifest): boolean {\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"learning.\") ||\n flag.includes(\"policy.injection\") ||\n flag.includes(\"adaptive-learning\")\n );\n}\n\nexport function validatePackSharedServiceContracts(\n manifests: AppPackManifest[]\n): PackSharedServiceIssue[] {\n const issues: PackSharedServiceIssue[] = [];\n\n for (const manifest of manifests) {\n if (\n hasReportIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"knowledge-compiler\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"knowledge-compiler\",\n severity: \"error\",\n code: \"PACK_REPORT_SERVICE_MISSING\",\n message:\n \"Pack declares report outputs/routes but is missing knowledge-compiler shared service integration.\",\n });\n }\n\n if (\n hasDecisionIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"decision-kernel\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"decision-kernel\",\n severity: \"error\",\n code: \"PACK_DECISION_SERVICE_MISSING\",\n message:\n \"Pack declares decision behavior but is missing decision-kernel shared service integration.\",\n });\n }\n\n if (\n hasLearningIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"learning-loop\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"learning-loop\",\n severity: \"error\",\n code: \"PACK_LEARNING_SERVICE_MISSING\",\n message:\n \"Pack declares adaptive learning behavior but is missing learning-loop shared service integration.\",\n });\n }\n }\n\n return issues;\n}\n","/**\n * Pack Runtime Validation Orchestrator\n *\n * Aggregates manifest, dependency, and shared-service contract checks.\n */\n\nimport type { AppPackManifest } from \"./contracts\";\nimport { resolvePackDependencyGraph } from \"./dependencyResolution\";\nimport type {\n PackManifestValidationResult,\n PackSchemaDictionary,\n PackValidationIssue,\n} from \"./manifestValidation\";\nimport { validateAppPackManifest } from \"./manifestValidation\";\nimport { validatePackNamespacePolicies } from \"./namespacePolicy\";\nimport { validatePackSharedServiceContracts } from \"./serviceContracts\";\n\nexport type PackRegistryValidationResult = {\n valid: boolean;\n manifestResults: PackManifestValidationResult[];\n dependencyOrder: string[];\n dependencyClosureByPack: Record<string, string[]>;\n issues: PackValidationIssue[];\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 validateRegistryIdentity(\n manifests: AppPackManifest[]\n): PackValidationIssue[] {\n const issues: PackValidationIssue[] = [];\n const keyCounts = new Map<string, number>();\n const identityCounts = new Map<string, number>();\n\n for (const manifest of manifests) {\n keyCounts.set(manifest.key, (keyCounts.get(manifest.key) ?? 0) + 1);\n const identity = `${manifest.key}@${manifest.version}`;\n identityCounts.set(identity, (identityCounts.get(identity) ?? 0) + 1);\n }\n\n for (const [key, count] of keyCounts.entries()) {\n if (count > 1) {\n issues.push(\n toIssue(\n \"PACK_KEY_DUPLICATE\",\n `Duplicate pack key registered: ${key}`,\n \"registry.keys\"\n )\n );\n }\n }\n\n for (const [identity, count] of identityCounts.entries()) {\n if (count > 1) {\n issues.push(\n toIssue(\n \"PACK_VERSION_DUPLICATE\",\n `Duplicate pack identity registered: ${identity}`,\n \"registry.versions\"\n )\n );\n }\n }\n\n return issues;\n}\n\nexport function validatePackRegistry(\n manifests: AppPackManifest[],\n dictionary?: PackSchemaDictionary\n): PackRegistryValidationResult {\n const manifestResults = manifests.map((manifest) =>\n validateAppPackManifest(manifest, dictionary)\n );\n const dependencyResult = resolvePackDependencyGraph(manifests);\n const sharedServiceIssues = validatePackSharedServiceContracts(manifests).map(\n (issue) =>\n toIssue(\n issue.code,\n `[${issue.packKey}] ${issue.message}`,\n `sharedServices:${issue.packKey}`,\n issue.severity\n )\n );\n const namespaceIssues = validatePackNamespacePolicies(manifests);\n\n const issues: PackValidationIssue[] = [\n ...validateRegistryIdentity(manifests),\n ...manifestResults.flatMap((result) => result.issues),\n ...dependencyResult.issues,\n ...sharedServiceIssues,\n ...namespaceIssues,\n ];\n\n return {\n valid: issues.every((issue) => issue.severity !== \"error\"),\n manifestResults,\n dependencyOrder: dependencyResult.orderedPackKeys,\n dependencyClosureByPack: dependencyResult.dependencyClosureByPack,\n issues,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/dependencyResolution.ts","../src/manifestValidation.ts","../src/namespacePolicy.ts","../src/serviceContracts.ts","../src/runtime.ts"],"names":["toIssue"],"mappings":"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","file":"runtime.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","// biome-ignore-all lint/style/useFilenamingConvention: Legacy public @lucern/pack-host/manifestValidation subpath.\n/**\n * Pack Manifest Validation\n *\n * Runtime schema and dictionary validation for app-pack manifests.\n */\n\nimport { z } from \"zod\";\nimport type { AppPackManifest } from \"./contracts\";\n\nconst manifestKeyPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*-v[0-9]+$/;\nconst semverPattern = /^\\d+\\.\\d+\\.\\d+(?:[-+][0-9A-Za-z.-]+)?$/;\n\nexport type PackValidationSeverity = \"error\" | \"warning\";\n\nexport interface PackValidationIssue {\n code: string;\n message: string;\n path: string;\n severity: PackValidationSeverity;\n}\n\nexport interface PackManifestValidationResult {\n issues: PackValidationIssue[];\n manifestKey: string;\n valid: boolean;\n}\n\nexport interface PackSchemaDictionary {\n edgeTypes: readonly string[];\n nodeTypes: readonly string[];\n tables: readonly string[];\n}\n\nconst appPackManifestSchema = z.object({\n key: z.string().regex(manifestKeyPattern),\n name: z.string().min(1),\n version: z.string().regex(semverPattern),\n lifecycle: z.enum([\"active\", \"beta\", \"experimental\"]),\n category: z.enum([\n \"conversation\",\n \"research\",\n \"graph\",\n \"analytics\",\n \"workflow\",\n \"decision\",\n \"news\",\n \"documents\",\n \"identity\",\n \"operations\",\n \"domain\",\n ]),\n description: z.string().min(1),\n dependencies: z.array(z.string().min(1)),\n capabilityFlags: z.array(z.string().min(1)),\n routeNamespace: z.object({\n web: z.array(z.string().min(1)),\n api: z.array(z.string().min(1)),\n }),\n surfaces: z.object({\n components: z.array(z.string().min(1)),\n convex: z.array(z.string().min(1)),\n tools: z.array(z.string().min(1)),\n }),\n policyProfile: z.object({\n audiences: z.array(z.string().min(1)).min(1),\n rules: z\n .array(\n z.object({\n resource: z.enum([\n \"project\",\n \"node\",\n \"edge\",\n \"artifact\",\n \"report_section\",\n \"tool_action\",\n \"task\",\n \"user_profile\",\n \"team_analytics\",\n ]),\n actions: z\n .array(z.enum([\"read\", \"summarize\", \"export\", \"mutate\", \"admin\"]))\n .min(1),\n notes: z.string().optional(),\n })\n )\n .min(1),\n }),\n dataContract: z.object({\n requiredNodeTypes: z.array(z.string().min(1)),\n requiredEdgeTypes: z.array(z.string().min(1)),\n requiredTables: z.array(z.string().min(1)).min(1),\n projectionBehavior: z.enum([\n \"none\",\n \"inherits_policy\",\n \"projection_required\",\n ]),\n }),\n templates: z.object({\n workflows: z.array(z.string().min(1)),\n prompts: z.array(z.string().min(1)),\n reports: z.array(z.string().min(1)),\n uiLabels: z.array(z.string().min(1)),\n }),\n testSuite: z.object({\n parity: z.array(z.string().min(1)).min(1),\n policy: z.array(z.string().min(1)).min(1),\n contract: z.array(z.string().min(1)).min(1),\n }),\n sharedServices: z.array(\n z.object({\n service: z.enum([\n \"decision-kernel\",\n \"knowledge-compiler\",\n \"learning-loop\",\n ]),\n mode: z.enum([\"required\", \"optional\"]),\n contracts: z.array(z.string().min(1)).min(1),\n })\n ),\n});\n\nfunction toIssue(\n code: string,\n message: string,\n path: string,\n severity: PackValidationSeverity = \"error\"\n): PackValidationIssue {\n return {\n code,\n severity,\n message,\n path,\n };\n}\n\nfunction collectDuplicateValues(values: readonly string[]): string[] {\n const counts = new Map<string, number>();\n for (const value of values) {\n counts.set(value, (counts.get(value) ?? 0) + 1);\n }\n return [...counts.entries()]\n .filter(([, count]) => count > 1)\n .map(([value]) => value)\n .sort();\n}\n\nfunction collectUnknownValues(\n values: readonly string[],\n knownValues: readonly string[]\n): string[] {\n const known = new Set(knownValues);\n return values.filter((value) => !known.has(value));\n}\n\nfunction validateManifestShape(\n manifest: AppPackManifest\n): PackValidationIssue[] {\n const parsed = appPackManifestSchema.safeParse(manifest);\n if (parsed.success) {\n return [];\n }\n\n return parsed.error.issues.map((issue) =>\n toIssue(\n \"PACK_MANIFEST_SCHEMA_INVALID\",\n issue.message,\n issue.path.join(\".\") || \"(root)\"\n )\n );\n}\n\nfunction validateManifestUniqueness(\n manifest: AppPackManifest\n): PackValidationIssue[] {\n const issues: PackValidationIssue[] = [];\n\n const duplicateDependencies = collectDuplicateValues(manifest.dependencies);\n if (duplicateDependencies.length > 0) {\n issues.push(\n toIssue(\n \"PACK_DEPENDENCIES_DUPLICATE\",\n `Duplicate dependencies declared: ${duplicateDependencies.join(\", \")}`,\n \"dependencies\"\n )\n );\n }\n\n if (manifest.dependencies.includes(manifest.key)) {\n issues.push(\n toIssue(\n \"PACK_DEPENDENCY_SELF_REFERENCE\",\n `Pack \"${manifest.key}\" cannot depend on itself.`,\n \"dependencies\"\n )\n );\n }\n\n const duplicateCapabilities = collectDuplicateValues(\n manifest.capabilityFlags\n );\n if (duplicateCapabilities.length > 0) {\n issues.push(\n toIssue(\n \"PACK_CAPABILITIES_DUPLICATE\",\n `Duplicate capability flags declared: ${duplicateCapabilities.join(\", \")}`,\n \"capabilityFlags\"\n )\n );\n }\n\n const duplicateWebRoutes = collectDuplicateValues(\n manifest.routeNamespace.web\n );\n if (duplicateWebRoutes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_WEB_ROUTES_DUPLICATE\",\n `Duplicate web routes declared: ${duplicateWebRoutes.join(\", \")}`,\n \"routeNamespace.web\"\n )\n );\n }\n\n const duplicateApiRoutes = collectDuplicateValues(\n manifest.routeNamespace.api\n );\n if (duplicateApiRoutes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_API_ROUTES_DUPLICATE\",\n `Duplicate api routes declared: ${duplicateApiRoutes.join(\", \")}`,\n \"routeNamespace.api\"\n )\n );\n }\n\n const duplicateServices = collectDuplicateValues(\n manifest.sharedServices.map((integration) => integration.service)\n );\n if (duplicateServices.length > 0) {\n issues.push(\n toIssue(\n \"PACK_SHARED_SERVICE_DUPLICATE\",\n `Duplicate shared-service integrations declared: ${duplicateServices.join(\", \")}`,\n \"sharedServices\"\n )\n );\n }\n\n return issues;\n}\n\nfunction validateManifestDictionary(\n manifest: AppPackManifest,\n dictionary?: PackSchemaDictionary\n): PackValidationIssue[] {\n if (!dictionary) {\n return [];\n }\n\n const issues: PackValidationIssue[] = [];\n const unknownNodeTypes = collectUnknownValues(\n manifest.dataContract.requiredNodeTypes,\n dictionary.nodeTypes\n );\n const unknownEdgeTypes = collectUnknownValues(\n manifest.dataContract.requiredEdgeTypes,\n dictionary.edgeTypes\n );\n const unknownTables = collectUnknownValues(\n manifest.dataContract.requiredTables,\n dictionary.tables\n );\n\n if (unknownNodeTypes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_UNKNOWN_NODE_TYPES\",\n `Unknown required node types: ${unknownNodeTypes.join(\", \")}`,\n \"dataContract.requiredNodeTypes\"\n )\n );\n }\n\n if (unknownEdgeTypes.length > 0) {\n issues.push(\n toIssue(\n \"PACK_UNKNOWN_EDGE_TYPES\",\n `Unknown required edge types: ${unknownEdgeTypes.join(\", \")}`,\n \"dataContract.requiredEdgeTypes\"\n )\n );\n }\n\n if (unknownTables.length > 0) {\n issues.push(\n toIssue(\n \"PACK_UNKNOWN_TABLES\",\n `Unknown required tables: ${unknownTables.join(\", \")}`,\n \"dataContract.requiredTables\"\n )\n );\n }\n\n return issues;\n}\n\nexport function validateAppPackManifest(\n manifest: AppPackManifest,\n dictionary?: PackSchemaDictionary\n): PackManifestValidationResult {\n const issues: PackValidationIssue[] = [\n ...validateManifestShape(manifest),\n ...validateManifestUniqueness(manifest),\n ...validateManifestDictionary(manifest, dictionary),\n ];\n\n return {\n manifestKey: manifest.key,\n valid: issues.every((issue) => issue.severity !== \"error\"),\n issues,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Legacy public @lucern/pack-host/namespacePolicy subpath.\n/**\n * Pack Namespace Collision Policy\n *\n * Enforces explicit allowlisting for cross-pack route namespace sharing.\n */\n\nimport type { AppPackManifest } from \"./contracts\";\nimport type { PackValidationIssue } from \"./manifestValidation\";\n\nexport type NamespaceSurface = \"web\" | \"api\";\n\nexport interface NamespaceCollision {\n namespace: string;\n packKeys: string[];\n surface: NamespaceSurface;\n}\n\nexport interface NamespaceCollisionAllowlistEntry {\n allowedPackKeys: string[];\n namespace: string;\n rationale: string;\n surface: NamespaceSurface;\n}\n\nexport const PACK_NAMESPACE_COLLISION_ALLOWLIST: NamespaceCollisionAllowlistEntry[] =\n [\n {\n surface: \"web\",\n namespace: \"/(chat)/chat/[id]\",\n allowedPackKeys: [\"chat-v1\", \"philosophy-mode-v1\"],\n rationale:\n \"Philosophy mode extends the chat surface and intentionally shares the chat detail route.\",\n },\n {\n surface: \"web\",\n namespace: \"/(projects)/projects\",\n allowedPackKeys: [\"deals-v1\", \"themes-v1\"],\n rationale:\n \"Deals and themes intentionally share the topic index shell mounted under the legacy /projects customer-zero shell.\",\n },\n {\n surface: \"web\",\n namespace: \"/(projects)/projects/[projectId]\",\n allowedPackKeys: [\"deals-v1\", \"themes-v1\"],\n rationale:\n \"Deals and themes intentionally share topic detail shell routing while the outer customer-zero shell still uses legacy project path segments.\",\n },\n {\n surface: \"api\",\n namespace: \"/api/philosophy/get-profile\",\n allowedPackKeys: [\"philosophy-mode-v1\", \"user-profiles-v1\"],\n rationale:\n \"User profiles and philosophy mode share profile retrieval endpoint for compatibility.\",\n },\n {\n surface: \"api\",\n namespace: \"/api/research/*\",\n allowedPackKeys: [\"deals-v1\", \"themes-v1\"],\n rationale:\n \"Deals and themes share research API namespace until productized API gateway split.\",\n },\n {\n surface: \"api\",\n namespace: \"/api/reports/*\",\n allowedPackKeys: [\"deals-v1\", \"decisions-v1\", \"themes-v1\"],\n rationale:\n \"Domain packs intentionally consume shared report compiler endpoints in the same namespace.\",\n },\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 normalizeKeySet(values: string[]): string {\n return [...new Set(values)].sort().join(\"|\");\n}\n\nexport function detectNamespaceCollisions(\n manifests: AppPackManifest[]\n): NamespaceCollision[] {\n const collisions: NamespaceCollision[] = [];\n\n for (const surface of [\"web\", \"api\"] as const) {\n const namespaceToPacks = new Map<string, string[]>();\n for (const manifest of manifests) {\n const namespaces = manifest.routeNamespace[surface];\n for (const namespace of namespaces) {\n const existing = namespaceToPacks.get(namespace) ?? [];\n existing.push(manifest.key);\n namespaceToPacks.set(namespace, existing);\n }\n }\n\n for (const [namespace, packKeys] of namespaceToPacks.entries()) {\n if (packKeys.length <= 1) {\n continue;\n }\n collisions.push({\n surface,\n namespace,\n packKeys: [...new Set(packKeys)].sort(),\n });\n }\n }\n\n return collisions.sort((left, right) => {\n if (left.surface !== right.surface) {\n return left.surface.localeCompare(right.surface);\n }\n return left.namespace.localeCompare(right.namespace);\n });\n}\n\nexport function validatePackNamespacePolicies(\n manifests: AppPackManifest[]\n): PackValidationIssue[] {\n const issues: PackValidationIssue[] = [];\n const collisions = detectNamespaceCollisions(manifests);\n const allowlistByKey = new Map<string, NamespaceCollisionAllowlistEntry>();\n\n for (const entry of PACK_NAMESPACE_COLLISION_ALLOWLIST) {\n const key = `${entry.surface}:${entry.namespace}`;\n if (allowlistByKey.has(key)) {\n issues.push(\n toIssue(\n \"PACK_NAMESPACE_ALLOWLIST_DUPLICATE\",\n `Duplicate allowlist entry for ${key}.`,\n \"namespacePolicy.allowlist\"\n )\n );\n continue;\n }\n allowlistByKey.set(key, entry);\n }\n\n for (const collision of collisions) {\n const key = `${collision.surface}:${collision.namespace}`;\n const allowlistEntry = allowlistByKey.get(key);\n if (!allowlistEntry) {\n issues.push(\n toIssue(\n \"PACK_NAMESPACE_COLLISION_UNAPPROVED\",\n `Unapproved ${collision.surface} namespace collision for \"${collision.namespace}\" across packs: ${collision.packKeys.join(\", \")}`,\n `namespacePolicy.${collision.surface}`\n )\n );\n continue;\n }\n\n const collidedSet = normalizeKeySet(collision.packKeys);\n const allowedSet = normalizeKeySet(allowlistEntry.allowedPackKeys);\n if (collidedSet !== allowedSet) {\n issues.push(\n toIssue(\n \"PACK_NAMESPACE_COLLISION_MISMATCH\",\n `Collision set mismatch for \"${collision.namespace}\". collided=${collidedSet} allowlist=${allowedSet}`,\n `namespacePolicy.${collision.surface}`\n )\n );\n }\n }\n\n return issues;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Legacy public @lucern/pack-host/serviceContracts subpath.\n/**\n * Pack Shared-Service Contract Checks\n *\n * Validates report/learning/decision integration declarations at manifest level.\n */\n\nimport type { AppPackManifest, SharedService } from \"./contracts\";\n\nexport interface PackSharedServiceIssue {\n code: string;\n message: string;\n packKey: string;\n service: SharedService;\n severity: \"error\" | \"warning\";\n}\n\nfunction hasSharedService(\n manifest: AppPackManifest,\n service: SharedService\n): boolean {\n return manifest.sharedServices.some(\n (integration) => integration.service === service\n );\n}\n\nfunction hasDecisionIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.category === \"decision\") {\n return true;\n }\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"decision.\") || flag.includes(\"decision.integration\")\n );\n}\n\nfunction hasReportIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.templates.reports.length > 0) {\n return true;\n }\n return manifest.routeNamespace.api.some((namespace) =>\n namespace.includes(\"/api/reports\")\n );\n}\n\nfunction hasLearningIntegrationSignals(manifest: AppPackManifest): boolean {\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"learning.\") ||\n flag.includes(\"policy.injection\") ||\n flag.includes(\"adaptive-learning\")\n );\n}\n\nexport function validatePackSharedServiceContracts(\n manifests: AppPackManifest[]\n): PackSharedServiceIssue[] {\n const issues: PackSharedServiceIssue[] = [];\n\n for (const manifest of manifests) {\n if (\n hasReportIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"knowledge-compiler\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"knowledge-compiler\",\n severity: \"error\",\n code: \"PACK_REPORT_SERVICE_MISSING\",\n message:\n \"Pack declares report outputs/routes but is missing knowledge-compiler shared service integration.\",\n });\n }\n\n if (\n hasDecisionIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"decision-kernel\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"decision-kernel\",\n severity: \"error\",\n code: \"PACK_DECISION_SERVICE_MISSING\",\n message:\n \"Pack declares decision behavior but is missing decision-kernel shared service integration.\",\n });\n }\n\n if (\n hasLearningIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"learning-loop\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"learning-loop\",\n severity: \"error\",\n code: \"PACK_LEARNING_SERVICE_MISSING\",\n message:\n \"Pack declares adaptive learning behavior but is missing learning-loop shared service integration.\",\n });\n }\n }\n\n return issues;\n}\n","/**\n * Pack Runtime Validation Orchestrator\n *\n * Aggregates manifest, dependency, and shared-service contract checks.\n */\n\nimport type { AppPackManifest } from \"./contracts\";\nimport { resolvePackDependencyGraph } from \"./dependencyResolution\";\nimport type {\n PackManifestValidationResult,\n PackSchemaDictionary,\n PackValidationIssue,\n} from \"./manifestValidation\";\nimport { validateAppPackManifest } from \"./manifestValidation\";\nimport { validatePackNamespacePolicies } from \"./namespacePolicy\";\nimport { validatePackSharedServiceContracts } from \"./serviceContracts\";\n\nexport interface PackRegistryValidationResult {\n dependencyClosureByPack: Record<string, string[]>;\n dependencyOrder: string[];\n issues: PackValidationIssue[];\n manifestResults: PackManifestValidationResult[];\n valid: boolean;\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 validateRegistryIdentity(\n manifests: AppPackManifest[]\n): PackValidationIssue[] {\n const issues: PackValidationIssue[] = [];\n const keyCounts = new Map<string, number>();\n const identityCounts = new Map<string, number>();\n\n for (const manifest of manifests) {\n keyCounts.set(manifest.key, (keyCounts.get(manifest.key) ?? 0) + 1);\n const identity = `${manifest.key}@${manifest.version}`;\n identityCounts.set(identity, (identityCounts.get(identity) ?? 0) + 1);\n }\n\n for (const [key, count] of keyCounts.entries()) {\n if (count > 1) {\n issues.push(\n toIssue(\n \"PACK_KEY_DUPLICATE\",\n `Duplicate pack key registered: ${key}`,\n \"registry.keys\"\n )\n );\n }\n }\n\n for (const [identity, count] of identityCounts.entries()) {\n if (count > 1) {\n issues.push(\n toIssue(\n \"PACK_VERSION_DUPLICATE\",\n `Duplicate pack identity registered: ${identity}`,\n \"registry.versions\"\n )\n );\n }\n }\n\n return issues;\n}\n\nexport function validatePackRegistry(\n manifests: AppPackManifest[],\n dictionary?: PackSchemaDictionary\n): PackRegistryValidationResult {\n const manifestResults = manifests.map((manifest) =>\n validateAppPackManifest(manifest, dictionary)\n );\n const dependencyResult = resolvePackDependencyGraph(manifests);\n const sharedServiceIssues = validatePackSharedServiceContracts(manifests).map(\n (issue) =>\n toIssue(\n issue.code,\n `[${issue.packKey}] ${issue.message}`,\n `sharedServices:${issue.packKey}`,\n issue.severity\n )\n );\n const namespaceIssues = validatePackNamespacePolicies(manifests);\n\n const issues: PackValidationIssue[] = [\n ...validateRegistryIdentity(manifests),\n ...manifestResults.flatMap((result) => result.issues),\n ...dependencyResult.issues,\n ...sharedServiceIssues,\n ...namespaceIssues,\n ];\n\n return {\n valid: issues.every((issue) => issue.severity !== \"error\"),\n manifestResults,\n dependencyOrder: dependencyResult.orderedPackKeys,\n dependencyClosureByPack: dependencyResult.dependencyClosureByPack,\n issues,\n };\n}\n"]}
@@ -6,13 +6,13 @@ import { SharedService, AppPackManifest } from './contracts.js';
6
6
  * Validates report/learning/decision integration declarations at manifest level.
7
7
  */
8
8
 
9
- type PackSharedServiceIssue = {
9
+ interface PackSharedServiceIssue {
10
+ code: string;
11
+ message: string;
10
12
  packKey: string;
11
13
  service: SharedService;
12
14
  severity: "error" | "warning";
13
- code: string;
14
- message: string;
15
- };
15
+ }
16
16
  declare function validatePackSharedServiceContracts(manifests: AppPackManifest[]): PackSharedServiceIssue[];
17
17
 
18
18
  export { type PackSharedServiceIssue, validatePackSharedServiceContracts };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/serviceContracts.ts"],"names":[],"mappings":";AAgBA,SAAS,gBAAA,CACP,UACA,OAAA,EACS;AACT,EAAA,OAAO,SAAS,cAAA,CAAe,IAAA;AAAA,IAC7B,CAAC,WAAA,KAAgB,WAAA,CAAY,OAAA,KAAY;AAAA,GAC3C;AACF;AAEA,SAAS,8BAA8B,QAAA,EAAoC;AACzE,EAAA,IAAI,QAAA,CAAS,aAAa,UAAA,EAAY;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,eAAA,CAAgB,IAAA;AAAA,IAC9B,CAAC,SACC,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,IAAK,IAAA,CAAK,SAAS,sBAAsB;AAAA,GACxE;AACF;AAEA,SAAS,4BAA4B,QAAA,EAAoC;AACvE,EAAA,IAAI,QAAA,CAAS,SAAA,CAAU,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAA,CAAS,eAAe,GAAA,CAAI,IAAA;AAAA,IAAK,CAAC,SAAA,KACvC,SAAA,CAAU,QAAA,CAAS,cAAc;AAAA,GACnC;AACF;AAEA,SAAS,8BAA8B,QAAA,EAAoC;AACzE,EAAA,OAAO,SAAS,eAAA,CAAgB,IAAA;AAAA,IAC9B,CAAC,IAAA,KACC,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,IAC3B,IAAA,CAAK,QAAA,CAAS,kBAAkB,CAAA,IAChC,IAAA,CAAK,QAAA,CAAS,mBAAmB;AAAA,GACrC;AACF;AAEO,SAAS,mCACd,SAAA,EAC0B;AAC1B,EAAA,MAAM,SAAmC,EAAC;AAE1C,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,IACE,4BAA4B,QAAQ,CAAA,IACpC,CAAC,gBAAA,CAAiB,QAAA,EAAU,oBAAoB,CAAA,EAChD;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,SAAS,QAAA,CAAS,GAAA;AAAA,QAClB,OAAA,EAAS,oBAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,6BAAA;AAAA,QACN,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAEA,IAAA,IACE,8BAA8B,QAAQ,CAAA,IACtC,CAAC,gBAAA,CAAiB,QAAA,EAAU,iBAAiB,CAAA,EAC7C;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,SAAS,QAAA,CAAS,GAAA;AAAA,QAClB,OAAA,EAAS,iBAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,+BAAA;AAAA,QACN,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAEA,IAAA,IACE,8BAA8B,QAAQ,CAAA,IACtC,CAAC,gBAAA,CAAiB,QAAA,EAAU,eAAe,CAAA,EAC3C;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,SAAS,QAAA,CAAS,GAAA;AAAA,QAClB,OAAA,EAAS,eAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,+BAAA;AAAA,QACN,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"serviceContracts.js","sourcesContent":["/**\n * Pack Shared-Service Contract Checks\n *\n * Validates report/learning/decision integration declarations at manifest level.\n */\n\nimport type { AppPackManifest, SharedService } from \"./contracts\";\n\nexport type PackSharedServiceIssue = {\n packKey: string;\n service: SharedService;\n severity: \"error\" | \"warning\";\n code: string;\n message: string;\n};\n\nfunction hasSharedService(\n manifest: AppPackManifest,\n service: SharedService\n): boolean {\n return manifest.sharedServices.some(\n (integration) => integration.service === service\n );\n}\n\nfunction hasDecisionIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.category === \"decision\") {\n return true;\n }\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"decision.\") || flag.includes(\"decision.integration\")\n );\n}\n\nfunction hasReportIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.templates.reports.length > 0) {\n return true;\n }\n return manifest.routeNamespace.api.some((namespace) =>\n namespace.includes(\"/api/reports\")\n );\n}\n\nfunction hasLearningIntegrationSignals(manifest: AppPackManifest): boolean {\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"learning.\") ||\n flag.includes(\"policy.injection\") ||\n flag.includes(\"adaptive-learning\")\n );\n}\n\nexport function validatePackSharedServiceContracts(\n manifests: AppPackManifest[]\n): PackSharedServiceIssue[] {\n const issues: PackSharedServiceIssue[] = [];\n\n for (const manifest of manifests) {\n if (\n hasReportIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"knowledge-compiler\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"knowledge-compiler\",\n severity: \"error\",\n code: \"PACK_REPORT_SERVICE_MISSING\",\n message:\n \"Pack declares report outputs/routes but is missing knowledge-compiler shared service integration.\",\n });\n }\n\n if (\n hasDecisionIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"decision-kernel\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"decision-kernel\",\n severity: \"error\",\n code: \"PACK_DECISION_SERVICE_MISSING\",\n message:\n \"Pack declares decision behavior but is missing decision-kernel shared service integration.\",\n });\n }\n\n if (\n hasLearningIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"learning-loop\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"learning-loop\",\n severity: \"error\",\n code: \"PACK_LEARNING_SERVICE_MISSING\",\n message:\n \"Pack declares adaptive learning behavior but is missing learning-loop shared service integration.\",\n });\n }\n }\n\n return issues;\n}\n"]}
1
+ {"version":3,"sources":["../src/serviceContracts.ts"],"names":[],"mappings":";AAiBA,SAAS,gBAAA,CACP,UACA,OAAA,EACS;AACT,EAAA,OAAO,SAAS,cAAA,CAAe,IAAA;AAAA,IAC7B,CAAC,WAAA,KAAgB,WAAA,CAAY,OAAA,KAAY;AAAA,GAC3C;AACF;AAEA,SAAS,8BAA8B,QAAA,EAAoC;AACzE,EAAA,IAAI,QAAA,CAAS,aAAa,UAAA,EAAY;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,eAAA,CAAgB,IAAA;AAAA,IAC9B,CAAC,SACC,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,IAAK,IAAA,CAAK,SAAS,sBAAsB;AAAA,GACxE;AACF;AAEA,SAAS,4BAA4B,QAAA,EAAoC;AACvE,EAAA,IAAI,QAAA,CAAS,SAAA,CAAU,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAA,CAAS,eAAe,GAAA,CAAI,IAAA;AAAA,IAAK,CAAC,SAAA,KACvC,SAAA,CAAU,QAAA,CAAS,cAAc;AAAA,GACnC;AACF;AAEA,SAAS,8BAA8B,QAAA,EAAoC;AACzE,EAAA,OAAO,SAAS,eAAA,CAAgB,IAAA;AAAA,IAC9B,CAAC,IAAA,KACC,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,IAC3B,IAAA,CAAK,QAAA,CAAS,kBAAkB,CAAA,IAChC,IAAA,CAAK,QAAA,CAAS,mBAAmB;AAAA,GACrC;AACF;AAEO,SAAS,mCACd,SAAA,EAC0B;AAC1B,EAAA,MAAM,SAAmC,EAAC;AAE1C,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,IACE,4BAA4B,QAAQ,CAAA,IACpC,CAAC,gBAAA,CAAiB,QAAA,EAAU,oBAAoB,CAAA,EAChD;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,SAAS,QAAA,CAAS,GAAA;AAAA,QAClB,OAAA,EAAS,oBAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,6BAAA;AAAA,QACN,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAEA,IAAA,IACE,8BAA8B,QAAQ,CAAA,IACtC,CAAC,gBAAA,CAAiB,QAAA,EAAU,iBAAiB,CAAA,EAC7C;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,SAAS,QAAA,CAAS,GAAA;AAAA,QAClB,OAAA,EAAS,iBAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,+BAAA;AAAA,QACN,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAEA,IAAA,IACE,8BAA8B,QAAQ,CAAA,IACtC,CAAC,gBAAA,CAAiB,QAAA,EAAU,eAAe,CAAA,EAC3C;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,SAAS,QAAA,CAAS,GAAA;AAAA,QAClB,OAAA,EAAS,eAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,+BAAA;AAAA,QACN,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"serviceContracts.js","sourcesContent":["// biome-ignore-all lint/style/useFilenamingConvention: Legacy public @lucern/pack-host/serviceContracts subpath.\n/**\n * Pack Shared-Service Contract Checks\n *\n * Validates report/learning/decision integration declarations at manifest level.\n */\n\nimport type { AppPackManifest, SharedService } from \"./contracts\";\n\nexport interface PackSharedServiceIssue {\n code: string;\n message: string;\n packKey: string;\n service: SharedService;\n severity: \"error\" | \"warning\";\n}\n\nfunction hasSharedService(\n manifest: AppPackManifest,\n service: SharedService\n): boolean {\n return manifest.sharedServices.some(\n (integration) => integration.service === service\n );\n}\n\nfunction hasDecisionIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.category === \"decision\") {\n return true;\n }\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"decision.\") || flag.includes(\"decision.integration\")\n );\n}\n\nfunction hasReportIntegrationSignals(manifest: AppPackManifest): boolean {\n if (manifest.templates.reports.length > 0) {\n return true;\n }\n return manifest.routeNamespace.api.some((namespace) =>\n namespace.includes(\"/api/reports\")\n );\n}\n\nfunction hasLearningIntegrationSignals(manifest: AppPackManifest): boolean {\n return manifest.capabilityFlags.some(\n (flag) =>\n flag.startsWith(\"learning.\") ||\n flag.includes(\"policy.injection\") ||\n flag.includes(\"adaptive-learning\")\n );\n}\n\nexport function validatePackSharedServiceContracts(\n manifests: AppPackManifest[]\n): PackSharedServiceIssue[] {\n const issues: PackSharedServiceIssue[] = [];\n\n for (const manifest of manifests) {\n if (\n hasReportIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"knowledge-compiler\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"knowledge-compiler\",\n severity: \"error\",\n code: \"PACK_REPORT_SERVICE_MISSING\",\n message:\n \"Pack declares report outputs/routes but is missing knowledge-compiler shared service integration.\",\n });\n }\n\n if (\n hasDecisionIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"decision-kernel\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"decision-kernel\",\n severity: \"error\",\n code: \"PACK_DECISION_SERVICE_MISSING\",\n message:\n \"Pack declares decision behavior but is missing decision-kernel shared service integration.\",\n });\n }\n\n if (\n hasLearningIntegrationSignals(manifest) &&\n !hasSharedService(manifest, \"learning-loop\")\n ) {\n issues.push({\n packKey: manifest.key,\n service: \"learning-loop\",\n severity: \"error\",\n code: \"PACK_LEARNING_SERVICE_MISSING\",\n message:\n \"Pack declares adaptive learning behavior but is missing learning-loop shared service integration.\",\n });\n }\n }\n\n return issues;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucern/pack-host",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "description": "Tenant-side pack host helpers and runtime registries for Lucern",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",