@agent-link/agent 0.1.338 → 0.1.340
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/dist/backends/types.d.ts +58 -0
- package/dist/backends/types.js +15 -4
- package/dist/backends/types.js.map +1 -1
- package/dist/connection.d.ts +2 -1
- package/dist/connection.js +279 -48
- package/dist/connection.js.map +1 -1
- package/dist/copilot-capabilities-offline.d.ts +254 -0
- package/dist/copilot-capabilities-offline.js +392 -0
- package/dist/copilot-capabilities-offline.js.map +1 -0
- package/dist/copilot-capabilities.d.ts +43 -0
- package/dist/copilot-capabilities.js +128 -0
- package/dist/copilot-capabilities.js.map +1 -0
- package/dist/copilot-capability-service.d.ts +24 -0
- package/dist/copilot-capability-service.js +116 -0
- package/dist/copilot-capability-service.js.map +1 -0
- package/dist/copilot-command-bridge.d.ts +184 -0
- package/dist/copilot-command-bridge.js +1800 -0
- package/dist/copilot-command-bridge.js.map +1 -0
- package/dist/copilot-compaction-barrier.d.ts +36 -0
- package/dist/copilot-compaction-barrier.js +152 -0
- package/dist/copilot-compaction-barrier.js.map +1 -0
- package/dist/copilot-compaction-lifecycle.d.ts +34 -0
- package/dist/copilot-compaction-lifecycle.js +88 -0
- package/dist/copilot-compaction-lifecycle.js.map +1 -0
- package/dist/copilot-compaction-policy.d.ts +5 -0
- package/dist/copilot-compaction-policy.js +7 -0
- package/dist/copilot-compaction-policy.js.map +1 -0
- package/dist/copilot-configuration.d.ts +63 -0
- package/dist/copilot-configuration.js +283 -0
- package/dist/copilot-configuration.js.map +1 -0
- package/dist/copilot-event-scope.d.ts +13 -0
- package/dist/copilot-event-scope.js +26 -0
- package/dist/copilot-event-scope.js.map +1 -0
- package/dist/copilot-fork-metadata.d.ts +9 -0
- package/dist/copilot-fork-metadata.js +86 -0
- package/dist/copilot-fork-metadata.js.map +1 -0
- package/dist/copilot-message-kind.d.ts +21 -0
- package/dist/copilot-message-kind.js +45 -0
- package/dist/copilot-message-kind.js.map +1 -0
- package/dist/copilot-plan-state.d.ts +19 -0
- package/dist/copilot-plan-state.js +180 -0
- package/dist/copilot-plan-state.js.map +1 -0
- package/dist/copilot-request-dispatch.d.ts +10 -0
- package/dist/copilot-request-dispatch.js +31 -0
- package/dist/copilot-request-dispatch.js.map +1 -0
- package/dist/copilot-review-documents.d.ts +17 -0
- package/dist/copilot-review-documents.js +162 -0
- package/dist/copilot-review-documents.js.map +1 -0
- package/dist/copilot-session-activity.d.ts +4 -0
- package/dist/copilot-session-activity.js +185 -0
- package/dist/copilot-session-activity.js.map +1 -0
- package/dist/copilot-sidecar.d.ts +2 -0
- package/dist/copilot-sidecar.js +17 -0
- package/dist/copilot-sidecar.js.map +1 -0
- package/dist/copilot-turn-journal.d.ts +36 -0
- package/dist/copilot-turn-journal.js +246 -0
- package/dist/copilot-turn-journal.js.map +1 -0
- package/dist/copilot-user-requests.d.ts +11 -0
- package/dist/copilot-user-requests.js +84 -0
- package/dist/copilot-user-requests.js.map +1 -0
- package/dist/copilot.d.ts +202 -9
- package/dist/copilot.js +5120 -243
- package/dist/copilot.js.map +1 -1
- package/dist/file-cache.d.ts +6 -1
- package/dist/file-cache.js +62 -1
- package/dist/file-cache.js.map +1 -1
- package/dist/history-message-transform.d.ts +47 -1
- package/dist/history-message-transform.js +67 -0
- package/dist/history-message-transform.js.map +1 -1
- package/dist/history.d.ts +8 -0
- package/dist/history.js.map +1 -1
- package/dist/provider-command-discovery.d.ts +5 -0
- package/dist/provider-command-discovery.js +49 -1
- package/dist/provider-command-discovery.js.map +1 -1
- package/dist/provider-command-types.d.ts +5 -0
- package/dist/provider-command-types.js.map +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/search-sessions.js +2 -1
- package/dist/search-sessions.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare const COPILOT_CAPABILITY_MODELS: readonly ["gpt-6.1-sol", "gpt-6-sol", "gpt-6-astra", "gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-sol-fast", "gpt-5.6-terra", "gpt-5.5", "gpt-5-mini"];
|
|
2
|
+
export declare const COPILOT_CAPABILITY_EFFORTS: string[];
|
|
3
|
+
type Source = 'backend' | 'offline';
|
|
4
|
+
export interface CopilotModelCapability {
|
|
5
|
+
id: string;
|
|
6
|
+
parameterPolicy?: 'strict' | 'passthrough';
|
|
7
|
+
available?: boolean;
|
|
8
|
+
contexts: Partial<Record<'default' | 'long_context', boolean>>;
|
|
9
|
+
efforts?: string[];
|
|
10
|
+
defaults?: {
|
|
11
|
+
context?: string;
|
|
12
|
+
effort?: string;
|
|
13
|
+
};
|
|
14
|
+
combinations?: Array<{
|
|
15
|
+
context: string;
|
|
16
|
+
effort: string;
|
|
17
|
+
}>;
|
|
18
|
+
declaredWindows?: Partial<Record<'default' | 'long_context', number>>;
|
|
19
|
+
sources: Record<string, Source>;
|
|
20
|
+
}
|
|
21
|
+
export interface CopilotCapabilityCatalog {
|
|
22
|
+
providerId: string;
|
|
23
|
+
backendVersion?: string;
|
|
24
|
+
offlineVersion?: string;
|
|
25
|
+
models: CopilotModelCapability[];
|
|
26
|
+
status: 'ready' | 'partial' | 'offline';
|
|
27
|
+
fetchedAt: string;
|
|
28
|
+
scope?: string;
|
|
29
|
+
error?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function hasCopilotOfflineModel(providerId: string, modelId?: string): boolean;
|
|
32
|
+
export declare function mergeCopilotCapabilities(providerId: string, response?: unknown, backendVersion?: string, offline?: Record<string, any>): CopilotCapabilityCatalog;
|
|
33
|
+
export declare function copilotCapabilityIssue(catalog: CopilotCapabilityCatalog, options: {
|
|
34
|
+
model?: string;
|
|
35
|
+
context?: string;
|
|
36
|
+
effort?: string;
|
|
37
|
+
}): 'model' | 'context' | 'effort' | undefined;
|
|
38
|
+
export declare function assertCopilotCapabilities(catalog: CopilotCapabilityCatalog, options: {
|
|
39
|
+
model?: string;
|
|
40
|
+
context?: string;
|
|
41
|
+
effort?: string;
|
|
42
|
+
}): void;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { COPILOT_OFFLINE_CAPABILITIES } from './copilot-capabilities-offline.js';
|
|
2
|
+
// Include retired IDs for existing Sessions; new launches obtain capabilities
|
|
3
|
+
// from their own backend declaration, never from a different model's snapshot.
|
|
4
|
+
export const COPILOT_CAPABILITY_MODELS = ['gpt-6.1-sol', 'gpt-6-sol', 'gpt-6-astra', 'gpt-5.6-luna', 'gpt-5.6-sol',
|
|
5
|
+
'gpt-5.6-sol-fast', 'gpt-5.6-terra', 'gpt-5.5', 'gpt-5-mini'];
|
|
6
|
+
export const COPILOT_CAPABILITY_EFFORTS = ['none', 'low', 'medium', 'high', 'xhigh', 'max'];
|
|
7
|
+
const record = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
8
|
+
const strings = (v) => Array.isArray(v) && v.every(s => typeof s === 'string');
|
|
9
|
+
const positive = (v) => typeof v === 'number' && Number.isFinite(v) && v > 0;
|
|
10
|
+
export function hasCopilotOfflineModel(providerId, modelId) {
|
|
11
|
+
const table = COPILOT_OFFLINE_CAPABILITIES;
|
|
12
|
+
return !!modelId && !!table[providerId]?.models.some(model => model.id === modelId);
|
|
13
|
+
}
|
|
14
|
+
export function mergeCopilotCapabilities(providerId, response, backendVersion, offline = COPILOT_OFFLINE_CAPABILITIES) {
|
|
15
|
+
const snapshot = offline[providerId];
|
|
16
|
+
// Match the Provider and complete model ID, not the CLI version. Version is
|
|
17
|
+
// evidence provenance; an upgrade does not make an existing model unknown.
|
|
18
|
+
const fallback = snapshot;
|
|
19
|
+
const live = record(response) && Array.isArray(response.models) ? response.models : undefined;
|
|
20
|
+
const modelIds = [...new Set([...COPILOT_CAPABILITY_MODELS,
|
|
21
|
+
...(live || []).filter((m) => record(m) && typeof m.id === 'string').map((m) => m.id),
|
|
22
|
+
])];
|
|
23
|
+
const models = modelIds.map(id => {
|
|
24
|
+
const saved = fallback?.models?.find((m) => m.id === id);
|
|
25
|
+
const savedDefaults = snapshot?.models?.find((m) => m.id === id)?.defaults;
|
|
26
|
+
const model = { id, parameterPolicy: saved ? 'strict' : 'passthrough', contexts: {}, sources: {} };
|
|
27
|
+
if (savedDefaults) {
|
|
28
|
+
model.defaults = { ...savedDefaults };
|
|
29
|
+
model.sources.defaults = 'offline';
|
|
30
|
+
}
|
|
31
|
+
if (saved) {
|
|
32
|
+
if (typeof saved.available === 'boolean') {
|
|
33
|
+
model.available = saved.available;
|
|
34
|
+
model.sources.available = 'offline';
|
|
35
|
+
}
|
|
36
|
+
if (strings(saved.efforts)) {
|
|
37
|
+
model.efforts = [...saved.efforts];
|
|
38
|
+
model.sources.efforts = 'offline';
|
|
39
|
+
}
|
|
40
|
+
if (strings(saved.contexts)) {
|
|
41
|
+
for (const tier of ['default', 'long_context']) {
|
|
42
|
+
model.contexts[tier] = saved.contexts.includes(tier);
|
|
43
|
+
model.sources[tier] = 'offline';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (saved.combinations) {
|
|
47
|
+
model.combinations = structuredClone(saved.combinations);
|
|
48
|
+
model.sources.combinations = 'offline';
|
|
49
|
+
}
|
|
50
|
+
if (saved.declaredWindows)
|
|
51
|
+
model.declaredWindows = { ...saved.declaredWindows };
|
|
52
|
+
}
|
|
53
|
+
const declared = live?.find((m) => record(m) && m.id === id);
|
|
54
|
+
if (declared) {
|
|
55
|
+
if (typeof declared.policy?.state === 'string') {
|
|
56
|
+
model.available = declared.policy.state === 'enabled';
|
|
57
|
+
model.sources.available = 'backend';
|
|
58
|
+
}
|
|
59
|
+
const efforts = declared.supportedReasoningEfforts ?? declared.capabilities?.supports?.reasoning_effort;
|
|
60
|
+
if (strings(efforts)) {
|
|
61
|
+
model.efforts = [...new Set(efforts)];
|
|
62
|
+
model.sources.efforts = 'backend';
|
|
63
|
+
}
|
|
64
|
+
if (typeof declared.defaultReasoningEffort === 'string') {
|
|
65
|
+
(model.defaults ||= {}).effort = declared.defaultReasoningEffort;
|
|
66
|
+
model.sources.defaultEffort = 'backend';
|
|
67
|
+
}
|
|
68
|
+
if (typeof declared.defaultContextTier === 'string') {
|
|
69
|
+
(model.defaults ||= {}).context = declared.defaultContextTier;
|
|
70
|
+
model.sources.defaultContext = 'backend';
|
|
71
|
+
}
|
|
72
|
+
const tiers = declared.supportedContextTiers;
|
|
73
|
+
for (const tier of ['default', 'long_context']) {
|
|
74
|
+
if (strings(tiers)) {
|
|
75
|
+
model.contexts[tier] = tiers.includes(tier);
|
|
76
|
+
model.sources[tier] = 'backend';
|
|
77
|
+
}
|
|
78
|
+
const prices = declared.billing?.tokenPrices;
|
|
79
|
+
const window = tier === 'default' ? prices?.maxPromptTokens : prices?.longContext?.maxPromptTokens;
|
|
80
|
+
if (positive(window)) {
|
|
81
|
+
// Explicit enumerations take priority over billing metadata.
|
|
82
|
+
if (!strings(tiers)) {
|
|
83
|
+
model.contexts[tier] = true;
|
|
84
|
+
model.sources[tier] = 'backend';
|
|
85
|
+
}
|
|
86
|
+
(model.declaredWindows ||= {})[tier] = window;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (Array.isArray(declared.supportedConfigurations)
|
|
90
|
+
&& declared.supportedConfigurations.every((c) => record(c) && typeof c.context === 'string' && typeof c.effort === 'string')) {
|
|
91
|
+
model.combinations = declared.supportedConfigurations.map((c) => ({ context: c.context, effort: c.effort }));
|
|
92
|
+
model.sources.combinations = 'backend';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return model;
|
|
96
|
+
});
|
|
97
|
+
const incomplete = models.some(m => m.available !== false
|
|
98
|
+
&& (m.available == null || !m.efforts || m.contexts.default == null || m.contexts.long_context == null
|
|
99
|
+
|| !m.defaults?.context || !m.defaults?.effort));
|
|
100
|
+
const offlineVersion = fallback?.version
|
|
101
|
+
?? (models.some(m => m.sources.defaults === 'offline') ? snapshot?.version : undefined);
|
|
102
|
+
return { providerId, backendVersion, offlineVersion, models,
|
|
103
|
+
status: incomplete ? 'partial' : live ? 'ready' : 'offline', fetchedAt: new Date().toISOString() };
|
|
104
|
+
}
|
|
105
|
+
export function copilotCapabilityIssue(catalog, options) {
|
|
106
|
+
if (!options.model)
|
|
107
|
+
return undefined; // Older clients may leave the model to the Provider.
|
|
108
|
+
const model = catalog.models.find(m => m.id === options.model)
|
|
109
|
+
|| mergeCopilotCapabilities(catalog.providerId).models.find(m => m.id === options.model);
|
|
110
|
+
if (!model || model.parameterPolicy === 'passthrough')
|
|
111
|
+
return undefined;
|
|
112
|
+
if (model.available === false)
|
|
113
|
+
return 'model';
|
|
114
|
+
const context = options.context || 'default';
|
|
115
|
+
if (model.contexts[context] === false)
|
|
116
|
+
return 'context';
|
|
117
|
+
if (options.effort && model.efforts && !model.efforts.includes(options.effort))
|
|
118
|
+
return 'effort';
|
|
119
|
+
if (model.combinations && options.effort && !model.combinations.some(c => c.context === context && c.effort === options.effort))
|
|
120
|
+
return 'effort';
|
|
121
|
+
// Unknown development evidence is never classified as unsupported.
|
|
122
|
+
}
|
|
123
|
+
export function assertCopilotCapabilities(catalog, options) {
|
|
124
|
+
const field = copilotCapabilityIssue(catalog, options);
|
|
125
|
+
if (field)
|
|
126
|
+
throw new Error(`Copilot ${field} is unavailable for the selected configuration. Please choose another value in Options.`);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=copilot-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-capabilities.js","sourceRoot":"","sources":["../src/copilot-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CopilotCommandRuntime } from './copilot-command-bridge.js';
|
|
2
|
+
import { type CopilotCapabilityCatalog } from './copilot-capabilities.js';
|
|
3
|
+
export interface CopilotCapabilityScope {
|
|
4
|
+
providerId: string;
|
|
5
|
+
workDir: string;
|
|
6
|
+
}
|
|
7
|
+
type Runtime = Pick<CopilotCommandRuntime, 'start' | 'stop' | 'request' | 'isRunning'>;
|
|
8
|
+
interface Dependencies {
|
|
9
|
+
createRuntime: (scope: CopilotCapabilityScope) => Runtime;
|
|
10
|
+
existingRuntime: (scope: CopilotCapabilityScope) => Runtime | undefined;
|
|
11
|
+
scopeKey: (scope: CopilotCapabilityScope) => string;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function copilotCapabilityScopeKey(scope: CopilotCapabilityScope): string;
|
|
15
|
+
export declare function createCopilotCapabilityService(deps: Dependencies): {
|
|
16
|
+
snapshot: (scope: CopilotCapabilityScope) => CopilotCapabilityCatalog;
|
|
17
|
+
query: (scope: CopilotCapabilityScope, signal?: AbortSignal) => Promise<CopilotCapabilityCatalog>;
|
|
18
|
+
};
|
|
19
|
+
export declare const copilotCapabilityService: {
|
|
20
|
+
snapshot: (scope: CopilotCapabilityScope) => CopilotCapabilityCatalog;
|
|
21
|
+
query: (scope: CopilotCapabilityScope, signal?: AbortSignal) => Promise<CopilotCapabilityCatalog>;
|
|
22
|
+
};
|
|
23
|
+
export declare function setCopilotMetadataRuntimeLookup(lookup: Dependencies['existingRuntime']): void;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { CopilotCommandRuntime, copilotMetadataScopeKey } from './copilot-command-bridge.js';
|
|
2
|
+
import { mergeCopilotCapabilities } from './copilot-capabilities.js';
|
|
3
|
+
export function copilotCapabilityScopeKey(scope) {
|
|
4
|
+
return copilotMetadataScopeKey(scope);
|
|
5
|
+
}
|
|
6
|
+
export function createCopilotCapabilityService(deps) {
|
|
7
|
+
const cache = new Map();
|
|
8
|
+
const flights = new Map();
|
|
9
|
+
const snapshot = (scope) => {
|
|
10
|
+
const key = deps.scopeKey(scope);
|
|
11
|
+
return structuredClone(cache.get(key) || { ...mergeCopilotCapabilities(scope.providerId), scope: key });
|
|
12
|
+
};
|
|
13
|
+
async function query(scope, signal) {
|
|
14
|
+
if (!['copilot', 'agency-copilot'].includes(scope.providerId))
|
|
15
|
+
throw new Error('Unsupported Copilot Provider');
|
|
16
|
+
if (signal?.aborted)
|
|
17
|
+
throw new Error('Capability query cancelled');
|
|
18
|
+
const key = deps.scopeKey(scope);
|
|
19
|
+
let flight = flights.get(key);
|
|
20
|
+
if (flight?.controller.signal.aborted) {
|
|
21
|
+
await flight.promise.catch(() => { });
|
|
22
|
+
return query(scope, signal); // Wait for owned-process cleanup before retrying.
|
|
23
|
+
}
|
|
24
|
+
if (!flight) {
|
|
25
|
+
const controller = new AbortController();
|
|
26
|
+
flight = { controller, users: 0, promise: undefined };
|
|
27
|
+
flights.set(key, flight);
|
|
28
|
+
const entry = flight;
|
|
29
|
+
entry.promise = (async () => {
|
|
30
|
+
let runtime;
|
|
31
|
+
let owned = false;
|
|
32
|
+
let timer;
|
|
33
|
+
let backendVersion;
|
|
34
|
+
const aborted = new Promise((_, reject) => {
|
|
35
|
+
controller.signal.addEventListener('abort', () => reject(new Error('Capability query cancelled')), { once: true });
|
|
36
|
+
});
|
|
37
|
+
void aborted.catch(() => { }); // Factory failure may occur before the race is installed.
|
|
38
|
+
try {
|
|
39
|
+
const borrowed = deps.existingRuntime(scope);
|
|
40
|
+
runtime = borrowed?.isRunning() ? borrowed : deps.createRuntime(scope);
|
|
41
|
+
owned = runtime !== borrowed;
|
|
42
|
+
const activeRuntime = runtime;
|
|
43
|
+
const result = await Promise.race([
|
|
44
|
+
(async () => {
|
|
45
|
+
if (owned)
|
|
46
|
+
await activeRuntime.start();
|
|
47
|
+
if (controller.signal.aborted)
|
|
48
|
+
throw new Error('Capability query cancelled');
|
|
49
|
+
const status = await activeRuntime.request('status.get').catch(() => undefined);
|
|
50
|
+
backendVersion = status?.version;
|
|
51
|
+
if (controller.signal.aborted)
|
|
52
|
+
throw new Error('Capability query cancelled');
|
|
53
|
+
const raw = await activeRuntime.request('models.list');
|
|
54
|
+
if (controller.signal.aborted)
|
|
55
|
+
throw new Error('Capability query cancelled');
|
|
56
|
+
return { ...mergeCopilotCapabilities(scope.providerId, raw, backendVersion), scope: key };
|
|
57
|
+
})(),
|
|
58
|
+
aborted,
|
|
59
|
+
new Promise((_, reject) => { timer = setTimeout(() => reject(new Error('Capability query timed out')), deps.timeoutMs ?? 60_000); }),
|
|
60
|
+
]);
|
|
61
|
+
if (deps.scopeKey(scope) === key) {
|
|
62
|
+
cache.set(key, result);
|
|
63
|
+
if (cache.size > 64)
|
|
64
|
+
cache.delete(cache.keys().next().value);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (controller.signal.aborted)
|
|
70
|
+
throw error;
|
|
71
|
+
const previous = cache.get(key);
|
|
72
|
+
const fallback = previous && (!backendVersion || previous.backendVersion === backendVersion)
|
|
73
|
+
? previous : { ...mergeCopilotCapabilities(scope.providerId, undefined, backendVersion), scope: key };
|
|
74
|
+
return { ...fallback, error: String(error), status: fallback.status === 'partial' ? 'partial' : 'offline' };
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
clearTimeout(timer);
|
|
78
|
+
controller.abort();
|
|
79
|
+
try {
|
|
80
|
+
if (owned)
|
|
81
|
+
await runtime?.stop();
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
if (flights.get(key) === entry)
|
|
85
|
+
flights.delete(key);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
})();
|
|
89
|
+
}
|
|
90
|
+
const active = flight;
|
|
91
|
+
active.users++;
|
|
92
|
+
let onAbort;
|
|
93
|
+
try {
|
|
94
|
+
return await Promise.race([active.promise, new Promise((_, reject) => {
|
|
95
|
+
onAbort = () => reject(new Error('Capability query cancelled'));
|
|
96
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
97
|
+
})]);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (onAbort)
|
|
101
|
+
signal?.removeEventListener('abort', onAbort);
|
|
102
|
+
active.users--;
|
|
103
|
+
if (!active.users && flights.get(key) === active)
|
|
104
|
+
active.controller.abort();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return { snapshot, query };
|
|
108
|
+
}
|
|
109
|
+
export const copilotCapabilityService = createCopilotCapabilityService({
|
|
110
|
+
createRuntime: scope => new CopilotCommandRuntime({ ...scope, transport: 'sdk' }),
|
|
111
|
+
existingRuntime: scope => metadataRuntimeLookup(scope),
|
|
112
|
+
scopeKey: copilotCapabilityScopeKey,
|
|
113
|
+
});
|
|
114
|
+
let metadataRuntimeLookup = () => undefined;
|
|
115
|
+
export function setCopilotMetadataRuntimeLookup(lookup) { metadataRuntimeLookup = lookup; }
|
|
116
|
+
//# sourceMappingURL=copilot-capability-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-capability-service.js","sourceRoot":"","sources":["../src/copilot-capability-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import * as acp from '@agentclientprotocol/sdk';
|
|
3
|
+
import type { ProviderCommand, ProviderCommandDiscoveryResult, ProviderCommandScope } from './provider-command-types.js';
|
|
4
|
+
import { type CopilotConfiguration } from './copilot-configuration.js';
|
|
5
|
+
export interface CopilotContextSnapshot {
|
|
6
|
+
model: string;
|
|
7
|
+
contextTokens: number;
|
|
8
|
+
contextWindow: number;
|
|
9
|
+
/** System, conversation and tool tokens are all present in this recount. */
|
|
10
|
+
contextComplete: boolean;
|
|
11
|
+
backgroundThreshold?: number;
|
|
12
|
+
blockingThreshold?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function stripAgencyPlanInteractionGuidance(text: string): string;
|
|
15
|
+
export declare function copilotBootstrapCommands(): ProviderCommand[];
|
|
16
|
+
export type CopilotCommandInvocationResult = {
|
|
17
|
+
kind: 'text';
|
|
18
|
+
text: string;
|
|
19
|
+
markdown?: boolean;
|
|
20
|
+
preserveAnsi?: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
kind: 'agent-prompt';
|
|
23
|
+
prompt: string;
|
|
24
|
+
displayPrompt: string;
|
|
25
|
+
mode?: 'interactive' | 'plan' | 'autopilot';
|
|
26
|
+
notice?: string;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'completed';
|
|
29
|
+
message?: string;
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'select-subcommand';
|
|
32
|
+
command: string;
|
|
33
|
+
title: string;
|
|
34
|
+
options: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
interface CopilotCommandRuntimeOptions {
|
|
40
|
+
strictCapabilities?: boolean;
|
|
41
|
+
verifyConfiguration?: boolean;
|
|
42
|
+
initialSessionId?: string;
|
|
43
|
+
previousConfiguration?: CopilotConfiguration;
|
|
44
|
+
onConfiguration?: (sessionId: string, configuration: CopilotConfiguration) => void;
|
|
45
|
+
/** Override only for isolated journal fixtures; never changes Provider storage. */
|
|
46
|
+
sessionRoot?: string;
|
|
47
|
+
providerId: string;
|
|
48
|
+
workDir: string;
|
|
49
|
+
transport?: CopilotCommandTransport;
|
|
50
|
+
sessionOptions?: CopilotCommandSessionOptions;
|
|
51
|
+
onSessionEvent?: (sessionId: string, event: Record<string, unknown>) => void;
|
|
52
|
+
onUserInputRequest?: (sessionId: string, request: CopilotSdkUserInputRequest) => Promise<CopilotSdkUserInputResponse>;
|
|
53
|
+
onExitPlanModeRequest?: (sessionId: string, request: CopilotSdkExitPlanModeRequest) => Promise<CopilotSdkExitPlanModeResponse>;
|
|
54
|
+
onAcpElicitationRequest?: (request: acp.CreateElicitationRequest) => Promise<acp.CreateElicitationResponse>;
|
|
55
|
+
onRuntimeExit?: (error?: Error) => void;
|
|
56
|
+
}
|
|
57
|
+
export interface CopilotSdkUserInputRequest {
|
|
58
|
+
question: string;
|
|
59
|
+
choices?: string[];
|
|
60
|
+
allowFreeform?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface CopilotSdkUserInputResponse {
|
|
63
|
+
answer: string;
|
|
64
|
+
wasFreeform: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface CopilotSdkExitPlanModeRequest {
|
|
67
|
+
summary: string;
|
|
68
|
+
planContent?: string;
|
|
69
|
+
actions: string[];
|
|
70
|
+
recommendedAction: string;
|
|
71
|
+
}
|
|
72
|
+
export interface CopilotSdkExitPlanModeResponse {
|
|
73
|
+
approved: boolean;
|
|
74
|
+
selectedAction?: string;
|
|
75
|
+
feedback?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface CopilotCommandSessionOptions {
|
|
78
|
+
model?: string;
|
|
79
|
+
contextTier?: string;
|
|
80
|
+
reasoningEffort?: string;
|
|
81
|
+
}
|
|
82
|
+
export type CopilotCommandTransport = 'sdk' | 'acp';
|
|
83
|
+
interface SpawnSpec {
|
|
84
|
+
command: string;
|
|
85
|
+
args: string[];
|
|
86
|
+
options: Parameters<typeof spawn>[2];
|
|
87
|
+
}
|
|
88
|
+
export declare function copilotMetadataScopeKey(scope: {
|
|
89
|
+
providerId: string;
|
|
90
|
+
workDir: string;
|
|
91
|
+
}): string;
|
|
92
|
+
export declare function resolveCopilotCommandSpawn(providerId: string, workDir: string, sessionOptions?: CopilotCommandSessionOptions, transport?: CopilotCommandTransport): SpawnSpec;
|
|
93
|
+
export declare class CopilotCommandRuntime {
|
|
94
|
+
private readonly options;
|
|
95
|
+
private cancelledCompactions;
|
|
96
|
+
private compactionAttempts;
|
|
97
|
+
private liveCompactions;
|
|
98
|
+
private compactionLifecycle;
|
|
99
|
+
private readonly goalSessions;
|
|
100
|
+
private planRevisions;
|
|
101
|
+
preparePlanReview(sessionId: string): string;
|
|
102
|
+
planControlPrompt(sessionId: string, revision: string, deferred?: string[]): string;
|
|
103
|
+
readPlanReadiness(sessionId: string, revision: string): import("./copilot-plan-state.js").CopilotPlanReadiness | null;
|
|
104
|
+
sealPlanReadiness(sessionId: string, revision: string, content: string): void;
|
|
105
|
+
private child;
|
|
106
|
+
private connection;
|
|
107
|
+
private acpConnection;
|
|
108
|
+
private readonly acpSessions;
|
|
109
|
+
private readonly acpCommandWaiters;
|
|
110
|
+
private readonly acpToolNames;
|
|
111
|
+
private readonly promptWaiters;
|
|
112
|
+
private stderr;
|
|
113
|
+
private releaseSessionLock;
|
|
114
|
+
private cancelSessionLockWait;
|
|
115
|
+
private stopPromise;
|
|
116
|
+
private startPromise;
|
|
117
|
+
private rejectStartup;
|
|
118
|
+
private configuration;
|
|
119
|
+
private configurationSince;
|
|
120
|
+
private configurationSessionId;
|
|
121
|
+
private capabilityCheckedAt;
|
|
122
|
+
private capabilityDirty;
|
|
123
|
+
metadataScopeKey: string;
|
|
124
|
+
configurationNeedsRefresh(): Promise<boolean>;
|
|
125
|
+
getConfiguration(): CopilotConfiguration | null;
|
|
126
|
+
private beginConfiguration;
|
|
127
|
+
private publishConfiguration;
|
|
128
|
+
private observeConfiguration;
|
|
129
|
+
refreshConfiguration(sessionId: string): Promise<void>;
|
|
130
|
+
/** Query an already-open Session only; never start a Runtime or send a prompt. */
|
|
131
|
+
readContextSnapshot(sessionId: string): Promise<CopilotContextSnapshot | null>;
|
|
132
|
+
private stopping;
|
|
133
|
+
constructor(options: CopilotCommandRuntimeOptions);
|
|
134
|
+
start(): Promise<void>;
|
|
135
|
+
private startRuntime;
|
|
136
|
+
private initializeConnection;
|
|
137
|
+
request<T>(method: string, params?: Record<string, unknown>, timeoutMs?: number | null): Promise<T>;
|
|
138
|
+
openSession(sessionId?: string, options?: CopilotCommandSessionOptions): Promise<string>;
|
|
139
|
+
private acquireSessionLock;
|
|
140
|
+
listSessionCommands(sessionId: string): Promise<ProviderCommand[]>;
|
|
141
|
+
invokeCommand(sessionId: string, name: string, input: string): Promise<CopilotCommandInvocationResult>;
|
|
142
|
+
/** Retry only a settled native failure, never a possibly still-running RPC. */
|
|
143
|
+
private compactWithRetries;
|
|
144
|
+
private invokeCommandOnce;
|
|
145
|
+
setMode(sessionId: string, mode: 'interactive' | 'plan' | 'autopilot'): Promise<void>;
|
|
146
|
+
getMode(sessionId: string): Promise<'interactive' | 'plan' | 'autopilot'>;
|
|
147
|
+
enableAllowAll(sessionId: string): Promise<void>;
|
|
148
|
+
send(sessionId: string, prompt: string, displayPrompt: string, attachments?: Array<{
|
|
149
|
+
type: 'file';
|
|
150
|
+
path: string;
|
|
151
|
+
displayName?: string;
|
|
152
|
+
}>): Promise<void>;
|
|
153
|
+
readPlanContent(sessionId: string, sessionRoot?: string): string | null;
|
|
154
|
+
abort(sessionId: string): Promise<void>;
|
|
155
|
+
respondToUserInput(sessionId: string, requestId: string, response: CopilotSdkUserInputResponse): Promise<boolean>;
|
|
156
|
+
abortManualCompaction(sessionId: string): Promise<void>;
|
|
157
|
+
destroySession(sessionId: string): Promise<void>;
|
|
158
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
159
|
+
stop(): Promise<void>;
|
|
160
|
+
private stopRuntime;
|
|
161
|
+
isRunning(): boolean;
|
|
162
|
+
get transport(): CopilotCommandTransport;
|
|
163
|
+
private usesAgencyAcp;
|
|
164
|
+
private handleDirectSessionEvent;
|
|
165
|
+
private observeGoalLifecycle;
|
|
166
|
+
private observeCompactionLifecycle;
|
|
167
|
+
private waitForPrompt;
|
|
168
|
+
private pausePromptWaiter;
|
|
169
|
+
private resumePromptWaiter;
|
|
170
|
+
private resumeAllPromptWaiters;
|
|
171
|
+
private clearPromptWaiter;
|
|
172
|
+
private failPromptWaiters;
|
|
173
|
+
private openAcpSession;
|
|
174
|
+
private applyAcpSessionOptions;
|
|
175
|
+
private findAcpSelectConfig;
|
|
176
|
+
private requestAcp;
|
|
177
|
+
private notifyAcp;
|
|
178
|
+
private handleAcpSessionUpdate;
|
|
179
|
+
private emitAcpEvent;
|
|
180
|
+
}
|
|
181
|
+
export declare function normalizeAcpCommands(values: acp.AvailableCommand[]): ProviderCommand[];
|
|
182
|
+
export declare function normalizeCopilotCommands(input: unknown): ProviderCommand[];
|
|
183
|
+
export declare function discoverCopilotCommands(_scope: ProviderCommandScope): Promise<ProviderCommandDiscoveryResult>;
|
|
184
|
+
export {};
|