@portel/photon 1.0.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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +952 -0
  3. package/dist/base.d.ts +58 -0
  4. package/dist/base.d.ts.map +1 -0
  5. package/dist/base.js +92 -0
  6. package/dist/base.js.map +1 -0
  7. package/dist/cli.d.ts +8 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +1441 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/dependency-manager.d.ts +49 -0
  12. package/dist/dependency-manager.d.ts.map +1 -0
  13. package/dist/dependency-manager.js +165 -0
  14. package/dist/dependency-manager.js.map +1 -0
  15. package/dist/loader.d.ts +86 -0
  16. package/dist/loader.d.ts.map +1 -0
  17. package/dist/loader.js +612 -0
  18. package/dist/loader.js.map +1 -0
  19. package/dist/marketplace-manager.d.ts +261 -0
  20. package/dist/marketplace-manager.d.ts.map +1 -0
  21. package/dist/marketplace-manager.js +767 -0
  22. package/dist/marketplace-manager.js.map +1 -0
  23. package/dist/path-resolver.d.ts +21 -0
  24. package/dist/path-resolver.d.ts.map +1 -0
  25. package/dist/path-resolver.js +71 -0
  26. package/dist/path-resolver.js.map +1 -0
  27. package/dist/photon-doc-extractor.d.ts +89 -0
  28. package/dist/photon-doc-extractor.d.ts.map +1 -0
  29. package/dist/photon-doc-extractor.js +228 -0
  30. package/dist/photon-doc-extractor.js.map +1 -0
  31. package/dist/readme-syncer.d.ts +33 -0
  32. package/dist/readme-syncer.d.ts.map +1 -0
  33. package/dist/readme-syncer.js +93 -0
  34. package/dist/readme-syncer.js.map +1 -0
  35. package/dist/registry-manager.d.ts +76 -0
  36. package/dist/registry-manager.d.ts.map +1 -0
  37. package/dist/registry-manager.js +220 -0
  38. package/dist/registry-manager.js.map +1 -0
  39. package/dist/schema-extractor.d.ts +83 -0
  40. package/dist/schema-extractor.d.ts.map +1 -0
  41. package/dist/schema-extractor.js +396 -0
  42. package/dist/schema-extractor.js.map +1 -0
  43. package/dist/security-scanner.d.ts +52 -0
  44. package/dist/security-scanner.d.ts.map +1 -0
  45. package/dist/security-scanner.js +172 -0
  46. package/dist/security-scanner.js.map +1 -0
  47. package/dist/server.d.ts +73 -0
  48. package/dist/server.d.ts.map +1 -0
  49. package/dist/server.js +474 -0
  50. package/dist/server.js.map +1 -0
  51. package/dist/template-manager.d.ts +56 -0
  52. package/dist/template-manager.d.ts.map +1 -0
  53. package/dist/template-manager.js +509 -0
  54. package/dist/template-manager.js.map +1 -0
  55. package/dist/test-client.d.ts +52 -0
  56. package/dist/test-client.d.ts.map +1 -0
  57. package/dist/test-client.js +168 -0
  58. package/dist/test-client.js.map +1 -0
  59. package/dist/test-marketplace-sources.d.ts +5 -0
  60. package/dist/test-marketplace-sources.d.ts.map +1 -0
  61. package/dist/test-marketplace-sources.js +53 -0
  62. package/dist/test-marketplace-sources.js.map +1 -0
  63. package/dist/types.d.ts +108 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +12 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/version-checker.d.ts +48 -0
  68. package/dist/version-checker.d.ts.map +1 -0
  69. package/dist/version-checker.js +128 -0
  70. package/dist/version-checker.js.map +1 -0
  71. package/dist/watcher.d.ts +26 -0
  72. package/dist/watcher.d.ts.map +1 -0
  73. package/dist/watcher.js +72 -0
  74. package/dist/watcher.js.map +1 -0
  75. package/package.json +79 -0
  76. package/templates/photon.template.ts +55 -0
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Marketplace Manager - Manage multiple MCP marketplaces
3
+ */
4
+ export type MarketplaceSourceType = 'github' | 'git-ssh' | 'url' | 'local';
5
+ export interface Marketplace {
6
+ name: string;
7
+ repo: string;
8
+ url: string;
9
+ sourceType: MarketplaceSourceType;
10
+ source: string;
11
+ enabled: boolean;
12
+ lastUpdated?: string;
13
+ }
14
+ export interface MarketplaceConfig {
15
+ marketplaces: Marketplace[];
16
+ }
17
+ /**
18
+ * Photon metadata from photons.json manifest
19
+ */
20
+ export interface PhotonMetadata {
21
+ name: string;
22
+ version: string;
23
+ description: string;
24
+ author?: string;
25
+ homepage?: string;
26
+ repository?: string;
27
+ license?: string;
28
+ tags?: string[];
29
+ category?: string;
30
+ source: string;
31
+ hash?: string;
32
+ tools?: string[];
33
+ }
34
+ /**
35
+ * Local installation metadata for tracking Photon origins
36
+ */
37
+ export interface PhotonInstallMetadata {
38
+ marketplace: string;
39
+ marketplaceRepo: string;
40
+ version: string;
41
+ originalHash: string;
42
+ installedAt: string;
43
+ lastChecked?: string;
44
+ }
45
+ /**
46
+ * Local metadata file structure
47
+ */
48
+ export interface LocalMetadata {
49
+ photons: Record<string, PhotonInstallMetadata>;
50
+ }
51
+ /**
52
+ * Marketplace manifest (.marketplace/photons.json)
53
+ */
54
+ export interface MarketplaceManifest {
55
+ name: string;
56
+ version?: string;
57
+ description?: string;
58
+ owner?: {
59
+ name: string;
60
+ email?: string;
61
+ url?: string;
62
+ };
63
+ photons: PhotonMetadata[];
64
+ }
65
+ /**
66
+ * Calculate SHA-256 hash of file content
67
+ */
68
+ export declare function calculateFileHash(filePath: string): Promise<string>;
69
+ /**
70
+ * Calculate SHA-256 hash of string content
71
+ */
72
+ export declare function calculateHash(content: string): string;
73
+ /**
74
+ * Read local installation metadata
75
+ */
76
+ export declare function readLocalMetadata(): Promise<LocalMetadata>;
77
+ /**
78
+ * Write local installation metadata
79
+ */
80
+ export declare function writeLocalMetadata(metadata: LocalMetadata): Promise<void>;
81
+ export declare class MarketplaceManager {
82
+ private config;
83
+ initialize(): Promise<void>;
84
+ save(): Promise<void>;
85
+ /**
86
+ * Get all marketplaces
87
+ */
88
+ getAll(): Marketplace[];
89
+ /**
90
+ * Get enabled marketplaces
91
+ */
92
+ getEnabled(): Marketplace[];
93
+ /**
94
+ * Get marketplace by name
95
+ */
96
+ get(name: string): Marketplace | undefined;
97
+ /**
98
+ * Parse marketplace source into structured info
99
+ * Supports:
100
+ * 1. GitHub shorthand: username/repo
101
+ * 2. GitHub HTTPS: https://github.com/username/repo[.git]
102
+ * 3. GitHub SSH: git@github.com:username/repo.git
103
+ * 4. Direct URL: https://example.com/photons.json
104
+ * 5. Local path: ./path/to/marketplace or /absolute/path
105
+ */
106
+ private parseMarketplaceSource;
107
+ /**
108
+ * Get next available name with numeric suffix if name already exists
109
+ * e.g., if 'photon-mcps' exists, returns 'photon-mcps-2'
110
+ * if 'photon-mcps' and 'photon-mcps-2' exist, returns 'photon-mcps-3'
111
+ */
112
+ private getUniqueName;
113
+ /**
114
+ * Check if a marketplace with the same source already exists
115
+ */
116
+ private findBySource;
117
+ /**
118
+ * Add a new marketplace
119
+ * Supports:
120
+ * - GitHub: username/repo, https://github.com/username/repo, git@github.com:username/repo.git
121
+ * - Direct URL: https://example.com/photons.json
122
+ * - Local path: ./path/to/marketplace, /absolute/path
123
+ *
124
+ * If a marketplace with the same name already exists, automatically appends a numeric suffix (-2, -3, etc.)
125
+ * If the exact same source already exists, returns the existing marketplace without creating a duplicate.
126
+ *
127
+ * @returns Object with marketplace info and 'added' flag (false if already existed)
128
+ */
129
+ add(source: string): Promise<{
130
+ marketplace: Omit<Marketplace, 'enabled' | 'lastUpdated'>;
131
+ added: boolean;
132
+ }>;
133
+ /**
134
+ * Remove a marketplace
135
+ */
136
+ remove(name: string): Promise<boolean>;
137
+ /**
138
+ * Enable/disable a marketplace
139
+ */
140
+ setEnabled(name: string, enabled: boolean): Promise<boolean>;
141
+ /**
142
+ * Get cache file path for marketplace
143
+ */
144
+ private getCacheFile;
145
+ /**
146
+ * Fetch photons.json manifest from various sources
147
+ */
148
+ fetchManifest(marketplace: Marketplace): Promise<MarketplaceManifest | null>;
149
+ /**
150
+ * Update marketplace cache (fetch and save photons.json manifest)
151
+ */
152
+ updateMarketplaceCache(name: string): Promise<boolean>;
153
+ /**
154
+ * Update all enabled marketplace caches
155
+ */
156
+ updateAllCaches(): Promise<Map<string, boolean>>;
157
+ /**
158
+ * Get cached marketplace manifest
159
+ */
160
+ getCachedManifest(marketplaceName: string): Promise<MarketplaceManifest | null>;
161
+ /**
162
+ * Get Photon metadata from cached manifest
163
+ */
164
+ getPhotonMetadata(photonName: string): Promise<{
165
+ metadata: PhotonMetadata;
166
+ marketplace: Marketplace;
167
+ } | null>;
168
+ /**
169
+ * Get all Photons with metadata from all enabled marketplaces
170
+ */
171
+ getAllPhotons(): Promise<Map<string, {
172
+ metadata: PhotonMetadata;
173
+ marketplace: Marketplace;
174
+ }>>;
175
+ /**
176
+ * Get count of available Photons per marketplace
177
+ */
178
+ getMarketplaceCounts(): Promise<Map<string, number>>;
179
+ /**
180
+ * Check if marketplace cache is stale
181
+ */
182
+ private isCacheStale;
183
+ /**
184
+ * Auto-update stale caches
185
+ * Returns true if any updates were performed
186
+ */
187
+ autoUpdateStaleCaches(): Promise<boolean>;
188
+ /**
189
+ * Try to fetch MCP from all enabled marketplaces
190
+ * Returns content, marketplace info, and metadata (version, hash)
191
+ */
192
+ fetchMCP(mcpName: string): Promise<{
193
+ content: string;
194
+ marketplace: Marketplace;
195
+ metadata?: PhotonMetadata;
196
+ } | null>;
197
+ /**
198
+ * Fetch version from all enabled marketplaces
199
+ */
200
+ fetchVersion(mcpName: string): Promise<{
201
+ version: string;
202
+ marketplace: Marketplace;
203
+ } | null>;
204
+ /**
205
+ * Search for Photon in all marketplaces
206
+ * Searches in name, description, tags, and author fields
207
+ */
208
+ search(query: string): Promise<Map<string, {
209
+ metadata?: PhotonMetadata;
210
+ marketplace: Marketplace;
211
+ }[]>>;
212
+ /**
213
+ * List all available MCPs from a marketplace
214
+ * Note: Requires marketplace to have a .marketplace/photons.json file
215
+ */
216
+ listFromMarketplace(marketplaceName: string): Promise<string[]>;
217
+ /**
218
+ * Save installation metadata for a Photon
219
+ */
220
+ savePhotonMetadata(fileName: string, marketplace: Marketplace, metadata: PhotonMetadata, contentHash: string): Promise<void>;
221
+ /**
222
+ * Get local installation metadata for a Photon
223
+ */
224
+ getPhotonInstallMetadata(fileName: string): Promise<PhotonInstallMetadata | null>;
225
+ /**
226
+ * Check if a Photon file has been modified since installation
227
+ */
228
+ isPhotonModified(filePath: string, fileName: string): Promise<boolean>;
229
+ /**
230
+ * Find all marketplaces that have a specific MCP (for conflict detection)
231
+ */
232
+ findAllSources(mcpName: string): Promise<Array<{
233
+ marketplace: Marketplace;
234
+ metadata?: PhotonMetadata;
235
+ content?: string;
236
+ }>>;
237
+ /**
238
+ * Detect all MCP conflicts across marketplaces
239
+ */
240
+ detectAllConflicts(): Promise<Map<string, Array<{
241
+ marketplace: Marketplace;
242
+ metadata?: PhotonMetadata;
243
+ }>>>;
244
+ /**
245
+ * Check if adding/upgrading an MCP would create a conflict
246
+ */
247
+ checkConflict(mcpName: string, targetMarketplace?: string): Promise<{
248
+ hasConflict: boolean;
249
+ sources: Array<{
250
+ marketplace: Marketplace;
251
+ metadata?: PhotonMetadata;
252
+ }>;
253
+ recommendation?: string;
254
+ }>;
255
+ /**
256
+ * Compare two semver versions
257
+ * Returns: positive if v1 > v2, negative if v1 < v2, 0 if equal
258
+ */
259
+ private compareVersions;
260
+ }
261
+ //# sourceMappingURL=marketplace-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-manager.d.ts","sourceRoot":"","sources":["../src/marketplace-manager.ts"],"names":[],"mappings":"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"}