@domainlang/language 0.1.81 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +147 -16
  2. package/out/domain-lang-module.d.ts +2 -0
  3. package/out/domain-lang-module.js +11 -3
  4. package/out/domain-lang-module.js.map +1 -1
  5. package/out/generated/ast.d.ts +8 -19
  6. package/out/generated/ast.js +1 -10
  7. package/out/generated/ast.js.map +1 -1
  8. package/out/generated/grammar.d.ts +1 -1
  9. package/out/generated/grammar.js +28 -123
  10. package/out/generated/grammar.js.map +1 -1
  11. package/out/generated/module.d.ts +1 -1
  12. package/out/generated/module.js +1 -1
  13. package/out/index.d.ts +3 -0
  14. package/out/index.js +5 -0
  15. package/out/index.js.map +1 -1
  16. package/out/lsp/domain-lang-code-actions.d.ts +55 -0
  17. package/out/lsp/domain-lang-code-actions.js +143 -0
  18. package/out/lsp/domain-lang-code-actions.js.map +1 -0
  19. package/out/lsp/domain-lang-workspace-manager.d.ts +21 -0
  20. package/out/lsp/domain-lang-workspace-manager.js +93 -0
  21. package/out/lsp/domain-lang-workspace-manager.js.map +1 -0
  22. package/out/lsp/hover/domain-lang-hover.js +0 -4
  23. package/out/lsp/hover/domain-lang-hover.js.map +1 -1
  24. package/out/lsp/manifest-diagnostics.d.ts +82 -0
  25. package/out/lsp/manifest-diagnostics.js +230 -0
  26. package/out/lsp/manifest-diagnostics.js.map +1 -0
  27. package/out/sdk/index.d.ts +1 -1
  28. package/out/sdk/loader-node.d.ts +7 -3
  29. package/out/sdk/loader-node.js +24 -9
  30. package/out/sdk/loader-node.js.map +1 -1
  31. package/out/sdk/types.d.ts +0 -21
  32. package/out/services/dependency-analyzer.d.ts +3 -39
  33. package/out/services/dependency-analyzer.js +22 -47
  34. package/out/services/dependency-analyzer.js.map +1 -1
  35. package/out/services/dependency-resolver.d.ts +68 -45
  36. package/out/services/dependency-resolver.js +243 -43
  37. package/out/services/dependency-resolver.js.map +1 -1
  38. package/out/services/git-url-resolver.browser.d.ts +4 -12
  39. package/out/services/git-url-resolver.browser.js +5 -1
  40. package/out/services/git-url-resolver.browser.js.map +1 -1
  41. package/out/services/git-url-resolver.d.ts +22 -56
  42. package/out/services/git-url-resolver.js +70 -36
  43. package/out/services/git-url-resolver.js.map +1 -1
  44. package/out/services/governance-validator.d.ts +1 -37
  45. package/out/services/governance-validator.js +4 -10
  46. package/out/services/governance-validator.js.map +1 -1
  47. package/out/services/import-resolver.d.ts +65 -6
  48. package/out/services/import-resolver.js +223 -5
  49. package/out/services/import-resolver.js.map +1 -1
  50. package/out/services/performance-optimizer.d.ts +1 -1
  51. package/out/services/semver.d.ts +98 -0
  52. package/out/services/semver.js +195 -0
  53. package/out/services/semver.js.map +1 -0
  54. package/out/services/types.d.ts +340 -0
  55. package/out/services/types.js +46 -0
  56. package/out/services/types.js.map +1 -0
  57. package/out/services/workspace-manager.d.ts +57 -10
  58. package/out/services/workspace-manager.js +187 -21
  59. package/out/services/workspace-manager.js.map +1 -1
  60. package/out/syntaxes/domain-lang.monarch.js +1 -1
  61. package/out/syntaxes/domain-lang.monarch.js.map +1 -1
  62. package/out/utils/import-utils.d.ts +4 -12
  63. package/out/utils/import-utils.js +35 -135
  64. package/out/utils/import-utils.js.map +1 -1
  65. package/out/validation/constants.d.ts +103 -0
  66. package/out/validation/constants.js +141 -2
  67. package/out/validation/constants.js.map +1 -1
  68. package/out/validation/domain.js +46 -1
  69. package/out/validation/domain.js.map +1 -1
  70. package/out/validation/import.d.ts +46 -22
  71. package/out/validation/import.js +187 -85
  72. package/out/validation/import.js.map +1 -1
  73. package/out/validation/manifest.d.ts +144 -0
  74. package/out/validation/manifest.js +327 -0
  75. package/out/validation/manifest.js.map +1 -0
  76. package/out/validation/maps.js +10 -6
  77. package/out/validation/maps.js.map +1 -1
  78. package/out/validation/metadata.js +5 -1
  79. package/out/validation/metadata.js.map +1 -1
  80. package/package.json +23 -10
  81. package/src/domain-lang-module.ts +18 -6
  82. package/src/domain-lang.langium +7 -12
  83. package/src/generated/ast.ts +7 -20
  84. package/src/generated/grammar.ts +28 -123
  85. package/src/generated/module.ts +1 -1
  86. package/src/index.ts +7 -0
  87. package/src/lsp/domain-lang-code-actions.ts +189 -0
  88. package/src/lsp/domain-lang-workspace-manager.ts +104 -0
  89. package/src/lsp/hover/domain-lang-hover.ts +0 -2
  90. package/src/lsp/manifest-diagnostics.ts +290 -0
  91. package/src/sdk/index.ts +0 -2
  92. package/src/sdk/loader-node.ts +29 -9
  93. package/src/sdk/types.ts +0 -23
  94. package/src/services/dependency-analyzer.ts +24 -84
  95. package/src/services/dependency-resolver.ts +301 -84
  96. package/src/services/git-url-resolver.browser.ts +9 -14
  97. package/src/services/git-url-resolver.ts +86 -93
  98. package/src/services/governance-validator.ts +5 -47
  99. package/src/services/import-resolver.ts +270 -8
  100. package/src/services/performance-optimizer.ts +1 -1
  101. package/src/services/semver.ts +213 -0
  102. package/src/services/types.ts +415 -0
  103. package/src/services/workspace-manager.ts +237 -46
  104. package/src/syntaxes/domain-lang.monarch.ts +1 -1
  105. package/src/utils/import-utils.ts +38 -160
  106. package/src/validation/constants.ts +182 -2
  107. package/src/validation/domain.ts +54 -1
  108. package/src/validation/import.ts +228 -104
  109. package/src/validation/manifest.ts +439 -0
  110. package/src/validation/maps.ts +10 -6
  111. package/src/validation/metadata.ts +5 -1
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Centralized Type Definitions for DomainLang Services
3
+ *
4
+ * Type design principles:
5
+ * - **Atomic**: Each type represents a single, well-defined concept
6
+ * - **Non-overlapping**: Types don't duplicate fields unnecessarily
7
+ * - **Rich**: Types use adjacent types for composition rather than primitives
8
+ * - **Discriminated**: Union types use discriminants for type narrowing
9
+ *
10
+ * Type hierarchy:
11
+ * ```
12
+ * Core Building Blocks
13
+ * ├── RefType (discriminant for git references)
14
+ * └── SemVer (semantic version components)
15
+ *
16
+ * Package Identity
17
+ * └── PackageIdentity (name, version, entry)
18
+ *
19
+ * Dependencies
20
+ * ├── DependencySpec (how deps are specified)
21
+ * │ ├── ShortDependencySpec (string ref only)
22
+ * │ └── ExtendedDependencySpec (full options)
23
+ * └── ResolvedDependency (locked/pinned state)
24
+ *
25
+ * Manifest & Lock
26
+ * ├── ModelManifest (model.yaml schema)
27
+ * └── LockFile (model.lock schema)
28
+ *
29
+ * Resolution Graph
30
+ * ├── DependencyNode (graph node during resolution)
31
+ * └── DependencyGraph (complete resolution graph)
32
+ *
33
+ * Analysis & Governance
34
+ * ├── GovernancePolicy (policy configuration)
35
+ * └── GovernanceViolation (validation result)
36
+ * ```
37
+ *
38
+ * @module services/types
39
+ */
40
+ /**
41
+ * Type of git reference for version pinning.
42
+ *
43
+ * Used as discriminant in ref-related types:
44
+ * - **tag**: SemVer version tag (v1.0.0, 2.3.4)
45
+ * - **branch**: Branch name (main, develop)
46
+ * - **commit**: Full commit SHA (40 hex chars)
47
+ */
48
+ export type RefType = 'tag' | 'branch' | 'commit';
49
+ /**
50
+ * Parsed semantic version following SemVer 2.0.0.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const v: SemVer = {
55
+ * major: 1, minor: 2, patch: 3,
56
+ * preRelease: 'beta.1',
57
+ * original: 'v1.2.3-beta.1'
58
+ * };
59
+ * ```
60
+ */
61
+ export interface SemVer {
62
+ readonly major: number;
63
+ readonly minor: number;
64
+ readonly patch: number;
65
+ /** Pre-release identifier (e.g., "alpha", "beta.1", "rc.2") */
66
+ readonly preRelease?: string;
67
+ /** Build metadata - ignored in version comparison */
68
+ readonly buildMetadata?: string;
69
+ /** Original string representation */
70
+ readonly original: string;
71
+ }
72
+ /**
73
+ * Result of parsing a git ref string.
74
+ */
75
+ export interface ParsedRef {
76
+ readonly type: RefType;
77
+ /** Present only for valid SemVer tags */
78
+ readonly semver?: SemVer;
79
+ readonly original: string;
80
+ }
81
+ /**
82
+ * Core package identity and metadata.
83
+ *
84
+ * Used in model.yaml `model:` section and internally during resolution.
85
+ */
86
+ export interface PackageIdentity {
87
+ /** Package name in owner/repo format */
88
+ readonly name?: string;
89
+ /** SemVer version string */
90
+ readonly version?: string;
91
+ /** Entry point file (default: index.dlang) */
92
+ readonly entry?: string;
93
+ }
94
+ /**
95
+ * Extended dependency specification with full options.
96
+ *
97
+ * Either `source` OR `path` must be provided (mutually exclusive):
98
+ * - `source`: Remote git coordinates (owner/repo)
99
+ * - `path`: Local filesystem path for monorepo deps
100
+ */
101
+ export interface ExtendedDependencySpec {
102
+ /** Git coordinates (owner/repo) - mutually exclusive with path */
103
+ readonly source?: string;
104
+ /** Git ref (tag, branch, or commit SHA) */
105
+ readonly ref?: string;
106
+ /** Local path - mutually exclusive with source */
107
+ readonly path?: string;
108
+ /** SHA-256 integrity hash for verification */
109
+ readonly integrity?: string;
110
+ /** Human-readable description */
111
+ readonly description?: string;
112
+ }
113
+ /**
114
+ * Dependency specification in model.yaml.
115
+ *
116
+ * Can be either:
117
+ * - **string**: Short form (just the ref, key is owner/repo)
118
+ * - **ExtendedDependencySpec**: Full form with options
119
+ *
120
+ * @example
121
+ * ```yaml
122
+ * dependencies:
123
+ * acme/core: "v1.0.0" # Short form
124
+ * acme/utils: # Extended form
125
+ * source: acme/utils
126
+ * ref: main
127
+ * integrity: sha256-abc123
128
+ * ```
129
+ */
130
+ export type DependencySpec = string | ExtendedDependencySpec;
131
+ /**
132
+ * Type guard for extended dependency spec.
133
+ */
134
+ export declare function isExtendedDependencySpec(dep: DependencySpec): dep is ExtendedDependencySpec;
135
+ /**
136
+ * A fully resolved and locked dependency.
137
+ *
138
+ * Represents a dependency after resolution with all fields pinned
139
+ * to exact values for reproducible builds.
140
+ */
141
+ export interface LockedDependency {
142
+ /** Original ref from manifest */
143
+ readonly ref: string;
144
+ /** Detected ref type */
145
+ readonly refType: RefType;
146
+ /** Full git URL used for fetching */
147
+ readonly resolved: string;
148
+ /** Exact commit hash (40-char SHA) */
149
+ readonly commit: string;
150
+ /** Optional integrity hash */
151
+ readonly integrity?: string;
152
+ }
153
+ /**
154
+ * Path aliases for @ imports.
155
+ *
156
+ * @example
157
+ * ```yaml
158
+ * paths:
159
+ * "@/": "./src/"
160
+ * "@shared/": "./libs/shared/"
161
+ * ```
162
+ */
163
+ export type PathAliases = Readonly<Record<string, string>>;
164
+ /**
165
+ * Governance policy configuration.
166
+ */
167
+ export interface GovernancePolicy {
168
+ /** Allowed git domains (e.g., ['github.com/acme']) */
169
+ readonly allowedSources?: readonly string[];
170
+ /** Blocked packages or patterns */
171
+ readonly blockedPackages?: readonly string[];
172
+ /** Require stable versions only (no pre-release) */
173
+ readonly requireStableVersions?: boolean;
174
+ /** Require team ownership metadata */
175
+ readonly requireTeamOwnership?: boolean;
176
+ /** Allowed licenses */
177
+ readonly allowedLicenses?: readonly string[];
178
+ }
179
+ /**
180
+ * Package manifest (model.yaml) schema.
181
+ *
182
+ * This is the user-facing YAML file structure.
183
+ */
184
+ export interface ModelManifest {
185
+ /** Package identity and metadata */
186
+ readonly model?: PackageIdentity;
187
+ /** Path aliases for @ imports */
188
+ readonly paths?: PathAliases;
189
+ /** Dependencies keyed by alias or owner/repo */
190
+ readonly dependencies?: Readonly<Record<string, DependencySpec>>;
191
+ /** Ref overrides for conflict resolution */
192
+ readonly overrides?: Readonly<Record<string, string>>;
193
+ /** Governance policies */
194
+ readonly governance?: GovernancePolicy;
195
+ }
196
+ /**
197
+ * Lock file schema (model.lock).
198
+ *
199
+ * Pins exact commits for reproducible builds.
200
+ */
201
+ export interface LockFile {
202
+ /** Lock file format version */
203
+ readonly version: string;
204
+ /** All locked dependencies keyed by package name */
205
+ readonly dependencies: Readonly<Record<string, LockedDependency>>;
206
+ }
207
+ /**
208
+ * Mutable package metadata during resolution.
209
+ *
210
+ * Unlike PackageIdentity (readonly user-facing), this is mutable
211
+ * because the resolver builds it incrementally during YAML parsing.
212
+ */
213
+ export interface ResolvingPackage {
214
+ name?: string;
215
+ version?: string;
216
+ entry?: string;
217
+ exports?: Record<string, string>;
218
+ /** Dependencies as name → ref constraint */
219
+ dependencies?: Record<string, string>;
220
+ /** Ref overrides */
221
+ overrides?: Record<string, string>;
222
+ }
223
+ /**
224
+ * Node in the dependency graph during resolution.
225
+ */
226
+ export interface DependencyNode {
227
+ /** Package identifier (owner/repo) */
228
+ readonly packageKey: string;
229
+ /** Primary ref constraint from first encounter */
230
+ refConstraint: string;
231
+ /** All observed constraints from different parents */
232
+ constraints?: Set<string>;
233
+ /** Resolved ref after conflict resolution */
234
+ resolvedRef?: string;
235
+ /** Detected ref type */
236
+ refType?: RefType;
237
+ /** Resolved commit hash */
238
+ commitHash?: string;
239
+ /** Full git repository URL */
240
+ repoUrl?: string;
241
+ /** Direct dependencies of this package */
242
+ dependencies: Record<string, string>;
243
+ /** Parent packages that depend on this one */
244
+ dependents: string[];
245
+ }
246
+ /**
247
+ * Complete dependency graph for resolution.
248
+ */
249
+ export interface DependencyGraph {
250
+ /** All discovered packages */
251
+ readonly nodes: Record<string, DependencyNode>;
252
+ /** Root package name */
253
+ readonly root: string;
254
+ }
255
+ /** Supported git platforms */
256
+ export type GitPlatform = 'github' | 'gitlab' | 'bitbucket' | 'generic';
257
+ /**
258
+ * Parsed git import with repository information.
259
+ */
260
+ export interface GitImportInfo {
261
+ /** Original import string */
262
+ readonly original: string;
263
+ /** Git platform */
264
+ readonly platform: GitPlatform;
265
+ /** Repository owner/organization */
266
+ readonly owner: string;
267
+ /** Repository name */
268
+ readonly repo: string;
269
+ /** Version (tag, branch, or commit) */
270
+ readonly version: string;
271
+ /** Full git repository URL */
272
+ readonly repoUrl: string;
273
+ /** Package entry point */
274
+ readonly entryPoint: string;
275
+ }
276
+ /**
277
+ * Node in a dependency tree visualization.
278
+ */
279
+ export interface DependencyTreeNode {
280
+ readonly packageKey: string;
281
+ readonly ref: string;
282
+ readonly commit: string;
283
+ readonly dependencies: readonly DependencyTreeNode[];
284
+ /** Depth in tree (0 = root) */
285
+ readonly depth: number;
286
+ }
287
+ /**
288
+ * Reverse dependency relationship.
289
+ */
290
+ export interface ReverseDependency {
291
+ /** Package that depends on the target */
292
+ readonly dependentPackage: string;
293
+ /** Ref of the dependent */
294
+ readonly ref: string;
295
+ /** Relationship type */
296
+ readonly type: 'direct' | 'transitive';
297
+ }
298
+ /**
299
+ * Version update policy.
300
+ */
301
+ export interface VersionPolicy {
302
+ readonly policy: 'latest' | 'stable' | 'pinned';
303
+ readonly ref: string;
304
+ readonly availableRefs?: readonly string[];
305
+ }
306
+ /** Governance violation type discriminant */
307
+ export type GovernanceViolationType = 'blocked-source' | 'unstable-version' | 'missing-metadata' | 'license-violation';
308
+ /** Governance violation severity */
309
+ export type GovernanceViolationSeverity = 'error' | 'warning';
310
+ /**
311
+ * A governance policy violation.
312
+ */
313
+ export interface GovernanceViolation {
314
+ readonly type: GovernanceViolationType;
315
+ readonly packageKey: string;
316
+ readonly message: string;
317
+ readonly severity: GovernanceViolationSeverity;
318
+ }
319
+ /**
320
+ * Governance metadata for a package (from model.yaml).
321
+ */
322
+ export interface GovernanceMetadata {
323
+ readonly team?: string;
324
+ readonly contact?: string;
325
+ readonly domain?: string;
326
+ readonly compliance?: readonly string[];
327
+ }
328
+ /**
329
+ * Options for workspace manager initialization.
330
+ */
331
+ export interface WorkspaceManagerOptions {
332
+ /** Auto-resolve dependencies on initialization */
333
+ readonly autoResolve?: boolean;
334
+ /** Manifest file names to search for */
335
+ readonly manifestFiles?: readonly string[];
336
+ /** Lock file names to search for */
337
+ readonly lockFiles?: readonly string[];
338
+ /** Allow network access for git operations */
339
+ readonly allowNetwork?: boolean;
340
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Centralized Type Definitions for DomainLang Services
3
+ *
4
+ * Type design principles:
5
+ * - **Atomic**: Each type represents a single, well-defined concept
6
+ * - **Non-overlapping**: Types don't duplicate fields unnecessarily
7
+ * - **Rich**: Types use adjacent types for composition rather than primitives
8
+ * - **Discriminated**: Union types use discriminants for type narrowing
9
+ *
10
+ * Type hierarchy:
11
+ * ```
12
+ * Core Building Blocks
13
+ * ├── RefType (discriminant for git references)
14
+ * └── SemVer (semantic version components)
15
+ *
16
+ * Package Identity
17
+ * └── PackageIdentity (name, version, entry)
18
+ *
19
+ * Dependencies
20
+ * ├── DependencySpec (how deps are specified)
21
+ * │ ├── ShortDependencySpec (string ref only)
22
+ * │ └── ExtendedDependencySpec (full options)
23
+ * └── ResolvedDependency (locked/pinned state)
24
+ *
25
+ * Manifest & Lock
26
+ * ├── ModelManifest (model.yaml schema)
27
+ * └── LockFile (model.lock schema)
28
+ *
29
+ * Resolution Graph
30
+ * ├── DependencyNode (graph node during resolution)
31
+ * └── DependencyGraph (complete resolution graph)
32
+ *
33
+ * Analysis & Governance
34
+ * ├── GovernancePolicy (policy configuration)
35
+ * └── GovernanceViolation (validation result)
36
+ * ```
37
+ *
38
+ * @module services/types
39
+ */
40
+ /**
41
+ * Type guard for extended dependency spec.
42
+ */
43
+ export function isExtendedDependencySpec(dep) {
44
+ return typeof dep === 'object' && dep !== null;
45
+ }
46
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/services/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AA+GH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAmB;IACxD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC;AACnD,CAAC"}
@@ -1,10 +1,5 @@
1
1
  import { GitUrlResolver } from './git-url-resolver.js';
2
- import type { LockFile } from './git-url-resolver.js';
3
- export interface WorkspaceManagerOptions {
4
- readonly autoResolve?: boolean;
5
- readonly manifestFiles?: readonly string[];
6
- readonly lockFiles?: readonly string[];
7
- }
2
+ import type { LockFile, ModelManifest, PathAliases, WorkspaceManagerOptions } from './types.js';
8
3
  /**
9
4
  * Coordinates workspace discovery, lock file lifecycle management, and git resolver configuration.
10
5
  */
@@ -33,6 +28,11 @@ export declare class WorkspaceManager {
33
28
  * Resolves the manifest file path within the workspace, if present.
34
29
  */
35
30
  getManifestPath(): Promise<string | undefined>;
31
+ /**
32
+ * Returns the parsed manifest when present, otherwise undefined.
33
+ * Uses cached contents when unchanged on disk.
34
+ */
35
+ getManifest(): Promise<ModelManifest | undefined>;
36
36
  /**
37
37
  * Returns the cached lock file or triggers resolution when missing.
38
38
  */
@@ -45,6 +45,24 @@ export declare class WorkspaceManager {
45
45
  * Reloads the lock file from disk, updating the git resolver.
46
46
  */
47
47
  refreshLockFile(): Promise<LockFile | undefined>;
48
+ /**
49
+ * Invalidates all cached data (manifest and lock file).
50
+ * Call this when config files change externally (e.g., from CLI commands).
51
+ *
52
+ * After invalidation, the next call to getManifest() or getLockFile()
53
+ * will re-read from disk.
54
+ */
55
+ invalidateCache(): void;
56
+ /**
57
+ * Invalidates only the manifest cache.
58
+ * Call this when model.yaml changes.
59
+ */
60
+ invalidateManifestCache(): void;
61
+ /**
62
+ * Invalidates only the lock file cache.
63
+ * Call this when model.lock changes.
64
+ */
65
+ invalidateLockCache(): void;
48
66
  /**
49
67
  * Provides the shared git URL resolver configured with the current lock file.
50
68
  */
@@ -54,12 +72,25 @@ export declare class WorkspaceManager {
54
72
  */
55
73
  regenerateLockFile(): Promise<LockFile>;
56
74
  /**
57
- * Resolves a manifest dependency alias to its git import string.
75
+ * Returns the path aliases from the manifest, if present.
76
+ */
77
+ getPathAliases(): Promise<PathAliases | undefined>;
78
+ /**
79
+ * Normalizes a dependency entry to its extended form.
80
+ * Handles both short form (string version) and extended form (object).
81
+ *
82
+ * In the new format, the key IS the owner/package, so source is derived from key
83
+ * ONLY for git dependencies (not for path-based local dependencies).
84
+ */
85
+ private normalizeDependency;
86
+ /**
87
+ * Resolves a manifest dependency to its git import string.
58
88
  *
59
- * @param aliasPath - Alias from import statement (may include subpaths)
60
- * @returns Resolved git import string or undefined when alias is unknown
89
+ * NEW FORMAT (PRS-010): Dependencies are keyed by owner/package directly
90
+ * @param specifier - Import specifier (owner/package format, may include subpaths)
91
+ * @returns Resolved git import string or undefined when not found
61
92
  */
62
- resolveDependencyImport(aliasPath: string): Promise<string | undefined>;
93
+ resolveDependencyImport(specifier: string): Promise<string | undefined>;
63
94
  private performInitialization;
64
95
  private ensureInitialized;
65
96
  private applyLockFile;
@@ -69,6 +100,22 @@ export declare class WorkspaceManager {
69
100
  private loadLockFileFromDisk;
70
101
  private tryReadLockFile;
71
102
  private loadManifest;
103
+ /**
104
+ * Validates manifest structure and dependency configurations.
105
+ * Throws detailed errors for invalid manifests.
106
+ *
107
+ * Supports both new format (owner/package: version) and extended format.
108
+ */
109
+ private validateManifest;
110
+ /**
111
+ * Validates path aliases for security and correctness.
112
+ */
113
+ private validatePathAliases;
114
+ /**
115
+ * Validates local path dependencies for security.
116
+ * Ensures paths don't escape workspace boundary.
117
+ */
118
+ private validateLocalPath;
72
119
  private parseJsonLockFile;
73
120
  private findWorkspaceRoot;
74
121
  private containsManifest;