feat: align conversation state, composer and scoped approvals
This commit is contained in:
1 parent
771ca540f7
commit
308b98df23
61 files changed
+1701
-292
No files matched your search
@@ -0,0 +1,29 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { build } from 'esbuild'
|
||||
import { mkdtemp, rm } from 'node:fs/promises'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
const temp = await mkdtemp(join(tmpdir(), 'ycode-factory-alignment-'))
|
||||
try {
|
||||
const outfile = join(temp, 'factory.mjs')
|
||||
await build({entryPoints:['src/main/session-factory.ts'],outfile,bundle:true,platform:'node',format:'esm',logLevel:'silent',plugins:[{
|
||||
name:'isolated-factory-ports',setup(b){
|
||||
b.onResolve({filter:/^\.\/(sessions|models|workspaces)$/},args=>({path:args.path,namespace:'fixture'}))
|
||||
b.onLoad({filter:/.*/,namespace:'fixture'},args=>({loader:'js',contents:args.path==='./sessions'
|
||||
? 'export const createSession=async(title,context)=>({id:"fixture-session",title,...context});'
|
||||
:args.path==='./models' ? 'export const listModels=async()=>({selectedModelId:"configured-model"}); export const resolveModel=async(id)=>({id});'
|
||||
:'export const listWorkspaces=async()=>({selectedWorkspaceId:"workspace"});export const workspaceRoot=async()=>"/fixture";'}))
|
||||
}
|
||||
}]})
|
||||
const { createManagedSession } = await import(pathToFileURL(outfile).href)
|
||||
const projects={get:async()=>undefined}
|
||||
const session=await createManagedSession(projects,'first',{permissionMode:'full-access',agentMode:'craft'})
|
||||
assert.equal(session.permissionMode,'full-access','first session retains explicit full access before any turn')
|
||||
assert.equal(session.modelId,'configured-model')
|
||||
const plan=await createManagedSession(projects,'plan',{permissionMode:'full-access',agentMode:'plan'})
|
||||
assert.equal(plan.permissionMode,'full-access','saved preference is not overwritten by effective plan restrictions')
|
||||
assert.equal(plan.agentMode,'plan')
|
||||
await assert.rejects(()=>createManagedSession(projects,'bad',{permissionMode:'unexpected'}),/权限模式无效/)
|
||||
console.log('PASS session factory: first-send preference, mode preservation, invalid permission rejection (isolated ports)')
|
||||
} finally {await rm(temp,{recursive:true,force:true})}
|
||||
Reference in new issue
Block a user