@fdcn/sourcefed 0.2.0
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/LICENSE +21 -0
- package/README.md +51 -0
- package/dist/chunk-B7T6IZYS.js +5155 -0
- package/dist/chunk-MLKGABMK.js +9 -0
- package/dist/chunk-NGJ6F5ST.js +766 -0
- package/dist/cli.js +30491 -0
- package/dist/core-storage.js +13 -0
- package/dist/core.js +643 -0
- package/dist/daemon.js +5190 -0
- package/dist/data/core/SKILL.md +71 -0
- package/dist/data/core/references/commands.md +75 -0
- package/dist/data/sourcefed/SKILL.md +31 -0
- package/dist/guidance.md +71 -0
- package/dist/mcp.js +4800 -0
- package/dist/opencode.js +12646 -0
- package/dist/pi.js +249 -0
- package/dist/tui-compiled.mjs +4096 -0
- package/dist.dts/adapters/opencode/bridge.d.ts +20 -0
- package/dist.dts/adapters/opencode/index.d.ts +3 -0
- package/dist.dts/adapters/opencode/tool-result.d.ts +1 -0
- package/dist.dts/adapters/opencode/tools/monitor_create.d.ts +3 -0
- package/dist.dts/adapters/opencode/tools/monitor_list.d.ts +3 -0
- package/dist.dts/adapters/opencode/tools/monitor_start.d.ts +3 -0
- package/dist.dts/adapters/opencode/tools/monitor_status.d.ts +3 -0
- package/dist.dts/adapters/opencode/tools/monitor_stop.d.ts +3 -0
- package/dist.dts/adapters/opencode/tui/plugin.d.ts +3 -0
- package/dist.dts/adapters/opencode/tui/sidebar.d.ts +13 -0
- package/dist.dts/adapters/opencode/tui.d.ts +7 -0
- package/dist.dts/adapters/pi/src/dialog.d.ts +12 -0
- package/dist.dts/adapters/pi/src/index.d.ts +2 -0
- package/dist.dts/index.d.ts +1 -0
- package/dist.dts/packages/cli/src/index.d.ts +2 -0
- package/dist.dts/packages/cli/src/skills/command.d.ts +1 -0
- package/dist.dts/packages/cli/src/skills/discovery.d.ts +7 -0
- package/dist.dts/packages/cli/src/skills/frontmatter.d.ts +5 -0
- package/dist.dts/packages/cli/src/skills/index.d.ts +1 -0
- package/dist.dts/packages/core/src/events.d.ts +24 -0
- package/dist.dts/packages/core/src/events.test.d.ts +1 -0
- package/dist.dts/packages/core/src/index.d.ts +9 -0
- package/dist.dts/packages/core/src/monitors/index.d.ts +6 -0
- package/dist.dts/packages/core/src/monitors/monitor.d.ts +26 -0
- package/dist.dts/packages/core/src/monitors/poll/index.d.ts +1 -0
- package/dist.dts/packages/core/src/monitors/poll/monitor.d.ts +12 -0
- package/dist.dts/packages/core/src/monitors/poll/types/index.d.ts +2 -0
- package/dist.dts/packages/core/src/monitors/poll/types/poll-monitor-options.d.ts +6 -0
- package/dist.dts/packages/core/src/monitors/poll/types/poll-runner.d.ts +3 -0
- package/dist.dts/packages/core/src/monitors/poll/types/routed-event-cursor.d.ts +2 -0
- package/dist.dts/packages/core/src/monitors/poll/utils/event-delivery-id.d.ts +2 -0
- package/dist.dts/packages/core/src/monitors/poll/utils/tick.d.ts +2 -0
- package/dist.dts/packages/core/src/monitors/schema.d.ts +37 -0
- package/dist.dts/packages/core/src/monitors/service.d.ts +35 -0
- package/dist.dts/packages/core/src/monitors/service.test.d.ts +1 -0
- package/dist.dts/packages/core/src/monitors/transport.test.d.ts +1 -0
- package/dist.dts/packages/core/src/monitors/types/index.d.ts +2 -0
- package/dist.dts/packages/core/src/monitors/types/monitor-record.d.ts +3 -0
- package/dist.dts/packages/core/src/monitors/types/monitor-registry.d.ts +3 -0
- package/dist.dts/packages/core/src/monitors/utils/monitor-identity.d.ts +5 -0
- package/dist.dts/packages/core/src/monitors/utils/monitor-identity.test.d.ts +1 -0
- package/dist.dts/packages/core/src/monitors/webhook/index.d.ts +1 -0
- package/dist.dts/packages/core/src/monitors/webhook/monitor.d.ts +24 -0
- package/dist.dts/packages/core/src/monitors/webhook/types/index.d.ts +3 -0
- package/dist.dts/packages/core/src/monitors/webhook/types/pending-webhook-event.d.ts +19 -0
- package/dist.dts/packages/core/src/monitors/webhook/types/webhook-monitor-options.d.ts +13 -0
- package/dist.dts/packages/core/src/monitors/webhook/utils/constants.d.ts +2 -0
- package/dist.dts/packages/core/src/monitors/webhook/utils/deliver-webhook.d.ts +3 -0
- package/dist.dts/packages/core/src/monitors/webhook/utils/handle-webhook.d.ts +2 -0
- package/dist.dts/packages/core/src/monitors/webhook/utils/handle-webhook.test.d.ts +1 -0
- package/dist.dts/packages/core/src/monitors/webhook/utils/heartbeat-webhooks.d.ts +3 -0
- package/dist.dts/packages/core/src/runtime.d.ts +23 -0
- package/dist.dts/packages/core/src/runtime.test.d.ts +1 -0
- package/dist.dts/packages/core/src/sources/index.d.ts +1 -0
- package/dist.dts/packages/core/src/sources/schema.d.ts +4 -0
- package/dist.dts/packages/core/src/sources/types/index.d.ts +3 -0
- package/dist.dts/packages/core/src/sources/types/monitor-source.d.ts +3 -0
- package/dist.dts/packages/core/src/sources/types/source-input.d.ts +4 -0
- package/dist.dts/packages/core/src/sources/types/source-registry.d.ts +2 -0
- package/dist.dts/packages/core/src/storage/in-memory-monitor-store.d.ts +8 -0
- package/dist.dts/packages/core/src/storage/index.d.ts +2 -0
- package/dist.dts/packages/core/src/storage/json.d.ts +30 -0
- package/dist.dts/packages/core/src/storage/json.test.d.ts +1 -0
- package/dist.dts/packages/core/src/types/delivery.d.ts +1 -0
- package/dist.dts/packages/core/src/types/event-sink.d.ts +12 -0
- package/dist.dts/packages/core/src/types/index.d.ts +11 -0
- package/dist.dts/packages/core/src/types/monitor-context.d.ts +10 -0
- package/dist.dts/packages/core/src/types/monitor-create-input.d.ts +8 -0
- package/dist.dts/packages/core/src/types/monitor-event-queue.d.ts +18 -0
- package/dist.dts/packages/core/src/types/monitor-event.d.ts +10 -0
- package/dist.dts/packages/core/src/types/monitor-options.d.ts +7 -0
- package/dist.dts/packages/core/src/types/monitor-store.d.ts +6 -0
- package/dist.dts/packages/core/src/types/monitor-target.d.ts +4 -0
- package/dist.dts/packages/core/src/types/source-event.d.ts +9 -0
- package/dist.dts/packages/core/src/types/source-poll-result.d.ts +6 -0
- package/dist.dts/packages/core/src/utils/event-to-text.d.ts +2 -0
- package/dist.dts/packages/core/src/utils/to-monitor-event.d.ts +3 -0
- package/dist.dts/packages/daemon/src/client.d.ts +2 -0
- package/dist.dts/packages/daemon/src/client.test.d.ts +1 -0
- package/dist.dts/packages/daemon/src/daemon.d.ts +36 -0
- package/dist.dts/packages/daemon/src/daemon.test.d.ts +1 -0
- package/dist.dts/packages/daemon/src/dispatch.d.ts +2 -0
- package/dist.dts/packages/daemon/src/http.d.ts +5 -0
- package/dist.dts/packages/daemon/src/index.d.ts +8 -0
- package/dist.dts/packages/daemon/src/registry.d.ts +14 -0
- package/dist.dts/packages/daemon/src/types/client.d.ts +21 -0
- package/dist.dts/packages/daemon/src/types/daemon.d.ts +58 -0
- package/dist.dts/packages/daemon/src/types/index.d.ts +3 -0
- package/dist.dts/packages/daemon/src/types/protocol.d.ts +21 -0
- package/dist.dts/packages/daemon/src/utils/env.d.ts +1 -0
- package/dist.dts/packages/daemon/src/utils/http-server.d.ts +10 -0
- package/dist.dts/packages/daemon/src/utils/index.d.ts +6 -0
- package/dist.dts/packages/daemon/src/utils/request-router.d.ts +11 -0
- package/dist.dts/packages/daemon/src/utils/sink.d.ts +13 -0
- package/dist.dts/packages/daemon/src/utils/spawn.d.ts +19 -0
- package/dist.dts/packages/daemon/src/utils/target.d.ts +4 -0
- package/dist.dts/packages/mcp/src/index.d.ts +2 -0
- package/dist.dts/packages/mcp/src/server.d.ts +14 -0
- package/dist.dts/packages/mcp/src/server.test.d.ts +1 -0
- package/dist.dts/packages/mcp/src/uris.d.ts +3 -0
- package/dist.dts/packages/sourcefed/src/server.d.ts +7 -0
- package/dist.dts/providers/github/src/api/client.d.ts +3 -0
- package/dist.dts/providers/github/src/api/comments.d.ts +1 -0
- package/dist.dts/providers/github/src/api/github-api.test.d.ts +1 -0
- package/dist.dts/providers/github/src/api/index.d.ts +4 -0
- package/dist.dts/providers/github/src/api/logs.d.ts +5 -0
- package/dist.dts/providers/github/src/api/pr.d.ts +8 -0
- package/dist.dts/providers/github/src/github.test.d.ts +1 -0
- package/dist.dts/providers/github/src/index.d.ts +2 -0
- package/dist.dts/providers/github/src/monitor.d.ts +15 -0
- package/dist.dts/providers/github/src/poll/index.d.ts +2 -0
- package/dist.dts/providers/github/src/poll/monitor.d.ts +3 -0
- package/dist.dts/providers/github/src/poll/utils/append-comments.d.ts +2 -0
- package/dist.dts/providers/github/src/poll/utils/append-github-ci-event.d.ts +2 -0
- package/dist.dts/providers/github/src/poll/utils/append-github-conflict-event.d.ts +2 -0
- package/dist.dts/providers/github/src/poll/utils/append-github-reviews.d.ts +2 -0
- package/dist.dts/providers/github/src/poll/utils/append-github-state-event.d.ts +2 -0
- package/dist.dts/providers/github/src/poll/utils/ci-failure-detail.d.ts +1 -0
- package/dist.dts/providers/github/src/poll/utils/clean-ci-log.d.ts +1 -0
- package/dist.dts/providers/github/src/poll/utils/confirm-still-failing.d.ts +1 -0
- package/dist.dts/providers/github/src/poll/utils/empty-cursor.d.ts +2 -0
- package/dist.dts/providers/github/src/poll/utils/failure-run-ids.d.ts +1 -0
- package/dist.dts/providers/github/src/poll/utils/failure-run-log.d.ts +1 -0
- package/dist.dts/providers/github/src/poll/utils/format-failed-check.d.ts +1 -0
- package/dist.dts/providers/github/src/poll/utils/index.d.ts +1 -0
- package/dist.dts/providers/github/src/poll/utils/poll-github.d.ts +6 -0
- package/dist.dts/providers/github/src/poll/utils/poll-helpers.test.d.ts +1 -0
- package/dist.dts/providers/github/src/schema.d.ts +17 -0
- package/dist.dts/providers/github/src/types/cursor.d.ts +11 -0
- package/dist.dts/providers/github/src/types/event.d.ts +11 -0
- package/dist.dts/providers/github/src/types/index.d.ts +3 -0
- package/dist.dts/providers/github/src/types/source-record.d.ts +5 -0
- package/dist.dts/providers/github/src/webhook/index.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/monitor.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/types/context.d.ts +7 -0
- package/dist.dts/providers/github/src/webhook/types/event-handler.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/types/event-shape.d.ts +7 -0
- package/dist.dts/providers/github/src/webhook/types/index.d.ts +1 -0
- package/dist.dts/providers/github/src/webhook/utils/fallback-github-event.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/utils/github-event-handlers.d.ts +2 -0
- package/dist.dts/providers/github/src/webhook/utils/index.d.ts +2 -0
- package/dist.dts/providers/github/src/webhook/utils/parse-check-run.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/utils/parse-check-suite.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/utils/parse-github-comment.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/utils/parse-github-webhook.d.ts +2 -0
- package/dist.dts/providers/github/src/webhook/utils/parse-pull-request-review.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/utils/parse-pull-request.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/utils/pull-request-number.d.ts +1 -0
- package/dist.dts/providers/github/src/webhook/utils/update-github-cursor.d.ts +3 -0
- package/dist.dts/providers/github/src/webhook/utils/verify-github-webhook.d.ts +1 -0
- package/dist.dts/providers/github/src/webhook/utils/verify-hmac.d.ts +1 -0
- package/dist.dts/providers/jira/src/index.d.ts +2 -0
- package/dist.dts/providers/jira/src/monitor.d.ts +14 -0
- package/dist.dts/providers/jira/src/poll/index.d.ts +2 -0
- package/dist.dts/providers/jira/src/poll/monitor.d.ts +3 -0
- package/dist.dts/providers/jira/src/poll/utils/adf-text.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/append-jira-changelog.d.ts +2 -0
- package/dist.dts/providers/jira/src/poll/utils/append-jira-comments.d.ts +2 -0
- package/dist.dts/providers/jira/src/poll/utils/append-jira-description.d.ts +2 -0
- package/dist.dts/providers/jira/src/poll/utils/empty-cursor.d.ts +2 -0
- package/dist.dts/providers/jira/src/poll/utils/format-jira-changelog-item.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/index.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/is-terminal-status.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/jira-auth.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/jira-change-value.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/jira-changelog-event.d.ts +2 -0
- package/dist.dts/providers/jira/src/poll/utils/jira-fetch.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/meaningful-changelog-items.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/poll-helpers.test.d.ts +1 -0
- package/dist.dts/providers/jira/src/poll/utils/poll-jira.d.ts +6 -0
- package/dist.dts/providers/jira/src/schema.d.ts +10 -0
- package/dist.dts/providers/jira/src/types/cursor.d.ts +5 -0
- package/dist.dts/providers/jira/src/types/event.d.ts +11 -0
- package/dist.dts/providers/jira/src/types/index.d.ts +3 -0
- package/dist.dts/providers/jira/src/types/source-record.d.ts +4 -0
- package/dist.dts/providers/slack/src/index.d.ts +2 -0
- package/dist.dts/providers/slack/src/monitor.d.ts +15 -0
- package/dist.dts/providers/slack/src/poll/index.d.ts +2 -0
- package/dist.dts/providers/slack/src/poll/monitor.d.ts +3 -0
- package/dist.dts/providers/slack/src/poll/utils/index.d.ts +2 -0
- package/dist.dts/providers/slack/src/poll/utils/parse-slack-read-result.d.ts +5 -0
- package/dist.dts/providers/slack/src/poll/utils/poll-slack.d.ts +6 -0
- package/dist.dts/providers/slack/src/poll/utils/slack-api.d.ts +4 -0
- package/dist.dts/providers/slack/src/schema.d.ts +11 -0
- package/dist.dts/providers/slack/src/slack.test.d.ts +1 -0
- package/dist.dts/providers/slack/src/types/cursor.d.ts +5 -0
- package/dist.dts/providers/slack/src/types/event.d.ts +8 -0
- package/dist.dts/providers/slack/src/types/index.d.ts +4 -0
- package/dist.dts/providers/slack/src/types/message.d.ts +6 -0
- package/dist.dts/providers/slack/src/types/read-result.d.ts +10 -0
- package/dist.dts/providers/slack/src/types/source-record.d.ts +5 -0
- package/dist.dts/providers/slack/src/utils/index.d.ts +2 -0
- package/dist.dts/providers/slack/src/utils/message-at.d.ts +1 -0
- package/dist.dts/providers/slack/src/utils/message-timestamp.d.ts +1 -0
- package/dist.dts/providers/slack/src/webhook/index.d.ts +2 -0
- package/dist.dts/providers/slack/src/webhook/monitor.d.ts +3 -0
- package/dist.dts/providers/slack/src/webhook/utils/index.d.ts +3 -0
- package/dist.dts/providers/slack/src/webhook/utils/parse-slack-webhook.d.ts +2 -0
- package/dist.dts/providers/slack/src/webhook/utils/slack-signature.d.ts +1 -0
- package/dist.dts/providers/slack/src/webhook/utils/update-slack-cursor.d.ts +3 -0
- package/dist.dts/providers/slack/src/webhook/utils/valid-slack-signature.d.ts +1 -0
- package/dist.dts/tui.d.ts +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { createOpencodeClient } from "@opencode-ai/sdk";
|
|
2
|
+
type OpenCodeClient = ReturnType<typeof createOpencodeClient>;
|
|
3
|
+
export declare class OpenCodeBridge {
|
|
4
|
+
private readonly opencode;
|
|
5
|
+
private daemon?;
|
|
6
|
+
private readonly listeners;
|
|
7
|
+
private lastAttemptAt;
|
|
8
|
+
private lastError;
|
|
9
|
+
constructor(opencode: OpenCodeClient);
|
|
10
|
+
start(): Promise<void>;
|
|
11
|
+
ensureTarget(sessionID: string): Promise<void>;
|
|
12
|
+
callTool(name: string, arguments_: Record<string, unknown>, sessionID: string): Promise<unknown>;
|
|
13
|
+
close(): Promise<void>;
|
|
14
|
+
private ensureDaemon;
|
|
15
|
+
private routeEvents;
|
|
16
|
+
private target;
|
|
17
|
+
}
|
|
18
|
+
export declare function setOpenCodeBridge(bridge: OpenCodeBridge): void;
|
|
19
|
+
export declare function getOpenCodeBridge(): OpenCodeBridge;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function callMonitorTool(name: string, arguments_: Record<string, unknown>, sessionID: string): Promise<string>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** @jsxImportSource @opentui/solid */
|
|
2
|
+
import { type MonitorView } from "@fdcn/sourcefed/daemon";
|
|
3
|
+
import type { TuiPluginApi, TuiThemeCurrent } from "@opencode-ai/plugin/tui";
|
|
4
|
+
export type SidebarProps = {
|
|
5
|
+
api: TuiPluginApi;
|
|
6
|
+
sessionID: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function Sidebar(props: SidebarProps): import("solid-js").JSX.Element;
|
|
9
|
+
export declare function MonitorRows(props: {
|
|
10
|
+
monitors: () => MonitorView[];
|
|
11
|
+
theme: TuiThemeCurrent;
|
|
12
|
+
compact?: boolean;
|
|
13
|
+
}): import("solid-js").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Theme } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { Component, TUI } from "@earendil-works/pi-tui";
|
|
3
|
+
import type { LogEntryView, MonitorView } from "@fdcn/sourcefed/daemon";
|
|
4
|
+
type Line = {
|
|
5
|
+
text: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function showSourcefedDialog(_tui: TUI, theme: Theme, done: (result: null) => void, title: string, lines: Line[]): Component & {
|
|
8
|
+
handleInput(data: string): void;
|
|
9
|
+
};
|
|
10
|
+
export declare function monitorLines(monitors: MonitorView[], theme: Theme): Line[];
|
|
11
|
+
export declare function logLines(logs: LogEntryView[], theme: Theme): Line[];
|
|
12
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default, Sourcefed } from "./adapters/opencode/index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runSkillsCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { runSkillsCommand } from "./command.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MonitorRecord } from "./monitors";
|
|
2
|
+
import type { MonitorEvent, MonitorEventQueue, MonitorEventSink, MonitorTarget, QueuedMonitorEvent } from "./types";
|
|
3
|
+
export declare class QueueMonitorEventSink implements MonitorEventSink {
|
|
4
|
+
readonly queue: MonitorEventQueue;
|
|
5
|
+
constructor(queue: MonitorEventQueue);
|
|
6
|
+
deliver(input: {
|
|
7
|
+
monitor: MonitorRecord;
|
|
8
|
+
event: MonitorEvent;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
ok: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export declare class InMemoryMonitorEventQueue implements MonitorEventQueue {
|
|
15
|
+
private readonly events;
|
|
16
|
+
enqueue(input: {
|
|
17
|
+
monitor: MonitorRecord;
|
|
18
|
+
event: MonitorEvent;
|
|
19
|
+
}): Promise<QueuedMonitorEvent>;
|
|
20
|
+
read(target: MonitorTarget): Promise<QueuedMonitorEvent[]>;
|
|
21
|
+
acknowledge(target: MonitorTarget, eventIDs: string[]): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export declare function createQueuedMonitorEvent(monitor: MonitorRecord, event: MonitorEvent): QueuedMonitorEvent;
|
|
24
|
+
export declare function monitorEventID(event: MonitorEvent): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./monitors";
|
|
2
|
+
export * from "./runtime.js";
|
|
3
|
+
export * from "./events.js";
|
|
4
|
+
export * from "./sources";
|
|
5
|
+
export * from "./types";
|
|
6
|
+
export * from "./storage";
|
|
7
|
+
export { eventToText } from "./utils/event-to-text.js";
|
|
8
|
+
export { toMonitorEvent } from "./utils/to-monitor-event.js";
|
|
9
|
+
export { MonitorRecordSchema, MonitorRegistrySchema } from "./monitors/schema.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Monitor } from "./monitor.js";
|
|
2
|
+
export { MonitorService, type CreateMonitorInput, type CreateMonitorResult } from "./service.js";
|
|
3
|
+
export { dedupeActiveMonitors, monitorIdentity } from "./utils/monitor-identity.js";
|
|
4
|
+
export { PollMonitor, mergeCursors } from "./poll";
|
|
5
|
+
export { WebhookMonitor } from "./webhook";
|
|
6
|
+
export type { MonitorRecord, MonitorRegistry } from "./types";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { MonitorContext, MonitorEvent, MonitorOptions } from "#sourcefed/types";
|
|
2
|
+
import type { MonitorSource, SourceInput } from "#sourcefed/sources";
|
|
3
|
+
import type { Delivery, MonitorCreateInput } from "#sourcefed/types";
|
|
4
|
+
import type { MonitorRecord } from "./types";
|
|
5
|
+
import type { PollMonitor } from "./poll";
|
|
6
|
+
import type { WebhookMonitor } from "./webhook";
|
|
7
|
+
export declare abstract class Monitor<TSource extends MonitorSource = MonitorSource> {
|
|
8
|
+
readonly type: TSource["type"];
|
|
9
|
+
private readonly schema;
|
|
10
|
+
abstract readonly key: (source: TSource) => string;
|
|
11
|
+
abstract build(input: MonitorCreateInput): SourceInput;
|
|
12
|
+
/** Provider-specific display surface (nerd font icon, labels, describe). */
|
|
13
|
+
abstract readonly icon: string;
|
|
14
|
+
abstract readonly label: (source: TSource) => string;
|
|
15
|
+
abstract readonly detail: (source: TSource) => string;
|
|
16
|
+
abstract readonly describe: (source: TSource) => string;
|
|
17
|
+
readonly poll?: PollMonitor<TSource>;
|
|
18
|
+
readonly webhook?: WebhookMonitor<TSource>;
|
|
19
|
+
protected constructor(options: MonitorOptions<TSource>);
|
|
20
|
+
validateSource(source: unknown): TSource;
|
|
21
|
+
initialDelivery(source: unknown): Delivery;
|
|
22
|
+
resolveDelivery(monitor: MonitorRecord): Delivery | undefined;
|
|
23
|
+
tick(context: MonitorContext, record: MonitorRecord): Promise<number>;
|
|
24
|
+
deliver(context: MonitorContext, record: MonitorRecord, event: MonitorEvent, deliveryId: string): Promise<number>;
|
|
25
|
+
unresponsive(record: MonitorRecord, now?: number): boolean;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PollMonitor, mergeCursors } from "./monitor.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MonitorSource } from "#sourcefed/sources";
|
|
2
|
+
import type { MonitorContext } from "#sourcefed/types";
|
|
3
|
+
import type { MonitorRecord } from "../types";
|
|
4
|
+
import type { Monitor } from "../monitor";
|
|
5
|
+
import { type PollMonitorOptions } from "./types";
|
|
6
|
+
export declare class PollMonitor<TSource extends MonitorSource = MonitorSource> {
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(options: PollMonitorOptions<TSource>);
|
|
9
|
+
run(context: MonitorContext, source: Monitor<TSource>, record: MonitorRecord): Promise<number>;
|
|
10
|
+
isUnresponsive(record: MonitorRecord, now: number): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function mergeCursors(current: unknown, result: unknown): unknown;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MonitorSource } from "#sourcefed/sources";
|
|
2
|
+
import type { PollRunner } from "./poll-runner.js";
|
|
3
|
+
export type PollMonitorOptions<TSource extends MonitorSource> = {
|
|
4
|
+
run: PollRunner<TSource>;
|
|
5
|
+
mergeCursor?: (current: unknown, result: unknown) => unknown;
|
|
6
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const MonitorRecordSchema: v.ObjectSchema<{
|
|
3
|
+
readonly id: v.StringSchema<undefined>;
|
|
4
|
+
readonly name: v.StringSchema<undefined>;
|
|
5
|
+
readonly source: v.IntersectSchema<[v.ObjectSchema<{
|
|
6
|
+
readonly type: v.StringSchema<undefined>;
|
|
7
|
+
}, undefined>, v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>], undefined>;
|
|
8
|
+
readonly delivery: v.PicklistSchema<["poll", "webhook"], undefined>;
|
|
9
|
+
readonly target: v.ObjectSchema<{
|
|
10
|
+
readonly kind: v.StringSchema<undefined>;
|
|
11
|
+
readonly id: v.StringSchema<undefined>;
|
|
12
|
+
}, undefined>;
|
|
13
|
+
readonly pollIntervalSec: v.NumberSchema<undefined>;
|
|
14
|
+
readonly enabled: v.BooleanSchema<undefined>;
|
|
15
|
+
readonly createdAt: v.StringSchema<undefined>;
|
|
16
|
+
readonly updatedAt: v.StringSchema<undefined>;
|
|
17
|
+
readonly cursors: v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>;
|
|
18
|
+
}, undefined>;
|
|
19
|
+
export declare const MonitorRegistrySchema: v.ObjectSchema<{
|
|
20
|
+
readonly monitors: v.ArraySchema<v.ObjectSchema<{
|
|
21
|
+
readonly id: v.StringSchema<undefined>;
|
|
22
|
+
readonly name: v.StringSchema<undefined>;
|
|
23
|
+
readonly source: v.IntersectSchema<[v.ObjectSchema<{
|
|
24
|
+
readonly type: v.StringSchema<undefined>;
|
|
25
|
+
}, undefined>, v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>], undefined>;
|
|
26
|
+
readonly delivery: v.PicklistSchema<["poll", "webhook"], undefined>;
|
|
27
|
+
readonly target: v.ObjectSchema<{
|
|
28
|
+
readonly kind: v.StringSchema<undefined>;
|
|
29
|
+
readonly id: v.StringSchema<undefined>;
|
|
30
|
+
}, undefined>;
|
|
31
|
+
readonly pollIntervalSec: v.NumberSchema<undefined>;
|
|
32
|
+
readonly enabled: v.BooleanSchema<undefined>;
|
|
33
|
+
readonly createdAt: v.StringSchema<undefined>;
|
|
34
|
+
readonly updatedAt: v.StringSchema<undefined>;
|
|
35
|
+
readonly cursors: v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>;
|
|
36
|
+
}, undefined>, undefined>;
|
|
37
|
+
}, undefined>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MonitorSource } from "#sourcefed/sources";
|
|
2
|
+
import type { MonitorStore, MonitorTarget } from "#sourcefed/types";
|
|
3
|
+
import type { MonitorRecord } from "./types";
|
|
4
|
+
export type CreateMonitorInput = {
|
|
5
|
+
name: string;
|
|
6
|
+
source: MonitorSource;
|
|
7
|
+
delivery: "poll" | "webhook";
|
|
8
|
+
target: MonitorTarget;
|
|
9
|
+
pollIntervalSec: number;
|
|
10
|
+
};
|
|
11
|
+
export type CreateMonitorResult = {
|
|
12
|
+
monitor: MonitorRecord;
|
|
13
|
+
created: boolean;
|
|
14
|
+
};
|
|
15
|
+
export declare class MonitorService {
|
|
16
|
+
readonly store: MonitorStore;
|
|
17
|
+
private registryQueue;
|
|
18
|
+
constructor(store: MonitorStore);
|
|
19
|
+
list(): Promise<MonitorRecord[]>;
|
|
20
|
+
get(id: string): Promise<MonitorRecord | undefined>;
|
|
21
|
+
create(input: CreateMonitorInput): Promise<CreateMonitorResult>;
|
|
22
|
+
stop(id: string): Promise<MonitorRecord | {
|
|
23
|
+
error: string;
|
|
24
|
+
}>;
|
|
25
|
+
start(id: string): Promise<MonitorRecord | {
|
|
26
|
+
error: string;
|
|
27
|
+
}>;
|
|
28
|
+
remove(id: string): Promise<void>;
|
|
29
|
+
setDelivery(id: string, delivery: "poll" | "webhook"): Promise<void>;
|
|
30
|
+
updateCursor(monitor: MonitorRecord, key: string, value: unknown): Promise<void>;
|
|
31
|
+
updateCursorValue(monitor: MonitorRecord, key: string, update: (cursor: unknown) => unknown): Promise<void>;
|
|
32
|
+
dedupe(): Promise<number>;
|
|
33
|
+
private updateMonitor;
|
|
34
|
+
private transact;
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MonitorSource } from "#sourcefed/sources";
|
|
2
|
+
import type { MonitorTarget } from "#sourcefed/types";
|
|
3
|
+
import type { MonitorRecord } from "../types";
|
|
4
|
+
export declare function monitorIdentity(target: MonitorTarget, source: MonitorSource): string;
|
|
5
|
+
export declare function dedupeActiveMonitors(monitors: MonitorRecord[]): MonitorRecord[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WebhookMonitor } from "./monitor.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MonitorContext, MonitorEvent } from "#sourcefed/types";
|
|
2
|
+
import type { MonitorSource } from "#sourcefed/sources";
|
|
3
|
+
import type { MonitorRecord } from "../types";
|
|
4
|
+
import type { Monitor } from "../monitor";
|
|
5
|
+
import { type WebhookMonitorOptions } from "./types";
|
|
6
|
+
export declare class WebhookMonitor<TSource extends MonitorSource = MonitorSource> {
|
|
7
|
+
readonly path: string;
|
|
8
|
+
readonly preferred: boolean;
|
|
9
|
+
readonly configured: () => boolean;
|
|
10
|
+
readonly verify: (body: string, request: Request) => boolean;
|
|
11
|
+
readonly acknowledgeBeforeDelivery: boolean;
|
|
12
|
+
readonly challenge?: (payload: unknown) => Record<string, string> | undefined;
|
|
13
|
+
readonly deliveryId: (request: Request, payload: unknown) => string | undefined;
|
|
14
|
+
readonly eventName: (request: Request, payload: unknown) => string;
|
|
15
|
+
readonly parse: (payload: unknown, eventName: string, deliveryId: string) => MonitorEvent | undefined;
|
|
16
|
+
readonly updateCursor?: (event: MonitorEvent, cursor: unknown) => unknown;
|
|
17
|
+
constructor(options: WebhookMonitorOptions);
|
|
18
|
+
isHealthy(record: MonitorRecord): boolean;
|
|
19
|
+
isUnresponsive(record: MonitorRecord, now: number): boolean;
|
|
20
|
+
retryPending(context: MonitorContext, source: Monitor<TSource>, record: MonitorRecord): Promise<number>;
|
|
21
|
+
private addPending;
|
|
22
|
+
private removePending;
|
|
23
|
+
deliver(context: MonitorContext, source: Monitor<TSource>, record: MonitorRecord, event: MonitorEvent, deliveryId: string): Promise<number>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import type { MonitorEvent } from "#sourcefed/types";
|
|
3
|
+
export type PendingWebhookEvent = {
|
|
4
|
+
deliveryId: string;
|
|
5
|
+
event: MonitorEvent;
|
|
6
|
+
};
|
|
7
|
+
export declare const PendingWebhookEventsSchema: v.ArraySchema<v.ObjectSchema<{
|
|
8
|
+
readonly deliveryId: v.StringSchema<undefined>;
|
|
9
|
+
readonly event: v.ObjectSchema<{
|
|
10
|
+
readonly source: v.UnknownSchema;
|
|
11
|
+
readonly kind: v.StringSchema<undefined>;
|
|
12
|
+
readonly id: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
13
|
+
readonly at: v.StringSchema<undefined>;
|
|
14
|
+
readonly summary: v.StringSchema<undefined>;
|
|
15
|
+
readonly body: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
16
|
+
readonly actionable: v.BooleanSchema<undefined>;
|
|
17
|
+
readonly terminal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
18
|
+
}, undefined>;
|
|
19
|
+
}, undefined>, undefined>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MonitorEvent } from "#sourcefed/types";
|
|
2
|
+
export type WebhookMonitorOptions = {
|
|
3
|
+
path: string;
|
|
4
|
+
preferred?: boolean;
|
|
5
|
+
configured: () => boolean;
|
|
6
|
+
verify: (body: string, request: Request) => boolean;
|
|
7
|
+
acknowledgeBeforeDelivery?: boolean;
|
|
8
|
+
challenge?: (payload: unknown) => Record<string, string> | undefined;
|
|
9
|
+
deliveryId: (request: Request, payload: unknown) => string | undefined;
|
|
10
|
+
eventName: (request: Request, payload: unknown) => string;
|
|
11
|
+
parse: (payload: unknown, eventName: string, deliveryId: string) => MonitorEvent | undefined;
|
|
12
|
+
updateCursor?: (event: MonitorEvent, cursor: unknown) => unknown;
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { MonitorContext, MonitorEventSink, MonitorStore } from "./types";
|
|
2
|
+
import type { MonitorSourceRegistry } from "./sources";
|
|
3
|
+
import { MonitorService } from "./monitors/service.js";
|
|
4
|
+
import type { Monitor } from "./monitors";
|
|
5
|
+
export type MonitorRuntimeOptions = {
|
|
6
|
+
store: MonitorStore;
|
|
7
|
+
sink: MonitorEventSink;
|
|
8
|
+
sources: MonitorSourceRegistry;
|
|
9
|
+
sourceForWebhookPath: (path: string) => Monitor | undefined;
|
|
10
|
+
pollLoopSec?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare class MonitorRuntime {
|
|
13
|
+
readonly service: MonitorService;
|
|
14
|
+
readonly context: MonitorContext;
|
|
15
|
+
private timer?;
|
|
16
|
+
private readonly activeTicks;
|
|
17
|
+
constructor(options: MonitorRuntimeOptions);
|
|
18
|
+
private readonly pollLoopSec;
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
tick(): Promise<void>;
|
|
21
|
+
webhook(request: Request): Promise<Response>;
|
|
22
|
+
stop(): Promise<boolean>;
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { MonitorSource, MonitorSourceRegistry, SourceInput } from "./types";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MonitorStore } from "../types/monitor-store.js";
|
|
2
|
+
import type { MonitorRegistry } from "../monitors/types/monitor-registry.js";
|
|
3
|
+
export declare class InMemoryMonitorStore implements MonitorStore {
|
|
4
|
+
private registry;
|
|
5
|
+
constructor(initial?: MonitorRegistry);
|
|
6
|
+
load(): Promise<MonitorRegistry>;
|
|
7
|
+
save(registry: MonitorRegistry): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MonitorRecord, MonitorRegistry } from "../monitors/types";
|
|
2
|
+
import type { MonitorEvent, MonitorEventQueue, MonitorStore, MonitorTarget, QueuedMonitorEvent } from "../types";
|
|
3
|
+
export type JsonMonitorStoreOptions = {
|
|
4
|
+
stateDir?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare class JsonMonitorStore implements MonitorStore {
|
|
7
|
+
readonly stateDir: string;
|
|
8
|
+
readonly stateFile: string;
|
|
9
|
+
constructor(options?: JsonMonitorStoreOptions);
|
|
10
|
+
load(): Promise<MonitorRegistry>;
|
|
11
|
+
acquireExclusive(): Promise<() => Promise<void>>;
|
|
12
|
+
save(registry: MonitorRegistry): Promise<void>;
|
|
13
|
+
private readRaw;
|
|
14
|
+
}
|
|
15
|
+
export declare function defaultJsonMonitorStore(options?: JsonMonitorStoreOptions): JsonMonitorStore;
|
|
16
|
+
export declare class JsonMonitorEventQueue implements MonitorEventQueue {
|
|
17
|
+
readonly stateDir: string;
|
|
18
|
+
readonly eventsFile: string;
|
|
19
|
+
private queue;
|
|
20
|
+
constructor(stateDir: string);
|
|
21
|
+
enqueue(input: {
|
|
22
|
+
monitor: MonitorRecord;
|
|
23
|
+
event: MonitorEvent;
|
|
24
|
+
}): Promise<QueuedMonitorEvent>;
|
|
25
|
+
read(target: MonitorTarget): Promise<QueuedMonitorEvent[]>;
|
|
26
|
+
acknowledge(target: MonitorTarget, eventIDs: string[]): Promise<void>;
|
|
27
|
+
private transact;
|
|
28
|
+
private loadEvents;
|
|
29
|
+
private saveEvents;
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Delivery = "poll" | "webhook";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MonitorEvent } from "./monitor-event.js";
|
|
2
|
+
import type { MonitorRecord } from "../monitors/types/monitor-record.js";
|
|
3
|
+
export type EventDeliveryResult = {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
error?: string;
|
|
6
|
+
};
|
|
7
|
+
export interface MonitorEventSink {
|
|
8
|
+
deliver(input: {
|
|
9
|
+
monitor: MonitorRecord;
|
|
10
|
+
event: MonitorEvent;
|
|
11
|
+
}): Promise<EventDeliveryResult>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type { Delivery } from "./delivery.js";
|
|
2
|
+
export type { EventDeliveryResult, MonitorEventSink } from "./event-sink.js";
|
|
3
|
+
export type { MonitorCreateInput } from "./monitor-create-input.js";
|
|
4
|
+
export type { MonitorEvent } from "./monitor-event.js";
|
|
5
|
+
export type { MonitorContext } from "./monitor-context.js";
|
|
6
|
+
export type { MonitorEventQueue, QueuedMonitorEvent } from "./monitor-event-queue.js";
|
|
7
|
+
export type { MonitorStore } from "./monitor-store.js";
|
|
8
|
+
export type { MonitorTarget } from "./monitor-target.js";
|
|
9
|
+
export type { SourceEvent } from "./source-event.js";
|
|
10
|
+
export type { SourcePollResult } from "./source-poll-result.js";
|
|
11
|
+
export type { MonitorOptions, MonitorSchema } from "./monitor-options.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MonitorEventSink } from "./event-sink.js";
|
|
2
|
+
import type { Monitor } from "#sourcefed/monitors";
|
|
3
|
+
import type { MonitorSourceRegistry } from "#sourcefed/sources";
|
|
4
|
+
import type { MonitorService } from "../monitors/service.js";
|
|
5
|
+
export type MonitorContext = {
|
|
6
|
+
service: MonitorService;
|
|
7
|
+
sink: MonitorEventSink;
|
|
8
|
+
sources: MonitorSourceRegistry;
|
|
9
|
+
sourceForWebhookPath: (path: string) => Monitor | undefined;
|
|
10
|
+
};
|