@intrect/openswarm 0.17.1 → 0.17.3
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.
- package/README.md +21 -5
- package/config.example.yaml +18 -0
- package/dist/adapters/agenticLoop.d.ts +2 -0
- package/dist/adapters/agenticLoop.d.ts.map +1 -1
- package/dist/adapters/agenticLoop.js +7 -4
- package/dist/adapters/agenticLoop.js.map +1 -1
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js +9 -0
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +6 -3
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +3 -2
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/codexResponses.d.ts +2 -1
- package/dist/adapters/codexResponses.d.ts.map +1 -1
- package/dist/adapters/codexResponses.js +35 -31
- package/dist/adapters/codexResponses.js.map +1 -1
- package/dist/adapters/errorClassification.d.ts +11 -0
- package/dist/adapters/errorClassification.d.ts.map +1 -1
- package/dist/adapters/errorClassification.js +22 -0
- package/dist/adapters/errorClassification.js.map +1 -1
- package/dist/adapters/gpt.d.ts.map +1 -1
- package/dist/adapters/gpt.js +2 -1
- package/dist/adapters/gpt.js.map +1 -1
- package/dist/adapters/local.d.ts.map +1 -1
- package/dist/adapters/local.js +2 -1
- package/dist/adapters/local.js.map +1 -1
- package/dist/adapters/openrouter.d.ts.map +1 -1
- package/dist/adapters/openrouter.js +2 -1
- package/dist/adapters/openrouter.js.map +1 -1
- package/dist/adapters/processRegistry.d.ts.map +1 -1
- package/dist/adapters/processRegistry.js +8 -0
- package/dist/adapters/processRegistry.js.map +1 -1
- package/dist/adapters/types.d.ts +2 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/agents/pairPipeline.d.ts +10 -139
- package/dist/agents/pairPipeline.d.ts.map +1 -1
- package/dist/agents/pairPipeline.js +127 -35
- package/dist/agents/pairPipeline.js.map +1 -1
- package/dist/agents/pairPipelineTypes.d.ts +109 -0
- package/dist/agents/pairPipelineTypes.d.ts.map +1 -0
- package/dist/agents/pairPipelineTypes.js +2 -0
- package/dist/agents/pairPipelineTypes.js.map +1 -0
- package/dist/agents/pipelineGuards.d.ts.map +1 -1
- package/dist/agents/pipelineGuards.js +346 -0
- package/dist/agents/pipelineGuards.js.map +1 -1
- package/dist/agents/pipelineTaskPrefix.d.ts +3 -0
- package/dist/agents/pipelineTaskPrefix.d.ts.map +1 -0
- package/dist/agents/pipelineTaskPrefix.js +16 -0
- package/dist/agents/pipelineTaskPrefix.js.map +1 -0
- package/dist/agents/reflection.d.ts +1 -1
- package/dist/agents/reflection.d.ts.map +1 -1
- package/dist/agents/reflection.js +3 -1
- package/dist/agents/reflection.js.map +1 -1
- package/dist/agents/reviewer.d.ts +6 -0
- package/dist/agents/reviewer.d.ts.map +1 -1
- package/dist/agents/reviewer.js +4 -1
- package/dist/agents/reviewer.js.map +1 -1
- package/dist/agents/stageErrorClassification.d.ts +16 -0
- package/dist/agents/stageErrorClassification.d.ts.map +1 -0
- package/dist/agents/stageErrorClassification.js +38 -0
- package/dist/agents/stageErrorClassification.js.map +1 -0
- package/dist/agents/stageModelResolver.d.ts +8 -0
- package/dist/agents/stageModelResolver.d.ts.map +1 -0
- package/dist/agents/stageModelResolver.js +22 -0
- package/dist/agents/stageModelResolver.js.map +1 -0
- package/dist/agents/worker.d.ts +33 -0
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +62 -5
- package/dist/agents/worker.js.map +1 -1
- package/dist/agents/workerFanout.d.ts +38 -0
- package/dist/agents/workerFanout.d.ts.map +1 -0
- package/dist/agents/workerFanout.js +277 -0
- package/dist/agents/workerFanout.js.map +1 -0
- package/dist/agents/workerFanoutGate.d.ts +48 -0
- package/dist/agents/workerFanoutGate.d.ts.map +1 -0
- package/dist/agents/workerFanoutGate.js +146 -0
- package/dist/agents/workerFanoutGate.js.map +1 -0
- package/dist/agents/workerValidationEvidence.d.ts +5 -0
- package/dist/agents/workerValidationEvidence.d.ts.map +1 -0
- package/dist/agents/workerValidationEvidence.js +75 -0
- package/dist/agents/workerValidationEvidence.js.map +1 -0
- package/dist/auth/linearPkce.d.ts.map +1 -1
- package/dist/auth/linearPkce.js +1 -12
- package/dist/auth/linearPkce.js.map +1 -1
- package/dist/auth/oauthPkce.d.ts.map +1 -1
- package/dist/auth/oauthPkce.js +1 -14
- package/dist/auth/oauthPkce.js.map +1 -1
- package/dist/auth/oauthStore.d.ts.map +1 -1
- package/dist/auth/oauthStore.js +28 -2
- package/dist/auth/oauthStore.js.map +1 -1
- package/dist/auth/openBrowser.d.ts +2 -0
- package/dist/auth/openBrowser.d.ts.map +1 -0
- package/dist/auth/openBrowser.js +32 -0
- package/dist/auth/openBrowser.js.map +1 -0
- package/dist/auth/openrouterPkce.d.ts.map +1 -1
- package/dist/auth/openrouterPkce.js +1 -14
- package/dist/auth/openrouterPkce.js.map +1 -1
- package/dist/automation/autonomousRunner.d.ts +24 -6
- package/dist/automation/autonomousRunner.d.ts.map +1 -1
- package/dist/automation/autonomousRunner.js +242 -41
- package/dist/automation/autonomousRunner.js.map +1 -1
- package/dist/automation/backlogGrooming.d.ts +52 -0
- package/dist/automation/backlogGrooming.d.ts.map +1 -0
- package/dist/automation/backlogGrooming.js +231 -0
- package/dist/automation/backlogGrooming.js.map +1 -0
- package/dist/automation/runnerExecution.d.ts +1 -1
- package/dist/automation/runnerExecution.d.ts.map +1 -1
- package/dist/automation/runnerExecution.js +31 -9
- package/dist/automation/runnerExecution.js.map +1 -1
- package/dist/automation/runnerTypes.d.ts +3 -1
- package/dist/automation/runnerTypes.d.ts.map +1 -1
- package/dist/automation/taskSource.d.ts +6 -3
- package/dist/automation/taskSource.d.ts.map +1 -1
- package/dist/automation/taskSource.js +5 -0
- package/dist/automation/taskSource.js.map +1 -1
- package/dist/cli/daemon.d.ts +20 -3
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +42 -2
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/fixBoard.d.ts +14 -0
- package/dist/cli/fixBoard.d.ts.map +1 -0
- package/dist/cli/fixBoard.js +32 -0
- package/dist/cli/fixBoard.js.map +1 -0
- package/dist/cli/fixCommand.d.ts +8 -0
- package/dist/cli/fixCommand.d.ts.map +1 -1
- package/dist/cli/fixCommand.js +47 -8
- package/dist/cli/fixCommand.js.map +1 -1
- package/dist/cli/memoryCommand.d.ts +37 -0
- package/dist/cli/memoryCommand.d.ts.map +1 -0
- package/dist/cli/memoryCommand.js +156 -0
- package/dist/cli/memoryCommand.js.map +1 -0
- package/dist/cli/reviewAudit.d.ts +68 -0
- package/dist/cli/reviewAudit.d.ts.map +1 -1
- package/dist/cli/reviewAudit.js +147 -4
- package/dist/cli/reviewAudit.js.map +1 -1
- package/dist/cli/reviewMaxCommand.d.ts +2 -0
- package/dist/cli/reviewMaxCommand.d.ts.map +1 -1
- package/dist/cli/reviewMaxCommand.js +61 -33
- package/dist/cli/reviewMaxCommand.js.map +1 -1
- package/dist/cli.js +68 -13
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +413 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +51 -5
- package/dist/core/config.js.map +1 -1
- package/dist/core/eventHub.d.ts +22 -0
- package/dist/core/eventHub.d.ts.map +1 -1
- package/dist/core/eventHub.js +1 -0
- package/dist/core/eventHub.js.map +1 -1
- package/dist/core/providerOverride.d.ts +9 -0
- package/dist/core/providerOverride.d.ts.map +1 -1
- package/dist/core/providerOverride.js +12 -0
- package/dist/core/providerOverride.js.map +1 -1
- package/dist/core/service.d.ts.map +1 -1
- package/dist/core/service.js +8 -2
- package/dist/core/service.js.map +1 -1
- package/dist/core/types.d.ts +61 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/linear/linear.d.ts +2 -1
- package/dist/linear/linear.d.ts.map +1 -1
- package/dist/linear/linear.js +34 -12
- package/dist/linear/linear.js.map +1 -1
- package/dist/linear/projectUpdater.d.ts.map +1 -1
- package/dist/linear/projectUpdater.js +40 -13
- package/dist/linear/projectUpdater.js.map +1 -1
- package/dist/locale/prompts/en.d.ts.map +1 -1
- package/dist/locale/prompts/en.js +15 -5
- package/dist/locale/prompts/en.js.map +1 -1
- package/dist/locale/prompts/ko.d.ts.map +1 -1
- package/dist/locale/prompts/ko.js +15 -5
- package/dist/locale/prompts/ko.js.map +1 -1
- package/dist/mcp/mcpClient.d.ts.map +1 -1
- package/dist/mcp/mcpClient.js +85 -4
- package/dist/mcp/mcpClient.js.map +1 -1
- package/dist/memory/compaction.d.ts +2 -2
- package/dist/memory/compaction.d.ts.map +1 -1
- package/dist/memory/compaction.js +22 -17
- package/dist/memory/compaction.js.map +1 -1
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.js +3 -3
- package/dist/memory/memoryCore.d.ts +16 -27
- package/dist/memory/memoryCore.d.ts.map +1 -1
- package/dist/memory/memoryCore.js +160 -102
- package/dist/memory/memoryCore.js.map +1 -1
- package/dist/memory/memoryFilters.d.ts +8 -0
- package/dist/memory/memoryFilters.d.ts.map +1 -0
- package/dist/memory/memoryFilters.js +26 -0
- package/dist/memory/memoryFilters.js.map +1 -0
- package/dist/memory/memoryOps.d.ts +7 -23
- package/dist/memory/memoryOps.d.ts.map +1 -1
- package/dist/memory/memoryOps.js +54 -117
- package/dist/memory/memoryOps.js.map +1 -1
- package/dist/memory/repoKnowledge.d.ts.map +1 -1
- package/dist/memory/repoKnowledge.js +48 -3
- package/dist/memory/repoKnowledge.js.map +1 -1
- package/dist/notify/notifier.d.ts.map +1 -1
- package/dist/notify/notifier.js +23 -16
- package/dist/notify/notifier.js.map +1 -1
- package/dist/orchestration/conflictDetector.d.ts.map +1 -1
- package/dist/orchestration/conflictDetector.js +48 -12
- package/dist/orchestration/conflictDetector.js.map +1 -1
- package/dist/orchestration/taskParser.d.ts.map +1 -1
- package/dist/orchestration/taskParser.js +18 -7
- package/dist/orchestration/taskParser.js.map +1 -1
- package/dist/orchestration/taskScheduler.d.ts +5 -0
- package/dist/orchestration/taskScheduler.d.ts.map +1 -1
- package/dist/orchestration/taskScheduler.js +37 -12
- package/dist/orchestration/taskScheduler.js.map +1 -1
- package/dist/registry/bsDetector.d.ts.map +1 -1
- package/dist/registry/bsDetector.js +23 -3
- package/dist/registry/bsDetector.js.map +1 -1
- package/dist/registry/entityScanner.d.ts.map +1 -1
- package/dist/registry/entityScanner.js +10 -5
- package/dist/registry/entityScanner.js.map +1 -1
- package/dist/registry/graphql/resolvers.d.ts +1 -1
- package/dist/registry/graphql/resolvers.d.ts.map +1 -1
- package/dist/registry/graphql/resolvers.js +92 -15
- package/dist/registry/graphql/resolvers.js.map +1 -1
- package/dist/registry/memoryBridge.js +4 -4
- package/dist/registry/memoryBridge.js.map +1 -1
- package/dist/registry/sqliteStore.d.ts +1 -1
- package/dist/registry/sqliteStore.d.ts.map +1 -1
- package/dist/registry/sqliteStore.js +20 -5
- package/dist/registry/sqliteStore.js.map +1 -1
- package/dist/support/chatMemory.js +1 -1
- package/dist/support/chatMemory.js.map +1 -1
- package/dist/support/dashboardHtml.d.ts +1 -1
- package/dist/support/dashboardHtml.d.ts.map +1 -1
- package/dist/support/dashboardHtml.js +12 -0
- package/dist/support/dashboardHtml.js.map +1 -1
- package/dist/support/gitTracker.d.ts +30 -3
- package/dist/support/gitTracker.d.ts.map +1 -1
- package/dist/support/gitTracker.js +108 -29
- package/dist/support/gitTracker.js.map +1 -1
- package/dist/support/projectMapper.d.ts.map +1 -1
- package/dist/support/projectMapper.js +5 -0
- package/dist/support/projectMapper.js.map +1 -1
- package/dist/support/repoMetadata.d.ts +10 -0
- package/dist/support/repoMetadata.d.ts.map +1 -1
- package/dist/support/repoMetadata.js +31 -0
- package/dist/support/repoMetadata.js.map +1 -1
- package/dist/support/rollback.d.ts.map +1 -1
- package/dist/support/rollback.js +10 -3
- package/dist/support/rollback.js.map +1 -1
- package/dist/support/timeWindow.d.ts.map +1 -1
- package/dist/support/timeWindow.js +46 -40
- package/dist/support/timeWindow.js.map +1 -1
- package/dist/support/updateNotifier.d.ts +12 -0
- package/dist/support/updateNotifier.d.ts.map +1 -1
- package/dist/support/updateNotifier.js +71 -0
- package/dist/support/updateNotifier.js.map +1 -1
- package/dist/support/web.d.ts.map +1 -1
- package/dist/support/web.js +74 -8
- package/dist/support/web.js.map +1 -1
- package/dist/support/worktreeManager.d.ts +33 -0
- package/dist/support/worktreeManager.d.ts.map +1 -1
- package/dist/support/worktreeManager.js +172 -2
- package/dist/support/worktreeManager.js.map +1 -1
- package/dist/taskState/store.d.ts.map +1 -1
- package/dist/taskState/store.js +2 -3
- package/dist/taskState/store.js.map +1 -1
- package/dist/tui/App.js +1 -1
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/chatModel.d.ts +2 -4
- package/dist/tui/chatModel.d.ts.map +1 -1
- package/dist/tui/chatModel.js +5 -10
- package/dist/tui/chatModel.js.map +1 -1
- package/dist/tui/components/AuditBoard.d.ts +3 -2
- package/dist/tui/components/AuditBoard.d.ts.map +1 -1
- package/dist/tui/components/AuditBoard.js +13 -4
- package/dist/tui/components/AuditBoard.js.map +1 -1
- package/dist/tui/components/ChatInput.js +1 -1
- package/dist/tui/components/ChatLog.js +1 -1
- package/dist/tui/components/ChatLog.js.map +1 -1
- package/dist/tui/components/DataTable.d.ts +3 -1
- package/dist/tui/components/DataTable.d.ts.map +1 -1
- package/dist/tui/components/DataTable.js +22 -4
- package/dist/tui/components/DataTable.js.map +1 -1
- package/dist/tui/components/LiveLog.js +1 -1
- package/dist/tui/components/LiveLog.js.map +1 -1
- package/dist/tui/components/StageTimeline.d.ts +1 -1
- package/dist/tui/components/StageTimeline.d.ts.map +1 -1
- package/dist/tui/components/StageTimeline.js +6 -3
- package/dist/tui/components/StageTimeline.js.map +1 -1
- package/dist/tui/components/SubagentTree.d.ts +6 -6
- package/dist/tui/components/SubagentTree.d.ts.map +1 -1
- package/dist/tui/components/SubagentTree.js +39 -7
- package/dist/tui/components/SubagentTree.js.map +1 -1
- package/dist/tui/eventCoalescer.d.ts +29 -0
- package/dist/tui/eventCoalescer.d.ts.map +1 -0
- package/dist/tui/eventCoalescer.js +56 -0
- package/dist/tui/eventCoalescer.js.map +1 -0
- package/dist/tui/hooks/useMonitor.d.ts +3 -1
- package/dist/tui/hooks/useMonitor.d.ts.map +1 -1
- package/dist/tui/hooks/useMonitor.js +17 -1
- package/dist/tui/hooks/useMonitor.js.map +1 -1
- package/dist/tui/hooks/usePipelineEvents.d.ts +1 -1
- package/dist/tui/hooks/usePipelineEvents.d.ts.map +1 -1
- package/dist/tui/hooks/usePipelineEvents.js +18 -4
- package/dist/tui/hooks/usePipelineEvents.js.map +1 -1
- package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/tui/hooks/useTerminalSize.js +3 -1
- package/dist/tui/hooks/useTerminalSize.js.map +1 -1
- package/dist/tui/monitorApi.d.ts +4 -4
- package/dist/tui/monitorApi.d.ts.map +1 -1
- package/dist/tui/monitorApi.js +13 -7
- package/dist/tui/monitorApi.js.map +1 -1
- package/dist/tui/monitorRows.d.ts +41 -2
- package/dist/tui/monitorRows.d.ts.map +1 -1
- package/dist/tui/monitorRows.js +86 -7
- package/dist/tui/monitorRows.js.map +1 -1
- package/dist/tui/panels/ChatPanel.d.ts.map +1 -1
- package/dist/tui/panels/ChatPanel.js +70 -15
- package/dist/tui/panels/ChatPanel.js.map +1 -1
- package/dist/tui/panels/MonitorPanel.d.ts +2 -1
- package/dist/tui/panels/MonitorPanel.d.ts.map +1 -1
- package/dist/tui/panels/MonitorPanel.js +2 -2
- package/dist/tui/panels/MonitorPanel.js.map +1 -1
- package/dist/tui/panels/PipelinePanel.d.ts.map +1 -1
- package/dist/tui/panels/PipelinePanel.js +6 -1
- package/dist/tui/panels/PipelinePanel.js.map +1 -1
- package/dist/tui/pipelineEvents.d.ts +14 -0
- package/dist/tui/pipelineEvents.d.ts.map +1 -1
- package/dist/tui/pipelineEvents.js +89 -1
- package/dist/tui/pipelineEvents.js.map +1 -1
- package/dist/tui/sse.d.ts.map +1 -1
- package/dist/tui/sse.js +29 -3
- package/dist/tui/sse.js.map +1 -1
- package/dist/tui/subagentTree.d.ts +26 -3
- package/dist/tui/subagentTree.d.ts.map +1 -1
- package/dist/tui/subagentTree.js +89 -14
- package/dist/tui/subagentTree.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
type TimerHandle = ReturnType<typeof setTimeout>;
|
|
2
|
+
export interface Coalescer<T> {
|
|
3
|
+
/** Buffer an item; schedules a trailing flush if none is pending. */
|
|
4
|
+
push(item: T): void;
|
|
5
|
+
/** Immediately flush any buffered items (no-op when empty). */
|
|
6
|
+
flush(): void;
|
|
7
|
+
/** Drop buffered items and cancel a pending flush. */
|
|
8
|
+
cancel(): void;
|
|
9
|
+
/** Buffered-but-not-yet-flushed count (introspection/tests). */
|
|
10
|
+
pending(): number;
|
|
11
|
+
}
|
|
12
|
+
export interface CoalescerOptions<T> {
|
|
13
|
+
/** Receives the batch (in push order) on each flush. Never called with []. */
|
|
14
|
+
onFlush: (items: T[]) => void;
|
|
15
|
+
/** Max time an item waits before flushing. `<= 0` flushes synchronously on push. */
|
|
16
|
+
delayMs: number;
|
|
17
|
+
/** Injectable timer (defaults to global setTimeout) — swapped in tests. */
|
|
18
|
+
setTimer?: (cb: () => void, ms: number) => TimerHandle;
|
|
19
|
+
/** Injectable clear (defaults to global clearTimeout). */
|
|
20
|
+
clearTimer?: (handle: TimerHandle) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a trailing-edge coalescer: the first `push` schedules a flush in
|
|
24
|
+
* `delayMs`; further pushes within that window accumulate without rescheduling,
|
|
25
|
+
* so throughput is bounded to one flush per `delayMs` and latency to `delayMs`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createCoalescer<T>(options: CoalescerOptions<T>): Coalescer<T>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=eventCoalescer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventCoalescer.d.ts","sourceRoot":"","sources":["../../src/tui/eventCoalescer.ts"],"names":[],"mappings":"AASA,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAEjD,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,qEAAqE;IACrE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,+DAA+D;IAC/D,KAAK,IAAI,IAAI,CAAC;IACd,sDAAsD;IACtD,MAAM,IAAI,IAAI,CAAC;IACf,gEAAgE;IAChE,OAAO,IAAI,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,8EAA8E;IAC9E,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAC9B,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,WAAW,CAAC;IACvD,0DAA0D;IAC1D,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAyC7E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// OpenSwarm - Event coalescer (INT-2407)
|
|
3
|
+
// Buffers a burst of items and flushes them as one batch at most once per
|
|
4
|
+
// `delayMs`, so rapid SSE events cause a single re-render instead of N. In the
|
|
5
|
+
// alternate-screen buffer every React commit repaints the whole frame, so N
|
|
6
|
+
// per-event commits = N visible erase/redraws = flicker. Pure (timer injectable)
|
|
7
|
+
// — unit-tested without React/ink.
|
|
8
|
+
// ============================================
|
|
9
|
+
/**
|
|
10
|
+
* Create a trailing-edge coalescer: the first `push` schedules a flush in
|
|
11
|
+
* `delayMs`; further pushes within that window accumulate without rescheduling,
|
|
12
|
+
* so throughput is bounded to one flush per `delayMs` and latency to `delayMs`.
|
|
13
|
+
*/
|
|
14
|
+
export function createCoalescer(options) {
|
|
15
|
+
const setTimer = options.setTimer ?? ((cb, ms) => setTimeout(cb, ms));
|
|
16
|
+
const clearTimer = options.clearTimer ?? ((handle) => clearTimeout(handle));
|
|
17
|
+
let buffer = [];
|
|
18
|
+
let timer = null;
|
|
19
|
+
const emit = () => {
|
|
20
|
+
timer = null;
|
|
21
|
+
if (buffer.length === 0)
|
|
22
|
+
return;
|
|
23
|
+
const batch = buffer;
|
|
24
|
+
buffer = [];
|
|
25
|
+
options.onFlush(batch);
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
push(item) {
|
|
29
|
+
buffer.push(item);
|
|
30
|
+
if (options.delayMs <= 0) {
|
|
31
|
+
emit();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (timer === null)
|
|
35
|
+
timer = setTimer(emit, options.delayMs);
|
|
36
|
+
},
|
|
37
|
+
flush() {
|
|
38
|
+
if (timer !== null) {
|
|
39
|
+
clearTimer(timer);
|
|
40
|
+
timer = null;
|
|
41
|
+
}
|
|
42
|
+
emit();
|
|
43
|
+
},
|
|
44
|
+
cancel() {
|
|
45
|
+
if (timer !== null) {
|
|
46
|
+
clearTimer(timer);
|
|
47
|
+
timer = null;
|
|
48
|
+
}
|
|
49
|
+
buffer = [];
|
|
50
|
+
},
|
|
51
|
+
pending() {
|
|
52
|
+
return buffer.length;
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=eventCoalescer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventCoalescer.js","sourceRoot":"","sources":["../../src/tui/eventCoalescer.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,yCAAyC;AACzC,0EAA0E;AAC1E,+EAA+E;AAC/E,4EAA4E;AAC5E,iFAAiF;AACjF,mCAAmC;AACnC,+CAA+C;AA0B/C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAI,OAA4B;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,IAAI,MAAM,GAAQ,EAAE,CAAC;IACrB,IAAI,KAAK,GAAuB,IAAI,CAAC;IAErC,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,KAAK,GAAG,IAAI,CAAC;QACb,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC;QACrB,MAAM,GAAG,EAAE,CAAC;QACZ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,CAAC,IAAI;YACP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;YACD,IAAI,KAAK,KAAK,IAAI;gBAAE,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK;YACH,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;YACD,IAAI,EAAE,CAAC;QACT,CAAC;QACD,MAAM;YACJ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;YACD,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QACD,OAAO;YACL,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -4,5 +4,7 @@ export interface MonitorResult {
|
|
|
4
4
|
error: string | null;
|
|
5
5
|
loading: boolean;
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
type MonitorFetcher = (port: number, signal?: AbortSignal) => Promise<Table>;
|
|
8
|
+
export declare function useMonitor(port: number | undefined, fetcher: MonitorFetcher, intervalMs?: number): MonitorResult;
|
|
9
|
+
export {};
|
|
8
10
|
//# sourceMappingURL=useMonitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMonitor.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useMonitor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"useMonitor.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useMonitor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;AAE7E,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,cAAc,EACvB,UAAU,SAAO,GAChB,aAAa,CAiDf"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// it renders are pure + tested.
|
|
5
5
|
// ============================================
|
|
6
6
|
import { useEffect, useState } from 'react';
|
|
7
|
+
const MONITOR_REQUEST_TIMEOUT_MS = 15_000;
|
|
7
8
|
export function useMonitor(port, fetcher, intervalMs = 5000) {
|
|
8
9
|
const [table, setTable] = useState(null);
|
|
9
10
|
const [error, setError] = useState(null);
|
|
@@ -13,13 +14,24 @@ export function useMonitor(port, fetcher, intervalMs = 5000) {
|
|
|
13
14
|
return;
|
|
14
15
|
let cancelled = false;
|
|
15
16
|
let inFlight = false;
|
|
17
|
+
let activeController = null;
|
|
16
18
|
const load = async () => {
|
|
17
19
|
if (inFlight)
|
|
18
20
|
return;
|
|
19
21
|
inFlight = true;
|
|
22
|
+
const controller = new AbortController();
|
|
23
|
+
activeController = controller;
|
|
20
24
|
setLoading(true);
|
|
25
|
+
const onAbort = new Promise((_, reject) => {
|
|
26
|
+
controller.signal.addEventListener('abort', () => {
|
|
27
|
+
reject(controller.signal.reason instanceof Error ? controller.signal.reason : new Error('monitor request aborted'));
|
|
28
|
+
}, { once: true });
|
|
29
|
+
});
|
|
30
|
+
const timeout = setTimeout(() => {
|
|
31
|
+
controller.abort(new Error(`monitor request timed out after ${MONITOR_REQUEST_TIMEOUT_MS}ms`));
|
|
32
|
+
}, MONITOR_REQUEST_TIMEOUT_MS);
|
|
21
33
|
try {
|
|
22
|
-
const t = await fetcher(port);
|
|
34
|
+
const t = await Promise.race([fetcher(port, controller.signal), onAbort]);
|
|
23
35
|
if (!cancelled) {
|
|
24
36
|
setTable(t);
|
|
25
37
|
setError(null);
|
|
@@ -30,6 +42,9 @@ export function useMonitor(port, fetcher, intervalMs = 5000) {
|
|
|
30
42
|
setError(e instanceof Error ? e.message : String(e));
|
|
31
43
|
}
|
|
32
44
|
finally {
|
|
45
|
+
clearTimeout(timeout);
|
|
46
|
+
if (activeController === controller)
|
|
47
|
+
activeController = null;
|
|
33
48
|
inFlight = false;
|
|
34
49
|
if (!cancelled)
|
|
35
50
|
setLoading(false);
|
|
@@ -39,6 +54,7 @@ export function useMonitor(port, fetcher, intervalMs = 5000) {
|
|
|
39
54
|
const timer = setInterval(() => void load(), intervalMs);
|
|
40
55
|
return () => {
|
|
41
56
|
cancelled = true;
|
|
57
|
+
activeController?.abort();
|
|
42
58
|
clearInterval(timer);
|
|
43
59
|
};
|
|
44
60
|
}, [port, fetcher, intervalMs]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMonitor.js","sourceRoot":"","sources":["../../../src/tui/hooks/useMonitor.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,uDAAuD;AACvD,gFAAgF;AAChF,gCAAgC;AAChC,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useMonitor.js","sourceRoot":"","sources":["../../../src/tui/hooks/useMonitor.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,uDAAuD;AACvD,gFAAgF;AAChF,gCAAgC;AAChC,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAU1C,MAAM,UAAU,UAAU,CACxB,IAAwB,EACxB,OAAuB,EACvB,UAAU,GAAG,IAAI;IAEjB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,gBAAgB,GAA2B,IAAI,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,gBAAgB,GAAG,UAAU,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/C,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC/C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBACtH,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,mCAAmC,0BAA0B,IAAI,CAAC,CAAC,CAAC;YACjG,CAAC,EAAE,0BAA0B,CAAC,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACZ,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,SAAS;oBAAE,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,gBAAgB,KAAK,UAAU;oBAAE,gBAAgB,GAAG,IAAI,CAAC;gBAC7D,QAAQ,GAAG,KAAK,CAAC;gBACjB,IAAI,CAAC,SAAS;oBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;QACF,KAAK,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,gBAAgB,EAAE,KAAK,EAAE,CAAC;YAC1B,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAEhC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -2,5 +2,5 @@ import { type PipelineState } from '../pipelineEvents.js';
|
|
|
2
2
|
export interface PipelineEventsResult extends PipelineState {
|
|
3
3
|
connected: boolean;
|
|
4
4
|
}
|
|
5
|
-
export declare function usePipelineEvents(port: number | undefined): PipelineEventsResult;
|
|
5
|
+
export declare function usePipelineEvents(port: number | undefined, flushMs?: number): PipelineEventsResult;
|
|
6
6
|
//# sourceMappingURL=usePipelineEvents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePipelineEvents.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/usePipelineEvents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePipelineEvents.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/usePipelineEvents.ts"],"names":[],"mappings":"AAWA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,SAAS,EAAE,OAAO,CAAC;CACpB;AAkBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,GAAE,MAAyB,GACjC,oBAAoB,CAuBtB"}
|
|
@@ -6,13 +6,20 @@
|
|
|
6
6
|
// ============================================
|
|
7
7
|
import { useEffect, useReducer, useState } from 'react';
|
|
8
8
|
import { connectEventStream } from '../sse.js';
|
|
9
|
-
import {
|
|
9
|
+
import { createCoalescer } from '../eventCoalescer.js';
|
|
10
|
+
import { reducePipelineEvent, reducePipelineEvents, initialPipelineState, } from '../pipelineEvents.js';
|
|
11
|
+
// Coalesce SSE bursts into at most one repaint per window. In the alternate
|
|
12
|
+
// screen every commit repaints the whole frame, so dispatching per event made
|
|
13
|
+
// the Pipeline tab flicker on every log/stage event. (INT-2407)
|
|
14
|
+
const DEFAULT_FLUSH_MS = 90;
|
|
10
15
|
function pipelineReducer(state, action) {
|
|
11
16
|
if (action.type === 'reset')
|
|
12
17
|
return initialPipelineState;
|
|
18
|
+
if (action.type === 'batch')
|
|
19
|
+
return reducePipelineEvents(state, action.events);
|
|
13
20
|
return reducePipelineEvent(state, action);
|
|
14
21
|
}
|
|
15
|
-
export function usePipelineEvents(port) {
|
|
22
|
+
export function usePipelineEvents(port, flushMs = DEFAULT_FLUSH_MS) {
|
|
16
23
|
const [state, dispatch] = useReducer(pipelineReducer, initialPipelineState);
|
|
17
24
|
const [connected, setConnected] = useState(false);
|
|
18
25
|
useEffect(() => {
|
|
@@ -20,12 +27,19 @@ export function usePipelineEvents(port) {
|
|
|
20
27
|
setConnected(false);
|
|
21
28
|
if (!port)
|
|
22
29
|
return;
|
|
23
|
-
|
|
30
|
+
// Buffer events and flush a single batched dispatch per window; connection
|
|
31
|
+
// status stays immediate (not coalesced) so the live indicator is snappy.
|
|
32
|
+
const coalescer = createCoalescer({
|
|
33
|
+
delayMs: flushMs,
|
|
34
|
+
onFlush: (events) => dispatch({ type: 'batch', events }),
|
|
35
|
+
});
|
|
36
|
+
const handle = connectEventStream({ port, onEvent: (e) => coalescer.push(e), onStatus: setConnected });
|
|
24
37
|
return () => {
|
|
25
38
|
setConnected(false);
|
|
39
|
+
coalescer.cancel();
|
|
26
40
|
handle.close();
|
|
27
41
|
};
|
|
28
|
-
}, [port]);
|
|
42
|
+
}, [port, flushMs]);
|
|
29
43
|
return { ...state, connected };
|
|
30
44
|
}
|
|
31
45
|
//# sourceMappingURL=usePipelineEvents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePipelineEvents.js","sourceRoot":"","sources":["../../../src/tui/hooks/usePipelineEvents.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,8DAA8D;AAC9D,4EAA4E;AAC5E,4EAA4E;AAC5E,kDAAkD;AAClD,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"usePipelineEvents.js","sourceRoot":"","sources":["../../../src/tui/hooks/usePipelineEvents.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,8DAA8D;AAC9D,4EAA4E;AAC5E,4EAA4E;AAC5E,kDAAkD;AAClD,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAM9B,4EAA4E;AAC5E,8EAA8E;AAC9E,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAO5B,SAAS,eAAe,CAAC,KAAoB,EAAE,MAAsB;IACnE,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,oBAAoB,CAAC;IACzD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAwB,EACxB,UAAkB,gBAAgB;IAElC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;IAC5E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,SAAS,GAAG,eAAe,CAAW;YAC1C,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACvG,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,IAAI,YAAY,CAmB9C"}
|
|
@@ -13,9 +13,11 @@ export function useTerminalSize() {
|
|
|
13
13
|
rows: stdout?.rows ?? 24,
|
|
14
14
|
});
|
|
15
15
|
useEffect(() => {
|
|
16
|
+
const readSize = () => ({ columns: stdout?.columns ?? 80, rows: stdout?.rows ?? 24 });
|
|
17
|
+
setSize(readSize());
|
|
16
18
|
if (!stdout)
|
|
17
19
|
return;
|
|
18
|
-
const onResize = () => setSize(
|
|
20
|
+
const onResize = () => setSize(readSize());
|
|
19
21
|
stdout.on('resize', onResize);
|
|
20
22
|
return () => {
|
|
21
23
|
stdout.off('resize', onResize);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/tui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,4DAA4D;AAC5D,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAO5C,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAe;QAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;QAC9B,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,
|
|
1
|
+
{"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/tui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,4DAA4D;AAC5D,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAO5C,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAe;QAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;QAC9B,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/tui/monitorApi.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Table } from './monitorRows.js';
|
|
2
|
-
export declare function fetchProjects(port: number): Promise<Table>;
|
|
3
|
-
export declare function fetchTasks(port: number): Promise<Table>;
|
|
4
|
-
export declare function fetchStuck(port: number): Promise<Table>;
|
|
5
|
-
export declare function fetchIssues(port: number): Promise<Table>;
|
|
2
|
+
export declare function fetchProjects(port: number, signal?: AbortSignal): Promise<Table>;
|
|
3
|
+
export declare function fetchTasks(port: number, signal?: AbortSignal): Promise<Table>;
|
|
4
|
+
export declare function fetchStuck(port: number, signal?: AbortSignal): Promise<Table>;
|
|
5
|
+
export declare function fetchIssues(port: number, signal?: AbortSignal): Promise<Table>;
|
|
6
6
|
//# sourceMappingURL=monitorApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitorApi.d.ts","sourceRoot":"","sources":["../../src/tui/monitorApi.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"monitorApi.d.ts","sourceRoot":"","sources":["../../src/tui/monitorApi.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAwB7G,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAItF;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAKnF;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAKnF;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAapF"}
|
package/dist/tui/monitorApi.js
CHANGED
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
// ============================================
|
|
6
6
|
import { projectsToTable, pipelineToTable, stuckToTable, issuesToTable } from './monitorRows.js';
|
|
7
7
|
const base = (port) => `http://127.0.0.1:${port}`;
|
|
8
|
+
const MONITOR_FETCH_TIMEOUT_MS = 15_000;
|
|
9
|
+
function timeoutSignal(signal) {
|
|
10
|
+
const timeout = AbortSignal.timeout(MONITOR_FETCH_TIMEOUT_MS);
|
|
11
|
+
return signal ? AbortSignal.any([signal, timeout]) : timeout;
|
|
12
|
+
}
|
|
8
13
|
async function assertOk(res, label) {
|
|
9
14
|
if (res.ok)
|
|
10
15
|
return;
|
|
@@ -22,27 +27,28 @@ async function assertOk(res, label) {
|
|
|
22
27
|
}
|
|
23
28
|
throw new Error(`${label} failed: HTTP ${res.status}: ${message}`);
|
|
24
29
|
}
|
|
25
|
-
export async function fetchProjects(port) {
|
|
26
|
-
const res = await fetch(`${base(port)}/api/projects
|
|
30
|
+
export async function fetchProjects(port, signal) {
|
|
31
|
+
const res = await fetch(`${base(port)}/api/projects`, { signal: timeoutSignal(signal) });
|
|
27
32
|
await assertOk(res, 'GET /api/projects');
|
|
28
33
|
return projectsToTable(await res.json());
|
|
29
34
|
}
|
|
30
|
-
export async function fetchTasks(port) {
|
|
31
|
-
const res = await fetch(`${base(port)}/api/pipeline
|
|
35
|
+
export async function fetchTasks(port, signal) {
|
|
36
|
+
const res = await fetch(`${base(port)}/api/pipeline`, { signal: timeoutSignal(signal) });
|
|
32
37
|
await assertOk(res, 'GET /api/pipeline');
|
|
33
38
|
const { stages } = (await res.json());
|
|
34
39
|
return pipelineToTable((stages ?? []));
|
|
35
40
|
}
|
|
36
|
-
export async function fetchStuck(port) {
|
|
37
|
-
const res = await fetch(`${base(port)}/api/stuck-issues
|
|
41
|
+
export async function fetchStuck(port, signal) {
|
|
42
|
+
const res = await fetch(`${base(port)}/api/stuck-issues`, { signal: timeoutSignal(signal) });
|
|
38
43
|
await assertOk(res, 'GET /api/stuck-issues');
|
|
39
44
|
const { stuckIssues, failedIssues } = (await res.json());
|
|
40
45
|
return stuckToTable(stuckIssues ?? [], failedIssues ?? []);
|
|
41
46
|
}
|
|
42
|
-
export async function fetchIssues(port) {
|
|
47
|
+
export async function fetchIssues(port, signal) {
|
|
43
48
|
const res = await fetch(`${base(port)}/graphql`, {
|
|
44
49
|
method: 'POST',
|
|
45
50
|
headers: { 'Content-Type': 'application/json' },
|
|
51
|
+
signal: timeoutSignal(signal),
|
|
46
52
|
body: JSON.stringify({
|
|
47
53
|
query: '{ issues(filter: { limit: 50 }) { issues { id title status priority } total } }',
|
|
48
54
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitorApi.js","sourceRoot":"","sources":["../../src/tui/monitorApi.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,+DAA+D;AAC/D,4EAA4E;AAC5E,6EAA6E;AAC7E,+CAA+C;AAE/C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAc,MAAM,kBAAkB,CAAC;AAE7G,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAoB,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"monitorApi.js","sourceRoot":"","sources":["../../src/tui/monitorApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,32 @@ export interface Table {
|
|
|
4
4
|
}
|
|
5
5
|
export interface ApiProject {
|
|
6
6
|
name: string;
|
|
7
|
+
linearProject?: string;
|
|
7
8
|
path: string;
|
|
8
9
|
enabled: boolean;
|
|
9
|
-
running?:
|
|
10
|
-
queued?:
|
|
10
|
+
running?: ApiTaskSummary[];
|
|
11
|
+
queued?: ApiTaskSummary[];
|
|
12
|
+
pending?: ApiTaskSummary[];
|
|
13
|
+
git?: {
|
|
14
|
+
branch?: string;
|
|
15
|
+
hasChanges?: boolean;
|
|
16
|
+
uncommittedFiles?: number;
|
|
17
|
+
ahead?: number;
|
|
18
|
+
behind?: number;
|
|
19
|
+
} | null;
|
|
20
|
+
prs?: Array<{
|
|
21
|
+
number: number;
|
|
22
|
+
branch: string;
|
|
23
|
+
title: string;
|
|
24
|
+
updatedAt?: string;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
interface ApiTaskSummary {
|
|
28
|
+
id: string;
|
|
29
|
+
title: string;
|
|
30
|
+
priority?: number | string;
|
|
31
|
+
issueIdentifier?: string;
|
|
32
|
+
linearState?: string;
|
|
11
33
|
}
|
|
12
34
|
export declare function projectsToTable(projects: ApiProject[]): Table;
|
|
13
35
|
export interface ApiPipelineEvent {
|
|
@@ -19,6 +41,15 @@ export interface ApiPipelineEvent {
|
|
|
19
41
|
model?: string;
|
|
20
42
|
title?: string;
|
|
21
43
|
issueIdentifier?: string;
|
|
44
|
+
repository?: string;
|
|
45
|
+
projectPath?: string;
|
|
46
|
+
durationMs?: number;
|
|
47
|
+
decision?: string;
|
|
48
|
+
summary?: string;
|
|
49
|
+
feedback?: string;
|
|
50
|
+
error?: string;
|
|
51
|
+
filesChangedCount?: number;
|
|
52
|
+
issuesCount?: number;
|
|
22
53
|
};
|
|
23
54
|
}
|
|
24
55
|
/** Most-recent pipeline stage events as task rows (newest first). */
|
|
@@ -31,6 +62,13 @@ export interface ApiStuckIssue {
|
|
|
31
62
|
project?: {
|
|
32
63
|
name: string;
|
|
33
64
|
};
|
|
65
|
+
state?: string;
|
|
66
|
+
labels?: string[];
|
|
67
|
+
comments?: Array<{
|
|
68
|
+
body: string;
|
|
69
|
+
createdAt: string;
|
|
70
|
+
}>;
|
|
71
|
+
stuckDays?: number;
|
|
34
72
|
}
|
|
35
73
|
export declare function stuckToTable(stuck: ApiStuckIssue[], failed: ApiStuckIssue[]): Table;
|
|
36
74
|
export interface ApiIssue {
|
|
@@ -40,4 +78,5 @@ export interface ApiIssue {
|
|
|
40
78
|
priority: number | string;
|
|
41
79
|
}
|
|
42
80
|
export declare function issuesToTable(issues: ApiIssue[]): Table;
|
|
81
|
+
export {};
|
|
43
82
|
//# sourceMappingURL=monitorRows.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitorRows.d.ts","sourceRoot":"","sources":["../../src/tui/monitorRows.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"monitorRows.d.ts","sourceRoot":"","sources":["../../src/tui/monitorRows.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/monitorRows.js
CHANGED
|
@@ -5,15 +5,64 @@
|
|
|
5
5
|
// ============================================
|
|
6
6
|
export function projectsToTable(projects) {
|
|
7
7
|
return {
|
|
8
|
-
columns: ['', 'PROJECT', 'RUN', 'QUEUE'],
|
|
8
|
+
columns: ['', 'PROJECT', 'PATH', 'GIT/WT', 'LINEAR', 'RUN', 'QUEUE', 'PEND', 'LAST'],
|
|
9
9
|
rows: projects.map((p) => [
|
|
10
10
|
p.enabled ? '●' : '○',
|
|
11
11
|
p.name,
|
|
12
|
+
compactPath(p.path),
|
|
13
|
+
gitSummary(p),
|
|
14
|
+
p.linearProject ?? '',
|
|
12
15
|
String(p.running?.length ?? 0),
|
|
13
16
|
String(p.queued?.length ?? 0),
|
|
17
|
+
String(p.pending?.length ?? 0),
|
|
18
|
+
latestProjectActivity(p),
|
|
14
19
|
]),
|
|
15
20
|
};
|
|
16
21
|
}
|
|
22
|
+
function compactPath(path) {
|
|
23
|
+
const parts = path.split('/').filter(Boolean);
|
|
24
|
+
return parts.length <= 2 ? path : `…/${parts.slice(-2).join('/')}`;
|
|
25
|
+
}
|
|
26
|
+
function gitSummary(p) {
|
|
27
|
+
const git = p.git;
|
|
28
|
+
const branch = git?.branch ?? (p.prs?.[0]?.branch);
|
|
29
|
+
if (!branch)
|
|
30
|
+
return '';
|
|
31
|
+
const dirty = git?.hasChanges ? ` +${git.uncommittedFiles ?? 0}` : '';
|
|
32
|
+
const sync = `${git?.ahead ? ` ↑${git.ahead}` : ''}${git?.behind ? ` ↓${git.behind}` : ''}`;
|
|
33
|
+
return `${branch}${dirty}${sync}`;
|
|
34
|
+
}
|
|
35
|
+
function latestProjectActivity(p) {
|
|
36
|
+
const running = p.running?.[0];
|
|
37
|
+
if (running)
|
|
38
|
+
return `run ${truncate(running.title || running.id, 18)}`;
|
|
39
|
+
const queued = p.queued?.[0];
|
|
40
|
+
if (queued)
|
|
41
|
+
return `queue ${truncate(queued.title || queued.id, 16)}`;
|
|
42
|
+
const pending = p.pending?.[0];
|
|
43
|
+
if (pending)
|
|
44
|
+
return `${pending.linearState ?? 'Todo'} ${pending.issueIdentifier ?? pending.id}`;
|
|
45
|
+
const pr = p.prs?.[0];
|
|
46
|
+
if (pr)
|
|
47
|
+
return `PR #${pr.number}`;
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
function shortModel(model) {
|
|
51
|
+
return model ? model.split('-').slice(-2).join('-') : '';
|
|
52
|
+
}
|
|
53
|
+
function elapsed(ms) {
|
|
54
|
+
if (!ms)
|
|
55
|
+
return '';
|
|
56
|
+
if (ms < 1000)
|
|
57
|
+
return `${ms}ms`;
|
|
58
|
+
return `${Math.round(ms / 1000)}s`;
|
|
59
|
+
}
|
|
60
|
+
function titleOf(data) {
|
|
61
|
+
return data.issueIdentifier || data.title || data.taskId || '';
|
|
62
|
+
}
|
|
63
|
+
function truncate(value, max) {
|
|
64
|
+
return value.length > max ? `${value.slice(0, max - 1)}…` : value;
|
|
65
|
+
}
|
|
17
66
|
const STAGE_ICON = { start: '◐', complete: '●', fail: '✗' };
|
|
18
67
|
/** Most-recent pipeline stage events as task rows (newest first). */
|
|
19
68
|
export function pipelineToTable(stages, limit = 15) {
|
|
@@ -24,20 +73,36 @@ export function pipelineToTable(stages, limit = 15) {
|
|
|
24
73
|
info.set(ev.data.taskId, ev.data.issueIdentifier || ev.data.title || ev.data.taskId);
|
|
25
74
|
}
|
|
26
75
|
else if (ev.type === 'pipeline:stage' && ev.data.taskId && ev.data.stage) {
|
|
27
|
-
events.push({ taskId: ev.data.taskId, stage: ev.data.stage, status: ev.data.status ?? ''
|
|
76
|
+
events.push({ ...ev.data, taskId: ev.data.taskId, stage: ev.data.stage, status: ev.data.status ?? '' });
|
|
28
77
|
}
|
|
29
78
|
}
|
|
30
79
|
const recent = events.slice(-limit).reverse();
|
|
31
80
|
return {
|
|
32
|
-
columns: ['TASK', 'STAGE', 'MODEL', '
|
|
81
|
+
columns: ['TASK', 'PROJECT', 'STAGE', 'MODEL', 'STATE', 'AGE', 'DETAIL'],
|
|
33
82
|
rows: recent.map((e) => [
|
|
34
|
-
(info.get(e.taskId) ?? e
|
|
83
|
+
truncate(info.get(e.taskId) ?? titleOf(e), 16),
|
|
84
|
+
e.repository ?? compactPath(e.projectPath ?? ''),
|
|
35
85
|
e.stage,
|
|
36
|
-
e.model
|
|
37
|
-
`${STAGE_ICON[e.status] ?? '○'} ${e.status}`,
|
|
86
|
+
shortModel(e.model),
|
|
87
|
+
`${STAGE_ICON[e.status] ?? '○'} ${e.status}${e.decision ? `/${e.decision}` : ''}`,
|
|
88
|
+
elapsed(e.durationMs),
|
|
89
|
+
stageDetail(e),
|
|
38
90
|
]),
|
|
39
91
|
};
|
|
40
92
|
}
|
|
93
|
+
function stageDetail(e) {
|
|
94
|
+
if (e.error)
|
|
95
|
+
return truncate(e.error, 24);
|
|
96
|
+
if (e.summary)
|
|
97
|
+
return truncate(e.summary, 24);
|
|
98
|
+
if (e.feedback)
|
|
99
|
+
return truncate(e.feedback, 24);
|
|
100
|
+
if (e.filesChangedCount != null)
|
|
101
|
+
return `${e.filesChangedCount} files`;
|
|
102
|
+
if (e.issuesCount != null)
|
|
103
|
+
return `${e.issuesCount} issues`;
|
|
104
|
+
return '';
|
|
105
|
+
}
|
|
41
106
|
const PRIO = (p) => {
|
|
42
107
|
if (typeof p === 'string') {
|
|
43
108
|
const normalized = p.toLowerCase();
|
|
@@ -51,13 +116,27 @@ export function stuckToTable(stuck, failed) {
|
|
|
51
116
|
i.identifier,
|
|
52
117
|
i.title.length > 40 ? `${i.title.slice(0, 39)}…` : i.title,
|
|
53
118
|
PRIO(i.priority),
|
|
119
|
+
i.project?.name ?? '',
|
|
54
120
|
i.reason.length > 30 ? `${i.reason.slice(0, 29)}…` : i.reason,
|
|
121
|
+
issueContext(i),
|
|
55
122
|
];
|
|
56
123
|
return {
|
|
57
|
-
columns: ['KIND', 'ID', 'TITLE', 'PRIO', 'REASON'],
|
|
124
|
+
columns: ['KIND', 'ID', 'TITLE', 'PRIO', 'PROJECT', 'REASON', 'CONTEXT'],
|
|
58
125
|
rows: [...stuck.map(row('stuck')), ...failed.map(row('failed'))],
|
|
59
126
|
};
|
|
60
127
|
}
|
|
128
|
+
function issueContext(i) {
|
|
129
|
+
const latestComment = [...(i.comments ?? [])]
|
|
130
|
+
.sort((a, b) => b.createdAt.localeCompare(a.createdAt))[0];
|
|
131
|
+
if (latestComment?.body)
|
|
132
|
+
return truncate(latestComment.body.replace(/\s+/g, ' ').trim(), 24);
|
|
133
|
+
if (typeof i.stuckDays === 'number')
|
|
134
|
+
return `${i.stuckDays}d stale`;
|
|
135
|
+
const labels = (i.labels ?? []).filter(l => ['retry', 'failed', 'blocked', 'needs-help', 'swarm:stuck'].includes(l));
|
|
136
|
+
if (labels.length > 0)
|
|
137
|
+
return truncate(labels.join(','), 24);
|
|
138
|
+
return i.state ?? '';
|
|
139
|
+
}
|
|
61
140
|
export function issuesToTable(issues) {
|
|
62
141
|
return {
|
|
63
142
|
columns: ['TITLE', 'STATUS', 'PRIO'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitorRows.js","sourceRoot":"","sources":["../../src/tui/monitorRows.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,gEAAgE;AAChE,6EAA6E;AAC7E,6EAA6E;AAC7E,+CAA+C;
|
|
1
|
+
{"version":3,"file":"monitorRows.js","sourceRoot":"","sources":["../../src/tui/monitorRows.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/panels/ChatPanel.tsx"],"names":[],"mappings":"AAUA,OAAO,EAUL,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AAqBzB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,+
|
|
1
|
+
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/panels/ChatPanel.tsx"],"names":[],"mappings":"AAUA,OAAO,EAUL,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AAqBzB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,+BA4YpK"}
|