feat(pi): register model-callable mosaic_mission_status tool
Adds a first-class registerTool (R14 'proper tool usage') so the Pi agent can load its active Mosaic mission, milestone progress, task counts, and latest scratchpad as a tool call before planning — instead of shelling out or guessing. Reuses detectMission/buildMissionSummary; returns AgentToolResult text + structured details. promptGuidelines names the tool explicitly per the pi extension authoring contract. Tool shape verified against @earendil-works/pi-coding-agent@0.79.9 ToolDefinition (name/label/description/promptSnippet/promptGuidelines/ parameters + execute(toolCallId,params,signal,onUpdate,ctx)). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EsgTQzV5YUGk1JtCLP4B83
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
import type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';
|
||||
import { Type } from 'typebox';
|
||||
import {
|
||||
existsSync,
|
||||
readFileSync,
|
||||
@@ -342,4 +343,32 @@ export default function register(pi: ExtensionAPI) {
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// ── Register mosaic_mission_status tool (model-callable) ──────────────
|
||||
// R14 "proper tool usage": give the agent a first-class tool to load its
|
||||
// active Mosaic mission, milestone progress, task counts, and latest
|
||||
// scratchpad — so it self-orients on in-flight work before planning,
|
||||
// instead of shelling out or guessing. Mirrors the /mosaic-status command
|
||||
// but returns the summary as tool output the LLM can read.
|
||||
pi.registerTool({
|
||||
name: 'mosaic_mission_status',
|
||||
label: 'Mosaic Mission Status',
|
||||
description:
|
||||
'Return the active Mosaic mission, milestone progress, task counts, and latest scratchpad for the current project. Returns a note when no mission is active.',
|
||||
promptSnippet: 'Read the active Mosaic mission + task state for the current project',
|
||||
promptGuidelines: [
|
||||
'Use mosaic_mission_status at the start of a session or task to load the active mission, milestone progress, and open tasks before planning work.',
|
||||
],
|
||||
parameters: Type.Object({}),
|
||||
async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
|
||||
const mission = detectMission(sessionCwd);
|
||||
const text = mission
|
||||
? buildMissionSummary(sessionCwd, mission)
|
||||
: 'No active Mosaic mission in this project.';
|
||||
return {
|
||||
content: [{ type: 'text', text }],
|
||||
details: mission ? { ...mission } : { active: false },
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user