@knpkv/herdr-approvals 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 +22 -0
- package/dist/activity-history.d.ts +36 -0
- package/dist/activity-history.d.ts.map +1 -0
- package/dist/activity-history.js +233 -0
- package/dist/activity-history.js.map +1 -0
- package/dist/approval-app-view.d.ts +26 -0
- package/dist/approval-app-view.d.ts.map +1 -0
- package/dist/approval-app-view.js +79 -0
- package/dist/approval-app-view.js.map +1 -0
- package/dist/approval-client.d.ts +2 -0
- package/dist/approval-client.d.ts.map +1 -0
- package/dist/approval-client.js +520 -0
- package/dist/approval-client.js.map +1 -0
- package/dist/approval-sw.js +28 -0
- package/dist/approval-sw.js.map +7 -0
- package/dist/approval-url.d.ts +37 -0
- package/dist/approval-url.d.ts.map +1 -0
- package/dist/approval-url.js +37 -0
- package/dist/approval-url.js.map +1 -0
- package/dist/approval.js +188 -0
- package/dist/approval.js.map +7 -0
- package/dist/auth.d.ts +10 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +14 -0
- package/dist/auth.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +47 -0
- package/dist/bin.js.map +1 -0
- package/dist/connect-entry.d.ts +2 -0
- package/dist/connect-entry.d.ts.map +1 -0
- package/dist/connect-entry.js +2 -0
- package/dist/connect-entry.js.map +1 -0
- package/dist/connect.js +188 -0
- package/dist/connect.js.map +7 -0
- package/dist/dashboard-model.d.ts +719 -0
- package/dist/dashboard-model.d.ts.map +1 -0
- package/dist/dashboard-model.js +83 -0
- package/dist/dashboard-model.js.map +1 -0
- package/dist/dashboard-view.d.ts +42 -0
- package/dist/dashboard-view.d.ts.map +1 -0
- package/dist/dashboard-view.js +194 -0
- package/dist/dashboard-view.js.map +1 -0
- package/dist/errors.d.ts +33 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +12 -0
- package/dist/errors.js.map +1 -0
- package/dist/fleetctl-submission.d.ts +68 -0
- package/dist/fleetctl-submission.d.ts.map +1 -0
- package/dist/fleetctl-submission.js +31 -0
- package/dist/fleetctl-submission.js.map +1 -0
- package/dist/fleetctl.d.ts +22 -0
- package/dist/fleetctl.d.ts.map +1 -0
- package/dist/fleetctl.js +264 -0
- package/dist/fleetctl.js.map +1 -0
- package/dist/geist-latin-wght-normal.woff2 +0 -0
- package/dist/geist-mono-latin-wght-normal.woff2 +0 -0
- package/dist/http.d.ts +1512 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +1653 -0
- package/dist/http.js.map +1 -0
- package/dist/index.css +2 -0
- package/dist/index.css.map +7 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/config-path.d.ts +3 -0
- package/dist/internal/config-path.d.ts.map +1 -0
- package/dist/internal/config-path.js +3 -0
- package/dist/internal/config-path.js.map +1 -0
- package/dist/internal/dashboard-pending-state.d.ts +49 -0
- package/dist/internal/dashboard-pending-state.d.ts.map +1 -0
- package/dist/internal/dashboard-pending-state.js +98 -0
- package/dist/internal/dashboard-pending-state.js.map +1 -0
- package/dist/internal/fleet-follow.d.ts +54 -0
- package/dist/internal/fleet-follow.d.ts.map +1 -0
- package/dist/internal/fleet-follow.js +10 -0
- package/dist/internal/fleet-follow.js.map +1 -0
- package/dist/internal/fleet-request.d.ts +4 -0
- package/dist/internal/fleet-request.d.ts.map +1 -0
- package/dist/internal/fleet-request.js +11 -0
- package/dist/internal/fleet-request.js.map +1 -0
- package/dist/internal/html.d.ts +3 -0
- package/dist/internal/html.d.ts.map +1 -0
- package/dist/internal/html.js +8 -0
- package/dist/internal/html.js.map +1 -0
- package/dist/internal/websocket.d.ts +4 -0
- package/dist/internal/websocket.d.ts.map +1 -0
- package/dist/internal/websocket.js +12 -0
- package/dist/internal/websocket.js.map +1 -0
- package/dist/model.d.ts +40 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +53 -0
- package/dist/model.js.map +1 -0
- package/dist/operations.d.ts +72 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +284 -0
- package/dist/operations.js.map +1 -0
- package/dist/push-policy.d.ts +3 -0
- package/dist/push-policy.d.ts.map +1 -0
- package/dist/push-policy.js +3 -0
- package/dist/push-policy.js.map +1 -0
- package/dist/push-sender.d.ts +18 -0
- package/dist/push-sender.d.ts.map +1 -0
- package/dist/push-sender.js +33 -0
- package/dist/push-sender.js.map +1 -0
- package/dist/push-subscription.d.ts +17 -0
- package/dist/push-subscription.d.ts.map +1 -0
- package/dist/push-subscription.js +62 -0
- package/dist/push-subscription.js.map +1 -0
- package/dist/push-worker.d.ts +20 -0
- package/dist/push-worker.d.ts.map +1 -0
- package/dist/push-worker.js +32 -0
- package/dist/push-worker.js.map +1 -0
- package/dist/pwa.d.ts +39 -0
- package/dist/pwa.d.ts.map +1 -0
- package/dist/pwa.js +51 -0
- package/dist/pwa.js.map +1 -0
- package/dist/shell-view.d.ts +20 -0
- package/dist/shell-view.d.ts.map +1 -0
- package/dist/shell-view.js +86 -0
- package/dist/shell-view.js.map +1 -0
- package/dist/store.d.ts +46 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +291 -0
- package/dist/store.js.map +1 -0
- package/dist/work-checkpoint.d.ts +107 -0
- package/dist/work-checkpoint.d.ts.map +1 -0
- package/dist/work-checkpoint.js +37 -0
- package/dist/work-checkpoint.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-model.d.ts","sourceRoot":"","sources":["../src/dashboard-model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,eAAO,MAAM,YAAY;;;;EAIvB,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;EAI5B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;EAO1B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIjC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIhC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOhC,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;EASjC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;EAOtC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKhC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG/B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB5B,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAC7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AACrE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAC7D,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAA;AACnE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AACzD,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AACvE,MAAM,MAAM,2BAA2B,GAAG,OAAO,2BAA2B,CAAC,IAAI,CAAA;AACjF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AACvE,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ChatHistory } from "@knpkv/herdr-coordinator/model";
|
|
2
|
+
import { HostStatus, JobPayload, JobRecord, PendingApprovalCursor } from "@knpkv/herdr-fleet/model";
|
|
3
|
+
import { WorkSnapshots } from "@knpkv/herdr-work/model";
|
|
4
|
+
import { Schema } from "effect";
|
|
5
|
+
export const ApprovalLink = Schema.Struct({
|
|
6
|
+
host: Schema.String,
|
|
7
|
+
online: Schema.Boolean,
|
|
8
|
+
url: Schema.NullOr(Schema.String)
|
|
9
|
+
});
|
|
10
|
+
export const ApprovalDirectory = Schema.Struct({
|
|
11
|
+
currentUrl: Schema.String,
|
|
12
|
+
links: Schema.Array(ApprovalLink),
|
|
13
|
+
error: Schema.NullOr(Schema.String)
|
|
14
|
+
});
|
|
15
|
+
export const PendingApproval = Schema.Struct({
|
|
16
|
+
id: Schema.String,
|
|
17
|
+
createdAt: Schema.Number,
|
|
18
|
+
actor: Schema.String,
|
|
19
|
+
approvalExpiresAt: Schema.NullOr(Schema.Number),
|
|
20
|
+
status: Schema.Literal("pending_approval"),
|
|
21
|
+
payload: JobPayload
|
|
22
|
+
});
|
|
23
|
+
export const PendingApprovalSummary = Schema.Struct({
|
|
24
|
+
host: Schema.String,
|
|
25
|
+
approvals: Schema.Array(PendingApproval),
|
|
26
|
+
nextCursor: Schema.NullOr(PendingApprovalCursor)
|
|
27
|
+
});
|
|
28
|
+
export const RemotePendingApproval = Schema.Struct({
|
|
29
|
+
host: Schema.String,
|
|
30
|
+
approvalUrl: Schema.String,
|
|
31
|
+
approval: PendingApproval
|
|
32
|
+
});
|
|
33
|
+
export const PendingApprovalTarget = Schema.Union([
|
|
34
|
+
Schema.TaggedStruct("local", {
|
|
35
|
+
record: JobRecord
|
|
36
|
+
}),
|
|
37
|
+
Schema.TaggedStruct("remote", {
|
|
38
|
+
remote: RemotePendingApproval
|
|
39
|
+
})
|
|
40
|
+
]);
|
|
41
|
+
export const PendingApprovalFailure = Schema.Struct({
|
|
42
|
+
host: Schema.String,
|
|
43
|
+
reason: Schema.Literals([
|
|
44
|
+
"offline",
|
|
45
|
+
"unavailable",
|
|
46
|
+
"timeout",
|
|
47
|
+
"request_failed",
|
|
48
|
+
"invalid_response"
|
|
49
|
+
])
|
|
50
|
+
});
|
|
51
|
+
export const PendingApprovalContinuation = Schema.Struct({
|
|
52
|
+
host: Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(253), Schema.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?$/)),
|
|
53
|
+
cursor: PendingApprovalCursor
|
|
54
|
+
});
|
|
55
|
+
export const FleetPendingApprovals = Schema.Struct({
|
|
56
|
+
local: Schema.Array(JobRecord),
|
|
57
|
+
remote: Schema.Array(RemotePendingApproval),
|
|
58
|
+
failures: Schema.Array(PendingApprovalFailure),
|
|
59
|
+
nextCursors: Schema.Array(PendingApprovalContinuation)
|
|
60
|
+
});
|
|
61
|
+
export const DashboardHistoryPage = Schema.Struct({
|
|
62
|
+
records: Schema.Array(JobRecord),
|
|
63
|
+
nextCursor: Schema.NullOr(PendingApprovalCursor)
|
|
64
|
+
});
|
|
65
|
+
export const DashboardSnapshot = Schema.Struct({
|
|
66
|
+
host: Schema.String,
|
|
67
|
+
observedAt: Schema.Number,
|
|
68
|
+
approvalsEnabled: Schema.Boolean,
|
|
69
|
+
approvalApp: Schema.Struct({
|
|
70
|
+
canonical: Schema.Boolean,
|
|
71
|
+
canonicalUrl: Schema.String,
|
|
72
|
+
chatEnabled: Schema.Boolean,
|
|
73
|
+
pushEnabled: Schema.Boolean
|
|
74
|
+
}),
|
|
75
|
+
chat: Schema.NullOr(ChatHistory),
|
|
76
|
+
work: Schema.NullOr(WorkSnapshots),
|
|
77
|
+
status: HostStatus,
|
|
78
|
+
records: Schema.Array(JobRecord),
|
|
79
|
+
historyNextCursor: Schema.NullOr(PendingApprovalCursor),
|
|
80
|
+
directory: Schema.NullOr(ApprovalDirectory),
|
|
81
|
+
pendingApprovals: FleetPendingApprovals
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=dashboard-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-model.js","sourceRoot":"","sources":["../src/dashboard-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { DashboardSnapshot } from "./dashboard-model.js";
|
|
2
|
+
import type { ChatMode } from "@knpkv/herdr-coordinator/model";
|
|
3
|
+
import { type NotificationState } from "./approval-app-view.js";
|
|
4
|
+
export type ApprovalDecision = {
|
|
5
|
+
readonly decision: "approve" | "reject";
|
|
6
|
+
readonly hash: string;
|
|
7
|
+
readonly jobId: string;
|
|
8
|
+
readonly nonce: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const approvalShortcutFor: ({ key, modified, shift }: {
|
|
11
|
+
readonly key: string;
|
|
12
|
+
readonly modified: boolean;
|
|
13
|
+
readonly shift: boolean;
|
|
14
|
+
}) => ApprovalDecision["decision"] | null;
|
|
15
|
+
type DashboardViewProps = {
|
|
16
|
+
readonly approvalOnly?: boolean;
|
|
17
|
+
readonly busyJobId: string | null;
|
|
18
|
+
readonly chatBusy: boolean;
|
|
19
|
+
readonly notificationState: NotificationState;
|
|
20
|
+
readonly historyLoading?: boolean;
|
|
21
|
+
readonly pendingLoading?: boolean;
|
|
22
|
+
readonly onChatSubmit: ((mode: ChatMode, message: string) => Promise<boolean>) | undefined;
|
|
23
|
+
readonly onDecision: ((decision: ApprovalDecision) => void) | undefined;
|
|
24
|
+
readonly onDisableNotifications: (() => void) | undefined;
|
|
25
|
+
readonly onEnableNotifications: (() => void) | undefined;
|
|
26
|
+
readonly onLoadHistory?: (() => void) | undefined;
|
|
27
|
+
readonly onLoadPending?: (() => void) | undefined;
|
|
28
|
+
readonly onRefresh: (() => void) | undefined;
|
|
29
|
+
readonly pull: {
|
|
30
|
+
readonly distance: number;
|
|
31
|
+
readonly ready: boolean;
|
|
32
|
+
readonly refreshing: boolean;
|
|
33
|
+
};
|
|
34
|
+
readonly snapshot: DashboardSnapshot;
|
|
35
|
+
readonly showHeader?: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare const AgentActivity: ({ snapshot }: {
|
|
38
|
+
readonly snapshot: DashboardSnapshot;
|
|
39
|
+
}) => import("react").JSX.Element;
|
|
40
|
+
export declare const DashboardView: ({ approvalOnly, busyJobId, chatBusy, historyLoading, notificationState, onChatSubmit, onDecision, onDisableNotifications, onEnableNotifications, onLoadHistory, onLoadPending, onRefresh, pendingLoading, pull, showHeader, snapshot }: DashboardViewProps) => import("react").JSX.Element;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=dashboard-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-view.d.ts","sourceRoot":"","sources":["../src/dashboard-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAA2C,MAAM,sBAAsB,CAAA;AACtG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAA2C,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAIxG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,mBAAmB,6BAI7B;IACD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB,KAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,IAKlC,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;IAC1F,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACvE,QAAQ,CAAC,sBAAsB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IACzD,QAAQ,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;QACvB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;KAC7B,CAAA;IACD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAiUD,eAAO,MAAM,aAAa,iBAAkB;IAAE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;CAAE,gCAqCnF,CAAA;AAuHD,eAAO,MAAM,aAAa,2OAiBvB,kBAAkB,gCAiNpB,CAAA"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, StateLabel, Surface, Text } from "@knpkv/rly/primitives";
|
|
3
|
+
import { FreshnessStamp } from "@knpkv/rly/patterns";
|
|
4
|
+
import { CoordinatorChatPanel, NotificationPanel } from "./approval-app-view.js";
|
|
5
|
+
import { requiresApproval } from "@knpkv/herdr-fleet/model";
|
|
6
|
+
import { ActivityHistory, jobTitle, statusLabel, statusTone } from "./activity-history.js";
|
|
7
|
+
export const approvalShortcutFor = ({ key, modified, shift }) => {
|
|
8
|
+
if (!modified)
|
|
9
|
+
return null;
|
|
10
|
+
if (key === "Enter" && !shift)
|
|
11
|
+
return "approve";
|
|
12
|
+
if (key === "Backspace" && shift)
|
|
13
|
+
return "reject";
|
|
14
|
+
return null;
|
|
15
|
+
};
|
|
16
|
+
const pendingCreatedAt = (item) => item._tag === "local" ? item.record.createdAt : item.remote.approval.createdAt;
|
|
17
|
+
const jobSummary = (record) => {
|
|
18
|
+
switch (record.payload.kind) {
|
|
19
|
+
case "browser.mcp.recover":
|
|
20
|
+
return "Local browser MCP recovery";
|
|
21
|
+
case "nix.check":
|
|
22
|
+
return "Repository checks";
|
|
23
|
+
case "nix.apply":
|
|
24
|
+
return `Revision ${record.payload.ref}`;
|
|
25
|
+
case "agent.delegate":
|
|
26
|
+
return `${record.payload.mode} · ${record.payload.prompt}`;
|
|
27
|
+
case "agent.message":
|
|
28
|
+
return `${record.payload.session} · ${record.payload.message}`;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const iso = (timestamp) => new Date(timestamp).toISOString();
|
|
32
|
+
const timeLabel = (timestamp) => new Intl.DateTimeFormat("en-GB", {
|
|
33
|
+
hour: "2-digit",
|
|
34
|
+
minute: "2-digit"
|
|
35
|
+
}).format(timestamp);
|
|
36
|
+
const lifecycleTime = (label, timestamp, actor) => (_jsxs("li", { children: [_jsx("span", { children: label }), timestamp == null ? (_jsx("small", { children: "Time unavailable" })) : (_jsx("time", { dateTime: iso(timestamp), children: timeLabel(timestamp) })), actor == null ? null : _jsxs("small", { children: ["by ", actor] })] }));
|
|
37
|
+
const JobTimeline = ({ record }) => (_jsxs("ol", { className: "job-lifecycle", "aria-label": "Job lifecycle", children: [lifecycleTime("Arrived", record.createdAt, record.actor), record.approvedBy === null ? null : lifecycleTime("Approved", record.approvedAt, record.approvedBy), record.status === "rejected" || record.rejectedBy != null
|
|
38
|
+
? lifecycleTime("Rejected", record.rejectedAt, record.rejectedBy)
|
|
39
|
+
: null, record.status === "expired"
|
|
40
|
+
? lifecycleTime("Expired", record.expiredAt)
|
|
41
|
+
: record.status === "pending_approval"
|
|
42
|
+
? lifecycleTime("Expires", record.approvalExpiresAt)
|
|
43
|
+
: null] }));
|
|
44
|
+
const ApprovalActions = ({ busy, onDecision, record }) => {
|
|
45
|
+
if (onDecision === undefined || record.status !== "pending_approval" || record.approvalNonce === null) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const submit = (decision) => (event) => {
|
|
49
|
+
if (onDecision === undefined)
|
|
50
|
+
return;
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
onDecision({
|
|
53
|
+
decision,
|
|
54
|
+
hash: record.hash,
|
|
55
|
+
jobId: record.id,
|
|
56
|
+
nonce: record.approvalNonce ?? ""
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
const jobPath = encodeURIComponent(record.id);
|
|
60
|
+
return (_jsxs("div", { className: "approval-actions", children: [_jsxs("form", { method: "post", action: `/v1/jobs/${jobPath}/reject`, onSubmit: submit("reject"), children: [_jsx("input", { type: "hidden", name: "hash", value: record.hash }), _jsx("input", { type: "hidden", name: "nonce", value: record.approvalNonce }), _jsx(Button, { type: "submit", variant: "quiet", disabled: busy, children: "Reject" })] }), _jsxs("form", { method: "post", action: `/v1/jobs/${jobPath}/approve`, onSubmit: submit("approve"), children: [_jsx("input", { type: "hidden", name: "hash", value: record.hash }), _jsx("input", { type: "hidden", name: "nonce", value: record.approvalNonce }), _jsx(Button, { type: "submit", variant: "primary", loading: busy, children: "Approve" })] })] }));
|
|
61
|
+
};
|
|
62
|
+
const AgendaItem = ({ busy, connectBaseUrl, host, onDecision, record }) => {
|
|
63
|
+
const handleShortcut = (event) => {
|
|
64
|
+
if (event.target !== event.currentTarget || busy || onDecision === undefined)
|
|
65
|
+
return;
|
|
66
|
+
const decision = approvalShortcutFor({
|
|
67
|
+
key: event.key,
|
|
68
|
+
modified: event.ctrlKey || event.metaKey,
|
|
69
|
+
shift: event.shiftKey
|
|
70
|
+
});
|
|
71
|
+
const nonce = record.approvalNonce;
|
|
72
|
+
if (decision === null || record.status !== "pending_approval" || nonce === null)
|
|
73
|
+
return;
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
onDecision({ decision, hash: record.hash, jobId: record.id, nonce });
|
|
76
|
+
};
|
|
77
|
+
const actionable = onDecision !== undefined && record.status === "pending_approval" && record.approvalNonce !== null;
|
|
78
|
+
return (_jsxs(Surface, { as: "article", padding: "default", tone: "secondary", className: "agenda-item", "data-agenda-item": "", "data-approval-host": host, "data-approval-job": record.id, onKeyDown: handleShortcut, tabIndex: 0, children: [_jsxs("div", { className: "agenda-heading", children: [_jsxs("div", { children: [_jsx(Text, { as: "h3", variant: "card-title", children: jobTitle(record) }), _jsx(Text, { as: "p", tone: "secondary", children: jobSummary(record) })] }), _jsx(StateLabel, { label: statusLabel(record.status), tone: statusTone(record.status), size: "compact" })] }), _jsx(JobTimeline, { record: record }), record.connectTarget === undefined || record.worker === undefined ? null : (_jsxs("a", { className: "worker-connect-link", href: new URL(record.connectTarget.url, connectBaseUrl).href, children: ["Open ", record.worker.name, " in Connect"] })), _jsx(ApprovalActions, { busy: busy, onDecision: onDecision, record: record }), actionable ? (_jsxs("div", { className: "keyboard-hints", "aria-label": "Approval keyboard shortcuts", children: [_jsxs("span", { children: [_jsx("kbd", { children: "\u2318/Ctrl" }), " ", _jsx("kbd", { children: "Enter" }), " Approve"] }), _jsxs("span", { children: [_jsx("kbd", { children: "\u2318/Ctrl" }), " ", _jsx("kbd", { children: "Shift" }), " ", _jsx("kbd", { children: "\u232B" }), " Reject"] })] })) : null] }));
|
|
79
|
+
};
|
|
80
|
+
const RemoteAgendaItem = ({ approval, approvalUrl, host }) => (_jsxs(Surface, { as: "article", padding: "default", tone: "secondary", className: "agenda-item agenda-item-remote", "data-agenda-item": "", "data-approval-host": host, "data-approval-job": approval.id, tabIndex: 0, children: [_jsxs("div", { className: "agenda-heading", children: [_jsxs("div", { children: [_jsxs(Text, { variant: "meta", tone: "secondary", children: ["Remote \u00B7 ", host] }), _jsx(Text, { as: "h3", variant: "card-title", children: jobTitle(approval) }), _jsx(Text, { as: "p", tone: "secondary", children: jobSummary(approval) })] }), _jsx(StateLabel, { label: "Waiting", tone: "caution", size: "compact" })] }), _jsxs("ol", { className: "job-lifecycle", "aria-label": "Job lifecycle", children: [lifecycleTime("Arrived", approval.createdAt, approval.actor), lifecycleTime("Expires", approval.approvalExpiresAt)] }), _jsxs("a", { className: "remote-approval-link", href: approvalUrl, "aria-label": `Review approval on ${host}`, children: ["Review on ", host] })] }));
|
|
81
|
+
const pendingFailureLabel = (failure) => {
|
|
82
|
+
switch (failure.reason) {
|
|
83
|
+
case "offline":
|
|
84
|
+
return `${failure.host} offline`;
|
|
85
|
+
case "unavailable":
|
|
86
|
+
return `${failure.host} unavailable`;
|
|
87
|
+
case "timeout":
|
|
88
|
+
return `${failure.host} timed out`;
|
|
89
|
+
case "request_failed":
|
|
90
|
+
return `${failure.host} request failed`;
|
|
91
|
+
case "invalid_response":
|
|
92
|
+
return `${failure.host} returned invalid data`;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
const Summary = ({ snapshot }) => {
|
|
96
|
+
const pending = snapshot.pendingApprovals.local.length + snapshot.pendingApprovals.remote.length;
|
|
97
|
+
const pendingUnknown = snapshot.pendingApprovals.failures.length > 0;
|
|
98
|
+
const active = snapshot.records.filter((record) => record.status === "queued" || record.status === "running").length;
|
|
99
|
+
const agents = snapshot.status.herdr.agents.length;
|
|
100
|
+
return (_jsxs("section", { className: "summary-grid", "aria-label": "Current host state", children: [_jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Agents online" }), _jsx("strong", { children: agents }), _jsx("small", { children: snapshot.status.herdr.available ? "Herdr connected" : "Herdr unavailable" })] }), _jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Needs approval" }), _jsx("strong", { children: pendingUnknown ? `${pending}+` : pending }), _jsx("small", { children: pendingUnknown ? "Some machines unchecked" : pending === 0 ? "Nothing waiting" : "Decision required" })] }), _jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Active work" }), _jsx("strong", { children: active }), _jsx("small", { children: "Queued or running" })] }), _jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Repository" }), _jsx("strong", { className: "summary-branch", children: snapshot.status.branch }), _jsx("small", { children: snapshot.status.dirty ? "Local changes" : "Clean" })] })] }));
|
|
101
|
+
};
|
|
102
|
+
const ApprovalSummary = ({ snapshot }) => {
|
|
103
|
+
const local = snapshot.pendingApprovals.local.length;
|
|
104
|
+
const remote = snapshot.pendingApprovals.remote.length;
|
|
105
|
+
const recentDecisions = snapshot.records.filter((record) => requiresApproval(record.payload) &&
|
|
106
|
+
(record.approvedBy !== null || record.rejectedBy !== null || record.status === "expired")).length;
|
|
107
|
+
return (_jsxs("section", { className: "summary-grid", "aria-label": "Approval state", children: [_jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Pending" }), _jsx("strong", { children: local + remote }), _jsx("small", { children: "Exact decisions waiting" })] }), _jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Local decisions" }), _jsx("strong", { children: local }), _jsx("small", { children: "Owned by this host" })] }), _jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Remote handoffs" }), _jsx("strong", { children: remote }), _jsx("small", { children: "Open on owning host" })] }), _jsxs(Surface, { padding: "default", tone: "secondary", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Recent decisions" }), _jsx("strong", { children: recentDecisions }), _jsx("small", { children: "Approved, rejected, or expired" })] })] }));
|
|
108
|
+
};
|
|
109
|
+
export const AgentActivity = ({ snapshot }) => (_jsxs(Surface, { as: "section", padding: "spacious", className: "agents-panel", children: [_jsxs("div", { className: "section-heading", children: [_jsxs("div", { children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Right now" }), _jsx(Text, { as: "h2", variant: "section-title", children: "Agent activity" })] }), _jsx(StateLabel, { label: `${snapshot.status.herdr.agents.length} agents`, tone: snapshot.status.herdr.available ? "positive" : "critical", size: "compact" })] }), _jsxs("div", { className: "agent-grid", children: [snapshot.status.herdr.agents.map((agent) => (_jsx(Surface, { tone: "tertiary", padding: "compact", children: _jsxs("div", { className: "agent-line", children: [_jsx("span", { className: "agent-presence", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx(Text, { as: "strong", variant: "label", children: agent.name }), _jsxs(Text, { as: "small", variant: "meta", tone: "secondary", children: [agent.kind, " \u00B7 ", agent.work] })] }), _jsx(StateLabel, { label: agent.status, tone: "progress", size: "compact" })] }) }, agent.paneId))), snapshot.status.herdr.agents.length === 0 ? _jsx(Text, { tone: "secondary", children: "No active agents." }) : null] })] }));
|
|
110
|
+
const ApprovalDecisionHistory = ({ records }) => {
|
|
111
|
+
const decisionFor = (record) => {
|
|
112
|
+
if (record.rejectedBy != null) {
|
|
113
|
+
return {
|
|
114
|
+
actor: record.rejectedBy,
|
|
115
|
+
label: "Rejected",
|
|
116
|
+
timestamp: record.rejectedAt ?? record.updatedAt,
|
|
117
|
+
tone: "critical"
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (record.status === "expired") {
|
|
121
|
+
return { actor: "hostd", label: "Expired", timestamp: record.expiredAt ?? record.updatedAt, tone: "caution" };
|
|
122
|
+
}
|
|
123
|
+
if (record.approvedBy !== null) {
|
|
124
|
+
return {
|
|
125
|
+
actor: record.approvedBy,
|
|
126
|
+
label: "Approved",
|
|
127
|
+
timestamp: record.approvedAt ?? record.updatedAt,
|
|
128
|
+
tone: "positive"
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
};
|
|
133
|
+
const decisions = records
|
|
134
|
+
.filter((record) => requiresApproval(record.payload))
|
|
135
|
+
.flatMap((record) => {
|
|
136
|
+
const decision = decisionFor(record);
|
|
137
|
+
return decision === null ? [] : [{ decision, record }];
|
|
138
|
+
})
|
|
139
|
+
.sort((left, right) => right.decision.timestamp - left.decision.timestamp);
|
|
140
|
+
const visibleDecisions = decisions.slice(0, 10);
|
|
141
|
+
return (_jsxs(Surface, { as: "section", padding: "spacious", className: "decision-history-panel", children: [_jsxs("div", { className: "section-heading", children: [_jsxs("div", { children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Decisions" }), _jsx(Text, { as: "h2", variant: "section-title", children: "Recent approval history" })] }), _jsxs(Text, { variant: "meta", tone: "secondary", children: [visibleDecisions.length, " recent \u00B7 ", decisions.length, " total"] })] }), decisions.length === 0 ? (_jsx(Text, { tone: "secondary", children: "No approval decisions yet." })) : (_jsx("ol", { className: "decision-history-list", children: visibleDecisions.map(({ decision, record }) => (_jsxs("li", { children: [_jsxs("div", { children: [_jsx(Text, { as: "strong", variant: "label", children: jobTitle(record) }), _jsxs(Text, { tone: "secondary", variant: "meta", children: [timeLabel(decision.timestamp), " \u00B7 ", decision.actor] })] }), _jsx(StateLabel, { label: decision.label, size: "compact", tone: decision.tone })] }, record.id))) }))] }));
|
|
142
|
+
};
|
|
143
|
+
const Machines = ({ snapshot }) => {
|
|
144
|
+
if (snapshot.directory === null)
|
|
145
|
+
return null;
|
|
146
|
+
return (_jsxs(Surface, { as: "section", padding: "spacious", className: "machine-panel", children: [_jsx("div", { className: "section-heading", children: _jsxs("div", { children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Fleet" }), _jsx(Text, { as: "h2", variant: "section-title", children: "Other machines" })] }) }), _jsxs("nav", { className: "machine-grid", "aria-label": "Fleet approval pages", children: [_jsxs("a", { className: "machine machine-current", href: snapshot.directory.currentUrl, children: [_jsx(StateLabel, { label: "This machine", tone: "progress", size: "compact" }), _jsx("strong", { children: snapshot.host })] }), snapshot.directory.links.map((link) => link.url !== null && link.online ? (_jsxs("a", { className: "machine", href: link.url, children: [_jsx(StateLabel, { label: "Online", tone: "positive", size: "compact" }), _jsx("strong", { children: link.host })] }, link.host)) : (_jsxs("span", { className: "machine machine-offline", children: [_jsx(StateLabel, { label: "Offline", tone: "neutral", size: "compact" }), _jsx("strong", { children: link.host })] }, link.host)))] }), snapshot.directory.error === null ? null : (_jsx(Text, { className: "notice", tone: "secondary", children: "Machine links unavailable. Local approvals still work." }))] }));
|
|
147
|
+
};
|
|
148
|
+
export const DashboardView = ({ approvalOnly = false, busyJobId, chatBusy, historyLoading = false, notificationState, onChatSubmit, onDecision, onDisableNotifications, onEnableNotifications, onLoadHistory, onLoadPending, onRefresh, pendingLoading = false, pull, showHeader = true, snapshot }) => {
|
|
149
|
+
const active = snapshot.records.filter((record) => !approvalOnly && (record.status === "queued" || record.status === "running"));
|
|
150
|
+
const pendingAgenda = [
|
|
151
|
+
...snapshot.pendingApprovals.local.map((record) => ({ _tag: "local", record })),
|
|
152
|
+
...snapshot.pendingApprovals.remote.map((remote) => ({ _tag: "remote", remote }))
|
|
153
|
+
].sort((left, right) => pendingCreatedAt(right) - pendingCreatedAt(left));
|
|
154
|
+
const pendingUnknown = snapshot.pendingApprovals.failures.length > 0;
|
|
155
|
+
const agendaCount = pendingAgenda.length + active.length;
|
|
156
|
+
const history = snapshot.records.filter((record) => (!approvalOnly || requiresApproval(record.payload)) &&
|
|
157
|
+
record.status !== "pending_approval" &&
|
|
158
|
+
record.status !== "queued" &&
|
|
159
|
+
record.status !== "running");
|
|
160
|
+
const pullLabel = pull.refreshing ? "Refreshing" : pull.ready ? "Release to refresh" : "Pull to refresh";
|
|
161
|
+
const approvalDecision = snapshot.approvalsEnabled ? onDecision : undefined;
|
|
162
|
+
const moveAgendaFocus = (event) => {
|
|
163
|
+
const items = [...event.currentTarget.querySelectorAll("[data-agenda-item]")];
|
|
164
|
+
const currentIndex = items.findIndex((item) => item === event.target);
|
|
165
|
+
if (currentIndex < 0 || items.length === 0)
|
|
166
|
+
return;
|
|
167
|
+
let nextIndex = null;
|
|
168
|
+
switch (event.key) {
|
|
169
|
+
case "ArrowDown":
|
|
170
|
+
case "j":
|
|
171
|
+
nextIndex = (currentIndex + 1) % items.length;
|
|
172
|
+
break;
|
|
173
|
+
case "ArrowUp":
|
|
174
|
+
case "k":
|
|
175
|
+
nextIndex = (currentIndex - 1 + items.length) % items.length;
|
|
176
|
+
break;
|
|
177
|
+
case "Home":
|
|
178
|
+
nextIndex = 0;
|
|
179
|
+
break;
|
|
180
|
+
case "End":
|
|
181
|
+
nextIndex = items.length - 1;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
if (nextIndex === null)
|
|
185
|
+
return;
|
|
186
|
+
const next = items.at(nextIndex);
|
|
187
|
+
if (next === undefined)
|
|
188
|
+
return;
|
|
189
|
+
event.preventDefault();
|
|
190
|
+
next.focus();
|
|
191
|
+
};
|
|
192
|
+
return (_jsxs("div", { className: "dashboard-root", "data-pulling": pull.distance > 0, "data-pull-ready": pull.ready, style: { "--pull-distance": `${pull.distance}px` }, children: [_jsxs("div", { className: "pull-refresh", "aria-hidden": "true", children: [_jsx("span", { children: "\u2193" }), _jsx("strong", { children: pullLabel })] }), _jsxs("main", { className: "app", children: [showHeader ? (_jsxs("header", { className: "app-header", children: [_jsxs("div", { className: "fleet-mark", "aria-hidden": "true", children: [_jsx("i", {}), _jsx("i", {}), _jsx("i", {})] }), _jsxs("div", { className: "app-title", children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Host activity" }), _jsx(Text, { as: "h1", variant: "page-title", children: snapshot.host })] }), _jsxs("div", { className: "header-actions", children: [snapshot.approvalApp.canonical ? (_jsxs("nav", { className: "fleet-app-nav", "aria-label": "Fleet applications", children: [_jsx("a", { href: "/", "aria-current": "page", children: "Approvals" }), _jsx("a", { href: "/connect/", children: "Connect" })] })) : null, _jsx(FreshnessStamp, { state: "current", dateTime: iso(snapshot.observedAt), time: timeLabel(snapshot.observedAt), size: "compact" }), onRefresh === undefined ? null : (_jsx(Button, { variant: "quiet", size: "compact", onClick: onRefresh, children: "Refresh" }))] })] })) : null, approvalOnly ? _jsx(ApprovalSummary, { snapshot: snapshot }) : _jsx(Summary, { snapshot: snapshot }), snapshot.approvalApp.canonical && snapshot.chat !== null ? (_jsxs(_Fragment, { children: [_jsx(NotificationPanel, { canonicalUrl: snapshot.approvalApp.canonicalUrl, onDisable: onDisableNotifications, onEnable: onEnableNotifications, state: notificationState }), approvalOnly ? null : (_jsx(CoordinatorChatPanel, { busy: chatBusy, history: snapshot.chat, onSubmit: onChatSubmit }))] })) : snapshot.approvalApp.canonical ? null : (_jsxs(Surface, { padding: "default", tone: "secondary", className: "hub-link", children: [_jsx(Text, { tone: "secondary", children: "Notifications and coordinator chat live on the canonical hub." }), _jsxs("a", { href: snapshot.approvalApp.canonicalUrl, children: ["Open ", new URL(snapshot.approvalApp.canonicalUrl).host] })] })), approvalOnly ? null : _jsx(AgentActivity, { snapshot: snapshot }), _jsxs(Surface, { as: "section", padding: "spacious", className: "agenda-panel", children: [_jsxs("div", { className: "section-heading", children: [_jsxs("div", { children: [_jsx(Text, { variant: "meta", tone: "secondary", children: "Agenda" }), _jsx(Text, { as: "h2", variant: "section-title", children: "Needs attention" })] }), _jsx(StateLabel, { label: `${agendaCount} ${pendingUnknown ? "known " : ""}open`, tone: agendaCount === 0 && !pendingUnknown ? "positive" : "caution", size: "compact" })] }), _jsxs("div", { className: "agenda-list", onKeyDown: moveAgendaFocus, children: [pendingAgenda.map((item) => item._tag === "local" ? (_jsx(AgendaItem, { busy: busyJobId === item.record.id, connectBaseUrl: snapshot.approvalApp.canonicalUrl, host: snapshot.host, onDecision: approvalDecision, record: item.record }, item.record.id)) : (_jsx(RemoteAgendaItem, { approval: item.remote.approval, approvalUrl: item.remote.approvalUrl, host: item.remote.host }, `${item.remote.host}:${item.remote.approval.id}`))), active.map((record) => (_jsx(AgendaItem, { busy: busyJobId === record.id, connectBaseUrl: snapshot.approvalApp.canonicalUrl, host: snapshot.host, onDecision: approvalDecision, record: record }, record.id))), snapshot.pendingApprovals.failures.length === 0 ? null : (_jsxs(Text, { className: "notice", tone: "secondary", children: ["Could not check ", snapshot.pendingApprovals.failures.map(pendingFailureLabel).join(", "), ". Local approvals still work."] })), snapshot.pendingApprovals.nextCursors.length === 0 ? null : (_jsx("div", { className: "activity-load-more", children: _jsx(Button, { loading: pendingLoading, onClick: onLoadPending, type: "button", variant: "quiet", children: "Load more approvals" }) })), agendaCount === 0 && !pendingUnknown ? (_jsxs("div", { className: "empty", children: [_jsx("span", { children: "\u2713" }), _jsx(Text, { as: "h3", variant: "card-title", children: "Nothing waiting" }), _jsx(Text, { tone: "secondary", children: "All current work is settled." })] })) : null] })] }), approvalOnly ? (_jsxs(_Fragment, { children: [_jsx(ApprovalDecisionHistory, { records: snapshot.records }), snapshot.historyNextCursor === null ? null : (_jsx("div", { className: "activity-load-more", children: _jsx(Button, { loading: historyLoading, onClick: onLoadHistory, type: "button", variant: "quiet", children: "Load earlier decisions" }) }))] })) : (_jsx(ActivityHistory, { hasMore: snapshot.historyNextCursor !== null, loading: historyLoading, ...(onLoadHistory === undefined ? {} : { onLoadMore: onLoadHistory }), records: history })), _jsx(Machines, { snapshot: snapshot })] })] }));
|
|
193
|
+
};
|
|
194
|
+
//# sourceMappingURL=dashboard-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-view.js","sourceRoot":"","sources":["../src/dashboard-view.tsx"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const ApprovalAppStoreError_base: Schema.Class<ApprovalAppStoreError, Schema.TaggedStruct<"ApprovalAppStoreError", {
|
|
3
|
+
readonly cause: Schema.Defect;
|
|
4
|
+
readonly detail: Schema.String;
|
|
5
|
+
readonly operation: Schema.String;
|
|
6
|
+
}>, import("effect/Cause").YieldableError>;
|
|
7
|
+
export declare class ApprovalAppStoreError extends ApprovalAppStoreError_base {
|
|
8
|
+
}
|
|
9
|
+
declare const DashboardResponseBudgetError_base: Schema.Class<DashboardResponseBudgetError, Schema.TaggedStruct<"DashboardResponseBudgetError", {
|
|
10
|
+
readonly encodedBytes: Schema.Number;
|
|
11
|
+
readonly maximumBytes: Schema.Number;
|
|
12
|
+
}>, import("effect/Cause").YieldableError>;
|
|
13
|
+
export declare class DashboardResponseBudgetError extends DashboardResponseBudgetError_base {
|
|
14
|
+
}
|
|
15
|
+
declare const PushDeliveryError_base: Schema.Class<PushDeliveryError, Schema.TaggedStruct<"PushDeliveryError", {
|
|
16
|
+
readonly cause: Schema.Defect;
|
|
17
|
+
readonly operation: Schema.String;
|
|
18
|
+
readonly statusCode: Schema.NullOr<Schema.Number>;
|
|
19
|
+
}>, import("effect/Cause").YieldableError>;
|
|
20
|
+
export declare class PushDeliveryError extends PushDeliveryError_base {
|
|
21
|
+
}
|
|
22
|
+
declare const PushEndpointNotAllowedError_base: Schema.Class<PushEndpointNotAllowedError, Schema.TaggedStruct<"PushEndpointNotAllowedError", {
|
|
23
|
+
readonly origin: Schema.String;
|
|
24
|
+
}>, import("effect/Cause").YieldableError>;
|
|
25
|
+
export declare class PushEndpointNotAllowedError extends PushEndpointNotAllowedError_base {
|
|
26
|
+
}
|
|
27
|
+
declare const PushSubscriptionCleanupError_base: Schema.Class<PushSubscriptionCleanupError, Schema.TaggedStruct<"PushSubscriptionCleanupError", {
|
|
28
|
+
readonly cause: Schema.Defect;
|
|
29
|
+
}>, import("effect/Cause").YieldableError>;
|
|
30
|
+
export declare class PushSubscriptionCleanupError extends PushSubscriptionCleanupError_base {
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;;;;;AAE/B,qBAAa,qBAAsB,SAAQ,0BAG1C;CAAG;;;;;AAEJ,qBAAa,4BAA6B,SAAQ,iCAGjD;CAAG;;;;;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAGtC;CAAG;;;;AAEJ,qBAAa,2BAA4B,SAAQ,gCAGhD;CAAG;;;;AAEJ,qBAAa,4BAA6B,SAAQ,iCAGjD;CAAG"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export class ApprovalAppStoreError extends Schema.TaggedError()("ApprovalAppStoreError", { cause: Schema.Defect(), detail: Schema.String, operation: Schema.String }) {
|
|
3
|
+
}
|
|
4
|
+
export class DashboardResponseBudgetError extends Schema.TaggedError()("DashboardResponseBudgetError", { encodedBytes: Schema.Number, maximumBytes: Schema.Number }) {
|
|
5
|
+
}
|
|
6
|
+
export class PushDeliveryError extends Schema.TaggedError()("PushDeliveryError", { cause: Schema.Defect(), operation: Schema.String, statusCode: Schema.NullOr(Schema.Number) }) {
|
|
7
|
+
}
|
|
8
|
+
export class PushEndpointNotAllowedError extends Schema.TaggedError()("PushEndpointNotAllowedError", { origin: Schema.String }) {
|
|
9
|
+
}
|
|
10
|
+
export class PushSubscriptionCleanupError extends Schema.TaggedError()("PushSubscriptionCleanupError", { cause: Schema.Defect() }) {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,WAAW,EAAyB,CACpF,uBAAuB,EACvB,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAC5E;CAAG;AAEJ,MAAM,OAAO,4BAA6B,SAAQ,MAAM,CAAC,WAAW,EAAgC,CAClG,8BAA8B,EAC9B,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAC7D;CAAG;AAEJ,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,WAAW,EAAqB,CAC5E,mBAAmB,EACnB,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC/F;CAAG;AAEJ,MAAM,OAAO,2BAA4B,SAAQ,MAAM,CAAC,WAAW,EAA+B,CAChG,6BAA6B,EAC7B,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAC1B;CAAG;AAEJ,MAAM,OAAO,4BAA6B,SAAQ,MAAM,CAAC,WAAW,EAAgC,CAClG,8BAA8B,EAC9B,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAC3B;CAAG"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type JobRecord } from "@knpkv/herdr-fleet";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
interface DetailedFailure {
|
|
4
|
+
readonly detail: string;
|
|
5
|
+
}
|
|
6
|
+
export type HostSubmissionOutcome = {
|
|
7
|
+
readonly approvalUrl: string | null;
|
|
8
|
+
readonly approvalUrlError: string | null;
|
|
9
|
+
readonly host: string;
|
|
10
|
+
readonly record: JobRecord;
|
|
11
|
+
} | {
|
|
12
|
+
readonly error: string;
|
|
13
|
+
readonly host: string;
|
|
14
|
+
readonly record: null;
|
|
15
|
+
};
|
|
16
|
+
export declare const submitToHost: <SubmissionError extends DetailedFailure, SubmissionRequirements, ApprovalError extends DetailedFailure, ApprovalRequirements>(host: string, submission: Effect.Effect<{
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly createdAt: number;
|
|
19
|
+
readonly updatedAt: number;
|
|
20
|
+
readonly actor: string;
|
|
21
|
+
readonly hash: string;
|
|
22
|
+
readonly approvalNonce: string | null;
|
|
23
|
+
readonly approvalExpiresAt?: number | null;
|
|
24
|
+
readonly approvedBy: string | null;
|
|
25
|
+
readonly approvedAt?: number | null;
|
|
26
|
+
readonly rejectedBy?: string | null;
|
|
27
|
+
readonly rejectedAt?: number | null;
|
|
28
|
+
readonly expiredAt?: number | null;
|
|
29
|
+
readonly status: "expired" | "failed" | "interrupted" | "pending_approval" | "queued" | "rejected" | "running" | "succeeded";
|
|
30
|
+
readonly payload: {
|
|
31
|
+
readonly kind: "nix.check";
|
|
32
|
+
} | {
|
|
33
|
+
readonly kind: "nix.apply";
|
|
34
|
+
readonly ref: string;
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: "agent.delegate";
|
|
37
|
+
readonly repository: string;
|
|
38
|
+
readonly prompt: string;
|
|
39
|
+
readonly mode: "consult" | "review" | "work";
|
|
40
|
+
readonly channel?: "coordinator_chat";
|
|
41
|
+
} | {
|
|
42
|
+
readonly kind: "agent.message";
|
|
43
|
+
readonly session: string;
|
|
44
|
+
readonly message: string;
|
|
45
|
+
} | {
|
|
46
|
+
readonly kind: "browser.mcp.recover";
|
|
47
|
+
};
|
|
48
|
+
readonly result: string | null;
|
|
49
|
+
readonly error: string | null;
|
|
50
|
+
readonly worker?: {
|
|
51
|
+
readonly host: string;
|
|
52
|
+
readonly agentId: string;
|
|
53
|
+
readonly name: string;
|
|
54
|
+
readonly paneId: string;
|
|
55
|
+
readonly relationship?: {
|
|
56
|
+
readonly parentAgentId: string;
|
|
57
|
+
readonly relation: "delegated" | "pair" | "review";
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
readonly connectTarget?: {
|
|
61
|
+
readonly host: string;
|
|
62
|
+
readonly agentId: string;
|
|
63
|
+
readonly url: string;
|
|
64
|
+
};
|
|
65
|
+
readonly workerTerminalObservedAt?: number | null;
|
|
66
|
+
}, SubmissionError, SubmissionRequirements>, approvalPage: Effect.Effect<string, ApprovalError, ApprovalRequirements>) => Effect.Effect<HostSubmissionOutcome, never, ApprovalRequirements | SubmissionRequirements>;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=fleetctl-submission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleetctl-submission.d.ts","sourceRoot":"","sources":["../src/fleetctl-submission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEvC,UAAU,eAAe;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IACA,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAC3B,GACC;IACA,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CACtB,CAAA;AAEH,eAAO,MAAM,YAAY,GACvB,eAAe,SAAS,eAAe,EACvC,sBAAsB,EACtB,aAAa,SAAS,eAAe,EACrC,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oNAoCpB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {} from "@knpkv/herdr-fleet";
|
|
2
|
+
import { Effect, Result } from "effect";
|
|
3
|
+
export const submitToHost = Effect.fn("Fleetctl.submitToHost")(function* (host, submission, approvalPage) {
|
|
4
|
+
const submitted = yield* Effect.result(submission);
|
|
5
|
+
if (Result.isFailure(submitted)) {
|
|
6
|
+
return { error: submitted.failure.detail, host, record: null };
|
|
7
|
+
}
|
|
8
|
+
if (submitted.success.status !== "pending_approval") {
|
|
9
|
+
return {
|
|
10
|
+
approvalUrl: null,
|
|
11
|
+
approvalUrlError: null,
|
|
12
|
+
host,
|
|
13
|
+
record: submitted.success
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const resolved = yield* Effect.result(approvalPage);
|
|
17
|
+
return Result.isSuccess(resolved)
|
|
18
|
+
? {
|
|
19
|
+
approvalUrl: resolved.success,
|
|
20
|
+
approvalUrlError: null,
|
|
21
|
+
host,
|
|
22
|
+
record: submitted.success
|
|
23
|
+
}
|
|
24
|
+
: {
|
|
25
|
+
approvalUrl: null,
|
|
26
|
+
approvalUrlError: resolved.failure.detail,
|
|
27
|
+
host,
|
|
28
|
+
record: submitted.success
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=fleetctl-submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleetctl-submission.js","sourceRoot":"","sources":["../src/fleetctl-submission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAmBvC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAMtE,IAAY,EACZ,UAA6E,EAC7E,YAAwE;IAMxE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAClD,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAChE,CAAC;IACD,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;QACpD,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,IAAI;YACtB,IAAI;YACJ,MAAM,EAAE,SAAS,CAAC,OAAO;SAC1B,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACnD,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC/B,CAAC,CAAC;YACA,WAAW,EAAE,QAAQ,CAAC,OAAO;YAC7B,gBAAgB,EAAE,IAAI;YACtB,IAAI;YACJ,MAAM,EAAE,SAAS,CAAC,OAAO;SAC1B;QACD,CAAC,CAAC;YACA,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;YACzC,IAAI;YACJ,MAAM,EAAE,SAAS,CAAC,OAAO;SAC1B,CAAA;AACL,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { FleetValidationError } from "@knpkv/herdr-fleet";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
export declare const payloadFrom: (args: readonly string[]) => Effect.Effect<{
|
|
5
|
+
readonly kind: "nix.check";
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: "nix.apply";
|
|
8
|
+
readonly ref: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: "agent.delegate";
|
|
11
|
+
readonly repository: string;
|
|
12
|
+
readonly prompt: string;
|
|
13
|
+
readonly mode: "consult" | "review" | "work";
|
|
14
|
+
readonly channel?: "coordinator_chat";
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: "agent.message";
|
|
17
|
+
readonly session: string;
|
|
18
|
+
readonly message: string;
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: "browser.mcp.recover";
|
|
21
|
+
}, FleetValidationError, never>;
|
|
22
|
+
//# sourceMappingURL=fleetctl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleetctl.d.ts","sourceRoot":"","sources":["../src/fleetctl.ts"],"names":[],"mappings":";AAEA,OAAO,EAGL,oBAAoB,EASrB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EAAW,MAAM,EAAwB,MAAM,QAAQ,CAAA;AAsJ9D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;+BA2DtB,CAAA"}
|