mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-20 15:09:57 +02:00
test(runner): retain authenticated Copilot model discovery
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
a989354a5e
commit
08cabb1f2e
4 files changed
+936
-6
No files matched your search
@@ -1,9 +1,9 @@
|
||||
# Copilot 1.0.88 rich ACP capability audit
|
||||
|
||||
Audited 2026-09-28 against repository base `c65fc9e3c81c41aafe421aa90a00514b84343285`.
|
||||
Status: **candidate, not qualified**. No GitHub credential, entitlement, real model,
|
||||
or Daytona execution has been verified. Real executable offline probes cost $0;
|
||||
no billable request was made. The allocated live budget remains $25, subject to
|
||||
Status: **candidate, not qualified**. Authenticated model discovery and exact model
|
||||
selection now pass; real inference and Daytona execution remain unverified.
|
||||
Real executable offline probes cost $0; no model prompt has been sent. The allocated live budget remains $25, subject to
|
||||
the shared $100 hard stop and verifiable spend. Do not expose this profile as
|
||||
supported until the required local and Daytona qualification passes.
|
||||
|
||||
@@ -81,10 +81,10 @@ HTTP/SSE MCP; image and embedded-context input; no audio input; and session list
|
||||
and close. It does not advertise steering, forking, goals, or a question/plan
|
||||
extension responder. The source adapter supports model/reasoning/config changes,
|
||||
but the offline session only returns `mode` and `allow_all` options. There is no
|
||||
verified GitHub model ID from this probe. Require an explicitly selected model
|
||||
verified GitHub model ID from the historical offline probe. Require an explicitly selected model
|
||||
and exact effective-model verification; never silently use the fixture's
|
||||
`gpt-4.1` or substitute another model. A possible candidate such as
|
||||
`gpt-5.6-luna` is unverified until authenticated negotiation succeeds.
|
||||
`gpt-4.1` or substitute another model. Authenticated discovery on 2026-09-28 subsequently advertised and accepted
|
||||
`gpt-5.6-luna`; inference entitlement remains unverified.
|
||||
|
||||
The native event extension is real and is negotiated with:
|
||||
|
||||
@@ -322,3 +322,28 @@ Both Copilot builder scripts are explicit Daytona image hash inputs. The selecte
|
||||
`copilot` candidate also changes image identity, while manifest qualification stays
|
||||
`pending`. Linux x64 binaries are pinned and buildable; live Linux/Daytona behavior
|
||||
still requires the qualification cases above.
|
||||
|
||||
|
||||
## Authenticated qualification preparation (2026-09-28)
|
||||
|
||||
The [sanitized authenticated discovery](../../packages/paperclip-runner/test/fixtures/copilot-authenticated-discovery-1.0.88.json)
|
||||
uses the previously verified native pack and a dedicated, short-lived personal
|
||||
Copilot Requests token, explicitly bound as `COPILOT_GITHUB_TOKEN`. The token has
|
||||
no repository write authority. No credential, account identifier, provider
|
||||
session ID, or private path is retained in that fixture.
|
||||
|
||||
Three metadata-only sessions were created and closed: catalog discovery,
|
||||
`session/set_model`, then `session/set_model` plus `session/set_config_option`
|
||||
with exact `gpt-5.6-luna` echo. The native catalog advertises 21 model IDs and
|
||||
marks Luna enabled. No `session/prompt` request was sent. This verifies auth and
|
||||
model selection only. The reproducible metadata probe is
|
||||
`scripts/discover-copilot-acp.mjs`; it refuses any outbound method outside its
|
||||
closed initialize/new/select/close list and denies unexpected inbound requests.
|
||||
|
||||
The initial paid qualification reservation is $2 within the provider's $25
|
||||
allocation and shared $100 budget. The account dashboard baseline is 0 of 1,500
|
||||
included AI credits; additional paid usage is disabled with a $0 cash budget.
|
||||
Included credit consumption must still be reconciled and reported separately
|
||||
from cash charges. One canonical `get-task-context` case with a 60-second turn,
|
||||
zero retries, and a $0.50 declared envelope is next. Neither that envelope nor
|
||||
Copilot's optional soft credit limit is a guaranteed per-response hard cap.
|
||||
@@ -0,0 +1,41 @@
|
||||
// Metadata only: initialize, create a disposable session, select an advertised model, then close.
|
||||
// Usage: node discover-copilot-acp.mjs <verified-provider-pack> <safe-output.json> [exact-model-id]
|
||||
// Supply only an explicitly bound COPILOT_GITHUB_TOKEN. This script never sends a prompt.
|
||||
import assert from 'node:assert/strict';
|
||||
import { createHash } from 'node:crypto';
|
||||
import { mkdir, mkdtemp, readFile, realpath, rm, writeFile } from 'node:fs/promises';
|
||||
import { join } from 'node:path';
|
||||
import { pathToFileURL } from 'node:url';
|
||||
const pack=await realpath(process.argv[2]);
|
||||
const output=process.argv[3];
|
||||
const model=process.argv[4];
|
||||
const token=process.env.COPILOT_GITHUB_TOKEN;
|
||||
assert.equal(typeof token,'string');assert.ok(token.trim());
|
||||
const manifest=JSON.parse(await readFile(join(pack,'provider-pack.json'),'utf8'));
|
||||
process.env.PAPERCLIP_ACPX_PROVIDER_PACKAGE_ROOT=pack;
|
||||
process.env.PAPERCLIP_ACPX_PROVIDER_PACKAGE_MANIFEST=join(pack,'package.json');
|
||||
const {verifyAcpxProfileInstallation,assertAcpxProfileEnvironment}=await import(pathToFileURL(join(pack,'dist/drivers/acpx/profile-installation.js')));
|
||||
const {resolveQualifiedAcpxProfile}=await import(pathToFileURL(join(pack,'dist/drivers/acpx/qualified-profiles.js')));
|
||||
const {COPILOT_ACP_CLIENT_CAPABILITIES}=await import(pathToFileURL(join(pack,'dist/drivers/acpx/copilot-events.js')));
|
||||
assertAcpxProfileEnvironment('copilot',{COPILOT_GITHUB_TOKEN:token});
|
||||
// The verified profile resolves the fixed binary only. session/new discovers the
|
||||
// native catalog; no prompt or model inference is permitted in this script.
|
||||
const install=await verifyAcpxProfileInstallation(resolveQualifiedAcpxProfile('copilot',model??'discovery-unselected'));
|
||||
const lease=await install.openCommand();
|
||||
const root=await mkdtemp('/tmp/paperclip-copilot-auth-discovery-');
|
||||
const env={PATH:'/usr/bin:/bin',COPILOT_GITHUB_TOKEN:token,COPILOT_AUTO_UPDATE:'false',COPILOT_ALLOW_ALL:'false',NO_COLOR:'1'};
|
||||
for(const key of ['HOME','XDG_CONFIG_HOME','XDG_DATA_HOME','XDG_CACHE_HOME','COPILOT_HOME','COPILOT_CACHE_HOME']){env[key]=join(root,key.toLowerCase());await mkdir(env[key],{mode:0o700});}
|
||||
await writeFile(join(env.COPILOT_HOME,'config.json'),JSON.stringify({autoUpdate:false,trustedFolders:[],disableAllHooks:true,memory:false,ide:{autoConnect:false}}),{mode:0o600});
|
||||
let child,exitPromise;const pending=new Map();let nextId=0,buffer='',bytes=0;const observedMethods={};
|
||||
function request(method,params){assert.ok(['initialize','session/new','session/set_model','session/set_config_option','session/close'].includes(method));const id=nextId++;return new Promise((resolve,reject)=>{const timer=setTimeout(()=>{pending.delete(id);reject(new Error('request_deadline:'+method));},25000);pending.set(id,{resolve,reject,timer});child.stdin.write(JSON.stringify({jsonrpc:'2.0',id,method,params})+'\n');});}
|
||||
try{
|
||||
child=lease.spawn([],{cwd:root,env,stdio:'pipe'});exitPromise=new Promise(resolve=>child.once('exit',(code,signal)=>resolve({code,signal})));
|
||||
child.stdout.on('data',chunk=>{bytes+=chunk.length;if(bytes>2097152){child.kill('SIGTERM');return;}buffer+=chunk.toString();while(buffer.includes('\n')){const end=buffer.indexOf('\n');const line=buffer.slice(0,end);buffer=buffer.slice(end+1);if(!line.trim())continue;let msg;try{msg=JSON.parse(line);}catch{child.kill('SIGTERM');return;}if(msg.method){observedMethods[msg.method]=(observedMethods[msg.method]??0)+1;if(msg.id!==undefined)child.stdin.write(JSON.stringify({jsonrpc:'2.0',id:msg.id,error:{code:-32601,message:'Discovery does not support inbound methods'}})+'\n');continue;}const item=pending.get(msg.id);if(item){clearTimeout(item.timer);pending.delete(msg.id);msg.error?item.reject(new Error('provider_rpc_error:'+String(msg.error.code))):item.resolve(msg.result);}}});
|
||||
child.stderr.on('data',()=>{});child.once('error',()=>{for(const item of pending.values())item.reject(new Error('provider_spawn_failure'));});
|
||||
const initialized=await request('initialize',{protocolVersion:1,clientInfo:{name:'paperclip-authenticated-model-discovery',version:'1'},clientCapabilities:COPILOT_ACP_CLIENT_CAPABILITIES});
|
||||
const opened=await request('session/new',{cwd:root,mcpServers:[]});
|
||||
const safe={schema:'paperclip.copilot-authenticated-discovery/v1',observedAt:new Date().toISOString(),harnessVersion:initialized.agentInfo?.version,sourceRevision:manifest.payload.runnerSourceRevision,providerPackDigest:manifest.digest,profileDigest:install.commandDigest,agentCapabilities:initialized.agentCapabilities,models:opened.models??null,configOptions:opened.configOptions??[],promptSent:false,promptRequestsSent:0,inferenceVerified:false,qualification:'pending; metadata discovery only',observedMethods};
|
||||
if(model){const advertised=opened.models?.availableModels??[];assert.ok(advertised.some(value=>value.modelId===model),'requested model must be advertised');const selected=await request('session/set_model',{sessionId:opened.sessionId,modelId:model});const configured=await request('session/set_config_option',{sessionId:opened.sessionId,configId:'model',value:model});assert.equal(configured.configOptions?.find(option=>option.id==='model')?.currentValue,model);safe.modelSelection={requestedModel:model,succeeded:true,response:selected,configEcho:configured};}
|
||||
try{await request('session/close',{sessionId:opened.sessionId});safe.sessionClosed=true;}catch{safe.sessionClosed=false;}
|
||||
const text=JSON.stringify(safe,null,2)+'\n';assert.ok(!text.includes(token));assert.ok(!text.includes(opened.sessionId));assert.ok(!text.includes(root));await writeFile(output,text,{mode:0o600});console.log(JSON.stringify({output,sha256:createHash('sha256').update(text).digest('hex'),harnessVersion:safe.harnessVersion,modelCount:safe.models?.availableModels?.length??0,configOptionIds:safe.configOptions.map(value=>value.id),modelIds:safe.models?.availableModels?.map(value=>value.modelId)??[],promptSent:false}));
|
||||
}finally{for(const item of pending.values())clearTimeout(item.timer);pending.clear();if(child&&child.exitCode===null&&child.signalCode===null){child.stdin.end();const timer=setTimeout(()=>child.kill('SIGTERM'),1000);const kill=setTimeout(()=>child.kill('SIGKILL'),5000);await exitPromise;clearTimeout(timer);clearTimeout(kill);}await lease.close();await rm(root,{recursive:true,force:true});}
|
||||
@@ -7,6 +7,15 @@ function fixture(name: string) {
|
||||
}
|
||||
|
||||
describe("Copilot pinned executable evidence", () => {
|
||||
it("retains authenticated exact model selection without promoting metadata to inference", () => {
|
||||
const evidence = fixture("copilot-authenticated-discovery-1.0.88.json");
|
||||
expect(evidence).toMatchObject({ harnessVersion: "1.0.88", promptSent: false, promptRequestsSent: 0, inferenceVerified: false, sessionClosed: true });
|
||||
expect(evidence.models.availableModels).toHaveLength(21);
|
||||
expect(evidence.models.availableModels.find((model: { modelId: string }) => model.modelId === "gpt-5.6-luna")._meta.copilotEnablement).toBe("enabled");
|
||||
expect(evidence.modelSelection.requestedModel).toBe("gpt-5.6-luna");
|
||||
expect(evidence.modelSelection.configEcho.configOptions.find((option: { id: string }) => option.id === "model").currentValue).toBe("gpt-5.6-luna");
|
||||
expect(JSON.stringify(evidence)).not.toMatch(/\/Users\/|\/tmp\/|github_pat_|gho_|sessionId|accessToken/);
|
||||
});
|
||||
it("retains a complete packaged native launch without promoting offline proof to qualification", () => {
|
||||
const evidence = fixture("copilot-provider-pack-darwin-arm64-1.0.88.json");
|
||||
expect(evidence.sourceRevision).toMatch(/^[a-f0-9]{40}$/);
|
||||
|
||||
+855
@@ -0,0 +1,855 @@
|
||||
{
|
||||
"schema": "paperclip.copilot-authenticated-discovery/v1",
|
||||
"observedAt": "2026-09-28T19:15:41.413Z",
|
||||
"harnessVersion": "1.0.88",
|
||||
"sourceRevision": "5272fc6398d42344d1888a3f97ca6909684eefbf",
|
||||
"providerPackDigest": "sha256:4ba17b2455b0ab92cfe6ee223f77708379fe219792ccb66dbdef70060e6e22e1",
|
||||
"profileDigest": "sha256:b18c01603dd0169d233140709cfaa8bf5304a03cf5de78ca4f625f30013e8457",
|
||||
"agentCapabilities": {
|
||||
"loadSession": true,
|
||||
"mcpCapabilities": {
|
||||
"http": true,
|
||||
"sse": true
|
||||
},
|
||||
"promptCapabilities": {
|
||||
"image": true,
|
||||
"audio": false,
|
||||
"embeddedContext": true
|
||||
},
|
||||
"sessionCapabilities": {
|
||||
"close": {},
|
||||
"list": {}
|
||||
}
|
||||
},
|
||||
"models": {
|
||||
"availableModels": [
|
||||
{
|
||||
"modelId": "auto",
|
||||
"name": "Auto",
|
||||
"description": "Let Copilot pick the best model"
|
||||
},
|
||||
{
|
||||
"modelId": "gpt-5.6-terra",
|
||||
"name": "GPT-5.6 Terra",
|
||||
"description": "GPT-5.6 Terra",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gpt-5.6-luna",
|
||||
"name": "GPT-5.6 Luna",
|
||||
"description": "GPT-5.6 Luna",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gpt-5.4",
|
||||
"name": "GPT-5.4",
|
||||
"description": "GPT-5.4",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gpt-5.4-mini",
|
||||
"name": "GPT-5.4 mini",
|
||||
"description": "GPT-5.4 mini",
|
||||
"_meta": {
|
||||
"copilotUsage": "0.33x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gpt-5.3-codex",
|
||||
"name": "GPT-5.3-Codex",
|
||||
"description": "GPT-5.3-Codex",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gpt-5-mini",
|
||||
"name": "GPT-5 mini",
|
||||
"description": "GPT-5 mini",
|
||||
"_meta": {
|
||||
"copilotUsage": "0x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "claude-sonnet-5",
|
||||
"name": "Claude Sonnet 5",
|
||||
"description": "Claude Sonnet 5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "claude-haiku-4.5",
|
||||
"name": "Claude Haiku 4.5",
|
||||
"description": "Claude Haiku 4.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "0.33x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "mai-code-1.1-flash",
|
||||
"name": "MAI-Code-1.1-Flash",
|
||||
"description": "MAI-Code-1.1-Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gemini-3.8-flash",
|
||||
"name": "Gemini 3.8 Flash",
|
||||
"description": "Gemini 3.8 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gemini-3.7-flash",
|
||||
"name": "Gemini 3.7 Flash",
|
||||
"description": "Gemini 3.7 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gemini-3.6-flash",
|
||||
"name": "Gemini 3.6 Flash",
|
||||
"description": "Gemini 3.6 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gemini-3.5-flash",
|
||||
"name": "Gemini 3.5 Flash",
|
||||
"description": "Gemini 3.5 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "grok-4.5",
|
||||
"name": "Grok 4.5",
|
||||
"description": "Grok 4.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "kimi-k3",
|
||||
"name": "Kimi K3",
|
||||
"description": "Kimi K3",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "kimi-k2.7-code",
|
||||
"name": "Kimi K2.7 Code",
|
||||
"description": "Kimi K2.7 Code",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "claude-sonnet-5.5",
|
||||
"name": "Claude Sonnet 5.5",
|
||||
"description": "Claude Sonnet 5.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "gpt-6-luna",
|
||||
"name": "GPT-6 Luna",
|
||||
"description": "GPT-6 Luna",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "grok-4.6",
|
||||
"name": "Grok 4.6",
|
||||
"description": "Grok 4.6",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"modelId": "grok-4.7",
|
||||
"name": "Grok 4.7",
|
||||
"description": "Grok 4.7",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentModelId": "gpt-5.6-terra"
|
||||
},
|
||||
"configOptions": [
|
||||
{
|
||||
"type": "select",
|
||||
"id": "mode",
|
||||
"name": "Mode",
|
||||
"currentValue": "https://agentclientprotocol.com/protocol/session-modes#agent",
|
||||
"options": [
|
||||
{
|
||||
"value": "https://agentclientprotocol.com/protocol/session-modes#agent",
|
||||
"name": "Agent",
|
||||
"description": "Default agent mode for conversational interactions"
|
||||
},
|
||||
{
|
||||
"value": "https://agentclientprotocol.com/protocol/session-modes#plan",
|
||||
"name": "Plan",
|
||||
"description": "Plan mode for creating and executing multi-step plans"
|
||||
},
|
||||
{
|
||||
"value": "https://agentclientprotocol.com/protocol/session-modes#autopilot",
|
||||
"name": "Autopilot",
|
||||
"description": "Autonomous mode that enables allow-all and runs until task completion without user interaction (experimental)"
|
||||
}
|
||||
],
|
||||
"category": "mode",
|
||||
"description": "Controls how Copilot responds: a conversational agent, planning multi-step work, or autonomous autopilot."
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"id": "model",
|
||||
"name": "Model",
|
||||
"category": "model",
|
||||
"description": "The AI model Copilot uses to generate responses.",
|
||||
"currentValue": "gpt-5.6-terra",
|
||||
"options": [
|
||||
{
|
||||
"value": "auto",
|
||||
"name": "Auto",
|
||||
"description": "Let Copilot pick the best model",
|
||||
"_meta": null
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.6-terra",
|
||||
"name": "GPT-5.6 Terra",
|
||||
"description": "GPT-5.6 Terra",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.6-luna",
|
||||
"name": "GPT-5.6 Luna",
|
||||
"description": "GPT-5.6 Luna",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.4",
|
||||
"name": "GPT-5.4",
|
||||
"description": "GPT-5.4",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.4-mini",
|
||||
"name": "GPT-5.4 mini",
|
||||
"description": "GPT-5.4 mini",
|
||||
"_meta": {
|
||||
"copilotUsage": "0.33x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.3-codex",
|
||||
"name": "GPT-5.3-Codex",
|
||||
"description": "GPT-5.3-Codex",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5-mini",
|
||||
"name": "GPT-5 mini",
|
||||
"description": "GPT-5 mini",
|
||||
"_meta": {
|
||||
"copilotUsage": "0x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "claude-sonnet-5",
|
||||
"name": "Claude Sonnet 5",
|
||||
"description": "Claude Sonnet 5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "claude-haiku-4.5",
|
||||
"name": "Claude Haiku 4.5",
|
||||
"description": "Claude Haiku 4.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "0.33x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "mai-code-1.1-flash",
|
||||
"name": "MAI-Code-1.1-Flash",
|
||||
"description": "MAI-Code-1.1-Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.8-flash",
|
||||
"name": "Gemini 3.8 Flash",
|
||||
"description": "Gemini 3.8 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.7-flash",
|
||||
"name": "Gemini 3.7 Flash",
|
||||
"description": "Gemini 3.7 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.6-flash",
|
||||
"name": "Gemini 3.6 Flash",
|
||||
"description": "Gemini 3.6 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.5-flash",
|
||||
"name": "Gemini 3.5 Flash",
|
||||
"description": "Gemini 3.5 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "grok-4.5",
|
||||
"name": "Grok 4.5",
|
||||
"description": "Grok 4.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "kimi-k3",
|
||||
"name": "Kimi K3",
|
||||
"description": "Kimi K3",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "kimi-k2.7-code",
|
||||
"name": "Kimi K2.7 Code",
|
||||
"description": "Kimi K2.7 Code",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "claude-sonnet-5.5",
|
||||
"name": "Claude Sonnet 5.5",
|
||||
"description": "Claude Sonnet 5.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-6-luna",
|
||||
"name": "GPT-6 Luna",
|
||||
"description": "GPT-6 Luna",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "grok-4.6",
|
||||
"name": "Grok 4.6",
|
||||
"description": "Grok 4.6",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "grok-4.7",
|
||||
"name": "Grok 4.7",
|
||||
"description": "Grok 4.7",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"id": "reasoning_effort",
|
||||
"name": "Reasoning Effort",
|
||||
"category": "thought_level",
|
||||
"description": "How much reasoning the model performs before responding. Higher effort can improve quality at the cost of speed.",
|
||||
"currentValue": "medium",
|
||||
"options": [
|
||||
{
|
||||
"value": "none",
|
||||
"name": "none",
|
||||
"description": "No additional reasoning; fastest responses."
|
||||
},
|
||||
{
|
||||
"value": "low",
|
||||
"name": "low",
|
||||
"description": "Minimal reasoning before responding."
|
||||
},
|
||||
{
|
||||
"value": "medium",
|
||||
"name": "medium",
|
||||
"description": "Balanced reasoning and speed."
|
||||
},
|
||||
{
|
||||
"value": "high",
|
||||
"name": "high",
|
||||
"description": "More thorough reasoning; slower responses."
|
||||
},
|
||||
{
|
||||
"value": "xhigh",
|
||||
"name": "xhigh",
|
||||
"description": "Extensive reasoning for the hardest problems."
|
||||
},
|
||||
{
|
||||
"value": "max",
|
||||
"name": "max",
|
||||
"description": "Maximum reasoning; slowest but most thorough."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"id": "allow_all",
|
||||
"name": "Allow All",
|
||||
"currentValue": "off",
|
||||
"options": [
|
||||
{
|
||||
"value": "on",
|
||||
"name": "On",
|
||||
"description": "Automatically approve all tool, path, and URL requests"
|
||||
},
|
||||
{
|
||||
"value": "off",
|
||||
"name": "Off",
|
||||
"description": "Require approval for tool, path, and URL requests"
|
||||
}
|
||||
],
|
||||
"category": "permissions",
|
||||
"description": "Controls whether Copilot prompts for approval before using tools, accessing paths, or fetching URLs."
|
||||
}
|
||||
],
|
||||
"promptSent": false,
|
||||
"qualification": "pending; metadata discovery only",
|
||||
"observedMethods": {
|
||||
"session/update": 3
|
||||
},
|
||||
"modelSelection": {
|
||||
"requestedModel": "gpt-5.6-luna",
|
||||
"succeeded": true,
|
||||
"response": {},
|
||||
"configEcho": {
|
||||
"configOptions": [
|
||||
{
|
||||
"type": "select",
|
||||
"id": "mode",
|
||||
"name": "Mode",
|
||||
"currentValue": "https://agentclientprotocol.com/protocol/session-modes#agent",
|
||||
"options": [
|
||||
{
|
||||
"value": "https://agentclientprotocol.com/protocol/session-modes#agent",
|
||||
"name": "Agent",
|
||||
"description": "Default agent mode for conversational interactions"
|
||||
},
|
||||
{
|
||||
"value": "https://agentclientprotocol.com/protocol/session-modes#plan",
|
||||
"name": "Plan",
|
||||
"description": "Plan mode for creating and executing multi-step plans"
|
||||
},
|
||||
{
|
||||
"value": "https://agentclientprotocol.com/protocol/session-modes#autopilot",
|
||||
"name": "Autopilot",
|
||||
"description": "Autonomous mode that enables allow-all and runs until task completion without user interaction (experimental)"
|
||||
}
|
||||
],
|
||||
"category": "mode",
|
||||
"description": "Controls how Copilot responds: a conversational agent, planning multi-step work, or autonomous autopilot."
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"id": "model",
|
||||
"name": "Model",
|
||||
"category": "model",
|
||||
"description": "The AI model Copilot uses to generate responses.",
|
||||
"currentValue": "gpt-5.6-luna",
|
||||
"options": [
|
||||
{
|
||||
"value": "auto",
|
||||
"name": "Auto",
|
||||
"description": "Let Copilot pick the best model",
|
||||
"_meta": null
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.6-terra",
|
||||
"name": "GPT-5.6 Terra",
|
||||
"description": "GPT-5.6 Terra",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.6-luna",
|
||||
"name": "GPT-5.6 Luna",
|
||||
"description": "GPT-5.6 Luna",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.4",
|
||||
"name": "GPT-5.4",
|
||||
"description": "GPT-5.4",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.4-mini",
|
||||
"name": "GPT-5.4 mini",
|
||||
"description": "GPT-5.4 mini",
|
||||
"_meta": {
|
||||
"copilotUsage": "0.33x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5.3-codex",
|
||||
"name": "GPT-5.3-Codex",
|
||||
"description": "GPT-5.3-Codex",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-5-mini",
|
||||
"name": "GPT-5 mini",
|
||||
"description": "GPT-5 mini",
|
||||
"_meta": {
|
||||
"copilotUsage": "0x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "claude-sonnet-5",
|
||||
"name": "Claude Sonnet 5",
|
||||
"description": "Claude Sonnet 5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "claude-haiku-4.5",
|
||||
"name": "Claude Haiku 4.5",
|
||||
"description": "Claude Haiku 4.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "0.33x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "mai-code-1.1-flash",
|
||||
"name": "MAI-Code-1.1-Flash",
|
||||
"description": "MAI-Code-1.1-Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.8-flash",
|
||||
"name": "Gemini 3.8 Flash",
|
||||
"description": "Gemini 3.8 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.7-flash",
|
||||
"name": "Gemini 3.7 Flash",
|
||||
"description": "Gemini 3.7 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.6-flash",
|
||||
"name": "Gemini 3.6 Flash",
|
||||
"description": "Gemini 3.6 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gemini-3.5-flash",
|
||||
"name": "Gemini 3.5 Flash",
|
||||
"description": "Gemini 3.5 Flash",
|
||||
"_meta": {
|
||||
"copilotUsage": "14x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "grok-4.5",
|
||||
"name": "Grok 4.5",
|
||||
"description": "Grok 4.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "kimi-k3",
|
||||
"name": "Kimi K3",
|
||||
"description": "Kimi K3",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "kimi-k2.7-code",
|
||||
"name": "Kimi K2.7 Code",
|
||||
"description": "Kimi K2.7 Code",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "claude-sonnet-5.5",
|
||||
"name": "Claude Sonnet 5.5",
|
||||
"description": "Claude Sonnet 5.5",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "gpt-6-luna",
|
||||
"name": "GPT-6 Luna",
|
||||
"description": "GPT-6 Luna",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "grok-4.6",
|
||||
"name": "Grok 4.6",
|
||||
"description": "Grok 4.6",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
},
|
||||
{
|
||||
"value": "grok-4.7",
|
||||
"name": "Grok 4.7",
|
||||
"description": "Grok 4.7",
|
||||
"_meta": {
|
||||
"copilotUsage": "1x",
|
||||
"copilotEnablement": "enabled",
|
||||
"copilotPriceCategory": "medium"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"id": "reasoning_effort",
|
||||
"name": "Reasoning Effort",
|
||||
"category": "thought_level",
|
||||
"description": "How much reasoning the model performs before responding. Higher effort can improve quality at the cost of speed.",
|
||||
"currentValue": "medium",
|
||||
"options": [
|
||||
{
|
||||
"value": "none",
|
||||
"name": "none",
|
||||
"description": "No additional reasoning; fastest responses."
|
||||
},
|
||||
{
|
||||
"value": "low",
|
||||
"name": "low",
|
||||
"description": "Minimal reasoning before responding."
|
||||
},
|
||||
{
|
||||
"value": "medium",
|
||||
"name": "medium",
|
||||
"description": "Balanced reasoning and speed."
|
||||
},
|
||||
{
|
||||
"value": "high",
|
||||
"name": "high",
|
||||
"description": "More thorough reasoning; slower responses."
|
||||
},
|
||||
{
|
||||
"value": "xhigh",
|
||||
"name": "xhigh",
|
||||
"description": "Extensive reasoning for the hardest problems."
|
||||
},
|
||||
{
|
||||
"value": "max",
|
||||
"name": "max",
|
||||
"description": "Maximum reasoning; slowest but most thorough."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"id": "allow_all",
|
||||
"name": "Allow All",
|
||||
"currentValue": "off",
|
||||
"options": [
|
||||
{
|
||||
"value": "on",
|
||||
"name": "On",
|
||||
"description": "Automatically approve all tool, path, and URL requests"
|
||||
},
|
||||
{
|
||||
"value": "off",
|
||||
"name": "Off",
|
||||
"description": "Require approval for tool, path, and URL requests"
|
||||
}
|
||||
],
|
||||
"category": "permissions",
|
||||
"description": "Controls whether Copilot prompts for approval before using tools, accessing paths, or fetching URLs."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"sessionClosed": true,
|
||||
"promptRequestsSent": 0,
|
||||
"inferenceVerified": false
|
||||
}
|
||||
Reference in new issue
Block a user