jfl 0.9.6 → 0.9.8
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/dist/commands/agents.js +1 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +77 -18
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/deploy.js +1 -1
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/feedback.js +1 -1
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/hud.js +1 -1
- package/dist/commands/hud.js.map +1 -1
- package/dist/commands/init-from-service.js +1 -1
- package/dist/commands/init-from-service.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/kanban.js +6 -6
- package/dist/commands/kanban.js.map +1 -1
- package/dist/commands/login.d.ts +2 -13
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +6 -44
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/organize.d.ts +16 -0
- package/dist/commands/organize.d.ts.map +1 -0
- package/dist/commands/organize.js +334 -0
- package/dist/commands/organize.js.map +1 -0
- package/dist/commands/peter.d.ts.map +1 -1
- package/dist/commands/peter.js +273 -0
- package/dist/commands/peter.js.map +1 -1
- package/dist/commands/pi.d.ts.map +1 -1
- package/dist/commands/pi.js +11 -5
- package/dist/commands/pi.js.map +1 -1
- package/dist/commands/repair.js +1 -1
- package/dist/commands/repair.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +113 -45
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +4 -4
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +66 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -19
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-config.d.ts.map +1 -1
- package/dist/lib/agent-config.js +24 -2
- package/dist/lib/agent-config.js.map +1 -1
- package/dist/lib/hub-health.d.ts.map +1 -1
- package/dist/lib/hub-health.js +14 -2
- package/dist/lib/hub-health.js.map +1 -1
- package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -1
- package/dist/lib/resource-optimizer-middleware.js +8 -2
- package/dist/lib/resource-optimizer-middleware.js.map +1 -1
- package/dist/lib/telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry.js +13 -12
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/utils/auth-status.d.ts +21 -0
- package/dist/utils/auth-status.d.ts.map +1 -0
- package/dist/utils/auth-status.js +53 -0
- package/dist/utils/auth-status.js.map +1 -0
- package/package.json +3 -2
- package/packages/pi/dist/agent-grid.d.ts +24 -0
- package/packages/pi/dist/agent-grid.d.ts.map +1 -0
- package/packages/pi/dist/agent-grid.js +162 -0
- package/packages/pi/dist/agent-grid.js.map +1 -0
- package/packages/pi/dist/agent-names.d.ts +43 -0
- package/packages/pi/dist/agent-names.d.ts.map +1 -0
- package/packages/pi/dist/agent-names.js +156 -0
- package/packages/pi/dist/agent-names.js.map +1 -0
- package/packages/pi/dist/autoresearch.d.ts +15 -0
- package/packages/pi/dist/autoresearch.d.ts.map +1 -0
- package/packages/pi/dist/autoresearch.js +372 -0
- package/packages/pi/dist/autoresearch.js.map +1 -0
- package/packages/pi/dist/bookmarks.d.ts +15 -0
- package/packages/pi/dist/bookmarks.d.ts.map +1 -0
- package/packages/pi/dist/bookmarks.js +77 -0
- package/packages/pi/dist/bookmarks.js.map +1 -0
- package/packages/pi/dist/context.d.ts +17 -0
- package/packages/pi/dist/context.d.ts.map +1 -0
- package/packages/pi/dist/context.js +152 -0
- package/packages/pi/dist/context.js.map +1 -0
- package/packages/pi/dist/crm-tool.d.ts +12 -0
- package/packages/pi/dist/crm-tool.d.ts.map +1 -0
- package/packages/pi/dist/crm-tool.js +58 -0
- package/packages/pi/dist/crm-tool.js.map +1 -0
- package/packages/pi/dist/eval-tool.d.ts +11 -0
- package/packages/pi/dist/eval-tool.d.ts.map +1 -0
- package/packages/pi/dist/eval-tool.js +188 -0
- package/packages/pi/dist/eval-tool.js.map +1 -0
- package/packages/pi/dist/eval.d.ts +12 -0
- package/packages/pi/dist/eval.d.ts.map +1 -0
- package/packages/pi/dist/eval.js +43 -0
- package/packages/pi/dist/eval.js.map +1 -0
- package/packages/pi/dist/footer.d.ts +20 -0
- package/packages/pi/dist/footer.d.ts.map +1 -0
- package/packages/pi/dist/footer.js +222 -0
- package/packages/pi/dist/footer.js.map +1 -0
- package/packages/pi/dist/header.d.ts +17 -0
- package/packages/pi/dist/header.d.ts.map +1 -0
- package/packages/pi/dist/header.js +156 -0
- package/packages/pi/dist/header.js.map +1 -0
- package/packages/pi/dist/hub-resolver.d.ts +11 -0
- package/packages/pi/dist/hub-resolver.d.ts.map +1 -0
- package/packages/pi/dist/hub-resolver.js +58 -0
- package/packages/pi/dist/hub-resolver.js.map +1 -0
- package/packages/pi/dist/hub-tools.d.ts +14 -0
- package/packages/pi/dist/hub-tools.d.ts.map +1 -0
- package/packages/pi/dist/hub-tools.js +266 -0
- package/packages/pi/dist/hub-tools.js.map +1 -0
- package/packages/pi/dist/hud-tool.d.ts +17 -0
- package/packages/pi/dist/hud-tool.d.ts.map +1 -0
- package/packages/pi/dist/hud-tool.js +297 -0
- package/packages/pi/dist/hud-tool.js.map +1 -0
- package/packages/pi/dist/index.d.ts +12 -0
- package/packages/pi/dist/index.d.ts.map +1 -0
- package/packages/pi/dist/index.js +436 -0
- package/packages/pi/dist/index.js.map +1 -0
- package/packages/pi/dist/jfl-resolve.d.ts +29 -0
- package/packages/pi/dist/jfl-resolve.d.ts.map +1 -0
- package/packages/pi/dist/jfl-resolve.js +89 -0
- package/packages/pi/dist/jfl-resolve.js.map +1 -0
- package/packages/pi/dist/journal.d.ts +23 -0
- package/packages/pi/dist/journal.d.ts.map +1 -0
- package/packages/pi/dist/journal.js +250 -0
- package/packages/pi/dist/journal.js.map +1 -0
- package/packages/pi/dist/map-bridge.d.ts +20 -0
- package/packages/pi/dist/map-bridge.d.ts.map +1 -0
- package/packages/pi/dist/map-bridge.js +181 -0
- package/packages/pi/dist/map-bridge.js.map +1 -0
- package/packages/pi/dist/memory-tool.d.ts +11 -0
- package/packages/pi/dist/memory-tool.d.ts.map +1 -0
- package/packages/pi/dist/memory-tool.js +148 -0
- package/packages/pi/dist/memory-tool.js.map +1 -0
- package/packages/pi/dist/notifications.d.ts +15 -0
- package/packages/pi/dist/notifications.d.ts.map +1 -0
- package/packages/pi/dist/notifications.js +65 -0
- package/packages/pi/dist/notifications.js.map +1 -0
- package/packages/pi/dist/onboarding-v1.d.ts +15 -0
- package/packages/pi/dist/onboarding-v1.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v1.js +417 -0
- package/packages/pi/dist/onboarding-v1.js.map +1 -0
- package/packages/pi/dist/onboarding-v2.d.ts +18 -0
- package/packages/pi/dist/onboarding-v2.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v2.js +402 -0
- package/packages/pi/dist/onboarding-v2.js.map +1 -0
- package/packages/pi/dist/onboarding-v3.d.ts +13 -0
- package/packages/pi/dist/onboarding-v3.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v3.js +581 -0
- package/packages/pi/dist/onboarding-v3.js.map +1 -0
- package/packages/pi/dist/peter-parker.d.ts +12 -0
- package/packages/pi/dist/peter-parker.d.ts.map +1 -0
- package/packages/pi/dist/peter-parker.js +162 -0
- package/packages/pi/dist/peter-parker.js.map +1 -0
- package/packages/pi/dist/pivot-tool.d.ts +11 -0
- package/packages/pi/dist/pivot-tool.d.ts.map +1 -0
- package/packages/pi/dist/pivot-tool.js +56 -0
- package/packages/pi/dist/pivot-tool.js.map +1 -0
- package/packages/pi/dist/policy-head-tool.d.ts +15 -0
- package/packages/pi/dist/policy-head-tool.d.ts.map +1 -0
- package/packages/pi/dist/policy-head-tool.js +220 -0
- package/packages/pi/dist/policy-head-tool.js.map +1 -0
- package/packages/pi/dist/portfolio-bridge.d.ts +12 -0
- package/packages/pi/dist/portfolio-bridge.d.ts.map +1 -0
- package/packages/pi/dist/portfolio-bridge.js +81 -0
- package/packages/pi/dist/portfolio-bridge.js.map +1 -0
- package/packages/pi/dist/service-skills.d.ts +15 -0
- package/packages/pi/dist/service-skills.d.ts.map +1 -0
- package/packages/pi/dist/service-skills.js +198 -0
- package/packages/pi/dist/service-skills.js.map +1 -0
- package/packages/pi/dist/session.d.ts +24 -0
- package/packages/pi/dist/session.d.ts.map +1 -0
- package/packages/pi/dist/session.js +394 -0
- package/packages/pi/dist/session.js.map +1 -0
- package/packages/pi/dist/shortcuts.d.ts +11 -0
- package/packages/pi/dist/shortcuts.d.ts.map +1 -0
- package/packages/pi/dist/shortcuts.js +231 -0
- package/packages/pi/dist/shortcuts.js.map +1 -0
- package/packages/pi/dist/startup-briefing.d.ts +13 -0
- package/packages/pi/dist/startup-briefing.d.ts.map +1 -0
- package/packages/pi/dist/startup-briefing.js +271 -0
- package/packages/pi/dist/startup-briefing.js.map +1 -0
- package/packages/pi/dist/stratus-bridge.d.ts +14 -0
- package/packages/pi/dist/stratus-bridge.d.ts.map +1 -0
- package/packages/pi/dist/stratus-bridge.js +104 -0
- package/packages/pi/dist/stratus-bridge.js.map +1 -0
- package/packages/pi/dist/subway-mesh.d.ts +88 -0
- package/packages/pi/dist/subway-mesh.d.ts.map +1 -0
- package/packages/pi/dist/subway-mesh.js +813 -0
- package/packages/pi/dist/subway-mesh.js.map +1 -0
- package/packages/pi/dist/synopsis-tool.d.ts +12 -0
- package/packages/pi/dist/synopsis-tool.d.ts.map +1 -0
- package/packages/pi/dist/synopsis-tool.js +84 -0
- package/packages/pi/dist/synopsis-tool.js.map +1 -0
- package/packages/pi/dist/tool-renderers.d.ts +55 -0
- package/packages/pi/dist/tool-renderers.d.ts.map +1 -0
- package/packages/pi/dist/tool-renderers.js +349 -0
- package/packages/pi/dist/tool-renderers.js.map +1 -0
- package/packages/pi/dist/training-buffer-tool.d.ts +16 -0
- package/packages/pi/dist/training-buffer-tool.d.ts.map +1 -0
- package/packages/pi/dist/training-buffer-tool.js +319 -0
- package/packages/pi/dist/training-buffer-tool.js.map +1 -0
- package/packages/pi/dist/types.d.ts +195 -0
- package/packages/pi/dist/types.d.ts.map +1 -0
- package/packages/pi/dist/types.js +11 -0
- package/packages/pi/dist/types.js.map +1 -0
- package/packages/pi/extensions/session.ts +115 -8
- package/packages/pi/extensions/training-buffer-tool.ts +15 -8
- package/packages/pi/extensions/types.ts +1 -0
- package/packages/pi/package.json +2 -3
- package/scripts/postinstall.js +52 -4
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stratus Bridge Extension
|
|
3
|
+
*
|
|
4
|
+
* Wires the RL prediction loop: predict before agent starts, resolve after,
|
|
5
|
+
* emit training tuples, and buffer for nightly policy head training.
|
|
6
|
+
*
|
|
7
|
+
* @purpose RL flywheel — predict/resolve per agent turn, emit training tuples to Stratus
|
|
8
|
+
*/
|
|
9
|
+
import { appendFileSync, mkdirSync } from "fs";
|
|
10
|
+
import { join } from "path";
|
|
11
|
+
import { homedir } from "os";
|
|
12
|
+
import { jflImport } from "./jfl-resolve.js";
|
|
13
|
+
import { emitCustomEvent } from "./map-bridge.js";
|
|
14
|
+
const TRAINING_BUFFER = join(homedir(), ".jfl", "training-buffer.jsonl");
|
|
15
|
+
let projectRoot = "";
|
|
16
|
+
const sessionPredictions = new Map();
|
|
17
|
+
// Store current prediction per session (replaces ctx.session.custom)
|
|
18
|
+
let currentPredictionId;
|
|
19
|
+
let currentPredictionKey;
|
|
20
|
+
function getTrainingBufferPath() {
|
|
21
|
+
const dir = join(homedir(), ".jfl");
|
|
22
|
+
mkdirSync(dir, { recursive: true });
|
|
23
|
+
return TRAINING_BUFFER;
|
|
24
|
+
}
|
|
25
|
+
async function getPredictor(root) {
|
|
26
|
+
try {
|
|
27
|
+
// @ts-ignore — resolved from jfl package at runtime
|
|
28
|
+
const { Predictor } = await jflImport("predictor");
|
|
29
|
+
return new Predictor(root);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function buildProposal(event) {
|
|
36
|
+
return {
|
|
37
|
+
description: event.prompt?.slice(0, 200) ?? "agent task",
|
|
38
|
+
change_type: "feature",
|
|
39
|
+
scope: "medium",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export async function onAgentStart(ctx, event) {
|
|
43
|
+
if (!projectRoot)
|
|
44
|
+
return;
|
|
45
|
+
const predictor = await getPredictor(projectRoot);
|
|
46
|
+
if (!predictor)
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
const prediction = await predictor.predict({
|
|
50
|
+
proposal: buildProposal(event),
|
|
51
|
+
current_score: 0,
|
|
52
|
+
goal: "improve project quality",
|
|
53
|
+
recent_trajectory: [],
|
|
54
|
+
});
|
|
55
|
+
const key = `${ctx.session.id}:${Date.now()}`;
|
|
56
|
+
sessionPredictions.set(key, prediction.prediction_id);
|
|
57
|
+
currentPredictionId = prediction.prediction_id;
|
|
58
|
+
currentPredictionKey = key;
|
|
59
|
+
ctx.log(`Stratus prediction: ${prediction.recommendation} (Δ${prediction.predicted_delta.toFixed(3)})`, "debug");
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
ctx.log(`Stratus predict failed: ${err}`, "debug");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export async function onAgentEnd(ctx, event) {
|
|
66
|
+
if (!projectRoot)
|
|
67
|
+
return;
|
|
68
|
+
const predictionId = currentPredictionId;
|
|
69
|
+
if (!predictionId)
|
|
70
|
+
return;
|
|
71
|
+
const predictor = await getPredictor(projectRoot);
|
|
72
|
+
if (!predictor)
|
|
73
|
+
return;
|
|
74
|
+
try {
|
|
75
|
+
const actualDelta = event.exitReason === "success" ? 0.05 : 0.0;
|
|
76
|
+
await predictor.resolve(predictionId, actualDelta, {
|
|
77
|
+
eval_run_id: ctx.session.id,
|
|
78
|
+
resolved_at: new Date().toISOString(),
|
|
79
|
+
});
|
|
80
|
+
const tuple = {
|
|
81
|
+
ts: new Date().toISOString(),
|
|
82
|
+
session_id: ctx.session.id,
|
|
83
|
+
prediction_id: predictionId,
|
|
84
|
+
actual_delta: actualDelta,
|
|
85
|
+
turn_count: event.turnCount ?? 0,
|
|
86
|
+
model: event.model,
|
|
87
|
+
exit_reason: event.exitReason,
|
|
88
|
+
};
|
|
89
|
+
appendFileSync(getTrainingBufferPath(), JSON.stringify(tuple) + "\n");
|
|
90
|
+
await emitCustomEvent(ctx, "training:tuple:added", tuple);
|
|
91
|
+
currentPredictionId = undefined;
|
|
92
|
+
currentPredictionKey = undefined;
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
ctx.log(`Stratus resolve failed: ${err}`, "debug");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function setProjectRoot(root) {
|
|
99
|
+
projectRoot = root;
|
|
100
|
+
}
|
|
101
|
+
export function initStratusBridge(root) {
|
|
102
|
+
projectRoot = root;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=stratus-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stratus-bridge.js","sourceRoot":"","sources":["../extensions/stratus-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subway Mesh Extension
|
|
3
|
+
*
|
|
4
|
+
* WebSocket client for the Subway P2P agent mesh. Provides real-time
|
|
5
|
+
* messaging, RPC calls, pub/sub broadcasting, and name resolution
|
|
6
|
+
* between Pi agent sessions connected to a Subway relay.
|
|
7
|
+
*
|
|
8
|
+
* Registers tools: subway_send, subway_call, subway_resolve,
|
|
9
|
+
* subway_rpc_respond, subway_inbox, subway_subscribe, subway_unsubscribe,
|
|
10
|
+
* subway_broadcast.
|
|
11
|
+
*
|
|
12
|
+
* Registers command: /subway (status, connect, disconnect, send, etc.)
|
|
13
|
+
*
|
|
14
|
+
* Provides TUI integration: status bar indicator, inbox widget,
|
|
15
|
+
* and agent context injection on each turn.
|
|
16
|
+
*
|
|
17
|
+
* @purpose Subway P2P mesh client — messaging, RPC, pub/sub tools + TUI
|
|
18
|
+
*/
|
|
19
|
+
import type { PiContext, JflConfig } from "./types.js";
|
|
20
|
+
export interface SubwayMessage {
|
|
21
|
+
ts: number;
|
|
22
|
+
from: string;
|
|
23
|
+
payload: string;
|
|
24
|
+
}
|
|
25
|
+
export interface SubwayConfig {
|
|
26
|
+
name?: string;
|
|
27
|
+
relay?: string;
|
|
28
|
+
debug?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface CallResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
payload: string;
|
|
33
|
+
error: string;
|
|
34
|
+
}
|
|
35
|
+
type MessageHandler = (type: string, msg: Record<string, unknown>) => void;
|
|
36
|
+
export declare function loadConfig(): SubwayConfig;
|
|
37
|
+
export declare function saveConfig(cfg: SubwayConfig): void;
|
|
38
|
+
export declare function normalizeName(name: string): string;
|
|
39
|
+
export declare function displayName(name: string): string;
|
|
40
|
+
export declare class SubwayClient {
|
|
41
|
+
name: string;
|
|
42
|
+
relayUrl: string;
|
|
43
|
+
registered: boolean;
|
|
44
|
+
inbox: SubwayMessage[];
|
|
45
|
+
private ws;
|
|
46
|
+
private WebSocketCtor;
|
|
47
|
+
private debug;
|
|
48
|
+
private intentionalDisconnect;
|
|
49
|
+
private reconnectTimer;
|
|
50
|
+
private keepaliveTimer;
|
|
51
|
+
private healthCheckTimer;
|
|
52
|
+
private registeredPeerId;
|
|
53
|
+
private pending;
|
|
54
|
+
private _subscriptions;
|
|
55
|
+
private onMessage;
|
|
56
|
+
private onStatusChange;
|
|
57
|
+
get subscriptions(): ReadonlySet<string>;
|
|
58
|
+
constructor(config: SubwayConfig);
|
|
59
|
+
onMessageReceived(handler: MessageHandler): void;
|
|
60
|
+
onStatus(handler: () => void): void;
|
|
61
|
+
private ensureWs;
|
|
62
|
+
connect(): Promise<void>;
|
|
63
|
+
disconnect(): void;
|
|
64
|
+
private startHealthCheck;
|
|
65
|
+
private runHealthCheck;
|
|
66
|
+
private forceReconnect;
|
|
67
|
+
private log;
|
|
68
|
+
connectAndWait(timeoutMs?: number): Promise<boolean>;
|
|
69
|
+
send(to: string, text: string): boolean;
|
|
70
|
+
call(to: string, method: string, payload?: string, signal?: AbortSignal): Promise<CallResult>;
|
|
71
|
+
resolve(targetName: string, signal?: AbortSignal): Promise<string>;
|
|
72
|
+
respondToRpc(correlationId: string, success: boolean, payload: string, error?: string): boolean;
|
|
73
|
+
subscribe(topic: string): boolean;
|
|
74
|
+
unsubscribe(topic: string): boolean;
|
|
75
|
+
broadcast(topic: string, text: string): boolean;
|
|
76
|
+
setName(name: string): void;
|
|
77
|
+
private isConnected;
|
|
78
|
+
private wsSend;
|
|
79
|
+
private pushInbox;
|
|
80
|
+
private dispatch;
|
|
81
|
+
}
|
|
82
|
+
export declare function getMeshClient(): SubwayClient | null;
|
|
83
|
+
export declare function isStandaloneSubwayLoaded(): boolean;
|
|
84
|
+
export declare function setupSubwayMesh(ctx: PiContext, _config: JflConfig): Promise<void>;
|
|
85
|
+
export declare function injectMeshContext(): string | undefined;
|
|
86
|
+
export declare function onMeshShutdown(): void;
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=subway-mesh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subway-mesh.d.ts","sourceRoot":"","sources":["../extensions/subway-mesh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAW,MAAM,YAAY,CAAA;AAI/D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAQD,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAmB1E,wBAAgB,UAAU,IAAI,YAAY,CAOzC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAGlD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAID,qBAAa,YAAY;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,UAAQ;IAClB,KAAK,EAAE,aAAa,EAAE,CAAK;IAE3B,OAAO,CAAC,EAAE,CAAsC;IAChD,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,cAAc,CAA4B;IAElD,IAAI,aAAa,IAAI,WAAW,CAAC,MAAM,CAAC,CAEvC;gBAEW,MAAM,EAAE,YAAY;IAMhC,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;YAIrB,QAAQ;IAOhB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC9B,UAAU,IAAI,IAAI;IAiBlB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,GAAG;IAML,cAAc,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBxD,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAKvC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAqB7F,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBlE,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAW/F,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOjC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOnC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ;CAiFjB;AAMD,wBAAgB,aAAa,IAAI,YAAY,GAAG,IAAI,CAEnD;AAMD,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ZvF;AAID,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAQtD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
|