@lucern/pack-host 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -0
- package/dist/contracts.d.ts +77 -0
- package/dist/contracts.js +21 -0
- package/dist/contracts.js.map +1 -0
- package/dist/convex.config.d.ts +5 -0
- package/dist/convex.config.js +9 -0
- package/dist/convex.config.js.map +1 -0
- package/dist/dependencyResolution.d.ts +18 -0
- package/dist/dependencyResolution.js +131 -0
- package/dist/dependencyResolution.js.map +1 -0
- package/dist/domain-pack/authoring.d.ts +172 -0
- package/dist/domain-pack/authoring.js +1896 -0
- package/dist/domain-pack/authoring.js.map +1 -0
- package/dist/domain-pack/contracts.d.ts +183 -0
- package/dist/domain-pack/contracts.js +65 -0
- package/dist/domain-pack/contracts.js.map +1 -0
- package/dist/domain-pack/index.d.ts +8 -0
- package/dist/domain-pack/index.js +3813 -0
- package/dist/domain-pack/index.js.map +1 -0
- package/dist/domain-pack/ontology/software-entities-v1.d.ts +102 -0
- package/dist/domain-pack/ontology/software-entities-v1.js +104 -0
- package/dist/domain-pack/ontology/software-entities-v1.js.map +1 -0
- package/dist/domain-pack/packs/developer-reasoning.d.ts +14 -0
- package/dist/domain-pack/packs/developer-reasoning.js +339 -0
- package/dist/domain-pack/packs/developer-reasoning.js.map +1 -0
- package/dist/domain-pack/packs/engineering-accelerator.d.ts +11 -0
- package/dist/domain-pack/packs/engineering-accelerator.js +1348 -0
- package/dist/domain-pack/packs/engineering-accelerator.js.map +1 -0
- package/dist/domain-pack/packs/index.d.ts +18 -0
- package/dist/domain-pack/packs/index.js +2653 -0
- package/dist/domain-pack/packs/index.js.map +1 -0
- package/dist/domain-pack/shaping.d.ts +54 -0
- package/dist/domain-pack/shaping.js +1013 -0
- package/dist/domain-pack/shaping.js.map +1 -0
- package/dist/domain-pack/validation.d.ts +26 -0
- package/dist/domain-pack/validation.js +775 -0
- package/dist/domain-pack/validation.js.map +1 -0
- package/dist/domain-pack.d.ts +8 -0
- package/dist/domain-pack.js +3813 -0
- package/dist/domain-pack.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +5520 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle.d.ts +27 -0
- package/dist/lifecycle.js +98 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/manifestValidation.d.ts +28 -0
- package/dist/manifestValidation.js +253 -0
- package/dist/manifestValidation.js.map +1 -0
- package/dist/manifests/chat-v1.d.ts +10 -0
- package/dist/manifests/chat-v1.js +87 -0
- package/dist/manifests/chat-v1.js.map +1 -0
- package/dist/manifests/deals-v1.d.ts +10 -0
- package/dist/manifests/deals-v1.js +107 -0
- package/dist/manifests/deals-v1.js.map +1 -0
- package/dist/manifests/decisions-v1.d.ts +10 -0
- package/dist/manifests/decisions-v1.js +103 -0
- package/dist/manifests/decisions-v1.js.map +1 -0
- package/dist/manifests/documents-v1.d.ts +10 -0
- package/dist/manifests/documents-v1.js +88 -0
- package/dist/manifests/documents-v1.js.map +1 -0
- package/dist/manifests/epistemic-algorithms-v1.d.ts +10 -0
- package/dist/manifests/epistemic-algorithms-v1.js +107 -0
- package/dist/manifests/epistemic-algorithms-v1.js.map +1 -0
- package/dist/manifests/graph-visualization-v1.d.ts +10 -0
- package/dist/manifests/graph-visualization-v1.js +88 -0
- package/dist/manifests/graph-visualization-v1.js.map +1 -0
- package/dist/manifests/index.d.ts +23 -0
- package/dist/manifests/index.js +955 -0
- package/dist/manifests/index.js.map +1 -0
- package/dist/manifests/news-v1.d.ts +10 -0
- package/dist/manifests/news-v1.js +93 -0
- package/dist/manifests/news-v1.js.map +1 -0
- package/dist/manifests/philosophy-mode-v1.d.ts +10 -0
- package/dist/manifests/philosophy-mode-v1.js +100 -0
- package/dist/manifests/philosophy-mode-v1.js.map +1 -0
- package/dist/manifests/task-management-v1.d.ts +10 -0
- package/dist/manifests/task-management-v1.js +86 -0
- package/dist/manifests/task-management-v1.js.map +1 -0
- package/dist/manifests/team-analysis-v1.d.ts +10 -0
- package/dist/manifests/team-analysis-v1.js +93 -0
- package/dist/manifests/team-analysis-v1.js.map +1 -0
- package/dist/manifests/themes-v1.d.ts +10 -0
- package/dist/manifests/themes-v1.js +118 -0
- package/dist/manifests/themes-v1.js.map +1 -0
- package/dist/manifests/user-profiles-v1.d.ts +10 -0
- package/dist/manifests/user-profiles-v1.js +100 -0
- package/dist/manifests/user-profiles-v1.js.map +1 -0
- package/dist/manifests.d.ts +14 -0
- package/dist/manifests.js +955 -0
- package/dist/manifests.js.map +1 -0
- package/dist/namespacePolicy.d.ts +26 -0
- package/dist/namespacePolicy.js +129 -0
- package/dist/namespacePolicy.js.map +1 -0
- package/dist/registry.d.ts +13 -0
- package/dist/registry.js +1710 -0
- package/dist/registry.js.map +1 -0
- package/dist/runtime.d.ts +19 -0
- package/dist/runtime.js +638 -0
- package/dist/runtime.js.map +1 -0
- package/dist/serviceContracts.d.ts +18 -0
- package/dist/serviceContracts.js +64 -0
- package/dist/serviceContracts.js.map +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# @lucern/pack-host
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
`@lucern/pack-host` is the tenant-side surface for Lucern packs. It ships the
|
|
6
|
+
canonical app-pack manifests, runtime registry helpers, lifecycle evaluation,
|
|
7
|
+
and domain-pack shaping/runtime definitions that tenant Convex components use at
|
|
8
|
+
runtime.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pnpm add @lucern/pack-host convex
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
For Convex component composition:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import { defineApp } from "convex/server";
|
|
20
|
+
import packHost from "@lucern/pack-host/convex.config";
|
|
21
|
+
|
|
22
|
+
const app = defineApp();
|
|
23
|
+
app.use(packHost);
|
|
24
|
+
|
|
25
|
+
export default app;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## API
|
|
29
|
+
|
|
30
|
+
Briefly:
|
|
31
|
+
|
|
32
|
+
- `@lucern/pack-host` exports the runtime registry, lifecycle, validation, and
|
|
33
|
+
manifest helpers.
|
|
34
|
+
- `@lucern/pack-host/registry` exposes `appPackRegistry`,
|
|
35
|
+
`listAppPackManifests`, and `validateAppPackRegistry`.
|
|
36
|
+
- `@lucern/pack-host/domain-pack` exposes domain-pack contracts, shipped packs,
|
|
37
|
+
authoring helpers, and inquiry-shaping helpers.
|
|
38
|
+
- `@lucern/pack-host/domain-pack/shaping` exposes shaping contribution helpers
|
|
39
|
+
for tenant runtime flows such as worktree auto-shaping.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
|
|
43
|
+
Validate the current tenant-visible registry:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { validateAppPackRegistry } from "@lucern/pack-host/registry";
|
|
47
|
+
|
|
48
|
+
const validation = validateAppPackRegistry();
|
|
49
|
+
if (!validation.valid) {
|
|
50
|
+
throw new Error("Pack registry is invalid");
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Use shipped shaping contributions in tenant runtime code:
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import { getShapingContribution } from "@lucern/pack-host/domain-pack";
|
|
58
|
+
|
|
59
|
+
const shaping = getShapingContribution("engineering-accelerator");
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## License
|
|
63
|
+
|
|
64
|
+
UNLICENSED
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Pack Contracts
|
|
3
|
+
*
|
|
4
|
+
* Canonical type contracts for Lucern app-pack manifests and runtime metadata.
|
|
5
|
+
*/
|
|
6
|
+
type PackLifecycle = "active" | "beta" | "experimental";
|
|
7
|
+
type PackCategory = "conversation" | "research" | "graph" | "analytics" | "workflow" | "decision" | "news" | "documents" | "identity" | "operations" | "domain";
|
|
8
|
+
type PackAudience = string;
|
|
9
|
+
type PolicyAction = "read" | "summarize" | "export" | "mutate" | "admin";
|
|
10
|
+
type PolicyResource = "project" | "node" | "edge" | "artifact" | "report_section" | "tool_action" | "task" | "user_profile" | "team_analytics";
|
|
11
|
+
type ProjectionBehavior = "none" | "inherits_policy" | "projection_required";
|
|
12
|
+
type PackRuntimeStage = "registered" | "validated" | "installed" | "enabled" | "degraded" | "disabled" | "removed";
|
|
13
|
+
type SharedService = "decision-kernel" | "knowledge-compiler" | "learning-loop";
|
|
14
|
+
type SharedServiceMode = "required" | "optional";
|
|
15
|
+
type RouteNamespace = {
|
|
16
|
+
web: string[];
|
|
17
|
+
api: string[];
|
|
18
|
+
};
|
|
19
|
+
type SurfaceOwnership = {
|
|
20
|
+
components: string[];
|
|
21
|
+
convex: string[];
|
|
22
|
+
tools: string[];
|
|
23
|
+
};
|
|
24
|
+
type PolicyRule = {
|
|
25
|
+
resource: PolicyResource;
|
|
26
|
+
actions: PolicyAction[];
|
|
27
|
+
notes?: string;
|
|
28
|
+
};
|
|
29
|
+
type PolicyProfile = {
|
|
30
|
+
audiences: PackAudience[];
|
|
31
|
+
rules: PolicyRule[];
|
|
32
|
+
};
|
|
33
|
+
type DataContract = {
|
|
34
|
+
requiredNodeTypes: string[];
|
|
35
|
+
requiredEdgeTypes: string[];
|
|
36
|
+
requiredTables: string[];
|
|
37
|
+
projectionBehavior: ProjectionBehavior;
|
|
38
|
+
};
|
|
39
|
+
type TemplateAssets = {
|
|
40
|
+
workflows: string[];
|
|
41
|
+
prompts: string[];
|
|
42
|
+
reports: string[];
|
|
43
|
+
uiLabels: string[];
|
|
44
|
+
};
|
|
45
|
+
type PackTestSuite = {
|
|
46
|
+
parity: string[];
|
|
47
|
+
policy: string[];
|
|
48
|
+
contract: string[];
|
|
49
|
+
};
|
|
50
|
+
type SharedServiceIntegration = {
|
|
51
|
+
service: SharedService;
|
|
52
|
+
mode: SharedServiceMode;
|
|
53
|
+
contracts: string[];
|
|
54
|
+
};
|
|
55
|
+
type AppPackManifest = {
|
|
56
|
+
key: string;
|
|
57
|
+
name: string;
|
|
58
|
+
version: string;
|
|
59
|
+
lifecycle: PackLifecycle;
|
|
60
|
+
category: PackCategory;
|
|
61
|
+
description: string;
|
|
62
|
+
dependencies: string[];
|
|
63
|
+
capabilityFlags: string[];
|
|
64
|
+
routeNamespace: RouteNamespace;
|
|
65
|
+
surfaces: SurfaceOwnership;
|
|
66
|
+
policyProfile: PolicyProfile;
|
|
67
|
+
dataContract: DataContract;
|
|
68
|
+
templates: TemplateAssets;
|
|
69
|
+
testSuite: PackTestSuite;
|
|
70
|
+
sharedServices: SharedServiceIntegration[];
|
|
71
|
+
};
|
|
72
|
+
type AppPackManifestInput = Omit<AppPackManifest, "sharedServices"> & {
|
|
73
|
+
sharedServices?: SharedServiceIntegration[];
|
|
74
|
+
};
|
|
75
|
+
declare function defineAppPackManifest(manifest: AppPackManifestInput): AppPackManifest;
|
|
76
|
+
|
|
77
|
+
export { type AppPackManifest, type DataContract, type PackAudience, type PackCategory, type PackLifecycle, type PackRuntimeStage, type PackTestSuite, type PolicyAction, type PolicyProfile, type PolicyResource, type PolicyRule, type ProjectionBehavior, type RouteNamespace, type SharedService, type SharedServiceIntegration, type SharedServiceMode, type SurfaceOwnership, type TemplateAssets, defineAppPackManifest };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// src/contracts.ts
|
|
2
|
+
function normalizeStringArray(values) {
|
|
3
|
+
const normalized = values.map((value) => value.trim()).filter((value) => value.length > 0);
|
|
4
|
+
return Array.from(new Set(normalized));
|
|
5
|
+
}
|
|
6
|
+
function defineAppPackManifest(manifest) {
|
|
7
|
+
const sharedServices = (manifest.sharedServices ?? []).map((integration) => ({
|
|
8
|
+
...integration,
|
|
9
|
+
contracts: normalizeStringArray(integration.contracts)
|
|
10
|
+
}));
|
|
11
|
+
return {
|
|
12
|
+
...manifest,
|
|
13
|
+
dependencies: normalizeStringArray(manifest.dependencies),
|
|
14
|
+
capabilityFlags: normalizeStringArray(manifest.capabilityFlags),
|
|
15
|
+
sharedServices
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { defineAppPackManifest };
|
|
20
|
+
//# sourceMappingURL=contracts.js.map
|
|
21
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 type RouteNamespace = {\n web: string[];\n api: string[];\n};\n\nexport type SurfaceOwnership = {\n components: string[];\n convex: string[];\n tools: string[];\n};\n\nexport type PolicyRule = {\n resource: PolicyResource;\n actions: PolicyAction[];\n notes?: string;\n};\n\nexport type PolicyProfile = {\n audiences: PackAudience[];\n rules: PolicyRule[];\n};\n\nexport type DataContract = {\n requiredNodeTypes: string[];\n requiredEdgeTypes: string[];\n requiredTables: string[];\n projectionBehavior: ProjectionBehavior;\n};\n\nexport type TemplateAssets = {\n workflows: string[];\n prompts: string[];\n reports: string[];\n uiLabels: string[];\n};\n\nexport type PackTestSuite = {\n parity: string[];\n policy: string[];\n contract: string[];\n};\n\nexport type SharedServiceIntegration = {\n service: SharedService;\n mode: SharedServiceMode;\n contracts: string[];\n};\n\nexport type AppPackManifest = {\n key: string;\n name: string;\n version: string;\n lifecycle: PackLifecycle;\n category: PackCategory;\n description: string;\n dependencies: string[];\n capabilityFlags: string[];\n routeNamespace: RouteNamespace;\n surfaces: SurfaceOwnership;\n policyProfile: PolicyProfile;\n dataContract: DataContract;\n templates: TemplateAssets;\n testSuite: PackTestSuite;\n sharedServices: SharedServiceIntegration[];\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"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { defineComponent } from 'convex/server';
|
|
2
|
+
|
|
3
|
+
// convex.config.ts
|
|
4
|
+
var component = defineComponent("pack-host");
|
|
5
|
+
var convex_config_default = component;
|
|
6
|
+
|
|
7
|
+
export { convex_config_default as default };
|
|
8
|
+
//# sourceMappingURL=convex.config.js.map
|
|
9
|
+
//# sourceMappingURL=convex.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AppPackManifest } from './contracts.js';
|
|
2
|
+
import { PackValidationIssue } from './manifestValidation.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Pack Dependency Resolution
|
|
6
|
+
*
|
|
7
|
+
* Dependency-graph validation and deterministic activation ordering.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
type PackDependencyResolutionResult = {
|
|
11
|
+
orderedPackKeys: string[];
|
|
12
|
+
dependencyClosureByPack: Record<string, string[]>;
|
|
13
|
+
issues: PackValidationIssue[];
|
|
14
|
+
valid: boolean;
|
|
15
|
+
};
|
|
16
|
+
declare function resolvePackDependencyGraph(manifests: AppPackManifest[]): PackDependencyResolutionResult;
|
|
17
|
+
|
|
18
|
+
export { type PackDependencyResolutionResult, resolvePackDependencyGraph };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// src/dependencyResolution.ts
|
|
2
|
+
function toIssue(code, message, path, severity = "error") {
|
|
3
|
+
return {
|
|
4
|
+
code,
|
|
5
|
+
severity,
|
|
6
|
+
message,
|
|
7
|
+
path
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function buildManifestMap(manifests) {
|
|
11
|
+
return new Map(manifests.map((manifest) => [manifest.key, manifest]));
|
|
12
|
+
}
|
|
13
|
+
function walkDependencyClosure(manifestKey, manifestsByKey, path, closure, issues) {
|
|
14
|
+
const manifest = manifestsByKey.get(manifestKey);
|
|
15
|
+
if (!manifest) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
for (const dependency of manifest.dependencies) {
|
|
19
|
+
if (!manifestsByKey.has(dependency)) {
|
|
20
|
+
issues.push(
|
|
21
|
+
toIssue(
|
|
22
|
+
"PACK_DEPENDENCY_MISSING",
|
|
23
|
+
`Pack "${manifestKey}" depends on unknown pack "${dependency}".`,
|
|
24
|
+
`dependencies:${manifestKey}`
|
|
25
|
+
)
|
|
26
|
+
);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (path.includes(dependency)) {
|
|
30
|
+
const cycle = [...path, dependency].join(" -> ");
|
|
31
|
+
issues.push(
|
|
32
|
+
toIssue(
|
|
33
|
+
"PACK_DEPENDENCY_CYCLE",
|
|
34
|
+
`Cycle detected: ${cycle}`,
|
|
35
|
+
`dependencies:${manifestKey}`
|
|
36
|
+
)
|
|
37
|
+
);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (closure.has(dependency)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
closure.add(dependency);
|
|
44
|
+
walkDependencyClosure(
|
|
45
|
+
dependency,
|
|
46
|
+
manifestsByKey,
|
|
47
|
+
[...path, dependency],
|
|
48
|
+
closure,
|
|
49
|
+
issues
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function resolvePackDependencyGraph(manifests) {
|
|
54
|
+
const issues = [];
|
|
55
|
+
const manifestsByKey = buildManifestMap(manifests);
|
|
56
|
+
const indegree = /* @__PURE__ */ new Map();
|
|
57
|
+
const adjacency = /* @__PURE__ */ new Map();
|
|
58
|
+
for (const manifest of manifests) {
|
|
59
|
+
indegree.set(manifest.key, indegree.get(manifest.key) ?? 0);
|
|
60
|
+
adjacency.set(manifest.key, []);
|
|
61
|
+
}
|
|
62
|
+
for (const manifest of manifests) {
|
|
63
|
+
for (const dependency of manifest.dependencies) {
|
|
64
|
+
if (!manifestsByKey.has(dependency)) {
|
|
65
|
+
issues.push(
|
|
66
|
+
toIssue(
|
|
67
|
+
"PACK_DEPENDENCY_MISSING",
|
|
68
|
+
`Pack "${manifest.key}" depends on unknown pack "${dependency}".`,
|
|
69
|
+
`dependencies:${manifest.key}`
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const dependencyDependents = adjacency.get(dependency) ?? [];
|
|
75
|
+
dependencyDependents.push(manifest.key);
|
|
76
|
+
adjacency.set(dependency, dependencyDependents);
|
|
77
|
+
indegree.set(manifest.key, (indegree.get(manifest.key) ?? 0) + 1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const queue = [...indegree.entries()].filter(([, value]) => value === 0).map(([packKey]) => packKey).sort();
|
|
81
|
+
const orderedPackKeys = [];
|
|
82
|
+
while (queue.length > 0) {
|
|
83
|
+
const nextKey = queue.shift();
|
|
84
|
+
if (!nextKey) {
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
orderedPackKeys.push(nextKey);
|
|
88
|
+
const dependents = adjacency.get(nextKey) ?? [];
|
|
89
|
+
for (const dependent of dependents) {
|
|
90
|
+
const current = indegree.get(dependent) ?? 0;
|
|
91
|
+
const updated = current - 1;
|
|
92
|
+
indegree.set(dependent, updated);
|
|
93
|
+
if (updated === 0) {
|
|
94
|
+
queue.push(dependent);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
queue.sort();
|
|
98
|
+
}
|
|
99
|
+
if (orderedPackKeys.length !== manifestsByKey.size) {
|
|
100
|
+
const unresolved = [...indegree.entries()].filter(([, value]) => value > 0).map(([key]) => key).sort();
|
|
101
|
+
issues.push(
|
|
102
|
+
toIssue(
|
|
103
|
+
"PACK_DEPENDENCY_CYCLE",
|
|
104
|
+
`Dependency graph is not acyclic; unresolved packs: ${unresolved.join(", ")}`,
|
|
105
|
+
"dependencies"
|
|
106
|
+
)
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
const dependencyClosureByPack = {};
|
|
110
|
+
for (const manifest of manifests) {
|
|
111
|
+
const closure = /* @__PURE__ */ new Set();
|
|
112
|
+
walkDependencyClosure(
|
|
113
|
+
manifest.key,
|
|
114
|
+
manifestsByKey,
|
|
115
|
+
[manifest.key],
|
|
116
|
+
closure,
|
|
117
|
+
issues
|
|
118
|
+
);
|
|
119
|
+
dependencyClosureByPack[manifest.key] = [...closure].sort();
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
orderedPackKeys,
|
|
123
|
+
dependencyClosureByPack,
|
|
124
|
+
issues,
|
|
125
|
+
valid: issues.every((issue) => issue.severity !== "error")
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export { resolvePackDependencyGraph };
|
|
130
|
+
//# sourceMappingURL=dependencyResolution.js.map
|
|
131
|
+
//# sourceMappingURL=dependencyResolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dependencyResolution.ts"],"names":[],"mappings":"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","file":"dependencyResolution.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"]}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { RuntimeTarget, DomainPack, DomainPackInput } from './contracts.js';
|
|
2
|
+
import { DomainPackValidationIssue } from './validation.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Domain Pack Authoring Kit
|
|
6
|
+
*
|
|
7
|
+
* Config-first authoring surface for tenant-authored domain packs. This layer
|
|
8
|
+
* wraps the internal DomainPack contract in a stable manifest envelope with
|
|
9
|
+
* framework versioning, schema and ontology extension contracts, remix/fork
|
|
10
|
+
* lineage, and tool-shaped validate/preview/publish handlers.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
declare const DOMAIN_PACK_MANIFEST_KIND: "lucern-domain-pack-manifest";
|
|
14
|
+
declare const AUTHORING_TOOL_NAMES: {
|
|
15
|
+
readonly validate: "validate_domain_pack_manifest";
|
|
16
|
+
readonly preview: "preview_domain_pack_manifest";
|
|
17
|
+
readonly publish: "publish_domain_pack_manifest";
|
|
18
|
+
};
|
|
19
|
+
type DomainPackManifestFormat = "json" | "yaml";
|
|
20
|
+
type DomainPackFrameworkContract = {
|
|
21
|
+
frameworkId: string;
|
|
22
|
+
version: string;
|
|
23
|
+
versionConstraint?: string;
|
|
24
|
+
required?: boolean;
|
|
25
|
+
runtimeTargets?: RuntimeTarget[];
|
|
26
|
+
};
|
|
27
|
+
type DomainPackSchemaExtensionTarget = "artifact" | "workflow" | "gate" | "prompt" | "tool" | "install-profile" | "topic-template";
|
|
28
|
+
type DomainPackSchemaExtension = {
|
|
29
|
+
extensionId: string;
|
|
30
|
+
target: DomainPackSchemaExtensionTarget;
|
|
31
|
+
description: string;
|
|
32
|
+
version: string;
|
|
33
|
+
extends?: string;
|
|
34
|
+
schema: Record<string, unknown>;
|
|
35
|
+
};
|
|
36
|
+
type DomainPackOntologyEntityExtension = {
|
|
37
|
+
value: string;
|
|
38
|
+
label: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
schema?: Record<string, unknown>;
|
|
41
|
+
subtypes?: string[];
|
|
42
|
+
};
|
|
43
|
+
type DomainPackOntologyEdgeExtension = {
|
|
44
|
+
value: string;
|
|
45
|
+
label: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
sourceTypes?: string[];
|
|
48
|
+
targetTypes?: string[];
|
|
49
|
+
constraintSeverity?: "error" | "warning" | "informational";
|
|
50
|
+
};
|
|
51
|
+
type DomainPackOntologyExtension = {
|
|
52
|
+
extensionId: string;
|
|
53
|
+
ontologyId: string;
|
|
54
|
+
baseVersionConstraint: string;
|
|
55
|
+
additiveOnly: boolean;
|
|
56
|
+
entityTypes?: DomainPackOntologyEntityExtension[];
|
|
57
|
+
edgeTypes?: DomainPackOntologyEdgeExtension[];
|
|
58
|
+
};
|
|
59
|
+
type DomainPackLineageMode = "root" | "remix" | "fork";
|
|
60
|
+
type DomainPackLineage = {
|
|
61
|
+
mode: DomainPackLineageMode;
|
|
62
|
+
parentPackId?: string;
|
|
63
|
+
parentVersion?: string;
|
|
64
|
+
parentManifestDigest?: string;
|
|
65
|
+
supersedesPackId?: string;
|
|
66
|
+
notes?: string;
|
|
67
|
+
};
|
|
68
|
+
type DomainPackAuthoringMetadata = {
|
|
69
|
+
description?: string;
|
|
70
|
+
owner?: string;
|
|
71
|
+
tags?: string[];
|
|
72
|
+
};
|
|
73
|
+
type DomainPackAuthoringManifest = {
|
|
74
|
+
kind: typeof DOMAIN_PACK_MANIFEST_KIND;
|
|
75
|
+
manifestVersion: string;
|
|
76
|
+
pack: DomainPack;
|
|
77
|
+
frameworks?: DomainPackFrameworkContract[];
|
|
78
|
+
schemaExtensions?: DomainPackSchemaExtension[];
|
|
79
|
+
ontologyExtensions?: DomainPackOntologyExtension[];
|
|
80
|
+
lineage: DomainPackLineage;
|
|
81
|
+
metadata?: DomainPackAuthoringMetadata;
|
|
82
|
+
};
|
|
83
|
+
type DomainPackAuthoringManifestInput = {
|
|
84
|
+
kind?: typeof DOMAIN_PACK_MANIFEST_KIND;
|
|
85
|
+
manifestVersion?: string;
|
|
86
|
+
pack: DomainPack | DomainPackInput;
|
|
87
|
+
frameworks?: DomainPackFrameworkContract[];
|
|
88
|
+
schemaExtensions?: DomainPackSchemaExtension[];
|
|
89
|
+
ontologyExtensions?: DomainPackOntologyExtension[];
|
|
90
|
+
lineage?: DomainPackLineage;
|
|
91
|
+
metadata?: DomainPackAuthoringMetadata;
|
|
92
|
+
};
|
|
93
|
+
type DomainPackAuthoringValidationIssue = DomainPackValidationIssue & {
|
|
94
|
+
source: "manifest" | "pack" | "framework" | "schema-extension" | "ontology-extension" | "lineage" | "terminology" | "parse";
|
|
95
|
+
};
|
|
96
|
+
type DomainPackManifestCounts = {
|
|
97
|
+
topicRoots: number;
|
|
98
|
+
workflows: number;
|
|
99
|
+
gates: number;
|
|
100
|
+
artifacts: number;
|
|
101
|
+
roles: number;
|
|
102
|
+
prompts: number;
|
|
103
|
+
tools: number;
|
|
104
|
+
setupAssets: number;
|
|
105
|
+
installProfiles: number;
|
|
106
|
+
frameworks: number;
|
|
107
|
+
schemaExtensions: number;
|
|
108
|
+
ontologyExtensions: number;
|
|
109
|
+
};
|
|
110
|
+
type DomainPackAuthoringValidationResult = {
|
|
111
|
+
valid: boolean;
|
|
112
|
+
format: DomainPackManifestFormat | null;
|
|
113
|
+
manifest: DomainPackAuthoringManifest | null;
|
|
114
|
+
manifestDigest: string | null;
|
|
115
|
+
issues: DomainPackAuthoringValidationIssue[];
|
|
116
|
+
counts: DomainPackManifestCounts;
|
|
117
|
+
};
|
|
118
|
+
type DomainPackAuthoringPreview = DomainPackAuthoringValidationResult & {
|
|
119
|
+
readyToPublish: boolean;
|
|
120
|
+
canonicalJson: string | null;
|
|
121
|
+
canonicalYaml: string | null;
|
|
122
|
+
lineageSummary: string | null;
|
|
123
|
+
requiredRuntimeTargets: RuntimeTarget[];
|
|
124
|
+
};
|
|
125
|
+
type DomainPackPublicationLineageEdge = {
|
|
126
|
+
edgeType: "remixed_from" | "supersedes";
|
|
127
|
+
childPackId: string;
|
|
128
|
+
parentPackId: string;
|
|
129
|
+
parentVersion: string;
|
|
130
|
+
};
|
|
131
|
+
type DomainPackPublication = {
|
|
132
|
+
publicationId: string;
|
|
133
|
+
packId: string;
|
|
134
|
+
version: string;
|
|
135
|
+
manifestDigest: string;
|
|
136
|
+
manifest: DomainPackAuthoringManifest;
|
|
137
|
+
lineageEdge: DomainPackPublicationLineageEdge | null;
|
|
138
|
+
canonicalJson: string;
|
|
139
|
+
canonicalYaml: string;
|
|
140
|
+
};
|
|
141
|
+
type DomainPackPublishResult = {
|
|
142
|
+
published: boolean;
|
|
143
|
+
preview: DomainPackAuthoringPreview;
|
|
144
|
+
publication: DomainPackPublication | null;
|
|
145
|
+
};
|
|
146
|
+
type DomainPackAuthoringToolInput = {
|
|
147
|
+
manifestText: string;
|
|
148
|
+
format?: DomainPackManifestFormat;
|
|
149
|
+
};
|
|
150
|
+
type DomainPackAuthoringToolDefinition<Result> = {
|
|
151
|
+
name: typeof AUTHORING_TOOL_NAMES.validate | typeof AUTHORING_TOOL_NAMES.preview | typeof AUTHORING_TOOL_NAMES.publish;
|
|
152
|
+
description: string;
|
|
153
|
+
inputSchema: Record<string, unknown>;
|
|
154
|
+
execute: (args: DomainPackAuthoringToolInput) => Result;
|
|
155
|
+
};
|
|
156
|
+
type DomainPackAuthoringToolset = {
|
|
157
|
+
validate: DomainPackAuthoringToolDefinition<DomainPackAuthoringValidationResult>;
|
|
158
|
+
preview: DomainPackAuthoringToolDefinition<DomainPackAuthoringPreview>;
|
|
159
|
+
publish: DomainPackAuthoringToolDefinition<DomainPackPublishResult>;
|
|
160
|
+
};
|
|
161
|
+
declare function defineDomainPackAuthoringManifest(input: DomainPackAuthoringManifestInput): DomainPackAuthoringManifest;
|
|
162
|
+
declare function serializeDomainPackAuthoringManifest(manifest: DomainPackAuthoringManifest, format?: DomainPackManifestFormat): string;
|
|
163
|
+
declare function parseDomainPackAuthoringManifest(source: string, format?: DomainPackManifestFormat): DomainPackAuthoringManifest;
|
|
164
|
+
declare function validateDomainPackAuthoringManifest(manifest: DomainPackAuthoringManifest | DomainPackAuthoringManifestInput): DomainPackAuthoringValidationResult;
|
|
165
|
+
declare function validateDomainPackAuthoringManifestSource(source: string, format?: DomainPackManifestFormat): DomainPackAuthoringValidationResult;
|
|
166
|
+
declare function previewDomainPackAuthoringManifest(manifest: DomainPackAuthoringManifest | DomainPackAuthoringManifestInput): DomainPackAuthoringPreview;
|
|
167
|
+
declare function previewDomainPackAuthoringManifestSource(source: string, format?: DomainPackManifestFormat): DomainPackAuthoringPreview;
|
|
168
|
+
declare function publishDomainPackAuthoringManifest(manifest: DomainPackAuthoringManifest | DomainPackAuthoringManifestInput): DomainPackPublishResult;
|
|
169
|
+
declare function publishDomainPackAuthoringManifestSource(source: string, format?: DomainPackManifestFormat): DomainPackPublishResult;
|
|
170
|
+
declare function createDomainPackAuthoringTools(): DomainPackAuthoringToolset;
|
|
171
|
+
|
|
172
|
+
export { type DomainPackAuthoringManifest, type DomainPackAuthoringManifestInput, type DomainPackAuthoringMetadata, type DomainPackAuthoringPreview, type DomainPackAuthoringToolDefinition, type DomainPackAuthoringToolInput, type DomainPackAuthoringToolset, type DomainPackAuthoringValidationIssue, type DomainPackAuthoringValidationResult, type DomainPackFrameworkContract, type DomainPackLineage, type DomainPackLineageMode, type DomainPackManifestCounts, type DomainPackManifestFormat, type DomainPackOntologyEdgeExtension, type DomainPackOntologyEntityExtension, type DomainPackOntologyExtension, type DomainPackPublication, type DomainPackPublicationLineageEdge, type DomainPackPublishResult, type DomainPackSchemaExtension, type DomainPackSchemaExtensionTarget, createDomainPackAuthoringTools, defineDomainPackAuthoringManifest, parseDomainPackAuthoringManifest, previewDomainPackAuthoringManifest, previewDomainPackAuthoringManifestSource, publishDomainPackAuthoringManifest, publishDomainPackAuthoringManifestSource, serializeDomainPackAuthoringManifest, validateDomainPackAuthoringManifest, validateDomainPackAuthoringManifestSource };
|