mindspace: close authority boundaries
This commit is contained in:
+82
-12
@@ -1452,12 +1452,27 @@ export function createTkmindProxy({
|
||||
}
|
||||
await rememberSessionTarget(session.id, startTarget);
|
||||
await sessionStore.registerAgentSession(userId, session.id, startTarget);
|
||||
if (resolvedSessionPolicy?.gooseMode) {
|
||||
const sessionScopedPolicy =
|
||||
typeof userAuth.getAgentSessionPolicy ===
|
||||
'function'
|
||||
? await userAuth.getAgentSessionPolicy(
|
||||
userId,
|
||||
{
|
||||
toolMode:
|
||||
resolvedSessionPolicy
|
||||
?.toolMode ?? 'chat',
|
||||
sessionId: session.id,
|
||||
packageId: `cp_${session.id}`,
|
||||
},
|
||||
)
|
||||
: resolvedSessionPolicy;
|
||||
if (sessionScopedPolicy?.gooseMode) {
|
||||
const modeRes = await apiFetch(startTarget, apiSecret, '/agent/update_session', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
session_id: session.id,
|
||||
goose_mode: resolvedSessionPolicy.gooseMode,
|
||||
goose_mode:
|
||||
sessionScopedPolicy.gooseMode,
|
||||
}),
|
||||
});
|
||||
if (!modeRes.ok) {
|
||||
@@ -1472,7 +1487,7 @@ export function createTkmindProxy({
|
||||
session.id,
|
||||
{
|
||||
workingDir: resolvedWorkingDir,
|
||||
sessionPolicy: resolvedSessionPolicy,
|
||||
sessionPolicy: sessionScopedPolicy,
|
||||
sandboxConstraints: publishLayout?.constraints ?? null,
|
||||
userMemories,
|
||||
userContext: publishLayout
|
||||
@@ -1578,11 +1593,30 @@ export function createTkmindProxy({
|
||||
});
|
||||
}
|
||||
|
||||
async function getSessionPolicyForToolMode(userId, toolMode = 'chat') {
|
||||
async function getSessionPolicyForToolMode(
|
||||
userId,
|
||||
toolMode = 'chat',
|
||||
sessionId = null,
|
||||
) {
|
||||
const scope = sessionId
|
||||
? {
|
||||
sessionId,
|
||||
packageId: `cp_${sessionId}`,
|
||||
}
|
||||
: {};
|
||||
if (toolMode === 'code' && userAuth.getCodeAgentSessionPolicy) {
|
||||
return userAuth.getCodeAgentSessionPolicy(userId);
|
||||
return userAuth.getCodeAgentSessionPolicy(
|
||||
userId,
|
||||
scope,
|
||||
);
|
||||
}
|
||||
return userAuth.getAgentSessionPolicy(userId);
|
||||
return userAuth.getAgentSessionPolicy(
|
||||
userId,
|
||||
{
|
||||
...scope,
|
||||
toolMode,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
async function reconcileSessionPolicyForUser(
|
||||
@@ -1593,7 +1627,12 @@ export function createTkmindProxy({
|
||||
if (!userId || !sessionId) return;
|
||||
const target = await resolveTarget(sessionId);
|
||||
const workingDir = await userAuth.resolveWorkingDir(userId);
|
||||
const sessionPolicy = await getSessionPolicyForToolMode(userId, toolMode);
|
||||
const sessionPolicy =
|
||||
await getSessionPolicyForToolMode(
|
||||
userId,
|
||||
toolMode,
|
||||
sessionId,
|
||||
);
|
||||
const publishLayout = await userAuth.getUserPublishLayout(userId);
|
||||
const userMemories = await resolveUserMemories(userId, {
|
||||
sessionId,
|
||||
@@ -1820,7 +1859,13 @@ export function createTkmindProxy({
|
||||
if (!policyState.unrestricted) {
|
||||
body = injectTaskRoutingHint(
|
||||
body,
|
||||
await userAuth.getAgentSessionPolicy(userId),
|
||||
await userAuth.getAgentSessionPolicy(
|
||||
userId,
|
||||
{
|
||||
sessionId,
|
||||
packageId: `cp_${sessionId}`,
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
body = {
|
||||
@@ -2017,12 +2062,27 @@ export function createTkmindProxy({
|
||||
session.id,
|
||||
startTarget,
|
||||
);
|
||||
if (sessionPolicy.gooseMode) {
|
||||
const sessionScopedPolicy =
|
||||
await userAuth
|
||||
.getAgentSessionPolicy(
|
||||
req.currentUser.id,
|
||||
{
|
||||
toolMode:
|
||||
sessionPolicy.toolMode ??
|
||||
'chat',
|
||||
sessionId: session.id,
|
||||
packageId:
|
||||
`cp_${session.id}`,
|
||||
},
|
||||
);
|
||||
if (sessionScopedPolicy.gooseMode) {
|
||||
const modeRes = await apiFetch(startTarget, apiSecret, '/agent/update_session', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
session_id: session.id,
|
||||
goose_mode: sessionPolicy.gooseMode,
|
||||
goose_mode:
|
||||
sessionScopedPolicy
|
||||
.gooseMode,
|
||||
}),
|
||||
});
|
||||
if (!modeRes.ok) {
|
||||
@@ -2039,7 +2099,8 @@ export function createTkmindProxy({
|
||||
try {
|
||||
await reconcileAgentSession(api, session.id, {
|
||||
workingDir,
|
||||
sessionPolicy,
|
||||
sessionPolicy:
|
||||
sessionScopedPolicy,
|
||||
sandboxConstraints: publishLayout?.constraints ?? null,
|
||||
userMemories,
|
||||
userContext: publishLayout
|
||||
@@ -2100,7 +2161,16 @@ export function createTkmindProxy({
|
||||
const skipReconcile = req.body?.skip_reconcile === true;
|
||||
if (!skipReconcile) {
|
||||
const workingDir = await userAuth.resolveWorkingDir(req.currentUser.id);
|
||||
const sessionPolicy = await userAuth.getAgentSessionPolicy(req.currentUser.id);
|
||||
const sessionPolicy =
|
||||
await userAuth
|
||||
.getAgentSessionPolicy(
|
||||
req.currentUser.id,
|
||||
{
|
||||
sessionId,
|
||||
packageId:
|
||||
`cp_${sessionId}`,
|
||||
},
|
||||
);
|
||||
const publishLayout = await userAuth.getUserPublishLayout(req.currentUser.id);
|
||||
const userMemories = await resolveUserMemories(req.currentUser.id, {
|
||||
sessionId,
|
||||
|
||||
Reference in New Issue
Block a user