chore: checkpoint pi lab rust integration work
This commit is contained in:
@@ -86,26 +86,37 @@ async function main() {
|
||||
}));
|
||||
|
||||
// 5. Send endpoint schema
|
||||
results.push(await check('POST /api/page-ai/pi/configure exists for model/thinking changes (disabled may 404)', async () => {
|
||||
const { status, body } = await fetchJson(`${BASE}/api/page-ai/pi/configure`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ sessionId: 'test', modelProvider: 'omniroute', modelId: 'freefirst', thinkingLevel: 'off' }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
if (body.schema === 'mnote.page_ai_pi.configure.v1' || body.ok === true) return { passed: true };
|
||||
return { passed: false, reason: `unexpected configure response: ${JSON.stringify(body).slice(0, 200)}` };
|
||||
}));
|
||||
|
||||
// 6. Send endpoint schema
|
||||
results.push(await check('POST /api/page-ai/pi/send returns proper schema (disabled may 404)', async () => {
|
||||
const { status } = await fetchJson(`${BASE}/api/page-ai/pi/send`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ sessionId: 'test', message: 'hello' }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403) return { passed: true };
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
return { passed: true }; // routed correctly
|
||||
}));
|
||||
|
||||
// 6. Abort endpoint
|
||||
// 7. Abort endpoint
|
||||
results.push(await check('POST /api/page-ai/pi/abort returns proper response (disabled may 404)', async () => {
|
||||
const { status } = await fetchJson(`${BASE}/api/page-ai/pi/abort`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ sessionId: 'test' }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403) return { passed: true };
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
// 7. Events SSE endpoint returns proper content type
|
||||
// 8. Events SSE endpoint returns proper content type
|
||||
results.push(await check('GET /api/page-ai/pi/events returns SSE stream (disabled may 404)', async () => {
|
||||
const res = await fetch(`${BASE}/api/page-ai/pi/events`, {
|
||||
headers: {
|
||||
@@ -120,13 +131,13 @@ async function main() {
|
||||
return { passed: false, reason: `unexpected Content-Type: ${ct}` };
|
||||
}));
|
||||
|
||||
// 8. Tool call endpoint
|
||||
// 9. Tool call endpoint
|
||||
results.push(await check('POST /api/page-ai/pi/tool-call exists (disabled may 404)', async () => {
|
||||
const { status } = await fetchJson(`${BASE}/api/page-ai/pi/tool-call`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ toolName: 'mnote.allowed_roots.describe', params: {} }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403) return { passed: true };
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
@@ -140,7 +151,48 @@ async function main() {
|
||||
return { passed: true }; // accept any response — mounted
|
||||
}));
|
||||
|
||||
// 10. Runtime asset exists
|
||||
|
||||
// 11. State endpoint
|
||||
results.push(await check("POST /api/page-ai/pi/state returns proper schema (disabled may 404)", async () => {
|
||||
const { status, body } = await fetchJson(`${BASE}/api/page-ai/pi/state`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ sessionId: "test" }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
if (status !== 200) return { passed: false, reason: `status ${status}` };
|
||||
if (body.schema !== "mnote.page_ai_pi.state.v1") return { passed: false, reason: `schema mismatch: ${body.schema}` };
|
||||
if (typeof body.running !== "boolean") return { passed: false, reason: "missing running boolean" };
|
||||
if (typeof body.pendingMessageCount !== "number") return { passed: false, reason: "missing pendingMessageCount number" };
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
// 12. Compact endpoint
|
||||
results.push(await check("POST /api/page-ai/pi/compact returns proper schema (disabled may 404)", async () => {
|
||||
const { status, body } = await fetchJson(`${BASE}/api/page-ai/pi/compact`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ sessionId: "test" }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
if (status !== 200) return { passed: false, reason: `status ${status}` };
|
||||
if (body.schema !== "mnote.page_ai_pi.compact.v1") return { passed: false, reason: `schema mismatch: ${body.schema}` };
|
||||
if (typeof body.summary !== "string") return { passed: false, reason: "missing summary string" };
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
// 13. Queue-config endpoint
|
||||
results.push(await check("POST /api/page-ai/pi/queue-config returns proper schema (disabled may 404)", async () => {
|
||||
const { status, body } = await fetchJson(`${BASE}/api/page-ai/pi/queue-config`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ sessionId: "test", steeringMode: "one-at-a-time", followUpMode: "all", autoCompaction: true }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
if (status !== 200) return { passed: false, reason: `status ${status}` };
|
||||
if (body.schema !== "mnote.page_ai_pi.queue_config.v1") return { passed: false, reason: `schema mismatch: ${body.schema}` };
|
||||
if (typeof body.applied !== "object") return { passed: false, reason: "missing applied object" };
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
// 14. Runtime asset exists
|
||||
results.push(await check('GET /api/mnote-browser-runtime/sidebar-page-ai-pi-lab-runtime.js returns 200', async () => {
|
||||
const res = await fetch(`${BASE}/api/mnote-browser-runtime/sidebar-page-ai-pi-lab-runtime.js`);
|
||||
if (res.status !== 200) return { passed: false, reason: `status ${res.status}` };
|
||||
@@ -160,6 +212,39 @@ async function main() {
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
|
||||
// 15. Session tree endpoint
|
||||
results.push(await check("GET /api/page-ai/pi/sessions/{sessionId}/tree returns proper schema (disabled may 404)", async () => {
|
||||
const { status, body } = await fetchJson(`${BASE}/api/page-ai/pi/sessions/nonexistent/tree`);
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
if (status !== 200) return { passed: false, reason: `status ${status}` };
|
||||
if (body.schema !== "mnote.page_ai_pi.session_tree.v1") return { passed: false, reason: `schema mismatch: ${body.schema}` };
|
||||
if (typeof body.sessionId !== "string") return { passed: false, reason: "missing sessionId string" };
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
// 16. Fork endpoint
|
||||
results.push(await check("POST /api/page-ai/pi/fork returns proper schema (disabled may 404)", async () => {
|
||||
const { status, body } = await fetchJson(`${BASE}/api/page-ai/pi/fork`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ sessionId: "nonexistent" }),
|
||||
});
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
if (status !== 200) return { passed: false, reason: `status ${status}` };
|
||||
if (body.schema !== "mnote.page_ai_pi.fork.v1") return { passed: false, reason: `schema mismatch: ${body.schema}` };
|
||||
if (typeof body.sourceSessionId !== "string") return { passed: false, reason: "missing sourceSessionId string" };
|
||||
return { passed: true };
|
||||
}));
|
||||
|
||||
// 17. Artifact diff endpoint
|
||||
results.push(await check("GET /api/page-ai/pi/artifacts/{toolEventId}/diff returns proper response (disabled may 404)", async () => {
|
||||
const { status, body } = await fetchJson(`${BASE}/api/page-ai/pi/artifacts/nonexistent/diff?sessionId=nonexistent`);
|
||||
if (status === 404 || status === 401 || status === 403 || status === 400) return { passed: true };
|
||||
if (status !== 200) return { passed: false, reason: `status ${status}` };
|
||||
if (body.schema !== "mnote.page_ai_pi.artifact_diff.v1") return { passed: false, reason: `schema mismatch: ${body.schema}` };
|
||||
if (typeof body.toolEventId !== "string") return { passed: false, reason: "missing toolEventId string" };
|
||||
return { passed: true };
|
||||
}));
|
||||
// Summary
|
||||
const passed = results.filter(Boolean).length;
|
||||
const total = results.length;
|
||||
|
||||
Reference in New Issue
Block a user