- files.ts: Use POST for new files, PUT for updates (Gitea 1.25 requires this) - issues.ts: Add editIssue() for state/title/body changes - write-tools.ts: Add gitea_edit_issue tool (open/close/edit issues) - webhook/server.ts: Persist lastPollAt to disk to prevent duplicate events on reload; use followUp delivery to queue events during LLM turns - index.ts: Use deliverAs:'followUp' for sendUserMessage
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
/**
|
|
* pi-gitea Extension — entry point
|
|
*
|
|
* Registers Gitea tools (read + write) and optional webhook server.
|
|
*/
|
|
|
|
import registerReadTools from "./tools/read-tools.js";
|
|
import registerWriteTools from "./tools/write-tools.js";
|
|
import { startWebhookServer, stopWebhookServer, startPolling, stopPolling, setSendMessage } from "./webhook/server.js";
|
|
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
|
|
export default function (pi: ExtensionAPI) {
|
|
registerReadTools(pi);
|
|
registerWriteTools(pi);
|
|
|
|
pi.on("session_start", async (_event, ctx) => {
|
|
console.log("[pi-gitea] Session started");
|
|
|
|
const sendMessageFn = (msg: string) => {
|
|
// Use followUp so events queue when the LLM is already processing
|
|
ctx.sendUserMessage(msg, { deliverAs: "followUp" });
|
|
return Promise.resolve();
|
|
};
|
|
setSendMessage(sendMessageFn);
|
|
|
|
try {
|
|
await startWebhookServer(pi);
|
|
startPolling(pi);
|
|
} catch (err) {
|
|
console.error("[pi-gitea] Failed to start webhook server:", err);
|
|
}
|
|
});
|
|
|
|
pi.on("session_shutdown", async () => {
|
|
console.log("[pi-gitea] Session shutting down");
|
|
await stopWebhookServer();
|
|
stopPolling();
|
|
});
|
|
}
|