@agnt-sdk/studio 0.0.1
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 +162 -0
- package/dist/AgntExecutor.d.ts +56 -0
- package/dist/AgntExecutor.d.ts.map +1 -0
- package/dist/AgntExecutor.js +117 -0
- package/dist/AgntExecutor.js.map +1 -0
- package/dist/BaseExecutor.d.ts +69 -0
- package/dist/BaseExecutor.d.ts.map +1 -0
- package/dist/BaseExecutor.js +528 -0
- package/dist/BaseExecutor.js.map +1 -0
- package/dist/ImageCache.d.ts +94 -0
- package/dist/ImageCache.d.ts.map +1 -0
- package/dist/ImageCache.js +232 -0
- package/dist/ImageCache.js.map +1 -0
- package/dist/cli/commands/init.d.ts +5 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +47 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/pull.d.ts +10 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/commands/pull.js +82 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +28 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/api.d.ts +38 -0
- package/dist/cli/utils/api.d.ts.map +1 -0
- package/dist/cli/utils/api.js +44 -0
- package/dist/cli/utils/api.js.map +1 -0
- package/dist/cli/utils/config.d.ts +5 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +5 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/conditions.d.ts +14 -0
- package/dist/conditions.d.ts.map +1 -0
- package/dist/conditions.js +59 -0
- package/dist/conditions.js.map +1 -0
- package/dist/executorFactory.d.ts +10 -0
- package/dist/executorFactory.d.ts.map +1 -0
- package/dist/executorFactory.js +45 -0
- package/dist/executorFactory.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +22 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +280 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +23 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +281 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/deepseek.d.ts +22 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +193 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/google.d.ts +22 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +357 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/openai.d.ts +22 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +194 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/systemTools.d.ts +6 -0
- package/dist/systemTools.d.ts.map +1 -0
- package/dist/systemTools.js +15 -0
- package/dist/systemTools.js.map +1 -0
- package/dist/tracing.d.ts +32 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +38 -0
- package/dist/tracing.js.map +1 -0
- package/dist/types.d.ts +280 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageCache.d.ts","sourceRoot":"","sources":["../src/ImageCache.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB;IACxB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,mBAAoB,SAAQ,UAAU;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;;IAC7B,OAAO,CAAC,GAAG,CAA4C;IACvD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,KAAK,CAAa;gBAEd,EAAE,GAAG,EAAE,YAAkB,EAAE,GAAE,gBAAqB;IA+C9D;;;OAGG;IACH,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAoBnD;;OAEG;IACH,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,IAAI;IAiClE;;OAEG;IACH,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQhD;;;OAGG;IACH,MAAM,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAOpD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,QAAQ,IAAI,mBAAmB;IAa/B;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;;OAGG;IACH,aAAa,IAAI,UAAU;IA4B3B;;OAEG;IACH,SAAS,IAAI,IAAI;IAWjB;;OAEG;IACH,gBAAgB,IAAI,aAAa;CAkBlC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
/**
|
|
3
|
+
* ImageCache - Caches processed images per provider format
|
|
4
|
+
*
|
|
5
|
+
* Prevents reprocessing the same image when switching providers multiple times.
|
|
6
|
+
* Stores images in multiple formats (anthropic, openai, bedrock) keyed by source URL.
|
|
7
|
+
*
|
|
8
|
+
* Example:
|
|
9
|
+
* - Original: https://example.com/image.jpg
|
|
10
|
+
* - Cache stores:
|
|
11
|
+
* - anthropic: "data:image/jpeg;base64,..."
|
|
12
|
+
* - openai: "data:image/jpeg;base64,..." (or original URL)
|
|
13
|
+
* - bedrock: { type: "image", image: { format: "jpeg", source: { bytes: Uint8Array } } }
|
|
14
|
+
*
|
|
15
|
+
* Cache key: SHA256 hash of source URL for consistent lookup
|
|
16
|
+
*/
|
|
17
|
+
export default class ImageCache {
|
|
18
|
+
log;
|
|
19
|
+
maxCacheSize;
|
|
20
|
+
cache;
|
|
21
|
+
stats;
|
|
22
|
+
constructor({ log, maxCacheSize = 100 } = {}) {
|
|
23
|
+
this.log = log || console.log;
|
|
24
|
+
this.maxCacheSize = maxCacheSize;
|
|
25
|
+
// Cache structure: { [imageKey]: { [provider]: processedImage } }
|
|
26
|
+
// imageKey = hash of source URL/content
|
|
27
|
+
// provider = "anthropic" | "openai" | "bedrock" | "deepseek"
|
|
28
|
+
this.cache = new Map();
|
|
29
|
+
// Track cache statistics
|
|
30
|
+
this.stats = {
|
|
31
|
+
hits: 0,
|
|
32
|
+
misses: 0,
|
|
33
|
+
stores: 0,
|
|
34
|
+
evictions: 0
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate cache key from image source
|
|
39
|
+
* Uses SHA256 hash for consistent, collision-resistant keys
|
|
40
|
+
*/
|
|
41
|
+
#generateKey(imageSource) {
|
|
42
|
+
// Handle different input types
|
|
43
|
+
let sourceString;
|
|
44
|
+
if (typeof imageSource === 'string') {
|
|
45
|
+
// URL or data URL
|
|
46
|
+
sourceString = imageSource;
|
|
47
|
+
}
|
|
48
|
+
else if (imageSource?.image_url) {
|
|
49
|
+
// { image_url: "..." } format
|
|
50
|
+
sourceString = typeof imageSource.image_url === 'string'
|
|
51
|
+
? imageSource.image_url
|
|
52
|
+
: imageSource.image_url.url;
|
|
53
|
+
}
|
|
54
|
+
else if (imageSource?.image?.source?.bytes) {
|
|
55
|
+
// Bedrock format - hash the bytes
|
|
56
|
+
const bytes = imageSource.image.source.bytes;
|
|
57
|
+
return crypto.createHash('sha256').update(bytes).digest('hex');
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.log("[ImageCache] Unknown image source format:", typeof imageSource);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
// For URLs and data URLs, hash the string
|
|
64
|
+
return crypto.createHash('sha256').update(sourceString).digest('hex');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get cached image for specific provider
|
|
68
|
+
* Returns null if not found
|
|
69
|
+
*/
|
|
70
|
+
get(imageSource, provider) {
|
|
71
|
+
const key = this.#generateKey(imageSource);
|
|
72
|
+
if (!key)
|
|
73
|
+
return null;
|
|
74
|
+
const entry = this.cache.get(key);
|
|
75
|
+
if (!entry || !entry[provider]) {
|
|
76
|
+
this.stats.misses++;
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
this.stats.hits++;
|
|
80
|
+
this.log(`[ImageCache] HIT - ${provider} (${key.substring(0, 8)}...)`);
|
|
81
|
+
// Update LRU - move to end
|
|
82
|
+
this.cache.delete(key);
|
|
83
|
+
this.cache.set(key, entry);
|
|
84
|
+
return entry[provider];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Store processed image for specific provider
|
|
88
|
+
*/
|
|
89
|
+
set(imageSource, provider, processedImage) {
|
|
90
|
+
const key = this.#generateKey(imageSource);
|
|
91
|
+
if (!key)
|
|
92
|
+
return;
|
|
93
|
+
// Get or create entry for this image
|
|
94
|
+
let entry = this.cache.get(key);
|
|
95
|
+
if (!entry) {
|
|
96
|
+
entry = {};
|
|
97
|
+
}
|
|
98
|
+
// Store processed image for this provider
|
|
99
|
+
entry[provider] = processedImage;
|
|
100
|
+
// Remove old entry if exists (for LRU)
|
|
101
|
+
this.cache.delete(key);
|
|
102
|
+
// Add to end (most recently used)
|
|
103
|
+
this.cache.set(key, entry);
|
|
104
|
+
this.stats.stores++;
|
|
105
|
+
this.log(`[ImageCache] STORE - ${provider} (${key.substring(0, 8)}...)`);
|
|
106
|
+
// Evict oldest if cache is full
|
|
107
|
+
if (this.cache.size > this.maxCacheSize) {
|
|
108
|
+
const firstKey = this.cache.keys().next().value;
|
|
109
|
+
if (firstKey) {
|
|
110
|
+
this.cache.delete(firstKey);
|
|
111
|
+
this.stats.evictions++;
|
|
112
|
+
this.log(`[ImageCache] EVICT - Cache size exceeded (${firstKey.substring(0, 8)}...)`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if image is cached for specific provider
|
|
118
|
+
*/
|
|
119
|
+
has(imageSource, provider) {
|
|
120
|
+
const key = this.#generateKey(imageSource);
|
|
121
|
+
if (!key)
|
|
122
|
+
return false;
|
|
123
|
+
const entry = this.cache.get(key);
|
|
124
|
+
return !!(entry && entry[provider]);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get all cached formats for an image
|
|
128
|
+
* Returns object with available providers
|
|
129
|
+
*/
|
|
130
|
+
getAll(imageSource) {
|
|
131
|
+
const key = this.#generateKey(imageSource);
|
|
132
|
+
if (!key)
|
|
133
|
+
return null;
|
|
134
|
+
return this.cache.get(key) || null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Clear entire cache
|
|
138
|
+
*/
|
|
139
|
+
clear() {
|
|
140
|
+
const size = this.cache.size;
|
|
141
|
+
this.cache.clear();
|
|
142
|
+
this.log(`[ImageCache] CLEAR - Removed ${size} entries`);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get cache statistics
|
|
146
|
+
*/
|
|
147
|
+
getStats() {
|
|
148
|
+
const hitRateNum = this.stats.hits + this.stats.misses > 0
|
|
149
|
+
? (this.stats.hits / (this.stats.hits + this.stats.misses) * 100).toFixed(2)
|
|
150
|
+
: '0';
|
|
151
|
+
return {
|
|
152
|
+
...this.stats,
|
|
153
|
+
hitRate: `${hitRateNum}%`,
|
|
154
|
+
cacheSize: this.cache.size,
|
|
155
|
+
maxSize: this.maxCacheSize
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Reset statistics
|
|
160
|
+
*/
|
|
161
|
+
resetStats() {
|
|
162
|
+
this.stats = {
|
|
163
|
+
hits: 0,
|
|
164
|
+
misses: 0,
|
|
165
|
+
stores: 0,
|
|
166
|
+
evictions: 0
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get cache size in bytes (approximate)
|
|
171
|
+
* Useful for monitoring memory usage
|
|
172
|
+
*/
|
|
173
|
+
getMemorySize() {
|
|
174
|
+
let totalSize = 0;
|
|
175
|
+
for (const entry of this.cache.values()) {
|
|
176
|
+
for (const image of Object.values(entry)) {
|
|
177
|
+
if (typeof image === 'string') {
|
|
178
|
+
// Data URL or regular URL
|
|
179
|
+
totalSize += image.length * 2; // UTF-16 encoding
|
|
180
|
+
}
|
|
181
|
+
else if (image?.image?.source?.bytes) {
|
|
182
|
+
// Bedrock format
|
|
183
|
+
totalSize += image.image.source.bytes.length;
|
|
184
|
+
}
|
|
185
|
+
else if (image?.image_url) {
|
|
186
|
+
// OpenAI/Anthropic format
|
|
187
|
+
const url = typeof image.image_url === 'string'
|
|
188
|
+
? image.image_url
|
|
189
|
+
: image.image_url.url;
|
|
190
|
+
totalSize += url.length * 2;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
bytes: totalSize,
|
|
196
|
+
kb: (totalSize / 1024).toFixed(2),
|
|
197
|
+
mb: (totalSize / 1024 / 1024).toFixed(2)
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Log cache status
|
|
202
|
+
*/
|
|
203
|
+
logStatus() {
|
|
204
|
+
const stats = this.getStats();
|
|
205
|
+
const memory = this.getMemorySize();
|
|
206
|
+
this.log("[ImageCache] Status:");
|
|
207
|
+
this.log(` Entries: ${stats.cacheSize}/${stats.maxSize}`);
|
|
208
|
+
this.log(` Hits: ${stats.hits} | Misses: ${stats.misses} | Hit Rate: ${stats.hitRate}`);
|
|
209
|
+
this.log(` Stores: ${stats.stores} | Evictions: ${stats.evictions}`);
|
|
210
|
+
this.log(` Memory: ${memory.mb} MB (${memory.kb} KB)`);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Estimate provider-specific memory usage
|
|
214
|
+
*/
|
|
215
|
+
getProviderStats() {
|
|
216
|
+
const providerCounts = {
|
|
217
|
+
anthropic: 0,
|
|
218
|
+
openai: 0,
|
|
219
|
+
bedrock: 0,
|
|
220
|
+
deepseek: 0
|
|
221
|
+
};
|
|
222
|
+
for (const entry of this.cache.values()) {
|
|
223
|
+
for (const providerKey of Object.keys(entry)) {
|
|
224
|
+
if (providerCounts[providerKey] !== undefined) {
|
|
225
|
+
providerCounts[providerKey]++;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return providerCounts;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=ImageCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageCache.js","sourceRoot":"","sources":["../src/ImageCache.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAiC5B;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IACrB,GAAG,CAA4C;IAC/C,YAAY,CAAS;IACrB,KAAK,CAAmC;IACxC,KAAK,CAAa;IAE1B,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,GAAG,KAAuB,EAAE;QAC5D,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,kEAAkE;QAClE,wCAAwC;QACxC,6DAA6D;QAC7D,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAEvB,yBAAyB;QACzB,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,WAAgB;QAC3B,+BAA+B;QAC/B,IAAI,YAAoB,CAAC;QAEzB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,kBAAkB;YAClB,YAAY,GAAG,WAAW,CAAC;QAC7B,CAAC;aAAM,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC;YAClC,8BAA8B;YAC9B,YAAY,GAAG,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ;gBACtD,CAAC,CAAC,WAAW,CAAC,SAAS;gBACvB,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;QAChC,CAAC;aAAM,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC7C,kCAAkC;YAClC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,2CAA2C,EAAE,OAAO,WAAW,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0CAA0C;QAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,WAAgB,EAAE,QAAgB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,sBAAsB,QAAQ,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAEvE,2BAA2B;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE3B,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,WAAgB,EAAE,QAAgB,EAAE,cAAmB;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,qCAAqC;QACrC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,CAAC;QACb,CAAC;QAED,0CAA0C;QAC1C,KAAK,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;QAEjC,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEvB,kCAAkC;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE3B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,wBAAwB,QAAQ,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAEzE,gCAAgC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAChD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,6CAA6C,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,WAAgB,EAAE,QAAgB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAgB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,gCAAgC,IAAI,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YACxD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,GAAG,CAAC;QAER,OAAO;YACL,GAAG,IAAI,CAAC,KAAK;YACb,OAAO,EAAE,GAAG,UAAU,GAAG;YACzB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC1B,OAAO,EAAE,IAAI,CAAC,YAAY;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,0BAA0B;oBAC1B,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,kBAAkB;gBACnD,CAAC;qBAAM,IAAI,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;oBACvC,iBAAiB;oBACjB,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC/C,CAAC;qBAAM,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;oBAC5B,0BAA0B;oBAC1B,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;wBAC7C,CAAC,CAAC,KAAK,CAAC,SAAS;wBACjB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;oBACxB,SAAS,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACjC,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;SACzC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEpC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,MAAM,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,iBAAiB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,EAAE,QAAQ,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,cAAc,GAAkB;YACpC,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,CAAC;SACZ,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,IAAI,cAAc,CAAC,WAAkC,CAAC,KAAK,SAAS,EAAE,CAAC;oBACrE,cAAc,CAAC,WAAkC,CAAC,EAAE,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA6C7C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agnt init — create agnt.config.js in the current directory
|
|
3
|
+
*/
|
|
4
|
+
import { getConfigPath } from '../utils/config.js';
|
|
5
|
+
export async function runInit() {
|
|
6
|
+
const existing = await getConfigPath();
|
|
7
|
+
if (existing) {
|
|
8
|
+
console.log(`agnt.config.js already exists at: ${existing}`);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const { join } = await import('path');
|
|
12
|
+
const { writeFile } = await import('fs/promises');
|
|
13
|
+
const configPath = join(process.cwd(), 'agnt.config.js');
|
|
14
|
+
const template = `/**
|
|
15
|
+
* Agnt Configuration
|
|
16
|
+
*
|
|
17
|
+
* Docs: https://agnt.ai/docs/sdk
|
|
18
|
+
*
|
|
19
|
+
* WARNING: Keep this file out of version control if it contains secrets.
|
|
20
|
+
* Add agnt.config.js to your .gitignore when using serviceKey directly.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export default {
|
|
24
|
+
// Service key for private/unlisted prompts
|
|
25
|
+
// Get yours from: https://app.agnt.ai/settings/api-keys
|
|
26
|
+
serviceKey: process.env.AGNT_SERVICE_KEY || '',
|
|
27
|
+
|
|
28
|
+
// Agnt API base URL
|
|
29
|
+
apiUrl: 'https://api.agnt.ai',
|
|
30
|
+
|
|
31
|
+
// Directory where pulled prompt manifests are saved
|
|
32
|
+
outputDir: './agnt/prompts',
|
|
33
|
+
|
|
34
|
+
// API mode:
|
|
35
|
+
// false — use local pulled manifests (fast, offline-capable)
|
|
36
|
+
// true — fetch manifests from API on every execution (always up-to-date)
|
|
37
|
+
apiMode: false,
|
|
38
|
+
|
|
39
|
+
// Maximum messages in the agent loop before throwing (prevents infinite loops)
|
|
40
|
+
maxMessages: 50,
|
|
41
|
+
};
|
|
42
|
+
`;
|
|
43
|
+
await writeFile(configPath, template, 'utf-8');
|
|
44
|
+
console.log(`Created agnt.config.js`);
|
|
45
|
+
console.log(`Next: agnt pull <accountSlug>/<promptSlug>`);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BlB,CAAC;IAEA,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agnt pull — fetch and save v2 manifest(s) to the local outputDir
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* agnt pull skej/contact-collector # pull one prompt
|
|
6
|
+
* agnt pull skej/* # pull all public from account
|
|
7
|
+
* agnt pull # pull all from config default account
|
|
8
|
+
*/
|
|
9
|
+
export declare function runPull(address?: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsE7D"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agnt pull — fetch and save v2 manifest(s) to the local outputDir
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* agnt pull skej/contact-collector # pull one prompt
|
|
6
|
+
* agnt pull skej/* # pull all public from account
|
|
7
|
+
* agnt pull # pull all from config default account
|
|
8
|
+
*/
|
|
9
|
+
import { loadConfig } from '../utils/config.js';
|
|
10
|
+
import { AgntApiClient } from '../utils/api.js';
|
|
11
|
+
export async function runPull(address) {
|
|
12
|
+
const config = await loadConfig();
|
|
13
|
+
if (!config) {
|
|
14
|
+
console.error('No agnt.config.js found. Run: agnt init');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const client = new AgntApiClient({ apiUrl: config.apiUrl, serviceKey: config.serviceKey });
|
|
18
|
+
const { mkdir, writeFile } = await import('fs/promises');
|
|
19
|
+
const { join, resolve } = await import('path');
|
|
20
|
+
const outputDir = resolve(config.outputDir);
|
|
21
|
+
await mkdir(outputDir, { recursive: true });
|
|
22
|
+
if (!address) {
|
|
23
|
+
console.error('Usage: agnt pull <accountSlug>/<promptSlug> OR agnt pull <accountSlug>/*');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const isWildcard = address.endsWith('/*');
|
|
27
|
+
if (isWildcard) {
|
|
28
|
+
const accountSlug = address.slice(0, -2);
|
|
29
|
+
console.log(`Pulling all public prompts for account: ${accountSlug}`);
|
|
30
|
+
let prompts;
|
|
31
|
+
try {
|
|
32
|
+
prompts = await client.listPublicPrompts(accountSlug);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.error(`Failed to list prompts: ${err.message}`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
if (prompts.length === 0) {
|
|
39
|
+
console.log('No public prompts found.');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
let saved = 0;
|
|
43
|
+
for (const p of prompts) {
|
|
44
|
+
try {
|
|
45
|
+
const manifest = await client.getManifest(accountSlug, p.name);
|
|
46
|
+
await saveManifest(manifest, accountSlug, p.name, outputDir, writeFile, join, mkdir);
|
|
47
|
+
console.log(` ✓ ${accountSlug}/${p.name}`);
|
|
48
|
+
saved++;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.warn(` ✗ ${accountSlug}/${p.name}: ${err.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
console.log(`\nPulled ${saved}/${prompts.length} prompts to ${config.outputDir}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const parts = address.split('/');
|
|
58
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
59
|
+
console.error(`Invalid address: "${address}". Expected "accountSlug/promptSlug"`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
const [accountSlug, promptSlug] = parts;
|
|
63
|
+
let manifest;
|
|
64
|
+
try {
|
|
65
|
+
manifest = await client.getManifest(accountSlug, promptSlug);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
console.error(`Failed to pull ${address}: ${err.message}`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
await saveManifest(manifest, accountSlug, promptSlug, outputDir, writeFile, join, mkdir);
|
|
72
|
+
console.log(`Pulled ${address} → ${config.outputDir}/${accountSlug}/${promptSlug}.json`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function saveManifest(manifest, accountSlug, promptSlug, outputDir, writeFile, join, mkdir) {
|
|
76
|
+
const accountDir = join(outputDir, accountSlug);
|
|
77
|
+
await mkdir(accountDir, { recursive: true });
|
|
78
|
+
const filePath = join(accountDir, `${promptSlug}.json`);
|
|
79
|
+
const payload = { manifest, pulledAt: new Date().toISOString() };
|
|
80
|
+
await writeFile(filePath, JSON.stringify(payload, null, 2), 'utf-8');
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* agnt CLI — @agnt-sdk/studio
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { runInit } from './commands/init.js';
|
|
7
|
+
import { runPull } from './commands/pull.js';
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('agnt')
|
|
11
|
+
.description('Agnt SDK CLI — manage and run v2 prompt manifests')
|
|
12
|
+
.version('0.0.1');
|
|
13
|
+
program
|
|
14
|
+
.command('init')
|
|
15
|
+
.description('Create agnt.config.js in the current directory')
|
|
16
|
+
.action(async () => {
|
|
17
|
+
await runInit();
|
|
18
|
+
});
|
|
19
|
+
program
|
|
20
|
+
.command('pull [address]')
|
|
21
|
+
.description('Pull prompt manifest(s) from the Agnt API\n' +
|
|
22
|
+
' agnt pull skej/contact-collector # pull one prompt\n' +
|
|
23
|
+
' agnt pull skej/* # pull all public from account')
|
|
24
|
+
.action(async (address) => {
|
|
25
|
+
await runPull(address);
|
|
26
|
+
});
|
|
27
|
+
program.parse(process.argv);
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CACV,6CAA6C;IAC7C,0DAA0D;IAC1D,qEAAqE,CACtE;KACA,MAAM,CAAC,KAAK,EAAE,OAAgB,EAAE,EAAE;IACjC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgntApiClient — HTTP client for the Agnt API
|
|
3
|
+
*
|
|
4
|
+
* Used by:
|
|
5
|
+
* - AgntExecutor (runtime manifest loading)
|
|
6
|
+
* - agnt pull CLI command
|
|
7
|
+
*/
|
|
8
|
+
import type { PromptManifestV2 } from '../../types.js';
|
|
9
|
+
export interface AgntApiOptions {
|
|
10
|
+
apiUrl: string;
|
|
11
|
+
serviceKey?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PulledPrompt {
|
|
14
|
+
manifest: PromptManifestV2;
|
|
15
|
+
pulledAt: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PublicPromptListItem {
|
|
18
|
+
name: string;
|
|
19
|
+
title: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
visibility: string;
|
|
22
|
+
}
|
|
23
|
+
export declare class AgntApiClient {
|
|
24
|
+
private apiUrl;
|
|
25
|
+
private serviceKey;
|
|
26
|
+
constructor(options: AgntApiOptions);
|
|
27
|
+
private request;
|
|
28
|
+
/**
|
|
29
|
+
* Fetch a v2 manifest for a specific prompt.
|
|
30
|
+
* Public for listed/system prompts; auth required for private/unlisted.
|
|
31
|
+
*/
|
|
32
|
+
getManifest(accountSlug: string, promptSlug: string): Promise<PromptManifestV2>;
|
|
33
|
+
/**
|
|
34
|
+
* List public prompts for an account.
|
|
35
|
+
*/
|
|
36
|
+
listPublicPrompts(accountSlug: string): Promise<PublicPromptListItem[]>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,cAAc;YAKrB,OAAO;IAiBrB;;;OAGG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOrF;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;CAM9E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgntApiClient — HTTP client for the Agnt API
|
|
3
|
+
*
|
|
4
|
+
* Used by:
|
|
5
|
+
* - AgntExecutor (runtime manifest loading)
|
|
6
|
+
* - agnt pull CLI command
|
|
7
|
+
*/
|
|
8
|
+
export class AgntApiClient {
|
|
9
|
+
apiUrl;
|
|
10
|
+
serviceKey;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.apiUrl = options.apiUrl.replace(/\/$/, '');
|
|
13
|
+
this.serviceKey = options.serviceKey ?? '';
|
|
14
|
+
}
|
|
15
|
+
async request(path, options = {}, requireAuth = false) {
|
|
16
|
+
const url = `${this.apiUrl}${path}`;
|
|
17
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
18
|
+
if (this.serviceKey || requireAuth) {
|
|
19
|
+
headers['Authorization'] = `Bearer ${this.serviceKey}`;
|
|
20
|
+
}
|
|
21
|
+
const response = await fetch(url, { ...options, headers: { ...headers, ...options.headers } });
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
const error = await response.text();
|
|
24
|
+
throw new Error(`Agnt API error (${response.status}): ${error}`);
|
|
25
|
+
}
|
|
26
|
+
return response.json();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Fetch a v2 manifest for a specific prompt.
|
|
30
|
+
* Public for listed/system prompts; auth required for private/unlisted.
|
|
31
|
+
*/
|
|
32
|
+
async getManifest(accountSlug, promptSlug) {
|
|
33
|
+
const data = await this.request(`/manifests/${accountSlug}/${promptSlug}`);
|
|
34
|
+
return data.manifest;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* List public prompts for an account.
|
|
38
|
+
*/
|
|
39
|
+
async listPublicPrompts(accountSlug) {
|
|
40
|
+
const data = await this.request(`/manifests/${accountSlug}`);
|
|
41
|
+
return data.prompts;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/cli/utils/api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAS;IACf,UAAU,CAAS;IAE3B,YAAY,OAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,UAAuB,EAAE,EAAE,WAAW,GAAG,KAAK;QACnF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACpC,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QAC/E,IAAI,IAAI,CAAC,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE/F,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,WAAmB,EAAE,UAAkB;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7B,cAAc,WAAW,IAAI,UAAU,EAAE,CAC1C,CAAC;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7B,cAAc,WAAW,EAAE,CAC5B,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAc,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Condition evaluation for v2 PromptManifest
|
|
3
|
+
*
|
|
4
|
+
* Evaluates LeafConditions and CompoundConditions against runtime variables.
|
|
5
|
+
* Variable paths use dot notation: `variables.<key>` → variables['key']
|
|
6
|
+
*/
|
|
7
|
+
import type { Condition } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Evaluate a condition (leaf or compound) against runtime variables.
|
|
10
|
+
* Returns true if the condition passes (item should be included).
|
|
11
|
+
* A null/undefined condition always passes.
|
|
12
|
+
*/
|
|
13
|
+
export declare function evaluateCondition(condition: Condition | null | undefined, variables: Record<string, any>): boolean;
|
|
14
|
+
//# sourceMappingURL=conditions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../src/conditions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoC,MAAM,YAAY,CAAC;AAwC9E;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,OAAO,CAaT"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Condition evaluation for v2 PromptManifest
|
|
3
|
+
*
|
|
4
|
+
* Evaluates LeafConditions and CompoundConditions against runtime variables.
|
|
5
|
+
* Variable paths use dot notation: `variables.<key>` → variables['key']
|
|
6
|
+
*/
|
|
7
|
+
function isCompound(c) {
|
|
8
|
+
return 'operator' in c;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resolve a variable path against the runtime context.
|
|
12
|
+
* Supports: `variables.<key>` and bare key names as shorthand.
|
|
13
|
+
*/
|
|
14
|
+
function resolveVariablePath(path, variables) {
|
|
15
|
+
if (path.startsWith('variables.')) {
|
|
16
|
+
return variables[path.slice('variables.'.length)];
|
|
17
|
+
}
|
|
18
|
+
// Bare key (shorthand)
|
|
19
|
+
return variables[path];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Evaluate a single leaf condition
|
|
23
|
+
*/
|
|
24
|
+
function evaluateLeaf(condition, variables) {
|
|
25
|
+
const actual = resolveVariablePath(condition.variable, variables);
|
|
26
|
+
const expected = condition.value;
|
|
27
|
+
switch (condition.op) {
|
|
28
|
+
case 'eq': return actual === expected;
|
|
29
|
+
case 'neq': return actual !== expected;
|
|
30
|
+
case 'gt': return actual > expected;
|
|
31
|
+
case 'gte': return actual >= expected;
|
|
32
|
+
case 'lt': return actual < expected;
|
|
33
|
+
case 'lte': return actual <= expected;
|
|
34
|
+
case 'in': return Array.isArray(expected) && expected.includes(actual);
|
|
35
|
+
case 'not_in': return Array.isArray(expected) && !expected.includes(actual);
|
|
36
|
+
case 'exists': return actual !== undefined && actual !== null;
|
|
37
|
+
case 'not_exists': return actual === undefined || actual === null;
|
|
38
|
+
default: return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Evaluate a condition (leaf or compound) against runtime variables.
|
|
43
|
+
* Returns true if the condition passes (item should be included).
|
|
44
|
+
* A null/undefined condition always passes.
|
|
45
|
+
*/
|
|
46
|
+
export function evaluateCondition(condition, variables) {
|
|
47
|
+
if (!condition)
|
|
48
|
+
return true;
|
|
49
|
+
if (isCompound(condition)) {
|
|
50
|
+
switch (condition.operator) {
|
|
51
|
+
case 'AND': return condition.rules.every(r => evaluateCondition(r, variables));
|
|
52
|
+
case 'OR': return condition.rules.some(r => evaluateCondition(r, variables));
|
|
53
|
+
case 'NOT': return condition.rules.length > 0 && !evaluateCondition(condition.rules[0], variables);
|
|
54
|
+
default: return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return evaluateLeaf(condition, variables);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=conditions.js.map
|