mirror of
https://github.com/SikongJueluo/pi-extensions.git
synced 2026-10-05 11:52:55 +08:00
fix(deps): adapt to pi-permission-system 32 session-keyed services
- resolve the permissions service by the live session id in both tryRegister paths, so a mid-session republish re-keys via the re-emitted permissions:ready channel - read the session probe instead of the start-time snapshot for inner-cmd - pass the session key to publish/unpublishPermissionsService in tests and drop the removed PromptPermissionDetails.message field - raise the ai-judge peer floor to @gotgenes/pi-permission-system >=32.0.0 - bump dev deps: pi-coding-agent 0.85.1, vitest 5, typescript 7
This commit is contained in:
+2
-2
@@ -10,7 +10,7 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@gotgenes/pi-permission-system": "^25.4.0"
|
"@gotgenes/pi-permission-system": "^32.0.2"
|
||||||
},
|
},
|
||||||
"pi": {
|
"pi": {
|
||||||
"extensions": [
|
"extensions": [
|
||||||
@@ -18,6 +18,6 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"fallow": "^3.17.0"
|
"fallow": "^3.25.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,17 +14,17 @@
|
|||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-ai": "*",
|
"@earendil-works/pi-ai": "*",
|
||||||
"@earendil-works/pi-coding-agent": "*",
|
"@earendil-works/pi-coding-agent": "*",
|
||||||
"@gotgenes/pi-permission-system": ">=25.4.0"
|
"@gotgenes/pi-permission-system": ">=32.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@earendil-works/pi-ai": "*",
|
"@earendil-works/pi-ai": "^0.85.1",
|
||||||
"@earendil-works/pi-coding-agent": "*",
|
"@earendil-works/pi-coding-agent": "^0.85.1",
|
||||||
"@gotgenes/pi-permission-system": ">=25.4.0",
|
"@gotgenes/pi-permission-system": "^32.0.2",
|
||||||
"@types/node": "^26.0.0",
|
"@types/node": "^26.5.1",
|
||||||
"@vitest/coverage-istanbul": "3.2.7",
|
"@vitest/coverage-istanbul": "5.0.1",
|
||||||
"@vitest/coverage-v8": "^3.2.7",
|
"@vitest/coverage-v8": "^5.0.1",
|
||||||
"typescript": "^5",
|
"typescript": "^7.0.2",
|
||||||
"vitest": "^3"
|
"vitest": "^5.0.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"check": "tsc --noEmit",
|
"check": "tsc --noEmit",
|
||||||
|
|||||||
@@ -639,7 +639,10 @@ export default function permissionAiJudge(pi: ExtensionAPI): void {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const service = getPermissionsService();
|
// Resolve the service by the live session id: the ready channel
|
||||||
|
// re-emits after a mid-session republish (31.1.4), and the dynamic
|
||||||
|
// read re-keys onto the new slot without extra state.
|
||||||
|
const service = getPermissionsService(root.getSessionId());
|
||||||
if (service === undefined) {
|
if (service === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ function details(
|
|||||||
requestId: "req-1",
|
requestId: "req-1",
|
||||||
source: "tool_call",
|
source: "tool_call",
|
||||||
agentName: null,
|
agentName: null,
|
||||||
message: "bash ask",
|
|
||||||
payload: {
|
payload: {
|
||||||
kind: "bash",
|
kind: "bash",
|
||||||
request: {
|
request: {
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ function ask(): PromptPermissionDetails {
|
|||||||
requestId: "req-1",
|
requestId: "req-1",
|
||||||
source: "tool_call",
|
source: "tool_call",
|
||||||
agentName: null,
|
agentName: null,
|
||||||
message: "bash ask",
|
|
||||||
payload: {
|
payload: {
|
||||||
kind: "bash",
|
kind: "bash",
|
||||||
request: {
|
request: {
|
||||||
@@ -204,10 +203,13 @@ function fakeSessionManager(): {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** The session id every fake session manager reports — the service key. */
|
||||||
|
const SESSION_ID = "session-root";
|
||||||
|
|
||||||
let publishedService: PermissionsService | undefined;
|
let publishedService: PermissionsService | undefined;
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
if (publishedService !== undefined) {
|
if (publishedService !== undefined) {
|
||||||
unpublishPermissionsService(publishedService);
|
unpublishPermissionsService(SESSION_ID, publishedService);
|
||||||
publishedService = undefined;
|
publishedService = undefined;
|
||||||
}
|
}
|
||||||
cleanupMockAgentDir();
|
cleanupMockAgentDir();
|
||||||
@@ -230,7 +232,7 @@ describe("AI judge lifecycle", () => {
|
|||||||
checkPermission: vi.fn(),
|
checkPermission: vi.fn(),
|
||||||
getToolPermission: vi.fn(),
|
getToolPermission: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
// A mutable "current model" the session switches mid-run.
|
// A mutable "current model" the session switches mid-run.
|
||||||
@@ -312,7 +314,7 @@ describe("AI judge lifecycle", () => {
|
|||||||
checkPermission: vi.fn(),
|
checkPermission: vi.fn(),
|
||||||
getToolPermission: vi.fn(),
|
getToolPermission: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
const complete = vi.fn(
|
const complete = vi.fn(
|
||||||
@@ -383,7 +385,7 @@ describe("AI judge lifecycle", () => {
|
|||||||
checkPermission: vi.fn(),
|
checkPermission: vi.fn(),
|
||||||
getToolPermission: vi.fn(),
|
getToolPermission: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
const complete = vi.fn(
|
const complete = vi.fn(
|
||||||
@@ -477,7 +479,7 @@ describe("AI judge lifecycle", () => {
|
|||||||
checkPermission: vi.fn(),
|
checkPermission: vi.fn(),
|
||||||
getToolPermission: vi.fn(),
|
getToolPermission: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
const complete = vi.fn();
|
const complete = vi.fn();
|
||||||
@@ -552,7 +554,7 @@ describe("AI judge lifecycle", () => {
|
|||||||
checkPermission: vi.fn(),
|
checkPermission: vi.fn(),
|
||||||
getToolPermission: vi.fn(),
|
getToolPermission: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
const complete = vi.fn(
|
const complete = vi.fn(
|
||||||
@@ -622,7 +624,7 @@ describe("AI judge lifecycle", () => {
|
|||||||
const service = {
|
const service = {
|
||||||
registerAuthorizer: vi.fn(),
|
registerAuthorizer: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
const harness = createFakePi();
|
const harness = createFakePi();
|
||||||
@@ -682,7 +684,7 @@ describe("AI judge Enforce authority seam (PIEXTENSIO-23, ADR 0008)", () => {
|
|||||||
checkPermission: vi.fn(),
|
checkPermission: vi.fn(),
|
||||||
getToolPermission: vi.fn(),
|
getToolPermission: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
const complete = vi.fn(async () => options.response ?? modelResponse());
|
const complete = vi.fn(async () => options.response ?? modelResponse());
|
||||||
@@ -920,7 +922,7 @@ describe("AI judge Enforce authority seam (PIEXTENSIO-23, ADR 0008)", () => {
|
|||||||
checkPermission: vi.fn(),
|
checkPermission: vi.fn(),
|
||||||
getToolPermission: vi.fn(),
|
getToolPermission: vi.fn(),
|
||||||
} as unknown as PermissionsService;
|
} as unknown as PermissionsService;
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
publishedService = service;
|
publishedService = service;
|
||||||
|
|
||||||
const complete = vi.fn(async () => modelResponse());
|
const complete = vi.fn(async () => modelResponse());
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@gotgenes/pi-permission-system": "^25.4.0"
|
"@gotgenes/pi-permission-system": "^32.0.2"
|
||||||
},
|
},
|
||||||
"bundledDependencies": [
|
"bundledDependencies": [
|
||||||
"@gotgenes/pi-permission-system"
|
"@gotgenes/pi-permission-system"
|
||||||
@@ -21,12 +21,12 @@
|
|||||||
"@earendil-works/pi-coding-agent": "*"
|
"@earendil-works/pi-coding-agent": "*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "*",
|
"@earendil-works/pi-coding-agent": "^0.85.1",
|
||||||
"@types/node": "^26.0.0",
|
"@types/node": "^26.5.1",
|
||||||
"@vitest/coverage-istanbul": "3.2.7",
|
"@vitest/coverage-istanbul": "5.0.1",
|
||||||
"@vitest/coverage-v8": "^3.2.7",
|
"@vitest/coverage-v8": "^5.0.1",
|
||||||
"typescript": "^5",
|
"typescript": "^7.0.2",
|
||||||
"vitest": "^3"
|
"vitest": "^5.0.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"check": "tsc --noEmit",
|
"check": "tsc --noEmit",
|
||||||
|
|||||||
@@ -32,7 +32,12 @@ export default function permissionInnerCmd(pi: ExtensionAPI): void {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const service = getPermissionsService();
|
// Resolve by the live session id, not the start-time snapshot: a
|
||||||
|
// mid-session id change republishes under the new key and re-emits
|
||||||
|
// the ready channel, so the dynamic read re-keys onto it.
|
||||||
|
const service = getPermissionsService(
|
||||||
|
rootSession.session.getSessionId(),
|
||||||
|
);
|
||||||
if (!service) {
|
if (!service) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ function bashDetails(
|
|||||||
requestId: "req-1",
|
requestId: "req-1",
|
||||||
source: "tool_call",
|
source: "tool_call",
|
||||||
agentName,
|
agentName,
|
||||||
message: "May I run bash?",
|
|
||||||
payload: {
|
payload: {
|
||||||
kind: "bash",
|
kind: "bash",
|
||||||
request: {
|
request: {
|
||||||
|
|||||||
@@ -76,6 +76,9 @@ function createFakeSessionManager(
|
|||||||
} as unknown as ExtensionContext["sessionManager"];
|
} as unknown as ExtensionContext["sessionManager"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** The default fake session id — the key the service publishes under. */
|
||||||
|
const SESSION_ID = "session-root";
|
||||||
|
|
||||||
describe("permissions:ready -> registerAuthorizer lifecycle", () => {
|
describe("permissions:ready -> registerAuthorizer lifecycle", () => {
|
||||||
let registerAuthorizer: ReturnType<typeof vi.fn>;
|
let registerAuthorizer: ReturnType<typeof vi.fn>;
|
||||||
let disposer: ReturnType<typeof vi.fn>;
|
let disposer: ReturnType<typeof vi.fn>;
|
||||||
@@ -104,7 +107,7 @@ describe("permissions:ready -> registerAuthorizer lifecycle", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
if (published) unpublishPermissionsService(service);
|
if (published) unpublishPermissionsService(SESSION_ID, service);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,7 +116,7 @@ describe("permissions:ready -> registerAuthorizer lifecycle", () => {
|
|||||||
* available, so an early `session_start` cannot register yet.
|
* available, so an early `session_start` cannot register yet.
|
||||||
*/
|
*/
|
||||||
function becomeReady(): void {
|
function becomeReady(): void {
|
||||||
publishPermissionsService(service);
|
publishPermissionsService(SESSION_ID, service);
|
||||||
published = true;
|
published = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +231,6 @@ describe("permissions:ready -> registerAuthorizer lifecycle", () => {
|
|||||||
requestId: "req-1",
|
requestId: "req-1",
|
||||||
source: "tool_call",
|
source: "tool_call",
|
||||||
agentName: "child",
|
agentName: "child",
|
||||||
message: "forwarded ask",
|
|
||||||
payload: {
|
payload: {
|
||||||
kind: "forwarded",
|
kind: "forwarded",
|
||||||
request: {
|
request: {
|
||||||
|
|||||||
Generated
+700
-1213
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -6,4 +6,4 @@ allowBuilds:
|
|||||||
protobufjs: false
|
protobufjs: false
|
||||||
tree-sitter-bash: true
|
tree-sitter-bash: true
|
||||||
minimumReleaseAgeExclude:
|
minimumReleaseAgeExclude:
|
||||||
- '@gotgenes/pi-permission-system@25.3.0'
|
- '@gotgenes/pi-permission-system@25.3.0 || 32.0.4'
|
||||||
|
|||||||
Reference in New Issue
Block a user