panopticon-cli 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/cli/index.js +19 -19
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/dashboard/{event-store-BtuZCLHu.js → event-store-D7kLBd07.js} +1 -1
  4. package/dist/dashboard/{event-store-OS5jH3Eu.js → event-store-O9q0Gweh.js} +2 -2
  5. package/dist/dashboard/{event-store-OS5jH3Eu.js.map → event-store-O9q0Gweh.js.map} +1 -1
  6. package/dist/dashboard/{inspect-agent-CwT4mrvV.js → inspect-agent-B57kGDUV.js} +3 -3
  7. package/dist/dashboard/{inspect-agent-CwT4mrvV.js.map → inspect-agent-B57kGDUV.js.map} +1 -1
  8. package/dist/dashboard/{issue-service-singleton-z78bbRiO.js → issue-service-singleton-DQK42EqH.js} +1 -1
  9. package/dist/dashboard/{issue-service-singleton-0n9hcF71.js → issue-service-singleton-sb2HkB9f.js} +2 -2
  10. package/dist/dashboard/{issue-service-singleton-0n9hcF71.js.map → issue-service-singleton-sb2HkB9f.js.map} +1 -1
  11. package/dist/dashboard/{lifecycle-B6d3AE3n.js → lifecycle-ZTYdrr2O.js} +1 -1
  12. package/dist/dashboard/{merge-agent-DaIEvGJG.js → merge-agent-GLtMEsTu.js} +1 -1
  13. package/dist/dashboard/{merge-agent-CmqR1MFf.js → merge-agent-twroFuAh.js} +2 -2
  14. package/dist/dashboard/{merge-agent-CmqR1MFf.js.map → merge-agent-twroFuAh.js.map} +1 -1
  15. package/dist/dashboard/{projection-cache-Bkzs_90o.js → projection-cache-DQ9zegkK.js} +10 -10
  16. package/dist/dashboard/projection-cache-DQ9zegkK.js.map +1 -0
  17. package/dist/dashboard/public/assets/{dist-D-q87oB4.js → dist-C2sRcZJv.js} +1 -1
  18. package/dist/dashboard/public/assets/{index--G6_upSx.js → index-BCLmEMRf.js} +41 -41
  19. package/dist/dashboard/public/assets/index-BEdq7CFf.css +1 -0
  20. package/dist/dashboard/public/index.html +2 -2
  21. package/dist/dashboard/{review-status-DqJZDthU.js → review-status-CK3eBGyb.js} +1 -1
  22. package/dist/dashboard/{review-status-LQATWF6L.js → review-status-CV55Tl-n.js} +2 -2
  23. package/dist/dashboard/{review-status-LQATWF6L.js.map → review-status-CV55Tl-n.js.map} +1 -1
  24. package/dist/dashboard/server.js +85 -85
  25. package/dist/dashboard/server.js.map +1 -1
  26. package/dist/dashboard/{specialist-context-IX8ZZBxy.js → specialist-context-ColzlmGE.js} +2 -2
  27. package/dist/dashboard/{specialist-context-IX8ZZBxy.js.map → specialist-context-ColzlmGE.js.map} +1 -1
  28. package/dist/dashboard/{specialist-logs-BvOQ3XPt.js → specialist-logs-BhmDpFIq.js} +1 -1
  29. package/dist/dashboard/{specialists-C7Fyhq_j.js → specialists-C6s3U6tX.js} +21 -7
  30. package/dist/dashboard/specialists-C6s3U6tX.js.map +1 -0
  31. package/dist/dashboard/{specialists-B4aDa5xP.js → specialists-Cny632-T.js} +1 -1
  32. package/dist/dashboard/{test-agent-queue-C0WrVdrJ.js → test-agent-queue-tqI4VDsu.js} +3 -3
  33. package/dist/dashboard/{test-agent-queue-C0WrVdrJ.js.map → test-agent-queue-tqI4VDsu.js.map} +1 -1
  34. package/dist/dashboard/workflows-B2ARUpOa.js +2 -0
  35. package/dist/dashboard/{workflows-Cj6tzch6.js → workflows-N1UTipYl.js} +3 -3
  36. package/dist/dashboard/{workflows-Cj6tzch6.js.map → workflows-N1UTipYl.js.map} +1 -1
  37. package/dist/{merge-agent-BCPyotWG.js → merge-agent-VQH9z9t8.js} +2 -2
  38. package/dist/{merge-agent-BCPyotWG.js.map → merge-agent-VQH9z9t8.js.map} +1 -1
  39. package/dist/{review-status-p_HOugvo.js → review-status-2TdtHNcs.js} +1 -1
  40. package/dist/{review-status-BbY22dtx.js → review-status-Bm1bWNEa.js} +2 -2
  41. package/dist/{review-status-BbY22dtx.js.map → review-status-Bm1bWNEa.js.map} +1 -1
  42. package/dist/{specialist-context-CRBBW-z5.js → specialist-context-BdNFsfMG.js} +2 -2
  43. package/dist/{specialist-context-CRBBW-z5.js.map → specialist-context-BdNFsfMG.js.map} +1 -1
  44. package/dist/{specialist-logs-m0UvPm3F.js → specialist-logs-CLztE_bE.js} +1 -1
  45. package/dist/{specialists-ldNesMhg.js → specialists-DEKqgkxp.js} +21 -7
  46. package/dist/specialists-DEKqgkxp.js.map +1 -0
  47. package/dist/{specialists-DXDDLqoY.js → specialists-aUoUVWsN.js} +1 -1
  48. package/package.json +1 -1
  49. package/scripts/record-cost-event.js +15 -0
  50. package/scripts/record-cost-event.js.map +1 -1
  51. package/scripts/record-cost-event.ts +2 -0
  52. package/scripts/work-agent-stop-hook +26 -0
  53. package/dist/dashboard/projection-cache-Bkzs_90o.js.map +0 -1
  54. package/dist/dashboard/public/assets/index-CjpnhB4Q.css +0 -1
  55. package/dist/dashboard/specialists-C7Fyhq_j.js.map +0 -1
  56. package/dist/dashboard/workflows-BsUDQntr.js +0 -2
  57. package/dist/specialists-ldNesMhg.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -17,9 +17,9 @@ import { n as resolveGitHubIssue, r as resolveTrackerType, t as isGitHubIssue }
17
17
  import { a as isShadowed, c as needsSync, d as updateTrackerStatusCache, i as getUnsyncedHistory, n as getPendingSyncCount, o as listShadowedIssues, r as getShadowState, s as markAsSynced, t as createShadowState, u as updateShadowState } from "../shadow-state-CFFHf05M.js";
18
18
  import { a as findRemoteWorkspaceMetadata, i as deleteWorkspaceMetadata, n as isRemoteAvailable, o as loadWorkspaceMetadata, r as WORKSPACES_DIR, s as saveWorkspaceMetadata, t as createFlyProviderFromConfig } from "../remote-CkLBqLJc.js";
19
19
  import { a as spawnRemoteAgent, n as isRemoteAgentRunning, o as createFlyProvider } from "../remote-agents-C5Bd2fgt.js";
20
- import { At as formatCost, Bt as init_io, Ct as getProjectDirs, D as getSpecialistStatus, Dt as checkBudget, Et as parseClaudeSession, Ft as getWeeklySummary, H as recordWake, Ht as updateItemStatus, It as init_cost, Lt as readIssueCosts, Mt as getAllBudgets, Nt as getDailySummary, O as getTmuxSessionName, Ot as createBudget, Pt as getMonthlySummary, Rt as readTodayCosts, T as getSpecialistMetadata, Tt as init_jsonl_parser, Ut as updateSubItemStatus, Vt as readWorkspacePlan, Y as spawnEphemeralSpecialist, a as completeSpecialistTask, f as getAllProjectSpecialistStatuses, i as clearSessionId, it as wakeSpecialistOrQueue, j as init_specialists, jt as generateReport$1, kt as deleteBudget, p as getAllSpecialistStatus, q as setSessionId, r as checkSpecialistQueue, w as getSessionId, wt as getSessionFiles, zt as summarizeCosts } from "../specialists-ldNesMhg.js";
20
+ import { At as formatCost, Bt as init_io, Ct as getProjectDirs, D as getSpecialistStatus, Dt as checkBudget, Et as parseClaudeSession, Ft as getWeeklySummary, H as recordWake, Ht as updateItemStatus, It as init_cost, Lt as readIssueCosts, Mt as getAllBudgets, Nt as getDailySummary, O as getTmuxSessionName, Ot as createBudget, Pt as getMonthlySummary, Rt as readTodayCosts, T as getSpecialistMetadata, Tt as init_jsonl_parser, Ut as updateSubItemStatus, Vt as readWorkspacePlan, Y as spawnEphemeralSpecialist, a as completeSpecialistTask, f as getAllProjectSpecialistStatuses, i as clearSessionId, it as wakeSpecialistOrQueue, j as init_specialists, jt as generateReport$1, kt as deleteBudget, p as getAllSpecialistStatus, q as setSessionId, r as checkSpecialistQueue, w as getSessionId, wt as getSessionFiles, zt as summarizeCosts } from "../specialists-DEKqgkxp.js";
21
21
  import { i as init_tldr_daemon, n as getTldrDaemonService, r as getTldrMetrics } from "../tldr-daemon-BCEFPItr.js";
22
- import { a as saveReviewStatuses, c as getDatabase, i as loadReviewStatuses, l as init_database, o as setReviewStatus, r as init_review_status, s as closeDatabase } from "../review-status-BbY22dtx.js";
22
+ import { a as saveReviewStatuses, c as getDatabase, i as loadReviewStatuses, l as init_database, o as setReviewStatus, r as init_review_status, s as closeDatabase } from "../review-status-Bm1bWNEa.js";
23
23
  import { i as stepSkipped, n as stepFailed, r as stepOk } from "../types-DewGdaIP.js";
24
24
  import { r as findWorkspacePath, t as archivePlanning } from "../archive-planning-BJrZ3tmN.js";
25
25
  import "../clean-planning-DvhZAUv4.js";
@@ -6608,7 +6608,7 @@ async function verifyBranchMerged(ctx) {
6608
6608
  const branchName = `feature/${ctx.issueId.toLowerCase()}`;
6609
6609
  try {
6610
6610
  try {
6611
- const { loadReviewStatuses } = await import("../review-status-p_HOugvo.js");
6611
+ const { loadReviewStatuses } = await import("../review-status-2TdtHNcs.js");
6612
6612
  if (loadReviewStatuses()[ctx.issueId.toUpperCase()]?.mergeStatus === "merged") return stepOk(step, ["Merge specialist confirmed merge completed"]);
6613
6613
  } catch {}
6614
6614
  const { stdout: branchExists } = await execAsync$15(`git branch --list "${branchName}" 2>/dev/null || true`, {
@@ -6659,7 +6659,7 @@ async function verifyBranchMerged(ctx) {
6659
6659
  async function clearReviewStatusStep(issueId) {
6660
6660
  const step = "clear-review-status";
6661
6661
  try {
6662
- const { clearReviewStatus } = await import("../review-status-p_HOugvo.js");
6662
+ const { clearReviewStatus } = await import("../review-status-2TdtHNcs.js");
6663
6663
  clearReviewStatus(issueId.toUpperCase());
6664
6664
  return stepOk(step, ["Review status cleared"]);
6665
6665
  } catch {
@@ -10909,7 +10909,7 @@ async function checkOrphanedReviewStatuses() {
10909
10909
  const { resolveProjectFromIssue } = await import("../projects-DMWmPeIU.js");
10910
10910
  const resolved = resolveProjectFromIssue(issueId);
10911
10911
  if (resolved) {
10912
- const { spawnEphemeralSpecialist } = await import("../specialists-DXDDLqoY.js");
10912
+ const { spawnEphemeralSpecialist } = await import("../specialists-aUoUVWsN.js");
10913
10913
  const result = await spawnEphemeralSpecialist(resolved.projectKey, "review-agent", {
10914
10914
  issueId,
10915
10915
  workspace,
@@ -10922,7 +10922,7 @@ async function checkOrphanedReviewStatuses() {
10922
10922
  actions.push(`Re-dispatched pending review for ${issueId} via ${resolved.projectKey}/review-agent (deacon-orphan-recovery)`);
10923
10923
  console.log(`[deacon] Re-dispatched review for ${issueId} after orphan/pending detection (project: ${resolved.projectKey})`);
10924
10924
  } else if (result.error === "specialist_busy") {
10925
- const { submitToSpecialistQueue } = await import("../specialists-DXDDLqoY.js");
10925
+ const { submitToSpecialistQueue } = await import("../specialists-aUoUVWsN.js");
10926
10926
  submitToSpecialistQueue("review-agent", {
10927
10927
  priority: "high",
10928
10928
  source: "deacon-orphan-recovery",
@@ -10963,7 +10963,7 @@ async function checkOrphanedReviewStatuses() {
10963
10963
  const { resolveProjectFromIssue } = await import("../projects-DMWmPeIU.js");
10964
10964
  const resolved = resolveProjectFromIssue(issueId);
10965
10965
  if (resolved) {
10966
- const { spawnEphemeralSpecialist } = await import("../specialists-DXDDLqoY.js");
10966
+ const { spawnEphemeralSpecialist } = await import("../specialists-aUoUVWsN.js");
10967
10967
  const result = await spawnEphemeralSpecialist(resolved.projectKey, "test-agent", {
10968
10968
  issueId,
10969
10969
  workspace,
@@ -10975,7 +10975,7 @@ async function checkOrphanedReviewStatuses() {
10975
10975
  actions.push(`Re-dispatched orphaned test for ${issueId} via ${resolved.projectKey}/test-agent (deacon-orphan-recovery)`);
10976
10976
  console.log(`[deacon] Re-dispatched test for ${issueId} after orphan detection (project: ${resolved.projectKey})`);
10977
10977
  } else if (result.error === "specialist_busy") {
10978
- const { submitToSpecialistQueue } = await import("../specialists-DXDDLqoY.js");
10978
+ const { submitToSpecialistQueue } = await import("../specialists-aUoUVWsN.js");
10979
10979
  submitToSpecialistQueue("test-agent", {
10980
10980
  priority: "high",
10981
10981
  source: "deacon-orphan-recovery",
@@ -11344,7 +11344,7 @@ async function patrolWorkAgentResolutions() {
11344
11344
  async function checkSpecialistQueues() {
11345
11345
  const actions = [];
11346
11346
  try {
11347
- const { checkSpecialistQueue, spawnEphemeralSpecialist, getTmuxSessionName, isRunning } = await import("../specialists-DXDDLqoY.js");
11347
+ const { checkSpecialistQueue, spawnEphemeralSpecialist, getTmuxSessionName, isRunning } = await import("../specialists-aUoUVWsN.js");
11348
11348
  const { getAgentRuntimeState } = await import("../agents-BKsVoIc9.js");
11349
11349
  const { resolveProjectFromIssue } = await import("../projects-DMWmPeIU.js");
11350
11350
  for (const specialistType of [
@@ -11526,7 +11526,7 @@ async function runPatrol() {
11526
11526
  statuses[issueId].mergeStatus = "merged";
11527
11527
  statuses[issueId].readyForMerge = false;
11528
11528
  writeFileSync(REVIEW_STATUS_FILE$1, JSON.stringify(statuses, null, 2), "utf-8");
11529
- const { postMergeLifecycle } = await import("../merge-agent-BCPyotWG.js");
11529
+ const { postMergeLifecycle } = await import("../merge-agent-VQH9z9t8.js");
11530
11530
  postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
11531
11531
  actions.push(`Auto-completed stale merge for ${issueId}`);
11532
11532
  } else {
@@ -11784,7 +11784,7 @@ var CloisterService = class {
11784
11784
  }
11785
11785
  try {
11786
11786
  if (existsSync(AGENTS_DIR)) {
11787
- const { isRunning: isSpecialistRunning } = await import("../specialists-DXDDLqoY.js");
11787
+ const { isRunning: isSpecialistRunning } = await import("../specialists-aUoUVWsN.js");
11788
11788
  const specialistPattern = /^specialist-(.+)-(review-agent|test-agent|merge-agent)$/;
11789
11789
  const entries = readdirSync(AGENTS_DIR, { withFileTypes: true });
11790
11790
  for (const entry of entries) {
@@ -11816,7 +11816,7 @@ var CloisterService = class {
11816
11816
  try {
11817
11817
  const reviewStatuses = loadReviewStatuses();
11818
11818
  const { resolveProjectFromIssue } = await import("../projects-DMWmPeIU.js");
11819
- const { submitToSpecialistQueue, getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("../specialists-DXDDLqoY.js");
11819
+ const { submitToSpecialistQueue, getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("../specialists-aUoUVWsN.js");
11820
11820
  const activeReviewIssues = /* @__PURE__ */ new Set();
11821
11821
  try {
11822
11822
  const projSpecs = await getAllProjectSpecialistStatuses();
@@ -12040,7 +12040,7 @@ var CloisterService = class {
12040
12040
  const retryCount = this.processedCompletions.get(dir.name) || 0;
12041
12041
  if (retryCount >= 3) continue;
12042
12042
  const issueId = dir.name.replace("agent-", "").toUpperCase();
12043
- const { getReviewStatus } = await import("../review-status-p_HOugvo.js");
12043
+ const { getReviewStatus } = await import("../review-status-2TdtHNcs.js");
12044
12044
  const existingReview = getReviewStatus(issueId);
12045
12045
  if (existingReview && ["reviewing", "passed"].includes(existingReview.reviewStatus || "")) {
12046
12046
  console.log(`🔔 Cloister: Completion marker for ${issueId} — review already ${existingReview.reviewStatus}, marking processed`);
@@ -13501,7 +13501,7 @@ const execAsync$6 = promisify(exec);
13501
13501
  */
13502
13502
  async function listLogsCommand(project, type, options) {
13503
13503
  try {
13504
- const { listRunLogs } = await import("../specialist-logs-m0UvPm3F.js");
13504
+ const { listRunLogs } = await import("../specialist-logs-CLztE_bE.js");
13505
13505
  const runs = listRunLogs(project, type, { limit: options.limit ? parseInt(options.limit) : 10 });
13506
13506
  if (options.json) {
13507
13507
  console.log(JSON.stringify(runs, null, 2));
@@ -13540,7 +13540,7 @@ async function listLogsCommand(project, type, options) {
13540
13540
  */
13541
13541
  async function viewLogCommand(project, type, runId, options) {
13542
13542
  try {
13543
- const { getRunLog, parseLogMetadata, getRunLogPath } = await import("../specialist-logs-m0UvPm3F.js");
13543
+ const { getRunLog, parseLogMetadata, getRunLogPath } = await import("../specialist-logs-CLztE_bE.js");
13544
13544
  const content = getRunLog(project, type, runId);
13545
13545
  if (!content) {
13546
13546
  console.error(`❌ Run log not found: ${runId}`);
@@ -13571,8 +13571,8 @@ async function viewLogCommand(project, type, runId, options) {
13571
13571
  */
13572
13572
  async function tailLogCommand(project, type) {
13573
13573
  try {
13574
- const { getRunLogPath } = await import("../specialist-logs-m0UvPm3F.js");
13575
- const { getProjectSpecialistMetadata } = await import("../specialists-DXDDLqoY.js");
13574
+ const { getRunLogPath } = await import("../specialist-logs-CLztE_bE.js");
13575
+ const { getProjectSpecialistMetadata } = await import("../specialists-aUoUVWsN.js");
13576
13576
  const metadata = getProjectSpecialistMetadata(project, type);
13577
13577
  if (!metadata.currentRun) {
13578
13578
  console.error(`❌ No active run for ${project}/${type}`);
@@ -13639,7 +13639,7 @@ async function cleanupLogsCommand(projectOrAll, type, options) {
13639
13639
  console.log(" Use --force to confirm.");
13640
13640
  process.exit(1);
13641
13641
  }
13642
- const { cleanupAllLogs } = await import("../specialist-logs-m0UvPm3F.js");
13642
+ const { cleanupAllLogs } = await import("../specialist-logs-CLztE_bE.js");
13643
13643
  console.log("🧹 Cleaning up old logs for all projects...\n");
13644
13644
  const results = cleanupAllLogs();
13645
13645
  console.log(`\n✅ Cleanup complete: deleted ${results.totalDeleted} old logs\n`);
@@ -13660,7 +13660,7 @@ async function cleanupLogsCommand(projectOrAll, type, options) {
13660
13660
  console.log(" Use --force to confirm.");
13661
13661
  process.exit(1);
13662
13662
  }
13663
- const { cleanupOldLogs } = await import("../specialist-logs-m0UvPm3F.js");
13663
+ const { cleanupOldLogs } = await import("../specialist-logs-CLztE_bE.js");
13664
13664
  const { getSpecialistRetention } = await import("../projects-DMWmPeIU.js");
13665
13665
  const retention = getSpecialistRetention(projectOrAll);
13666
13666
  console.log(`🧹 Cleaning up old logs for ${projectOrAll}/${type}...`);