@agent-relay/integration-prompts 8.8.3

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 ADDED
@@ -0,0 +1,17 @@
1
+ # @agent-relay/integration-prompts
2
+
3
+ Shared prompt builders for Relayfile integration writeback instructions.
4
+
5
+ ```ts
6
+ import {
7
+ deriveDescriptorsFromMount,
8
+ prescriptiveInstructions,
9
+ } from '@agent-relay/integration-prompts';
10
+
11
+ const descriptors = await deriveDescriptorsFromMount({
12
+ readFile: async (path) => mount.readText(path),
13
+ listTree: async (path) => mount.listTree(path),
14
+ });
15
+
16
+ const instructions = prescriptiveInstructions(descriptors);
17
+ ```
@@ -0,0 +1,6 @@
1
+ import type { IntegrationDescriptor } from './types.js';
2
+ export declare function prescriptiveInstructions(descriptors: IntegrationDescriptor[]): string;
3
+ export declare function fullInjectInstructions(descriptors: IntegrationDescriptor[]): string;
4
+ export declare function initialSpawnInstructions(descriptors: IntegrationDescriptor[]): string;
5
+ export declare function slimInstructions(descriptors: IntegrationDescriptor[]): string;
6
+ //# sourceMappingURL=builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA8D,MAAM,YAAY,CAAC;AAEpH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAqBrF;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,MAAM,CA0CnF;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAOrF;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAa7E"}
@@ -0,0 +1,144 @@
1
+ export function prescriptiveInstructions(descriptors) {
2
+ const integrations = normalizeDescriptors(descriptors);
3
+ if (integrations.length === 0)
4
+ return '';
5
+ const lines = [
6
+ '## Integration writebacks',
7
+ 'To dispatch an integration action, write a JSON file under the resource path -- do NOT use relay messaging for these actions.',
8
+ 'Read the sibling .schema.json and .create.example.json files under .integrations/discovery/<provider>/ before writing.',
9
+ 'Do not create provider records inside discovery; discovery is schema-only.',
10
+ '',
11
+ 'Available writeback resources:',
12
+ ];
13
+ for (const descriptor of integrations) {
14
+ lines.push(`- ${labelFor(descriptor)} (${descriptor.mountRoot})`);
15
+ for (const resource of descriptor.writableResources) {
16
+ lines.push(` - ${resourceLine(descriptor, resource)}`);
17
+ }
18
+ }
19
+ return lines.join('\n');
20
+ }
21
+ export function fullInjectInstructions(descriptors) {
22
+ const integrations = normalizeDescriptors(descriptors);
23
+ const lines = [
24
+ '<integrations-update>',
25
+ 'The user has connected the following integrations to this project:',
26
+ ];
27
+ if (integrations.length === 0) {
28
+ lines.push('- none');
29
+ }
30
+ else {
31
+ for (const descriptor of integrations) {
32
+ lines.push(fullDescriptorLine(descriptor));
33
+ }
34
+ }
35
+ const subscriptions = integrations.flatMap((descriptor) => (descriptor.subscriptions ?? []).map((subscription) => ({
36
+ provider: subscription.provider ?? descriptor.provider,
37
+ watches: subscription.watches,
38
+ targets: subscription.targets ?? [],
39
+ })));
40
+ lines.push('');
41
+ if (subscriptions.length === 0) {
42
+ lines.push('No integration event subscriptions are active for this project.');
43
+ }
44
+ else {
45
+ lines.push('Active integration event subscriptions for this project:');
46
+ for (const subscription of subscriptions) {
47
+ lines.push(subscriptionLine(subscription));
48
+ }
49
+ lines.push('You will receive <integration-event> system messages for these subscribed changes. Do not poll these integrations for background changes; wait for the event notification, then read the mounted files for context if needed.');
50
+ }
51
+ lines.push('Writeback discovery schemas and examples are mounted through .integrations/discovery/<provider>/ for connected integrations. Use those schemas to create files under the provider paths such as .integrations/slack/channels/<channelId>/messages; do not create provider records inside discovery. Historical provider records are only intentionally downloaded when historical download is enabled. Incoming webhook events do not require downloading history.', '</integrations-update>');
52
+ return lines.join('\n');
53
+ }
54
+ export function initialSpawnInstructions(descriptors) {
55
+ const snippet = fullInjectInstructions(descriptors);
56
+ if (!snippet)
57
+ return '';
58
+ return [
59
+ 'Initial project integration context. Treat this as setup context, not as the user task.',
60
+ snippet,
61
+ ].join('\n');
62
+ }
63
+ export function slimInstructions(descriptors) {
64
+ const integrations = normalizeDescriptors(descriptors);
65
+ if (integrations.length === 0)
66
+ return '';
67
+ const names = integrations.map((descriptor) => {
68
+ const resources = descriptor.writableResources.map((resource) => resource.path).join(', ');
69
+ return resources ? `${descriptor.provider}: ${resources}` : descriptor.provider;
70
+ });
71
+ return [
72
+ `Connected integrations: ${names.join('; ')}.`,
73
+ 'For integration actions, write JSON under the provider resource path in .integrations; do NOT use relay messaging. Discovery schemas and examples are under .integrations/discovery/<provider>/.',
74
+ ].join('\n');
75
+ }
76
+ function fullDescriptorLine(descriptor) {
77
+ const scopeSummary = descriptor.scopeLabels && descriptor.scopeLabels.length > 0
78
+ ? descriptor.scopeLabels.join(', ')
79
+ : 'all configured scope';
80
+ const eventScopes = descriptor.eventScopePaths && descriptor.eventScopePaths.length > 0
81
+ ? ` (event scope ${descriptor.eventScopePaths.join(', ')})`
82
+ : ' (no event scope configured)';
83
+ const discoveryRoot = descriptor.discoveryRoot ?? `.integrations/discovery/${descriptor.provider}`;
84
+ const writebackPaths = descriptor.writebackPaths && descriptor.writebackPaths.length > 0
85
+ ? descriptor.writebackPaths
86
+ : descriptor.writableResources.map((resource) => resource.path);
87
+ const writebackInstruction = writebackPaths.length > 0
88
+ ? `create writeback files under ${writebackPaths.join(', ')}, not under discovery`
89
+ : 'select narrower resources before creating local writeback files; discovery is schema-only';
90
+ const historyClause = historyText(descriptor, writebackPaths);
91
+ return `- ${descriptor.provider}: ${scopeSummary}${eventScopes}. Writeback schemas and examples are available at ${discoveryRoot}; ${writebackInstruction}. ${historyClause}`;
92
+ }
93
+ function historyText(descriptor, writebackPaths) {
94
+ const skipped = descriptor.skippedLocalPaths ?? [];
95
+ if (descriptor.downloadHistoricalData === true) {
96
+ if (skipped.length > 0) {
97
+ return `Historical download is enabled, but these provider paths are not locally poll-mounted: ${skipped.join(', ')}. Select fewer or narrower resources to download local history.`;
98
+ }
99
+ return `Historical provider records are available at ${writebackPaths.join(', ') || 'the configured provider paths'}.`;
100
+ }
101
+ if (writebackPaths.length === 0) {
102
+ return 'Local historical provider records are not downloaded. No narrow writeback command roots are mounted; select narrower resources to enable local writeback transport.';
103
+ }
104
+ const liveContext = descriptor.liveContextPaths && descriptor.liveContextPaths.length > 0
105
+ ? `, and live thread context roots are mounted at ${descriptor.liveContextPaths.join(', ')}`
106
+ : '';
107
+ return `Local historical provider records are not broadly downloaded. Writeback command roots are mounted at ${writebackPaths.join(', ')}${liveContext}; provider context should be read on demand or through incoming events.`;
108
+ }
109
+ function subscriptionLine(subscription) {
110
+ const parts = [
111
+ subscription.watches.length > 0 ? `file changes at ${subscription.watches.join(', ')}` : '',
112
+ subscription.targets.length > 0 ? `delivered to ${subscription.targets.join(', ')}` : 'delivered to all project agents',
113
+ ].filter(Boolean);
114
+ return `- ${subscription.provider}: ${parts.join('; ')}`;
115
+ }
116
+ function resourceLine(descriptor, resource) {
117
+ const parts = [resource.path];
118
+ if (resource.createExamplePath)
119
+ parts.push(`create example ${resource.createExamplePath}`);
120
+ if (resource.schemaPath)
121
+ parts.push(`schema ${resource.schemaPath}`);
122
+ if (resource.description)
123
+ parts.push(resource.description.replace(/\.$/u, ''));
124
+ if (parts.length === 1) {
125
+ parts.push(`write JSON drafts under ${resource.path}`);
126
+ }
127
+ const concreteHint = resource.path.startsWith(descriptor.mountRoot) ? '' : ` (mounted under ${descriptor.mountRoot})`;
128
+ return `${parts.join(' -- ')}${concreteHint}`;
129
+ }
130
+ function normalizeDescriptors(descriptors) {
131
+ return descriptors
132
+ .filter((descriptor) => descriptor.provider.trim())
133
+ .map((descriptor) => ({
134
+ ...descriptor,
135
+ provider: descriptor.provider.trim(),
136
+ mountRoot: descriptor.mountRoot || `.integrations/${descriptor.provider.trim()}`,
137
+ writableResources: [...descriptor.writableResources].sort((a, b) => a.path.localeCompare(b.path)),
138
+ }))
139
+ .sort((a, b) => a.provider.localeCompare(b.provider));
140
+ }
141
+ function labelFor(descriptor) {
142
+ return descriptor.displayName ? `${descriptor.displayName} / ${descriptor.provider}` : descriptor.provider;
143
+ }
144
+ //# sourceMappingURL=builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DeriveDescriptorsOptions, IntegrationDescriptor, MountDiscoveryReader, MountReadFile, WritableResourceDescriptor } from './types.js';
2
+ export declare function deriveDescriptorsFromMount(reader: MountDiscoveryReader | MountReadFile, options?: DeriveDescriptorsOptions | string): Promise<IntegrationDescriptor[]>;
3
+ export declare function parseWritableResources(adapterDoc: string, providerHint?: string): WritableResourceDescriptor[];
4
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EAEpB,aAAa,EACb,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AA0BpB,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,oBAAoB,GAAG,aAAa,EAC5C,OAAO,GAAE,wBAAwB,GAAG,MAAW,GAC9C,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA0BlC;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,0BAA0B,EAAE,CAK9G"}
@@ -0,0 +1,271 @@
1
+ const DEFAULT_DISCOVERY_ROOT = '.integrations/discovery';
2
+ const DEFAULT_KNOWN_PROVIDERS = [
3
+ 'github',
4
+ 'gitlab',
5
+ 'slack',
6
+ 'notion',
7
+ 'linear',
8
+ 'jira',
9
+ 'confluence',
10
+ 'gmail',
11
+ 'google-mail',
12
+ 'google-calendar',
13
+ 'hubspot',
14
+ 'granola',
15
+ 'fathom',
16
+ 'docker-hub',
17
+ 'recall',
18
+ ];
19
+ export async function deriveDescriptorsFromMount(reader, options = {}) {
20
+ const readFile = typeof reader === 'function' ? reader : reader.readFile;
21
+ const normalized = normalizeOptions(reader, options);
22
+ const providers = await discoverProviders(readFile, normalized);
23
+ const descriptors = [];
24
+ for (const provider of providers) {
25
+ const providerRoot = joinPath(normalized.discoveryRoot, provider);
26
+ const adapterDoc = await readFileSafe(readFile, joinPath(providerRoot, '.adapter.md'));
27
+ const resources = parseWritableResources(adapterDoc ?? '', provider);
28
+ const discoveredResources = resources.length > 0
29
+ ? resources
30
+ : await discoverWritableResourcesFromTree(provider, providerRoot, normalized.listPaths);
31
+ if (!adapterDoc && discoveredResources.length === 0)
32
+ continue;
33
+ descriptors.push({
34
+ provider,
35
+ mountRoot: `.integrations/${provider}`,
36
+ discoveryRoot: providerRoot,
37
+ writableResources: discoveredResources,
38
+ description: adapterDoc ? firstParagraph(adapterDoc) : undefined,
39
+ });
40
+ }
41
+ return descriptors.sort((a, b) => a.provider.localeCompare(b.provider));
42
+ }
43
+ export function parseWritableResources(adapterDoc, providerHint) {
44
+ const rows = parseMarkdownResourceRows(adapterDoc);
45
+ if (rows.length > 0)
46
+ return rows;
47
+ return parseWriteFieldContracts(adapterDoc, providerHint);
48
+ }
49
+ async function discoverProviders(readFile, options) {
50
+ const providers = new Set();
51
+ const listed = await listProviderNames(options.discoveryRoot, options.listPaths);
52
+ for (const provider of listed)
53
+ providers.add(provider);
54
+ const manifest = await readJsonSafe(readFile, joinPath(options.discoveryRoot, 'index.json'));
55
+ for (const provider of providersFromManifest(manifest))
56
+ providers.add(provider);
57
+ const adapterProviders = providers.size > 0 ? Array.from(providers) : options.knownProviders;
58
+ for (const provider of adapterProviders) {
59
+ if (providers.has(provider))
60
+ continue;
61
+ const adapterDoc = await readFileSafe(readFile, joinPath(options.discoveryRoot, provider, '.adapter.md'));
62
+ if (adapterDoc !== undefined)
63
+ providers.add(provider);
64
+ }
65
+ return Array.from(providers).filter(Boolean).sort();
66
+ }
67
+ async function discoverWritableResourcesFromTree(provider, providerRoot, listPaths) {
68
+ if (!listPaths)
69
+ return [];
70
+ const paths = await listPathsSafe(listPaths, providerRoot);
71
+ const resources = new Map();
72
+ for (const path of paths) {
73
+ const normalized = normalizePath(path);
74
+ if (!normalized.endsWith('/.create.example.json'))
75
+ continue;
76
+ const discoveryRelative = stripPrefix(normalized, providerRoot);
77
+ const resourceRelative = discoveryRelative.replace(/\/\.create\.example\.json$/u, '');
78
+ const resourcePath = `/${provider}/${resourceRelative.replace(/^\/+/u, '')}`;
79
+ resources.set(resourcePath, {
80
+ path: resourcePath,
81
+ createExamplePath: normalized,
82
+ schemaPath: normalized.replace(/\/\.create\.example\.json$/u, '/.schema.json'),
83
+ name: lastMeaningfulSegment(resourcePath),
84
+ });
85
+ }
86
+ return Array.from(resources.values()).sort(compareResources);
87
+ }
88
+ function parseMarkdownResourceRows(adapterDoc) {
89
+ const resources = new Map();
90
+ for (const rawLine of adapterDoc.split(/\r?\n/u)) {
91
+ const line = rawLine.trim();
92
+ if (!line.startsWith('|'))
93
+ continue;
94
+ if (/^\|\s*-+\s*\|/u.test(line))
95
+ continue;
96
+ if (/^\|\s*Resource\s*\|/iu.test(line))
97
+ continue;
98
+ const cells = line
99
+ .slice(1, line.endsWith('|') ? -1 : undefined)
100
+ .split('|')
101
+ .map((cell) => stripCode(cell.trim()));
102
+ if (cells.length < 3)
103
+ continue;
104
+ const [resourceCell, schemaCell, createExampleCell, , descriptionCell] = cells;
105
+ if (!resourceCell || !resourceCell.startsWith('/'))
106
+ continue;
107
+ const path = resourceCell.replace(/\/<id>\.json$/u, '').replace(/\/\{id\}\.json$/u, '');
108
+ resources.set(path, {
109
+ path,
110
+ schemaPath: schemaCell && schemaCell.startsWith('/') ? schemaCell : undefined,
111
+ createExamplePath: createExampleCell && createExampleCell.startsWith('/') ? createExampleCell : undefined,
112
+ description: descriptionCell || undefined,
113
+ name: lastMeaningfulSegment(path),
114
+ });
115
+ }
116
+ return Array.from(resources.values()).sort(compareResources);
117
+ }
118
+ function parseWriteFieldContracts(adapterDoc, providerHint) {
119
+ const resources = new Map();
120
+ let pendingDescription;
121
+ let currentPath;
122
+ for (const rawLine of adapterDoc.split(/\r?\n/u)) {
123
+ const line = rawLine.trim();
124
+ const heading = line.match(/^###\s+(.+)$/u);
125
+ if (heading) {
126
+ pendingDescription = heading[1]?.trim();
127
+ currentPath = undefined;
128
+ continue;
129
+ }
130
+ const resource = line.match(/^Resource:\s+`?([^`\s]+)`?/iu);
131
+ if (resource) {
132
+ currentPath = normalizeResourcePath(resource[1] ?? '');
133
+ continue;
134
+ }
135
+ const createExample = line.match(/^Create example:\s+`?([^`\s]+)`?/iu);
136
+ if (createExample && currentPath) {
137
+ resources.set(currentPath, {
138
+ path: currentPath,
139
+ createExamplePath: createExample[1],
140
+ description: pendingDescription,
141
+ name: lastMeaningfulSegment(currentPath),
142
+ });
143
+ }
144
+ }
145
+ if (resources.size === 0 && providerHint) {
146
+ const fallbackPattern = new RegExp(`/${escapeRegExp(providerHint)}/[^\\s\`|]+/\\.create\\.example\\.json`, 'gu');
147
+ for (const match of adapterDoc.matchAll(fallbackPattern)) {
148
+ const createExamplePath = match[0];
149
+ const path = normalizeResourcePath(createExamplePath.replace(/\/\.create\.example\.json$/u, ''));
150
+ resources.set(path, {
151
+ path,
152
+ createExamplePath,
153
+ name: lastMeaningfulSegment(path),
154
+ });
155
+ }
156
+ }
157
+ return Array.from(resources.values()).sort(compareResources);
158
+ }
159
+ function normalizeOptions(reader, options) {
160
+ const opts = typeof options === 'string' ? { discoveryRoot: options } : options;
161
+ const readerList = typeof reader === 'function' ? undefined : reader.listPaths ?? reader.listTree;
162
+ return {
163
+ discoveryRoot: trimTrailingSlash(opts.discoveryRoot ?? DEFAULT_DISCOVERY_ROOT),
164
+ knownProviders: opts.knownProviders ?? DEFAULT_KNOWN_PROVIDERS,
165
+ listPaths: opts.listPaths ?? opts.listTree ?? readerList,
166
+ };
167
+ }
168
+ async function listProviderNames(root, listPaths) {
169
+ if (!listPaths)
170
+ return [];
171
+ const paths = await listPathsSafe(listPaths, root);
172
+ const providers = new Set();
173
+ for (const path of paths) {
174
+ const relative = stripPrefix(normalizePath(path), root);
175
+ const provider = relative.split('/').filter(Boolean)[0];
176
+ if (provider && !provider.startsWith('.'))
177
+ providers.add(provider);
178
+ }
179
+ return Array.from(providers).sort();
180
+ }
181
+ function providersFromManifest(value) {
182
+ if (Array.isArray(value)) {
183
+ return value.flatMap((entry) => {
184
+ if (typeof entry === 'string')
185
+ return [entry];
186
+ if (entry && typeof entry === 'object' && typeof entry.provider === 'string') {
187
+ return [entry.provider];
188
+ }
189
+ return [];
190
+ });
191
+ }
192
+ if (value && typeof value === 'object') {
193
+ const record = value;
194
+ return [...providersFromManifest(record.providers), ...providersFromManifest(record.integrations)];
195
+ }
196
+ return [];
197
+ }
198
+ async function readJsonSafe(readFile, path) {
199
+ const content = await readFileSafe(readFile, path);
200
+ if (!content)
201
+ return undefined;
202
+ try {
203
+ return JSON.parse(content);
204
+ }
205
+ catch {
206
+ return undefined;
207
+ }
208
+ }
209
+ async function readFileSafe(readFile, path) {
210
+ try {
211
+ const value = await readFile(path);
212
+ return typeof value === 'string' ? value : undefined;
213
+ }
214
+ catch {
215
+ return undefined;
216
+ }
217
+ }
218
+ async function listPathsSafe(listPaths, path) {
219
+ try {
220
+ const value = await listPaths(path);
221
+ return Array.isArray(value) ? value.filter((entry) => typeof entry === 'string') : [];
222
+ }
223
+ catch {
224
+ return [];
225
+ }
226
+ }
227
+ function firstParagraph(markdown) {
228
+ const lines = markdown
229
+ .split(/\r?\n/u)
230
+ .map((line) => line.trim())
231
+ .filter((line) => line && !line.startsWith('#'));
232
+ return lines[0];
233
+ }
234
+ function normalizeResourcePath(path) {
235
+ return path.replace(/\/<id>\.json$/u, '').replace(/\/\{id\}\.json$/u, '');
236
+ }
237
+ function joinPath(...parts) {
238
+ return parts.map((part, index) => {
239
+ const trimmed = index === 0 ? trimTrailingSlash(part) : part.replace(/^\/+|\/+$/gu, '');
240
+ return trimmed;
241
+ }).filter(Boolean).join('/');
242
+ }
243
+ function normalizePath(path) {
244
+ return path.replace(/\\/gu, '/').replace(/\/+/gu, '/').replace(/\/$/u, '');
245
+ }
246
+ function trimTrailingSlash(path) {
247
+ return path.replace(/\/+$/u, '');
248
+ }
249
+ function stripPrefix(path, prefix) {
250
+ const normalizedPrefix = normalizePath(prefix);
251
+ const normalizedPath = normalizePath(path);
252
+ if (normalizedPath === normalizedPrefix)
253
+ return '';
254
+ if (normalizedPath.startsWith(`${normalizedPrefix}/`))
255
+ return normalizedPath.slice(normalizedPrefix.length + 1);
256
+ return normalizedPath;
257
+ }
258
+ function stripCode(value) {
259
+ return value.replace(/^`|`$/gu, '').trim();
260
+ }
261
+ function lastMeaningfulSegment(path) {
262
+ const segments = path.split('/').filter(Boolean);
263
+ return segments.at(-1)?.replace(/\.(json|md)$/u, '');
264
+ }
265
+ function compareResources(a, b) {
266
+ return a.path.localeCompare(b.path);
267
+ }
268
+ function escapeRegExp(value) {
269
+ return value.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
270
+ }
271
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { deriveDescriptorsFromMount, parseWritableResources, } from './discovery.js';
2
+ export { fullInjectInstructions, initialSpawnInstructions, prescriptiveInstructions, slimInstructions, } from './builders.js';
3
+ export type { DeriveDescriptorsOptions, IntegrationDescriptor, IntegrationSubscriptionSummary, MaybePromise, MountDiscoveryReader, MountListPaths, MountReadFile, WritableResourceDescriptor, } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,8BAA8B,EAC9B,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { deriveDescriptorsFromMount, parseWritableResources, } from './discovery.js';
2
+ export { fullInjectInstructions, initialSpawnInstructions, prescriptiveInstructions, slimInstructions, } from './builders.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,42 @@
1
+ export type MaybePromise<T> = T | Promise<T>;
2
+ export interface WritableResourceDescriptor {
3
+ path: string;
4
+ createExamplePath?: string;
5
+ schemaPath?: string;
6
+ description?: string;
7
+ name?: string;
8
+ }
9
+ export interface IntegrationSubscriptionSummary {
10
+ provider?: string;
11
+ watches: string[];
12
+ targets?: string[];
13
+ }
14
+ export interface IntegrationDescriptor {
15
+ provider: string;
16
+ mountRoot: string;
17
+ writableResources: WritableResourceDescriptor[];
18
+ discoveryRoot?: string;
19
+ displayName?: string;
20
+ description?: string;
21
+ scopeLabels?: string[];
22
+ eventScopePaths?: string[];
23
+ writebackPaths?: string[];
24
+ subscriptions?: IntegrationSubscriptionSummary[];
25
+ downloadHistoricalData?: boolean;
26
+ liveContextPaths?: string[];
27
+ skippedLocalPaths?: string[];
28
+ }
29
+ export type MountReadFile = (path: string) => MaybePromise<string | null | undefined>;
30
+ export type MountListPaths = (path: string) => MaybePromise<string[] | null | undefined>;
31
+ export interface MountDiscoveryReader {
32
+ readFile: MountReadFile;
33
+ listPaths?: MountListPaths;
34
+ listTree?: MountListPaths;
35
+ }
36
+ export interface DeriveDescriptorsOptions {
37
+ discoveryRoot?: string;
38
+ knownProviders?: string[];
39
+ listPaths?: MountListPaths;
40
+ listTree?: MountListPaths;
41
+ }
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,0BAA0B,EAAE,CAAC;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,8BAA8B,EAAE,CAAC;IACjD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEtF,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@agent-relay/integration-prompts",
3
+ "version": "8.8.3",
4
+ "description": "Shared Relayfile integration writeback prompt builders for Agent Relay consumers.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "package.json"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "check": "tsc -p tsconfig.json --noEmit",
23
+ "test": "vitest run --root ../.. packages/integration-prompts/src/discovery.test.ts packages/integration-prompts/src/builders.test.ts"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/AgentWorkforce/relay.git",
31
+ "directory": "packages/integration-prompts"
32
+ },
33
+ "license": "Apache-2.0"
34
+ }