@aexol/spectral 0.9.229 → 0.9.231

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 (189) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/auth-helper.d.ts.map +1 -1
  3. package/dist/auth-helper.js +14 -8
  4. package/dist/commands/login.d.ts +12 -4
  5. package/dist/commands/login.d.ts.map +1 -1
  6. package/dist/commands/login.js +36 -15
  7. package/dist/commands/serve.d.ts.map +1 -1
  8. package/dist/commands/serve.js +3 -0
  9. package/dist/config.d.ts +15 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +10 -1
  12. package/dist/designer/data/skills/blog-post.d.ts +3 -0
  13. package/dist/designer/data/skills/blog-post.d.ts.map +1 -0
  14. package/dist/designer/data/skills/blog-post.js +84 -0
  15. package/dist/designer/data/skills/blog-post.ts +87 -0
  16. package/dist/designer/data/skills/critique.d.ts +3 -0
  17. package/dist/designer/data/skills/critique.d.ts.map +1 -0
  18. package/dist/designer/data/skills/critique.js +109 -0
  19. package/dist/designer/data/skills/critique.ts +112 -0
  20. package/dist/designer/data/skills/dashboard.d.ts +3 -0
  21. package/dist/designer/data/skills/dashboard.d.ts.map +1 -0
  22. package/dist/designer/data/skills/dashboard.js +165 -0
  23. package/dist/designer/data/skills/dashboard.ts +168 -0
  24. package/dist/designer/data/skills/design-brief.d.ts +3 -0
  25. package/dist/designer/data/skills/design-brief.d.ts.map +1 -0
  26. package/dist/designer/data/skills/design-brief.js +141 -0
  27. package/dist/designer/data/skills/design-brief.ts +144 -0
  28. package/dist/designer/data/skills/design-skill.d.ts +10 -0
  29. package/dist/designer/data/skills/design-skill.d.ts.map +1 -0
  30. package/dist/designer/data/skills/design-skill.js +1 -0
  31. package/dist/designer/data/skills/design-skill.ts +9 -0
  32. package/dist/designer/data/skills/docs-page.d.ts +3 -0
  33. package/dist/designer/data/skills/docs-page.d.ts.map +1 -0
  34. package/dist/designer/data/skills/docs-page.js +68 -0
  35. package/dist/designer/data/skills/docs-page.ts +71 -0
  36. package/dist/designer/data/skills/index.d.ts +3 -0
  37. package/dist/designer/data/skills/index.d.ts.map +1 -0
  38. package/dist/designer/data/skills/index.js +28 -0
  39. package/dist/designer/data/skills/index.ts +30 -0
  40. package/dist/designer/data/skills/magazine-poster.d.ts +3 -0
  41. package/dist/designer/data/skills/magazine-poster.d.ts.map +1 -0
  42. package/dist/designer/data/skills/magazine-poster.js +70 -0
  43. package/dist/designer/data/skills/magazine-poster.ts +73 -0
  44. package/dist/designer/data/skills/mobile-app.d.ts +3 -0
  45. package/dist/designer/data/skills/mobile-app.d.ts.map +1 -0
  46. package/dist/designer/data/skills/mobile-app.js +229 -0
  47. package/dist/designer/data/skills/mobile-app.ts +232 -0
  48. package/dist/designer/data/skills/motion-frames.d.ts +3 -0
  49. package/dist/designer/data/skills/motion-frames.d.ts.map +1 -0
  50. package/dist/designer/data/skills/motion-frames.js +121 -0
  51. package/dist/designer/data/skills/motion-frames.ts +124 -0
  52. package/dist/designer/data/skills/pricing-page.d.ts +3 -0
  53. package/dist/designer/data/skills/pricing-page.d.ts.map +1 -0
  54. package/dist/designer/data/skills/pricing-page.js +76 -0
  55. package/dist/designer/data/skills/pricing-page.ts +79 -0
  56. package/dist/designer/data/skills/saas-landing.d.ts +3 -0
  57. package/dist/designer/data/skills/saas-landing.d.ts.map +1 -0
  58. package/dist/designer/data/skills/saas-landing.js +71 -0
  59. package/dist/designer/data/skills/saas-landing.ts +74 -0
  60. package/dist/designer/data/skills/slide-deck.d.ts +3 -0
  61. package/dist/designer/data/skills/slide-deck.d.ts.map +1 -0
  62. package/dist/designer/data/skills/slide-deck.js +213 -0
  63. package/dist/designer/data/skills/slide-deck.ts +216 -0
  64. package/dist/designer/data/skills/social-carousel.d.ts +3 -0
  65. package/dist/designer/data/skills/social-carousel.d.ts.map +1 -0
  66. package/dist/designer/data/skills/social-carousel.js +135 -0
  67. package/dist/designer/data/skills/social-carousel.ts +138 -0
  68. package/dist/designer/data/skills/web-prototype.d.ts +3 -0
  69. package/dist/designer/data/skills/web-prototype.d.ts.map +1 -0
  70. package/dist/designer/data/skills/web-prototype.js +159 -0
  71. package/dist/designer/data/skills/web-prototype.ts +162 -0
  72. package/dist/designer/skills.d.ts +4 -10
  73. package/dist/designer/skills.d.ts.map +1 -1
  74. package/dist/designer/skills.js +2 -1643
  75. package/dist/extensions/wizard/index.js +9 -1
  76. package/dist/generated/parser/ast/nodes.d.ts +115 -0
  77. package/dist/generated/parser/ast/nodes.d.ts.map +1 -0
  78. package/dist/generated/parser/ast/nodes.js +8 -0
  79. package/dist/generated/parser/lexer/lexer.d.ts +28 -0
  80. package/dist/generated/parser/lexer/lexer.d.ts.map +1 -0
  81. package/dist/generated/parser/{lexer.js → lexer/lexer.js} +1 -180
  82. package/dist/generated/parser/{lexer.d.ts → lexer/tokens.d.ts} +5 -24
  83. package/dist/generated/parser/lexer/tokens.d.ts.map +1 -0
  84. package/dist/generated/parser/lexer/tokens.js +187 -0
  85. package/dist/generated/parser/mod.d.ts +5 -7
  86. package/dist/generated/parser/mod.d.ts.map +1 -1
  87. package/dist/generated/parser/mod.js +2 -1
  88. package/dist/generated/parser/parser/cursor.d.ts +47 -0
  89. package/dist/generated/parser/parser/cursor.d.ts.map +1 -0
  90. package/dist/generated/parser/parser/cursor.js +12 -0
  91. package/dist/generated/parser/parser/definitions.d.ts +16 -0
  92. package/dist/generated/parser/parser/definitions.d.ts.map +1 -0
  93. package/dist/generated/parser/parser/definitions.js +353 -0
  94. package/dist/generated/parser/parser/expressions.d.ts +17 -0
  95. package/dist/generated/parser/parser/expressions.d.ts.map +1 -0
  96. package/dist/generated/parser/parser/expressions.js +165 -0
  97. package/dist/generated/parser/parser.d.ts +18 -133
  98. package/dist/generated/parser/parser.d.ts.map +1 -1
  99. package/dist/generated/parser/parser.js +9 -505
  100. package/dist/generated/parser/tokenizer.d.ts +1 -2
  101. package/dist/generated/parser/tokenizer.d.ts.map +1 -1
  102. package/dist/generated/parser/tokenizer.js +2 -1
  103. package/dist/generated/parser/validator.d.ts +1 -1
  104. package/dist/generated/parser/validator.d.ts.map +1 -1
  105. package/dist/generated/zeus/const.d.ts.map +1 -1
  106. package/dist/generated/zeus/const.js +21 -0
  107. package/dist/generated/zeus/index.d.ts +98 -0
  108. package/dist/generated/zeus/index.d.ts.map +1 -1
  109. package/dist/mcp/glimpse-ui.js +9 -1
  110. package/dist/relay/dispatcher.d.ts +11 -104
  111. package/dist/relay/dispatcher.d.ts.map +1 -1
  112. package/dist/relay/dispatcher.js +10 -1130
  113. package/dist/relay/registration.d.ts +10 -2
  114. package/dist/relay/registration.d.ts.map +1 -1
  115. package/dist/relay/registration.js +32 -3
  116. package/dist/relay/rest.d.ts +31 -0
  117. package/dist/relay/rest.d.ts.map +1 -0
  118. package/dist/relay/rest.js +85 -0
  119. package/dist/relay/routing.d.ts +109 -0
  120. package/dist/relay/routing.d.ts.map +1 -0
  121. package/dist/relay/routing.js +669 -0
  122. package/dist/relay/wizard-login.d.ts +17 -0
  123. package/dist/relay/wizard-login.d.ts.map +1 -0
  124. package/dist/relay/wizard-login.js +419 -0
  125. package/dist/sdk/agent-core/agent-loop.d.ts +2 -9
  126. package/dist/sdk/agent-core/agent-loop.d.ts.map +1 -1
  127. package/dist/sdk/agent-core/agent-loop.js +4 -288
  128. package/dist/sdk/agent-core/tool-execution.d.ts +33 -0
  129. package/dist/sdk/agent-core/tool-execution.d.ts.map +1 -0
  130. package/dist/sdk/agent-core/tool-execution.js +300 -0
  131. package/dist/sdk/ai/env-api-keys.js +9 -1
  132. package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts +48 -0
  133. package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts.map +1 -0
  134. package/dist/sdk/ai/providers/openai/reasoning-replay.js +209 -0
  135. package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
  136. package/dist/sdk/ai/providers/openai-completions.js +1 -203
  137. package/dist/sdk/coding-agent/core/compaction/compaction.d.ts +6 -118
  138. package/dist/sdk/coding-agent/core/compaction/compaction.d.ts.map +1 -1
  139. package/dist/sdk/coding-agent/core/compaction/compaction.js +11 -733
  140. package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts +58 -0
  141. package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts.map +1 -0
  142. package/dist/sdk/coding-agent/core/compaction/cut-points.js +191 -0
  143. package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts +28 -0
  144. package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts.map +1 -0
  145. package/dist/sdk/coding-agent/core/compaction/dedupe.js +156 -0
  146. package/dist/sdk/coding-agent/core/compaction/summarize.d.ts +21 -0
  147. package/dist/sdk/coding-agent/core/compaction/summarize.d.ts.map +1 -0
  148. package/dist/sdk/coding-agent/core/compaction/summarize.js +181 -0
  149. package/dist/sdk/coding-agent/core/compaction/tokens.d.ts +47 -0
  150. package/dist/sdk/coding-agent/core/compaction/tokens.d.ts.map +1 -0
  151. package/dist/sdk/coding-agent/core/compaction/tokens.js +224 -0
  152. package/dist/sdk/coding-agent/core/extensions/session-events.d.ts +157 -0
  153. package/dist/sdk/coding-agent/core/extensions/session-events.d.ts.map +1 -0
  154. package/dist/sdk/coding-agent/core/extensions/session-events.js +13 -0
  155. package/dist/sdk/coding-agent/core/extensions/types.d.ts +6 -365
  156. package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
  157. package/dist/sdk/coding-agent/core/extensions/types.js +2 -10
  158. package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts +219 -0
  159. package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts.map +1 -0
  160. package/dist/sdk/coding-agent/core/extensions/ui-types.js +4 -0
  161. package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts +115 -0
  162. package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts.map +1 -0
  163. package/dist/sdk/coding-agent/core/package/default-package-manager.js +1184 -0
  164. package/dist/sdk/coding-agent/core/package/discovery.d.ts +20 -0
  165. package/dist/sdk/coding-agent/core/package/discovery.d.ts.map +1 -0
  166. package/dist/sdk/coding-agent/core/package/discovery.js +283 -0
  167. package/dist/sdk/coding-agent/core/package/ignore.d.ts +29 -0
  168. package/dist/sdk/coding-agent/core/package/ignore.d.ts.map +1 -0
  169. package/dist/sdk/coding-agent/core/package/ignore.js +235 -0
  170. package/dist/sdk/coding-agent/core/package/types.d.ts +128 -0
  171. package/dist/sdk/coding-agent/core/package/types.d.ts.map +1 -0
  172. package/dist/sdk/coding-agent/core/package/types.js +18 -0
  173. package/dist/sdk/coding-agent/core/package/update-check.d.ts +43 -0
  174. package/dist/sdk/coding-agent/core/package/update-check.d.ts.map +1 -0
  175. package/dist/sdk/coding-agent/core/package/update-check.js +253 -0
  176. package/dist/sdk/coding-agent/core/package-manager.d.ts +2 -188
  177. package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
  178. package/dist/sdk/coding-agent/core/package-manager.js +1 -1940
  179. package/dist/sdk/coding-agent/core/session/migrate.d.ts +18 -0
  180. package/dist/sdk/coding-agent/core/session/migrate.d.ts.map +1 -0
  181. package/dist/sdk/coding-agent/core/session/migrate.js +78 -0
  182. package/dist/sdk/coding-agent/core/session/types.d.ts +165 -0
  183. package/dist/sdk/coding-agent/core/session/types.d.ts.map +1 -0
  184. package/dist/sdk/coding-agent/core/session/types.js +4 -0
  185. package/dist/sdk/coding-agent/core/session-manager.d.ts +3 -161
  186. package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -1
  187. package/dist/sdk/coding-agent/core/session-manager.js +4 -72
  188. package/package.json +2 -2
  189. package/dist/generated/parser/lexer.d.ts.map +0 -1
@@ -0,0 +1,128 @@
1
+ import type { GitSource } from "../../utils/git.js";
2
+ import type { SettingsManager } from "../settings-manager.js";
3
+ export interface PathMetadata {
4
+ source: string;
5
+ scope: SourceScope;
6
+ origin: "package" | "top-level";
7
+ baseDir?: string;
8
+ }
9
+ export interface ResolvedResource {
10
+ path: string;
11
+ enabled: boolean;
12
+ metadata: PathMetadata;
13
+ }
14
+ export interface ResolvedPaths {
15
+ extensions: ResolvedResource[];
16
+ skills: ResolvedResource[];
17
+ prompts: ResolvedResource[];
18
+ themes: ResolvedResource[];
19
+ }
20
+ export type MissingSourceAction = "install" | "skip" | "error";
21
+ export interface ProgressEvent {
22
+ type: "start" | "progress" | "complete" | "error";
23
+ action: "install" | "remove" | "update" | "clone" | "pull";
24
+ source: string;
25
+ message?: string;
26
+ }
27
+ export type ProgressCallback = (event: ProgressEvent) => void;
28
+ export interface PackageManager {
29
+ resolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths>;
30
+ install(source: string, options?: {
31
+ local?: boolean;
32
+ }): Promise<void>;
33
+ installAndPersist(source: string, options?: {
34
+ local?: boolean;
35
+ }): Promise<void>;
36
+ remove(source: string, options?: {
37
+ local?: boolean;
38
+ }): Promise<void>;
39
+ removeAndPersist(source: string, options?: {
40
+ local?: boolean;
41
+ }): Promise<boolean>;
42
+ update(source?: string): Promise<void>;
43
+ resolveExtensionSources(sources: string[], options?: {
44
+ local?: boolean;
45
+ temporary?: boolean;
46
+ }): Promise<ResolvedPaths>;
47
+ addSourceToSettings(source: string, options?: {
48
+ local?: boolean;
49
+ }): boolean;
50
+ removeSourceFromSettings(source: string, options?: {
51
+ local?: boolean;
52
+ }): boolean;
53
+ setProgressCallback(callback: ProgressCallback | undefined): void;
54
+ getInstalledPath(source: string, scope: "user" | "project"): string | undefined;
55
+ }
56
+ export interface PackageManagerOptions {
57
+ cwd: string;
58
+ agentDir: string;
59
+ settingsManager: SettingsManager;
60
+ }
61
+ export type SourceScope = "user" | "project" | "temporary";
62
+ export type NpmSource = {
63
+ type: "npm";
64
+ spec: string;
65
+ name: string;
66
+ pinned: boolean;
67
+ };
68
+ export type LocalSource = {
69
+ type: "local";
70
+ path: string;
71
+ };
72
+ export type ParsedSource = NpmSource | GitSource | LocalSource;
73
+ export type InstalledSourceScope = Exclude<SourceScope, "temporary">;
74
+ export interface ConfiguredUpdateSource {
75
+ source: string;
76
+ scope: InstalledSourceScope;
77
+ }
78
+ export interface NpmUpdateTarget extends ConfiguredUpdateSource {
79
+ parsed: NpmSource;
80
+ }
81
+ export interface GitUpdateTarget extends ConfiguredUpdateSource {
82
+ parsed: GitSource;
83
+ }
84
+ export interface SpectralManifest {
85
+ extensions?: string[];
86
+ skills?: string[];
87
+ prompts?: string[];
88
+ themes?: string[];
89
+ }
90
+ export interface ResourceAccumulator {
91
+ extensions: Map<string, {
92
+ metadata: PathMetadata;
93
+ enabled: boolean;
94
+ }>;
95
+ skills: Map<string, {
96
+ metadata: PathMetadata;
97
+ enabled: boolean;
98
+ }>;
99
+ prompts: Map<string, {
100
+ metadata: PathMetadata;
101
+ enabled: boolean;
102
+ }>;
103
+ themes: Map<string, {
104
+ metadata: PathMetadata;
105
+ enabled: boolean;
106
+ }>;
107
+ }
108
+ /**
109
+ * Compute a numeric precedence rank for a resource based on its metadata.
110
+ * Lower rank = higher precedence. Used to sort resolved resources so that
111
+ * name-collision resolution ("first wins") produces the correct outcome.
112
+ *
113
+ * Precedence (highest to lowest):
114
+ * 0 project + settings entry (source: "local", scope: "project")
115
+ * 1 project + auto-discovered (source: "auto", scope: "project")
116
+ * 2 user + settings entry (source: "local", scope: "user")
117
+ * 3 user + auto-discovered (source: "auto", scope: "user")
118
+ * 4 package resource (origin: "package")
119
+ */
120
+ export declare function resourcePrecedenceRank(m: PathMetadata): number;
121
+ export type ResourceType = "extensions" | "skills" | "prompts" | "themes";
122
+ export interface PackageFilter {
123
+ extensions?: string[];
124
+ skills?: string[];
125
+ prompts?: string[];
126
+ themes?: string[];
127
+ }
128
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/package/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Compute a numeric precedence rank for a resource based on its metadata.
3
+ * Lower rank = higher precedence. Used to sort resolved resources so that
4
+ * name-collision resolution ("first wins") produces the correct outcome.
5
+ *
6
+ * Precedence (highest to lowest):
7
+ * 0 project + settings entry (source: "local", scope: "project")
8
+ * 1 project + auto-discovered (source: "auto", scope: "project")
9
+ * 2 user + settings entry (source: "local", scope: "user")
10
+ * 3 user + auto-discovered (source: "auto", scope: "user")
11
+ * 4 package resource (origin: "package")
12
+ */
13
+ export function resourcePrecedenceRank(m) {
14
+ if (m.origin === "package")
15
+ return 4;
16
+ const scopeBase = m.scope === "project" ? 0 : 2;
17
+ return scopeBase + (m.source === "local" ? 0 : 1);
18
+ }
@@ -0,0 +1,43 @@
1
+ import type { GitSource } from "../../utils/git.js";
2
+ import type { PackageSource, SettingsManager } from "../settings-manager.js";
3
+ import type { NpmSource, ParsedSource, ProgressEvent, SourceScope } from "./types.js";
4
+ /**
5
+ * Network update checking for configured package sources. Extracted from
6
+ * DefaultPackageManager as pure functions operating on an explicit context.
7
+ */
8
+ export declare const NETWORK_TIMEOUT_MS = 10000;
9
+ export declare function isOfflineModeEnabled(): boolean;
10
+ export interface UpdateCheckContext {
11
+ cwd: string;
12
+ settingsManager: SettingsManager;
13
+ parseSource(source: string): ParsedSource;
14
+ getPackageIdentity(source: string, scope?: SourceScope): string;
15
+ buildNoMatchingPackageMessage(source: string, configuredPackages: PackageSource[]): string;
16
+ withProgress(action: ProgressEvent["action"], source: string, message: string, operation: () => Promise<void>): Promise<void>;
17
+ updateGit(source: GitSource, scope: SourceScope): Promise<void>;
18
+ getManagedNpmInstallPath(source: NpmSource, scope: SourceScope): string;
19
+ getInstalledNpmVersion(installedPath: string): string | undefined;
20
+ getLatestNpmVersion(packageName: string): Promise<string>;
21
+ getNpmInstallRoot(scope: SourceScope, temporary: boolean): string;
22
+ ensureNpmProject(installRoot: string): void;
23
+ runNpmCommand(args: string[], options?: {
24
+ cwd?: string;
25
+ }): Promise<void>;
26
+ getNpmInstallArgs(specs: string[], installRoot: string): string[];
27
+ runCommandCapture(command: string, args: string[], options?: {
28
+ cwd?: string;
29
+ timeoutMs?: number;
30
+ env?: Record<string, string>;
31
+ }): Promise<string>;
32
+ runCommand(command: string, args: string[], options?: {
33
+ cwd?: string;
34
+ }): Promise<void>;
35
+ runGitRemoteCommand(installedPath: string, args: string[]): Promise<string>;
36
+ }
37
+ export declare function updatePackages(ctx: UpdateCheckContext, source?: string): Promise<void>;
38
+ export declare function getLocalGitUpdateTarget(ctx: UpdateCheckContext, installedPath: string): Promise<{
39
+ ref: string;
40
+ head: string;
41
+ fetchArgs: string[];
42
+ }>;
43
+ //# sourceMappingURL=update-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/package/update-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAIX,SAAS,EAET,YAAY,EACZ,aAAa,EACb,WAAW,EACX,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AAEH,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAIxC,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAED,MAAM,WAAW,kBAAkB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IAC1C,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAChE,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAC3F,YAAY,CACX,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;IACxE,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAClE,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAClE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClE,iBAAiB,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC1E,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5E;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5F;AAmID,wBAAsB,uBAAuB,CAC5C,GAAG,EAAE,kBAAkB,EACvB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA2D7D"}
@@ -0,0 +1,253 @@
1
+ import { existsSync } from "node:fs";
2
+ /**
3
+ * Network update checking for configured package sources. Extracted from
4
+ * DefaultPackageManager as pure functions operating on an explicit context.
5
+ */
6
+ export const NETWORK_TIMEOUT_MS = 10000;
7
+ const UPDATE_CHECK_CONCURRENCY = 4;
8
+ const GIT_UPDATE_CONCURRENCY = 4;
9
+ export function isOfflineModeEnabled() {
10
+ const value = process.env.SPECTRAL_OFFLINE;
11
+ if (!value)
12
+ return false;
13
+ return value === "1" || value.toLowerCase() === "true" || value.toLowerCase() === "yes";
14
+ }
15
+ export async function updatePackages(ctx, source) {
16
+ const globalSettings = ctx.settingsManager.getGlobalSettings();
17
+ const projectSettings = ctx.settingsManager.getProjectSettings();
18
+ const identity = source ? ctx.getPackageIdentity(source) : undefined;
19
+ let matched = false;
20
+ const updateSources = [];
21
+ for (const pkg of globalSettings.packages ?? []) {
22
+ const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
23
+ if (identity && ctx.getPackageIdentity(sourceStr, "user") !== identity)
24
+ continue;
25
+ matched = true;
26
+ updateSources.push({ source: sourceStr, scope: "user" });
27
+ }
28
+ for (const pkg of projectSettings.packages ?? []) {
29
+ const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
30
+ if (identity && ctx.getPackageIdentity(sourceStr, "project") !== identity)
31
+ continue;
32
+ matched = true;
33
+ updateSources.push({ source: sourceStr, scope: "project" });
34
+ }
35
+ if (source && !matched) {
36
+ throw new Error(ctx.buildNoMatchingPackageMessage(source, [
37
+ ...(globalSettings.packages ?? []),
38
+ ...(projectSettings.packages ?? []),
39
+ ]));
40
+ }
41
+ await updateConfiguredSources(ctx, updateSources);
42
+ }
43
+ async function updateConfiguredSources(ctx, sources) {
44
+ if (isOfflineModeEnabled() || sources.length === 0) {
45
+ return;
46
+ }
47
+ const npmCandidates = [];
48
+ const gitCandidates = [];
49
+ for (const entry of sources) {
50
+ const parsed = ctx.parseSource(entry.source);
51
+ if (parsed.type === "local" || parsed.pinned) {
52
+ continue;
53
+ }
54
+ if (parsed.type === "npm") {
55
+ npmCandidates.push({ ...entry, parsed });
56
+ continue;
57
+ }
58
+ gitCandidates.push({ ...entry, parsed });
59
+ }
60
+ const npmCheckTasks = npmCandidates.map((entry) => async () => ({
61
+ entry,
62
+ shouldUpdate: await shouldUpdateNpmSource(ctx, entry.parsed, entry.scope),
63
+ }));
64
+ const npmCheckResults = await runWithConcurrency(npmCheckTasks, UPDATE_CHECK_CONCURRENCY);
65
+ const userNpmUpdates = [];
66
+ const projectNpmUpdates = [];
67
+ for (const result of npmCheckResults) {
68
+ if (!result.shouldUpdate) {
69
+ continue;
70
+ }
71
+ if (result.entry.scope === "user") {
72
+ userNpmUpdates.push(result.entry);
73
+ }
74
+ else {
75
+ projectNpmUpdates.push(result.entry);
76
+ }
77
+ }
78
+ const tasks = [];
79
+ if (userNpmUpdates.length > 0) {
80
+ tasks.push(updateNpmBatch(ctx, userNpmUpdates, "user"));
81
+ }
82
+ if (projectNpmUpdates.length > 0) {
83
+ tasks.push(updateNpmBatch(ctx, projectNpmUpdates, "project"));
84
+ }
85
+ if (gitCandidates.length > 0) {
86
+ const gitTasks = gitCandidates.map((entry) => async () => ctx.withProgress("update", entry.source, `Updating ${entry.source}...`, async () => {
87
+ await ctx.updateGit(entry.parsed, entry.scope);
88
+ }));
89
+ tasks.push(runWithConcurrency(gitTasks, GIT_UPDATE_CONCURRENCY).then(() => { }));
90
+ }
91
+ await Promise.all(tasks);
92
+ }
93
+ async function shouldUpdateNpmSource(ctx, source, scope) {
94
+ const installedPath = ctx.getManagedNpmInstallPath(source, scope);
95
+ const installedVersion = existsSync(installedPath) ? ctx.getInstalledNpmVersion(installedPath) : undefined;
96
+ if (!installedVersion) {
97
+ return true;
98
+ }
99
+ try {
100
+ const latestVersion = await ctx.getLatestNpmVersion(source.name);
101
+ return latestVersion !== installedVersion;
102
+ }
103
+ catch {
104
+ // Preserve existing update behavior when version lookup fails.
105
+ return true;
106
+ }
107
+ }
108
+ async function updateNpmBatch(ctx, sources, scope) {
109
+ if (sources.length === 0) {
110
+ return;
111
+ }
112
+ const sourceLabel = sources.length === 1 ? sources[0].source : `${scope} npm packages`;
113
+ const message = sources.length === 1 ? `Updating ${sources[0].source}...` : `Updating ${scope} npm packages...`;
114
+ const specs = sources.map((entry) => `${entry.parsed.name}@latest`);
115
+ await ctx.withProgress("update", sourceLabel, message, async () => {
116
+ await installNpmBatch(ctx, specs, scope);
117
+ });
118
+ }
119
+ async function installNpmBatch(ctx, specs, scope) {
120
+ const installRoot = ctx.getNpmInstallRoot(scope, false);
121
+ ctx.ensureNpmProject(installRoot);
122
+ await ctx.runNpmCommand(ctx.getNpmInstallArgs(specs, installRoot));
123
+ }
124
+ async function gitHasAvailableUpdate(ctx, installedPath) {
125
+ if (isOfflineModeEnabled()) {
126
+ return false;
127
+ }
128
+ try {
129
+ const localHead = await ctx.runCommandCapture("git", ["rev-parse", "HEAD"], {
130
+ cwd: installedPath,
131
+ timeoutMs: NETWORK_TIMEOUT_MS,
132
+ });
133
+ const remoteHead = await getRemoteGitHead(ctx, installedPath);
134
+ return localHead.trim() !== remoteHead.trim();
135
+ }
136
+ catch {
137
+ return false;
138
+ }
139
+ }
140
+ async function getRemoteGitHead(ctx, installedPath) {
141
+ const upstreamRef = await getGitUpstreamRef(ctx, installedPath);
142
+ if (upstreamRef) {
143
+ const remoteHead = await ctx.runGitRemoteCommand(installedPath, ["ls-remote", "origin", upstreamRef]);
144
+ const match = remoteHead.match(/^([0-9a-f]{40})\s+/m);
145
+ if (match?.[1]) {
146
+ return match[1];
147
+ }
148
+ }
149
+ const remoteHead = await ctx.runGitRemoteCommand(installedPath, ["ls-remote", "origin", "HEAD"]);
150
+ const match = remoteHead.match(/^([0-9a-f]{40})\s+HEAD$/m);
151
+ if (!match?.[1]) {
152
+ throw new Error("Failed to determine remote HEAD");
153
+ }
154
+ return match[1];
155
+ }
156
+ export async function getLocalGitUpdateTarget(ctx, installedPath) {
157
+ try {
158
+ const upstream = await ctx.runCommandCapture("git", ["rev-parse", "--abbrev-ref", "@{upstream}"], {
159
+ cwd: installedPath,
160
+ timeoutMs: NETWORK_TIMEOUT_MS,
161
+ });
162
+ const trimmedUpstream = upstream.trim();
163
+ if (!trimmedUpstream.startsWith("origin/")) {
164
+ throw new Error(`Unsupported upstream remote: ${trimmedUpstream}`);
165
+ }
166
+ const branch = trimmedUpstream.slice("origin/".length);
167
+ if (!branch) {
168
+ throw new Error("Missing upstream branch name");
169
+ }
170
+ const head = await ctx.runCommandCapture("git", ["rev-parse", "@{upstream}"], {
171
+ cwd: installedPath,
172
+ timeoutMs: NETWORK_TIMEOUT_MS,
173
+ });
174
+ return {
175
+ ref: "@{upstream}",
176
+ head,
177
+ fetchArgs: [
178
+ "fetch",
179
+ "--prune",
180
+ "--no-tags",
181
+ "origin",
182
+ `+refs/heads/${branch}:refs/remotes/origin/${branch}`,
183
+ ],
184
+ };
185
+ }
186
+ catch {
187
+ await ctx.runCommand("git", ["remote", "set-head", "origin", "-a"], { cwd: installedPath }).catch(() => { });
188
+ const head = await ctx.runCommandCapture("git", ["rev-parse", "origin/HEAD"], {
189
+ cwd: installedPath,
190
+ timeoutMs: NETWORK_TIMEOUT_MS,
191
+ });
192
+ const originHeadRef = await ctx.runCommandCapture("git", ["symbolic-ref", "refs/remotes/origin/HEAD"], {
193
+ cwd: installedPath,
194
+ timeoutMs: NETWORK_TIMEOUT_MS,
195
+ }).catch(() => "");
196
+ const branch = originHeadRef.trim().replace(/^refs\/remotes\/origin\//, "");
197
+ if (branch) {
198
+ return {
199
+ ref: "origin/HEAD",
200
+ head,
201
+ fetchArgs: [
202
+ "fetch",
203
+ "--prune",
204
+ "--no-tags",
205
+ "origin",
206
+ `+refs/heads/${branch}:refs/remotes/origin/${branch}`,
207
+ ],
208
+ };
209
+ }
210
+ return {
211
+ ref: "origin/HEAD",
212
+ head,
213
+ fetchArgs: ["fetch", "--prune", "--no-tags", "origin", "+HEAD:refs/remotes/origin/HEAD"],
214
+ };
215
+ }
216
+ }
217
+ async function getGitUpstreamRef(ctx, installedPath) {
218
+ try {
219
+ const upstream = await ctx.runCommandCapture("git", ["rev-parse", "--abbrev-ref", "@{upstream}"], {
220
+ cwd: installedPath,
221
+ timeoutMs: NETWORK_TIMEOUT_MS,
222
+ });
223
+ const trimmed = upstream.trim();
224
+ if (!trimmed.startsWith("origin/")) {
225
+ return undefined;
226
+ }
227
+ const branch = trimmed.slice("origin/".length);
228
+ return branch ? `refs/heads/${branch}` : undefined;
229
+ }
230
+ catch {
231
+ return undefined;
232
+ }
233
+ }
234
+ async function runWithConcurrency(tasks, limit) {
235
+ if (tasks.length === 0) {
236
+ return [];
237
+ }
238
+ const results = new Array(tasks.length);
239
+ let nextIndex = 0;
240
+ const workerCount = Math.max(1, Math.min(limit, tasks.length));
241
+ const worker = async () => {
242
+ while (true) {
243
+ const index = nextIndex;
244
+ nextIndex += 1;
245
+ if (index >= tasks.length) {
246
+ return;
247
+ }
248
+ results[index] = await tasks[index]();
249
+ }
250
+ };
251
+ await Promise.all(Array.from({ length: workerCount }, () => worker()));
252
+ return results;
253
+ }
@@ -1,189 +1,3 @@
1
- import type { SettingsManager } from "./settings-manager.js";
2
- export interface PathMetadata {
3
- source: string;
4
- scope: SourceScope;
5
- origin: "package" | "top-level";
6
- baseDir?: string;
7
- }
8
- export interface ResolvedResource {
9
- path: string;
10
- enabled: boolean;
11
- metadata: PathMetadata;
12
- }
13
- export interface ResolvedPaths {
14
- extensions: ResolvedResource[];
15
- skills: ResolvedResource[];
16
- prompts: ResolvedResource[];
17
- themes: ResolvedResource[];
18
- }
19
- export type MissingSourceAction = "install" | "skip" | "error";
20
- export interface ProgressEvent {
21
- type: "start" | "progress" | "complete" | "error";
22
- action: "install" | "remove" | "update" | "clone" | "pull";
23
- source: string;
24
- message?: string;
25
- }
26
- export type ProgressCallback = (event: ProgressEvent) => void;
27
- export interface PackageManager {
28
- resolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths>;
29
- install(source: string, options?: {
30
- local?: boolean;
31
- }): Promise<void>;
32
- installAndPersist(source: string, options?: {
33
- local?: boolean;
34
- }): Promise<void>;
35
- remove(source: string, options?: {
36
- local?: boolean;
37
- }): Promise<void>;
38
- removeAndPersist(source: string, options?: {
39
- local?: boolean;
40
- }): Promise<boolean>;
41
- update(source?: string): Promise<void>;
42
- resolveExtensionSources(sources: string[], options?: {
43
- local?: boolean;
44
- temporary?: boolean;
45
- }): Promise<ResolvedPaths>;
46
- addSourceToSettings(source: string, options?: {
47
- local?: boolean;
48
- }): boolean;
49
- removeSourceFromSettings(source: string, options?: {
50
- local?: boolean;
51
- }): boolean;
52
- setProgressCallback(callback: ProgressCallback | undefined): void;
53
- getInstalledPath(source: string, scope: "user" | "project"): string | undefined;
54
- }
55
- interface PackageManagerOptions {
56
- cwd: string;
57
- agentDir: string;
58
- settingsManager: SettingsManager;
59
- }
60
- type SourceScope = "user" | "project" | "temporary";
61
- export declare class DefaultPackageManager implements PackageManager {
62
- private cwd;
63
- private agentDir;
64
- private settingsManager;
65
- private globalNpmRoot;
66
- private globalNpmRootCommandKey;
67
- private progressCallback;
68
- constructor(options: PackageManagerOptions);
69
- setProgressCallback(callback: ProgressCallback | undefined): void;
70
- addSourceToSettings(source: string, options?: {
71
- local?: boolean;
72
- }): boolean;
73
- removeSourceFromSettings(source: string, options?: {
74
- local?: boolean;
75
- }): boolean;
76
- getInstalledPath(source: string, scope: "user" | "project"): string | undefined;
77
- private emitProgress;
78
- private withProgress;
79
- resolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths>;
80
- resolveExtensionSources(sources: string[], options?: {
81
- local?: boolean;
82
- temporary?: boolean;
83
- }): Promise<ResolvedPaths>;
84
- install(source: string, options?: {
85
- local?: boolean;
86
- }): Promise<void>;
87
- installAndPersist(source: string, options?: {
88
- local?: boolean;
89
- }): Promise<void>;
90
- remove(source: string, options?: {
91
- local?: boolean;
92
- }): Promise<void>;
93
- removeAndPersist(source: string, options?: {
94
- local?: boolean;
95
- }): Promise<boolean>;
96
- update(source?: string): Promise<void>;
97
- private updateConfiguredSources;
98
- private shouldUpdateNpmSource;
99
- private updateNpmBatch;
100
- private installNpmBatch;
101
- private resolvePackageSources;
102
- private resolveLocalExtensionSource;
103
- private installParsedSource;
104
- private getPackageSourceString;
105
- private getSourceMatchKeyForInput;
106
- private getSourceMatchKeyForSettings;
107
- private buildNoMatchingPackageMessage;
108
- private findSuggestedConfiguredSource;
109
- private packageSourcesMatch;
110
- private normalizePackageSourceForSettings;
111
- private parseSource;
112
- private installedNpmMatchesPinnedVersion;
113
- private npmHasAvailableUpdate;
114
- private getInstalledNpmVersion;
115
- private getLatestNpmVersion;
116
- private gitHasAvailableUpdate;
117
- private getRemoteGitHead;
118
- private getLocalGitUpdateTarget;
119
- private getGitUpstreamRef;
120
- private runGitRemoteCommand;
121
- private runWithConcurrency;
122
- /**
123
- * Get a unique identity for a package, ignoring version/ref.
124
- * Used to detect when the same package is in both global and project settings.
125
- * For git packages, uses normalized host/path to ensure SSH and HTTPS URLs
126
- * for the same repository are treated as identical.
127
- */
128
- private getPackageIdentity;
129
- /**
130
- * Dedupe packages: if same package identity appears in both global and project,
131
- * keep only the project one (project wins).
132
- */
133
- private dedupePackages;
134
- private parseNpmSpec;
135
- private getNpmCommand;
136
- private getPackageManagerName;
137
- private runNpmCommand;
138
- private getGitDependencyInstallArgs;
139
- private runNpmCommandSync;
140
- private getNpmInstallArgs;
141
- private installNpm;
142
- private uninstallNpm;
143
- private installGit;
144
- private updateGit;
145
- private ensureGitRef;
146
- private refreshTemporaryGitSource;
147
- private removeGit;
148
- private pruneEmptyGitParents;
149
- private ensureNpmProject;
150
- private ensureGitIgnore;
151
- private getNpmInstallRoot;
152
- private getGlobalNpmRoot;
153
- private getPnpmGlobalPackagePath;
154
- private getManagedNpmInstallPath;
155
- private getLegacyGlobalNpmInstallPath;
156
- private getNpmInstallPath;
157
- private getGitInstallPath;
158
- private getGitInstallRoot;
159
- private getTemporaryDir;
160
- private getBaseDirForScope;
161
- private resolvePath;
162
- private resolvePathFromBase;
163
- private collectPackageResources;
164
- private collectDefaultResources;
165
- private applyPackageFilter;
166
- /**
167
- * Collect all files from a package for a resource type, applying manifest patterns.
168
- * Returns { allFiles, enabledByManifest } where enabledByManifest is the set of files
169
- * that pass the manifest's own patterns.
170
- */
171
- private collectManifestFiles;
172
- private readSpectralManifest;
173
- private addManifestEntries;
174
- private collectFilesFromManifestEntries;
175
- private resolveLocalEntries;
176
- private addAutoDiscoveredResources;
177
- private collectFilesFromPaths;
178
- private getTargetMap;
179
- private addResource;
180
- private createAccumulator;
181
- private toResolvedPaths;
182
- private spawnCommand;
183
- private spawnCaptureCommand;
184
- private runCommandCapture;
185
- private runCommand;
186
- private runCommandSync;
187
- }
188
- export {};
1
+ export type { MissingSourceAction, PackageManager, PathMetadata, ProgressCallback, ProgressEvent, ResolvedPaths, ResolvedResource, } from "./package/types.js";
2
+ export { DefaultPackageManager } from "./package/default-package-manager.js";
189
3
  //# sourceMappingURL=package-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../../src/sdk/coding-agent/core/package-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../../src/sdk/coding-agent/core/package-manager.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,gBAAgB,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC"}