UNPKG

paqad-ai

Version:

Spec-driven development framework — AI agents that think before they type

91 lines (89 loc) • 2.95 kB
import { createRequire as __paqadCreateRequire } from 'module'; const require = __paqadCreateRequire(import.meta.url); import { formatAge, readHld, readWaitingIndex, resumeLine, sessionWaitingLine } from "../chunk-LGAFOBYN.js"; import { currentFeature, resumeFeatureByRef } from "../chunk-5M55PDWL.js"; import "../chunk-TINPSX3N.js"; import "../chunk-BTDDEK7C.js"; import "../chunk-7TBVBCDH.js"; import "../chunk-RJMJYPHL.js"; import "../chunk-NCYDV2N5.js"; import "../chunk-D6VEUSB6.js"; import "../chunk-BOEVU2BD.js"; import { detectTicketLinks, detectTicketRefs } from "../chunk-NJE7NS7E.js"; import { loadGitWorkflow } from "../chunk-ACJQW7SB.js"; import "../chunk-YA6SCYMC.js"; import "../chunk-Z3NGWHFX.js"; import "../chunk-YWAORJG6.js"; import "../chunk-Q353EDKY.js"; import "../chunk-SG6LXLDH.js"; import "../chunk-FMQ5YRSP.js"; import "../chunk-AZLA53A6.js"; import "../chunk-IHMBVS6H.js"; import { init_esm_shims } from "../chunk-IDFRWBMN.js"; // src/hld/session.ts init_esm_shims(); function stillWaiting(projectRoot, entry) { return readHld(projectRoot, entry.dir)?.state === "awaiting_sign_off"; } function waitingSignOffLines(projectRoot, now = /* @__PURE__ */ new Date()) { return readWaitingIndex(projectRoot).filter((entry) => stillWaiting(projectRoot, entry)).map((entry) => sessionWaitingLine(entry.ref, formatAge(entry.posted_at, now))); } function waitingSignOffText(projectRoot, now = /* @__PURE__ */ new Date()) { const lines = waitingSignOffLines(projectRoot, now); return lines.length === 0 ? null : lines.join("\n"); } function sourceRefs(projectRoot, prompt) { const refs = []; for (const source of Object.values(loadGitWorkflow(projectRoot).config.tickets.sources)) { try { for (const match of prompt.matchAll(new RegExp(source.pattern, "g"))) refs.push(match[0]); } catch { continue; } } return refs; } function names(entry, candidates) { const ref = entry.ref.toLowerCase(); return candidates.some((candidate) => { const value = candidate.toLowerCase(); return value === ref || value.startsWith("#") && ref.endsWith(value); }); } function resumeWaitingByPrompt(projectRoot, sessionId, prompt, now) { const waiting = readWaitingIndex(projectRoot); if (waiting.length === 0) return null; const candidates = [ ...detectTicketRefs(prompt, "generic"), ...detectTicketLinks(prompt).map((link) => link.ref), ...sourceRefs(projectRoot, prompt) ]; if (candidates.length === 0) return null; const active = currentFeature(projectRoot, sessionId, now); const entry = waiting.find( (item) => item.dir !== active && names(item, candidates) && stillWaiting(projectRoot, item) ); if (!entry) return null; const resumed = resumeFeatureByRef(projectRoot, sessionId, entry.dir, now); return resumed === null ? null : resumeLine(entry.ref); } export { resumeWaitingByPrompt, waitingSignOffLines, waitingSignOffText };